about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2008-09-29 17:40:54 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2008-09-29 17:40:54 +0000
commit773800e0de3598707dca49eb8206d6e38ca654aa (patch)
tree59434f93d36ed6cb163a4325b8826de114a90460
parent7be4f882fe27f2a879f4fe83663e5e33fa1f9c77 (diff)
downloadzsh-773800e0de3598707dca49eb8206d6e38ca654aa.tar.gz
zsh-773800e0de3598707dca49eb8206d6e38ca654aa.tar.xz
zsh-773800e0de3598707dca49eb8206d6e38ca654aa.zip
25733: stub function for dynamic directory name completion
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Zsh/Context/.distfiles1
-rw-r--r--Completion/Zsh/Context/_dynamic_directory_name7
-rw-r--r--Completion/Zsh/Context/_subscript11
4 files changed, 23 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index e1f7a96b5..b50654079 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2008-09-29  Peter Stephenson  <pws@csr.com>
 
+	* 25733: Completion/Zsh/Context/.distfiles,
+	Completion/Zsh/Context/_dynamic_directory_name,
+	Completion/Zsh/Context/_subscript: stub function for dynamic
+	directory name completion.
+
 	* 25772: Src/params.c: searching an associative array with
 	a bad pattern could cause a crash, seen in _expand following
 	"echo ~[]".
diff --git a/Completion/Zsh/Context/.distfiles b/Completion/Zsh/Context/.distfiles
index 8b4acfc7a..1537229f8 100644
--- a/Completion/Zsh/Context/.distfiles
+++ b/Completion/Zsh/Context/.distfiles
@@ -5,6 +5,7 @@ _autocd
 _brace_parameter
 _condition
 _default
+_dynamic_directory_name
 _equal
 _first
 _in_vared
diff --git a/Completion/Zsh/Context/_dynamic_directory_name b/Completion/Zsh/Context/_dynamic_directory_name
new file mode 100644
index 000000000..85f8ff2ee
--- /dev/null
+++ b/Completion/Zsh/Context/_dynamic_directory_name
@@ -0,0 +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'
diff --git a/Completion/Zsh/Context/_subscript b/Completion/Zsh/Context/_subscript
index 0b23c1cac..cef0a46e5 100644
--- a/Completion/Zsh/Context/_subscript
+++ b/Completion/Zsh/Context/_subscript
@@ -10,7 +10,16 @@ fi
 
 compset -P '\(([^\(\)]|\(*\))##\)' # remove subscript flags
 
-if [[ "$PREFIX" = :* ]]; then
+# Look for a dynamic name expansion.  Completion only gives us
+# the stuff inside the square brackets; we need to find out what's
+# outside.  We ought to check for quoting, really, but given we've
+# got to the subscript code " ~[" is pretty likely to be a dynamic
+# name expansion.
+integer pos=$((CURSOR+1))
+while [[ pos > 1 && $BUFFER[pos-1] != '[' ]]; do (( pos-- )); done
+if [[ $BUFFER[1,pos] = *[[:space:]]##\~\[ ]]; then
+  _dynamic_directory_name
+elif [[ "$PREFIX" = :* ]]; then
   _wanted characters expl 'character class' \
       compadd -p: -S ':]' alnum alpha ascii blank cntrl digit graph \
                           lower print punct space upper xdigit