Commit Graph

226 Commits (8072e52d969409f3a9d5b6e977443e69bc6fe568)

Author SHA1 Message Date
Eric Freese 4cd210b70d Fix async suggestions when SH_WORD_SPLIT is set 6 years ago
Eric Freese e405afab29 Refactor async mode to no longer use zpty
See technique used in `fast-syntax-highlighting`:
- ca2e18bbc9
- http://www.zsh.org/mla/users/2018/msg00424.html

Also see http://www.zsh.org/mla/users/2018/msg00432.html

In async response handler:
- We only want to read data in case of POLLIN or POLLHUP. Not POLLNVAL
  or select error.
- We always want to remove the handler, so it doesn't get called in an
  infinite loop when error is nval or err.

There is an upstream bug that prevents ctrl-c from resetting the prompt
immediately after a suggestion has been fetched asynchronously. A patch
has been submitted, but a workaround for now is to add `command true`
after the exec.

See https://github.com/zsh-users/zsh-autosuggestions/issues/364
6 years ago
Eric Freese a5dc4a8db4 Fix version in compiled plugin script 6 years ago
romkatv 4a82ff1ead speed up widget rebinding by removing redundant array subscripts 6 years ago
Eric Freese f76472272e cleanup: Remove unnecessary braces 6 years ago
Eric Freese 50579b3371 Move widget definitions inside anonymous function 7 years ago
dana aee1b10db6 Avoid warn_create_global warnings 7 years ago
Eric Freese e937e89267 Respect user's set options when running original widget
Fixes GitHub #379
7 years ago
Eric Freese 11251d97ca Merge branch 'master' into develop 7 years ago
Eric Freese 41657e3565 Revert async process substitution & completion strategy
They're not quite ready. Keep them on a feature branch for now.
7 years ago
Eric Freese 286656635c v0.5.0 7 years ago
Eric Nielsen 9e4d3c337f Don't overwrite config with default values
otherwise users are obliged to set the config values *after* sourcing
the plugin. They're not able to do it before. Also, re-sourcing the
plugin will reset the values to the defaults again.

See zimfw/zimfw#301

