44~~~~~~~~~
55
66"""
7+ import argparse
78import logging
89import os
910import sys
1011
11- import click
12-
1312from libtmux .__about__ import __version__ as libtmux_version
1413from libtmux .common import has_minimum_version
1514from libtmux .exc import TmuxCommandNotFound
16- from tmuxp .cli .ls import command_ls
1715
1816from .. import exc
1917from ..__about__ import __version__
2018from ..log import setup_logger
21- from .convert import command_convert
22- from .debug_info import command_debug_info
23- from .edit import command_edit
24- from .freeze import command_freeze
25- from .import_config import command_import
26- from .load import command_load
27- from .shell import command_shell
19+ from .convert import command_convert , create_convert_subparser
20+ from .debug_info import command_debug_info , create_debug_info_subparser
21+ from .edit import command_edit , create_edit_subparser
22+ from .freeze import command_freeze , create_freeze_subparser
23+ from .import_config import (
24+ command_import_teamocil ,
25+ command_import_tmuxinator ,
26+ create_import_subparser ,
27+ )
28+ from .load import command_load , create_load_subparser
29+ from .ls import command_ls , create_ls_subparser
30+ from .shell import command_shell , create_shell_subparser
2831from .utils import tmuxp_echo
2932
3033logger = logging .getLogger (__name__ )
3134
3235
33- @click .group (context_settings = {"obj" : {}, "help_option_names" : ["-h" , "--help" ]})
34- @click .version_option (
35- __version__ ,
36- "-V" ,
37- "--version" ,
38- message = f"%(prog)s %(version)s, libtmux { libtmux_version } " ,
39- )
40- @click .option (
41- "--log-level" ,
42- default = "INFO" ,
43- help = "Log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)" ,
44- )
45- def cli (log_level ):
36+ def create_parser () -> argparse .ArgumentParser :
37+ parser = argparse .ArgumentParser (prog = "tmuxp" )
38+ parser .add_argument (
39+ "--version" ,
40+ "-V" ,
41+ action = "version" ,
42+ version = f"%(prog)s { __version__ } , libtmux { libtmux_version } " ,
43+ )
44+ parser .add_argument (
45+ "--log-level" ,
46+ action = "store" ,
47+ default = "INFO" ,
48+ help = "log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)" ,
49+ )
50+ subparsers = parser .add_subparsers (dest = "subparser_name" )
51+ load_parser = subparsers .add_parser ("load" , help = "load tmuxp workspaces" )
52+ create_load_subparser (load_parser )
53+ shell_parser = subparsers .add_parser (
54+ "shell" , help = "launch python shell for tmux server, session, window and pane"
55+ )
56+ create_shell_subparser (shell_parser )
57+ import_parser = subparsers .add_parser (
58+ "import" , help = "import configurations from teamocil and tmuxinator."
59+ )
60+ create_import_subparser (import_parser )
61+
62+ convert_parser = subparsers .add_parser (
63+ "convert" , help = "convert configs between yaml and json."
64+ )
65+ create_convert_subparser (convert_parser )
66+
67+ debug_info_parser = subparsers .add_parser (
68+ "debug-info" , help = "print out all diagnostic info"
69+ )
70+ create_debug_info_subparser (debug_info_parser )
71+
72+ ls_parser = subparsers .add_parser ("ls" , help = "list sessions in config directory" )
73+ create_ls_subparser (ls_parser )
74+
75+ edit_parser = subparsers .add_parser ("edit" , help = "run $EDITOR on config" )
76+ create_edit_subparser (edit_parser )
77+
78+ freeze_parser = subparsers .add_parser (
79+ "freeze" , help = "freeze a live tmux session to a tmuxp config"
80+ )
81+ create_freeze_subparser (freeze_parser )
82+
83+ return parser
84+
85+
86+ def cli (args = None ):
4687 """Manage tmux sessions.
4788
4889 Pass the "--help" argument to any command to see detailed help.
4990 See detailed documentation and examples at:
5091 http://tmuxp.git-pull.com/"""
92+
5193 try :
5294 has_minimum_version ()
5395 except TmuxCommandNotFound :
@@ -56,7 +98,84 @@ def cli(log_level):
5698 except exc .TmuxpException as e :
5799 tmuxp_echo (e , err = True )
58100 sys .exit ()
59- setup_logger (logger = logger , level = log_level .upper ())
101+
102+ parser = create_parser ()
103+ args = parser .parse_args (args )
104+
105+ setup_logger (logger = logger , level = args .log_level .upper ())
106+
107+ if args .subparser_name is None :
108+ parser .print_help ()
109+ return
110+ elif args .subparser_name == "load" :
111+ command_load (
112+ config_file = args .config_file ,
113+ socket_name = args .socket_name ,
114+ socket_path = args .socket_path ,
115+ tmux_config_file = args .tmux_config_file ,
116+ new_session_name = args .new_session_name ,
117+ answer_yes = args .answer_yes ,
118+ detached = args .detached ,
119+ append = args .append ,
120+ colors = args .colors ,
121+ log_file = args .log_file ,
122+ parser = parser ,
123+ )
124+ elif args .subparser_name == "shell" :
125+ command_shell (
126+ session_name = args .session_name ,
127+ window_name = args .window_name ,
128+ socket_name = args .socket_name ,
129+ socket_path = args .socket_path ,
130+ command = args .command ,
131+ shell = args .shell ,
132+ use_pythonrc = args .use_pythonrc ,
133+ use_vi_mode = args .use_vi_mode ,
134+ parser = parser ,
135+ )
136+ elif args .subparser_name == "import" :
137+ import_subparser_name = getattr (args , "import_subparser_name" , None )
138+ if import_subparser_name is None :
139+ parser .print_help ()
140+ return
141+ elif import_subparser_name == "teamocil" :
142+ command_import_teamocil (
143+ config_file = args .config_file ,
144+ parser = parser ,
145+ )
146+ elif import_subparser_name == "tmuxinator" :
147+ command_import_tmuxinator (
148+ config_file = args .config_file ,
149+ parser = parser ,
150+ )
151+ elif args .subparser_name == "convert" :
152+ command_convert (
153+ config_file = args .config_file ,
154+ answer_yes = args .answer_yes ,
155+ parser = parser ,
156+ )
157+ elif args .subparser_name == "debug-info" :
158+ command_debug_info (parser = parser )
159+
160+ elif args .subparser_name == "edit" :
161+ command_edit (
162+ config_file = args .config_file ,
163+ parser = parser ,
164+ )
165+ elif args .subparser_name == "freeze" :
166+ command_freeze (
167+ session_name = args .session_name ,
168+ socket_name = args .socket_name ,
169+ socket_path = args .socket_path ,
170+ config_format = args .config_format ,
171+ save_to = args .save_to ,
172+ answer_yes = args .answer_yes ,
173+ quiet = args .quiet ,
174+ force = args .force ,
175+ parser = parser ,
176+ )
177+ elif args .subparser_name == "ls" :
178+ command_ls (parser = parser )
60179
61180
62181def startup (config_dir ):
@@ -70,14 +189,3 @@ def startup(config_dir):
70189
71190 if not os .path .exists (config_dir ):
72191 os .makedirs (config_dir )
73-
74-
75- # Register sub-commands here
76- cli .add_command (command_convert )
77- cli .add_command (command_edit )
78- cli .add_command (command_debug_info )
79- cli .add_command (command_load )
80- cli .add_command (command_ls )
81- cli .add_command (command_freeze )
82- cli .add_command (command_shell )
83- cli .add_command (command_import )
0 commit comments