|
@@ -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
|