/usr/share/zsh/functions/Zle/keeper is in zsh-common 5.4.2-3ubuntu3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 | ##
# The "keeper" function suite originally appeared in several zsh-users
# posts in the fall of 2004. It was published in summary form in the
# Shell Corner column on UnixReview.com in January 2005 at the URL
# <http://www.unixreview.com/documents/s=9513/ur0501a/ur0501a.htm>
#
# Article still available on the Wayback Machine:
# <http://web.archive.org/web/20050207041146/http://www.unixreview.com/documents/s=9513/ur0501a/ur0501a.htm>
#
# A few minor edits have been made to those functions for this file. Key
# bindings are commented out to avoid clashes with any existing bindings.
##
declare -a kept
# The "keep" function accepts a set of file patterns as the positional
# parameters or a series of lines (expected to represent file names) on
# standard input. It stores the expansion of those patterns, or the input
# lines, in the global variable $kept, and then displays the result
# formatted in columns, similar to an "ls" listing. Its alias, also named
# "keep", prevents the file patterns from being expanded when the command
# line is executed; they're expanded in the assignment to $kept instead,
# so that the local settings of nonomatch etc. are applied.
function keep {
setopt localoptions nomarkdirs nonomatch nocshnullglob nullglob
setopt noksharrays noshwordsplit
kept=($~*)
if [[ ! -t 0 ]]; then
local line
while read -r line; do
kept+=( $line )
done
fi
print -Rc - ${^kept%/}(T)
}
alias keep='noglob keep'
# The function "_insert_kept" copies the value of $kept to the cursor
# position. If a prefix of a name is immediately to the left of the
# cursor, then only the subset of $kept that matches that prefix is
# copied, as is usual for completion. The examples bind it to two
# different widgets, "insert-kept-result" and "expand-kept-result". If
# invoked via the "expand-kept-result" widget, it replaces a pattern on
# the command line with the matching words from the $kept array.
_insert_kept() {
(( $#kept )) || return 1
local action
zstyle -s :completion:$curcontext insert-kept action
if [[ -n $action ]]
then compstate[insert]=$action
elif [[ $WIDGET = *expand* ]]
then compstate[insert]=all
fi
if [[ $WIDGET = *expand* ]]
then compadd -U ${(M)kept:#${~words[CURRENT]}}
else compadd -a kept
fi
}
zle -C insert-kept-result complete-word _generic
zstyle ':completion:insert-kept-result:*' completer _insert_kept
# bindkey '^Xk' insert-kept-result
zle -C expand-kept-result complete-word _generic
zstyle ':completion:expand-kept-result:*' completer _insert_kept
# bindkey '^XK' expand-kept-result
# The "_expand_word_and_keep" function stores the expansions computed by
# the "_expand" completer in the global $kept for later retrieval by
# "_insert_kept".
_expand_word_and_keep() {
{
function compadd {
local -A args
zparseopts -E -A args J:
if [[ $args[-J] == all-expansions ]]
then
builtin compadd -A kept "$@"
kept=( ${(Q)${(z)kept}} )
fi
builtin compadd "$@"
}
_expand_word
} always {
unfunction compadd
}
}
zle -C _expand_word complete-word _expand_word_and_keep
# This style is required to segregate the all-expansions group for
# purposes of _expand_word_and_keep.
zstyle ':completion:expand-word:expand:::all-expansions' group-name ''
|