mirror of
				https://github.com/zsh-users/zsh-autosuggestions.git
				synced 2025-10-30 15:26:29 +08:00 
			
		
		
		
	Compare commits
	
		
			15 Commits
		
	
	
		
			4adbdcdd77
			...
			28de63490a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | 28de63490a | ||
|   | e52ee8ca55 | ||
|   | f8907cf32b | ||
|   | a50468ef4b | ||
|   | 9aceef9646 | ||
|   | 11d17e7fea | ||
|   | a593f4dfec | ||
|   | 2c9e57fd50 | ||
|   | 23f2943455 | ||
|   | 9b0272944f | ||
|   | c5044edd48 | ||
|   | 2cc34c015e | ||
|   | 56f10c3b5d | ||
|   | 8072e52d96 | ||
|   | 69bf058c23 | 
| @ -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 | ||||
							
								
								
									
										51
									
								
								.github/workflows/integration.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								.github/workflows/integration.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @ -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 | ||||
| @ -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) | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
							
								
								
									
										11
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								README.md
									
									
									
									
									
								
							| @ -6,7 +6,6 @@ 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) | ||||
| 
 | ||||
| <a href="https://asciinema.org/a/37390" target="_blank"><img src="https://asciinema.org/a/37390.png" width="400" /></a> | ||||
| @ -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 | ||||
| ``` | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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= | ||||
| } | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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 | ||||
|  | ||||
| @ -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= | ||||
| } | ||||
| 
 | ||||
| #--------------------------------------------------------------------# | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user