create working file completion
This commit is contained in:
parent
f12a10d888
commit
639e88262e
1 changed files with 40 additions and 16 deletions
|
@ -76,11 +76,17 @@ def conditionally_emit_file_completion(action: Action):
|
|||
'''
|
||||
if not action.metavar:
|
||||
return ''
|
||||
|
||||
|
||||
args = ' '.join(action.option_strings)
|
||||
|
||||
return dedent(f'''
|
||||
complete -c borgmatic -a {args} -Fr -n "__borgmatic_last_arg {args}"''')
|
||||
|
||||
return dedent(
|
||||
f'''
|
||||
complete -c borgmatic -a '{args}' -Fr -n "__borgmatic_last_arg {args}"'''
|
||||
)
|
||||
|
||||
|
||||
def dedent_strip_as_tuple(string: str):
|
||||
return (dedent(string).strip("\n"),)
|
||||
|
||||
|
||||
def fish_completion():
|
||||
|
@ -94,22 +100,40 @@ def fish_completion():
|
|||
|
||||
# Avert your eyes.
|
||||
return '\n'.join(
|
||||
(
|
||||
'function __borgmatic_check_version',
|
||||
' set this_filename (status current-filename)',
|
||||
' set this_script (cat $this_filename 2> /dev/null)',
|
||||
' set installed_script (borgmatic --fish-completion 2> /dev/null)',
|
||||
' if [ "$this_script" != "$installed_script" ] && [ "$installed_script" != "" ]',
|
||||
f''' echo "{upgrade_message(
|
||||
dedent_strip_as_tuple(
|
||||
f'''
|
||||
function __borgmatic_check_version
|
||||
set this_filename (status current-filename)
|
||||
set this_script (cat $this_filename 2> /dev/null)
|
||||
set installed_script (borgmatic --fish-completion 2> /dev/null)
|
||||
if [ "$this_script" != "$installed_script" ] && [ "$installed_script" != "" ]
|
||||
echo "{upgrade_message(
|
||||
'fish',
|
||||
'borgmatic --fish-completion | sudo tee $this_filename',
|
||||
'$this_filename',
|
||||
)}"''',
|
||||
' end',
|
||||
'end',
|
||||
'__borgmatic_check_version &',
|
||||
)}"
|
||||
end
|
||||
end
|
||||
__borgmatic_check_version &
|
||||
|
||||
function __borgmatic_last_arg --description 'Check if any of the given arguments are the last on the command line'
|
||||
set -l all_args (commandline -poc)
|
||||
# premature optimization to avoid iterating all args if there aren't enough
|
||||
# to have a last arg beyond borgmatic
|
||||
if [ (count $all_args) -lt 2 ]
|
||||
return 1
|
||||
end
|
||||
for arg in $argv
|
||||
if [ "$arg" = "$all_args[-1]" ]
|
||||
return 0
|
||||
end
|
||||
end
|
||||
return 1
|
||||
end
|
||||
|
||||
set --local subparser_condition "not __fish_seen_subcommand_from {all_subparsers}"
|
||||
'''
|
||||
)
|
||||
+ (f'''set --local subparser_condition "not __fish_seen_subcommand_from {all_subparsers}"''',)
|
||||
+ ('\n# subparser completions',)
|
||||
+ tuple(
|
||||
f'''complete -c borgmatic -f -n "$subparser_condition" -a '{action_name}' -d {shlex.quote(subparser.description)}'''
|
||||
|
|
Loading…
Reference in a new issue