diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md index 37bf991..fc2a1fa 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## v0.6.4 +- Fix `vi-forward-char` triggering a bell when using it to accept a suggestion (#488) +- New configuration option to skip completion suggestions when buffer matches a pattern (#487) +- New configuration option to ignore history entries matching a pattern (#456) + ## v0.6.3 - Fixed bug moving cursor to end of buffer after accepting suggestion (#453) diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md index 5dacd85..06d26e3 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/README.md @@ -35,7 +35,7 @@ You may want to override the default global config variables. Default values of ### Suggestion Highlight Style -Set `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` to configure the style that the suggestion is shown with. The default is `fg=8`, which will set the foreground color to color 8 from the 256-color palette. If your terminal only supports 8 colors, you will need to use a number between 0 and 7. +Set `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` to configure the style that the suggestion is shown with. The default is `fg=8`, which will set the foreground color to color 8 from the [256-color palette](https://upload.wikimedia.org/wikipedia/commons/1/15/Xterm_256color_chart.svg). If your terminal only supports 8 colors, you will need to use a number between 0 and 7. Background color can also be set, and the suggestion can be styled bold, underlined, or standout. For example, this would show suggestions with bold, underlined, pink text on a cyan background: @@ -53,8 +53,8 @@ For more info, read the Character Highlighting section of the zsh manual: `man z `ZSH_AUTOSUGGEST_STRATEGY` is an array that specifies how suggestions should be generated. The strategies in the array are tried successively until a suggestion is found. There are currently three built-in strategies to choose from: - `history`: Chooses the most recent match from history. +- `completion`: Chooses a suggestion based on what tab-completion would suggest. (requires `zpty` module) - `match_prev_cmd`: Like `history`, but chooses the most recent match whose preceding history item matches the most recently executed command ([more info](src/strategies/match_prev_cmd.zsh)). Note that this strategy won't work as expected with ZSH options that don't preserve the history order such as `HIST_IGNORE_ALL_DUPS` or `HIST_EXPIRE_DUPS_FIRST`. -- `completion`: (experimental) Chooses a suggestion based on what tab-completion would suggest. (requires `zpty` module) For example, setting `ZSH_AUTOSUGGEST_STRATEGY=(history completion)` will first try to find a suggestion from your history, but, if it can't find a match, will find a suggestion from the completion engine. @@ -87,6 +87,18 @@ As of `v0.4.0`, suggestions can be fetched asynchronously. To enable this behavi Set `ZSH_AUTOSUGGEST_MANUAL_REBIND` (it can be set to anything) to disable automatic widget re-binding on each precmd. This can be a big boost to performance, but you'll need to handle re-binding yourself if any of the widget lists change or if you or another plugin wrap any of the autosuggest widgets. To re-bind widgets, run `_zsh_autosuggest_bind_widgets`. +### Ignoring history suggestions that match a pattern + +Set `ZSH_AUTOSUGGEST_HISTORY_IGNORE` to a glob pattern to prevent offering suggestions for history entries that match the pattern. For example, set it to `"cd *"` to never suggest any `cd` commands from history. Or set to `"?(#c50,)"` to never suggest anything 50 characters or longer. + +**Note:** This only affects the `history` and `match_prev_cmd` suggestion strategies. + +### Skipping completion suggestions for certain cases + +Set `ZSH_AUTOSUGGEST_COMPLETION_IGNORE` to a glob pattern to prevent offering completion suggestions when the buffer matches that pattern. For example, set it to `"git *"` to disable completion suggestions for git subcommands. + +**Note:** This only affects the `completion` suggestion strategy. + ### Key Bindings diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION index e4c57af..2fc7b36 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/VERSION @@ -1 +1 @@ -v0.6.3 +v0.6.4 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD index c17df35..dc84510 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/FETCH_HEAD @@ -1,10 +1,12 @@ -4016ff795bb184461996c5539327befc8da2af6f branch 'master' of https://github.com/zsh-users/zsh-autosuggestions -bdbe43e667824e0a4e5e16cdc500ce00b9001dc0 not-for-merge branch 'develop' of https://github.com/zsh-users/zsh-autosuggestions +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d branch 'master' of https://github.com/zsh-users/zsh-autosuggestions +9ad039443f8fca082d93efb16b36c20c92f444e0 not-for-merge branch 'develop' of https://github.com/zsh-users/zsh-autosuggestions b27277e7ff0f877f3189211ccd57da9ebec5e743 not-for-merge branch 'experiments/strategies-by-pattern' of https://github.com/zsh-users/zsh-autosuggestions +767d55eba0355d9ef9270df3ca257a936cf0eac5 not-for-merge branch 'features/background-initialization' of https://github.com/zsh-users/zsh-autosuggestions 36dae44064a7bf088fb1dec74c8463d5b6f3d3c8 not-for-merge branch 'features/hist-words-suggestions' of https://github.com/zsh-users/zsh-autosuggestions 161de32912a3426dc686db38250913227dd91948 not-for-merge branch 'features/redraw-hook' of https://github.com/zsh-users/zsh-autosuggestions 15bcfd712664bb301113761f886718fd3bea7bc2 not-for-merge branch 'fixes/copy-earlier-word' of https://github.com/zsh-users/zsh-autosuggestions 141f497d1751ea7c8f3bd7e4fb0e2e031d6d302b not-for-merge branch 'fixes/kill-multiple-words' of https://github.com/zsh-users/zsh-autosuggestions +4ccfdb2435ea4b82983bf22bb2913c0773992cce not-for-merge branch 'fixes/partial-accept-duplicate-word' of https://github.com/zsh-users/zsh-autosuggestions 9fb96753069b919deaaacb6f659be2339dfeb4d2 not-for-merge branch 'fixes/slow_bracketed_paste_magic' of https://github.com/zsh-users/zsh-autosuggestions 20c0ea841bafa78d8fb75c767e780248bfdf11a4 not-for-merge branch 'no-server' of https://github.com/zsh-users/zsh-autosuggestions -0f0f221180b1fec3254e74d8d657c3a929870b1b not-for-merge branch 'refactor-null-byte-split' of https://github.com/zsh-users/zsh-autosuggestions +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d not-for-merge tag 'v0.6.4' of https://github.com/zsh-users/zsh-autosuggestions diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD index 377c3db..d7323bc 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/HEAD @@ -1,2 +1,3 @@ 0000000000000000000000000000000000000000 43f3bc4010b2c697d2252fdd8b36a577ea125881 Darren Leatherbarrow 1566677621 +0100 clone: from https://github.com/zsh-users/zsh-autosuggestions 43f3bc4010b2c697d2252fdd8b36a577ea125881 4016ff795bb184461996c5539327befc8da2af6f Darren Leatherbarrow 1570875469 +0100 pull: Fast-forward +4016ff795bb184461996c5539327befc8da2af6f ae315ded4dba10685dbbafbfa2ff3c1aefeb490d DazAh <9095216+DazAh@users.noreply.github.com> 1587292881 +0100 pull: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master index 377c3db..d7323bc 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_heads/master @@ -1,2 +1,3 @@ 0000000000000000000000000000000000000000 43f3bc4010b2c697d2252fdd8b36a577ea125881 Darren Leatherbarrow 1566677621 +0100 clone: from https://github.com/zsh-users/zsh-autosuggestions 43f3bc4010b2c697d2252fdd8b36a577ea125881 4016ff795bb184461996c5539327befc8da2af6f Darren Leatherbarrow 1570875469 +0100 pull: Fast-forward +4016ff795bb184461996c5539327befc8da2af6f ae315ded4dba10685dbbafbfa2ff3c1aefeb490d DazAh <9095216+DazAh@users.noreply.github.com> 1587292881 +0100 pull: Fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/develop b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/develop index ff719fe..c1c1045 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/develop +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/develop @@ -1 +1,2 @@ 3da421aa47fdcb10bf3d19f1c35946b03c1bd90e bdbe43e667824e0a4e5e16cdc500ce00b9001dc0 Darren Leatherbarrow 1570875469 +0100 pull: fast-forward +bdbe43e667824e0a4e5e16cdc500ce00b9001dc0 9ad039443f8fca082d93efb16b36c20c92f444e0 DazAh <9095216+DazAh@users.noreply.github.com> 1587292881 +0100 pull: fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master index 3a0e23e..2874e0d 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_logs/exact_refs/exact_remotes/exact_origin/master @@ -1 +1,2 @@ 43f3bc4010b2c697d2252fdd8b36a577ea125881 4016ff795bb184461996c5539327befc8da2af6f Darren Leatherbarrow 1570875469 +0100 pull: fast-forward +4016ff795bb184461996c5539327befc8da2af6f ae315ded4dba10685dbbafbfa2ff3c1aefeb490d DazAh <9095216+DazAh@users.noreply.github.com> 1587292881 +0100 pull: fast-forward diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_heads/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_heads/master index 0b59f14..100da5c 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_heads/master +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_heads/master @@ -1 +1 @@ -4016ff795bb184461996c5539327befc8da2af6f +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/develop b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/develop index 416a2c8..1a1adec 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/develop +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/develop @@ -1 +1 @@ -bdbe43e667824e0a4e5e16cdc500ce00b9001dc0 +9ad039443f8fca082d93efb16b36c20c92f444e0 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master index 0b59f14..100da5c 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_remotes/exact_origin/master @@ -1 +1 @@ -4016ff795bb184461996c5539327befc8da2af6f +ae315ded4dba10685dbbafbfa2ff3c1aefeb490d diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_tags/.keep b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/exact_refs/exact_tags/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/index b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/index index dbb8937..e87a60f 100644 Binary files a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/index and b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_dot_git/index differ diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb index 2be358a..92794d6 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/completion_spec.rb @@ -5,7 +5,9 @@ describe 'the `completion` suggestion strategy' do session. run_command('autoload compinit && compinit'). run_command('_foo() { compadd bar; compadd bat }'). - run_command('compdef _foo baz') + run_command('_num() { compadd two; compadd three }'). + run_command('compdef _foo baz'). + run_command('compdef _num one') end end @@ -37,6 +39,21 @@ describe 'the `completion` suggestion strategy' do end end + context 'when ZSH_AUTOSUGGEST_COMPLETION_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=completion', 'ZSH_AUTOSUGGEST_COMPLETION_IGNORE="one *"'] } + + it 'makes suggestions when the buffer does not match the pattern' do + session.send_string('baz ') + wait_for { session.content }.to eq('baz bar') + end + + it 'does not make suggestions when the buffer matches the pattern' do + session.send_string('one t') + sleep 1 + expect(session.content).to eq('one t') + end + end + context 'when async mode is enabled' do let(:options) { ['ZSH_AUTOSUGGEST_USE_ASYNC=true', 'ZSH_AUTOSUGGEST_STRATEGY=completion'] } diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb index f8ae526..eee8efd 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/history_spec.rb @@ -8,5 +8,16 @@ describe 'the `history` suggestion strategy' do end end + context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] } + + it 'does not make suggestions that match the pattern' do + with_history('ls foo', 'ls bar', 'echo baz') do + session.send_string('ls') + wait_for { session.content }.to eq('ls foo') + end + end + end + include_examples 'special characters' end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb index 5a143b8..c435f16 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_spec/exact_strategies/match_prev_cmd_spec.rb @@ -3,19 +3,32 @@ require 'strategies/special_characters_helper' describe 'the `match_prev_cmd` strategy' do let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd'] } + let(:history) { [ + 'echo what', + 'ls foo', + 'echo what', + 'ls bar', + 'ls baz', + 'echo what' + ] } + it 'suggests the last matching history entry after the previous command' do - with_history( - 'echo what', - 'ls foo', - 'echo what', - 'ls bar', - 'ls baz', - 'echo what' - ) do + with_history(*history) do session.send_string('ls') wait_for { session.content }.to eq('ls bar') end end + context 'when ZSH_AUTOSUGGEST_HISTORY_IGNORE is set to a pattern' do + let(:options) { ['ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd', 'ZSH_AUTOSUGGEST_HISTORY_IGNORE="* bar"'] } + + it 'does not make suggestions that match the pattern' do + with_history(*history) do + session.send_string('ls') + wait_for { session.content }.to eq('ls foo') + end + end + end + include_examples 'special characters' end diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh index dfbf6eb..4290f0c 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/completion.zsh @@ -96,6 +96,12 @@ _zsh_autosuggest_capture_completion_async() { } _zsh_autosuggest_strategy_completion() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable extended glob for completion ignore pattern + setopt EXTENDED_GLOB + typeset -g suggestion local line REPLY @@ -105,6 +111,9 @@ _zsh_autosuggest_strategy_completion() { # Exit if we don't have zpty zmodload zsh/zpty 2>/dev/null || return + # Exit if our search string matches the ignore pattern + [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return + # Zle will be inactive if we are in async mode if zle; then zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync @@ -122,7 +131,7 @@ _zsh_autosuggest_strategy_completion() { # versions of zsh (older than 5.3), we sometimes get extra bytes after # the second null byte, so trim those off the end. # See http://www.zsh.org/mla/workers/2015/msg03290.html - suggestion="${${line#*$'\0'}%$'\0'*}" + suggestion="${${(@0)line}[2]}" } always { # Destroy the pty zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh index a2755a5..0672a13 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/history.zsh @@ -10,7 +10,7 @@ _zsh_autosuggest_strategy_history() { # Reset options to defaults and enable LOCAL_OPTIONS emulate -L zsh - # Enable globbing flags so that we can use (#m) + # Enable globbing flags so that we can use (#m) and (x~y) glob operator setopt EXTENDED_GLOB # Escape backslashes and all of the glob operators so we can use @@ -19,7 +19,14 @@ _zsh_autosuggest_strategy_history() { # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" - # Get the history items that match + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Give the first history item matching the pattern as the suggestion # - (r) subscript flag makes the pattern match on values - typeset -g suggestion="${history[(r)${prefix}*]}" + typeset -g suggestion="${history[(r)$pattern]}" } diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh index f76d3c1..b709783 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/exact_strategies/match_prev_cmd.zsh @@ -24,16 +24,23 @@ _zsh_autosuggest_strategy_match_prev_cmd() { # Reset options to defaults and enable LOCAL_OPTIONS emulate -L zsh - # Enable globbing flags so that we can use (#m) + # Enable globbing flags so that we can use (#m) and (x~y) glob operator setopt EXTENDED_GLOB # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + # Get all history event numbers that correspond to history - # entries that match pattern $prefix* + # entries that match the pattern local history_match_keys - history_match_keys=(${(k)history[(R)$prefix*]}) + history_match_keys=(${(k)history[(R)$~pattern]}) # By default we use the first history number (most recent history entry) local histkey="${history_match_keys[1]}" diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh index 242d502..8f09792 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/exact_src/widgets.zsh @@ -56,7 +56,7 @@ _zsh_autosuggest_modify() { emulate -L zsh # Don't fetch a new suggestion if there's more input to be read immediately - if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then + if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then POSTDISPLAY="$orig_postdisplay" return $retval fi @@ -119,7 +119,7 @@ _zsh_autosuggest_suggest() { # Accept the entire suggestion _zsh_autosuggest_accept() { - local -i max_cursor_pos=$#BUFFER + local -i retval max_cursor_pos=$#BUFFER # When vicmd keymap is active, the cursor can't move all the way # to the end of the buffer @@ -127,23 +127,33 @@ _zsh_autosuggest_accept() { max_cursor_pos=$((max_cursor_pos - 1)) fi - # Only accept if the cursor is at the end of the buffer - if [[ $CURSOR = $max_cursor_pos ]]; then - # Add the suggestion to the buffer - BUFFER="$BUFFER$POSTDISPLAY" - - # Remove the suggestion - unset POSTDISPLAY - - # Move the cursor to the end of the buffer - if [[ "$KEYMAP" = "vicmd" ]]; then - CURSOR=$(($#BUFFER - 1)) - else - CURSOR=$#BUFFER - fi + # If we're not in a valid state to accept a suggestion, just run the + # original widget and bail out + if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then + _zsh_autosuggest_invoke_original_widget $@ + return fi + # Only accept if the cursor is at the end of the buffer + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Run the original widget before manually moving the cursor so that the + # cursor movement doesn't make the widget do something unexpected _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Move the cursor to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi + + return $retval } # Accept the entire suggestion and execute it diff --git a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh index 872b647..a8ef6c4 100644 --- a/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh +++ b/exact_dot_oh-my-zsh/exact_custom/exact_plugins/exact_zsh-autosuggestions/zsh-autosuggestions.zsh @@ -1,6 +1,6 @@ # Fish-like fast/unobtrusive autosuggestions for zsh. # https://github.com/zsh-users/zsh-autosuggestions -# v0.6.3 +# v0.6.4 # Copyright (c) 2013 Thiago de Arruda # Copyright (c) 2016-2019 Eric Freese # @@ -318,7 +318,7 @@ _zsh_autosuggest_modify() { emulate -L zsh # Don't fetch a new suggestion if there's more input to be read immediately - if (( $PENDING > 0 )) || (( $KEYS_QUEUED_COUNT > 0 )); then + if (( $PENDING > 0 || $KEYS_QUEUED_COUNT > 0 )); then POSTDISPLAY="$orig_postdisplay" return $retval fi @@ -381,7 +381,7 @@ _zsh_autosuggest_suggest() { # Accept the entire suggestion _zsh_autosuggest_accept() { - local -i max_cursor_pos=$#BUFFER + local -i retval max_cursor_pos=$#BUFFER # When vicmd keymap is active, the cursor can't move all the way # to the end of the buffer @@ -389,23 +389,33 @@ _zsh_autosuggest_accept() { max_cursor_pos=$((max_cursor_pos - 1)) fi - # Only accept if the cursor is at the end of the buffer - if [[ $CURSOR = $max_cursor_pos ]]; then - # Add the suggestion to the buffer - BUFFER="$BUFFER$POSTDISPLAY" - - # Remove the suggestion - unset POSTDISPLAY - - # Move the cursor to the end of the buffer - if [[ "$KEYMAP" = "vicmd" ]]; then - CURSOR=$(($#BUFFER - 1)) - else - CURSOR=$#BUFFER - fi + # If we're not in a valid state to accept a suggestion, just run the + # original widget and bail out + if (( $CURSOR != $max_cursor_pos || !$#POSTDISPLAY )); then + _zsh_autosuggest_invoke_original_widget $@ + return fi + # Only accept if the cursor is at the end of the buffer + # Add the suggestion to the buffer + BUFFER="$BUFFER$POSTDISPLAY" + + # Remove the suggestion + unset POSTDISPLAY + + # Run the original widget before manually moving the cursor so that the + # cursor movement doesn't make the widget do something unexpected _zsh_autosuggest_invoke_original_widget $@ + retval=$? + + # Move the cursor to the end of the buffer + if [[ "$KEYMAP" = "vicmd" ]]; then + CURSOR=$(($#BUFFER - 1)) + else + CURSOR=$#BUFFER + fi + + return $retval } # Accept the entire suggestion and execute it @@ -582,6 +592,12 @@ _zsh_autosuggest_capture_completion_async() { } _zsh_autosuggest_strategy_completion() { + # Reset options to defaults and enable LOCAL_OPTIONS + emulate -L zsh + + # Enable extended glob for completion ignore pattern + setopt EXTENDED_GLOB + typeset -g suggestion local line REPLY @@ -591,6 +607,9 @@ _zsh_autosuggest_strategy_completion() { # Exit if we don't have zpty zmodload zsh/zpty 2>/dev/null || return + # Exit if our search string matches the ignore pattern + [[ -n "$ZSH_AUTOSUGGEST_COMPLETION_IGNORE" ]] && [[ "$1" == $~ZSH_AUTOSUGGEST_COMPLETION_IGNORE ]] && return + # Zle will be inactive if we are in async mode if zle; then zpty $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME _zsh_autosuggest_capture_completion_sync @@ -608,7 +627,7 @@ _zsh_autosuggest_strategy_completion() { # versions of zsh (older than 5.3), we sometimes get extra bytes after # the second null byte, so trim those off the end. # See http://www.zsh.org/mla/workers/2015/msg03290.html - suggestion="${${line#*$'\0'}%$'\0'*}" + suggestion="${${(@0)line}[2]}" } always { # Destroy the pty zpty -d $ZSH_AUTOSUGGEST_COMPLETIONS_PTY_NAME @@ -626,7 +645,7 @@ _zsh_autosuggest_strategy_history() { # Reset options to defaults and enable LOCAL_OPTIONS emulate -L zsh - # Enable globbing flags so that we can use (#m) + # Enable globbing flags so that we can use (#m) and (x~y) glob operator setopt EXTENDED_GLOB # Escape backslashes and all of the glob operators so we can use @@ -635,9 +654,16 @@ _zsh_autosuggest_strategy_history() { # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" - # Get the history items that match + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + + # Give the first history item matching the pattern as the suggestion # - (r) subscript flag makes the pattern match on values - typeset -g suggestion="${history[(r)${prefix}*]}" + typeset -g suggestion="${history[(r)$pattern]}" } #--------------------------------------------------------------------# @@ -665,16 +691,23 @@ _zsh_autosuggest_strategy_match_prev_cmd() { # Reset options to defaults and enable LOCAL_OPTIONS emulate -L zsh - # Enable globbing flags so that we can use (#m) + # Enable globbing flags so that we can use (#m) and (x~y) glob operator setopt EXTENDED_GLOB # TODO: Use (b) flag when we can drop support for zsh older than v5.0.8 local prefix="${1//(#m)[\\*?[\]<>()|^~#]/\\$MATCH}" + # Get the history items that match the prefix, excluding those that match + # the ignore pattern + local pattern="$prefix*" + if [[ -n $ZSH_AUTOSUGGEST_HISTORY_IGNORE ]]; then + pattern="($pattern)~($ZSH_AUTOSUGGEST_HISTORY_IGNORE)" + fi + # Get all history event numbers that correspond to history - # entries that match pattern $prefix* + # entries that match the pattern local history_match_keys - history_match_keys=(${(k)history[(R)$prefix*]}) + history_match_keys=(${(k)history[(R)$~pattern]}) # By default we use the first history number (most recent history entry) local histkey="${history_match_keys[1]}"