فهرست منبع

start work on completion

Isaac 2 سال پیش
والد
کامیت
0009471f67
3فایلهای تغییر یافته به همراه31 افزوده شده و 0 حذف شده
  1. 6 0
      borgmatic/commands/arguments.py
  2. 3 0
      borgmatic/commands/borgmatic.py
  3. 22 0
      borgmatic/commands/completion.py

+ 6 - 0
borgmatic/commands/arguments.py

@@ -207,6 +207,12 @@ def make_parsers():
         action='store_true',
         help='Show bash completion script and exit',
     )
+    global_group.add_argument(
+        '--fish-completion',
+        default=False,
+        action='store_true',
+        help='Show fish completion script and exit',
+    )
     global_group.add_argument(
         '--version',
         dest='version',

+ 3 - 0
borgmatic/commands/borgmatic.py

@@ -715,6 +715,9 @@ def main():  # pragma: no cover
     if global_arguments.bash_completion:
         print(borgmatic.commands.completion.bash_completion())
         sys.exit(0)
+    if global_arguments.fish_completion:
+        print(borgmatic.commands.completion.fish_completion())
+        sys.exit(0)
 
     config_filenames = tuple(collect.collect_config_filenames(global_arguments.config_paths))
     configs, parse_logs = load_configurations(

+ 22 - 0
borgmatic/commands/completion.py

@@ -55,3 +55,25 @@ def bash_completion():
             '\ncomplete -o bashdefault -o default -F complete_borgmatic borgmatic',
         )
     )
+
+def fish_completion():
+    '''
+    Return a fish completion script for the borgmatic command. Produce this by introspecting
+    borgmatic's command-line argument parsers.
+    '''
+    top_level_parser, subparsers = arguments.make_parsers()
+    global_flags = parser_flags(top_level_parser)
+    actions = ' '.join(subparsers.choices.keys())
+
+    # Avert your eyes.
+    return '\n'.join(
+        (
+            'function __borgmatic_check_version',
+            '    set this_script (cat "$BASH_SOURCE" 2> /dev/null)',
+            '    set installed_script (borgmatic --bash-completion 2> /dev/null)',
+            '    if [ "$this_script" != "$installed_script" ] && [ "$installed_script" != "" ]',
+            f'        echo "{UPGRADE_MESSAGE}"',
+            '    end',
+            'end',
+            'function __borgmatic_complete',
+        ))