From 69bf058c231ec94006c0c31c96343ce6a60d4ac9 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 28 Aug 2021 21:13:32 -0700 Subject: [PATCH 01/11] Ensure we're using the builtin exec --- src/async.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/async.zsh b/src/async.zsh index 218eb26..a4fb047 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,7 +68,7 @@ _zsh_autosuggest_async_response() { zle autosuggest-suggest -- "$suggestion" # Close the fd - exec {1}<&- + builtin exec {1}<&- fi # Always remove the handler From 8072e52d969409f3a9d5b6e977443e69bc6fe568 Mon Sep 17 00:00:00 2001 From: JeeBak Kim Date: Sat, 28 Aug 2021 21:14:03 -0700 Subject: [PATCH 02/11] Run: make --- zsh-autosuggestions.zsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index b19cac7..1b95a62 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -766,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 - 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 +787,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,7 +823,7 @@ _zsh_autosuggest_async_response() { zle autosuggest-suggest -- "$suggestion" # Close the fd - exec {1}<&- + builtin exec {1}<&- fi # Always remove the handler From 56f10c3b5dac558a7fcc7aa47459e4ac0eec3dc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Cegli=C5=84ski?= Date: Fri, 17 Sep 2021 00:07:03 +0200 Subject: [PATCH 03/11] Always reset file descriptor after consuming it This prevents the request cancelling logic from closing an unrelated fd that happens to reuse the same number. --- src/async.zsh | 1 + zsh-autosuggestions.zsh | 1 + 2 files changed, 2 insertions(+) diff --git a/src/async.zsh b/src/async.zsh index 218eb26..9a02280 100644 --- a/src/async.zsh +++ b/src/async.zsh @@ -73,4 +73,5 @@ _zsh_autosuggest_async_response() { # Always remove the handler zle -F "$1" + _ZSH_AUTOSUGGEST_ASYNC_FD= } diff --git a/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index b19cac7..98d1ec2 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -828,6 +828,7 @@ _zsh_autosuggest_async_response() { # Always remove the handler zle -F "$1" + _ZSH_AUTOSUGGEST_ASYNC_FD= } #--------------------------------------------------------------------# From 2cc34c015e581534e631b37d353b5fb7d34ed151 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 26 May 2023 17:36:17 -0600 Subject: [PATCH 04/11] Switch from Circle CI to GitHub Actions The testing docker image has been split up. Instead of having one image with all supported versions of zsh installed, we now have a separate image for each supported zsh version. We use GitHub Action matrices to run jobs in parallel for all of the supported versions. We no longer need to publish images to Docker Hub. The images are just built by CI (or developers) as needed from the Dockerfile in the repo. --- .circleci/config.yml | 15 --------- .github/workflows/integration.yml | 51 +++++++++++++++++++++++++++++++ Dockerfile | 9 +++--- README.md | 10 +++--- ZSH_VERSIONS | 4 --- install_test_zsh.sh | 31 +++++++++---------- 6 files changed, 74 insertions(+), 46 deletions(-) delete mode 100644 .circleci/config.yml create mode 100644 .github/workflows/integration.yml 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/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 3cfd2e8..3ee17f3 100644 --- a/README.md +++ b/README.md @@ -170,18 +170,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/ZSH_VERSIONS b/ZSH_VERSIONS index 18ed7a6..0cc79f8 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 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 From c5044edd48a63166926861ec793759a6d985197c Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 26 May 2023 19:57:14 -0600 Subject: [PATCH 05/11] Support latest minor version of 5.8 --- ZSH_VERSIONS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ZSH_VERSIONS b/ZSH_VERSIONS index 0cc79f8..b697f29 100644 --- a/ZSH_VERSIONS +++ b/ZSH_VERSIONS @@ -10,4 +10,4 @@ 5.5.1 5.6.2 5.7.1 -5.8 +5.8.1 From 9b0272944fc31af2f5a940ac07acc9054ab14e02 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 26 May 2023 19:57:30 -0600 Subject: [PATCH 06/11] Add support for 5.9 --- ZSH_VERSIONS | 1 + 1 file changed, 1 insertion(+) diff --git a/ZSH_VERSIONS b/ZSH_VERSIONS index b697f29..23006db 100644 --- a/ZSH_VERSIONS +++ b/ZSH_VERSIONS @@ -11,3 +11,4 @@ 5.6.2 5.7.1 5.8.1 +5.9 From 23f294345584162a73f43e9616556fcca4bd9ce0 Mon Sep 17 00:00:00 2001 From: Pablo Speciale Date: Sat, 10 Sep 2022 14:58:18 +0200 Subject: [PATCH 07/11] Add more common widgets to list of clear widgets Cherry-picked from PR #706 and updates made to src/config.zsh. Fixes issues #678 --- src/config.zsh | 2 ++ zsh-autosuggestions.zsh | 2 ++ 2 files changed, 4 insertions(+) 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/zsh-autosuggestions.zsh b/zsh-autosuggestions.zsh index b19cac7..cdd8ee2 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -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 From 11d17e7fea9fba8067f992b3d95e884c20a4069c Mon Sep 17 00:00:00 2001 From: Joe Schaefer Date: Mon, 11 Oct 2021 14:16:42 -0400 Subject: [PATCH 08/11] Clear POSTDISPLAY instead of unsetting We don't have any particular reason to unset. Clearing should be good enough, and avoid any errors using unset parameters. Cherry-picked from PR #634 --- src/widgets.zsh | 10 +++++----- zsh-autosuggestions.zsh | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) 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 91247b4..10aff06 100644 --- a/zsh-autosuggestions.zsh +++ b/zsh-autosuggestions.zsh @@ -294,7 +294,7 @@ _zsh_autosuggest_toggle() { # Clear the suggestion _zsh_autosuggest_clear() { # Remove the suggestion - unset POSTDISPLAY + POSTDISPLAY= _zsh_autosuggest_invoke_original_widget $@ } @@ -311,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 $@ @@ -366,7 +366,7 @@ _zsh_autosuggest_suggest() { if [[ -n "$suggestion" ]] && (( $#BUFFER )); then POSTDISPLAY="${suggestion#$BUFFER}" else - unset POSTDISPLAY + POSTDISPLAY= fi } @@ -392,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 @@ -415,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 From 9aceef9646995c478e40c57a81a1ddbbaf9741b9 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 15 Nov 2024 12:28:27 -0700 Subject: [PATCH 09/11] Remove circle ci reference left over from switch to github actions --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3ee17f3..552417f 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) From a50468ef4bf8301231a9db0cb5b8b5896b95c9ac Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 15 Nov 2024 12:35:58 -0700 Subject: [PATCH 10/11] Update changelog for v0.7.1 release --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) 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) From f8907cf32b1aefc6868c4f0d1fb77286d1a0f9b3 Mon Sep 17 00:00:00 2001 From: Eric Freese Date: Fri, 15 Nov 2024 12:36:08 -0700 Subject: [PATCH 11/11] v0.7.1 --- VERSION | 2 +- zsh-autosuggestions.zsh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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-autosuggestions.zsh b/zsh-autosuggestions.zsh index 10aff06..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 #