mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-17 02:51:01 +02:00
10985: compinstall enhancements
This commit is contained in:
parent
37d14cab88
commit
5e328e37ec
2 changed files with 79 additions and 18 deletions
|
@ -1,3 +1,8 @@
|
|||
2000-04-27 Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
|
||||
|
||||
* 10985: Completion/Core/compinstall: _oldlist, list-prompt and
|
||||
matcher-list enhancements.
|
||||
|
||||
2000-04-27 Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
|
||||
|
||||
* 10979: originally from Felix: 10894: Completion/Core/.distfiles,
|
||||
|
|
|
@ -324,7 +324,7 @@ __ci_toggle_completer() {
|
|||
|
||||
__ci_do_minor_completer_options() {
|
||||
# Set the options for the minor completers.
|
||||
local key cond word olist omenu moriginal aspace
|
||||
local key cond word olist omenu moriginal aspace tmparr
|
||||
__ci_get_this_style condition cond
|
||||
[[ -n $cond ]] && cond=${(Q)cond}
|
||||
__ci_get_this_style word word
|
||||
|
@ -369,7 +369,7 @@ assume the condition is true."
|
|||
_list will usually compare the contents of the entire line with its previous
|
||||
contents to decided if it has been changed since the last keypress. You
|
||||
can instead perform this comparison on just the current word, ignoring
|
||||
the rest of the command line. Do you want to do this? (y/n) [n] ? "
|
||||
the rest of the command line. Do you want to do this? (y/n) [n] "
|
||||
word=
|
||||
read -q key && word=true
|
||||
print
|
||||
|
@ -379,11 +379,16 @@ _oldlist can keep a generated completion list for reshowing in the usual
|
|||
way, e.g. with ^D, even if the list was generated by some special completion
|
||||
command. The default behaviour of _oldlist is to show this list if it was
|
||||
not already visible, otherwise to generate the standard completion listing,
|
||||
but you can force it always to be shown, or make it never shown. Choose:
|
||||
but you can force it always to be shown, or make it never shown.
|
||||
Alternatively, you can specify a list of completers for which _oldlist will
|
||||
be used. Choose:
|
||||
|
||||
d. Default behaviour.
|
||||
a. Always show old list.
|
||||
n. Never show old list."
|
||||
n. Never show old list.
|
||||
s. Specify a list of completers.
|
||||
"
|
||||
|
||||
while true; do
|
||||
read -k key'?--- Hit selection --- '
|
||||
print
|
||||
|
@ -394,7 +399,40 @@ n. Never show old list."
|
|||
;;
|
||||
[nN]) olist=never
|
||||
;;
|
||||
*) print "Type one of d, a or n."
|
||||
[sS]) olist=
|
||||
tmparr=(_complete _approximate _correct _match _expand)
|
||||
while true; do
|
||||
clear
|
||||
print "\
|
||||
*** compinstall: choosing completers to have _oldlist behaviour ***
|
||||
|
||||
Type any of:
|
||||
|
||||
1. _complete
|
||||
2. _approximate
|
||||
3. _correct
|
||||
4. _match
|
||||
5. _expand
|
||||
|
||||
or 0 to end, or - to delete the last choice."
|
||||
if [[ -n $olist ]]; then
|
||||
print "\
|
||||
Current choices:
|
||||
$olist"
|
||||
fi
|
||||
read -k key'?--- Hit selection --- '
|
||||
print
|
||||
case $key in
|
||||
0) break
|
||||
;;
|
||||
-) olist=(${olist[1,-2]})
|
||||
;;
|
||||
[1-5]) olist=($olist $tmparr[$key])
|
||||
;;
|
||||
esac
|
||||
done
|
||||
;;
|
||||
*) print "Type one of d, a, n or s."
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
|
@ -798,6 +836,7 @@ __ci_do_matchers() {
|
|||
# More specific use of matchers is usually covered by completion functions.
|
||||
|
||||
local mlist m_ci m_pw m_sub c_list C_list p_list s_list pw_seps key key2 elt
|
||||
local pw_dstar
|
||||
integer eltcnt lastnz
|
||||
|
||||
__ci_get_this_style matcher-list mlist
|
||||
|
@ -814,6 +853,7 @@ __ci_do_matchers() {
|
|||
# $pws_seps gives the separators used for partial-word completion
|
||||
# by element of the matcher list; these can be edited separately.
|
||||
pw_seps=('._-' '._-' '._-' '._-')
|
||||
pw_dstar=('' '' '' '')
|
||||
|
||||
# See what's in the matcher initially. If these have been edited,
|
||||
# we're in trouble, but that's pretty much true of everything.
|
||||
|
@ -822,9 +862,10 @@ __ci_do_matchers() {
|
|||
[[ $mlist[$eltcnt] = *"m:{a-zA-Z}={A-Za-z}"* ]] && C_list[$eltcnt]=$eltcnt
|
||||
# For partial word stuff, we use backreferences to find out what
|
||||
# the set of separators was.
|
||||
if [[ $mlist[$eltcnt] = (#b)*"r:|["([^\]]#)"]=* r:|=*"* ]]; then
|
||||
if [[ $mlist[$eltcnt] = (#b)*"r:|["([^\]]#)"]=*"#" r:|=*"* ]]; then
|
||||
p_list[$eltcnt]=$eltcnt
|
||||
pw_seps[$eltcnt]=${match[1]}
|
||||
[[ $mlist[$eltcnt] = *"=**"* ]] && pw_dstar[$eltcnt]='*'
|
||||
fi
|
||||
# Just look for the left matcher for substring, since the right matcher
|
||||
# might have been handled as part of a partial-word spec.
|
||||
|
@ -892,6 +933,13 @@ The expression will automatically be quoted.
|
|||
if [[ $pw_seps[$key2] = *']'* ]]; then
|
||||
pw_seps[$key2]="]${pw_seps[$key2]//\\\]}"
|
||||
fi
|
||||
print -n "
|
||||
You can allow the partial-word terminators to be matched in the pattern,
|
||||
too: then for example \`c.u' would expand to \`comp.source.unix', whereas
|
||||
usually you would need to type an extra intervening dot. Do you wish the
|
||||
terminators to be matched in this way? (y/n) [n] "
|
||||
pw_dstar[$key2]=
|
||||
read -q key && pw_dstar[$key2]='*'
|
||||
fi
|
||||
;;
|
||||
[sS]) __ci_toggle_matcher s_list $key2
|
||||
|
@ -914,7 +962,8 @@ The expression will automatically be quoted.
|
|||
[[ $c_list[$eltcnt] != ' ' ]] && elt="${elt:+$elt }m:{a-z}={A-Z}"
|
||||
[[ $C_list[$eltcnt] != ' ' ]] && elt="${elt:+$elt }m:{a-zA-Z}={A-Za-z}"
|
||||
[[ $p_list[$eltcnt] != ' ' ]] &&
|
||||
elt="${elt:+$elt }r:|[${pw_seps[$eltcnt]}]=* r:|=*"
|
||||
elt="${elt:+$elt }r:|[${pw_seps[$eltcnt]}]=*${pw_dstar[$eltcnt]}\
|
||||
r:|=*${pw_dstar[$eltcnt]}"
|
||||
if [[ $s_list[$eltcnt] != ' ' ]]; then
|
||||
if [[ $elt = *"r:|=*"* ]]; then
|
||||
elt="${elt:+$elt }l:|=*"
|
||||
|
@ -943,13 +992,14 @@ The expression will automatically be quoted.
|
|||
}
|
||||
|
||||
__ci_do_list_format() {
|
||||
local key format groupn verbose listp autod
|
||||
local key format groupn verbose listp autod haslistp
|
||||
__ci_get_this_style format format
|
||||
[[ -n $format ]] && format=${(Q)format}
|
||||
__ci_get_this_style group-name groupn
|
||||
__ci_get_this_style verbose verbose
|
||||
__ci_get_this_style list-prompt listp
|
||||
[[ -n $listp ]] && listp=${(Q)listp}
|
||||
[[ -n $listp ]] && haslistp=1
|
||||
listp=${(Q)listp}
|
||||
__ci_get_this_style auto-description autod
|
||||
[[ -n $autod ]] && autod=${(Q)autod}
|
||||
|
||||
|
@ -1040,17 +1090,23 @@ you want?
|
|||
esac
|
||||
;;
|
||||
4) print "\
|
||||
Normally, the display of completions which don't fit on the screen is
|
||||
You can make completion lists scroll when they don't fit on the screen.
|
||||
To do this, edit a prompt to show when scrolling is active; an empty string
|
||||
turns this feature off. It can contain \`%l' to show the number of matches
|
||||
as \`current_number/total_number', \`%p' to show the fraction of the way
|
||||
down the list, or font-control sequences such as %B, %U, %S and the
|
||||
corresponding %b, %u, %s; quotes will be added automatically. Note that
|
||||
this is the default behaviour; delete the whole line to turn it off, in
|
||||
which case the display of completions which don't fit on the screen is
|
||||
controlled by the LISTMAX parameter (currently ${LISTMAX:-unset}), which
|
||||
specifies the maximum number to show without asking. Instead, you can make
|
||||
completion lists scroll when they don't fit on the screen. To do this,
|
||||
edit a prompt to show when scrolling is active; an empty string turns
|
||||
this feature off. It can contain \`%l' to show the number of matches
|
||||
as \`current_number/total_number', as well as font-control sequences such
|
||||
as %B, %U, %S. Quotes will be added automatically. Hit return to keep the
|
||||
current value.
|
||||
specifies the maximum number to show without asking. Hit return to keep
|
||||
the current value.
|
||||
"
|
||||
[[ -z $haslistp ]] &&
|
||||
listp='%SAt %p: Hit TAB for more, or the character to insert%s'
|
||||
vared -eh -p 'prompt> ' -c listp
|
||||
# Unconditionally use listp; will become '' if empty.
|
||||
haslistp=1
|
||||
;;
|
||||
5) print "\
|
||||
Many commands have options which take a single argument. In some cases,
|
||||
|
@ -1080,7 +1136,7 @@ Quotation will be added automatically.
|
|||
__ci_set_this_style format format
|
||||
__ci_set_this_style group-name groupn
|
||||
__ci_set_this_style verbose verbose
|
||||
[[ -n $listp ]] && listp=${(qq)listp}
|
||||
[[ -n $haslistp ]] && listp=${(qq)listp}
|
||||
__ci_set_this_style list-prompt listp
|
||||
[[ -n $autod ]] && autod=${(qq)autod}
|
||||
__ci_set_this_style auto-description autod
|
||||
|
|
Loading…
Reference in a new issue