annotate dot_zsh/zsh-history-substring-search.zsh @ 412:ad54efacea8a

Remove lspsaga in favour of built-in hover windows
author zegervdv <zegervdv@me.com>
date Sun, 18 Jul 2021 09:31:34 +0200
parents 44d179225271
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
262
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
1 #!/usr/bin/env zsh
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
2 ##############################################################################
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
3 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
4 # Copyright (c) 2009 Peter Stephenson
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
5 # Copyright (c) 2011 Guido van Steen
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
6 # Copyright (c) 2011 Suraj N. Kurapati
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
7 # Copyright (c) 2011 Sorin Ionescu
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
8 # Copyright (c) 2011 Vincent Guerci
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
9 # Copyright (c) 2016 Geza Lore
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
10 # Copyright (c) 2017 Bengt Brodersen
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
11 # All rights reserved.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
12 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
13 # Redistribution and use in source and binary forms, with or without
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
14 # modification, are permitted provided that the following conditions are met:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
15 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
16 # * Redistributions of source code must retain the above copyright
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
17 # notice, this list of conditions and the following disclaimer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
18 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
19 # * Redistributions in binary form must reproduce the above
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
20 # copyright notice, this list of conditions and the following
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
21 # disclaimer in the documentation and/or other materials provided
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
22 # with the distribution.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
23 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
24 # * Neither the name of the FIZSH nor the names of its contributors
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
25 # may be used to endorse or promote products derived from this
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
26 # software without specific prior written permission.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
27 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
28 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
29 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
30 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
31 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
32 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
33 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
34 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
35 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
36 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
37 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
38 # POSSIBILITY OF SUCH DAMAGE.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
39 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
40 ##############################################################################
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
41
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
42 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
43 # declare global configuration variables
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
44 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
45
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
46 typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND='bg=magenta,fg=white,bold'
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
47 typeset -g HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND='bg=red,fg=white,bold'
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
48 typeset -g HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS='i'
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
49 typeset -g HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE=''
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
50 typeset -g HISTORY_SUBSTRING_SEARCH_FUZZY=''
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
51
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
52 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
53 # declare internal global variables
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
54 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
55
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
56 typeset -g BUFFER MATCH MBEGIN MEND CURSOR
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
57 typeset -g _history_substring_search_refresh_display
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
58 typeset -g _history_substring_search_query_highlight
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
59 typeset -g _history_substring_search_result
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
60 typeset -g _history_substring_search_query
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
61 typeset -g -a _history_substring_search_query_parts
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
62 typeset -g -a _history_substring_search_raw_matches
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
63 typeset -g -i _history_substring_search_raw_match_index
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
64 typeset -g -a _history_substring_search_matches
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
65 typeset -g -i _history_substring_search_match_index
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
66 typeset -g -A _history_substring_search_unique_filter
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
67
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
68 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
69 # the main ZLE widgets
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
70 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
71
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
72 history-substring-search-up() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
73 _history-substring-search-begin
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
74
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
75 _history-substring-search-up-history ||
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
76 _history-substring-search-up-buffer ||
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
77 _history-substring-search-up-search
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
78
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
79 _history-substring-search-end
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
80 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
81
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
82 history-substring-search-down() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
83 _history-substring-search-begin
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
84
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
85 _history-substring-search-down-history ||
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
86 _history-substring-search-down-buffer ||
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
87 _history-substring-search-down-search
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
88
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
89 _history-substring-search-end
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
90 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
91
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
92 zle -N history-substring-search-up
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
93 zle -N history-substring-search-down
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
94
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
95 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
96 # implementation details
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
97 #-----------------------------------------------------------------------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
98
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
99 zmodload -F zsh/parameter
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
100
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
101 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
102 # We have to "override" some keys and widgets if the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
103 # zsh-syntax-highlighting plugin has not been loaded:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
104 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
105 # https://github.com/nicoulaj/zsh-syntax-highlighting
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
106 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
107 if [[ $+functions[_zsh_highlight] -eq 0 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
108 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
109 # Dummy implementation of _zsh_highlight() that
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
110 # simply removes any existing highlights when the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
111 # user inserts printable characters into $BUFFER.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
112 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
113 _zsh_highlight() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
114 if [[ $KEYS == [[:print:]] ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
115 region_highlight=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
116 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
117 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
118
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
119 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
120 # The following snippet was taken from the zsh-syntax-highlighting project:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
121 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
122 # https://github.com/zsh-users/zsh-syntax-highlighting/blob/56b134f5d62ae3d4e66c7f52bd0cc2595f9b305b/zsh-syntax-highlighting.zsh#L126-161
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
123 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
124 # Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
125 # All rights reserved.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
126 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
127 # Redistribution and use in source and binary forms, with or without
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
128 # modification, are permitted provided that the following conditions are
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
129 # met:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
130 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
131 # * Redistributions of source code must retain the above copyright
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
132 # notice, this list of conditions and the following disclaimer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
133 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
134 # * Redistributions in binary form must reproduce the above copyright
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
135 # notice, this list of conditions and the following disclaimer in the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
136 # documentation and/or other materials provided with the distribution.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
137 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
138 # * Neither the name of the zsh-syntax-highlighting contributors nor the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
139 # names of its contributors may be used to endorse or promote products
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
140 # derived from this software without specific prior written permission.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
141 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
142 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
143 # IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
144 # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
145 # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
146 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
147 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
148 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
149 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
150 # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
151 # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
152 # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
153 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
154 #--------------8<-------------------8<-------------------8<-----------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
155 # Rebind all ZLE widgets to make them invoke _zsh_highlights.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
156 _zsh_highlight_bind_widgets()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
157 {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
158 # Load ZSH module zsh/zleparameter, needed to override user defined widgets.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
159 zmodload zsh/zleparameter 2>/dev/null || {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
160 echo 'zsh-syntax-highlighting: failed loading zsh/zleparameter.' >&2
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
161 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
162 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
163
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
164 # Override ZLE widgets to make them invoke _zsh_highlight.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
165 local cur_widget
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
166 for cur_widget in ${${(f)"$(builtin zle -la)"}:#(.*|_*|orig-*|run-help|which-command|beep|yank*)}; do
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
167 case $widgets[$cur_widget] in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
168
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
169 # Already rebound event: do nothing.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
170 user:$cur_widget|user:_zsh_highlight_widget_*);;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
171
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
172 # User defined widget: override and rebind old one with prefix "orig-".
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
173 user:*) eval "zle -N orig-$cur_widget ${widgets[$cur_widget]#*:}; \
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
174 _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
175 zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
176
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
177 # Completion widget: override and rebind old one with prefix "orig-".
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
178 completion:*) eval "zle -C orig-$cur_widget ${${widgets[$cur_widget]#*:}/:/ }; \
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
179 _zsh_highlight_widget_$cur_widget() { builtin zle orig-$cur_widget -- \"\$@\" && _zsh_highlight }; \
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
180 zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
181
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
182 # Builtin widget: override and make it call the builtin ".widget".
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
183 builtin) eval "_zsh_highlight_widget_$cur_widget() { builtin zle .$cur_widget -- \"\$@\" && _zsh_highlight }; \
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
184 zle -N $cur_widget _zsh_highlight_widget_$cur_widget";;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
185
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
186 # Default: unhandled case.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
187 *) echo "zsh-syntax-highlighting: unhandled ZLE widget '$cur_widget'" >&2 ;;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
188 esac
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
189 done
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
190 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
191 #-------------->8------------------->8------------------->8-----------------
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
192
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
193 _zsh_highlight_bind_widgets
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
194 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
195
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
196 _history-substring-search-begin() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
197 setopt localoptions extendedglob
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
198
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
199 _history_substring_search_refresh_display=
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
200 _history_substring_search_query_highlight=
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
201
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
202 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
203 # If the buffer is the same as the previously displayed history substring
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
204 # search result, then just keep stepping through the match list. Otherwise
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
205 # start a new search.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
206 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
207 if [[ -n $BUFFER && $BUFFER == ${_history_substring_search_result:-} ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
208 return;
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
209 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
210
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
211 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
212 # Clear the previous result.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
213 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
214 _history_substring_search_result=''
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
215
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
216 if [[ -z $BUFFER ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
217 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
218 # If the buffer is empty, we will just act like up-history/down-history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
219 # in ZSH, so we do not need to actually search the history. This should
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
220 # speed things up a little.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
221 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
222 _history_substring_search_query=
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
223 _history_substring_search_query_parts=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
224 _history_substring_search_raw_matches=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
225
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
226 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
227 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
228 # For the purpose of highlighting we keep a copy of the original
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
229 # query string.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
230 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
231 _history_substring_search_query=$BUFFER
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
232
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
233 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
234 # compose search pattern
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
235 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
236 if [[ -n $HISTORY_SUBSTRING_SEARCH_FUZZY ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
237 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
238 # `=` split string in arguments
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
239 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
240 _history_substring_search_query_parts=(${=_history_substring_search_query})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
241 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
242 _history_substring_search_query_parts=(${==_history_substring_search_query})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
243 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
244
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
245 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
246 # Escape and join query parts with wildcard character '*' as seperator
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
247 # `(j:CHAR:)` join array to string with CHAR as seperator
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
248 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
249 local search_pattern="*${(j:*:)_history_substring_search_query_parts[@]//(#m)[\][()|\\*?#<>~^]/\\$MATCH}*"
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
250
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
251 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
252 # Find all occurrences of the search pattern in the history file.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
253 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
254 # (k) returns the "keys" (history index numbers) instead of the values
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
255 # (R) returns values in reverse older, so the index of the youngest
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
256 # matching history entry is at the head of the list.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
257 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
258 _history_substring_search_raw_matches=(${(k)history[(R)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)${search_pattern}]})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
259 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
260
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
261 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
262 # In order to stay as responsive as possible, we will process the raw
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
263 # matches lazily (when the user requests the next match) to choose items
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
264 # that need to be displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
265 # _history_substring_search_raw_match_index holds the index of the last
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
266 # unprocessed entry in _history_substring_search_raw_matches. Any items
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
267 # that need to be displayed will be added to
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
268 # _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
269 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
270 # We use an associative array (_history_substring_search_unique_filter) as
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
271 # a 'set' data structure to ensure uniqueness of the results if desired.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
272 # If an entry (key) is in the set (non-empty value), then we have already
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
273 # added that entry to _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
274 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
275 _history_substring_search_raw_match_index=0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
276 _history_substring_search_matches=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
277 _history_substring_search_unique_filter=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
278
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
279 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
280 # If $_history_substring_search_match_index is equal to
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
281 # $#_history_substring_search_matches + 1, this indicates that we
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
282 # are beyond the end of $_history_substring_search_matches and that we
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
283 # have also processed all entries in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
284 # _history_substring_search_raw_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
285 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
286 # If $#_history_substring_search_match_index is equal to 0, this indicates
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
287 # that we are beyond the beginning of $_history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
288 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
289 # If we have initially pressed "up" we have to initialize
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
290 # $_history_substring_search_match_index to 0 so that it will be
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
291 # incremented to 1.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
292 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
293 # If we have initially pressed "down" we have to initialize
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
294 # $_history_substring_search_match_index to 1 so that it will be
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
295 # decremented to 0.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
296 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
297 if [[ $WIDGET == history-substring-search-down ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
298 _history_substring_search_match_index=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
299 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
300 _history_substring_search_match_index=0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
301 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
302 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
303
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
304 _history-substring-search-end() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
305 setopt localoptions extendedglob
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
306
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
307 _history_substring_search_result=$BUFFER
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
308
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
309 # the search was successful so display the result properly by clearing away
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
310 # existing highlights and moving the cursor to the end of the result buffer
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
311 if [[ $_history_substring_search_refresh_display -eq 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
312 region_highlight=()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
313 CURSOR=${#BUFFER}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
314 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
315
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
316 # highlight command line using zsh-syntax-highlighting
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
317 _zsh_highlight
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
318
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
319 # highlight the search query inside the command line
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
320 if [[ -n $_history_substring_search_query_highlight ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
321 # highlight first matching query parts
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
322 local highlight_start_index=0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
323 local highlight_end_index=0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
324 local query_part
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
325 for query_part in $_history_substring_search_query_parts; do
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
326 local escaped_query_part=${query_part//(#m)[\][()|\\*?#<>~^]/\\$MATCH}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
327 # (i) get index of pattern
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
328 local query_part_match_index="${${BUFFER:$highlight_start_index}[(i)(#$HISTORY_SUBSTRING_SEARCH_GLOBBING_FLAGS)${escaped_query_part}]}"
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
329 if [[ $query_part_match_index -le ${#BUFFER:$highlight_start_index} ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
330 highlight_start_index=$(( $highlight_start_index + $query_part_match_index ))
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
331 highlight_end_index=$(( $highlight_start_index + ${#query_part} ))
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
332 region_highlight+=("$(($highlight_start_index - 1)) $(($highlight_end_index - 1)) $_history_substring_search_query_highlight")
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
333 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
334 done
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
335 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
336
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
337 # For debugging purposes:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
338 # zle -R "mn: "$_history_substring_search_match_index" m#: "${#_history_substring_search_matches}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
339 # read -k -t 200 && zle -U $REPLY
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
340
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
341 # Exit successfully from the history-substring-search-* widgets.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
342 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
343 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
344
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
345 _history-substring-search-up-buffer() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
346 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
347 # Check if the UP arrow was pressed to move the cursor within a multi-line
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
348 # buffer. This amounts to three tests:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
349 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
350 # 1. $#buflines -gt 1.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
351 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
352 # 2. $CURSOR -ne $#BUFFER.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
353 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
354 # 3. Check if we are on the first line of the current multi-line buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
355 # If so, pressing UP would amount to leaving the multi-line buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
356 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
357 # We check this by adding an extra "x" to $LBUFFER, which makes
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
358 # sure that xlbuflines is always equal to the number of lines
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
359 # until $CURSOR (including the line with the cursor on it).
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
360 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
361 local buflines XLBUFFER xlbuflines
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
362 buflines=(${(f)BUFFER})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
363 XLBUFFER=$LBUFFER"x"
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
364 xlbuflines=(${(f)XLBUFFER})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
365
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
366 if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xlbuflines -ne 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
367 zle up-line-or-history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
368 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
369 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
370
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
371 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
372 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
373
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
374 _history-substring-search-down-buffer() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
375 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
376 # Check if the DOWN arrow was pressed to move the cursor within a multi-line
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
377 # buffer. This amounts to three tests:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
378 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
379 # 1. $#buflines -gt 1.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
380 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
381 # 2. $CURSOR -ne $#BUFFER.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
382 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
383 # 3. Check if we are on the last line of the current multi-line buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
384 # If so, pressing DOWN would amount to leaving the multi-line buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
385 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
386 # We check this by adding an extra "x" to $RBUFFER, which makes
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
387 # sure that xrbuflines is always equal to the number of lines
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
388 # from $CURSOR (including the line with the cursor on it).
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
389 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
390 local buflines XRBUFFER xrbuflines
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
391 buflines=(${(f)BUFFER})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
392 XRBUFFER="x"$RBUFFER
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
393 xrbuflines=(${(f)XRBUFFER})
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
394
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
395 if [[ $#buflines -gt 1 && $CURSOR -ne $#BUFFER && $#xrbuflines -ne 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
396 zle down-line-or-history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
397 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
398 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
399
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
400 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
401 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
402
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
403 _history-substring-search-up-history() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
404 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
405 # Behave like up in ZSH, except clear the $BUFFER
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
406 # when beginning of history is reached like in Fish.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
407 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
408 if [[ -z $_history_substring_search_query ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
409
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
410 # we have reached the absolute top of history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
411 if [[ $HISTNO -eq 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
412 BUFFER=
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
413
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
414 # going up from somewhere below the top of history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
415 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
416 zle up-line-or-history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
417 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
418
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
419 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
420 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
421
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
422 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
423 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
424
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
425 _history-substring-search-down-history() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
426 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
427 # Behave like down-history in ZSH, except clear the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
428 # $BUFFER when end of history is reached like in Fish.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
429 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
430 if [[ -z $_history_substring_search_query ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
431
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
432 # going down from the absolute top of history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
433 if [[ $HISTNO -eq 1 && -z $BUFFER ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
434 BUFFER=${history[1]}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
435 _history_substring_search_refresh_display=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
436
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
437 # going down from somewhere above the bottom of history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
438 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
439 zle down-line-or-history
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
440 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
441
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
442 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
443 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
444
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
445 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
446 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
447
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
448 _history_substring_search_process_raw_matches() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
449 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
450 # Process more outstanding raw matches and append any matches that need to
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
451 # be displayed to the user to _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
452 # Return whether there were any more results appended.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
453 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
454
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
455 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
456 # While we have more raw matches. Process them to see if there are any more
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
457 # matches that need to be displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
458 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
459 while [[ $_history_substring_search_raw_match_index -lt $#_history_substring_search_raw_matches ]]; do
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
460 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
461 # Move on to the next raw entry and get its history index.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
462 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
463 _history_substring_search_raw_match_index+=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
464 local index=${_history_substring_search_raw_matches[$_history_substring_search_raw_match_index]}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
465
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
466 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
467 # If HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE is set to a non-empty value,
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
468 # then ensure that only unique matches are presented to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
469 # When HIST_IGNORE_ALL_DUPS is set, ZSH already ensures a unique history,
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
470 # so in this case we do not need to do anything.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
471 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
472 if [[ ! -o HIST_IGNORE_ALL_DUPS && -n $HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
473 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
474 # Get the actual history entry at the new index, and check if we have
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
475 # already added it to _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
476 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
477 local entry=${history[$index]}
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
478
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
479 if [[ -z ${_history_substring_search_unique_filter[$entry]} ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
480 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
481 # This is a new unique entry. Add it to the filter and append the
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
482 # index to _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
483 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
484 _history_substring_search_unique_filter[$entry]=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
485 _history_substring_search_matches+=($index)
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
486
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
487 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
488 # Indicate that we did find a match.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
489 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
490 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
491 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
492
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
493 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
494 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
495 # Just append the new history index to the processed matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
496 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
497 _history_substring_search_matches+=($index)
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
498
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
499 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
500 # Indicate that we did find a match.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
501 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
502 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
503 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
504
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
505 done
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
506
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
507 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
508 # We are beyond the end of the list of raw matches. Indicate that no
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
509 # more matches are available.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
510 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
511 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
512 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
513
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
514 _history-substring-search-has-next() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
515 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
516 # Predicate function that returns whether any more older matches are
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
517 # available.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
518 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
519
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
520 if [[ $_history_substring_search_match_index -lt $#_history_substring_search_matches ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
521 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
522 # We did not reach the end of the processed list, so we do have further
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
523 # matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
524 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
525 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
526
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
527 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
528 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
529 # We are at the end of the processed list. Try to process further
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
530 # unprocessed matches. _history_substring_search_process_raw_matches
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
531 # returns whether any more matches were available, so just return
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
532 # that result.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
533 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
534 _history_substring_search_process_raw_matches
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
535 return $?
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
536 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
537 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
538
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
539 _history-substring-search-has-prev() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
540 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
541 # Predicate function that returns whether any more younger matches are
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
542 # available.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
543 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
544
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
545 if [[ $_history_substring_search_match_index -gt 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
546 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
547 # We did not reach the beginning of the processed list, so we do have
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
548 # further matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
549 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
550 return 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
551
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
552 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
553 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
554 # We are at the beginning of the processed list. We do not have any more
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
555 # matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
556 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
557 return 1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
558 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
559 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
560
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
561 _history-substring-search-found() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
562 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
563 # A match is available. The index of the match is held in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
564 # $_history_substring_search_match_index
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
565 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
566 # 1. Make $BUFFER equal to the matching history entry.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
567 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
568 # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
569 # to highlight the current buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
570 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
571 BUFFER=$history[$_history_substring_search_matches[$_history_substring_search_match_index]]
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
572 _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_FOUND
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
573 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
574
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
575 _history-substring-search-not-found() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
576 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
577 # No more matches are available.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
578 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
579 # 1. Make $BUFFER equal to $_history_substring_search_query so the user can
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
580 # revise it and search again.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
581 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
582 # 2. Use $HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
583 # to highlight the current buffer.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
584 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
585 BUFFER=$_history_substring_search_query
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
586 _history_substring_search_query_highlight=$HISTORY_SUBSTRING_SEARCH_HIGHLIGHT_NOT_FOUND
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
587 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
588
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
589 _history-substring-search-up-search() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
590 _history_substring_search_refresh_display=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
591
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
592 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
593 # Select history entry during history-substring-down-search:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
594 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
595 # The following variables have been initialized in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
596 # _history-substring-search-up/down-search():
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
597 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
598 # $_history_substring_search_matches is the current list of matches that
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
599 # need to be displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
600 # $_history_substring_search_match_index is the index of the current match
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
601 # that is being displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
602 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
603 # The range of values that $_history_substring_search_match_index can take
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
604 # is: [0, $#_history_substring_search_matches + 1]. A value of 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
605 # indicates that we are beyond the beginning of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
606 # $_history_substring_search_matches. A value of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
607 # $#_history_substring_search_matches + 1 indicates that we are beyond
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
608 # the end of $_history_substring_search_matches and that we have also
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
609 # processed all entries in _history_substring_search_raw_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
610 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
611 # If $_history_substring_search_match_index equals
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
612 # $#_history_substring_search_matches and
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
613 # $_history_substring_search_raw_match_index is not greater than
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
614 # $#_history_substring_search_raw_matches, then we need to further process
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
615 # $_history_substring_search_raw_matches to see if there are any more
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
616 # entries that need to be displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
617 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
618 # In _history-substring-search-up-search() the initial value of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
619 # $_history_substring_search_match_index is 0. This value is set in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
620 # _history-substring-search-begin(). _history-substring-search-up-search()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
621 # will initially increment it to 1.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
622 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
623
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
624 if [[ $_history_substring_search_match_index -gt $#_history_substring_search_matches ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
625 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
626 # We are beyond the end of $_history_substring_search_matches. This
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
627 # can only happen if we have also exhausted the unprocessed matches in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
628 # _history_substring_search_raw_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
629 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
630 # 1. Update display to indicate search not found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
631 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
632 _history-substring-search-not-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
633 return
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
634 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
635
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
636 if _history-substring-search-has-next; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
637 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
638 # We do have older matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
639 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
640 # 1. Move index to point to the next match.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
641 # 2. Update display to indicate search found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
642 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
643 _history_substring_search_match_index+=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
644 _history-substring-search-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
645
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
646 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
647 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
648 # We do not have older matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
649 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
650 # 1. Move the index beyond the end of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
651 # _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
652 # 2. Update display to indicate search not found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
653 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
654 _history_substring_search_match_index+=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
655 _history-substring-search-not-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
656 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
657
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
658 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
659 # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
660 # history should be matched, make sure the new and old results are different.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
661 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
662 # However, if the HIST_IGNORE_ALL_DUPS shell option, or
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
663 # HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE is set, then we already have a
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
664 # unique history, so in this case we do not need to do anything.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
665 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
666 if [[ -o HIST_IGNORE_ALL_DUPS || -n $HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
667 return
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
668 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
669
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
670 if [[ -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
671 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
672 # Repeat the current search so that a different (unique) match is found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
673 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
674 _history-substring-search-up-search
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
675 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
676 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
677
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
678 _history-substring-search-down-search() {
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
679 _history_substring_search_refresh_display=1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
680
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
681 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
682 # Select history entry during history-substring-down-search:
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
683 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
684 # The following variables have been initialized in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
685 # _history-substring-search-up/down-search():
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
686 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
687 # $_history_substring_search_matches is the current list of matches that
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
688 # need to be displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
689 # $_history_substring_search_match_index is the index of the current match
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
690 # that is being displayed to the user.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
691 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
692 # The range of values that $_history_substring_search_match_index can take
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
693 # is: [0, $#_history_substring_search_matches + 1]. A value of 0
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
694 # indicates that we are beyond the beginning of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
695 # $_history_substring_search_matches. A value of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
696 # $#_history_substring_search_matches + 1 indicates that we are beyond
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
697 # the end of $_history_substring_search_matches and that we have also
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
698 # processed all entries in _history_substring_search_raw_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
699 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
700 # In _history-substring-search-down-search() the initial value of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
701 # $_history_substring_search_match_index is 1. This value is set in
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
702 # _history-substring-search-begin(). _history-substring-search-down-search()
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
703 # will initially decrement it to 0.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
704 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
705
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
706 if [[ $_history_substring_search_match_index -lt 1 ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
707 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
708 # We are beyond the beginning of $_history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
709 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
710 # 1. Update display to indicate search not found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
711 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
712 _history-substring-search-not-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
713 return
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
714 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
715
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
716 if _history-substring-search-has-prev; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
717 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
718 # We do have younger matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
719 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
720 # 1. Move index to point to the previous match.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
721 # 2. Update display to indicate search found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
722 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
723 _history_substring_search_match_index+=-1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
724 _history-substring-search-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
725
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
726 else
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
727 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
728 # We do not have younger matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
729 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
730 # 1. Move the index beyond the beginning of
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
731 # _history_substring_search_matches.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
732 # 2. Update display to indicate search not found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
733 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
734 _history_substring_search_match_index+=-1
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
735 _history-substring-search-not-found
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
736 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
737
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
738 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
739 # When HIST_FIND_NO_DUPS is set, meaning that only unique command lines from
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
740 # history should be matched, make sure the new and old results are different.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
741 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
742 # However, if the HIST_IGNORE_ALL_DUPS shell option, or
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
743 # HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE is set, then we already have a
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
744 # unique history, so in this case we do not need to do anything.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
745 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
746 if [[ -o HIST_IGNORE_ALL_DUPS || -n $HISTORY_SUBSTRING_SEARCH_ENSURE_UNIQUE ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
747 return
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
748 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
749
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
750 if [[ -o HIST_FIND_NO_DUPS && $BUFFER == $_history_substring_search_result ]]; then
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
751 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
752 # Repeat the current search so that a different (unique) match is found.
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
753 #
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
754 _history-substring-search-down-search
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
755 fi
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
756 }
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
757
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
758 # -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
44d179225271 Add history substring search plugin
zegervdv <zegervdv@me.com>
parents:
diff changeset
759 # vim: ft=zsh sw=2 ts=2 et