Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: path completion and directories
- X-seq: zsh-workers 15995
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxx
- Subject: Re: path completion and directories
- Date: Tue, 9 Oct 2001 14:44:59 +0200
- In-reply-to: <935.1002619326@xxxxxxx>
- Mailing-list: contact zsh-workers-help@xxxxxxxxxx; run by ezmlm
- References: <15298.48602.921762.987083@xxxxxxxxxxxxxxxxxx> <935.1002619326@xxxxxxx>
Peter Stephenson wrote:
> ...
>
> I tend to think mixing in directories should be the default. It can be a
> little confusing otherwise if you aren't familiar with the system.
Ok, then, here's the patch.
> By the way, you do know about the _next_tags widget? If you bind it, you
> can use that key for swapping between files and directories. I don't know
> if it will still allow you switch to globbed files, then directories if the
> default changes, but that would be useful.
This is easy to achieve, so easy that I've prepared it in the patch
(see the lines starting with `###'). This is still commented out
because I'm not sure about the order in which pattern (-combinations)
should be tried.
The two things that look sensible to me are:
globbed and dirs
all
only globbed
only dirs
Or maybe:
globbed and dirs
only globbed
only dirs
all
So which order do you prefer? (Not only Peter is asked and not only
the two versions above are on offer, of course.)
Bye
Sven
Index: Completion/Unix/Type/_files
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Unix/Type/_files,v
retrieving revision 1.4
diff -u -r1.4 _files
--- Completion/Unix/Type/_files 2001/07/13 08:09:52 1.4
+++ Completion/Unix/Type/_files 2001/10/09 12:41:30
@@ -37,12 +37,25 @@
done
else
if [[ "$type" = *g* ]]; then
- if [[ "$type" = */* ]]; then
- pats=( " ${glob//:/\\:}:globbed-files *(-/):directories" '*:all-files ' )
- else
- pats=( " ${glob//:/\\:}:globbed-files "
- '*(-/):directories ' '*:all-files ' )
- fi
+
+ # People prefer to have directories shown on first try as default.
+ # Even if the calling function didn't use -/.
+ #
+ # if [[ "$type" = */* ]]; then
+
+ pats=( " ${glob//:/\\:}:globbed-files *(-/):directories" '*:all-files '
+
+ ### We could allow _next_tags to offer only globbed-files or directories
+ ### by adding:
+ ### " ${glob//:/\\:}:only-globbed-files " ' *(-/):only-directories '
+
+ )
+
+ # else
+ # pats=( " ${glob//:/\\:}:globbed-files "
+ # '*(-/):directories ' '*:all-files ' )
+ # fi
+
elif [[ "$type" = */* ]]; then
pats=( '*(-/):directories ' '*:all-files ' )
else
@@ -53,15 +66,16 @@
tried=()
for def in "$pats[@]"; do
eval "def=( ${${def:gs/\\:/\\\\\\\\\\\\:}//(#b)([][()|*?^#~<>])/\\${match[1]}} )"
+
+ tmp="${(@M)def#*[^\\]:}"
+ (( $tried[(I)${(q)tmp}] )) && continue
+ tried=( "$tried[@]" "$tmp" )
+
for sdef in "$def[@]"; do
tag="${${sdef#*[^\\]:}%%:*}"
pat="${${sdef%%:${tag}*}//\\:/:}"
- (( $tried[(I)${(q)pat}] )) && continue
-
- tried=( "$tried[@]" "$pat" )
-
if [[ "$sdef" = *:${tag}:* ]]; then
descr="${(Q)sdef#*:${tag}:}"
else
@@ -86,7 +100,13 @@
done
(( ret )) || break
done
+
+ ### For that _next_tags change mentioned above we would have to
+ ### comment out the following line. (Or not, depending on the order
+ ### of the patterns.)
+
[[ "$pat" = '*' ]] && return ret
+
done
(( ret )) || return 0
done
Index: Doc/Zsh/compsys.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v
retrieving revision 1.135
diff -u -r1.135 compsys.yo
--- Doc/Zsh/compsys.yo 2001/10/05 11:18:37 1.135
+++ Doc/Zsh/compsys.yo 2001/10/09 12:41:31
@@ -1111,10 +1111,12 @@
item(tt(file-patterns))(
In most places where filenames are completed, the function tt(_files)
is used which can be configured with this style. If the style is
-unset, tt(_files) offers, one after another, up to three tags:
+unset, tt(_files) offers, up to three tags:
`tt(globbed-files)',
`tt(directories)' and `tt(all-files)', depending on the types of files
-expected by the caller of tt(_files).
+expected by the caller of tt(_files). The first two
+(`tt(globbed-files)' and `tt(directories)') are normally offered
+together to make it easier to complete files in sub-directories.
If the tt(file-patterns) style is set, the default tags are not
used. Instead, the value of the style says which tags and which
@@ -1149,15 +1151,15 @@
example(zstyle ':completion:*:*:rm:*' file-patterns \
'*.o:object-files' '%p:all-files')
-Another interesting example is to change the default behaviour that
-makes completion first offer files matching the patterns given by the
-calling function, then directories and then all files. Many people
-prefer to get both the files matching the given patterns and the
-directories in the first try and all files at the second try. To
-achieve this, one could do:
+Another interesting example is to change the default behaviour in a
+way that makes completion first offer files matching the patterns
+given by the calling function, then directories and then all files.
+Some people prefer this over getting both the files matching the given
+patterns and the directories in the first try and all files at the
+second try. To achieve this, one could do:
example(zstyle ':completion:*' file-patterns \
- '%p:globbed-files *(-/):directories' '*:all-files')
+ '%p:globbed-files' '*(-/):directories' '*:all-files')
This works even for contexts in which all files would be completed,
because tt(_files) will not try a pattern more than once and it stops
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author