summaryrefslogtreecommitdiffstats
path: root/scripts
diff options
context:
space:
mode:
authorSanskritFritz <SanskritFritz+github@gmail.com>2021-01-26 22:43:05 +0100
committerSanskritFritz <SanskritFritz+github@gmail.com>2021-01-26 22:43:05 +0100
commit4346c4e85b05be47df64405c90ec4353320d96f7 (patch)
tree613b6200fb596ea2659a3c406409b48bd996d84d /scripts
parent699256edbd072c60b995c493c2146aabe27905bb (diff)
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'.
Diffstat (limited to 'scripts')
-rw-r--r--scripts/shell_completions/bash/borg30
-rw-r--r--scripts/shell_completions/fish/borg.fish15
2 files changed, 27 insertions, 18 deletions
diff --git a/scripts/shell_completions/bash/borg b/scripts/shell_completions/bash/borg
index 9d4303e3d..0bca21b5e 100644
--- a/scripts/shell_completions/bash/borg
+++ b/scripts/shell_completions/bash/borg
@@ -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
+ # Additional archive listing for borg delete
+ if [[ ${COMP_LINE} =~ ^.*\ delete\ .*::[^\ ]+.*${cur}$ ]] ; then
+ 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
+ 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
diff --git a/scripts/shell_completions/fish/borg.fish b/scripts/shell_completions/fish/borg.fish
index 89d76c750..6ba7df3ef 100644
--- a/scripts/shell_completions/fish/borg.fish
+++ b/scripts/shell_completions/fish/borg.fish
@@ -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
+function __fish_borg_is_delete_additional_archive
+ return (string match --quiet --regex ' delete .*::[^ ]+ ' (commandline))
+end
+
+function __fish_borg_list_only_archives
set -l repo_matches (string match --regex '([^ ]*)::' (commandline))
- borg list --format="{archive}{NEWLINE}" "$repo_matches[2]" ^/dev/null
+ 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_diff_archives)'
+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)'