mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-23 04:30:24 +02:00
"keeper" function suite
This commit is contained in:
parent
2fb65d215f
commit
42a89b3cd6
3 changed files with 91 additions and 0 deletions
|
@ -1,3 +1,8 @@
|
|||
2005-01-21 Bart Schaefer <schaefer@brasslantern.com>
|
||||
|
||||
* unposted (cf. zsh-users/8409): Functions/Zle/keeper: "keeper"
|
||||
suite from unixreview.com article.
|
||||
|
||||
2005-01-21 Oliver Kiddle <opk@zsh.org>
|
||||
|
||||
* unposted: remove Completion/Unix/Command/_larch: larch has
|
||||
|
|
|
@ -14,4 +14,5 @@ match-words-by-style select-word-style transpose-words-match
|
|||
up-case-word-match
|
||||
delete-whole-word-match quote-and-complete-word url-quote-magic
|
||||
zed-set-file-name history-pattern-search
|
||||
keeper
|
||||
'
|
||||
|
|
85
Functions/Zle/keeper
Normal file
85
Functions/Zle/keeper
Normal file
|
@ -0,0 +1,85 @@
|
|||
##
|
||||
# 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>
|
||||
#
|
||||
# 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 "$@"
|
||||
}
|
||||
{ _main_complete _expand } always { unfunction compadd }
|
||||
}
|
||||
|
||||
zle -C _expand_word complete-word _expand_word_and_keep
|
Loading…
Add table
Add a link
Reference in a new issue