* PATCH: Re: Completing strings from history?
@ 2001-03-28 12:15 Sven Wischnowsky
0 siblings, 0 replies; 2+ messages in thread
From: Sven Wischnowsky @ 2001-03-28 12:15 UTC (permalink / raw)
To: zsh-workers
Bart Schaefer wrote:
> On Mar 27, 11:13am, Sven Wischnowsky wrote:
> } Subject: PATCH: Re: Completing strings from history?
> }
> } Ok, below is my first attempt at making _history_complete_words
> } smarter. I didn't integrate Bart's changes, maybe that should be
> } done.
> }
> } The behaviour is now to stop at the beginning/end once. Going up or
> } down in the previously used direction will wrap around.
>
> If it does that, then it's not necessary to integrate my changes; mine
> simply caused it to cycle without pausing.
>
> } I hope with the style settings Bart and Adam reported the behaviour is
> } now good enough...
>
> I haven't tried it yet, but shouldn't there be some way to turn on menu
> behavior with a style rather than requiring `setopt menucomplete'?
I need comments from Adam about all the things I'm doing to his
function...
This patch changes things some more:
- the stop style is now boolean; if `true' it will make _h_c_w stop
once before wrapping around, otherwise it wraps immediately, as in a
menu completion
- menu behaviour is now selected using the `menu' style or the options
(this is actually just an effect of looking at what _main_complete did)
- the list style is only used if it is set to `false'; then the list
will not be shown, otherwise this is selected with the options as usual
The function now shows some kind of automatic automenu behaviour which
seems to be sensible for this function (and doesn't get in the way
anyway, I think).
Plus this now uses the _history completer to do the work (that
contains code originally take from _h_c_w).
This is now almost a model of what could be possible with menu
completion implemented in shell code...
Bye
Sven
Index: Completion/Commands/_history_complete_word
===================================================================
RCS file: /cvsroot/zsh/zsh/Completion/Commands/_history_complete_word,v
retrieving revision 1.11
diff -u -r1.11 _history_complete_word
--- Completion/Commands/_history_complete_word 2001/03/27 09:14:52 1.11
+++ Completion/Commands/_history_complete_word 2001/03/28 12:13:21
@@ -7,9 +7,8 @@
#
# Available styles:
#
-# list -- display lists of available matches
-# stop -- prevent looping at beginning and end of matches during
-# menu-completion
+# list -- avoid to display lists of available matches
+# stop -- stop before looping at beginning and end of matches
# sort -- sort matches lexically (default is to sort by age)
# remove-all-dups --
# remove /all/ duplicate matches rather than just consecutives
@@ -19,7 +18,6 @@
setopt localoptions ${_comp_options[@]}
local expl direction stop curcontext="$curcontext"
- local max slice hmax=$#historywords
if [[ -z "$curcontext" ]]; then
curcontext=history-words:::
@@ -33,26 +31,12 @@
direction=older
fi
- zstyle -s ":completion:${curcontext}:history-words" stop stop
+ zstyle -t ":completion:${curcontext}:history-words" stop && stop=yes
- zstyle -t ":completion:${curcontext}:history-words" list || compstate[list]=''
+ zstyle -T ":completion:${curcontext}:history-words" list || compstate[list]=''
- if zstyle -s ":completion:${curcontext}:history-words" range max; then
- if [[ $max = *:* ]]; then
- slice=${max#*:}
- max=${max%:*}
- else
- slice=$max
- fi
- [[ max -gt hmax ]] && max=$hmax
- else
- max=$hmax
- slice=$max
- fi
-
- if [[ ( -n "$compstate[old_list]" ||
- ( $LASTWIDGET = _history-complete-* && -n $_hist_stop ) ) &&
- ( -n "$stop" || "$compstate[insert]" = menu ) ]]; then
+ if [[ $LASTWIDGET = _history-complete-* &&
+ ( -n "$compstate[old_list]" || -n $_hist_stop ) ]]; then
if [[ "$direction" == older ]]; then
if [[ $_hist_stop = new ]]; then
PREFIX=$_hist_old_prefix
@@ -67,10 +51,13 @@
elif [[ compstate[old_insert] -lt _hist_menu_length ]]; then
compstate[old_list]=keep
(( compstate[insert] = compstate[old_insert] + 1 ))
- else
+ elif [[ -n $stop ]]; then
_hist_stop=old
_message 'beginning of history reached'
return 1
+ else
+ compstate[old_list]=keep
+ compstate[insert]=1
fi
elif [[ "$direction" == 'newer' ]]; then
if [[ $_hist_stop = old ]]; then
@@ -86,10 +73,13 @@
elif [[ compstate[old_insert] -gt 1 ]]; then
compstate[old_list]=keep
(( compstate[insert] = compstate[old_insert] - 1 ))
- else
+ elif [[ -n $stop ]]; then
_hist_stop=new
_message 'end of history reached'
return 1
+ else
+ compstate[old_list]=keep
+ compstate[insert]=$_hist_menu_length
fi
fi
return 0
@@ -103,47 +93,29 @@
}
_history_complete_word_gen_matches () {
- local opt beg=2
[[ -n "$_hist_stop" ]] && PREFIX="$_hist_old_prefix"
- if zstyle -t ":completion:${curcontext}:history-words" remove-all-dups; then
- opt=-
- else
- opt=-1
- fi
- if zstyle -t ":completion:${curcontext}:history-words" sort; then
- opt="${opt}J"
- else
- opt="${opt}V"
- fi
-
- PREFIX="$IPREFIX$PREFIX"
- IPREFIX=
- SUFFIX="$SUFFIX$ISUFFIX"
- ISUFFIX=
-
- while [[ $compstate[nmatches] -eq 0 && beg -lt max ]]; do
- _main_complete - history _wanted "$opt" history-words expl 'history word' \
- compadd -Q -a 'historywords[beg,beg+slice]'
- (( beg+=slice ))
- done
+ _main_complete _history
- zstyle -t ":completion:${curcontext}:history-words" list ||
- compstate[list]=
+ zstyle -T ":completion:${curcontext}:history-words" list || compstate[list]=
_hist_menu_length="$compstate[nmatches]"
+
+ if [[ $_lastcomp[insert] != *unambig* ]]; then
+ case "$direction" in
+ newer) compstate[insert]=$_hist_menu_length
+ [[ -n "$_hist_stop" ]] && (( compstate[insert]-- ))
+ ;;
+ older) compstate[insert]=1
+ [[ -n "$_hist_stop" ]] && (( compstate[insert]++ ))
+ ;;
+ esac
+ fi
- case "$direction" in
- newer) compstate[insert]=$_hist_menu_length
- [[ -n "$_hist_stop" ]] && (( compstate[insert]-- ))
- ;;
- older) compstate[insert]=1
- [[ -n "$_hist_stop" ]] && (( compstate[insert]++ ))
- ;;
- esac
+ _hist_stop=
- [[ -n "$_hist_stop" ]] && _hist_stop=''
+ return
}
_history_complete_word "$@"
Index: Doc/Zsh/compsys.yo
===================================================================
RCS file: /cvsroot/zsh/zsh/Doc/Zsh/compsys.yo,v
retrieving revision 1.113
diff -u -r1.113 compsys.yo
--- Doc/Zsh/compsys.yo 2001/03/28 11:26:06 1.113
+++ Doc/Zsh/compsys.yo 2001/03/28 12:13:24
@@ -1470,9 +1470,11 @@
)
kindex(list, completion style)
item(tt(list))(
-This style is used by the tt(_history_complete_word) bindable command to
-decide if the available matches should be shown. Use the context prefix
-`tt(:completion:history-words)'.
+This style is used by the tt(_history_complete_word) bindable command.
+If it is set to `true' it has no effect, but if it is set to `false'
+the matches will not be listed, overriding the setting of the options
+that control listing behaviour, especially tt(AUTO_LIST). Use the
+context prefix `tt(:completion:history-words)'.
)
kindex(list-colors, completion style)
item(tt(list-colors))(
@@ -1917,10 +1919,11 @@
kindex(stop, completion style)
item(tt(stop))(
If set to `true', the tt(_history_complete_word) bindable
-command will always insert matches as if menu completion were started
-and 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.
+command will stop once when reaching the beginning or end of the
+history. Invoking tt(_history_complete_word) will then wrap around to
+the opposite end of the history. If this style is set to `false' (the
+default), tt(_history_complete_word) will loop immediately as in a
+menu completion.
)
kindex(subst-globs-only, completion style)
item(tt(subst-globs-only))(
--
Sven Wischnowsky wischnow@informatik.hu-berlin.de
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: PATCH: Re: Completing strings from history?
[not found] <200103270913.LAA14857@beta.informatik.hu-berlin.de>
@ 2001-03-27 17:27 ` Bart Schaefer
0 siblings, 0 replies; 2+ messages in thread
From: Bart Schaefer @ 2001-03-27 17:27 UTC (permalink / raw)
To: zsh-workers
[ Moved to -workers ]
On Mar 27, 11:13am, Sven Wischnowsky wrote:
} Subject: PATCH: Re: Completing strings from history?
}
} Ok, below is my first attempt at making _history_complete_words
} smarter. I didn't integrate Bart's changes, maybe that should be
} done.
}
} The behaviour is now to stop at the beginning/end once. Going up or
} down in the previously used direction will wrap around.
If it does that, then it's not necessary to integrate my changes; mine
simply caused it to cycle without pausing.
} I hope with the style settings Bart and Adam reported the behaviour is
} now good enough...
I haven't tried it yet, but shouldn't there be some way to turn on menu
behavior with a style rather than requiring `setopt menucomplete'?
--
Bart Schaefer Brass Lantern Enterprises
http://www.well.com/user/barts http://www.brasslantern.com
Zsh: http://www.zsh.org | PHPerl Project: http://phperl.sourceforge.net
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2001-03-28 12:15 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-03-28 12:15 PATCH: Re: Completing strings from history? Sven Wischnowsky
[not found] <200103270913.LAA14857@beta.informatik.hu-berlin.de>
2001-03-27 17:27 ` Bart Schaefer
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).