diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index d95fa98..0000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,15 +0,0 @@
-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
new file mode 100644
index 0000000..ec7bc75
--- /dev/null
+++ b/.github/workflows/integration.yml
@@ -0,0 +1,51 @@
+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/CHANGELOG.md b/CHANGELOG.md
index 15d65a9..30c7735 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
# 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 0d51407..f5dd3c4 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,8 @@
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
@@ -11,10 +14,8 @@ RUN apk add --no-cache tmux
WORKDIR /zsh-autosuggestions
-ADD ZSH_VERSIONS /zsh-autosuggestions/ZSH_VERSIONS
-ADD install_test_zsh.sh /zsh-autosuggestions/install_test_zsh.sh
+ADD install_test_zsh.sh ./
RUN ./install_test_zsh.sh
-ADD Gemfile /zsh-autosuggestions/Gemfile
-ADD Gemfile.lock /zsh-autosuggestions/Gemfile.lock
+ADD Gemfile Gemfile.lock ./
RUN bundle install
diff --git a/README.md b/README.md
index 94e0b58..a8c1b6c 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,6 @@ It suggests commands as you type based on history and completions.
Requirements: Zsh v4.3.11 or later
-[![CircleCI](https://img.shields.io/circleci/build/github/zsh-users/zsh-autosuggestions.svg)](https://circleci.com/gh/zsh-users/zsh-autosuggestions)
[![Chat on Gitter](https://img.shields.io/gitter/room/zsh-users/zsh-autosuggestions.svg)](https://gitter.im/zsh-users/zsh-autosuggestions)
@@ -170,18 +169,16 @@ 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`).
-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:
+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:
```sh
-docker pull ericfreese/zsh-autosuggestions-test
+docker build --build-arg TEST_ZSH_VERSION= -t zsh-autosuggestions-test .
```
-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):
+After building the image, run the tests via:
```sh
-docker run -it -e TEST_ZSH_BIN=zsh- -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
+docker run -it -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
```
diff --git a/VERSION b/VERSION
index 8b20e48..63f2359 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-v0.7.0
+v0.7.1
diff --git a/ZSH_VERSIONS b/ZSH_VERSIONS
index 18ed7a6..23006db 100644
--- a/ZSH_VERSIONS
+++ b/ZSH_VERSIONS
@@ -1,9 +1,5 @@
# 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
@@ -14,4 +10,5 @@
5.5.1
5.6.2
5.7.1
-5.8
+5.8.1
+5.9
diff --git a/install_test_zsh.sh b/install_test_zsh.sh
index 40dc4c5..6cac9f5 100755
--- a/install_test_zsh.sh
+++ b/install_test_zsh.sh
@@ -2,25 +2,22 @@
set -ex
-for v in $(grep "^[^#]" ZSH_VERSIONS); do
- mkdir zsh-$v
- cd zsh-$v
+mkdir zsh-build
+cd zsh-build
- curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$v | tar xz --strip=1
+curl -L https://api.github.com/repos/zsh-users/zsh/tarball/zsh-$TEST_ZSH_VERSION | tar xz --strip=1
- ./Util/preconfig
- ./configure --enable-pcre \
- --enable-cap \
- --enable-multibyte \
- --with-term-lib='ncursesw tinfo' \
- --with-tcsetpgrp \
- --program-suffix="-$v"
+./Util/preconfig
+./configure --enable-pcre \
+ --enable-cap \
+ --enable-multibyte \
+ --with-term-lib='ncursesw tinfo' \
+ --with-tcsetpgrp
- make install.bin
- make install.modules
- make install.fns
+make install.bin
+make install.modules
+make install.fns
- cd ..
+cd ..
- rm -rf zsh-$v
-done
+rm -rf zsh-build
diff --git a/src/async.zsh b/src/async.zsh
index 218eb26..e179734 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
- exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ builtin 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
- exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
# Tell parent process our pid
echo $sysparams[pid]
@@ -68,9 +68,10 @@ _zsh_autosuggest_async_response() {
zle autosuggest-suggest -- "$suggestion"
# Close the fd
- exec {1}<&-
+ builtin 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 5a0ebd8..32d32b2 100644
--- a/src/config.zsh
+++ b/src/config.zsh
@@ -28,6 +28,8 @@ 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 bd61666..7562897 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
- unset POSTDISPLAY
+ POSTDISPLAY=
_zsh_autosuggest_invoke_original_widget $@
}
@@ -47,7 +47,7 @@ _zsh_autosuggest_modify() {
local orig_postdisplay="$POSTDISPLAY"
# Clear suggestion while waiting for next one
- unset POSTDISPLAY
+ 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
- unset POSTDISPLAY
+ POSTDISPLAY=
fi
}
@@ -128,7 +128,7 @@ _zsh_autosuggest_accept() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- unset POSTDISPLAY
+ 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
- unset POSTDISPLAY
+ 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 b19cac7..e780225 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.0
+# v0.7.1
# Copyright (c) 2013 Thiago de Arruda
# Copyright (c) 2016-2021 Eric Freese
#
@@ -54,6 +54,8 @@ 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
@@ -292,7 +294,7 @@ _zsh_autosuggest_toggle() {
# Clear the suggestion
_zsh_autosuggest_clear() {
# Remove the suggestion
- unset POSTDISPLAY
+ POSTDISPLAY=
_zsh_autosuggest_invoke_original_widget $@
}
@@ -309,7 +311,7 @@ _zsh_autosuggest_modify() {
local orig_postdisplay="$POSTDISPLAY"
# Clear suggestion while waiting for next one
- unset POSTDISPLAY
+ POSTDISPLAY=
# Original widget may modify the buffer
_zsh_autosuggest_invoke_original_widget $@
@@ -364,7 +366,7 @@ _zsh_autosuggest_suggest() {
if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
POSTDISPLAY="${suggestion#$BUFFER}"
else
- unset POSTDISPLAY
+ POSTDISPLAY=
fi
}
@@ -390,7 +392,7 @@ _zsh_autosuggest_accept() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- unset POSTDISPLAY
+ POSTDISPLAY=
# Run the original widget before manually moving the cursor so that the
# cursor movement doesn't make the widget do something unexpected
@@ -413,7 +415,7 @@ _zsh_autosuggest_execute() {
BUFFER="$BUFFER$POSTDISPLAY"
# Remove the suggestion
- unset POSTDISPLAY
+ POSTDISPLAY=
# Call the original `accept-line` to handle syntax highlighting or
# other potential custom behavior
@@ -766,7 +768,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
- exec {_ZSH_AUTOSUGGEST_ASYNC_FD}<&-
+ builtin 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
@@ -787,7 +789,7 @@ _zsh_autosuggest_async_request() {
fi
# Fork a process to fetch a suggestion and open a pipe to read from it
- exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
+ builtin exec {_ZSH_AUTOSUGGEST_ASYNC_FD}< <(
# Tell parent process our pid
echo $sysparams[pid]
@@ -823,11 +825,12 @@ _zsh_autosuggest_async_response() {
zle autosuggest-suggest -- "$suggestion"
# Close the fd
- exec {1}<&-
+ builtin exec {1}<&-
fi
# Always remove the handler
zle -F "$1"
+ _ZSH_AUTOSUGGEST_ASYNC_FD=
}
#--------------------------------------------------------------------#