From a6c4047a455bff5353764e2aa0f5a257aca38926 Mon Sep 17 00:00:00 2001 From: oxiedi Date: Thu, 24 Sep 2020 00:38:40 +0500 Subject: [PATCH] Fix a few issues in zsh completion Namely: - add tags to all untagged contexts; - don't leak $debug_commands; - plus some cosmetic changes. --- scripts/shell_completions/zsh/_borg | 42 ++++++++++++++++------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/scripts/shell_completions/zsh/_borg b/scripts/shell_completions/zsh/_borg index 8b30f7026..813415c67 100644 --- a/scripts/shell_completions/zsh/_borg +++ b/scripts/shell_completions/zsh/_borg @@ -5,7 +5,7 @@ # Recommended _borg specific settings: # # zstyle -e ':completion:*:*:borg-*:argument-rest:*' tag-order \ -# '[[ $words[CURRENT] == -* ]] && reply=( "!archives archive-files" "-" )' +# '[[ $words[CURRENT] == -* ]] && reply=( "! archives archive-files" "-" )' # zstyle ':completion:*:*:(borg|-value-,BORG_)*' sort false # zstyle ':completion:*:*:borg-config:argument-2:keys' list-grouped false # zstyle ':completion:*:*:borg-*:*' gain-privileges true @@ -24,7 +24,7 @@ # Style selector used to select a path (when Borg would use either `pp` or `pf`). # Default: `fm`. # repository-suffix -# This boolean style controls whether to add the `::` suffix to a repository. +# This boolean style controls whether to add the `::` auto-removable suffix to a repository. # Default: `true`. (( $+functions[_borg_commands] )) || @@ -166,7 +166,7 @@ _borg-debug() { case $state in (command) - debug_commands=( + local -a debug_commands=( 'info:show system infos for debugging / bug reports' 'dump-archive-items:dump archive items (metadata)' 'dump-archive:dump decoded archive metadata' @@ -686,7 +686,7 @@ __borg_setup_common_create_options() { '--comment=[add a comment text to the archive]:COMMENT:_borg_placeholders' '--timestamp=[manually specify the archive creation date/time]:TIMESTAMP:_borg_timestamp' '(-c --checkpoint-interval)'{-c,--checkpoint-interval}'=[write checkpoint every SECONDS seconds (default: 1800)]: : _borg_guard_unsigned_number "SECONDS"' - '--chunker-params[specify the chunker parameters]: :_borg_chunker_params' + '--chunker-params=[specify the chunker parameters]: :_borg_chunker_params' '(-C --compression)'{-C,--compression}'=[select compression algorithm]: :_borg_compression' ) } @@ -792,7 +792,7 @@ _borg_cached_repositories() { }' local cachedir=${BORG_CACHE_DIR:-${XDG_CACHE_HOME:-${BORG_BASE_DIR:-$HOME}/.cache}/borg} cached_repos=( ${(f)"$(_call_program -p cached-repositories sed -n -E ${(q)sed_script} \ - "${(q)cachedir}/*/config(N.om)" 2>/dev/null)"} ) + "${(q)cachedir}/*/config(#qN.om)" 2>/dev/null)"} ) if [[ $compstate[quote] != (\'|\") ]]; then # hide ~BORG_REPO and other scalars @@ -870,7 +870,7 @@ _borg_repository_or_archive() { else local -a suf if ! compset -S '::*'; then - if (( $+opts[-a] )) || zstyle -T ":completion:${curcontext}:" repository-suffix; then + if (( $+opts[-a] )) || zstyle -T ":completion:${curcontext}:repositories" repository-suffix; then suf=( -S '::' ) fi local oqrepo="$PREFIX$SUFFIX" @@ -977,12 +977,12 @@ _borg_archive() { fi fi - if zstyle -t ":completion:${curcontext}:" verbose; then + if zstyle -t ":completion:${curcontext}:archives" verbose; then if (( __borg_archives_need_update || ! $+__borg_archive_names || ! $+__borg_archive_descriptions )); then __borg_archives_need_update=0 typeset -gHa __borg_archive_names=() __borg_archive_descriptions=() local fmt descfmt name desc - zstyle -s ":completion:${curcontext}:" archive-description-format descfmt || + zstyle -s ":completion:${curcontext}:archives" archive-description-format descfmt || descfmt='{archive:<36} {time} [{id}]' fmt="{barchive}{NUL}$descfmt{NUL}" _call_program -p archive-descriptions \ @@ -1204,11 +1204,12 @@ _borg_style_selector_or_archive_files() { __borg_style_selectors() { local default_style_selector=$1 path_style_selector shift - zstyle -s ":completion:${curcontext%:*}:archive-files" path-style-selector path_style_selector || + zstyle -s ":completion:${curcontext}:archive-files" path-style-selector path_style_selector || path_style_selector='fm' - local -a disp style_selectors + local -a disp + local -A style_selectors __borg_setup_style_selectors - if zstyle -T ":completion:${curcontext}:" verbose; then + if zstyle -T ":completion:${curcontext}:style-selectors" verbose; then local -a style_selector_descriptions extra local k v sep for k v in ${(kv)style_selectors}; do @@ -1219,7 +1220,7 @@ __borg_style_selectors() { (( $#extra )) && v+=" (${(j:, :)extra})" style_selector_descriptions+=( "${${k//\\/\\\\}//:/\\:}:$v" ) done - zstyle -s ":completion:${curcontext}:" list-separator sep || sep=-- + zstyle -s ":completion:${curcontext}:style-selectors" list-separator sep || sep=-- zformat -a style_selector_descriptions " $sep " $style_selector_descriptions disp=( -ld style_selector_descriptions ) fi @@ -1239,7 +1240,8 @@ __borg_archive_files() { return 1 fi - local -a qargs tmp disp pref style_selectors match mbegin mend archive_files descs + local -a qargs tmp disp pref match mbegin mend archive_files descs + local -A style_selectors local k cword fmt descfmt style_selector path_style_selector name descr # take into account exclude options on the command line @@ -1263,8 +1265,8 @@ __borg_archive_files() { [[ -z $cword ]] && return 1 - if zstyle -t ":completion:${curcontext}:" verbose; then - zstyle -s ":completion:${curcontext}:" file-description-format descfmt || + if zstyle -t ":completion:${curcontext}:archive-files" verbose; then + zstyle -s ":completion:${curcontext}:archive-files" file-description-format descfmt || descfmt='{mode} {user:6} {group:6} {size:8d} {mtime} {path}{extra}' fmt="{bpath}{NUL}$descfmt{NUL}" else @@ -1285,7 +1287,8 @@ __borg_archive_files() { [[ -n $style_selector ]] && compset -P "$style_selector:" && pref=( -P "$style_selector:" ) cword="$PREFIX$SUFFIX" [[ $compstate[quote] != (\'|\") ]] && cword=${(Q)cword} - zstyle -s ":completion:${curcontext}:" path-style-selector path_style_selector || path_style_selector='fm' + zstyle -s ":completion:${curcontext}:archive-files" path-style-selector path_style_selector || + path_style_selector='fm' cword="$path_style_selector:$cword" else [[ -z $style_selector ]] && cword="$default_style_selector:$cword" @@ -1293,7 +1296,7 @@ __borg_archive_files() { qargs+=( ${(q)cword} ) fi - if zstyle -t ":completion:${curcontext}:" verbose; then + if zstyle -t ":completion:${curcontext}:archive-files" verbose; then _call_program -p archive-file-descriptions ${(q)__borg_command:-borg} list $qargs 2>/dev/null | while IFS= read -r -d $'\0' name && IFS= read -r -d $'\0' descr; do archive_files+=( $name ) @@ -1334,7 +1337,8 @@ __borg_pattern_files() { local paths_varname=$1 shift - local -a args style_selectors + local -a args + local -A style_selectors __borg_setup_style_selectors local pr_pat='[RP\+\-\!]' ss_pat="(${(j:|:)${(@kb)style_selectors}}):" local prs_pat="$pr_pat #" @@ -1504,7 +1508,7 @@ _borg_statuschars() { 'i[backup data was read from standard input (stdin)]' \ '-[dry run, item was not backed up]' \ 'x[excluded, item was not backed up]' \ - '?[missing status code]' \ + '?[missing status code]' } (( $+functions[_borg_quota_suffixes] )) ||