1
0
Fork 0
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:
Peter Stephenson 2000-04-27 20:44:47 +00:00
parent 37d14cab88
commit 5e328e37ec
2 changed files with 79 additions and 18 deletions

View file

@ -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,

View file

@ -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