Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
PATCH: job-completion with strings
- X-seq: zsh-workers 8679
- From: Sven Wischnowsky <wischnow@xxxxxxxxxxxxxxxxxxxxxxx>
- To: zsh-workers@xxxxxxxxxxxxxx
- Subject: PATCH: job-completion with strings
- Date: Fri, 19 Nov 1999 11:04:52 +0100 (MET)
- Mailing-list: contact zsh-workers-help@xxxxxxxxxxxxxx; run by ezmlm
This makes _jobs use the `strings' style. If that is true, the job
references generated as matches will use the stuff from the job-texts
instead of the numbers (i.e. `%foo' instead of `%1'). So:
compstyle '*:jobs' strings yes
For those who like that.
I've made this slightly more complicated because I wanted to avoid
that we get unnecessary long matches like `%for\ i\ in\ ...'. It
tries to use only the shorted unambiguous string for each job.
Bye
Sven
diff -u -r oldcompletion/Base/_jobs Completion/Base/_jobs
--- oldcompletion/Base/_jobs Fri Nov 19 09:55:54 1999
+++ Completion/Base/_jobs Fri Nov 19 10:58:28 1999
@@ -22,13 +22,47 @@
_description expl job
fi
-disp=()
-jobs=()
-for job in "$jids[@]"; do
- [[ -n "$desc" ]] &&
- disp=( "$disp[@]" "${pfx}${(r:2:: :)job} -- ${(r:COLUMNS-8:: :)jobtexts[$job]}" )
- jobs=( "$jobs[@]" "$job" )
-done
+if [[ -n "$desc" ]]; then
+ disp=()
+ for job in "$jids[@]"; do
+ [[ -n "$desc" ]] &&
+ disp=( "$disp[@]" "${pfx}${(r:2:: :)job} -- ${(r:COLUMNS-8:: :)jobtexts[$job]}" )
+ done
+fi
+
+if _style jobs strings; then
+ local texts i text str tmp
+
+ # Find shortest unambiguous strings.
+
+ texts=( "$jobtexts[@]" )
+ jobs=()
+ for i in "$jids[@]"; do
+ text="$jobtexts[$i]"
+ str="${text%% *}"
+ if [[ "$text" = *\ * ]]; then
+ text="${text#* }"
+ else
+ text=""
+ fi
+ tmp=( "${(@M)texts:#${str}*}" )
+ while [[ -n "$text" && $#tmp -ge 2 ]]; do
+ str="${str} ${text%% *}"
+ if [[ "$text" = *\ * ]]; then
+ text="${text#* }"
+ else
+ text=""
+ fi
+ tmp=( "${(@M)texts:#${str}*}" )
+ done
+
+ jobs=( "$jobs[@]" "$str" )
+ done
+
+ [[ -n "$pfx" && -n "$desc" ]] && disp=( "${(@)disp#%}" )
+else
+ jobs=( "$jids[@]" )
+fi
if [[ -n "$desc" ]]; then
compadd "$@" "$expl[@]" -ld disp - "%$^jobs[@]"
diff -u olddoc/Zsh/compsys.yo Doc/Zsh/compsys.yo
--- olddoc/Zsh/compsys.yo Thu Nov 18 11:01:38 1999
+++ Doc/Zsh/compsys.yo Fri Nov 19 10:59:55 1999
@@ -1065,6 +1065,11 @@
and it will stop when the last match is inserted. If this style is set
to tt(verbose) a message will be displayed when the last match is reached.
)
+item(tt(strings))(
+This is used with the tt(jobs) tag. If it is `true', the completions
+will use the shortest unambiguous strings of the jobs' command lines
+instead of the job numbers.
+)
item(tt(substitute))(
If this is unset or set to the empty string, the tt(_expand) completer
will first try to expand all substitutions in the string (such as
--
Sven Wischnowsky wischnow@xxxxxxxxxxxxxxxxxxxxxxx
Messages sorted by:
Reverse Date,
Date,
Thread,
Author