1212from typing import List
1313from os import path
1414from textwrap import dedent
15+ from shutil import get_terminal_size
1516
1617from xdg .BaseDirectory import xdg_config_home
1718
@@ -43,44 +44,39 @@ def main(argv:List[str]=sys.argv[1:]) -> int:
4344
4445 # Init subcommands
4546 subparsers = parser .add_subparsers ()
46- mgmtparser = subparsers .add_parser ('stat' ,
47- aliases = ['s' ],
47+ mgmtparser = subparsers .add_parser ('stat' , aliases = ['s' ],
4848 formatter_class = HelpFormatter ,
4949 help = 'snippets statistic' )
5050 mgmtparser .set_defaults (func = _on_command_mgmt )
5151
52- listparser = subparsers .add_parser ('list' ,
53- aliases = ['l' ],
52+ listparser = subparsers .add_parser ('list' , aliases = ['l' ],
5453 formatter_class = HelpFormatter ,
5554 help = 'list snippet indexes, columns of indexes: %s' %
5655 VISIABLE_COLUMNS )
57- listparser .add_argument ('--kinds' , '-k' ,
58- action = 'store_true' ,
59- default = '*' ,
56+ listparser .add_argument ('--kinds' , '-k' , type = str , nargs = 1 , default = '*' ,
6057 help = 'list specified kinds only' )
61- listparser .add_argument ('--width' , '-w' ,
62- action = 'store_true' ,
63- default = 120 ,
58+ listparser .add_argument ('--width' , '-w' , nargs = 1 , type = int ,
59+ default = get_terminal_size ((120 , 0 )).columns ,
6460 help = 'width in characters of output' )
6561 listparser .set_defaults (func = _on_command_list )
6662
67- getparser = subparsers .add_parser ('get' ,
68- aliases = ['g' ],
63+ getparser = subparsers .add_parser ('get' , aliases = ['g' ],
6964 formatter_class = HelpFormatter ,
7065 help = 'get information of snippet by index ID' )
71- getparser .add_argument ('--file' , '-f' ,
72- action = 'store_true' ,
66+ getparser .add_argument ('--file' , '-f' , action = 'store_true' ,
7367 help = 'get source file path of snippet' )
74- getparser .add_argument ('--text' , '-t' ,
75- action = 'store_true' ,
76- default = True ,
68+ getparser .add_argument ('--text' , '-t' , action = 'store_true' , default = True ,
7769 help = 'get source reStructuredText of snippet' )
78- getparser .add_argument ('index_id' ,
79- type = str ,
80- nargs = '+' ,
81- help = 'index ID' )
70+ getparser .add_argument ('index_id' , type = str , nargs = '+' , help = 'index ID' )
8271 getparser .set_defaults (func = _on_command_get )
8372
73+ igparser = subparsers .add_parser ('integration' , aliases = ['i' ],
74+ formatter_class = HelpFormatter ,
75+ help = 'integration related commands' )
76+ igparser .add_argument ('--zsh' , '-z' , action = 'store_true' , help = 'dump zsh plugin' )
77+ igparser .set_defaults (func = _on_command_integration , parser = igparser )
78+
79+
8480 # Parse command line arguments
8581 args = parser .parse_args (argv )
8682
@@ -100,6 +96,8 @@ def main(argv:List[str]=sys.argv[1:]) -> int:
10096 # Call subcommand
10197 if hasattr (args , 'func' ):
10298 args .func (args )
99+ else :
100+ parser .print_help ()
103101
104102
105103def _on_command_mgmt (args :argparse .Namespace ):
@@ -133,5 +131,14 @@ def _on_command_get(args:argparse.Namespace):
133131 print ('\n ' .join (item .snippet .text ()))
134132
135133
134+ def _on_command_integration (args :argparse .Namespace ):
135+ # NOTE: files are included by MANIFEST.in
136+ if args .zsh :
137+ with open ('integration/plugin.zsh' , 'r' ) as f :
138+ print (f .read ())
139+ return
140+ args .parser .print_help ()
141+
142+
136143if __name__ == '__main__' :
137144 sys .exit (main ())
0 commit comments