mirror of
https://github.com/borgbackup/borg.git
synced 2025-03-11 14:48:22 +00:00
Tab completion support for additional archives for 'borg delete'
Bash and Fish tab completions now too support more than just one archive provided for 'borg delete'.
This commit is contained in:
parent
699256edbd
commit
4346c4e85b
2 changed files with 28 additions and 19 deletions
|
@ -143,32 +143,36 @@ _borg()
|
|||
return 0
|
||||
fi
|
||||
|
||||
# Get the repository name if available
|
||||
# If there is a space before the "::" it means that no repository name was typed,
|
||||
# so probably $BORG_REPO was set and we can still list the archives.
|
||||
local repository_name=`expr match "${COMP_LINE}" "\(.*\)::"`
|
||||
repository_name=${repository_name##* }
|
||||
|
||||
# Listing archives.
|
||||
# Since "::" is treated as separate word in bash,
|
||||
# Since "::" is treated as separate word in Bash,
|
||||
# it is $cur when the cursor is right behind it
|
||||
# and $prev if the user has started to type an archive name.
|
||||
local repository_name="" # If set, we'll list the archives
|
||||
local typed_word=""
|
||||
local please_list_the_archives=false
|
||||
if [[ ${cur} == "::" ]] ; then
|
||||
repository_name=${prev}
|
||||
please_list_the_archives=true
|
||||
fi
|
||||
if [[ ${prev} == "::" ]] ; then
|
||||
repository_name=${prevprev}
|
||||
please_list_the_archives=true
|
||||
typed_word=${cur}
|
||||
fi
|
||||
# Second archive listing for borg diff
|
||||
if [[ ${COMP_LINE} =~ ^.*\ diff\ .*::[^\ ]+\ ${cur}$ ]] ; then
|
||||
repository_name=`expr match "${COMP_LINE}" "\(.*\)::"`
|
||||
repository_name=${repository_name##* }
|
||||
please_list_the_archives=true
|
||||
typed_word=${cur}
|
||||
fi
|
||||
if [[ ${repository_name} != "" ]] ; then
|
||||
if [[ ${COMP_LINE} == *" ::"* ]] ; then
|
||||
# There is a space before the "::"
|
||||
# which means that no repository name was typed,
|
||||
# so probably $BORG_REPO is set.
|
||||
repository_name=""
|
||||
fi
|
||||
# Additional archive listing for borg delete
|
||||
if [[ ${COMP_LINE} =~ ^.*\ delete\ .*::[^\ ]+.*${cur}$ ]] ; then
|
||||
please_list_the_archives=true
|
||||
typed_word=${cur}
|
||||
fi
|
||||
if [[ $please_list_the_archives = true ]] ; then
|
||||
local archive_list=$(borg list --short "${repository_name}" 2>/dev/null)
|
||||
COMPREPLY=( $(compgen -W "${archive_list}" -- "${typed_word}" ) )
|
||||
return 0
|
||||
|
|
|
@ -360,7 +360,7 @@ function __fish_borg_list_repos_or_archives
|
|||
if string match --quiet --regex '.*::' '"'(commandline --current-token)'"'
|
||||
# If the current token contains "::" then list the archives:
|
||||
set -l repository_name (string replace --regex '::.*' '' (commandline --current-token))
|
||||
borg list --format="$repository_name::{archive}{NEWLINE}" "$repository_name" ^/dev/null
|
||||
borg list --format="$repository_name::{archive}{TAB}{comment}{NEWLINE}" "$repository_name" ^/dev/null
|
||||
else
|
||||
# Otherwise list the repositories, directories and user@host entries:
|
||||
set -l directories (commandline --cut-at-cursor --current-token)*/
|
||||
|
@ -378,15 +378,20 @@ end
|
|||
complete -c borg -f -n "__fish_borg_is_argument_n 2" -a '(__fish_borg_list_repos_or_archives)'
|
||||
|
||||
|
||||
# Second archive listing for borg diff
|
||||
# Additional archive listings
|
||||
|
||||
function __fish_borg_is_diff_second_archive
|
||||
return (string match --quiet --regex ' diff .*::[^ ]+ '(commandline --current-token)'$' (commandline))
|
||||
end
|
||||
|
||||
function __fish_borg_list_diff_archives
|
||||
set -l repo_matches (string match --regex '([^ ]*)::' (commandline))
|
||||
borg list --format="{archive}{NEWLINE}" "$repo_matches[2]" ^/dev/null
|
||||
function __fish_borg_is_delete_additional_archive
|
||||
return (string match --quiet --regex ' delete .*::[^ ]+ ' (commandline))
|
||||
end
|
||||
|
||||
complete -c borg -f -n __fish_borg_is_diff_second_archive -a '(__fish_borg_list_diff_archives)'
|
||||
function __fish_borg_list_only_archives
|
||||
set -l repo_matches (string match --regex '([^ ]*)::' (commandline))
|
||||
borg list --format="{archive}{TAB}{comment}{NEWLINE}" "$repo_matches[2]" ^/dev/null
|
||||
end
|
||||
|
||||
complete -c borg -f -n __fish_borg_is_diff_second_archive -a '(__fish_borg_list_only_archives)'
|
||||
complete -c borg -f -n __fish_borg_is_delete_additional_archive -a '(__fish_borg_list_only_archives)'
|
||||
|
|
Loading…
Add table
Reference in a new issue