mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-17 15:01:40 +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>
|
2000-04-27 Sven Wischnowsky <wischnow@informatik.hu-berlin.de>
|
||||||
|
|
||||||
* 10979: originally from Felix: 10894: Completion/Core/.distfiles,
|
* 10979: originally from Felix: 10894: Completion/Core/.distfiles,
|
||||||
|
|
|
@ -324,7 +324,7 @@ __ci_toggle_completer() {
|
||||||
|
|
||||||
__ci_do_minor_completer_options() {
|
__ci_do_minor_completer_options() {
|
||||||
# Set the options for the minor completers.
|
# 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
|
__ci_get_this_style condition cond
|
||||||
[[ -n $cond ]] && cond=${(Q)cond}
|
[[ -n $cond ]] && cond=${(Q)cond}
|
||||||
__ci_get_this_style word word
|
__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
|
_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
|
contents to decided if it has been changed since the last keypress. You
|
||||||
can instead perform this comparison on just the current word, ignoring
|
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=
|
word=
|
||||||
read -q key && word=true
|
read -q key && word=true
|
||||||
print
|
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
|
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
|
command. The default behaviour of _oldlist is to show this list if it was
|
||||||
not already visible, otherwise to generate the standard completion listing,
|
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.
|
d. Default behaviour.
|
||||||
a. Always show old list.
|
a. Always show old list.
|
||||||
n. Never show old list."
|
n. Never show old list.
|
||||||
|
s. Specify a list of completers.
|
||||||
|
"
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
read -k key'?--- Hit selection --- '
|
read -k key'?--- Hit selection --- '
|
||||||
print
|
print
|
||||||
|
@ -394,7 +399,40 @@ n. Never show old list."
|
||||||
;;
|
;;
|
||||||
[nN]) olist=never
|
[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
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
@ -798,6 +836,7 @@ __ci_do_matchers() {
|
||||||
# More specific use of matchers is usually covered by completion functions.
|
# 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 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
|
integer eltcnt lastnz
|
||||||
|
|
||||||
__ci_get_this_style matcher-list mlist
|
__ci_get_this_style matcher-list mlist
|
||||||
|
@ -814,6 +853,7 @@ __ci_do_matchers() {
|
||||||
# $pws_seps gives the separators used for partial-word completion
|
# $pws_seps gives the separators used for partial-word completion
|
||||||
# by element of the matcher list; these can be edited separately.
|
# by element of the matcher list; these can be edited separately.
|
||||||
pw_seps=('._-' '._-' '._-' '._-')
|
pw_seps=('._-' '._-' '._-' '._-')
|
||||||
|
pw_dstar=('' '' '' '')
|
||||||
|
|
||||||
# See what's in the matcher initially. If these have been edited,
|
# See what's in the matcher initially. If these have been edited,
|
||||||
# we're in trouble, but that's pretty much true of everything.
|
# 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
|
[[ $mlist[$eltcnt] = *"m:{a-zA-Z}={A-Za-z}"* ]] && C_list[$eltcnt]=$eltcnt
|
||||||
# For partial word stuff, we use backreferences to find out what
|
# For partial word stuff, we use backreferences to find out what
|
||||||
# the set of separators was.
|
# the set of separators was.
|
||||||
if [[ $mlist[$eltcnt] = (#b)*"r:|["([^\]]#)"]=* r:|=*"* ]]; then
|
if [[ $mlist[$eltcnt] = (#b)*"r:|["([^\]]#)"]=*"#" r:|=*"* ]]; then
|
||||||
p_list[$eltcnt]=$eltcnt
|
p_list[$eltcnt]=$eltcnt
|
||||||
pw_seps[$eltcnt]=${match[1]}
|
pw_seps[$eltcnt]=${match[1]}
|
||||||
|
[[ $mlist[$eltcnt] = *"=**"* ]] && pw_dstar[$eltcnt]='*'
|
||||||
fi
|
fi
|
||||||
# Just look for the left matcher for substring, since the right matcher
|
# Just look for the left matcher for substring, since the right matcher
|
||||||
# might have been handled as part of a partial-word spec.
|
# 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
|
if [[ $pw_seps[$key2] = *']'* ]]; then
|
||||||
pw_seps[$key2]="]${pw_seps[$key2]//\\\]}"
|
pw_seps[$key2]="]${pw_seps[$key2]//\\\]}"
|
||||||
fi
|
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
|
fi
|
||||||
;;
|
;;
|
||||||
[sS]) __ci_toggle_matcher s_list $key2
|
[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-z}={A-Z}"
|
||||||
[[ $C_list[$eltcnt] != ' ' ]] && elt="${elt:+$elt }m:{a-zA-Z}={A-Za-z}"
|
[[ $C_list[$eltcnt] != ' ' ]] && elt="${elt:+$elt }m:{a-zA-Z}={A-Za-z}"
|
||||||
[[ $p_list[$eltcnt] != ' ' ]] &&
|
[[ $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 [[ $s_list[$eltcnt] != ' ' ]]; then
|
||||||
if [[ $elt = *"r:|=*"* ]]; then
|
if [[ $elt = *"r:|=*"* ]]; then
|
||||||
elt="${elt:+$elt }l:|=*"
|
elt="${elt:+$elt }l:|=*"
|
||||||
|
@ -943,13 +992,14 @@ The expression will automatically be quoted.
|
||||||
}
|
}
|
||||||
|
|
||||||
__ci_do_list_format() {
|
__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
|
__ci_get_this_style format format
|
||||||
[[ -n $format ]] && format=${(Q)format}
|
[[ -n $format ]] && format=${(Q)format}
|
||||||
__ci_get_this_style group-name groupn
|
__ci_get_this_style group-name groupn
|
||||||
__ci_get_this_style verbose verbose
|
__ci_get_this_style verbose verbose
|
||||||
__ci_get_this_style list-prompt listp
|
__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
|
__ci_get_this_style auto-description autod
|
||||||
[[ -n $autod ]] && autod=${(Q)autod}
|
[[ -n $autod ]] && autod=${(Q)autod}
|
||||||
|
|
||||||
|
@ -1040,17 +1090,23 @@ you want?
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
4) print "\
|
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
|
controlled by the LISTMAX parameter (currently ${LISTMAX:-unset}), which
|
||||||
specifies the maximum number to show without asking. Instead, you can make
|
specifies the maximum number to show without asking. Hit return to keep
|
||||||
completion lists scroll when they don't fit on the screen. To do this,
|
the current value.
|
||||||
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.
|
|
||||||
"
|
"
|
||||||
|
[[ -z $haslistp ]] &&
|
||||||
|
listp='%SAt %p: Hit TAB for more, or the character to insert%s'
|
||||||
vared -eh -p 'prompt> ' -c listp
|
vared -eh -p 'prompt> ' -c listp
|
||||||
|
# Unconditionally use listp; will become '' if empty.
|
||||||
|
haslistp=1
|
||||||
;;
|
;;
|
||||||
5) print "\
|
5) print "\
|
||||||
Many commands have options which take a single argument. In some cases,
|
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 format format
|
||||||
__ci_set_this_style group-name groupn
|
__ci_set_this_style group-name groupn
|
||||||
__ci_set_this_style verbose verbose
|
__ci_set_this_style verbose verbose
|
||||||
[[ -n $listp ]] && listp=${(qq)listp}
|
[[ -n $haslistp ]] && listp=${(qq)listp}
|
||||||
__ci_set_this_style list-prompt listp
|
__ci_set_this_style list-prompt listp
|
||||||
[[ -n $autod ]] && autod=${(qq)autod}
|
[[ -n $autod ]] && autod=${(qq)autod}
|
||||||
__ci_set_this_style auto-description autod
|
__ci_set_this_style auto-description autod
|
||||||
|
|
Loading…
Reference in a new issue