Fixes #335
7 years ago
Eric Freese a78ea16c50 Support fallback strategies by setting array in config 7 years ago
Eric Freese 62f5f14f2f default => history 7 years ago
Eric Freese 4540304fa0 Reset opts in some functions affected by GLOB_SUBST
Should fix GitHub #334
7 years ago
Eric Freese 4097d6e0ae Support widgets starting with dashes (ex: `-a-widget`)
Fixes #337
7 years ago
Eric Freese 0f80f9511d Fix handling of newline + carriage return in async pty (#333) 7 years ago
Eric Nielsen e61442161e Don't overwrite config with default values
otherwise users are obliged to set the config values *after* sourcing
the plugin. They're not able to do it before. Also, re-sourcing the
plugin will reset the values to the defaults again.

See zimfw/zimfw#301

Fixes #335
7 years ago
Eric Freese 681ffc7b28 Reset opts in some functions affected by GLOB_SUBST
Should fix GitHub #334
7 years ago
Eric Freese b8bf86f6ab
Merge pull request #359 from zsh-users/fixes/async-bad-file-descriptor
Fixes/async bad file descriptor
7 years ago
Eric Freese 7ab2124904 Kill async process by id when job control disabled 7 years ago
Eric Freese 88fe824ddf Add some error handling to async response handler
We only want to read data in case of POLLIN or POLLHUP. Not POLLNVAL or
select error.

We always want to remove the handler, so it doesn't get called in an
infinite loop when error is nval or err.

In zsh source, see main zle event loop in zle_main.c raw_getbyte
function.
7 years ago
Eric Freese 93877f6b76 We also need to remove the handler when cancelling async request
Should fix GitHub #353
7 years ago
Eric Freese bd1fd97738 Cleanup unused async pty name 7 years ago
Eric Freese f1c3b98774 Only capture completions at the end of the buffer.
To prevent the suggestion from not starting with the buffer string.

Example:

`ls / /[cursor left][cursor left]b`

Before the patch, suggests `ls /b /ls /bin/ /`

After the patch, suggests `ls /b /bin/`.

https://github.com/zsh-users/zsh-autosuggestions/issues/343#issuecomment-401675712
7 years ago
Eric Freese 4869a757c8 Ensure we always destroy the zpty
If running in sync mode and a completion takes a long time, the user can
^C out of it. Without this patch, the pty will not be destroyed in this
case and the next time we go to create it, it will fail, making the
shell unusable.
7 years ago
Eric Freese 302bd7c059 Setup zshexit hook immediately in both sync/async cases 7 years ago
Eric Freese 245f5d2ba2 Improve completion suggestions
Just insert the first completion directly into the buffer and read the
whole buffer from the zpty.
7 years ago
Martin Väth 8ae0283c90 Do not rely on implicit NULLCMD=cat 7 years ago
Eric Freese c0315e96d8 Don't use `-s` option to `zmodload`
It is not available in zsh versions older than 5.3
7 years ago
Eric Freese 5529102afc zpty module is only needed for `completion` strategy 7 years ago
Eric Freese dad6be4d5e Remove unused feature detection
Not needed after move away from zpty for async
7 years ago
Eric Freese 7d968869e3 Return if no completion found 7 years ago
Eric Freese 8593624996
Merge pull request #330 from zsh-users/features/completion-suggestions
Features/completion suggestions
7 years ago
Eric Freese 1ec43c7291 Fix error when single quote entered into buffer
Error looked something like:

```
% echo 'f(zpty):8: unmatched '
_zsh_autosuggest_capture_completion:zpty:9: no such pty command: zsh_autosuggest_completion_pty
_zsh_autosuggest_capture_completion:zpty:14: no such pty command: zsh_autosuggest_completion_pty
_zsh_autosuggest_capture_completion:zpty:21: no such pty command: zsh_autosuggest_completion_pty
```

According to `man zshmodules`, the args to `zpty` are "concatenated with
spaces between, then executed as a command, as if passed to the eval
builtin." So we need to escape the `$` so that `$1` is passed to eval
instead of the value of `$1`.
7 years ago
Martin Väth 43a011026f Do not leak global variables REPLY and strategy
https://github.com/zsh-users/zsh-autosuggestions/issues/341
7 years ago
Eric Freese cd81522b30 Attempt to kill async worker process when new request comes in
See http://www.zsh.org/mla/users/2018/msg00432.html
7 years ago
Eric Freese d7171232c3 Merge branch 'develop' into features/completion-suggestions 7 years ago
Eric Freese 9cb0101512 Refactor async mode to no longer use zpty
See technique used in `fast-syntax-highlighting`:
- ca2e18bbc9
- http://www.zsh.org/mla/users/2018/msg00424.html
7 years ago
Eric Freese b0ffc34fb8 completion should be a local var 7 years ago
Eric Freese 4e466f0e4e Support widgets starting with dashes (ex: `-a-widget`)
Fixes #337
7 years ago
Eric Freese bcbdad83e9 Support fallback strategies by setting array in config 7 years ago
Eric Freese 949c374195 Fix `completion` strategy on older versions of zsh
`zpty -r` with a pattern seems to have some funky behavior on older
versions, giving unpredictable results
7 years ago
Eric Freese 973205005c Add spec for `completion` strategy 7 years ago
Eric Freese cf458d2a3b Fix completion suggestions when compinit is not enabled
Need to make sure compinit is called in the pty or the shell hangs
7 years ago
Eric Freese 3dbd9afaec Fix completion strategy killing other pty's
Only a problem in synchronous mode
7 years ago
Eric Freese 6ffaec725a Allow completion suggestions from current shell
The `zsh -f` running in the PTY doesn't know about the non-exported
variables and functions defined in the original shell, thus can't make
suggestions for them. Run local functions in the PTY instead of a new
`zsh` process.

We have to handle things differently based on whether zle is active or
not (async vs. sync mode).
7 years ago
Eric Freese 0a548c62f4 Forgot to make after small tweak 7 years ago
Eric Freese 4cca26ec84 Modify completion code to better fit our needs
Only need the first completion result
7 years ago
Eric Freese c5551daabc Default strategy now tries history first and falls back to completion 7 years ago
Eric Freese 82b08e2dc8 First pass at getting suggestions from completion engine (#111)
Uses https://github.com/Valodim/zsh-capture-completion with some slight
modifications.
7 years ago
Eric Freese 63789e96b5 Fix handling of newline + carriage return in async pty (#333) 7 years ago
Eric Freese aa0b10db44 v0.4.3 7 years ago
Eric Freese c113e49fe2 Update license copyright year 7 years ago
Eric Freese df5fb858aa Destroy old pty even if it's no longer running (#249)
For unknown reasons, the pty will occasionally quit running. In these
cases, we still want to remove it so that a fresh one can be created. We
don't actually need this check because error messages from `zle` and
`zpty` are redirected to /dev/null.

One sure way to kill all currently running pty's is to run `exit` in a
subshell. Even without zsh-autosuggestions loaded, the following works:

    % zmodload zsh/zpty
    % zpty -b foo cat
    % zpty -b bar cat
    % zpty
    (31689) bar: cat
    (31666) foo: cat
    % $(exit)
    % zpty
    (finished) bar: cat
    (finished) foo: cat
7 years ago
Harm te Hennepe 59c72c6805 Don't break kill ring rotation 7 years ago
Eric Freese 393f7b8bb9 Fix vi-mode partial-accept
Issue #188. PR #324.

Thanks to @toadjaune and @IngoHeimbach.
7 years ago
Eric Freese 42f5a06f7f Need to reset the POSTDISPLAY if exiting early
Specific case where this matters is following:

Be in vi insert mode with some text in the buffer and the cursor at the
end of the buffer. Press `esc` to trigger `vi-cmd-mode widget`, then
before the cursor moves (KEYTIMEOUT), press `h` to trigger
`vi-backward-char` widget. When `vi-cmd-mode` original widget exits,
KEYS_QUEUED_COUNT will be non-zero and the suggestion will be lost.
7 years ago
Eric Freese 60aff2d944 Remove unused local `$suggestion` variable 7 years ago
Eric Freese 3136700ccf Don't fetch suggestions after [up,down]-line-or-beginning-search
These widgets rely on `$LASTWIDGET` being set to restore the cursor
position. When asynchronous suggestions are enabled, and the widget
triggers a suggestion to be fetched, `autosuggest-suggest` will be
called and $LASTWIDGET will be set to it.
7 years ago
dana c978004c0e ..._invoke_original_widget: Return 0 when given no arguments
`_zsh_autosuggest_widget_accept()` (&al.) passes this function's return status
on, and ZLE rings the bell if it's >0. Not having an original widget isn't an
error condition, so always returning 0 here should be OK to avoid the bell

Fixes #228
8 years ago
Eric Freese 15931f04ff v0.4.2 8 years ago
Eric Freese 4ea825faf8 Fix #247 and #248 without using `(b)` flag
To support older versions of zsh (< 5.0.8).

We were missing the EXTENDED_GLOB option that allows use of `(#m)` flag.
8 years ago
Eric Freese a1babef972 Revert "Simplify escaping of pattern and fix match_prev_cmd strategy"
This reverts commit 7f8ff2867c.
8 years ago
Eric Freese 9f9237ab8a v0.4.1 8 years ago
Kaleb Elwert 940e10a691 Fix conditionals to use [[ and (( rather than [
This fixes a small issue in src/widgets.zsh which makes it so if you
alias [ to g[ (as is done in prezto if the gnu-utility module is loaded)
autosuggestions would fail.

The documentation for GNU test mentions that -o and -a should be avoided
if possible because it's not very clear. Also, with zsh and [[ -o
actually tests if an option is set, which makes this option even more
confusing.
8 years ago
Eric Freese 9f1f322979 Update comment about KEYS_QUEUED_COUNT support
Now that patch has released
8 years ago
Eric Freese 256293cbb6 Use typeset -g to avoid warnnestedvar warnings
Fixes github issue #271
8 years ago
Stefan Siegel 7f8ff2867c Simplify escaping of pattern and fix match_prev_cmd strategy
Maybe this is also a fix for #247, #248 and #258. Supersedes #267.

Testcase:
Using match_prev_cmd strategy and with these lines in history:
echo '1^'
echo '2^'
echo '1^'

type:
echo       (unexpected suggestion echo '1^' instead of echo '2^')
echo '1^1  (wrong suggestion echo '1^1echo '1^')
echo '1^#  (error "bad math expression")
8 years ago
Alexander Neumann 1915e28882 Add 'emacs-forward-word'
This commit adds the 'emacs-forward-word' widget to the list of partial
accept widgets.
8 years ago
Eric Freese 14179d869d Bump version 8 years ago
Eric Freese 83129dd796 Make asynchronous suggestions disabled by default
While they are still experimental
8 years ago
Eric Freese a2f0ffb122 Enabling suggestions should not fetch a suggestion if buffer is empty 8 years ago
Eric Freese 7d4a1d9a4a Add enable/disable/toggle widgets to disable suggestion functionality
[GitHub #219]

Intended to be helpful for folks using bracketed-paste-magic and other
widgets that use `zle -U`.
8 years ago
Eric Freese e1959d0f61 Put in a general fix for #219 - Handling input from `zle -U`
Depends on patch to ZSH from workers/40702:

  http://www.zsh.org/mla/workers/2017/msg00414.html
8 years ago
Eric Freese c52c428793 Fix issues with widgets wrapped by other plugins
Puts in a better fix for #126 and related issues.
8 years ago
Eric Freese c9a51e0c4c Handle dashes at the beginning of commands 8 years ago
Eric Freese 48a21bf79e [cleanup] Remove an extra newline 8 years ago
Eric Freese 4afbbbadda We only need to run the feature detection if starting async 8 years ago
Eric Freese e3fa4e4904 Don't do anything but re-bind widgets on each precmd
There's no need to re-run feature detection or async_start on every
precmd. Just do those once.
8 years ago
Eric Freese 4321fc097c We need to bind on every precmd to ensure we wrap other wrappers
Specifically, highlighting breaks if our widgets are wrapped by z-syn-h
widgets.
8 years ago
Eric Freese 75e850577d Gracefully handle being sourced multiple times
Should fix #126
8 years ago
Eric Freese a0fcd81ce1 Destroy zpty on load if it already exists 8 years ago
Eric Freese 39ca3dac45 Use a different name for feature detection zpty
So that it doesn't conflict when the file is sourced again
8 years ago
Eric Freese dcce973287 Remove support for long-deprecated options
These options have been deprecated for over a year.
8 years ago
Christian Höltje 0c940e70f2 Don't bind any zle-* methods
It seems like all the zle-* methods are special and shouldn't be
monkeyed with.

Specifically `zle-isearch-update` and friends. Binding that widget
caused `history-incremental-pattern-search` to stop working.

Fixes zsh-users/zsh-syntax-highlighting#387
8 years ago
Eric Freese 23ef16c297 Do not show suggestions if the buffer is empty 8 years ago
Eric Freese c4bfd8e2c6 Need to prevent zpty feature detection from HUPing existing zptys 8 years ago
Eric Freese 9feac573c9 Do not show any error output from async zpty server process 8 years ago
Eric Freese ed8056c5e8 Lots of async changes 8 years ago
Eric Freese 2c465a932a Rename async pty name config var 9 years ago
Eric Freese e3eb286ea2 Lots of little async cleanups 9 years ago
Eric Freese 40bb2e7804 little cleanup 9 years ago
Eric Freese 16666da488 Handle versions of zsh where zpty does not set REPLY to fd of opened pty
Based on e702ec4697/async.zsh (L400-L406)
9 years ago
Eric Freese f33b605a63 Move async initialization into `start` function to keep in one place 9 years ago
Eric Freese 78ba07179a Add feature detection
Checks whether `zpty` gives a file descriptor, which was not the case in
older versions of zsh.

Based on a4b2f81c96/async.zsh (L395-L401)
9 years ago
Eric Freese 3f57198d07 Only bind widgets once, on initial sourcing 9 years ago
Eric Freese 6c5cd42331 Go back to tracking last pid because `kill %1` didn't seem to be working 9 years ago
Eric Freese 54e1eee924 Optimize case where manually typing in a suggestion 9 years ago
Eric Freese 21d9eda5dd Wrap suggestion fetch command in parens to actually run in background 9 years ago