Skip to content

Commit

Permalink
Merge pull request #811 from zsh-users/develop
Browse files Browse the repository at this point in the history
v0.7.1
  • Loading branch information
ericfreese authored Nov 15, 2024
2 parents c3d4e57 + f8907cf commit e52ee8c
Show file tree
Hide file tree
Showing 12 changed files with 107 additions and 66 deletions.
15 changes: 0 additions & 15 deletions .circleci/config.yml

This file was deleted.

51 changes: 51 additions & 0 deletions .github/workflows/integration.yml
Original file line number Diff line number Diff line change
@@ -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
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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)
Expand Down
9 changes: 5 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
11 changes: 4 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

<a href="https://asciinema.org/a/37390" target="_blank"><img src="https://asciinema.org/a/37390.png" width="400" /></a>
Expand Down Expand Up @@ -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 `<version>` 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=<version> -t zsh-autosuggestions-test .
```
To run the tests for a specific version of zsh (where `<version>` 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-<version> -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
docker run -it -v $PWD:/zsh-autosuggestions zsh-autosuggestions-test make test
```
Expand Down
2 changes: 1 addition & 1 deletion VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
v0.7.0
v0.7.1
7 changes: 2 additions & 5 deletions ZSH_VERSIONS
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -14,4 +10,5 @@
5.5.1
5.6.2
5.7.1
5.8
5.8.1
5.9
31 changes: 14 additions & 17 deletions install_test_zsh.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
7 changes: 4 additions & 3 deletions src/async.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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]
Expand Down Expand Up @@ -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=
}
2 changes: 2 additions & 0 deletions src/config.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
10 changes: 5 additions & 5 deletions src/widgets.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ _zsh_autosuggest_toggle() {
# Clear the suggestion
_zsh_autosuggest_clear() {
# Remove the suggestion
unset POSTDISPLAY
POSTDISPLAY=

_zsh_autosuggest_invoke_original_widget $@
}
Expand All @@ -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 $@
Expand Down Expand Up @@ -102,7 +102,7 @@ _zsh_autosuggest_suggest() {
if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
POSTDISPLAY="${suggestion#$BUFFER}"
else
unset POSTDISPLAY
POSTDISPLAY=
fi
}

Expand All @@ -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
Expand All @@ -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
Expand Down
21 changes: 12 additions & 9 deletions zsh-autosuggestions.zsh
Original file line number Diff line number Diff line change
@@ -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
#
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -292,7 +294,7 @@ _zsh_autosuggest_toggle() {
# Clear the suggestion
_zsh_autosuggest_clear() {
# Remove the suggestion
unset POSTDISPLAY
POSTDISPLAY=

_zsh_autosuggest_invoke_original_widget $@
}
Expand All @@ -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 $@
Expand Down Expand Up @@ -364,7 +366,7 @@ _zsh_autosuggest_suggest() {
if [[ -n "$suggestion" ]] && (( $#BUFFER )); then
POSTDISPLAY="${suggestion#$BUFFER}"
else
unset POSTDISPLAY
POSTDISPLAY=
fi
}

Expand All @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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]
Expand Down Expand Up @@ -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=
}

#--------------------------------------------------------------------#
Expand Down

0 comments on commit e52ee8c

Please sign in to comment.