Commit graph

131 commits

Author SHA1 Message Date
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.
2018-07-13 11:26:57 -06:00
Eric Freese
93877f6b76 We also need to remove the handler when cancelling async request
Should fix GitHub #353
2018-07-13 11:25:59 -06:00
Eric Freese
bd1fd97738 Cleanup unused async pty name 2018-07-02 22:38:20 -06:00
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
2018-07-02 12:25:20 -06:00
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.
2018-07-02 12:25:20 -06:00
Eric Freese
302bd7c059 Setup zshexit hook immediately in both sync/async cases 2018-07-02 12:25:20 -06:00
Eric Freese
245f5d2ba2 Improve completion suggestions
Just insert the first completion directly into the buffer and read the
whole buffer from the zpty.
2018-07-02 12:25:20 -06:00
Martin Väth
8ae0283c90 Do not rely on implicit NULLCMD=cat 2018-07-02 12:21:49 -06:00
Eric Freese
c0315e96d8 Don't use -s option to zmodload
It is not available in zsh versions older than 5.3
2018-06-30 16:54:33 -06:00
Eric Freese
5529102afc zpty module is only needed for completion strategy 2018-06-30 15:09:24 -06:00
Eric Freese
dad6be4d5e Remove unused feature detection
Not needed after move away from zpty for async
2018-06-30 15:05:37 -06:00
Eric Freese
7d968869e3 Return if no completion found 2018-06-30 15:03:14 -06:00
Eric Freese
8593624996
Merge pull request #330 from zsh-users/features/completion-suggestions
Features/completion suggestions
2018-06-30 14:35:50 -06:00
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`.
2018-06-29 22:08:33 -06:00
Martin Väth
43a011026f Do not leak global variables REPLY and strategy
https://github.com/zsh-users/zsh-autosuggestions/issues/341
2018-06-18 16:39:48 -06:00
Eric Freese
cd81522b30 Attempt to kill async worker process when new request comes in
See http://www.zsh.org/mla/users/2018/msg00432.html
2018-06-12 23:45:29 -06:00
Eric Freese
d7171232c3 Merge branch 'develop' into features/completion-suggestions 2018-06-11 02:34:24 -06:00
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
2018-06-11 02:12:47 -06:00
Eric Freese
b0ffc34fb8 completion should be a local var 2018-06-10 23:35:22 -06:00
Eric Freese
4e466f0e4e Support widgets starting with dashes (ex: -a-widget)
Fixes #337
2018-06-10 22:39:58 -06:00
Eric Freese
bcbdad83e9 Support fallback strategies by setting array in config 2018-06-06 22:03:56 -06:00
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
2018-05-26 15:42:50 -06:00
Eric Freese
973205005c Add spec for completion strategy 2018-05-26 15:42:50 -06:00
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
2018-05-26 15:35:29 -06:00
Eric Freese
3dbd9afaec Fix completion strategy killing other pty's
Only a problem in synchronous mode
2018-05-26 15:35:29 -06:00
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).
2018-05-26 15:35:29 -06:00
Eric Freese
4cca26ec84 Modify completion code to better fit our needs
Only need the first completion result
2018-05-26 15:35:29 -06:00
Eric Freese
c5551daabc Default strategy now tries history first and falls back to completion 2018-05-26 15:35:29 -06:00
Eric Freese
82b08e2dc8 First pass at getting suggestions from completion engine (#111)
Uses https://github.com/Valodim/zsh-capture-completion with some slight
modifications.
2018-05-26 15:35:29 -06:00
Eric Freese
63789e96b5 Fix handling of newline + carriage return in async pty (#333) 2018-05-26 14:16:00 -06:00
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
2018-05-15 13:55:37 -06:00
Harm te Hennepe
59c72c6805 Don't break kill ring rotation 2018-05-15 12:54:09 -06:00
Eric Freese
393f7b8bb9 Fix vi-mode partial-accept
Issue #188. PR #324.

Thanks to @toadjaune and @IngoHeimbach.
2018-05-15 11:44:42 -06:00
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.
2018-05-15 11:44:42 -06:00
Eric Freese
60aff2d944 Remove unused local $suggestion variable 2018-03-27 14:51:37 -06:00
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.
2018-03-23 16:08:11 -06:00
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
2018-01-16 14:10:29 -06:00
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.
2017-12-06 08:09:14 -07:00
Eric Freese
a1babef972 Revert "Simplify escaping of pattern and fix match_prev_cmd strategy"
This reverts commit 7f8ff2867c.
2017-12-06 08:08:53 -07:00
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.
2017-11-27 08:31:41 -07:00
Eric Freese
9f1f322979 Update comment about KEYS_QUEUED_COUNT support
Now that patch has released
2017-09-27 15:04:42 -06:00
Eric Freese
256293cbb6 Use typeset -g to avoid warnnestedvar warnings
Fixes github issue #271
2017-09-27 13:24:06 -06:00
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")
2017-09-10 04:35:19 +02:00
Alexander Neumann
1915e28882 Add 'emacs-forward-word'
This commit adds the 'emacs-forward-word' widget to the list of partial
accept widgets.
2017-08-18 11:14:21 -06:00
Eric Freese
83129dd796 Make asynchronous suggestions disabled by default
While they are still experimental
2017-04-14 08:48:54 -06:00
Eric Freese
a2f0ffb122 Enabling suggestions should not fetch a suggestion if buffer is empty 2017-03-05 12:53:13 -05:00
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`.
2017-03-03 18:43:17 -05:00
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
2017-03-03 18:43:17 -05:00
Eric Freese
c52c428793 Fix issues with widgets wrapped by other plugins
Puts in a better fix for #126 and related issues.
2017-03-03 18:43:10 -05:00
Eric Freese
c9a51e0c4c Handle dashes at the beginning of commands 2017-02-18 16:51:53 -07:00