mirror of
https://github.com/zsh-users/zsh-autosuggestions.git
synced 2026-11-11 11:01:51 -05:00
Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a411ef3e09 | ||
|
|
fcca87555f | ||
|
|
74ba3739bb | ||
|
|
3ecc53dfe2 | ||
|
|
aa05920a4a | ||
|
|
89c600c873 | ||
|
|
3474c87d67 | ||
|
|
590c1cd84c | ||
|
|
58c98a7739 | ||
|
|
bb18c4f677 | ||
|
|
9ad305c906 | ||
|
|
eff0894a13 | ||
|
|
e0b96e1bd6 | ||
|
|
05f22fa8a3 | ||
|
|
e715ffb1ae |
@@ -1,5 +1,11 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## v0.7.0
|
||||||
|
- Enable asynchronous mode by default (#498)
|
||||||
|
- No longer wrap user widgets starting with `autosuggest-` prefix (#496)
|
||||||
|
- Fix a bug wrapping widgets that modify the buffer (#541)
|
||||||
|
|
||||||
|
|
||||||
## v0.6.4
|
## v0.6.4
|
||||||
- Fix `vi-forward-char` triggering a bell when using it to accept a suggestion (#488)
|
- Fix `vi-forward-char` triggering a bell when using it to accept a suggestion (#488)
|
||||||
- New configuration option to skip completion suggestions when buffer matches a pattern (#487)
|
- New configuration option to skip completion suggestions when buffer matches a pattern (#487)
|
||||||
|
|||||||
+4
-1
@@ -39,7 +39,10 @@
|
|||||||
2. Add the plugin to the list of plugins for Oh My Zsh to load (inside `~/.zshrc`):
|
2. Add the plugin to the list of plugins for Oh My Zsh to load (inside `~/.zshrc`):
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
plugins=(zsh-autosuggestions)
|
plugins=(
|
||||||
|
# other plugins...
|
||||||
|
zsh-autosuggestions
|
||||||
|
)
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Start a new terminal session.
|
3. Start a new terminal session.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
Copyright (c) 2013 Thiago de Arruda
|
Copyright (c) 2013 Thiago de Arruda
|
||||||
Copyright (c) 2016-2019 Eric Freese
|
Copyright (c) 2016-2021 Eric Freese
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person
|
Permission is hereby granted, free of charge, to any person
|
||||||
obtaining a copy of this software and associated documentation
|
obtaining a copy of this software and associated documentation
|
||||||
|
|||||||
@@ -14,3 +14,4 @@
|
|||||||
5.5.1
|
5.5.1
|
||||||
5.6.2
|
5.6.2
|
||||||
5.7.1
|
5.7.1
|
||||||
|
5.8
|
||||||
|
|||||||
@@ -1,11 +1,6 @@
|
|||||||
describe 'a multi-line suggestion' do
|
describe 'a multi-line suggestion' do
|
||||||
it 'should be displayed on multiple lines' do
|
it 'should be displayed on multiple lines' do
|
||||||
with_history(-> {
|
with_history("echo \"\n\"") do
|
||||||
session.send_string('echo "')
|
|
||||||
session.send_keys('enter')
|
|
||||||
session.send_string('"')
|
|
||||||
session.send_keys('enter')
|
|
||||||
}) do
|
|
||||||
session.send_keys('e')
|
session.send_keys('e')
|
||||||
wait_for { session.content }.to eq("echo \"\n\"")
|
wait_for { session.content }.to eq("echo \"\n\"")
|
||||||
end
|
end
|
||||||
|
|||||||
+7
-4
@@ -1,6 +1,7 @@
|
|||||||
require 'pry'
|
require 'pry'
|
||||||
require 'rspec/wait'
|
require 'rspec/wait'
|
||||||
require 'terminal_session'
|
require 'terminal_session'
|
||||||
|
require 'tempfile'
|
||||||
|
|
||||||
RSpec.shared_context 'terminal session' do
|
RSpec.shared_context 'terminal session' do
|
||||||
let(:term_opts) { {} }
|
let(:term_opts) { {} }
|
||||||
@@ -21,11 +22,12 @@ RSpec.shared_context 'terminal session' do
|
|||||||
end
|
end
|
||||||
|
|
||||||
def with_history(*commands, &block)
|
def with_history(*commands, &block)
|
||||||
session.run_command('fc -p')
|
Tempfile.create do |f|
|
||||||
|
f.write(commands.map{|c| c.gsub("\n", "\\\n")}.join("\n"))
|
||||||
|
f.flush
|
||||||
|
|
||||||
commands.each do |c|
|
session.run_command('fc -p')
|
||||||
c.respond_to?(:call) ? c.call : session.run_command(c)
|
session.run_command("fc -R #{f.path}")
|
||||||
end
|
|
||||||
|
|
||||||
session.clear_screen
|
session.clear_screen
|
||||||
|
|
||||||
@@ -35,6 +37,7 @@ RSpec.shared_context 'terminal session' do
|
|||||||
session.run_command('fc -P')
|
session.run_command('fc -P')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
RSpec.configure do |config|
|
RSpec.configure do |config|
|
||||||
config.expect_with :rspec do |expectations|
|
config.expect_with :rspec do |expectations|
|
||||||
|
|||||||
@@ -1,58 +1,71 @@
|
|||||||
shared_examples 'special characters' do
|
shared_examples 'special characters' do
|
||||||
describe 'a special character in the buffer' do
|
describe 'a special character in the buffer should be treated like any other character' do
|
||||||
it 'should be treated like any other character' do
|
it 'asterisk' do
|
||||||
with_history('echo "hello*"', 'echo "hello."') do
|
with_history('echo "hello*"', 'echo "hello."') do
|
||||||
session.send_string('echo "hello*')
|
session.send_string('echo "hello*')
|
||||||
wait_for { session.content }.to eq('echo "hello*"')
|
wait_for { session.content }.to eq('echo "hello*"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'question mark' do
|
||||||
with_history('echo "hello?"', 'echo "hello."') do
|
with_history('echo "hello?"', 'echo "hello."') do
|
||||||
session.send_string('echo "hello?')
|
session.send_string('echo "hello?')
|
||||||
wait_for { session.content }.to eq('echo "hello?"')
|
wait_for { session.content }.to eq('echo "hello?"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'backslash' do
|
||||||
with_history('echo "hello\nworld"') do
|
with_history('echo "hello\nworld"') do
|
||||||
session.send_string('echo "hello\\')
|
session.send_string('echo "hello\\')
|
||||||
wait_for { session.content }.to eq('echo "hello\nworld"')
|
wait_for { session.content }.to eq('echo "hello\nworld"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'double backslash' do
|
||||||
with_history('echo "\\\\"') do
|
with_history('echo "\\\\"') do
|
||||||
session.send_string('echo "\\\\')
|
session.send_string('echo "\\\\')
|
||||||
wait_for { session.content }.to eq('echo "\\\\"')
|
wait_for { session.content }.to eq('echo "\\\\"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'tilde' do
|
||||||
with_history('echo ~/foo') do
|
with_history('echo ~/foo') do
|
||||||
session.send_string('echo ~')
|
session.send_string('echo ~')
|
||||||
wait_for { session.content }.to eq('echo ~/foo')
|
wait_for { session.content }.to eq('echo ~/foo')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'parentheses' do
|
||||||
with_history('echo "$(ls foo)"') do
|
with_history('echo "$(ls foo)"') do
|
||||||
session.send_string('echo "$(')
|
session.send_string('echo "$(')
|
||||||
wait_for { session.content }.to eq('echo "$(ls foo)"')
|
wait_for { session.content }.to eq('echo "$(ls foo)"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'square bracket' do
|
||||||
with_history('echo "$history[123]"') do
|
with_history('echo "$history[123]"') do
|
||||||
session.send_string('echo "$history[')
|
session.send_string('echo "$history[')
|
||||||
wait_for { session.content }.to eq('echo "$history[123]"')
|
wait_for { session.content }.to eq('echo "$history[123]"')
|
||||||
session.send_string('123]')
|
session.send_string('123]')
|
||||||
wait_for { session.content }.to eq('echo "$history[123]"')
|
wait_for { session.content }.to eq('echo "$history[123]"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'octothorpe' do
|
||||||
with_history('echo "#yolo"') do
|
with_history('echo "#yolo"') do
|
||||||
session.send_string('echo "#')
|
session.send_string('echo "#')
|
||||||
wait_for { session.content }.to eq('echo "#yolo"')
|
wait_for { session.content }.to eq('echo "#yolo"')
|
||||||
end
|
end
|
||||||
|
|
||||||
with_history('echo "#foo"', 'echo $#abc') do
|
|
||||||
session.send_string('echo "#')
|
|
||||||
wait_for { session.content }.to eq('echo "#foo"')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it 'caret' do
|
||||||
with_history('echo "^A"', 'echo "^B"') do
|
with_history('echo "^A"', 'echo "^B"') do
|
||||||
session.send_string('echo "^A')
|
session.send_string('echo "^A')
|
||||||
wait_for { session.content }.to eq('echo "^A"')
|
wait_for { session.content }.to eq('echo "^A"')
|
||||||
end
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'dash' do
|
||||||
with_history('-foo() {}') do
|
with_history('-foo() {}') do
|
||||||
session.send_string('-')
|
session.send_string('-')
|
||||||
wait_for { session.content }.to eq('-foo() {}')
|
wait_for { session.content }.to eq('-foo() {}')
|
||||||
|
|||||||
+2
-1
@@ -44,7 +44,8 @@ _zsh_autosuggest_async_request() {
|
|||||||
|
|
||||||
# There's a weird bug here where ^C stops working unless we force a fork
|
# There's a weird bug here where ^C stops working unless we force a fork
|
||||||
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
|
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
|
||||||
command true
|
autoload -Uz is-at-least
|
||||||
|
is-at-least 5.8 || command true
|
||||||
|
|
||||||
# Read the pid from the child process
|
# Read the pid from the child process
|
||||||
read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
|
read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
|
||||||
|
|||||||
+3
-14
@@ -61,20 +61,9 @@ _zsh_autosuggest_modify() {
|
|||||||
return $retval
|
return $retval
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Optimize if manually typing in the suggestion
|
# Optimize if manually typing in the suggestion or if buffer hasn't changed
|
||||||
if (( $#BUFFER > $#orig_buffer )); then
|
if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then
|
||||||
local added=${BUFFER#$orig_buffer}
|
POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}"
|
||||||
|
|
||||||
# If the string added matches the beginning of the postdisplay
|
|
||||||
if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then
|
|
||||||
POSTDISPLAY="${orig_postdisplay:$#added}"
|
|
||||||
return $retval
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Don't fetch a new suggestion if the buffer hasn't changed
|
|
||||||
if [[ "$BUFFER" = "$orig_buffer" ]]; then
|
|
||||||
POSTDISPLAY="$orig_postdisplay"
|
|
||||||
return $retval
|
return $retval
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+7
-17
@@ -1,8 +1,8 @@
|
|||||||
# Fish-like fast/unobtrusive autosuggestions for zsh.
|
# Fish-like fast/unobtrusive autosuggestions for zsh.
|
||||||
# https://github.com/zsh-users/zsh-autosuggestions
|
# https://github.com/zsh-users/zsh-autosuggestions
|
||||||
# v0.6.4
|
# v0.7.0
|
||||||
# Copyright (c) 2013 Thiago de Arruda
|
# Copyright (c) 2013 Thiago de Arruda
|
||||||
# Copyright (c) 2016-2019 Eric Freese
|
# Copyright (c) 2016-2021 Eric Freese
|
||||||
#
|
#
|
||||||
# Permission is hereby granted, free of charge, to any person
|
# Permission is hereby granted, free of charge, to any person
|
||||||
# obtaining a copy of this software and associated documentation
|
# obtaining a copy of this software and associated documentation
|
||||||
@@ -323,20 +323,9 @@ _zsh_autosuggest_modify() {
|
|||||||
return $retval
|
return $retval
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Optimize if manually typing in the suggestion
|
# Optimize if manually typing in the suggestion or if buffer hasn't changed
|
||||||
if (( $#BUFFER > $#orig_buffer )); then
|
if [[ "$BUFFER" = "$orig_buffer"* && "$orig_postdisplay" = "${BUFFER:$#orig_buffer}"* ]]; then
|
||||||
local added=${BUFFER#$orig_buffer}
|
POSTDISPLAY="${orig_postdisplay:$(($#BUFFER - $#orig_buffer))}"
|
||||||
|
|
||||||
# If the string added matches the beginning of the postdisplay
|
|
||||||
if [[ "$added" = "${orig_postdisplay:0:$#added}" ]]; then
|
|
||||||
POSTDISPLAY="${orig_postdisplay:$#added}"
|
|
||||||
return $retval
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Don't fetch a new suggestion if the buffer hasn't changed
|
|
||||||
if [[ "$BUFFER" = "$orig_buffer" ]]; then
|
|
||||||
POSTDISPLAY="$orig_postdisplay"
|
|
||||||
return $retval
|
return $retval
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -810,7 +799,8 @@ _zsh_autosuggest_async_request() {
|
|||||||
|
|
||||||
# There's a weird bug here where ^C stops working unless we force a fork
|
# There's a weird bug here where ^C stops working unless we force a fork
|
||||||
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
|
# See https://github.com/zsh-users/zsh-autosuggestions/issues/364
|
||||||
command true
|
autoload -Uz is-at-least
|
||||||
|
is-at-least 5.8 || command true
|
||||||
|
|
||||||
# Read the pid from the child process
|
# Read the pid from the child process
|
||||||
read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
|
read _ZSH_AUTOSUGGEST_CHILD_PID <&$_ZSH_AUTOSUGGEST_ASYNC_FD
|
||||||
|
|||||||
Reference in New Issue
Block a user