mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-10-22 16:20:23 +02:00
Updated from list as far as 10376
This commit is contained in:
parent
e025336f2f
commit
4852545255
31 changed files with 13782 additions and 5610 deletions
|
@ -1,4 +1,4 @@
|
|||
# $Id: is-at-least,v 1.1 2000/02/11 19:46:46 akr Exp $ -*- shell-script -*-
|
||||
# $Id: is-at-least,v 1.2 2000/04/01 20:49:47 pws Exp $ -*- shell-script -*-
|
||||
#
|
||||
# Test whether $ZSH_VERSION (or some value of your choice, if a second argument
|
||||
# is provided) is greater than or equal to x.y.z-r (in argument one). In fact,
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
# seperated by `--'. For example:
|
||||
#
|
||||
# zrecompile -p \
|
||||
# -r ~/.zshrc -- \
|
||||
# -m ~/.zcompdump -- \
|
||||
# -R ~/.zshrc -- \
|
||||
# -M ~/.zcompdump -- \
|
||||
# ~/zsh/comp.zwc ~/zsh/Completion/*/_* \
|
||||
#
|
||||
# This makes ~/.zshrc be compiled into ~/.zshrc.zwc if that doesn't
|
||||
|
@ -33,8 +33,7 @@
|
|||
# that needed re-compilation could be compiled and non-zero if compilation
|
||||
# for at least one of the files failed.
|
||||
|
||||
emulate -L zsh
|
||||
setopt extendedglob
|
||||
setopt localoptions extendedglob
|
||||
|
||||
local opt check quiet zwc files re file pre ret map tmp mesg pats
|
||||
|
||||
|
@ -68,7 +67,7 @@ if [[ -n $pats ]]; then
|
|||
fi
|
||||
|
||||
files=( ${files:#*(.zwc|~)} )
|
||||
if [[ $files[1] = -[rm] ]]; then
|
||||
if [[ $files[1] = -[RM] ]]; then
|
||||
map=( $files[1] )
|
||||
shift 1 files
|
||||
else
|
||||
|
@ -146,10 +145,10 @@ for zwc; do
|
|||
# See if the wordcode file will be mapped.
|
||||
|
||||
if [[ $files[1] = *\(mapped\)* ]]; then
|
||||
map=-m
|
||||
map=-M
|
||||
mesg='succeeded (old saved)'
|
||||
else
|
||||
map=-r
|
||||
map=-R
|
||||
mesg=succeeded
|
||||
fi
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ local tmpf=${TMPPREFIX}zfcm$$
|
|||
|
||||
if [[ $ZFTP_SYSTEM = UNIX* ]]; then
|
||||
# hoo, aren't we lucky: this makes things so much easier
|
||||
setopt localoptions rcexpandparam
|
||||
setopt rcexpandparam
|
||||
local dir
|
||||
if [[ $1 = ?*/* ]]; then
|
||||
dir=${1%/*}
|
||||
|
@ -25,13 +25,15 @@ if [[ $ZFTP_SYSTEM = UNIX* ]]; then
|
|||
# If we're using -F, we get away with using a directory
|
||||
# to list, but not a glob. Don't ask me why.
|
||||
# I hate having to rely on awk here.
|
||||
zftp ls -F $dir >$tmpf
|
||||
zftp ls -LF $dir >$tmpf
|
||||
reply=($(awk '/\/$/ { print substr($1, 0, length($1)-1) }' $tmpf))
|
||||
rm -f $tmpf
|
||||
if [[ $dir = / ]]; then
|
||||
reply=(${dir}$reply)
|
||||
[[ -n $dir && $dir != */ ]] && dir="$dir/"
|
||||
if [[ -n $WIDGET ]]; then
|
||||
_all_labels directories expl 'remote directory'
|
||||
compadd -S/ -q -P "$dir" - $reply
|
||||
elif [[ -n $dir ]]; then
|
||||
reply=($dir/$reply)
|
||||
reply=(${dir}$reply)
|
||||
fi
|
||||
else
|
||||
# I simply don't know what to do here.
|
||||
|
|
|
@ -10,18 +10,27 @@ fi
|
|||
local tmpf=${TMPPREFIX}zfgm$$
|
||||
|
||||
if [[ $ZFTP_SYSTEM == UNIX* && $1 == */* ]]; then
|
||||
# On the first argument to ls, we usually get away with a glob.
|
||||
zftp ls "$1*$2" >$tmpf
|
||||
reply=($(<$tmpf))
|
||||
rm -f $tmpf
|
||||
else
|
||||
if (( $#zftp_fcache == 0 )); then
|
||||
# Always cache the current directory and use it
|
||||
# even if the system is UNIX.
|
||||
zftp ls >$tmpf
|
||||
zftp_fcache=($(<$tmpf))
|
||||
if [[ -n $WIDGET ]]; then
|
||||
local dir=${1:h}
|
||||
[[ $dir = */ ]] || dir="$dir/"
|
||||
zftp ls -LF $dir >$tmpf
|
||||
local reply
|
||||
reply=(${${${(f)"$(<$tmpf)"}##$dir}%\*})
|
||||
rm -f $tmpf
|
||||
_all_labels files expl 'remote file' compadd -P $dir - $reply
|
||||
else
|
||||
# On the first argument to ls, we usually get away with a glob.
|
||||
zftp ls "$1*$2" >$tmpf
|
||||
reply=($(<$tmpf))
|
||||
rm -f $tmpf
|
||||
fi
|
||||
reply=($zftp_fcache);
|
||||
else
|
||||
local fcache_name
|
||||
zffcache
|
||||
if [[ -n $WIDGET ]]; then
|
||||
_all_labels files expl 'remote file' compadd -F fignore - ${(P)fcache_name}
|
||||
else
|
||||
reply=(${(P)fcache_name});
|
||||
fi
|
||||
fi
|
||||
# }
|
||||
|
|
|
@ -1,89 +1,124 @@
|
|||
# incremental-complete-word() {
|
||||
|
||||
# Autoload this function, run `zle -N <func-name>' and bind <func-name>
|
||||
# to a key.
|
||||
|
||||
|
||||
# This allows incremental completion of a word. After starting this
|
||||
# command, a list of completion choices is shown after every character you
|
||||
# type, which you can delete with ^h or DEL. RET will accept the
|
||||
# completion so far. You can hit TAB to do normal completion and ^g to
|
||||
# abort back to the state when you started.
|
||||
# command, a list of completion choices can be shown after every character
|
||||
# you type, which you can delete with ^h or DEL. RET will accept the
|
||||
# completion so far. You can hit TAB to do normal completion, ^g to
|
||||
# abort back to the state when you started, and ^d to list the matches.
|
||||
#
|
||||
# Completion keys:
|
||||
# incremental_prompt Prompt to show in status line during icompletion;
|
||||
# the sequence `%u' is replaced by the unambiguous
|
||||
# part of all matches if there is any and it is
|
||||
# different from the word on the line
|
||||
# incremental_stop Pattern matching keys which will cause icompletion
|
||||
# to stop and the key to be re-executed
|
||||
# incremental_break Pattern matching keys which will cause icompletion
|
||||
# to stop and the key to be discarded
|
||||
# incremental_completer Set of completers, like the `completer' key
|
||||
# incremental_list If set to a non-empty string, the matches will be
|
||||
# listed on every key-press
|
||||
# This works only with the new function based completion system.
|
||||
|
||||
emulate -L zsh
|
||||
unsetopt autolist menucomplete automenu # doesn't work well
|
||||
# The main widget function.
|
||||
|
||||
local key lbuf="$LBUFFER" rbuf="$RBUFFER" pmpt word lastl lastr wid twid
|
||||
incremental-complete-word() {
|
||||
#emulate -L zsh
|
||||
unsetopt autolist menucomplete automenu # doesn't work well
|
||||
|
||||
[[ -n "$compconfig[incremental_completer]" ]] &&
|
||||
set ${(s.:.)compconfig[incremental_completer]}
|
||||
pmpt="${compconfig[incremental_prompt]-incremental completion...}"
|
||||
local key lbuf="$LBUFFER" rbuf="$RBUFFER" pmpt pstr word
|
||||
local lastl lastr wid twid num post toolong
|
||||
local curcontext="${curcontext}" stop brk
|
||||
|
||||
if [[ -n "$compconfig[incremental_list]" ]]; then
|
||||
wid=list-choices
|
||||
else
|
||||
wid=complete-word
|
||||
fi
|
||||
[[ -z "$curcontext" ]] && curcontext=:::
|
||||
curcontext="incremental:${curcontext#*:}"
|
||||
|
||||
zle $wid "$@"
|
||||
LBUFFER="$lbuf"
|
||||
RBUFFER="$rbuf"
|
||||
if [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
|
||||
word=''
|
||||
else
|
||||
word="${_lastcomp[unambiguous]}"
|
||||
fi
|
||||
zle -R "${pmpt//\\%u/$word}"
|
||||
read -k key
|
||||
zstyle -s ":completion:${curcontext}" prompt pmpt ||
|
||||
pmpt='incremental (%c): %u%s %l'
|
||||
zstyle -s ":completion:${curcontext}" stop stop
|
||||
zstyle -s ":completion:${curcontext}" break brk
|
||||
|
||||
while [[ '#key' -ne '#\\r' && '#key' -ne '#\\n' &&
|
||||
'#key' -ne '#\\C-g' ]]; do
|
||||
twid=$wid
|
||||
if [[ "$key" = ${~compconfig[incremental_stop]} ]]; then
|
||||
zle -U "$key"
|
||||
return
|
||||
elif [[ "$key" = ${~compconfig[incremental_break]} ]]; then
|
||||
return
|
||||
elif [[ '#key' -eq '#\\C-h' || '#key' -eq '#\\C-?' ]]; then
|
||||
[[ $#LBUFFER -gt $#l ]] && LBUFFER="$LBUFFER[1,-2]"
|
||||
elif [[ '#key' -eq '#\\t' ]]; then
|
||||
zle complete-word "$@"
|
||||
lbuf="$LBUFFER"
|
||||
rbuf="$RBUFFER"
|
||||
elif [[ '#key' -eq '#\\C-d' ]]; then
|
||||
twid=list-choices
|
||||
if zstyle -t ":completion:${curcontext}" list; then
|
||||
wid=list-choices
|
||||
post=( icw-list-helper )
|
||||
else
|
||||
LBUFFER="$LBUFFER$key"
|
||||
wid=complete-word
|
||||
post=()
|
||||
fi
|
||||
lastl="$LBUFFER"
|
||||
lastr="$RBUFFER"
|
||||
zle $twid "$@"
|
||||
LBUFFER="$lastl"
|
||||
RBUFFER="$lastr"
|
||||
if [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
|
||||
word=''
|
||||
else
|
||||
word="${_lastcomp[unambiguous]}"
|
||||
fi
|
||||
zle -R "${pmpt//\\%u/$word}"
|
||||
read -k key
|
||||
done
|
||||
|
||||
if [[ '#key' -eq '#\\C-g' ]]; then
|
||||
comppostfuncs=( "$post[@]" )
|
||||
zle $wid "$@"
|
||||
LBUFFER="$lbuf"
|
||||
RBUFFER="$rbuf"
|
||||
fi
|
||||
zle -Rc
|
||||
# }
|
||||
num=$_lastcomp[nmatches]
|
||||
if (( ! num )); then
|
||||
word=''
|
||||
state='-no match-'
|
||||
elif [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
|
||||
word=''
|
||||
state='-no prefix-'
|
||||
else
|
||||
word="${_lastcomp[unambiguous]}"
|
||||
state=''
|
||||
fi
|
||||
zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" \
|
||||
"l:$toolong" "c:${_lastcomp[completer][2,-1]}"
|
||||
zle -R "$pstr"
|
||||
read -k key
|
||||
|
||||
while [[ '#key' -ne '#\\r' && '#key' -ne '#\\n' &&
|
||||
'#key' -ne '#\\C-g' ]]; do
|
||||
twid=$wid
|
||||
if [[ "$key" = ${~stop} ]]; then
|
||||
zle -U "$key"
|
||||
return
|
||||
elif [[ "$key" = ${~brk} ]]; then
|
||||
return
|
||||
elif [[ '#key' -eq '#\\C-h' || '#key' -eq '#\\C-?' ]]; then
|
||||
[[ $#LBUFFER -gt $#l ]] && LBUFFER="$LBUFFER[1,-2]"
|
||||
elif [[ '#key' -eq '#\\t' ]]; then
|
||||
zle complete-word "$@"
|
||||
lbuf="$LBUFFER"
|
||||
rbuf="$RBUFFER"
|
||||
elif [[ '#key' -eq '#\\C-d' ]]; then
|
||||
twid=list-choices
|
||||
else
|
||||
LBUFFER="$LBUFFER$key"
|
||||
fi
|
||||
lastl="$LBUFFER"
|
||||
lastr="$RBUFFER"
|
||||
[[ "$twid" = "$wid" ]] && comppostfuncs=( "$post[@]" )
|
||||
toolong=''
|
||||
zle $twid "$@"
|
||||
LBUFFER="$lastl"
|
||||
RBUFFER="$lastr"
|
||||
num=$_lastcomp[nmatches]
|
||||
if (( ! num )); then
|
||||
word=''
|
||||
state='-no match-'
|
||||
elif [[ "${LBUFFER}${RBUFFER}" = *${_lastcomp[unambiguous]}* ]]; then
|
||||
word=''
|
||||
state='-no prefix-'
|
||||
else
|
||||
word="${_lastcomp[unambiguous]}"
|
||||
state=''
|
||||
fi
|
||||
zformat -f pstr "$pmpt" "u:${word}" "s:$state" "n:$num" \
|
||||
"l:$toolong" "c:${_lastcomp[completer][2,-1]}"
|
||||
zle -R "$pstr"
|
||||
read -k key
|
||||
done
|
||||
|
||||
if [[ '#key' -eq '#\\C-g' ]]; then
|
||||
LBUFFER="$lbuf"
|
||||
RBUFFER="$rbuf"
|
||||
fi
|
||||
zle -Rc
|
||||
}
|
||||
|
||||
# Helper function used as a completion post-function used to make sure that
|
||||
# the list of matches in only shown if it fits on the screen.
|
||||
|
||||
icw-list-helper() {
|
||||
|
||||
# +1 for the status line we will add...
|
||||
|
||||
if [[ compstate[list_lines]+BUFFERLINES+1 -gt LINES ]]; then
|
||||
compstate[list]='list explanations'
|
||||
[[ compstate[list_lines]+BUFFERLINES+1 -gt LINES ]] && compstate[list]=''
|
||||
|
||||
toolong='...'
|
||||
fi
|
||||
}
|
||||
|
||||
incremental-complete-word "$@"
|
||||
|
|
|
@ -1,64 +1,141 @@
|
|||
# This set of functions implements a sort of magic history searching.
|
||||
# After predict-on, typing characters causes the editor to look backward
|
||||
# in the history for the first line beginning with what you have typed
|
||||
# so far. After predict-off, editing returns to normal for the line found.
|
||||
# in the history for the first line beginning with what you have typed so
|
||||
# far. After predict-off, editing returns to normal for the line found.
|
||||
# In fact, you often don't even need to use predict-off, because if the
|
||||
# line doesn't match something in the history, adding a key at the end
|
||||
# behaves as normal --- though editing in the middle is liable to delete
|
||||
# line doesn't match something in the history, adding a key performs
|
||||
# standard completion --- though editing in the middle is liable to delete
|
||||
# the rest of the line.
|
||||
#
|
||||
# With the function based completion system (which is needed for this),
|
||||
# you should be able to type TAB at almost any point to advance the cursor
|
||||
# to the next "interesting" character position (usually the end of the
|
||||
# current word, but sometimes somewhere in the middle of the word). And
|
||||
# of course as soon as the entire line is what you want, you can accept
|
||||
# with RETURN, without needing to move the cursor to the end first.
|
||||
#
|
||||
# To use it:
|
||||
# autoload -U predict-on
|
||||
# zle -N predict-on
|
||||
# zle -N predict-off
|
||||
# bindkey '...' predict-on
|
||||
# bindkey '...' predict-off
|
||||
# Note that all the functions are defined when you first call type the
|
||||
# predict-on key, which means typing the predict-off key before that gives
|
||||
# a harmless error message.
|
||||
# Note that all functions are defined when you first type the predict-on
|
||||
# key, which means typing the predict-off key before that gives a harmless
|
||||
# error message.
|
||||
|
||||
predict-on() {
|
||||
zle -N self-insert insert-and-predict
|
||||
zle -N magic-space insert-and-predict
|
||||
zle -N backward-delete-char delete-backward-and-predict
|
||||
zle -N self-insert insert-and-predict
|
||||
zle -N magic-space insert-and-predict
|
||||
zle -N backward-delete-char delete-backward-and-predict
|
||||
zle -N delete-char-or-list delete-no-predict
|
||||
}
|
||||
predict-off() {
|
||||
zle -A .self-insert self-insert
|
||||
zle -A .magic-space magic-space
|
||||
zle -A .backward-delete-char backward-delete-char
|
||||
zle -A .self-insert self-insert
|
||||
zle -A .magic-space magic-space
|
||||
zle -A .backward-delete-char backward-delete-char
|
||||
}
|
||||
insert-and-predict () {
|
||||
emulate -L zsh
|
||||
if [[ ${RBUFFER[1]} = ${KEYS[-1]} ]]
|
||||
setopt localoptions noshwordsplit noksharrays
|
||||
if [[ $LBUFFER = *$'\012'* ]]
|
||||
then
|
||||
# same as what's typed, just move on
|
||||
# Editing a multiline buffer, it's unlikely prediction is wanted
|
||||
zle .$WIDGET "$@"
|
||||
return
|
||||
elif [[ ${RBUFFER[1]} = ${KEYS[-1]} ]]
|
||||
then
|
||||
# Same as what's typed, just move on
|
||||
((++CURSOR))
|
||||
else
|
||||
LBUFFER="$LBUFFER$KEYS"
|
||||
if [[ $LASTWIDGET == (self-insert|magic-space|backward-delete-char) ]]
|
||||
then
|
||||
zle .history-beginning-search-backward || RBUFFER=""
|
||||
if ! zle .history-beginning-search-backward
|
||||
then
|
||||
RBUFFER=""
|
||||
if [[ ${KEYS[-1]} != ' ' ]]
|
||||
then
|
||||
unsetopt automenu recexact
|
||||
integer curs=$CURSOR pos nchar=${#LBUFFER//[^${KEYS[-1]}]}
|
||||
local -a +h comppostfuncs
|
||||
local crs curcontext="${curcontext}"
|
||||
|
||||
[[ -z "$curcontext" ]] && curcontext=:::
|
||||
curcontext="predict:${curcontext#*:}"
|
||||
|
||||
comppostfuncs=( predict-limit-list )
|
||||
zle complete-word
|
||||
# Decide where to leave the cursor. The dummy loop is used to
|
||||
# get out of that `case'.
|
||||
repeat 1
|
||||
do
|
||||
zstyle -s ":completion:${curcontext}:" cursor crs
|
||||
case $crs in
|
||||
(complete)
|
||||
# At the place where the completion left it, if it is after
|
||||
# the character typed.
|
||||
[[ ${LBUFFER[-1]} = ${KEYS[-1]} ]] && break
|
||||
;&
|
||||
(key)
|
||||
# Or maybe at the n'th occurrence of the character typed.
|
||||
pos=${BUFFER[(in:nchar:)${KEYS[-1]}]}
|
||||
if [[ pos -gt curs ]]
|
||||
then
|
||||
CURSOR=$pos
|
||||
break
|
||||
fi
|
||||
;&
|
||||
(*)
|
||||
# Or else at the previous position.
|
||||
CURSOR=$curs
|
||||
esac
|
||||
done
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
delete-backward-and-predict() {
|
||||
emulate -L zsh
|
||||
if [[ -n "$LBUFFER" ]]
|
||||
then
|
||||
setopt localoptions noshwordsplit noksharrays
|
||||
if [[ $LBUFFER = *$'\012'* ]] then
|
||||
# Editing a multiline buffer, it's unlikely prediction is wanted
|
||||
zle .$WIDGET "$@"
|
||||
# If the last widget was e.g. a motion, then probably the intent is
|
||||
# to actually edit the line, not change the search prefix.
|
||||
if [[ $LASTWIDGET == (self-insert|magic-space|backward-delete-char) ]]
|
||||
elif [[ $LASTWIDGET == (self-insert|magic-space|backward-delete-char) ]]
|
||||
then
|
||||
((--CURSOR))
|
||||
zle .history-beginning-search-forward || RBUFFER=""
|
||||
return 0
|
||||
else
|
||||
# Depending on preference, you might call "predict-off" here,
|
||||
# and also set up forward deletions to turn off prediction.
|
||||
# Depending on preference, you might call "predict-off" here.
|
||||
LBUFFER="$LBUFFER[1,-2]"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
delete-no-predict() {
|
||||
[[ $WIDGET != delete-char-or-list || -n $RBUFFER ]] && predict-off
|
||||
zle .$WIDGET "$@"
|
||||
}
|
||||
|
||||
# This is a helper function for autocompletion to prevent long lists
|
||||
# of matches from forcing a "do you wish to see all ...?" prompt.
|
||||
|
||||
predict-limit-list() {
|
||||
if (( compstate[list_lines]+BUFFERLINES > LINES ||
|
||||
( compstate[list_max] != 0 &&
|
||||
compstate[nmatches] > compstate[list_max] ) ))
|
||||
then
|
||||
compstate[list]=''
|
||||
elif zstyle -t ":completion:predict::::" list always
|
||||
then
|
||||
compstate[list]='force list'
|
||||
fi
|
||||
}
|
||||
|
||||
# Handle zsh autoloading conventions
|
||||
|
||||
[[ -o kshautoload ]] || predict-on "$@"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue