4
4
~~~~~~~~~
5
5
6
6
"""
7
+ import argparse
7
8
import logging
8
9
import os
9
10
import sys
10
11
11
- import click
12
-
13
12
from libtmux .__about__ import __version__ as libtmux_version
14
13
from libtmux .common import has_minimum_version
15
14
from libtmux .exc import TmuxCommandNotFound
16
- from tmuxp .cli .ls import command_ls
17
15
18
16
from .. import exc
19
17
from ..__about__ import __version__
20
18
from ..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
28
31
from .utils import tmuxp_echo
29
32
30
33
logger = logging .getLogger (__name__ )
31
34
32
35
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 ):
46
87
"""Manage tmux sessions.
47
88
48
89
Pass the "--help" argument to any command to see detailed help.
49
90
See detailed documentation and examples at:
50
91
http://tmuxp.git-pull.com/"""
92
+
51
93
try :
52
94
has_minimum_version ()
53
95
except TmuxCommandNotFound :
@@ -56,7 +98,84 @@ def cli(log_level):
56
98
except exc .TmuxpException as e :
57
99
tmuxp_echo (e , err = True )
58
100
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 )
60
179
61
180
62
181
def startup (config_dir ):
@@ -70,14 +189,3 @@ def startup(config_dir):
70
189
71
190
if not os .path .exists (config_dir ):
72
191
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