annotate dot_zsh/zsh-history-substring-search.zsh @ 319:b93f12d23fbd

Rename init.lua to config.lua init.lua is now automatically sourced, and runs before init.vim causing issues like lspconfig that cannot be found. Renaming to something that will not be sourced automatically and manually load it from init.vim when all plugins are loaded
author Zeger Van de Vannet <zegervdv@me.com>
date Thu, 17 Dec 2020 17:49:14 +0100
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