diff --git a/.circleci/config.yml b/.circleci/config.yml
new file mode 100644
index 0000000..d95fa98
--- /dev/null
+++ b/.circleci/config.yml
@@ -0,0 +1,15 @@
+version: 2
+jobs:
+ build:
+ parallelism: 4
+ shell: /bin/bash --login
+ docker:
+ - image: ericfreese/zsh-autosuggestions-test:latest
+ steps:
+ - checkout
+ - run:
+ name: Running tests
+ command: |
+ for v in $(grep "^[^#]" ZSH_VERSIONS | awk "(NR + $CIRCLE_NODE_INDEX) % $CIRCLE_NODE_TOTAL == 0"); do
+ TEST_ZSH_BIN=zsh-$v make test || exit 1
+ done
diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml
deleted file mode 100644
index ec7bc75..0000000
--- a/.github/workflows/integration.yml
+++ /dev/null
@@ -1,51 +0,0 @@
-on: [push, pull_request]
-concurrency:
- group: ${{ github.workflow }}-${{ github.ref }}
- cancel-in-progress: true
-env:
- IMAGE_CACHE_PATH: /tmp/.image-cache
- IMAGE_CACHE_NAME: zsh-autosuggestions-test
-jobs:
- determine-versions:
- runs-on: ubuntu-22.04
- outputs:
- versions: ${{ steps.set-versions.outputs.versions }}
- steps:
- - uses: actions/checkout@v3
- - id: set-versions
- run: |
- echo "versions=$(
- grep "^[^#]" ZSH_VERSIONS \
- | sed -E 's/(^|$)/"/g' \
- | paste -sd ',' - \
- | sed -e 's/^/[/' -e 's/$/]/'
- )" >> $GITHUB_OUTPUT
- test:
- needs: determine-versions
- runs-on: ubuntu-22.04
- strategy:
- matrix:
- version: ${{ fromJson(needs.determine-versions.outputs.versions) }}
- steps:
- - uses: actions/checkout@v3
- - name: Docker image cache
- id: image-cache
- uses: actions/cache@v3
- with:
- path: ${{ env.IMAGE_CACHE_PATH }}
- key: image-cache-${{ matrix.version }}-${{ hashFiles('Dockerfile', 'install_test_zsh.sh', 'Gemfile.lock') }}
- - name: Load cached docker image if available
- if: ${{ steps.image-cache.outputs.cache-hit }}
- run: gunzip < $IMAGE_CACHE_PATH/$IMAGE_CACHE_NAME.tar.gz | docker load
- - name: Build the docker image if necessary
- if: ${{ !steps.image-cache.outputs.cache-hit }}
- run: |
- docker build --build-arg TEST_ZSH_VERSION=${{ matrix.version }} -t $IMAGE_CACHE_NAME .
- mkdir -p $IMAGE_CACHE_PATH
- docker save $IMAGE_CACHE_NAME | gzip > $IMAGE_CACHE_PATH/$IMAGE_CACHE_NAME.tar.gz
- - name: Run the tests
- run: |
- docker run --rm \
- -v $PWD:/zsh-autosuggestions \
- $IMAGE_CACHE_NAME \
- make test
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index d8decde..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# zsh word code files
-*.zwc
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 30c7735..15d65a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,5 @@
# Changelog
-## v0.7.1
-- Clear POSTDISPLAY instead of unsetting (#634)
-- Always reset async file descriptor after consuming it (#630)
-- Always use builtin `exec` (#628)
-- Add `history-beginning-search-*-end` widgets to clear widget list (#619)
-- Switch CI from Circle CI to GitHub Actions
-
## v0.7.0
- Enable asynchronous mode by default (#498)
- No longer wrap user widgets starting with `autosuggest-` prefix (#496)
diff --git a/Dockerfile b/Dockerfile
index f5dd3c4..0d51407 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,8 +1,5 @@
FROM ruby:2.5.3-alpine
-ARG TEST_ZSH_VERSION
-RUN : "${TEST_ZSH_VERSION:?}"
-
RUN apk add --no-cache autoconf
RUN apk add --no-cache libtool
RUN apk add --no-cache libcap-dev
@@ -14,8 +11,10 @@ RUN apk add --no-cache tmux
WORKDIR /zsh-autosuggestions
-ADD install_test_zsh.sh ./
+ADD ZSH_VERSIONS /zsh-autosuggestions/ZSH_VERSIONS
+ADD install_test_zsh.sh /zsh-autosuggestions/install_test_zsh.sh
RUN ./install_test_zsh.sh
-ADD Gemfile Gemfile.lock ./
+ADD Gemfile /zsh-autosuggestions/Gemfile
+ADD Gemfile.lock /zsh-autosuggestions/Gemfile.lock
RUN bundle install
diff --git a/INSTALL.md b/INSTALL.md
index 7f0a395..196524f 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -3,23 +3,20 @@
* [Packages](#packages)
* [Antigen](#antigen)
* [Oh My Zsh](#oh-my-zsh)
-* [HomeBrew](#homebrew)
* [Manual](#manual-git-clone)
## Packages
| System | Package |
| ------------- | ------------- |
-| Alpine Linux | [zsh-autosuggestions](https://pkgs.alpinelinux.org/packages?name=zsh-autosuggestions) |
| Debian / Ubuntu | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
| Fedora / CentOS / RHEL / Scientific Linux | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
| OpenSUSE / SLE | [zsh-autosuggestions OBS repository](https://software.opensuse.org/download.html?project=shells%3Azsh-users%3Azsh-autosuggestions&package=zsh-autosuggestions) |
| Arch Linux / Manjaro / Antergos / Hyperbola | [zsh-autosuggestions](https://www.archlinux.org/packages/zsh-autosuggestions), [zsh-autosuggestions-git](https://aur.archlinux.org/packages/zsh-autosuggestions-git) |
-| NixOS | [zsh-autosuggestions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/zs/zsh-autosuggestions/package.nix) |
+| NixOS | [zsh-autosuggestions](https://github.com/NixOS/nixpkgs/blob/master/pkgs/shells/zsh/zsh-autosuggestions/default.nix) |
| Void Linux | [zsh-autosuggestions](https://github.com/void-linux/void-packages/blob/master/srcpkgs/zsh-autosuggestions/template) |
-| Mac OS | [homebrew](https://formulae.brew.sh/formula/zsh-autosuggestions) |
+| Mac OS | [homebrew](https://github.com/Homebrew/homebrew-core/blob/master/Formula/zsh-autosuggestions.rb) |
| NetBSD | [pkgsrc](http://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/shells/zsh-autosuggestions/README.html) |
-| FreeBSD | [pkg](https://cgit.freebsd.org/ports/tree/shells/zsh-autosuggestions) |
## Antigen
@@ -50,21 +47,6 @@
3. Start a new terminal session.
-## Homebrew
-
-1. Install command:
- ```sh
- brew install zsh-autosuggestions
- ```
-
-2. To activate the autosuggestions, add the following at the end of your .zshrc:
-
- ```sh
- source $(brew --prefix)/share/zsh-autosuggestions/zsh-autosuggestions.zsh
- ```
-
-3. Start a new terminal session.
-
## Manual (Git Clone)
1. Clone this repository somewhere on your machine. This guide will assume `~/.zsh/zsh-autosuggestions`.
diff --git a/Makefile b/Makefile
index 6f5431e..f6d13a7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,4 @@
-SRC_DIR := ./src
+SRC_DIR := ./src
SRC_FILES := \
$(SRC_DIR)/config.zsh \
diff --git a/README.md b/README.md
index a8c1b6c..3cfd2e8 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,7 @@ It suggests commands as you type based on history and completions.
Requirements: Zsh v4.3.11 or later
+[](https://circleci.com/gh/zsh-users/zsh-autosuggestions)
[](https://gitter.im/zsh-users/zsh-autosuggestions)
@@ -52,7 +53,7 @@ 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, which is included with zsh since 4.0.1)
+- `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`.
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.
@@ -169,16 +170,18 @@ Tests are written in ruby using the [`rspec`](http://rspec.info/) framework. The
Test files live in `spec/`. To run the tests, run `make test`. To run a specific test, run `TESTS=spec/some_spec.rb make test`. You can also specify a `zsh` binary to use by setting the `TEST_ZSH_BIN` environment variable (ex: `TEST_ZSH_BIN=/bin/zsh make test`).
-It's possible to run the tests for any supported version of zsh in a Docker image by building an image from the provided Dockerfile. To build the docker image for a specific version of zsh (where `` below is substituted with the contents of a line from the [`ZSH_VERSIONS`](ZSH_VERSIONS) file), run:
+A docker image for testing is available [on docker hub](https://hub.docker.com/r/ericfreese/zsh-autosuggestions-test). It comes with ruby, the bundler dependencies, and all supported versions of zsh installed.
+
+Pull the docker image with:
```sh
-docker build --build-arg TEST_ZSH_VERSION= -t zsh-autosuggestions-test .
+docker pull ericfreese/zsh-autosuggestions-test
```
-After building the image, run the tests via:
+To run the tests for a specific version of zsh (where `` below is substituted with the contents of a line from the [`ZSH_VERSIONS`](ZSH_VERSIONS) file):
```sh
-docker run -it -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
+docker run -it -e TEST_ZSH_BIN=zsh- -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
```
diff --git a/VERSION b/VERSION
index 63f2359..8b20e48 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-v0.7.1
+v0.7.0
diff --git a/ZSH_VERSIONS b/ZSH_VERSIONS
index 23006db..18ed7a6 100644
--- a/ZSH_VERSIONS
+++ b/ZSH_VERSIONS
@@ -1,5 +1,9 @@
# Zsh releases to run tests against
# See https://github.com/zsh-users/zsh/releases
+#
+# When modifying this file, rebuild and push docker image:
+# $ docker build -t ericfreese/zsh-autosuggestions-test .
+# $ docker push ericfreese/zsh-autosuggestions-test
4.3.11
5.0.2
5.0.8
@@ -10,5 +14,4 @@
5.5.1
5.6.2
5.7.1
-5.8.1
-5.9
+5.8
diff --git a/install_test_zsh.sh b/install_test_zsh.sh
index 6cac9f5..40dc4c5 100755
--- a/install_test_zsh.sh
+++ b/install_test_zsh.sh
@@ -2,22 +2,25 @@
set -ex
-mkdir zsh-build
-cd zsh-build
+for v in $(grep "^[^#]" ZSH_VERSIONS); do
+ mkdir zsh-$v
+ cd zsh-$v
-curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$TEST_ZSH_VERSION | tar xz --strip=1
+ curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$v | tar xz --strip=1
-./Util/preconfig
-./configure --enable-pcre \
- --enable-cap \
- --enable-multibyte \
- --with-term-lib='ncursesw tinfo' \
- --with-tcsetpgrp
+ ./Util/preconfig
+ ./configure --enable-pcre \
+ --enable-cap \
+ --enable-multibyte \
+ --with-term-lib='ncursesw tinfo' \
+ --with-tcsetpgrp \
+ --program-suffix="-$v"
-make install.bin
-make install.modules
-make install.fns
+ make install.bin
+ make install.modules
+ make install.fns
-cd ..
+ cd ..
-rm -rf zsh-build
+ rm -rf zsh-$v
+done
diff --git a/src/async.zsh b/src/async.zsh
index e179734..218eb26 100644
--- a/src/async.zsh
+++ b/src/async.zsh
@@ -11,7 +11,7 @@ _zsh_autosuggest_async_request() {
# If we've got a pending request, cancel it
if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then
# Close the file descriptor and remove the handler
- builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD
# We won't know the pid unless the user has zsh/system module installed
@@ -32,7 +32,7 @@ _zsh_autosuggest_async_request() {
fi
# Fork a process to fetch a suggestion and open a pipe to read from it
- builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
# Tell parent process our pid
echo $sysparams[pid]
@@ -68,10 +68,9 @@ _zsh_autosuggest_async_response() {
zle autosuggest-suggest -- "$suggestion"
# Close the fd
- builtin exec {1}<&-
+ exec {1}<&-
fi
# Always remove the handler
zle -F "$1"
- _ZSH_AUTOSUGGEST_ASYNC_FD=
}
diff --git a/src/config.zsh b/src/config.zsh
index 32d32b2..5a0ebd8 100644
--- a/src/config.zsh
+++ b/src/config.zsh
@@ -28,8 +28,6 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
history-search-backward
history-beginning-search-forward
history-beginning-search-backward
- history-beginning-search-forward-end
- history-beginning-search-backward-end
history-substring-search-up
history-substring-search-down
up-line-or-beginning-search
diff --git a/src/widgets.zsh b/src/widgets.zsh
index 7562897..bd61666 100644
--- a/src/widgets.zsh
+++ b/src/widgets.zsh
@@ -30,7 +30,7 @@ _zsh_autosuggest_toggle() {
# Clear the suggestion
_zsh_autosuggest_clear() {
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
_zsh_autosuggest_invoke_original_widget $@
}
@@ -47,7 +47,7 @@ _zsh_autosuggest_modify() {
local orig_postdisplay="$POSTDISPLAY"
# Clear suggestion while waiting for next one
- POSTDISPLAY=
+ unset POSTDISPLAY
# Original widget may modify the buffer
_zsh_autosuggest_invoke_original_widget $@
@@ -102,7 +102,7 @@ _zsh_autosuggest_suggest() {
if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
POSTDISPLAY="${suggestion#$BUFFER}"
else
- POSTDISPLAY=
+ unset POSTDISPLAY
fi
}
@@ -128,7 +128,7 @@ _zsh_autosuggest_accept() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
# Run the original widget before manually moving the cursor so that the
# cursor movement doesn't make the widget do something unexpected
@@ -151,7 +151,7 @@ _zsh_autosuggest_execute() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
# Call the original `accept-line` to handle syntax highlighting or
# other potential custom behavior
diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh
index e780225..b19cac7 100644
--- a/zsh-autosuggestions.zsh
+++ b/zsh-autosuggestions.zsh
@@ -1,6 +1,6 @@
# Fish-like fast/unobtrusive autosuggestions for zsh.
# https://github.com/zsh-users/zsh-autosuggestions
-# v0.7.1
+# v0.7.0
# Copyright (c) 2013 Thiago de Arruda
# Copyright (c) 2016-2021 Eric Freese
#
@@ -54,8 +54,6 @@ typeset -g ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
history-search-backward
history-beginning-search-forward
history-beginning-search-backward
- history-beginning-search-forward-end
- history-beginning-search-backward-end
history-substring-search-up
history-substring-search-down
up-line-or-beginning-search
@@ -294,7 +292,7 @@ _zsh_autosuggest_toggle() {
# Clear the suggestion
_zsh_autosuggest_clear() {
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
_zsh_autosuggest_invoke_original_widget $@
}
@@ -311,7 +309,7 @@ _zsh_autosuggest_modify() {
local orig_postdisplay="$POSTDISPLAY"
# Clear suggestion while waiting for next one
- POSTDISPLAY=
+ unset POSTDISPLAY
# Original widget may modify the buffer
_zsh_autosuggest_invoke_original_widget $@
@@ -366,7 +364,7 @@ _zsh_autosuggest_suggest() {
if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
POSTDISPLAY="${suggestion#$BUFFER}"
else
- POSTDISPLAY=
+ unset POSTDISPLAY
fi
}
@@ -392,7 +390,7 @@ _zsh_autosuggest_accept() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
# Run the original widget before manually moving the cursor so that the
# cursor movement doesn't make the widget do something unexpected
@@ -415,7 +413,7 @@ _zsh_autosuggest_execute() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- POSTDISPLAY=
+ unset POSTDISPLAY
# Call the original `accept-line` to handle syntax highlighting or
# other potential custom behavior
@@ -768,7 +766,7 @@ _zsh_autosuggest_async_request() {
# If we've got a pending request, cancel it
if [[ -n "$_ZSH_AUTOSUGGEST_ASYNC_FD" ]] && { true <&$_ZSH_AUTOSUGGEST_ASYNC_FD } 2>/dev/null; then
# Close the file descriptor and remove the handler
- builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
zle -F $_ZSH_AUTOSUGGEST_ASYNC_FD
# We won't know the pid unless the user has zsh/system module installed
@@ -789,7 +787,7 @@ _zsh_autosuggest_async_request() {
fi
# Fork a process to fetch a suggestion and open a pipe to read from it
- builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
# Tell parent process our pid
echo $sysparams[pid]
@@ -825,12 +823,11 @@ _zsh_autosuggest_async_response() {
zle autosuggest-suggest -- "$suggestion"
# Close the fd
- builtin exec {1}<&-
+ exec {1}<&-
fi
# Always remove the handler
zle -F "$1"
- _ZSH_AUTOSUGGEST_ASYNC_FD=
}
#--------------------------------------------------------------------#