mirror of
git://git.code.sf.net/p/zsh/code
synced 2025-09-25 17:41:19 +02:00
28026: use "zsh_directory_name c" for completion of dynamic directory names
This commit is contained in:
parent
64d431d98b
commit
92233c8029
3 changed files with 29 additions and 7 deletions
|
@ -1,5 +1,9 @@
|
|||
2010-06-11 Peter Stephenson <p.w.stephenson@ntlworld.com>
|
||||
|
||||
* 28026: Completion/Zsh/Context/_dynamic_directory_name,
|
||||
Doc/Zsh/expn.yo: use "zsh_directory_name c" for completion
|
||||
of dynamic directory names.
|
||||
|
||||
* 28025: Doc/Zsh/expn.yo, Src/subst.c, Src/utils.c: (D)
|
||||
parameter flag to abbreviate directories.
|
||||
|
||||
|
@ -13272,5 +13276,5 @@
|
|||
|
||||
*****************************************************
|
||||
* This is used by the shell to define $ZSH_PATCHLEVEL
|
||||
* $Revision: 1.4998 $
|
||||
* $Revision: 1.4999 $
|
||||
*****************************************************
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#autoload
|
||||
|
||||
# The core libraries don't check for dynamic directory name expansion;
|
||||
# this gets called from _subscript. This is a placeholder for
|
||||
# people to overload.
|
||||
|
||||
_message 'dynamic directory name: redefine _dynamic_directory_name to use'
|
||||
if [[ -n $functions[zsh_directory_name] ]]; then
|
||||
zsh_directory_name c
|
||||
else
|
||||
_message 'dynamic directory name: implemented as zsh_directory_name c'
|
||||
fi
|
||||
|
|
|
@ -1451,6 +1451,12 @@ parts of the directory path, as described below; it is used if the prefix
|
|||
length matched (16 in the example) is longer than that matched by any
|
||||
static name.
|
||||
|
||||
The completion system calls `tt(zsh_directory_name c)' in order to
|
||||
completion dynamic names for directories. The code for this should be
|
||||
as for any other completion function as described in
|
||||
ifnzman(noderef(Completion System))\
|
||||
ifzman(zmanref(zshcompsys)).
|
||||
|
||||
As a working example, here is a function that expands any dynamic names
|
||||
beginning with the string tt(p:) to directories below
|
||||
tt(/home/pws/perforce). In this simple case a static name for the
|
||||
|
@ -1461,16 +1467,28 @@ example(zsh_directory_name+LPAR()RPAR() {
|
|||
setopt extendedglob
|
||||
local -a match mbegin mend
|
||||
if [[ $1 = d ]]; then
|
||||
# turn the directory into a name
|
||||
if [[ $2 = (#b)(/home/pws/perforce/)([^/]##)* ]]; then
|
||||
typeset -ga reply
|
||||
reply=(p:$match[2] $(( ${#match[1]} + ${#match[2]} )) )
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
elif [[ $1 = n ]]; then
|
||||
# turn the name into a directory
|
||||
[[ $2 != (#b)p:(?*) ]] && return 1
|
||||
typeset -ga reply
|
||||
reply=(/home/pws/perforce/$match[1])
|
||||
elif [[ $1 = c ]]; then
|
||||
# complete names
|
||||
local expl
|
||||
local -a dirs
|
||||
dirs=(/home/pws/perforce/*(/:t))
|
||||
dirs=(p:${^dirs})
|
||||
_wanted dynamic-dirs expl 'dynamic directory' compadd -S\] -a dirs
|
||||
return
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
return 0
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue