Add zsh plugin
zsh-autosuggestions zsh-syntax-highlighting
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
~/.git-completion.bash: git-completion.bash
|
~/.git-completion.bash: git-completion.bash
|
||||||
~/.dictionary.txt.gz: dictionary.txt.gz
|
~/.dictionary.txt.gz: dictionary.txt.gz
|
||||||
~/.common_shell_functions: common_shell_functions
|
~/.common_shell_functions: common_shell_functions
|
||||||
|
~/.zsh: zsh
|
||||||
|
|
||||||
- shell:
|
- shell:
|
||||||
- [git submodule update --init --recursive, Installing submodules]
|
- [git submodule update --init --recursive, Installing submodules]
|
||||||
|
|||||||
@@ -121,3 +121,10 @@ nnoremap # *
|
|||||||
nnoremap * #
|
nnoremap * #
|
||||||
inoremap jk <Esc>
|
inoremap jk <Esc>
|
||||||
inoremap kj <Esc>
|
inoremap kj <Esc>
|
||||||
|
|
||||||
|
"Allow j/k navigation in autocomplete box
|
||||||
|
inoremap <expr> j ((pumvisible())?("\<C-n>"):("j"))
|
||||||
|
inoremap <expr> k ((pumvisible())?("\<C-p>"):("k"))
|
||||||
|
|
||||||
|
inoremap <C-F> :compl-filename<CR>
|
||||||
|
|
||||||
|
|||||||
@@ -42,26 +42,6 @@ filetype plugin indent on " required
|
|||||||
" see :h vundle for more details or wiki for FAQ
|
" see :h vundle for more details or wiki for FAQ
|
||||||
" Put your non-Plugin stuff after this line
|
" Put your non-Plugin stuff after this line
|
||||||
|
|
||||||
" Allows YouCompleteMe to play nice with UltiSnips
|
|
||||||
function! g:UltiSnips_Complete()
|
|
||||||
call UltiSnips#ExpandSnippet()
|
|
||||||
if g:ulti_expand_res == 0
|
|
||||||
if pumvisible()
|
|
||||||
return "\<C-n>"
|
|
||||||
else
|
|
||||||
call UltiSnips#JumpForwards()
|
|
||||||
if g:ulti_jump_forwards_res == 0
|
|
||||||
return "\<TAB>"
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
return ""
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
let g:UltiSnipsExpandTrigger="<c-x>"
|
|
||||||
au BufEnter * exec "inoremap <silent> " . g:UltiSnipsExpandTrigger . " <C-R>=g:UltiSnips_Complete()<cr>"
|
|
||||||
let g:UltiSnipsJumpForwardTrigger="<tab>"
|
|
||||||
let g:UltiSnipsListSnippets="<c-e>"
|
|
||||||
" this mapping Enter key to <C-y> to chose the current highlight item
|
" this mapping Enter key to <C-y> to chose the current highlight item
|
||||||
" and close the selection list, same as other IDEs.
|
" and close the selection list, same as other IDEs.
|
||||||
" CONFLICT with some plugins like tpope/Endwise
|
" CONFLICT with some plugins like tpope/Endwise
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[*]
|
||||||
|
charset = utf-8
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
indent_style = tab
|
||||||
|
indent_size = 4
|
||||||
|
|
||||||
|
[*.md]
|
||||||
|
indent_style = space
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Changelog
|
||||||
|
|
||||||
|
## v0.3.3
|
||||||
|
- Switch from $history array to fc builtin for better performance with large HISTFILEs (#164)
|
||||||
|
- Fix tilde handling when extended_glob is set (#168)
|
||||||
|
- Add config option for maximum buffer length to fetch suggestions for (#178)
|
||||||
|
- Add config option for list of widgets to ignore (#184)
|
||||||
|
- Don't fetch a new suggestion unless a modification widget actually modifies the buffer (#183)
|
||||||
|
|
||||||
|
## v0.3.2
|
||||||
|
- Test runner now supports running specific tests and choosing zsh binary
|
||||||
|
- Return code from original widget is now correctly passed through (#135)
|
||||||
|
- Add `vi-add-eol` to list of accept widgets (#143)
|
||||||
|
- Escapes widget names within evals to fix problems with irregular widget names (#152)
|
||||||
|
- Plugin now clears suggestion while within a completion menu (#149)
|
||||||
|
- .plugin file no longer relies on symbolic link support, fixing issues on Windows (#156)
|
||||||
|
|
||||||
|
## v0.3.1
|
||||||
|
|
||||||
|
- Fixes issue with `vi-next-char` not accepting suggestion (#137).
|
||||||
|
- Fixes global variable warning when WARN_CREATE_GLOBAL option enabled (#133).
|
||||||
|
- Split out a separate test file for each widget.
|
||||||
|
|
||||||
|
## v0.3.0
|
||||||
|
|
||||||
|
- Adds `autosuggest-execute` widget (PR #124).
|
||||||
|
- Adds concept of suggestion "strategies" for different ways of fetching suggestions.
|
||||||
|
- Adds "match_prev_cmd" strategy (PR #131).
|
||||||
|
- Uses git submodules for testing dependencies.
|
||||||
|
- Lots of test cleanup.
|
||||||
|
- Various bug fixes for zsh 5.0.x and `sh_word_split` option.
|
||||||
|
|
||||||
|
|
||||||
|
## v0.2.17
|
||||||
|
|
||||||
|
Start of changelog.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
Fish-like fast/unobtrusive autosuggestions for zsh.
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
Copyright (c) 2013 Thiago de Arruda
|
||||||
|
Copyright (c) 2016 Eric Freese
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the "Software"), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
SRC_DIR := ./src
|
||||||
|
VENDOR_DIR := ./vendor
|
||||||
|
|
||||||
|
SRC_FILES := \
|
||||||
|
$(SRC_DIR)/config.zsh \
|
||||||
|
$(SRC_DIR)/deprecated.zsh \
|
||||||
|
$(SRC_DIR)/bind.zsh \
|
||||||
|
$(SRC_DIR)/highlight.zsh \
|
||||||
|
$(SRC_DIR)/widgets.zsh \
|
||||||
|
$(SRC_DIR)/suggestion.zsh \
|
||||||
|
$(SRC_DIR)/strategies/*.zsh \
|
||||||
|
$(SRC_DIR)/start.zsh
|
||||||
|
|
||||||
|
HEADER_FILES := \
|
||||||
|
DESCRIPTION \
|
||||||
|
URL \
|
||||||
|
VERSION \
|
||||||
|
LICENSE
|
||||||
|
|
||||||
|
PLUGIN_TARGET := zsh-autosuggestions.zsh
|
||||||
|
|
||||||
|
SHUNIT2 := $(VENDOR_DIR)/shunit2/2.1.6
|
||||||
|
STUB_SH := $(VENDOR_DIR)/stub.sh/stub.sh
|
||||||
|
|
||||||
|
TEST_PREREQS := \
|
||||||
|
$(SHUNIT2) \
|
||||||
|
$(STUB_SH)
|
||||||
|
|
||||||
|
all: $(PLUGIN_TARGET)
|
||||||
|
|
||||||
|
$(PLUGIN_TARGET): $(HEADER_FILES) $(SRC_FILES)
|
||||||
|
cat $(HEADER_FILES) | sed -e 's/^/# /g' > $@
|
||||||
|
cat $(SRC_FILES) >> $@
|
||||||
|
|
||||||
|
$(SHUNIT2):
|
||||||
|
git submodule update --init vendor/shunit2
|
||||||
|
|
||||||
|
$(STUB_SH):
|
||||||
|
git submodule update --init vendor/stub.sh
|
||||||
|
|
||||||
|
.PHONY: clean
|
||||||
|
clean:
|
||||||
|
rm $(PLUGIN_TARGET)
|
||||||
|
|
||||||
|
.PHONY: test
|
||||||
|
test: all $(TEST_PREREQS)
|
||||||
|
script/test_runner.zsh $(TESTS)
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
# zsh-autosuggestions
|
||||||
|
|
||||||
|
_[Fish](http://fishshell.com/)-like fast/unobtrusive autosuggestions for zsh._
|
||||||
|
|
||||||
|
It suggests commands as you type, based on command history.
|
||||||
|
|
||||||
|
<a href="https://asciinema.org/a/37390" target="_blank"><img src="https://asciinema.org/a/37390.png" width="400" /></a>
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
### Manual
|
||||||
|
|
||||||
|
1. Clone this repository somewhere on your machine. This guide will assume `~/.zsh/zsh-autosuggestions`.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone git://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestions
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Add the following to your `.zshrc`:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start a new terminal session.
|
||||||
|
|
||||||
|
|
||||||
|
### Oh My Zsh
|
||||||
|
|
||||||
|
1. Clone this repository into `$ZSH_CUSTOM/plugins` (by default `~/.oh-my-zsh/custom/plugins`)
|
||||||
|
|
||||||
|
```sh
|
||||||
|
git clone git://github.com/zsh-users/zsh-autosuggestions $ZSH_CUSTOM/plugins/zsh-autosuggestions
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Add the plugin to the list of plugins for Oh My Zsh to load:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
plugins=(zsh-autosuggestions)
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Start a new terminal session.
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
As you type commands, you will see a completion offered after the cursor in a muted gray color. This color can be changed by setting the `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` variable. See [configuration](#configuration).
|
||||||
|
|
||||||
|
If you press the <kbd>→</kbd> key (`forward-char` widget) or <kbd>End</kbd> (`end-of-line` widget) with the cursor at the end of the buffer, it will accept the suggestion, replacing the contents of the command line buffer with the suggestion.
|
||||||
|
|
||||||
|
If you invoke the `forward-word` widget, it will partially accept the suggestion up to the point that the cursor moves to.
|
||||||
|
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
You may want to override the default global config variables after sourcing the plugin. Default values of these variables can be found [here](src/config.zsh).
|
||||||
|
|
||||||
|
**Note:** If you are using Oh My Zsh, you can put this configuration in a file in the `$ZSH_CUSTOM` directory. See their comments on [overriding internals](https://github.com/robbyrussell/oh-my-zsh/wiki/Customization#overriding-internals).
|
||||||
|
|
||||||
|
|
||||||
|
### Suggestion Highlight Style
|
||||||
|
|
||||||
|
Set `ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE` to configure the style that the suggestion is shown with. The default is `fg=8`.
|
||||||
|
|
||||||
|
|
||||||
|
### Suggestion Strategy
|
||||||
|
|
||||||
|
Set `ZSH_AUTOSUGGEST_STRATEGY` to choose the strategy for generating suggestions. There are currently two to choose from:
|
||||||
|
|
||||||
|
- `default`: Chooses the most recent match.
|
||||||
|
- `match_prev_cmd`: Chooses the most recent match whose preceding history item matches the most recently executed command ([more info](src/strategies/match_prev_cmd.zsh)). Note that this strategy won't work as expected with ZSH options that don't preserve the history order such as `HIST_IGNORE_ALL_DUPS` or `HIST_EXPIRE_DUPS_FIRST`.
|
||||||
|
|
||||||
|
|
||||||
|
### Widget Mapping
|
||||||
|
|
||||||
|
This plugin works by triggering custom behavior when certain [zle widgets](http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets) are invoked. You can add and remove widgets from these arrays to change the behavior of this plugin:
|
||||||
|
|
||||||
|
- `ZSH_AUTOSUGGEST_CLEAR_WIDGETS`: Widgets in this array will clear the suggestion when invoked.
|
||||||
|
- `ZSH_AUTOSUGGEST_ACCEPT_WIDGETS`: Widgets in this array will accept the suggestion when invoked.
|
||||||
|
- `ZSH_AUTOSUGGEST_EXECUTE_WIDGETS`: Widgets in this array will execute the suggestion when invoked.
|
||||||
|
- `ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS`: Widgets in this array will partially accept the suggestion when invoked.
|
||||||
|
- `ZSH_AUTOSUGGEST_IGNORE_WIDGETS`: Widgets in this array will not trigger any custom behavior.
|
||||||
|
|
||||||
|
Widgets that modify the buffer and are not found in any of these arrays will fetch a new suggestion after they are invoked.
|
||||||
|
|
||||||
|
**Note:** A widget shouldn't belong to more than one of the above arrays.
|
||||||
|
|
||||||
|
|
||||||
|
### Disabling suggestion for large buffers
|
||||||
|
|
||||||
|
Set `ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE` to an integer value to disable autosuggestion for large buffers. The default is unset, which means that autosuggestion will be tried for any buffer size. Recommended value is 20.
|
||||||
|
This can be useful when pasting large amount of text in the terminal, to avoid triggering autosuggestion for too long strings.
|
||||||
|
|
||||||
|
|
||||||
|
### Key Bindings
|
||||||
|
|
||||||
|
This plugin provides three widgets that you can use with `bindkey`:
|
||||||
|
|
||||||
|
1. `autosuggest-accept`: Accepts the current suggestion.
|
||||||
|
2. `autosuggest-execute`: Accepts and executes the current suggestion.
|
||||||
|
3. `autosuggest-clear`: Clears the current suggestion.
|
||||||
|
|
||||||
|
For example, this would bind <kbd>ctrl</kbd> + <kbd>space</kbd> to accept the current suggestion.
|
||||||
|
|
||||||
|
```sh
|
||||||
|
bindkey '^ ' autosuggest-accept
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
If you have a problem, please search through [the list of issues on GitHub](https://github.com/zsh-users/zsh-autosuggestions/issues) to see if someone else has already reported it.
|
||||||
|
|
||||||
|
|
||||||
|
### Reporting an Issue
|
||||||
|
|
||||||
|
Before reporting an issue, please try temporarily disabling sections of your configuration and other plugins that may be conflicting with this plugin to isolate the problem.
|
||||||
|
|
||||||
|
When reporting an issue, please include:
|
||||||
|
|
||||||
|
- The smallest, simplest `.zshrc` configuration that will reproduce the problem. See [this comment](https://github.com/zsh-users/zsh-autosuggestions/issues/102#issuecomment-180944764) for a good example of what this means.
|
||||||
|
- The version of zsh you're using (`zsh --version`)
|
||||||
|
- Which operating system you're running
|
||||||
|
|
||||||
|
|
||||||
|
## Uninstallation
|
||||||
|
|
||||||
|
1. Remove the code referencing this plugin from `~/.zshrc`.
|
||||||
|
|
||||||
|
2. Remove the git repository from your hard drive
|
||||||
|
|
||||||
|
```sh
|
||||||
|
rm -rf ~/.zsh/zsh-autosuggestions # Or wherever you installed
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Development
|
||||||
|
|
||||||
|
### Build Process
|
||||||
|
|
||||||
|
Edit the source files in `src/`. Run `make` to build `zsh-autosuggestions.zsh` from those source files.
|
||||||
|
|
||||||
|
|
||||||
|
### Pull Requests
|
||||||
|
|
||||||
|
Pull requests are welcome! If you send a pull request, please:
|
||||||
|
|
||||||
|
- Request to merge into the `develop` branch (*NOT* `master`)
|
||||||
|
- Match the existing coding conventions.
|
||||||
|
- Include helpful comments to keep the barrier-to-entry low for people new to the project.
|
||||||
|
- Write tests that cover your code as much as possible.
|
||||||
|
|
||||||
|
|
||||||
|
### Testing
|
||||||
|
|
||||||
|
Testing is performed with [`shunit2`](https://github.com/kward/shunit2) (v2.1.6). Documentation can be found [here](http://shunit2.googlecode.com/svn/trunk/source/2.1/doc/shunit2.html).
|
||||||
|
|
||||||
|
The test script lives at `script/test_runner.zsh`. To run the tests, run `make test`.
|
||||||
|
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under [MIT license](http://opensource.org/licenses/MIT).
|
||||||
|
For the full text of the license, see the [LICENSE](LICENSE) file.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
https://github.com/zsh-users/zsh-autosuggestions
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
v0.3.3
|
||||||
+54
@@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
DIR="${0:a:h}"
|
||||||
|
ROOT_DIR="$DIR/.."
|
||||||
|
TEST_DIR="$ROOT_DIR/test"
|
||||||
|
|
||||||
|
header() {
|
||||||
|
local message="$1"
|
||||||
|
|
||||||
|
cat <<-EOF
|
||||||
|
|
||||||
|
#====================================================================#
|
||||||
|
# $message
|
||||||
|
#====================================================================#
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
# ZSH binary to use
|
||||||
|
local zsh_bin="zsh"
|
||||||
|
|
||||||
|
while getopts ":z:" opt; do
|
||||||
|
case $opt in
|
||||||
|
z)
|
||||||
|
zsh_bin="$OPTARG"
|
||||||
|
;;
|
||||||
|
\?)
|
||||||
|
echo "Invalid option: -$OPTARG" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
:)
|
||||||
|
echo "Option -$OPTARG requires an argument" >&2
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
shift $((OPTIND -1))
|
||||||
|
|
||||||
|
# Test suites to run
|
||||||
|
local -a tests
|
||||||
|
if [ $#@ -gt 0 ]; then
|
||||||
|
tests=($@)
|
||||||
|
else
|
||||||
|
tests=($TEST_DIR/**/*_test.zsh)
|
||||||
|
fi
|
||||||
|
|
||||||
|
local -i retval=0
|
||||||
|
|
||||||
|
for suite in $tests; do
|
||||||
|
header "${suite#"$ROOT_DIR/"}"
|
||||||
|
"$zsh_bin" -f "$suite" || retval=$?
|
||||||
|
done
|
||||||
|
|
||||||
|
exit $retval
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Widget Helpers #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Bind a single widget to an autosuggest widget, saving a reference to the original widget
|
||||||
|
_zsh_autosuggest_bind_widget() {
|
||||||
|
local widget=$1
|
||||||
|
local autosuggest_action=$2
|
||||||
|
local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX
|
||||||
|
|
||||||
|
# Save a reference to the original widget
|
||||||
|
case $widgets[$widget] in
|
||||||
|
# Already bound
|
||||||
|
user:_zsh_autosuggest_(bound|orig)_*);;
|
||||||
|
|
||||||
|
# User-defined widget
|
||||||
|
user:*)
|
||||||
|
zle -N $prefix$widget ${widgets[$widget]#*:}
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Built-in widget
|
||||||
|
builtin)
|
||||||
|
eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }"
|
||||||
|
zle -N $prefix$widget _zsh_autosuggest_orig_$widget
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Completion widget
|
||||||
|
completion:*)
|
||||||
|
eval "zle -C $prefix${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Pass the original widget's name explicitly into the autosuggest
|
||||||
|
# function. Use this passed in widget name to call the original
|
||||||
|
# widget instead of relying on the $WIDGET variable being set
|
||||||
|
# correctly. $WIDGET cannot be trusted because other plugins call
|
||||||
|
# zle without the `-w` flag (e.g. `zle self-insert` instead of
|
||||||
|
# `zle self-insert -w`).
|
||||||
|
eval "_zsh_autosuggest_bound_${(q)widget}() {
|
||||||
|
_zsh_autosuggest_widget_$autosuggest_action $prefix${(q)widget} \$@
|
||||||
|
}"
|
||||||
|
|
||||||
|
# Create the bound widget
|
||||||
|
zle -N $widget _zsh_autosuggest_bound_$widget
|
||||||
|
}
|
||||||
|
|
||||||
|
# Map all configured widgets to the right autosuggest widgets
|
||||||
|
_zsh_autosuggest_bind_widgets() {
|
||||||
|
local widget
|
||||||
|
local ignore_widgets
|
||||||
|
|
||||||
|
ignore_widgets=(
|
||||||
|
.\*
|
||||||
|
_\*
|
||||||
|
zle-line-\*
|
||||||
|
autosuggest-\*
|
||||||
|
$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\*
|
||||||
|
$ZSH_AUTOSUGGEST_IGNORE_WIDGETS
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find every widget we might want to bind and bind it appropriately
|
||||||
|
for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do
|
||||||
|
if [ ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget clear
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget accept
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget execute
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget partial_accept
|
||||||
|
else
|
||||||
|
# Assume any unspecified widget might modify the buffer
|
||||||
|
_zsh_autosuggest_bind_widget $widget modify
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Given the name of an original widget and args, invoke it, if it exists
|
||||||
|
_zsh_autosuggest_invoke_original_widget() {
|
||||||
|
# Do nothing unless called with at least one arg
|
||||||
|
[ $# -gt 0 ] || return
|
||||||
|
|
||||||
|
local original_widget_name="$1"
|
||||||
|
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ $widgets[$original_widget_name] ]; then
|
||||||
|
zle $original_widget_name -- $@
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Global Configuration Variables #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Color to use when highlighting suggestion
|
||||||
|
# Uses format of `region_highlight`
|
||||||
|
# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets
|
||||||
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
|
||||||
|
|
||||||
|
# Prefix to use when saving original versions of bound widgets
|
||||||
|
ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
|
||||||
|
|
||||||
|
ZSH_AUTOSUGGEST_STRATEGY=default
|
||||||
|
|
||||||
|
# Widgets that clear the suggestion
|
||||||
|
ZSH_AUTOSUGGEST_CLEAR_WIDGETS=(
|
||||||
|
history-search-forward
|
||||||
|
history-search-backward
|
||||||
|
history-beginning-search-forward
|
||||||
|
history-beginning-search-backward
|
||||||
|
history-substring-search-up
|
||||||
|
history-substring-search-down
|
||||||
|
up-line-or-history
|
||||||
|
down-line-or-history
|
||||||
|
accept-line
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the entire suggestion
|
||||||
|
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(
|
||||||
|
forward-char
|
||||||
|
end-of-line
|
||||||
|
vi-forward-char
|
||||||
|
vi-end-of-line
|
||||||
|
vi-add-eol
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the entire suggestion and execute it
|
||||||
|
ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=(
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the suggestion as far as the cursor moves
|
||||||
|
ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(
|
||||||
|
forward-word
|
||||||
|
vi-forward-word
|
||||||
|
vi-forward-word-end
|
||||||
|
vi-forward-blank-word
|
||||||
|
vi-forward-blank-word-end
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that should be ignored (globbing supported but must be escaped)
|
||||||
|
ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(
|
||||||
|
orig-\*
|
||||||
|
beep
|
||||||
|
run-help
|
||||||
|
set-local-history
|
||||||
|
which-command
|
||||||
|
yank
|
||||||
|
)
|
||||||
|
|
||||||
|
# Max size of buffer to trigger autosuggestion. Leave undefined for no upper bound.
|
||||||
|
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Handle Deprecated Variables/Widgets #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
_zsh_autosuggest_deprecated_warning() {
|
||||||
|
>&2 echo "zsh-autosuggestions: $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_check_deprecated_config() {
|
||||||
|
if [ -n "$AUTOSUGGESTION_HIGHLIGHT_COLOR" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_HIGHLIGHT_COLOR is deprecated. Use ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE instead."
|
||||||
|
[ -z "$ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" ] && ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=$AUTOSUGGESTION_HIGHLIGHT_STYLE
|
||||||
|
unset AUTOSUGGESTION_HIGHLIGHT_STYLE
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$AUTOSUGGESTION_HIGHLIGHT_CURSOR" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_HIGHLIGHT_CURSOR is deprecated."
|
||||||
|
unset AUTOSUGGESTION_HIGHLIGHT_CURSOR
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$AUTOSUGGESTION_ACCEPT_RIGHT_ARROW" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_ACCEPT_RIGHT_ARROW is deprecated. The right arrow now accepts the suggestion by default."
|
||||||
|
unset AUTOSUGGESTION_ACCEPT_RIGHT_ARROW
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_deprecated_start_widget() {
|
||||||
|
_zsh_autosuggest_deprecated_warning "The autosuggest-start widget is deprecated. For more info, see the README at https://github.com/zsh-users/zsh-autosuggestions."
|
||||||
|
zle -D autosuggest-start
|
||||||
|
eval "zle-line-init() {
|
||||||
|
$(echo $functions[${widgets[zle-line-init]#*:}] | sed -e 's/zle autosuggest-start//g')
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
|
zle -N autosuggest-start _zsh_autosuggest_deprecated_start_widget
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Highlighting #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# If there was a highlight, remove it
|
||||||
|
_zsh_autosuggest_highlight_reset() {
|
||||||
|
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
|
||||||
|
if [ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]; then
|
||||||
|
region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
|
||||||
|
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# If there's a suggestion, highlight it
|
||||||
|
_zsh_autosuggest_highlight_apply() {
|
||||||
|
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
|
||||||
|
if [ $#POSTDISPLAY -gt 0 ]; then
|
||||||
|
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||||
|
region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
|
||||||
|
else
|
||||||
|
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
fi
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Start #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Start the autosuggestion widgets
|
||||||
|
_zsh_autosuggest_start() {
|
||||||
|
_zsh_autosuggest_check_deprecated_config
|
||||||
|
_zsh_autosuggest_bind_widgets
|
||||||
|
}
|
||||||
|
|
||||||
|
autoload -Uz add-zsh-hook
|
||||||
|
add-zsh-hook precmd _zsh_autosuggest_start
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Default Suggestion Strategy #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggests the most recent history item that matches the given
|
||||||
|
# prefix.
|
||||||
|
#
|
||||||
|
|
||||||
|
_zsh_autosuggest_strategy_default() {
|
||||||
|
fc -lnrm "$1*" 1 2>/dev/null | head -n 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Match Previous Command Suggestion Strategy #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggests the most recent history item that matches the given
|
||||||
|
# prefix and whose preceding history item also matches the most
|
||||||
|
# recently executed command.
|
||||||
|
#
|
||||||
|
# For example, suppose your history has the following entries:
|
||||||
|
# - pwd
|
||||||
|
# - ls foo
|
||||||
|
# - ls bar
|
||||||
|
# - pwd
|
||||||
|
#
|
||||||
|
# Given the history list above, when you type 'ls', the suggestion
|
||||||
|
# will be 'ls foo' rather than 'ls bar' because your most recently
|
||||||
|
# executed command (pwd) was previously followed by 'ls foo'.
|
||||||
|
#
|
||||||
|
# Note that this strategy won't work as expected with ZSH options that don't
|
||||||
|
# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or
|
||||||
|
# `HIST_EXPIRE_DUPS_FIRST`.
|
||||||
|
|
||||||
|
_zsh_autosuggest_strategy_match_prev_cmd() {
|
||||||
|
local prefix="$1"
|
||||||
|
|
||||||
|
# Get all history event numbers that correspond to history
|
||||||
|
# entries that match pattern $prefix*
|
||||||
|
local history_match_keys
|
||||||
|
history_match_keys=(${(k)history[(R)$prefix*]})
|
||||||
|
|
||||||
|
# By default we use the first history number (most recent history entry)
|
||||||
|
local histkey="${history_match_keys[1]}"
|
||||||
|
|
||||||
|
# Get the previously executed command
|
||||||
|
local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")"
|
||||||
|
|
||||||
|
# Iterate up to the first 200 history event numbers that match $prefix
|
||||||
|
for key in "${(@)history_match_keys[1,200]}"; do
|
||||||
|
# Stop if we ran out of history
|
||||||
|
[[ $key -gt 1 ]] || break
|
||||||
|
|
||||||
|
# See if the history entry preceding the suggestion matches the
|
||||||
|
# previous command, and use it if it does
|
||||||
|
if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then
|
||||||
|
histkey="$key"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Echo the matched history entry
|
||||||
|
echo -E "$history[$histkey]"
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggestion #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Delegate to the selected strategy to determine a suggestion
|
||||||
|
_zsh_autosuggest_suggestion() {
|
||||||
|
local escaped_prefix="$(_zsh_autosuggest_escape_command "$1")"
|
||||||
|
local strategy_function="_zsh_autosuggest_strategy_$ZSH_AUTOSUGGEST_STRATEGY"
|
||||||
|
|
||||||
|
if [ -n "$functions[$strategy_function]" ]; then
|
||||||
|
echo -E "$($strategy_function "$escaped_prefix")"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_escape_command() {
|
||||||
|
setopt localoptions EXTENDED_GLOB
|
||||||
|
|
||||||
|
# Escape special chars in the string (requires EXTENDED_GLOB)
|
||||||
|
echo -E "${1//(#m)[\\()\[\]|*?~]/\\$MATCH}"
|
||||||
|
}
|
||||||
@@ -0,0 +1,135 @@
|
|||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Autosuggest Widget Implementations #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Clear the suggestion
|
||||||
|
_zsh_autosuggest_clear() {
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
}
|
||||||
|
|
||||||
|
# Modify the buffer and get a new suggestion
|
||||||
|
_zsh_autosuggest_modify() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
# Save the contents of the buffer/postdisplay
|
||||||
|
local orig_buffer="$BUFFER"
|
||||||
|
local orig_postdisplay="$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Clear suggestion while original widget runs
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Original widget may modify the buffer
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
retval=$?
|
||||||
|
|
||||||
|
# Don't fetch a new suggestion if the buffer hasn't changed
|
||||||
|
if [ "$BUFFER" = "$orig_buffer" ]; then
|
||||||
|
POSTDISPLAY="$orig_postdisplay"
|
||||||
|
return $retval
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get a new suggestion if the buffer is not empty after modification
|
||||||
|
local suggestion
|
||||||
|
if [ $#BUFFER -gt 0 ]; then
|
||||||
|
if [ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" -o $#BUFFER -lt "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]; then
|
||||||
|
suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the suggestion to the POSTDISPLAY
|
||||||
|
if [ -n "$suggestion" ]; then
|
||||||
|
POSTDISPLAY="${suggestion#$BUFFER}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $retval
|
||||||
|
}
|
||||||
|
|
||||||
|
# Accept the entire suggestion
|
||||||
|
_zsh_autosuggest_accept() {
|
||||||
|
local -i max_cursor_pos=$#BUFFER
|
||||||
|
|
||||||
|
# When vicmd keymap is active, the cursor can't move all the way
|
||||||
|
# to the end of the buffer
|
||||||
|
if [ "$KEYMAP" = "vicmd" ]; then
|
||||||
|
max_cursor_pos=$((max_cursor_pos - 1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only accept if the cursor is at the end of the buffer
|
||||||
|
if [ $CURSOR -eq $max_cursor_pos ]; then
|
||||||
|
# Add the suggestion to the buffer
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Move the cursor to the end of the buffer
|
||||||
|
CURSOR=${#BUFFER}
|
||||||
|
fi
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
}
|
||||||
|
|
||||||
|
# Accept the entire suggestion and execute it
|
||||||
|
_zsh_autosuggest_execute() {
|
||||||
|
# Add the suggestion to the buffer
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Call the original `accept-line` to handle syntax highlighting or
|
||||||
|
# other potential custom behavior
|
||||||
|
_zsh_autosuggest_invoke_original_widget "accept-line"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Partially accept the suggestion
|
||||||
|
_zsh_autosuggest_partial_accept() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
# Save the contents of the buffer so we can restore later if needed
|
||||||
|
local original_buffer="$BUFFER"
|
||||||
|
|
||||||
|
# Temporarily accept the suggestion.
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Original widget moves the cursor
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
retval=$?
|
||||||
|
|
||||||
|
# If we've moved past the end of the original buffer
|
||||||
|
if [ $CURSOR -gt $#original_buffer ]; then
|
||||||
|
# Set POSTDISPLAY to text right of the cursor
|
||||||
|
POSTDISPLAY="$RBUFFER"
|
||||||
|
|
||||||
|
# Clip the buffer at the cursor
|
||||||
|
BUFFER="$LBUFFER"
|
||||||
|
else
|
||||||
|
# Restore the original buffer
|
||||||
|
BUFFER="$original_buffer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $retval
|
||||||
|
}
|
||||||
|
|
||||||
|
for action in clear modify accept partial_accept execute; do
|
||||||
|
eval "_zsh_autosuggest_widget_$action() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_reset
|
||||||
|
|
||||||
|
_zsh_autosuggest_$action \$@
|
||||||
|
retval=\$?
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
return \$retval
|
||||||
|
}"
|
||||||
|
done
|
||||||
|
|
||||||
|
zle -N autosuggest-accept _zsh_autosuggest_widget_accept
|
||||||
|
zle -N autosuggest-clear _zsh_autosuggest_widget_clear
|
||||||
|
zle -N autosuggest-execute _zsh_autosuggest_widget_execute
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
testInvokeOriginalWidgetDefined() {
|
||||||
|
stub_and_eval \
|
||||||
|
zle \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget 'self-insert'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'zle was not invoked' \
|
||||||
|
'stub_called zle'
|
||||||
|
|
||||||
|
restore zle
|
||||||
|
}
|
||||||
|
|
||||||
|
testInvokeOriginalWidgetUndefined() {
|
||||||
|
stub_and_eval \
|
||||||
|
zle \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget 'some-undefined-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'0' \
|
||||||
|
"$?"
|
||||||
|
|
||||||
|
assertFalse \
|
||||||
|
'zle was invoked' \
|
||||||
|
'stub_called zle'
|
||||||
|
|
||||||
|
restore zle
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
testHighlightDefaultStyle() {
|
||||||
|
assertEquals \
|
||||||
|
'fg=8' \
|
||||||
|
"$ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||||
|
}
|
||||||
|
|
||||||
|
testHighlightApplyWithSuggestion() {
|
||||||
|
local orig_style=ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE
|
||||||
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=4'
|
||||||
|
|
||||||
|
BUFFER='ec'
|
||||||
|
POSTDISPLAY='ho hello'
|
||||||
|
region_highlight=('0 2 fg=1')
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'highlight did not use correct style' \
|
||||||
|
"0 2 fg=1 2 10 $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" \
|
||||||
|
"$region_highlight"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'higlight was not saved to be removed later' \
|
||||||
|
"2 10 $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" \
|
||||||
|
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||||
|
|
||||||
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=orig_style
|
||||||
|
}
|
||||||
|
|
||||||
|
testHighlightApplyWithoutSuggestion() {
|
||||||
|
BUFFER='echo hello'
|
||||||
|
POSTDISPLAY=''
|
||||||
|
region_highlight=('0 4 fg=1')
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'region_highlight was modified' \
|
||||||
|
'0 4 fg=1' \
|
||||||
|
"$region_highlight"
|
||||||
|
|
||||||
|
assertNull \
|
||||||
|
'last highlight region was not cleared' \
|
||||||
|
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||||
|
}
|
||||||
|
|
||||||
|
testHighlightReset() {
|
||||||
|
BUFFER='ec'
|
||||||
|
POSTDISPLAY='ho hello'
|
||||||
|
region_highlight=('0 1 fg=1' '2 10 fg=8' '1 2 fg=1')
|
||||||
|
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT='2 10 fg=8'
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_reset
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'last highlight region was not removed' \
|
||||||
|
'0 1 fg=1 1 2 fg=1' \
|
||||||
|
"$region_highlight"
|
||||||
|
|
||||||
|
assertNull \
|
||||||
|
'last highlight variable was not cleared' \
|
||||||
|
"$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
testNoMatch() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
ls bar
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'foo' \
|
||||||
|
''
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls q' \
|
||||||
|
''
|
||||||
|
}
|
||||||
|
|
||||||
|
testBasicMatches() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
ls bar
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls f' \
|
||||||
|
'ls foo'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls b' \
|
||||||
|
'ls bar'
|
||||||
|
}
|
||||||
|
|
||||||
|
testMostRecentMatch() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
cd bar
|
||||||
|
ls baz
|
||||||
|
cd quux
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls' \
|
||||||
|
'ls baz'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'cd' \
|
||||||
|
'cd quux'
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
|
||||||
|
ZSH_AUTOSUGGEST_STRATEGY=match_prev_cmd
|
||||||
|
}
|
||||||
|
|
||||||
|
testNoMatch() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
ls bar
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'foo' \
|
||||||
|
''
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls q' \
|
||||||
|
''
|
||||||
|
}
|
||||||
|
|
||||||
|
testBasicMatches() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
ls bar
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls f' \
|
||||||
|
'ls foo'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls b' \
|
||||||
|
'ls bar'
|
||||||
|
}
|
||||||
|
|
||||||
|
testMostRecentMatch() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
ls foo
|
||||||
|
cd bar
|
||||||
|
ls baz
|
||||||
|
cd quux
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls' \
|
||||||
|
'ls baz'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'cd' \
|
||||||
|
'cd quux'
|
||||||
|
}
|
||||||
|
|
||||||
|
testMatchMostRecentAfterPreviousCmd() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo what
|
||||||
|
ls foo
|
||||||
|
ls bar
|
||||||
|
echo what
|
||||||
|
ls baz
|
||||||
|
ls quux
|
||||||
|
echo what
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'ls' \
|
||||||
|
'ls baz'
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,102 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
assertBackslashSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo "hello\nworld"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'echo "hello\' \
|
||||||
|
'echo "hello\nworld"'
|
||||||
|
}
|
||||||
|
|
||||||
|
assertDoubleBackslashSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo "\\"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'echo "\\' \
|
||||||
|
'echo "\\"'
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTildeSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
cd ~/something
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'cd' \
|
||||||
|
'cd ~/something'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'cd ~' \
|
||||||
|
'cd ~/something'
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'cd ~/s' \
|
||||||
|
'cd ~/something'
|
||||||
|
}
|
||||||
|
|
||||||
|
assertTildeSuggestionWithExtendedGlob() {
|
||||||
|
setopt local_options extended_glob
|
||||||
|
|
||||||
|
assertTildeSuggestion
|
||||||
|
}
|
||||||
|
|
||||||
|
assertParenthesesSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo "$(ls foo)"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'echo "$(' \
|
||||||
|
'echo "$(ls foo)"'
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSquareBracketsSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo "$history[123]"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'echo "$history[' \
|
||||||
|
'echo "$history[123]"'
|
||||||
|
}
|
||||||
|
|
||||||
|
assertHashSuggestion() {
|
||||||
|
set_history <<-'EOF'
|
||||||
|
echo "#yolo"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
assertSuggestion \
|
||||||
|
'echo "#' \
|
||||||
|
'echo "#yolo"'
|
||||||
|
}
|
||||||
|
|
||||||
|
testSpecialCharsForAllStrategies() {
|
||||||
|
local strategies
|
||||||
|
strategies=(
|
||||||
|
"default"
|
||||||
|
"match_prev_cmd"
|
||||||
|
)
|
||||||
|
|
||||||
|
for s in $strategies; do
|
||||||
|
ZSH_AUTOSUGGEST_STRATEGY="$s"
|
||||||
|
|
||||||
|
assertBackslashSuggestion
|
||||||
|
assertDoubleBackslashSuggestion
|
||||||
|
assertTildeSuggestion
|
||||||
|
assertTildeSuggestionWithExtendedGlob
|
||||||
|
assertParenthesesSuggestion
|
||||||
|
assertSquareBracketsSuggestion
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
testEscapeCommand() {
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape single backslash' \
|
||||||
|
'\\' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '\')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape two backslashes' \
|
||||||
|
'\\\\' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '\\')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape parentheses' \
|
||||||
|
'\(\)' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '()')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape square brackets' \
|
||||||
|
'\[\]' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '[]')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape pipe' \
|
||||||
|
'\|' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '|')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape star' \
|
||||||
|
'\*' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '*')"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not escape question mark' \
|
||||||
|
'\?' \
|
||||||
|
"$(_zsh_autosuggest_escape_command '?')"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
DIR="${0:a:h}"
|
||||||
|
ROOT_DIR="$DIR/.."
|
||||||
|
VENDOR_DIR="$ROOT_DIR/vendor"
|
||||||
|
|
||||||
|
# Use stub.sh for stubbing/mocking
|
||||||
|
source "$VENDOR_DIR/stub.sh/stub.sh"
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Helper Functions #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Source the autosuggestions plugin file
|
||||||
|
source_autosuggestions() {
|
||||||
|
source "$ROOT_DIR/zsh-autosuggestions.zsh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Set history list from stdin
|
||||||
|
set_history() {
|
||||||
|
# Make a tmp file in shunit's tmp dir
|
||||||
|
local tmp=$(mktemp "$SHUNIT_TMPDIR/hist.XXX")
|
||||||
|
|
||||||
|
# Write from stdin to the tmp file
|
||||||
|
> "$tmp"
|
||||||
|
|
||||||
|
# Write an extra line to simulate history active mode
|
||||||
|
# See https://github.com/zsh-users/zsh/blob/ca3bc0d95d7deab4f5381f12b15047de748c0814/Src/hist.c#L69-L82
|
||||||
|
echo >> "$tmp"
|
||||||
|
|
||||||
|
# Clear history and re-read from the tmp file
|
||||||
|
fc -P; fc -p; fc -R "$tmp"
|
||||||
|
|
||||||
|
rm "$tmp"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Should be called at the bottom of every test suite file
|
||||||
|
# Pass in the name of the test script ($0) for shunit
|
||||||
|
run_tests() {
|
||||||
|
local test_script="$1"
|
||||||
|
shift
|
||||||
|
|
||||||
|
# Required for shunit to work with zsh
|
||||||
|
setopt localoptions shwordsplit
|
||||||
|
SHUNIT_PARENT="$test_script"
|
||||||
|
|
||||||
|
source "$VENDOR_DIR/shunit2/2.1.6/src/shunit2"
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Custom Assertions #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
assertSuggestion() {
|
||||||
|
local prefix="$1"
|
||||||
|
local expected_suggestion="$2"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
"Did not get correct suggestion for prefix:<$prefix> using strategy <$ZSH_AUTOSUGGEST_STRATEGY>" \
|
||||||
|
"$expected_suggestion" \
|
||||||
|
"$(_zsh_autosuggest_suggestion "$prefix")"
|
||||||
|
}
|
||||||
@@ -0,0 +1,161 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
setUp() {
|
||||||
|
BUFFER=''
|
||||||
|
POSTDISPLAY=''
|
||||||
|
CURSOR=0
|
||||||
|
KEYMAP='main'
|
||||||
|
}
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
restore _zsh_autosuggest_invoke_original_widget
|
||||||
|
}
|
||||||
|
|
||||||
|
testCursorAtEnd() {
|
||||||
|
BUFFER='echo'
|
||||||
|
POSTDISPLAY=' hello'
|
||||||
|
CURSOR=4
|
||||||
|
|
||||||
|
stub _zsh_autosuggest_invoke_original_widget
|
||||||
|
|
||||||
|
_zsh_autosuggest_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was not modified' \
|
||||||
|
'echo hello' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was not cleared' \
|
||||||
|
'' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testCursorNotAtEnd() {
|
||||||
|
BUFFER='echo'
|
||||||
|
POSTDISPLAY=' hello'
|
||||||
|
CURSOR=2
|
||||||
|
|
||||||
|
stub _zsh_autosuggest_invoke_original_widget
|
||||||
|
|
||||||
|
_zsh_autosuggest_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was modified' \
|
||||||
|
'echo' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was modified' \
|
||||||
|
' hello' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testViCursorAtEnd() {
|
||||||
|
BUFFER='echo'
|
||||||
|
POSTDISPLAY=' hello'
|
||||||
|
CURSOR=3
|
||||||
|
KEYMAP='vicmd'
|
||||||
|
|
||||||
|
stub _zsh_autosuggest_invoke_original_widget
|
||||||
|
|
||||||
|
_zsh_autosuggest_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was not modified' \
|
||||||
|
'echo hello' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was not cleared' \
|
||||||
|
'' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testViCursorNotAtEnd() {
|
||||||
|
BUFFER='echo'
|
||||||
|
POSTDISPLAY=' hello'
|
||||||
|
CURSOR=2
|
||||||
|
KEYMAP='vicmd'
|
||||||
|
|
||||||
|
stub _zsh_autosuggest_invoke_original_widget
|
||||||
|
|
||||||
|
_zsh_autosuggest_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was modified' \
|
||||||
|
'echo' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was modified' \
|
||||||
|
' hello' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testRetval() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_widget_accept 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not return correct value from original widget' \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWidget() {
|
||||||
|
stub _zsh_autosuggest_highlight_reset
|
||||||
|
stub _zsh_autosuggest_accept
|
||||||
|
stub _zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
# Call the function pointed to by the widget since we can't call
|
||||||
|
# the widget itself when zle is not active
|
||||||
|
${widgets[autosuggest-accept]#*:} 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'autosuggest-accept widget does not exist' \
|
||||||
|
'zle -l autosuggest-accept'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'highlight_reset was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_highlight_reset'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'widget function was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_accept'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'highlight_apply was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_highlight_apply'
|
||||||
|
|
||||||
|
restore _zsh_autosuggest_highlight_reset
|
||||||
|
restore _zsh_autosuggest_accept
|
||||||
|
restore _zsh_autosuggest_highlight_apply
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
setUp() {
|
||||||
|
BUFFER=''
|
||||||
|
POSTDISPLAY=''
|
||||||
|
}
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
restore _zsh_autosuggest_invoke_original_widget
|
||||||
|
}
|
||||||
|
|
||||||
|
testClear() {
|
||||||
|
BUFFER='ec'
|
||||||
|
POSTDISPLAY='ho hello'
|
||||||
|
|
||||||
|
_zsh_autosuggest_clear 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was modified' \
|
||||||
|
'ec' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertNull \
|
||||||
|
'POSTDISPLAY was not cleared' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testRetval() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_widget_clear 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not return correct value from original widget' \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
testWidget() {
|
||||||
|
stub _zsh_autosuggest_highlight_reset
|
||||||
|
stub _zsh_autosuggest_clear
|
||||||
|
stub _zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
# Call the function pointed to by the widget since we can't call
|
||||||
|
# the widget itself when zle is not active
|
||||||
|
${widgets[autosuggest-clear]#*:} 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'autosuggest-clear widget does not exist' \
|
||||||
|
'zle -l autosuggest-clear'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'highlight_reset was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_highlight_reset'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'widget function was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_clear'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'highlight_apply was not called' \
|
||||||
|
'stub_called _zsh_autosuggest_highlight_apply'
|
||||||
|
|
||||||
|
restore _zsh_autosuggest_highlight_reset
|
||||||
|
restore _zsh_autosuggest_clear
|
||||||
|
restore _zsh_autosuggest_highlight_apply
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
restore _zsh_autosuggest_invoke_original_widget
|
||||||
|
}
|
||||||
|
|
||||||
|
testRetval() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_widget_execute 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not return correct value from original widget' \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
setUp() {
|
||||||
|
BUFFER=''
|
||||||
|
POSTDISPLAY=''
|
||||||
|
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=''
|
||||||
|
}
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
restore _zsh_autosuggest_invoke_original_widget
|
||||||
|
restore _zsh_autosuggest_suggestion
|
||||||
|
}
|
||||||
|
|
||||||
|
testModify() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'BUFFER+="e"'
|
||||||
|
|
||||||
|
stub_and_echo \
|
||||||
|
_zsh_autosuggest_suggestion \
|
||||||
|
'echo hello'
|
||||||
|
|
||||||
|
_zsh_autosuggest_modify 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was not modified' \
|
||||||
|
'e' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY does not contain suggestion' \
|
||||||
|
'cho hello' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testModifyBufferTooLarge() {
|
||||||
|
|
||||||
|
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE='20'
|
||||||
|
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'BUFFER+="012345678901234567890"'
|
||||||
|
|
||||||
|
stub_and_echo \
|
||||||
|
_zsh_autosuggest_suggestion \
|
||||||
|
'012345678901234567890123456789'
|
||||||
|
|
||||||
|
_zsh_autosuggest_modify 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was not modified' \
|
||||||
|
'012345678901234567890' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY does not contain suggestion' \
|
||||||
|
'' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testRetval() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_widget_modify 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not return correct value from original widget' \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1,84 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
|
||||||
|
source "${0:a:h}/../test_helper.zsh"
|
||||||
|
|
||||||
|
oneTimeSetUp() {
|
||||||
|
source_autosuggestions
|
||||||
|
}
|
||||||
|
|
||||||
|
setUp() {
|
||||||
|
BUFFER=''
|
||||||
|
POSTDISPLAY=''
|
||||||
|
CURSOR=0
|
||||||
|
}
|
||||||
|
|
||||||
|
tearDown() {
|
||||||
|
restore _zsh_autosuggest_invoke_original_widget
|
||||||
|
}
|
||||||
|
|
||||||
|
testCursorMovesOutOfBuffer() {
|
||||||
|
BUFFER='ec'
|
||||||
|
POSTDISPLAY='ho hello'
|
||||||
|
CURSOR=1
|
||||||
|
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||||
|
|
||||||
|
_zsh_autosuggest_partial_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was not modified correctly' \
|
||||||
|
'echo ' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was not modified correctly' \
|
||||||
|
'hello' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testCursorStaysInBuffer() {
|
||||||
|
BUFFER='echo hello'
|
||||||
|
POSTDISPLAY=' world'
|
||||||
|
CURSOR=1
|
||||||
|
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'CURSOR=5; LBUFFER="echo "; RBUFFER="hello"'
|
||||||
|
|
||||||
|
_zsh_autosuggest_partial_accept 'original-widget'
|
||||||
|
|
||||||
|
assertTrue \
|
||||||
|
'original widget not invoked' \
|
||||||
|
'stub_called _zsh_autosuggest_invoke_original_widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'BUFFER was modified' \
|
||||||
|
'echo hello' \
|
||||||
|
"$BUFFER"
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'POSTDISPLAY was modified' \
|
||||||
|
' world' \
|
||||||
|
"$POSTDISPLAY"
|
||||||
|
}
|
||||||
|
|
||||||
|
testRetval() {
|
||||||
|
stub_and_eval \
|
||||||
|
_zsh_autosuggest_invoke_original_widget \
|
||||||
|
'return 1'
|
||||||
|
|
||||||
|
_zsh_autosuggest_widget_partial_accept 'original-widget'
|
||||||
|
|
||||||
|
assertEquals \
|
||||||
|
'Did not return correct value from original widget' \
|
||||||
|
'1' \
|
||||||
|
"$?"
|
||||||
|
}
|
||||||
|
|
||||||
|
run_tests "$0"
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
source ${0:A:h}/zsh-autosuggestions.zsh
|
||||||
@@ -0,0 +1,473 @@
|
|||||||
|
# Fish-like fast/unobtrusive autosuggestions for zsh.
|
||||||
|
# https://github.com/zsh-users/zsh-autosuggestions
|
||||||
|
# v0.3.3
|
||||||
|
# Copyright (c) 2013 Thiago de Arruda
|
||||||
|
# Copyright (c) 2016 Eric Freese
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person
|
||||||
|
# obtaining a copy of this software and associated documentation
|
||||||
|
# files (the "Software"), to deal in the Software without
|
||||||
|
# restriction, including without limitation the rights to use,
|
||||||
|
# copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the
|
||||||
|
# Software is furnished to do so, subject to the following
|
||||||
|
# conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be
|
||||||
|
# included in all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
# OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Global Configuration Variables #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Color to use when highlighting suggestion
|
||||||
|
# Uses format of `region_highlight`
|
||||||
|
# More info: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Zle-Widgets
|
||||||
|
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE='fg=8'
|
||||||
|
|
||||||
|
# Prefix to use when saving original versions of bound widgets
|
||||||
|
ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX=autosuggest-orig-
|
||||||
|
|
||||||
|
ZSH_AUTOSUGGEST_STRATEGY=default
|
||||||
|
|
||||||
|
# Widgets that clear the suggestion
|
||||||
|
ZSH_AUTOSUGGEST_CLEAR_WIDGETS=(
|
||||||
|
history-search-forward
|
||||||
|
history-search-backward
|
||||||
|
history-beginning-search-forward
|
||||||
|
history-beginning-search-backward
|
||||||
|
history-substring-search-up
|
||||||
|
history-substring-search-down
|
||||||
|
up-line-or-history
|
||||||
|
down-line-or-history
|
||||||
|
accept-line
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the entire suggestion
|
||||||
|
ZSH_AUTOSUGGEST_ACCEPT_WIDGETS=(
|
||||||
|
forward-char
|
||||||
|
end-of-line
|
||||||
|
vi-forward-char
|
||||||
|
vi-end-of-line
|
||||||
|
vi-add-eol
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the entire suggestion and execute it
|
||||||
|
ZSH_AUTOSUGGEST_EXECUTE_WIDGETS=(
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that accept the suggestion as far as the cursor moves
|
||||||
|
ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS=(
|
||||||
|
forward-word
|
||||||
|
vi-forward-word
|
||||||
|
vi-forward-word-end
|
||||||
|
vi-forward-blank-word
|
||||||
|
vi-forward-blank-word-end
|
||||||
|
)
|
||||||
|
|
||||||
|
# Widgets that should be ignored (globbing supported but must be escaped)
|
||||||
|
ZSH_AUTOSUGGEST_IGNORE_WIDGETS=(
|
||||||
|
orig-\*
|
||||||
|
beep
|
||||||
|
run-help
|
||||||
|
set-local-history
|
||||||
|
which-command
|
||||||
|
yank
|
||||||
|
)
|
||||||
|
|
||||||
|
# Max size of buffer to trigger autosuggestion. Leave undefined for no upper bound.
|
||||||
|
ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE=
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Handle Deprecated Variables/Widgets #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
_zsh_autosuggest_deprecated_warning() {
|
||||||
|
>&2 echo "zsh-autosuggestions: $@"
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_check_deprecated_config() {
|
||||||
|
if [ -n "$AUTOSUGGESTION_HIGHLIGHT_COLOR" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_HIGHLIGHT_COLOR is deprecated. Use ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE instead."
|
||||||
|
[ -z "$ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE" ] && ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE=$AUTOSUGGESTION_HIGHLIGHT_STYLE
|
||||||
|
unset AUTOSUGGESTION_HIGHLIGHT_STYLE
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$AUTOSUGGESTION_HIGHLIGHT_CURSOR" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_HIGHLIGHT_CURSOR is deprecated."
|
||||||
|
unset AUTOSUGGESTION_HIGHLIGHT_CURSOR
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -n "$AUTOSUGGESTION_ACCEPT_RIGHT_ARROW" ]; then
|
||||||
|
_zsh_autosuggest_deprecated_warning "AUTOSUGGESTION_ACCEPT_RIGHT_ARROW is deprecated. The right arrow now accepts the suggestion by default."
|
||||||
|
unset AUTOSUGGESTION_ACCEPT_RIGHT_ARROW
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_deprecated_start_widget() {
|
||||||
|
_zsh_autosuggest_deprecated_warning "The autosuggest-start widget is deprecated. For more info, see the README at https://github.com/zsh-users/zsh-autosuggestions."
|
||||||
|
zle -D autosuggest-start
|
||||||
|
eval "zle-line-init() {
|
||||||
|
$(echo $functions[${widgets[zle-line-init]#*:}] | sed -e 's/zle autosuggest-start//g')
|
||||||
|
}"
|
||||||
|
}
|
||||||
|
|
||||||
|
zle -N autosuggest-start _zsh_autosuggest_deprecated_start_widget
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Widget Helpers #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Bind a single widget to an autosuggest widget, saving a reference to the original widget
|
||||||
|
_zsh_autosuggest_bind_widget() {
|
||||||
|
local widget=$1
|
||||||
|
local autosuggest_action=$2
|
||||||
|
local prefix=$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX
|
||||||
|
|
||||||
|
# Save a reference to the original widget
|
||||||
|
case $widgets[$widget] in
|
||||||
|
# Already bound
|
||||||
|
user:_zsh_autosuggest_(bound|orig)_*);;
|
||||||
|
|
||||||
|
# User-defined widget
|
||||||
|
user:*)
|
||||||
|
zle -N $prefix$widget ${widgets[$widget]#*:}
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Built-in widget
|
||||||
|
builtin)
|
||||||
|
eval "_zsh_autosuggest_orig_${(q)widget}() { zle .${(q)widget} }"
|
||||||
|
zle -N $prefix$widget _zsh_autosuggest_orig_$widget
|
||||||
|
;;
|
||||||
|
|
||||||
|
# Completion widget
|
||||||
|
completion:*)
|
||||||
|
eval "zle -C $prefix${(q)widget} ${${(s.:.)widgets[$widget]}[2,3]}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Pass the original widget's name explicitly into the autosuggest
|
||||||
|
# function. Use this passed in widget name to call the original
|
||||||
|
# widget instead of relying on the $WIDGET variable being set
|
||||||
|
# correctly. $WIDGET cannot be trusted because other plugins call
|
||||||
|
# zle without the `-w` flag (e.g. `zle self-insert` instead of
|
||||||
|
# `zle self-insert -w`).
|
||||||
|
eval "_zsh_autosuggest_bound_${(q)widget}() {
|
||||||
|
_zsh_autosuggest_widget_$autosuggest_action $prefix${(q)widget} \$@
|
||||||
|
}"
|
||||||
|
|
||||||
|
# Create the bound widget
|
||||||
|
zle -N $widget _zsh_autosuggest_bound_$widget
|
||||||
|
}
|
||||||
|
|
||||||
|
# Map all configured widgets to the right autosuggest widgets
|
||||||
|
_zsh_autosuggest_bind_widgets() {
|
||||||
|
local widget
|
||||||
|
local ignore_widgets
|
||||||
|
|
||||||
|
ignore_widgets=(
|
||||||
|
.\*
|
||||||
|
_\*
|
||||||
|
zle-line-\*
|
||||||
|
autosuggest-\*
|
||||||
|
$ZSH_AUTOSUGGEST_ORIGINAL_WIDGET_PREFIX\*
|
||||||
|
$ZSH_AUTOSUGGEST_IGNORE_WIDGETS
|
||||||
|
)
|
||||||
|
|
||||||
|
# Find every widget we might want to bind and bind it appropriately
|
||||||
|
for widget in ${${(f)"$(builtin zle -la)"}:#${(j:|:)~ignore_widgets}}; do
|
||||||
|
if [ ${ZSH_AUTOSUGGEST_CLEAR_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget clear
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_ACCEPT_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget accept
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_EXECUTE_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget execute
|
||||||
|
elif [ ${ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS[(r)$widget]} ]; then
|
||||||
|
_zsh_autosuggest_bind_widget $widget partial_accept
|
||||||
|
else
|
||||||
|
# Assume any unspecified widget might modify the buffer
|
||||||
|
_zsh_autosuggest_bind_widget $widget modify
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Given the name of an original widget and args, invoke it, if it exists
|
||||||
|
_zsh_autosuggest_invoke_original_widget() {
|
||||||
|
# Do nothing unless called with at least one arg
|
||||||
|
[ $# -gt 0 ] || return
|
||||||
|
|
||||||
|
local original_widget_name="$1"
|
||||||
|
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [ $widgets[$original_widget_name] ]; then
|
||||||
|
zle $original_widget_name -- $@
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Highlighting #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# If there was a highlight, remove it
|
||||||
|
_zsh_autosuggest_highlight_reset() {
|
||||||
|
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
|
||||||
|
if [ -n "$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT" ]; then
|
||||||
|
region_highlight=("${(@)region_highlight:#$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT}")
|
||||||
|
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# If there's a suggestion, highlight it
|
||||||
|
_zsh_autosuggest_highlight_apply() {
|
||||||
|
typeset -g _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
|
||||||
|
if [ $#POSTDISPLAY -gt 0 ]; then
|
||||||
|
_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT="$#BUFFER $(($#BUFFER + $#POSTDISPLAY)) $ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE"
|
||||||
|
region_highlight+=("$_ZSH_AUTOSUGGEST_LAST_HIGHLIGHT")
|
||||||
|
else
|
||||||
|
unset _ZSH_AUTOSUGGEST_LAST_HIGHLIGHT
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Autosuggest Widget Implementations #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Clear the suggestion
|
||||||
|
_zsh_autosuggest_clear() {
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
}
|
||||||
|
|
||||||
|
# Modify the buffer and get a new suggestion
|
||||||
|
_zsh_autosuggest_modify() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
# Save the contents of the buffer/postdisplay
|
||||||
|
local orig_buffer="$BUFFER"
|
||||||
|
local orig_postdisplay="$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Clear suggestion while original widget runs
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Original widget may modify the buffer
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
retval=$?
|
||||||
|
|
||||||
|
# Don't fetch a new suggestion if the buffer hasn't changed
|
||||||
|
if [ "$BUFFER" = "$orig_buffer" ]; then
|
||||||
|
POSTDISPLAY="$orig_postdisplay"
|
||||||
|
return $retval
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Get a new suggestion if the buffer is not empty after modification
|
||||||
|
local suggestion
|
||||||
|
if [ $#BUFFER -gt 0 ]; then
|
||||||
|
if [ -z "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" -o $#BUFFER -lt "$ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE" ]; then
|
||||||
|
suggestion="$(_zsh_autosuggest_suggestion "$BUFFER")"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the suggestion to the POSTDISPLAY
|
||||||
|
if [ -n "$suggestion" ]; then
|
||||||
|
POSTDISPLAY="${suggestion#$BUFFER}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $retval
|
||||||
|
}
|
||||||
|
|
||||||
|
# Accept the entire suggestion
|
||||||
|
_zsh_autosuggest_accept() {
|
||||||
|
local -i max_cursor_pos=$#BUFFER
|
||||||
|
|
||||||
|
# When vicmd keymap is active, the cursor can't move all the way
|
||||||
|
# to the end of the buffer
|
||||||
|
if [ "$KEYMAP" = "vicmd" ]; then
|
||||||
|
max_cursor_pos=$((max_cursor_pos - 1))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Only accept if the cursor is at the end of the buffer
|
||||||
|
if [ $CURSOR -eq $max_cursor_pos ]; then
|
||||||
|
# Add the suggestion to the buffer
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Move the cursor to the end of the buffer
|
||||||
|
CURSOR=${#BUFFER}
|
||||||
|
fi
|
||||||
|
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
}
|
||||||
|
|
||||||
|
# Accept the entire suggestion and execute it
|
||||||
|
_zsh_autosuggest_execute() {
|
||||||
|
# Add the suggestion to the buffer
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Remove the suggestion
|
||||||
|
unset POSTDISPLAY
|
||||||
|
|
||||||
|
# Call the original `accept-line` to handle syntax highlighting or
|
||||||
|
# other potential custom behavior
|
||||||
|
_zsh_autosuggest_invoke_original_widget "accept-line"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Partially accept the suggestion
|
||||||
|
_zsh_autosuggest_partial_accept() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
# Save the contents of the buffer so we can restore later if needed
|
||||||
|
local original_buffer="$BUFFER"
|
||||||
|
|
||||||
|
# Temporarily accept the suggestion.
|
||||||
|
BUFFER="$BUFFER$POSTDISPLAY"
|
||||||
|
|
||||||
|
# Original widget moves the cursor
|
||||||
|
_zsh_autosuggest_invoke_original_widget $@
|
||||||
|
retval=$?
|
||||||
|
|
||||||
|
# If we've moved past the end of the original buffer
|
||||||
|
if [ $CURSOR -gt $#original_buffer ]; then
|
||||||
|
# Set POSTDISPLAY to text right of the cursor
|
||||||
|
POSTDISPLAY="$RBUFFER"
|
||||||
|
|
||||||
|
# Clip the buffer at the cursor
|
||||||
|
BUFFER="$LBUFFER"
|
||||||
|
else
|
||||||
|
# Restore the original buffer
|
||||||
|
BUFFER="$original_buffer"
|
||||||
|
fi
|
||||||
|
|
||||||
|
return $retval
|
||||||
|
}
|
||||||
|
|
||||||
|
for action in clear modify accept partial_accept execute; do
|
||||||
|
eval "_zsh_autosuggest_widget_$action() {
|
||||||
|
local -i retval
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_reset
|
||||||
|
|
||||||
|
_zsh_autosuggest_$action \$@
|
||||||
|
retval=\$?
|
||||||
|
|
||||||
|
_zsh_autosuggest_highlight_apply
|
||||||
|
|
||||||
|
return \$retval
|
||||||
|
}"
|
||||||
|
done
|
||||||
|
|
||||||
|
zle -N autosuggest-accept _zsh_autosuggest_widget_accept
|
||||||
|
zle -N autosuggest-clear _zsh_autosuggest_widget_clear
|
||||||
|
zle -N autosuggest-execute _zsh_autosuggest_widget_execute
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggestion #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Delegate to the selected strategy to determine a suggestion
|
||||||
|
_zsh_autosuggest_suggestion() {
|
||||||
|
local escaped_prefix="$(_zsh_autosuggest_escape_command "$1")"
|
||||||
|
local strategy_function="_zsh_autosuggest_strategy_$ZSH_AUTOSUGGEST_STRATEGY"
|
||||||
|
|
||||||
|
if [ -n "$functions[$strategy_function]" ]; then
|
||||||
|
echo -E "$($strategy_function "$escaped_prefix")"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_autosuggest_escape_command() {
|
||||||
|
setopt localoptions EXTENDED_GLOB
|
||||||
|
|
||||||
|
# Escape special chars in the string (requires EXTENDED_GLOB)
|
||||||
|
echo -E "${1//(#m)[\\()\[\]|*?~]/\\$MATCH}"
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Default Suggestion Strategy #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggests the most recent history item that matches the given
|
||||||
|
# prefix.
|
||||||
|
#
|
||||||
|
|
||||||
|
_zsh_autosuggest_strategy_default() {
|
||||||
|
fc -lnrm "$1*" 1 2>/dev/null | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Match Previous Command Suggestion Strategy #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Suggests the most recent history item that matches the given
|
||||||
|
# prefix and whose preceding history item also matches the most
|
||||||
|
# recently executed command.
|
||||||
|
#
|
||||||
|
# For example, suppose your history has the following entries:
|
||||||
|
# - pwd
|
||||||
|
# - ls foo
|
||||||
|
# - ls bar
|
||||||
|
# - pwd
|
||||||
|
#
|
||||||
|
# Given the history list above, when you type 'ls', the suggestion
|
||||||
|
# will be 'ls foo' rather than 'ls bar' because your most recently
|
||||||
|
# executed command (pwd) was previously followed by 'ls foo'.
|
||||||
|
#
|
||||||
|
# Note that this strategy won't work as expected with ZSH options that don't
|
||||||
|
# preserve the history order such as `HIST_IGNORE_ALL_DUPS` or
|
||||||
|
# `HIST_EXPIRE_DUPS_FIRST`.
|
||||||
|
|
||||||
|
_zsh_autosuggest_strategy_match_prev_cmd() {
|
||||||
|
local prefix="$1"
|
||||||
|
|
||||||
|
# Get all history event numbers that correspond to history
|
||||||
|
# entries that match pattern $prefix*
|
||||||
|
local history_match_keys
|
||||||
|
history_match_keys=(${(k)history[(R)$prefix*]})
|
||||||
|
|
||||||
|
# By default we use the first history number (most recent history entry)
|
||||||
|
local histkey="${history_match_keys[1]}"
|
||||||
|
|
||||||
|
# Get the previously executed command
|
||||||
|
local prev_cmd="$(_zsh_autosuggest_escape_command "${history[$((HISTCMD-1))]}")"
|
||||||
|
|
||||||
|
# Iterate up to the first 200 history event numbers that match $prefix
|
||||||
|
for key in "${(@)history_match_keys[1,200]}"; do
|
||||||
|
# Stop if we ran out of history
|
||||||
|
[[ $key -gt 1 ]] || break
|
||||||
|
|
||||||
|
# See if the history entry preceding the suggestion matches the
|
||||||
|
# previous command, and use it if it does
|
||||||
|
if [[ "${history[$((key - 1))]}" == "$prev_cmd" ]]; then
|
||||||
|
histkey="$key"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Echo the matched history entry
|
||||||
|
echo -E "$history[$histkey]"
|
||||||
|
}
|
||||||
|
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
# Start #
|
||||||
|
#--------------------------------------------------------------------#
|
||||||
|
|
||||||
|
# Start the autosuggestion widgets
|
||||||
|
_zsh_autosuggest_start() {
|
||||||
|
_zsh_autosuggest_check_deprecated_config
|
||||||
|
_zsh_autosuggest_bind_widgets
|
||||||
|
}
|
||||||
|
|
||||||
|
autoload -Uz add-zsh-hook
|
||||||
|
add-zsh-hook precmd _zsh_autosuggest_start
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
$Format:%H$
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
0.6.0-dev
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
provided that the following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
with the distribution.
|
||||||
|
* Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
Hacking on zsh-syntax-highlighting itself
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
This document includes information for people working on z-sy-h itself: on the
|
||||||
|
core driver (`zsh-syntax-highlighting.zsh`), on the highlighters in the
|
||||||
|
distribution, and on the test suite. It does not target third-party
|
||||||
|
highlighter authors (although they may find it an interesting read).
|
||||||
|
|
||||||
|
The `main` highlighter
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
The following function `pz` is useful when working on the `main` highlighting:
|
||||||
|
|
||||||
|
pq() {
|
||||||
|
(( $#argv )) || return 0
|
||||||
|
print -r -l -- ${(qqqq)argv}
|
||||||
|
}
|
||||||
|
pz() {
|
||||||
|
local arg
|
||||||
|
for arg; do
|
||||||
|
pq ${(z)arg}
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
It prints, for each argument, its token breakdown, similar to how the main
|
||||||
|
loop of the `main` highlighter sees it.
|
||||||
|
|
||||||
|
Testing the `brackets` highlighter
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
Since the test harness empties `ZSH_HIGHLIGHT_STYLES` and the `brackets`
|
||||||
|
highlighter interrogates `ZSH_HIGHLIGHT_STYLES` to determine how to highlight,
|
||||||
|
tests must set the `bracket-level-#` keys themselves. For example:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
|
||||||
|
BUFFER='echo ({x})'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 6 bracket-level-1" # (
|
||||||
|
"7 7 bracket-level-2" # {
|
||||||
|
"9 9 bracket-level-2" # }
|
||||||
|
"10 10 bracket-level-1" # )
|
||||||
|
)
|
||||||
|
|
||||||
|
Testing the `pattern` highlighter
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Because the `pattern` highlighter modifies `region_highlight` directly instead
|
||||||
|
of using `_zsh_highlight_add_highlight`, the test harness cannot get the
|
||||||
|
`ZSH_HIGHLIGHT_STYLES` keys. Therefore, when writing tests, use the style
|
||||||
|
itself as third word (cf. the [documentation for `expected_region_highlight`]
|
||||||
|
(docs/highlighters.md)). For example:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
|
||||||
|
|
||||||
|
BUFFER='rm -rf /'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 8 fg=white,bold,bg=red" # rm -rf /
|
||||||
|
)
|
||||||
|
|
||||||
|
Miscellany
|
||||||
|
----------
|
||||||
|
|
||||||
|
If you work on the driver (`zsh-syntax-highlighting.zsh`), you may find the following zstyle useful:
|
||||||
|
|
||||||
|
zstyle ':completion:*:*:*:*:globbed-files' ignored-patterns {'*/',}zsh-syntax-highlighting.plugin.zsh
|
||||||
|
|
||||||
|
IRC channel
|
||||||
|
-----------
|
||||||
|
|
||||||
|
We're on #zsh-syntax-highlighting on freenode.
|
||||||
|
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
How to install
|
||||||
|
--------------
|
||||||
|
|
||||||
|
### Using packages
|
||||||
|
|
||||||
|
* Arch Linux: [community/zsh-syntax-highlighting][arch-package] / [AUR/zsh-syntax-highlighting-git][AUR-package]
|
||||||
|
* Debian: `zsh-syntax-highlighting` package [in `stretch`][debian-package]
|
||||||
|
* Fedora: [zsh-syntax-highlighting package][fedora-package] in Fedora 24+
|
||||||
|
* FreeBSD: `pkg install zsh-syntax-highlighting` (port name: [`textproc/zsh-syntax-highlighting`][freebsd-port])
|
||||||
|
* Gentoo: [mv overlay][gentoo-overlay]
|
||||||
|
* Mac OS X / Homebrew: [brew install zsh-syntax-highlighting][brew-package]
|
||||||
|
* Ubuntu: `zsh-syntax-highlighting` package [in Xenial][ubuntu-package]
|
||||||
|
|
||||||
|
[arch-package]: https://www.archlinux.org/packages/zsh-syntax-highlighting
|
||||||
|
[AUR-package]: https://aur.archlinux.org/packages/zsh-syntax-highlighting-git
|
||||||
|
[debian-package]: https://packages.debian.org/zsh-syntax-highlighting
|
||||||
|
[freebsd-port]: http://www.freshports.org/textproc/zsh-syntax-highlighting/
|
||||||
|
[gentoo-overlay]: http://gpo.zugaina.org/app-shells/zsh-syntax-highlighting
|
||||||
|
[brew-package]: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/zsh-syntax-highlighting.rb
|
||||||
|
[ubuntu-package]: https://launchpad.net/ubuntu/+source/zsh-syntax-highlighting
|
||||||
|
[fedora-package]: https://apps.fedoraproject.org/packages/zsh-syntax-highlighting
|
||||||
|
|
||||||
|
|
||||||
|
### In your ~/.zshrc
|
||||||
|
|
||||||
|
Simply clone this repository and source the script:
|
||||||
|
|
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
|
||||||
|
echo "source ${(q-)PWD}/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${ZDOTDIR:-$HOME}/.zshrc
|
||||||
|
|
||||||
|
Then, enable syntax highlighting in the current interactive shell:
|
||||||
|
|
||||||
|
source ./zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
|
||||||
|
If `git` is not installed, download and extract a snapshot of the latest
|
||||||
|
development tree from:
|
||||||
|
|
||||||
|
https://github.com/zsh-users/zsh-syntax-highlighting/archive/master.tar.gz
|
||||||
|
|
||||||
|
Note the `source` command must be **at the end** of `~/.zshrc`.
|
||||||
|
|
||||||
|
|
||||||
|
### With a plugin manager
|
||||||
|
|
||||||
|
Note that `zsh-syntax-highlighting` must be the last plugin sourced.
|
||||||
|
|
||||||
|
The zsh-syntax-highlighting authors recommend manual installation over the use
|
||||||
|
of a framework or plugin manager.
|
||||||
|
|
||||||
|
This list is incomplete as there are too many [frameworks / plugin managers]
|
||||||
|
(https://github.com/unixorn/awesome-zsh-plugins#frameworks) to list them all
|
||||||
|
here.
|
||||||
|
|
||||||
|
#### [Antigen](https://github.com/zsh-users/antigen)
|
||||||
|
|
||||||
|
Add `antigen bundle zsh-users/zsh-syntax-highlighting` as the last bundle in
|
||||||
|
your `.zshrc`.
|
||||||
|
|
||||||
|
#### [Oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
|
||||||
|
|
||||||
|
1. Clone this repository in oh-my-zsh's plugins directory:
|
||||||
|
|
||||||
|
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
|
||||||
|
|
||||||
|
2. Activate the plugin in `~/.zshrc`:
|
||||||
|
|
||||||
|
plugins=( [plugins...] zsh-syntax-highlighting)
|
||||||
|
|
||||||
|
3. Source `~/.zshrc` to take changes into account:
|
||||||
|
|
||||||
|
source ~/.zshrc
|
||||||
|
|
||||||
|
#### [Prezto](https://github.com/sorin-ionescu/prezto)
|
||||||
|
|
||||||
|
Zsh-syntax-highlighting is included with Prezto. See the [Prezto documentation]
|
||||||
|
(https://github.com/sorin-ionescu/prezto/tree/master/modules/syntax-highlighting)
|
||||||
|
to enable and configure highlighters.
|
||||||
|
|
||||||
|
#### [zgen](https://github.com/tarjoilija/zgen)
|
||||||
|
|
||||||
|
Add `zgen load zsh-users/zsh-syntax-highlighting` to the end of your `.zshrc`.
|
||||||
|
|
||||||
|
#### [zplug](https://github.com/zplug/zplug)
|
||||||
|
|
||||||
|
Add `zplug "zsh-users/zsh-syntax-highlighting", nice:10` to your `.zshrc`.
|
||||||
|
|
||||||
|
#### [zplugin](https://github.com/psprint/zplugin)
|
||||||
|
|
||||||
|
Add `zplugin load zsh-users/zsh-syntax-highlighting` to the end of your
|
||||||
|
`.zshrc`.
|
||||||
|
|
||||||
|
|
||||||
|
### System-wide installation
|
||||||
|
|
||||||
|
Any of the above methods is suitable for a single-user installation,
|
||||||
|
which requires no special privileges. If, however, you desire to install
|
||||||
|
zsh-syntax-highlighting system-wide, you may do so by running
|
||||||
|
|
||||||
|
make install
|
||||||
|
|
||||||
|
and directing your users to add
|
||||||
|
|
||||||
|
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
|
||||||
|
|
||||||
|
to their `.zshrc`s.
|
||||||
@@ -0,0 +1,62 @@
|
|||||||
|
NAME=zsh-syntax-highlighting
|
||||||
|
|
||||||
|
INSTALL?=install -c
|
||||||
|
PREFIX?=/usr/local
|
||||||
|
SHARE_DIR?=$(DESTDIR)$(PREFIX)/share/$(NAME)
|
||||||
|
DOC_DIR?=$(DESTDIR)$(PREFIX)/share/doc/$(NAME)
|
||||||
|
ZSH?=zsh # zsh binary to run tests with
|
||||||
|
|
||||||
|
all:
|
||||||
|
cd docs && \
|
||||||
|
cp highlighters.md all.md && \
|
||||||
|
printf '\n\nIndividual highlighters documentation\n=====================================' >> all.md && \
|
||||||
|
for doc in highlighters/*.md; do printf '\n\n'; cat "$$doc"; done >> all.md
|
||||||
|
|
||||||
|
install: all
|
||||||
|
$(INSTALL) -d $(SHARE_DIR)
|
||||||
|
$(INSTALL) -d $(DOC_DIR)
|
||||||
|
cp .version zsh-syntax-highlighting.zsh $(SHARE_DIR)
|
||||||
|
cp COPYING.md README.md changelog.md $(DOC_DIR)
|
||||||
|
if [ x"true" = x"`git rev-parse --is-inside-work-tree 2>/dev/null`" ]; then \
|
||||||
|
git rev-parse HEAD; \
|
||||||
|
else \
|
||||||
|
cat .revision-hash; \
|
||||||
|
fi > $(SHARE_DIR)/.revision-hash
|
||||||
|
:
|
||||||
|
# The [ -e ] check below is to because sh evaluates this with (the moral
|
||||||
|
# equivalent of) NONOMATCH in effect, and highlighters/*.zsh has no matches.
|
||||||
|
for dirname in highlighters highlighters/*/ ; do \
|
||||||
|
$(INSTALL) -d $(SHARE_DIR)/"$$dirname"; \
|
||||||
|
for fname in "$$dirname"/*.zsh ; do [ -e "$$fname" ] && cp "$$fname" $(SHARE_DIR)"/$$dirname"; done; \
|
||||||
|
done
|
||||||
|
cp -R docs/* $(DOC_DIR)
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f docs/all.md
|
||||||
|
|
||||||
|
test:
|
||||||
|
@result=0; \
|
||||||
|
for test in highlighters/*; do \
|
||||||
|
if [ -d $$test/test-data ]; then \
|
||||||
|
echo "Running test $${test##*/}"; \
|
||||||
|
$(ZSH) -f tests/test-highlighting.zsh "$${test##*/}"; \
|
||||||
|
: $$(( result |= $$? )); \
|
||||||
|
fi \
|
||||||
|
done; \
|
||||||
|
exit $$result
|
||||||
|
|
||||||
|
quiet-test:
|
||||||
|
$(MAKE) test QUIET=y
|
||||||
|
|
||||||
|
perf:
|
||||||
|
@result=0; \
|
||||||
|
for test in highlighters/*; do \
|
||||||
|
if [ -d $$test/test-data ]; then \
|
||||||
|
echo "Running test $${test##*/}"; \
|
||||||
|
$(ZSH) -f tests/test-perfs.zsh "$${test##*/}"; \
|
||||||
|
: $$(( result |= $$? )); \
|
||||||
|
fi \
|
||||||
|
done; \
|
||||||
|
exit $$result
|
||||||
|
|
||||||
|
.PHONY: all install clean test perf
|
||||||
@@ -0,0 +1,78 @@
|
|||||||
|
zsh-syntax-highlighting
|
||||||
|
=======================
|
||||||
|
|
||||||
|
**[Fish shell][fish]-like like syntax highlighting for [Zsh][zsh].**
|
||||||
|
|
||||||
|
*Requirements: zsh 4.3.17+.*
|
||||||
|
|
||||||
|
[fish]: http://www.fishshell.com/
|
||||||
|
[zsh]: http://www.zsh.org/
|
||||||
|
|
||||||
|
This package provides syntax highlighing for the shell zsh. It enables
|
||||||
|
highlighing of commands whilst they are typed at a zsh prompt into an
|
||||||
|
interactive terminal. This helps in reviewing commands before running
|
||||||
|
them, particularly in catching syntax errors.
|
||||||
|
|
||||||
|
Some examples:
|
||||||
|
|
||||||
|
Before: [](images/before1.png)
|
||||||
|
<br/>
|
||||||
|
After: [](images/after1.png)
|
||||||
|
|
||||||
|
Before: [](images/before2.png)
|
||||||
|
<br/>
|
||||||
|
After: [](images/after2.png)
|
||||||
|
|
||||||
|
Before: [](images/before3.png)
|
||||||
|
<br/>
|
||||||
|
After: [](images/after3.png)
|
||||||
|
|
||||||
|
|
||||||
|
How to install
|
||||||
|
--------------
|
||||||
|
|
||||||
|
See [INSTALL.md](INSTALL.md).
|
||||||
|
|
||||||
|
|
||||||
|
FAQ
|
||||||
|
---
|
||||||
|
|
||||||
|
### Why must `zsh-syntax-highlighting.zsh` be sourced at the end of the `.zshrc` file?
|
||||||
|
|
||||||
|
`zsh-syntax-highlighting.zsh` wraps ZLE widgets. It must be sourced after all
|
||||||
|
custom widgets have been created (i.e., after all `zle -N` calls and after
|
||||||
|
running `compinit`). Widgets created later will work, but will not update the
|
||||||
|
syntax highlighting.
|
||||||
|
|
||||||
|
### Does syntax highlighting work during incremental history search?
|
||||||
|
|
||||||
|
Highlighting the command line during an incremental history search
|
||||||
|
(with the `history-incremental-search-backward` widget, which is
|
||||||
|
bound by default to <kbd>Ctrl+R</kbd> in zsh's emacs keymap) requires zsh 5.3
|
||||||
|
or newer.
|
||||||
|
|
||||||
|
Under zsh 5.2 and older, the zsh-default [underlining][zshzle-Character-Highlighting]
|
||||||
|
of the matched portion of the buffer remains available, but zsh-syntax-highlighting's
|
||||||
|
additional highlighting is unavailable. (Those versions of zsh do not provide
|
||||||
|
enough information to allow computing the highlighting correctly.)
|
||||||
|
|
||||||
|
See [issue #288][i288] for details.
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
|
[i288]: https://github.com/zsh-users/zsh-syntax-highlighting/pull/288
|
||||||
|
|
||||||
|
### How are new releases announced?
|
||||||
|
|
||||||
|
There is currently no "push" announcements channel. However, the following
|
||||||
|
alternatives exist:
|
||||||
|
|
||||||
|
- GitHub's RSS feed of releases: https://github.com/zsh-users/zsh-syntax-highlighting/releases.atom
|
||||||
|
- An anitya entry: https://release-monitoring.org/project/7552/
|
||||||
|
|
||||||
|
|
||||||
|
How to tweak
|
||||||
|
------------
|
||||||
|
|
||||||
|
Syntax highlighting is done by pluggable highlighter scripts. See the
|
||||||
|
[documentation on highlighters](docs/highlighters.md) for details and
|
||||||
|
configuration settings.
|
||||||
@@ -0,0 +1,497 @@
|
|||||||
|
up to 28d7056a7a06
|
||||||
|
|
||||||
|
# Changes in version 0.6.0
|
||||||
|
|
||||||
|
|
||||||
|
## Added highlighting of:
|
||||||
|
|
||||||
|
- The `isearch` and `suffix` [`$zle_highlight` settings][zshzle-Character-Highlighting].
|
||||||
|
(79e4d3d12405, 15db71abd0cc; requires zsh 5.3 for `$ISEARCHMATCH_ACTIVE` / `$SUFFIX_ACTIVE` support)
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
|
|
||||||
|
|
||||||
|
# Changes in version 0.5.0
|
||||||
|
|
||||||
|
|
||||||
|
## Performance improvements:
|
||||||
|
|
||||||
|
We thank Sebastian Gniazdowski and "m0viefreak" for significant contributions
|
||||||
|
in this area.
|
||||||
|
|
||||||
|
- Optimize string operations in the `main` (default) highlighter.
|
||||||
|
(#372/3cb58fd7d7b9, 02229ebd6328, ef4bfe5bcc14, #372/c6b6513ac0d6, #374/15461e7d21c3)
|
||||||
|
|
||||||
|
- Command word highlighting: Use the `zsh/parameter` module to avoid forks.
|
||||||
|
Memoize (cache) the results.
|
||||||
|
(#298, 3ce01076b521, 2f18ba64e397, 12b879caf7a6; #320, 3b67e656bff5)
|
||||||
|
|
||||||
|
- Avoid forks in the driver and in the `root` highlighter.
|
||||||
|
(b9112aec798a, 38c8fbea2dd2)
|
||||||
|
|
||||||
|
|
||||||
|
## Added highlighting of:
|
||||||
|
|
||||||
|
- `pkexec` (a precommand).
|
||||||
|
(#248, 4f3910cbbaa5)
|
||||||
|
|
||||||
|
- Aliases that cannot be defined normally nor invoked normally (highlighted as an error).
|
||||||
|
(#263 (in part), 28932316cca6)
|
||||||
|
|
||||||
|
- Path separators (`/`) — the default behaviour remains to highlight path separators
|
||||||
|
and path components the same way.
|
||||||
|
(#136, #260, 6cd39e7c70d3, 9a934d291e7c, f3d3aaa00cc4)
|
||||||
|
|
||||||
|
- Assignments to individual positional arguments (`42=foo` to assign to `$42`).
|
||||||
|
(f4036a09cee3)
|
||||||
|
|
||||||
|
- Linewise region (the `visual-line-mode` widget, bound to `V` in zsh's `vi` keymap).
|
||||||
|
(#267, a7a7f8b42280, ee07588cfd9b)
|
||||||
|
|
||||||
|
- Command-lines recalled by `isearch` mode; requires zsh≥5.3.
|
||||||
|
(#261 (in part); #257; 4ad311ec0a68)
|
||||||
|
|
||||||
|
- Command-lines whilst the `IGNORE_BRACES` or `IGNORE_CLOSE_BRACES` option is in effect.
|
||||||
|
(a8a6384356af, 02807f1826a5)
|
||||||
|
|
||||||
|
- Mismatched parentheses and braces (in the `main` highlighter).
|
||||||
|
(51b9d79c3bb6, 2fabf7ca64b7, a4196eda5e6f, and others)
|
||||||
|
|
||||||
|
- Mismatched `do`/`done` keywords.
|
||||||
|
(b2733a64da93)
|
||||||
|
|
||||||
|
- Mismatched `foreach`/`end` keywords.
|
||||||
|
(#96, 2bb8f0703d8f)
|
||||||
|
|
||||||
|
- In Bourne-style function definitions, when the `MULTI_FUNC_DEF` option is set
|
||||||
|
(which is the default), highlight the first word in the function body as
|
||||||
|
a command word: `f() { g "$@" }`.
|
||||||
|
(6f91850a01e1)
|
||||||
|
|
||||||
|
- `always` blocks.
|
||||||
|
(#335, e5782e4ddfb6)
|
||||||
|
|
||||||
|
- Command substitutions inside double quotes, `"$(echo foo)"`.
|
||||||
|
(#139 (in part), c3913e0d8ead)
|
||||||
|
|
||||||
|
- Non-alphabetic parameters inside double quotes (`"$$"`, `"$#"`, `"$*"`, `"$@"`, `"$?"`, `"$-"`).
|
||||||
|
(4afe670f7a1b, 44ef6e38e5a7)
|
||||||
|
|
||||||
|
- Command words from future versions of zsh (forward compatibly).
|
||||||
|
This also adds an `arg0` style that all other command word styles fall back to.
|
||||||
|
(b4537a972eed, bccc3dc26943)
|
||||||
|
|
||||||
|
- Escaped history expansions inside double quotes: `: "\!"`
|
||||||
|
(28d7056a7a06, et seq)
|
||||||
|
|
||||||
|
|
||||||
|
## Fixed highlighting of:
|
||||||
|
|
||||||
|
- Command separator tokens in syntactically-invalid positions.
|
||||||
|
(09c4114eb980)
|
||||||
|
|
||||||
|
- Redirections with a file descriptor number at command word.
|
||||||
|
(#238 (in part), 73ee7c1f6c4a)
|
||||||
|
|
||||||
|
- The `select` prompt, `$PS3`.
|
||||||
|
(#268, 451665cb2a8b)
|
||||||
|
|
||||||
|
- Values of variables in `vared`.
|
||||||
|
(e500ca246286)
|
||||||
|
|
||||||
|
- `!` as an argument (neither a history expansion nor a reserved word).
|
||||||
|
(4c23a2fd1b90)
|
||||||
|
|
||||||
|
- "division by zero" error under the `brackets` highlighter when `$ZSH_HIGHLIGHT_STYLES` is empty.
|
||||||
|
(f73f3d53d3a6)
|
||||||
|
|
||||||
|
- Process substitutions, `<(pwd)` and `>(wc -l)`.
|
||||||
|
(#302, 6889ff6bd2ad, bfabffbf975c, fc9c892a3f15)
|
||||||
|
|
||||||
|
- The non-`SHORT_LOOPS` form of `repeat` loops: `repeat 42; do true; done`.
|
||||||
|
(#290, 4832f18c50a5, ef68f50c048f, 6362c757b6f7)
|
||||||
|
|
||||||
|
- Broken symlinks (are now highlighted as files).
|
||||||
|
(#342, 95f7206a9373, 53083da8215e)
|
||||||
|
|
||||||
|
- Lines accepted from `isearch` mode.
|
||||||
|
(#284; #257, #259, #288; 5bae6219008b, a8fe22d42251)
|
||||||
|
|
||||||
|
- Work around upstream bug that triggered when the command word was a relative
|
||||||
|
path, that when interpreted relative to a $PATH directory denoted a command;
|
||||||
|
the effect of that upstream bug was that the relative path was cached as
|
||||||
|
a "valid external command name".
|
||||||
|
(#354, #355, 51614ca2c994, fdaeec45146b, 7d38d07255e4;
|
||||||
|
upstream fix slated to be released in 5.3 (workers/39104))
|
||||||
|
|
||||||
|
- After accepting a line with the cursor on a bracket, the matching bracket
|
||||||
|
of the bracket under the cursor no longer remains highlighted (with the
|
||||||
|
`brackets` highlighter).
|
||||||
|
(4c4baede519a)
|
||||||
|
|
||||||
|
- The first word on a new line within an array assignment or initialization is no
|
||||||
|
longer considered a command position.
|
||||||
|
(8bf423d16d46)
|
||||||
|
|
||||||
|
- Subshells that end at command position, `(A=42)`, `(true;)`.
|
||||||
|
(#231, 7fb6f9979121; #344, 4fc35362ee5a)
|
||||||
|
|
||||||
|
- Command word after array assignment, `a=(lorem ipsum) pwd`.
|
||||||
|
(#330, 7fb6f9979121)
|
||||||
|
|
||||||
|
|
||||||
|
## API changes (for highlighter authors):
|
||||||
|
|
||||||
|
- New interface `_zsh_highlight_add_highlight`.
|
||||||
|
(341a3ae1f015, c346f6eb6fb6)
|
||||||
|
|
||||||
|
- tests: Specify the style key, not its value, in test expectations.
|
||||||
|
(a830613467af, fd061b5730bf, eaa4335c3441, among others)
|
||||||
|
|
||||||
|
- Module author documentation improvements.
|
||||||
|
(#306 (in part), 217669270418, 0ff354b44b6e, 80148f6c8402, 364f206a547f, and others)
|
||||||
|
|
||||||
|
- The driver no longer defines a `_zsh_highlight_${highlighter}_highlighter_cache`
|
||||||
|
variable, which is in the highlighters' namespace.
|
||||||
|
(3e59ab41b6b8, 80148f6c8402, f91a7b885e7d)
|
||||||
|
|
||||||
|
- Rename highlighter entry points. The old names remain supported for
|
||||||
|
backwards compatibility.
|
||||||
|
(a3d5dfcbdae9, c793e0dceab1)
|
||||||
|
|
||||||
|
- tests: Add the "NONE" expectation.
|
||||||
|
(4da9889d1545, 13018f3dd735, d37c55c788cd)
|
||||||
|
|
||||||
|
- tests: consider a test that writes to stderr to have failed.
|
||||||
|
(#291, 1082067f9315)
|
||||||
|
|
||||||
|
|
||||||
|
## Developer-visible changes:
|
||||||
|
|
||||||
|
- Add `make quiet-test`.
|
||||||
|
(9b64ad750f35)
|
||||||
|
|
||||||
|
- test harness: Better quote replaceables in error messages.
|
||||||
|
(30d8f92df225)
|
||||||
|
|
||||||
|
- test harness: Fix exit code for XPASS.
|
||||||
|
(bb8d325c0cbd)
|
||||||
|
|
||||||
|
- Create [HACKING.md](HACKING.md).
|
||||||
|
(cef49752fd0e)
|
||||||
|
|
||||||
|
- tests: Emit a description for PASS test points.
|
||||||
|
(6aa57d60aa64, f0bae44b76dd)
|
||||||
|
|
||||||
|
- tests: Create a script that generates a test file.
|
||||||
|
(8013dc3b8db6, et seq; `tests/generate.zsh`)
|
||||||
|
|
||||||
|
|
||||||
|
## Other changes:
|
||||||
|
|
||||||
|
- Under zsh≤5.2, widgets whose names start with a `_` are no longer excluded
|
||||||
|
from highlighting.
|
||||||
|
(ed33d2cb1388; reverts part of 186d80054a40 which was for #65)
|
||||||
|
|
||||||
|
- Under zsh≤5.2, widgets implemented by a function named after the widget are
|
||||||
|
no longer excluded from highlighting.
|
||||||
|
(487b122c480d; reverts part of 776453cb5b69)
|
||||||
|
|
||||||
|
- Under zsh≤5.2, shell-unsafe widget names can now be wrapped.
|
||||||
|
(#278, 6a634fac9fb9, et seq)
|
||||||
|
|
||||||
|
- Correct some test expectations.
|
||||||
|
(78290e043bc5)
|
||||||
|
|
||||||
|
- `zsh-syntax-highlighting.plugin.zsh`: Convert from symlink to plain file
|
||||||
|
for msys2 compatibility.
|
||||||
|
(#292, d4f8edc9f3ad)
|
||||||
|
|
||||||
|
- Document installation under some plugin managers.
|
||||||
|
(e635f766bef9, 9cab566f539b)
|
||||||
|
|
||||||
|
- Don't leak the `PATH_DIRS` option.
|
||||||
|
(7b82b88a7166)
|
||||||
|
|
||||||
|
- Don't require the `FUNCTION_ARGZERO` option to be set.
|
||||||
|
(#338, 750aebc553f2)
|
||||||
|
|
||||||
|
- Under zsh≤5.2, support binding incomplete/nonexistent widgets.
|
||||||
|
(9e569bb0fe04, part of #288)
|
||||||
|
|
||||||
|
- Make the driver reentrant, fixing possibility of infinite recursion
|
||||||
|
under zsh≤5.2 under interaction with theoretical third-party code.
|
||||||
|
(#305, d711563fe1bf, 295d62ec888d, f3242cbd6aba)
|
||||||
|
|
||||||
|
- Fix warnings when `WARN_CREATE_GLOBAL` is set prior to sourcing zsh-syntax-highlighting.
|
||||||
|
(z-sy-h already sets `WARN_CREATE_GLOBAL` internally.)
|
||||||
|
(da60234fb236)
|
||||||
|
|
||||||
|
- Warn only once, rather than once per keypress, when a highlighter is unavailable.
|
||||||
|
(0a9b347483ae)
|
||||||
|
|
||||||
|
|
||||||
|
# Changes in version 0.4.1
|
||||||
|
|
||||||
|
## Fixes:
|
||||||
|
|
||||||
|
- Arguments to widgets were not properly dash-escaped. Only matters for widgets
|
||||||
|
that take arguments (i.e., that are invoked as `zle ${widget} -- ${args}`).
|
||||||
|
(282c7134e8ac, reverts c808d2187a73)
|
||||||
|
|
||||||
|
|
||||||
|
# Changes in version 0.4.0
|
||||||
|
|
||||||
|
|
||||||
|
## Added highlighting of:
|
||||||
|
|
||||||
|
- incomplete sudo commands
|
||||||
|
(a3047a912100, 2f05620b19ae)
|
||||||
|
|
||||||
|
sudo;
|
||||||
|
sudo -u;
|
||||||
|
|
||||||
|
- command words following reserved words
|
||||||
|
(#207, #222, b397b12ac139 et seq, 6fbd2aa9579b et seq, 8b4adbd991b0)
|
||||||
|
|
||||||
|
if ls; then ls; else ls; fi
|
||||||
|
repeat 10 do ls; done
|
||||||
|
|
||||||
|
(The `ls` are now highlighted as a command.)
|
||||||
|
|
||||||
|
- comments (when `INTERACTIVE_COMMENTS` is set)
|
||||||
|
(#163, #167, 693de99a9030)
|
||||||
|
|
||||||
|
echo Hello # comment
|
||||||
|
|
||||||
|
- closing brackets of arithmetic expansion, subshells, and blocks
|
||||||
|
(#226, a59f442d2d34, et seq)
|
||||||
|
|
||||||
|
(( foo ))
|
||||||
|
( foo )
|
||||||
|
{ foo }
|
||||||
|
|
||||||
|
- command names enabled by the `PATH_DIRS` option
|
||||||
|
(#228, 96ee5116b182)
|
||||||
|
|
||||||
|
# When ~/bin/foo/bar exists, is executable, ~/bin is in $PATH,
|
||||||
|
# and 'setopt PATH_DIRS' is in effect
|
||||||
|
foo/bar
|
||||||
|
|
||||||
|
- parameter expansions with braces inside double quotes
|
||||||
|
(#186, 6e3720f39d84)
|
||||||
|
|
||||||
|
echo "${foo}"
|
||||||
|
|
||||||
|
- parameter expansions in command word
|
||||||
|
(#101, 4fcfb15913a2)
|
||||||
|
|
||||||
|
x=/bin/ls
|
||||||
|
$x -l
|
||||||
|
|
||||||
|
- the command separators '|&', '&!', '&|'
|
||||||
|
|
||||||
|
view file.pdf &! ls
|
||||||
|
|
||||||
|
|
||||||
|
## Fixed highlighting of:
|
||||||
|
|
||||||
|
- precommand modifiers at non-command-word position
|
||||||
|
(#209, 2c9f8c8c95fa)
|
||||||
|
|
||||||
|
ls command foo
|
||||||
|
|
||||||
|
- sudo commands with infix redirections
|
||||||
|
(#221, be006aded590, 86e924970911)
|
||||||
|
|
||||||
|
sudo -u >/tmp/foo.out user ls
|
||||||
|
|
||||||
|
- subshells; anonymous functions
|
||||||
|
(#166, #194, 0d1bfbcbfa67, 9e178f9f3948)
|
||||||
|
|
||||||
|
(true)
|
||||||
|
() { true }
|
||||||
|
|
||||||
|
- parameter assignment statements with no command
|
||||||
|
(#205, 01d7eeb3c713)
|
||||||
|
|
||||||
|
A=1;
|
||||||
|
|
||||||
|
(The semicolon used to be highlighted as a mistake)
|
||||||
|
|
||||||
|
- cursor highlighter: Remove the cursor highlighting when accepting a line.
|
||||||
|
(#109, 4f0c293fdef0)
|
||||||
|
|
||||||
|
|
||||||
|
## Removed features:
|
||||||
|
|
||||||
|
- Removed highlighting of approximate paths (`path_approx`).
|
||||||
|
(#187, 98aee7f8b9a3)
|
||||||
|
|
||||||
|
|
||||||
|
## Other changes:
|
||||||
|
|
||||||
|
- main highlighter refactored to use states rather than booleans.
|
||||||
|
(2080a441ac49, et seq)
|
||||||
|
|
||||||
|
- Fix initialization when sourcing `zsh-syntax-highlighting.zsh` via a symlink
|
||||||
|
(083c47b00707)
|
||||||
|
|
||||||
|
- docs: Add screenshot.
|
||||||
|
(57624bb9f64b)
|
||||||
|
|
||||||
|
- widgets wrapping: Don't add '--' when invoking widgets.
|
||||||
|
(c808d2187a73) [_reverted in 0.4.1_]
|
||||||
|
|
||||||
|
- Refresh highlighting upon `accept-*` widgets (`accept-line` et al).
|
||||||
|
(59fbdda64c21)
|
||||||
|
|
||||||
|
- Stop leaking match/mbegin/mend to global scope (thanks to upstream
|
||||||
|
`WARN_CREATE_GLOBAL` improvements).
|
||||||
|
(d3deffbf46a4)
|
||||||
|
|
||||||
|
- 'make install': Permit setting `$(SHARE_DIR)` from the environment.
|
||||||
|
(e1078a8b4cf1)
|
||||||
|
|
||||||
|
- driver: Tolerate KSH_ARRAYS being set in the calling context.
|
||||||
|
(#162, 8f19af6b319d)
|
||||||
|
|
||||||
|
- 'make install': Install documentation fully and properly.
|
||||||
|
(#219, b1619c001390, et seq)
|
||||||
|
|
||||||
|
- docs: Improve 'main' highlighter's documentation.
|
||||||
|
(00de155063f5, 7d4252f5f596)
|
||||||
|
|
||||||
|
- docs: Moved to a new docs/ tree; assorted minor updates
|
||||||
|
(c575f8f37567, 5b34c23cfad5, et seq)
|
||||||
|
|
||||||
|
- docs: Split README.md into INSTALL.md
|
||||||
|
(0b3183f6cb9a)
|
||||||
|
|
||||||
|
- driver: Report `$ZSH_HIGHLIGHT_REVISION` when running from git
|
||||||
|
(84734ba95026)
|
||||||
|
|
||||||
|
|
||||||
|
## Developer-visible changes:
|
||||||
|
|
||||||
|
- Test harness converted to [TAP](http://testanything.org/tap-specification.html) format
|
||||||
|
(d99aa58aaaef, et seq)
|
||||||
|
|
||||||
|
- Run each test in a separate subprocess, isolating them from each other
|
||||||
|
(d99aa58aaaef, et seq)
|
||||||
|
|
||||||
|
- Fix test failure with nonexisting $HOME
|
||||||
|
(#216, b2ac98b98150)
|
||||||
|
|
||||||
|
- Test output is now colorized.
|
||||||
|
(4d3da30f8b72, 6fe07c096109)
|
||||||
|
|
||||||
|
- Document `make install`
|
||||||
|
(a18a7427fd2c)
|
||||||
|
|
||||||
|
- tests: Allow specifying the zsh binary to use.
|
||||||
|
(557bb7e0c6a0)
|
||||||
|
|
||||||
|
- tests: Add 'make perf' target
|
||||||
|
(4513eaea71d7)
|
||||||
|
|
||||||
|
- tests: Run each test in a sandbox directory
|
||||||
|
(c01533920245)
|
||||||
|
|
||||||
|
|
||||||
|
# Changes in version 0.3.0
|
||||||
|
|
||||||
|
|
||||||
|
## Added highlighting of:
|
||||||
|
|
||||||
|
- suffix aliases (requires zsh 5.1.1 or newer):
|
||||||
|
|
||||||
|
alias -s png=display
|
||||||
|
foo.png
|
||||||
|
|
||||||
|
- prefix redirections:
|
||||||
|
|
||||||
|
<foo.txt cat
|
||||||
|
|
||||||
|
- redirection operators:
|
||||||
|
|
||||||
|
echo > foo.txt
|
||||||
|
|
||||||
|
- arithmetic evaluations:
|
||||||
|
|
||||||
|
(( 42 ))
|
||||||
|
|
||||||
|
- $'' strings, including \x/\octal/\u/\U escapes
|
||||||
|
|
||||||
|
: $'foo\u0040bar'
|
||||||
|
|
||||||
|
- multiline strings:
|
||||||
|
|
||||||
|
% echo "line 1
|
||||||
|
line 2"
|
||||||
|
|
||||||
|
- string literals that haven't been finished:
|
||||||
|
|
||||||
|
% echo "Hello, world
|
||||||
|
|
||||||
|
- command words that involve tilde expansion:
|
||||||
|
|
||||||
|
% ~/bin/foo
|
||||||
|
|
||||||
|
|
||||||
|
## Fixed highlighting of:
|
||||||
|
|
||||||
|
- quoted command words:
|
||||||
|
|
||||||
|
% \ls
|
||||||
|
|
||||||
|
- backslash escapes in "" strings:
|
||||||
|
|
||||||
|
% echo "\x41"
|
||||||
|
|
||||||
|
- noglob after command separator:
|
||||||
|
|
||||||
|
% :; noglob echo *
|
||||||
|
|
||||||
|
- glob after command separator, when the first command starts with 'noglob':
|
||||||
|
|
||||||
|
% noglob true; echo *
|
||||||
|
|
||||||
|
- the region (vi visual mode / set-mark-command) (issue #165)
|
||||||
|
|
||||||
|
- redirection and command separators that would be highlighted as `path_approx`
|
||||||
|
|
||||||
|
% echo foo;‸
|
||||||
|
% echo <‸
|
||||||
|
|
||||||
|
(where `‸` represents the cursor location)
|
||||||
|
|
||||||
|
- escaped globbing (outside quotes)
|
||||||
|
|
||||||
|
% echo \*
|
||||||
|
|
||||||
|
|
||||||
|
## Other changes:
|
||||||
|
|
||||||
|
- implemented compatibility with zsh's paste highlighting (issue #175)
|
||||||
|
|
||||||
|
- `$?` propagated correctly to wrapped widgets
|
||||||
|
|
||||||
|
- don't leak $REPLY into global scope
|
||||||
|
|
||||||
|
|
||||||
|
## Developer-visible changes:
|
||||||
|
|
||||||
|
- added makefile with `install` and `test` targets
|
||||||
|
|
||||||
|
- set `warn_create_global` internally
|
||||||
|
|
||||||
|
- document release process
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Version 0.2.1
|
||||||
|
|
||||||
|
(Start of changelog.)
|
||||||
|
|
||||||
@@ -0,0 +1,97 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Syntax highlighting is done by pluggable highlighters:
|
||||||
|
|
||||||
|
* `main` - the base highlighter, and the only one [active by default][1].
|
||||||
|
* `brackets` - [matches brackets][2] and parenthesis.
|
||||||
|
* `pattern` - matches [user-defined patterns][3].
|
||||||
|
* `cursor` - matches [the cursor position][4].
|
||||||
|
* `root` - highlights the whole command line [if the current user is root][5].
|
||||||
|
* `line` - applied to [the whole command line][6].
|
||||||
|
|
||||||
|
[1]: highlighters/main.md
|
||||||
|
[2]: highlighters/brackets.md
|
||||||
|
[3]: highlighters/pattern.md
|
||||||
|
[4]: highlighters/cursor.md
|
||||||
|
[5]: highlighters/root.md
|
||||||
|
[6]: highlighters/line.md
|
||||||
|
|
||||||
|
|
||||||
|
How to activate highlighters
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
To activate an highlighter, add it to the `ZSH_HIGHLIGHT_HIGHLIGHTERS` array in
|
||||||
|
`~/.zshrc`, for example:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_HIGHLIGHTERS=(main brackets pattern cursor)
|
||||||
|
|
||||||
|
By default, `$ZSH_HIGHLIGHT_HIGHLIGHTERS` is unset and only the `main`
|
||||||
|
highlighter is active.
|
||||||
|
|
||||||
|
|
||||||
|
How to tweak highlighters
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Highlighters look up styles from the `ZSH_HIGHLIGHT_STYLES` associative array.
|
||||||
|
Navigate into the [individual highlighters' documentation](highlighters/) to
|
||||||
|
see what styles (keys) each highlighter defines; the syntax for values is the
|
||||||
|
same as the syntax of "types of highlighting" of the zsh builtin
|
||||||
|
`$zle_highlight` array, which is documented in [the `zshzle(1)` manual
|
||||||
|
page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
|
|
||||||
|
Some highlighters support additional configuration parameters; see each
|
||||||
|
highlighter's documentation for details and examples.
|
||||||
|
|
||||||
|
|
||||||
|
How to implement a new highlighter
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
To create your own `acme` highlighter:
|
||||||
|
|
||||||
|
* Create your script at
|
||||||
|
`highlighters/acme/acme-highlighter.zsh`.
|
||||||
|
|
||||||
|
* Implement the `_zsh_highlight_highlighter_acme_predicate` function.
|
||||||
|
This function must return 0 when the highlighter needs to be called and
|
||||||
|
non-zero otherwise, for example:
|
||||||
|
|
||||||
|
_zsh_highlight_highlighter_acme_predicate() {
|
||||||
|
# Call this highlighter in SVN working copies
|
||||||
|
[[ -d .svn ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
* Implement the `_zsh_highlight_highlighter_acme_paint` function.
|
||||||
|
This function does the actual syntax highlighting, by calling
|
||||||
|
`_zsh_highlight_add_highlight` with the start and end of the region to
|
||||||
|
be highlighted and the `ZSH_HIGHLIGHT_STYLES` key to use. Define the default
|
||||||
|
style for that key in the highlighter script outside of any function with
|
||||||
|
`: ${ZSH_HIGHLIGHT_STYLES[key]:=value}`, being sure to prefix
|
||||||
|
the key with your highlighter name and a colon. For example:
|
||||||
|
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[acme:aurora]:=fg=green}
|
||||||
|
|
||||||
|
_zsh_highlight_highlighter_acme_paint() {
|
||||||
|
# Colorize the whole buffer with the 'aurora' style
|
||||||
|
_zsh_highlight_add_highlight 0 $#BUFFER acme:aurora
|
||||||
|
}
|
||||||
|
|
||||||
|
* Name your own functions and global variables `_zsh_highlight_acme_*`.
|
||||||
|
|
||||||
|
- In zsh-syntax-highlighting 0.4.0 and earlier, the entrypoints
|
||||||
|
`_zsh_highlight_highlighter_acme_predicate` and
|
||||||
|
`_zsh_highlight_highlighter_acme_paint`
|
||||||
|
were named
|
||||||
|
`_zsh_highlight_acme_highlighter_predicate` and
|
||||||
|
`_zsh_highlight_highlighter_acme_paint` respectively.
|
||||||
|
|
||||||
|
These names are still supported for backwards compatibility;
|
||||||
|
however, support for them will be removed in a a future major or minor release (v0.x.0 or v1.0.0).
|
||||||
|
|
||||||
|
* Activate your highlighter in `~/.zshrc`:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_HIGHLIGHTERS+=(acme)
|
||||||
|
|
||||||
|
* [Write tests](../tests/README.md).
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / brackets
|
||||||
|
-------------------------------------------------
|
||||||
|
|
||||||
|
This is the `brackets` highlighter, that highlights brackets and parentheses, and
|
||||||
|
matches them.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
This highlighter defines the following styles:
|
||||||
|
|
||||||
|
* `bracket-error` - unmatched brackets
|
||||||
|
* `bracket-level-N` - brackets with nest level N
|
||||||
|
* `cursor-matchingbracket` - the matching bracket, if cursor is on a bracket
|
||||||
|
|
||||||
|
To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
|
||||||
|
for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
# To define styles for nested brackets up to level 4
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]='fg=blue,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]='fg=red,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-3]='fg=yellow,bold'
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-4]='fg=magenta,bold'
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / cursor
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
This is the `cursor` highlighter, that highlights the cursor.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
This highlighter defines the following styles:
|
||||||
|
|
||||||
|
* `cursor` - the style for the current cursor position
|
||||||
|
|
||||||
|
To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
|
||||||
|
for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[cursor]='bg=blue'
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / line
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
This is the `line` highlighter, that highlights the whole line.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
This highlighter defines the following styles:
|
||||||
|
|
||||||
|
* `line` - the style for the whole line
|
||||||
|
|
||||||
|
To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
|
||||||
|
for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[line]='bold'
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,91 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / main
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
This is the `main` highlighter, that highlights:
|
||||||
|
|
||||||
|
* Commands
|
||||||
|
* Options
|
||||||
|
* Arguments
|
||||||
|
* Paths
|
||||||
|
* Strings
|
||||||
|
|
||||||
|
This highlighter is active by default.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
This highlighter defines the following styles:
|
||||||
|
|
||||||
|
* `unknown-token` - unknown tokens / errors
|
||||||
|
* `reserved-word` - shell reserved words (`if`, `for`)
|
||||||
|
* `alias` - aliases
|
||||||
|
* `suffix-alias` - suffix aliases (requires zsh 5.1.1 or newer)
|
||||||
|
* `builtin` - shell builtin commands (`shift`, `pwd`, `zstyle`)
|
||||||
|
* `function` - function names
|
||||||
|
* `command` - command names
|
||||||
|
* `precommand` - precommand modifiers (e.g., `noglob`, `builtin`)
|
||||||
|
* `commandseparator` - command separation tokens (`;`, `&&`)
|
||||||
|
* `hashed-command` - hashed commands
|
||||||
|
* `path` - existing filenames
|
||||||
|
* `path_pathseparator` - path separators in filenames (`/`); if unset, `path` is used (default)
|
||||||
|
* `path_prefix` - prefixes of existing filenames
|
||||||
|
* `path_prefix_pathseparator` - path separators in prefixes of existing filenames (`/`); if unset, `path_prefix` is used (default)
|
||||||
|
* `globbing` - globbing expressions (`*.txt`)
|
||||||
|
* `history-expansion` - history expansion expressions (`!foo` and `^foo^bar`)
|
||||||
|
* `single-hyphen-option` - single hyphen options (`-o`)
|
||||||
|
* `double-hyphen-option` - double hyphen options (`--option`)
|
||||||
|
* `back-quoted-argument` - backquoted expressions (`` `foo` ``)
|
||||||
|
* `single-quoted-argument` - single quoted arguments (`` 'foo' ``)
|
||||||
|
* `double-quoted-argument` - double quoted arguments (`` "foo" ``)
|
||||||
|
* `dollar-quoted-argument` - dollar quoted arguments (`` $'foo' ``)
|
||||||
|
* `dollar-double-quoted-argument` - parameter expansion inside double quotes (`$foo` inside `""`)
|
||||||
|
* `back-double-quoted-argument` - back double quoted arguments (`\x` inside `""`)
|
||||||
|
* `back-dollar-quoted-argument` - back dollar quoted arguments (`\x` inside `$''`)
|
||||||
|
* `assign` - parameter assignments
|
||||||
|
* `redirection` - redirection operators (`<`, `>`, etc)
|
||||||
|
* `comment` - comments, when `setopt INTERACTIVE_COMMENTS` is in effect (`echo # foo`)
|
||||||
|
* `arg0` - a command word other than one of those enumrated above (other than a command, precommand, alias, function, or shell builtin command).
|
||||||
|
* `default` - everything else
|
||||||
|
|
||||||
|
To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
|
||||||
|
for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
# Declare the variable
|
||||||
|
typeset -A ZSH_HIGHLIGHT_STYLES
|
||||||
|
|
||||||
|
# To differentiate aliases from other command types
|
||||||
|
ZSH_HIGHLIGHT_STYLES[alias]='fg=magenta,bold'
|
||||||
|
|
||||||
|
# To have paths colored instead of underlined
|
||||||
|
ZSH_HIGHLIGHT_STYLES[path]='fg=cyan'
|
||||||
|
|
||||||
|
# To disable highlighting of globbing expressions
|
||||||
|
ZSH_HIGHLIGHT_STYLES[globbing]='none'
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
### Useless trivia
|
||||||
|
|
||||||
|
#### Forward compatibility.
|
||||||
|
|
||||||
|
zsh-syntax-highlighting attempts to be forward-compatible with zsh.
|
||||||
|
Specifically, we attempt to facilitate highlighting _command word_ types that
|
||||||
|
had not yet been invented when this version of zsh-syntax-highlighting was
|
||||||
|
released.
|
||||||
|
|
||||||
|
A _command word_ is something like a function name, external command name, et
|
||||||
|
cetera. (See
|
||||||
|
[Simple Commands & Pipelines in `zshmisc(1)`][zshmisc-Simple-Commands-And-Pipelines]
|
||||||
|
for a formal definition.)
|
||||||
|
|
||||||
|
If a new _kind_ of command word is ever added to zsh — something conceptually
|
||||||
|
different than "function" and "alias" and "external command" — then command words
|
||||||
|
of that (new) kind will be highlighted by the style `arg0_$kind`,
|
||||||
|
where `$kind` is the output of `type -w` on the new kind of command word. If that
|
||||||
|
style is not defined, then the style `arg0` will be used instead.
|
||||||
|
|
||||||
|
[zshmisc-Simple-Commands-And-Pipelines]: http://zsh.sourceforge.net/Doc/Release/Shell-Grammar.html#Simple-Commands-_0026-Pipelines
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / pattern
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
This is the `pattern` highlighter, that highlights user-defined patterns.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
To use this highlighter, associate patterns with styles in the
|
||||||
|
`ZSH_HIGHLIGHT_PATTERNS` associative array, for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
# To have commands starting with `rm -rf` in red:
|
||||||
|
ZSH_HIGHLIGHT_PATTERNS+=('rm -rf *' 'fg=white,bold,bg=red')
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters / root
|
||||||
|
---------------------------------------------
|
||||||
|
|
||||||
|
This is the `root` highlighter, that highlights the whole line if the current
|
||||||
|
user is root.
|
||||||
|
|
||||||
|
|
||||||
|
### How to tweak it
|
||||||
|
|
||||||
|
This highlighter defines the following styles:
|
||||||
|
|
||||||
|
* `root` - the style for the whole line if the current user is root.
|
||||||
|
|
||||||
|
To override one of those styles, change its entry in `ZSH_HIGHLIGHT_STYLES`,
|
||||||
|
for example in `~/.zshrc`:
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[root]='bg=red'
|
||||||
|
|
||||||
|
The syntax for values is the same as the syntax of "types of highlighting" of
|
||||||
|
the zsh builtin `$zle_highlight` array, which is documented in [the `zshzle(1)`
|
||||||
|
manual page][zshzle-Character-Highlighting].
|
||||||
|
|
||||||
|
[zshzle-Character-Highlighting]: http://zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#Character-Highlighting
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
zsh-syntax-highlighting / highlighters
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Navigate into the individual highlighters' documentation to see
|
||||||
|
what styles (`$ZSH_HIGHLIGHT_STYLES` keys) each highlighter defines.
|
||||||
|
|
||||||
|
Refer to the [documentation on highlighters](../docs/highlighters.md) for further
|
||||||
|
information.
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../docs/highlighters/brackets.md
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Define default styles.
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-error]:=fg=red,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-level-1]:=fg=blue,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-level-2]:=fg=green,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-level-3]:=fg=magenta,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-level-4]:=fg=yellow,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[bracket-level-5]:=fg=cyan,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[cursor-matchingbracket]:=standout}
|
||||||
|
|
||||||
|
# Whether the brackets highlighter should be called or not.
|
||||||
|
_zsh_highlight_highlighter_brackets_predicate()
|
||||||
|
{
|
||||||
|
[[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved || _zsh_highlight_buffer_modified
|
||||||
|
}
|
||||||
|
|
||||||
|
# Brackets highlighting function.
|
||||||
|
_zsh_highlight_highlighter_brackets_paint()
|
||||||
|
{
|
||||||
|
local char style
|
||||||
|
local -i bracket_color_size=${#ZSH_HIGHLIGHT_STYLES[(I)bracket-level-*]} buflen=${#BUFFER} level=0 matchingpos pos
|
||||||
|
local -A levelpos lastoflevel matching
|
||||||
|
|
||||||
|
# Find all brackets and remember which one is matching
|
||||||
|
for (( pos = 1; pos <= buflen; pos++ )) ; do
|
||||||
|
char=$BUFFER[pos]
|
||||||
|
case $char in
|
||||||
|
["([{"])
|
||||||
|
levelpos[$pos]=$((++level))
|
||||||
|
lastoflevel[$level]=$pos
|
||||||
|
;;
|
||||||
|
[")]}"])
|
||||||
|
matchingpos=$lastoflevel[$level]
|
||||||
|
levelpos[$pos]=$((level--))
|
||||||
|
if _zsh_highlight_brackets_match $matchingpos $pos; then
|
||||||
|
matching[$matchingpos]=$pos
|
||||||
|
matching[$pos]=$matchingpos
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
['"'\'])
|
||||||
|
# Skip everything inside quotes
|
||||||
|
pos=$BUFFER[(ib:pos+1:)$char]
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
# Now highlight all found brackets
|
||||||
|
for pos in ${(k)levelpos}; do
|
||||||
|
if (( $+matching[$pos] )); then
|
||||||
|
if (( bracket_color_size )); then
|
||||||
|
style=bracket-level-$(( (levelpos[$pos] - 1) % bracket_color_size + 1 ))
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
style=bracket-error
|
||||||
|
fi
|
||||||
|
_zsh_highlight_add_highlight $((pos - 1)) $pos $style
|
||||||
|
done
|
||||||
|
|
||||||
|
# If cursor is on a bracket, then highlight corresponding bracket, if any.
|
||||||
|
if [[ $WIDGET != zle-line-finish ]]; then
|
||||||
|
pos=$((CURSOR + 1))
|
||||||
|
if [[ -n $levelpos[$pos] ]] && [[ -n $matching[$pos] ]]; then
|
||||||
|
local -i otherpos=$matching[$pos]
|
||||||
|
_zsh_highlight_add_highlight $((otherpos - 1)) $otherpos cursor-matchingbracket
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper function to differentiate type
|
||||||
|
_zsh_highlight_brackets_match()
|
||||||
|
{
|
||||||
|
case $BUFFER[$1] in
|
||||||
|
\() [[ $BUFFER[$2] == \) ]];;
|
||||||
|
\[) [[ $BUFFER[$2] == \] ]];;
|
||||||
|
\{) [[ $BUFFER[$2] == \} ]];;
|
||||||
|
*) false;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
+37
@@ -0,0 +1,37 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
WIDGET=zle-line-finish
|
||||||
|
|
||||||
|
BUFFER=': $foo[bar]'
|
||||||
|
CURSOR=6 # cursor is zero-based
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"11 11 NONE"
|
||||||
|
)
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
|
||||||
|
|
||||||
|
BUFFER=': ((( )))'
|
||||||
|
CURSOR=2 # cursor is zero-based
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"9 9 cursor-matchingbracket"
|
||||||
|
)
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=': (x)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 5 NONE"
|
||||||
|
)
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
|
||||||
|
|
||||||
|
BUFFER=': ({[({[(x)]})]})'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"3 3 bracket-level-1"
|
||||||
|
"4 4 bracket-level-2"
|
||||||
|
"5 5 bracket-level-3"
|
||||||
|
"6 6 bracket-level-1"
|
||||||
|
"7 7 bracket-level-2"
|
||||||
|
"8 8 bracket-level-3"
|
||||||
|
"9 9 bracket-level-1"
|
||||||
|
"11 11 bracket-level-1"
|
||||||
|
"12 12 bracket-level-3"
|
||||||
|
"13 13 bracket-level-2"
|
||||||
|
"14 14 bracket-level-1"
|
||||||
|
"15 15 bracket-level-3"
|
||||||
|
"16 16 bracket-level-2"
|
||||||
|
"17 17 bracket-level-1"
|
||||||
|
)
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
|
||||||
|
BUFFER='echo ({x}]'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 6 bracket-error" # (
|
||||||
|
"7 7 bracket-level-2" # {
|
||||||
|
"9 9 bracket-level-2" # }
|
||||||
|
"10 10 bracket-error" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
|
||||||
|
BUFFER=': {"{x}"}'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"3 3 bracket-level-1"
|
||||||
|
"4 8 NONE"
|
||||||
|
"9 9 bracket-level-1"
|
||||||
|
)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-3]=
|
||||||
|
|
||||||
|
BUFFER='echo $(echo ${(z)array})'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"7 7 bracket-level-1" # (
|
||||||
|
"14 14 bracket-level-2" # {
|
||||||
|
"15 15 bracket-level-3" # (
|
||||||
|
"17 17 bracket-level-3" # )
|
||||||
|
"23 23 bracket-level-2" # }
|
||||||
|
"24 24 bracket-level-1" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
|
||||||
|
BUFFER=': "\"{x"'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"3 9 NONE 'issue #303'"
|
||||||
|
)
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='echo "foo ( bar"'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 16 NONE" # We expect the brackets highlighter to do nothing
|
||||||
|
)
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
|
||||||
|
BUFFER='echo ({x})'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 6 bracket-level-1" # (
|
||||||
|
"7 7 bracket-level-2" # {
|
||||||
|
"9 9 bracket-level-2" # }
|
||||||
|
"10 10 bracket-level-1" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-2]=
|
||||||
|
|
||||||
|
BUFFER='echo ({x}'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 6 bracket-error" # (
|
||||||
|
"7 7 bracket-level-2" # {
|
||||||
|
"9 9 bracket-level-2" # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_STYLES[bracket-level-1]=
|
||||||
|
|
||||||
|
BUFFER='echo {x})'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 6 bracket-level-1" # {
|
||||||
|
"8 8 bracket-level-1" # }
|
||||||
|
"9 9 bracket-error" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../docs/highlighters/cursor.md
|
||||||
@@ -0,0 +1,47 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Define default styles.
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[cursor]:=standout}
|
||||||
|
|
||||||
|
# Whether the cursor highlighter should be called or not.
|
||||||
|
_zsh_highlight_highlighter_cursor_predicate()
|
||||||
|
{
|
||||||
|
# remove cursor highlighting when the line is finished
|
||||||
|
[[ $WIDGET == zle-line-finish ]] || _zsh_highlight_cursor_moved
|
||||||
|
}
|
||||||
|
|
||||||
|
# Cursor highlighting function.
|
||||||
|
_zsh_highlight_highlighter_cursor_paint()
|
||||||
|
{
|
||||||
|
[[ $WIDGET == zle-line-finish ]] && return
|
||||||
|
|
||||||
|
_zsh_highlight_add_highlight $CURSOR $(( $CURSOR + 1 )) cursor
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../docs/highlighters/line.md
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2010-2011 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Define default styles.
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[line]:=}
|
||||||
|
|
||||||
|
# Whether the root highlighter should be called or not.
|
||||||
|
_zsh_highlight_highlighter_line_predicate()
|
||||||
|
{
|
||||||
|
_zsh_highlight_buffer_modified
|
||||||
|
}
|
||||||
|
|
||||||
|
# root highlighting function.
|
||||||
|
_zsh_highlight_highlighter_line_paint()
|
||||||
|
{
|
||||||
|
_zsh_highlight_add_highlight 0 $#BUFFER line
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
../../docs/highlighters/main.md
|
||||||
@@ -0,0 +1,901 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2010-2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
# Define default styles.
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[default]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[unknown-token]:=fg=red,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[reserved-word]:=fg=yellow}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[suffix-alias]:=fg=green,underline}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[precommand]:=fg=green,underline}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[commandseparator]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[path]:=underline}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[path_pathseparator]:=}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[path_prefix_pathseparator]:=}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[globbing]:=fg=blue}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[history-expansion]:=fg=blue}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[single-hyphen-option]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[double-hyphen-option]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[back-quoted-argument]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[single-quoted-argument]:=fg=yellow}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[double-quoted-argument]:=fg=yellow}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[dollar-quoted-argument]:=fg=yellow}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[dollar-double-quoted-argument]:=fg=cyan}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[back-double-quoted-argument]:=fg=cyan}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[back-dollar-quoted-argument]:=fg=cyan}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[assign]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[redirection]:=none}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[comment]:=fg=black,bold}
|
||||||
|
: ${ZSH_HIGHLIGHT_STYLES[arg0]:=fg=green}
|
||||||
|
|
||||||
|
# Whether the highlighter should be called or not.
|
||||||
|
_zsh_highlight_highlighter_main_predicate()
|
||||||
|
{
|
||||||
|
# may need to remove path_prefix highlighting when the line ends
|
||||||
|
[[ $WIDGET == zle-line-finish ]] || _zsh_highlight_buffer_modified
|
||||||
|
}
|
||||||
|
|
||||||
|
# Helper to deal with tokens crossing line boundaries.
|
||||||
|
_zsh_highlight_main_add_region_highlight() {
|
||||||
|
integer start=$1 end=$2
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
if (( $+argv[2] )); then
|
||||||
|
# Caller specified inheritance explicitly.
|
||||||
|
else
|
||||||
|
# Automate inheritance.
|
||||||
|
typeset -A fallback_of; fallback_of=(
|
||||||
|
alias arg0
|
||||||
|
suffix-alias arg0
|
||||||
|
builtin arg0
|
||||||
|
function arg0
|
||||||
|
command arg0
|
||||||
|
precommand arg0
|
||||||
|
hashed-command arg0
|
||||||
|
|
||||||
|
path_prefix path
|
||||||
|
# The path separator fallback won't ever be used, due to the optimisation
|
||||||
|
# in _zsh_highlight_main_highlighter_highlight_path_separators().
|
||||||
|
path_pathseparator path
|
||||||
|
path_prefix_pathseparator path_prefix
|
||||||
|
)
|
||||||
|
local needle=$1 value
|
||||||
|
while [[ -n ${value::=$fallback_of[$needle]} ]]; do
|
||||||
|
unset "fallback_of[$needle]" # paranoia against infinite loops
|
||||||
|
argv+=($value)
|
||||||
|
needle=$value
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The calculation was relative to $PREBUFFER$BUFFER, but region_highlight is
|
||||||
|
# relative to $BUFFER.
|
||||||
|
(( start -= $#PREBUFFER ))
|
||||||
|
(( end -= $#PREBUFFER ))
|
||||||
|
|
||||||
|
(( end < 0 )) && return # having end<0 would be a bug
|
||||||
|
(( start < 0 )) && start=0 # having start<0 is normal with e.g. multiline strings
|
||||||
|
_zsh_highlight_add_highlight $start $end "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get the type of a command.
|
||||||
|
#
|
||||||
|
# Uses the zsh/parameter module if available to avoid forks, and a
|
||||||
|
# wrapper around 'type -w' as fallback.
|
||||||
|
#
|
||||||
|
# Takes a single argument.
|
||||||
|
#
|
||||||
|
# The result will be stored in REPLY.
|
||||||
|
_zsh_highlight_main__type() {
|
||||||
|
if (( $+_zsh_highlight_main__command_type_cache )); then
|
||||||
|
REPLY=$_zsh_highlight_main__command_type_cache[(e)$1]
|
||||||
|
if [[ -n "$REPLY" ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if (( $#options_to_set )); then
|
||||||
|
setopt localoptions $options_to_set;
|
||||||
|
fi
|
||||||
|
unset REPLY
|
||||||
|
if zmodload -e zsh/parameter; then
|
||||||
|
if (( $+aliases[(e)$1] )); then
|
||||||
|
REPLY=alias
|
||||||
|
elif (( $+saliases[(e)${1##*.}] )); then
|
||||||
|
REPLY='suffix alias'
|
||||||
|
elif (( $reswords[(Ie)$1] )); then
|
||||||
|
REPLY=reserved
|
||||||
|
elif (( $+functions[(e)$1] )); then
|
||||||
|
REPLY=function
|
||||||
|
elif (( $+builtins[(e)$1] )); then
|
||||||
|
REPLY=builtin
|
||||||
|
elif (( $+commands[(e)$1] )); then
|
||||||
|
REPLY=command
|
||||||
|
# zsh 5.2 and older have a bug whereby running 'type -w ./sudo' implicitly
|
||||||
|
# runs 'hash ./sudo=/usr/local/bin/./sudo' (assuming /usr/local/bin/sudo
|
||||||
|
# exists and is in $PATH). Avoid triggering the bug, at the expense of
|
||||||
|
# falling through to the $() below, incurring a fork. (Issue #354.)
|
||||||
|
#
|
||||||
|
# The first disjunct mimics the isrelative() C call from the zsh bug.
|
||||||
|
elif { [[ $1 != */* ]] || is-at-least 5.3 } &&
|
||||||
|
! builtin type -w -- $1 >/dev/null 2>&1; then
|
||||||
|
REPLY=none
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if ! (( $+REPLY )); then
|
||||||
|
REPLY="${$(LC_ALL=C builtin type -w -- $1 2>/dev/null)##*: }"
|
||||||
|
fi
|
||||||
|
if (( $+_zsh_highlight_main__command_type_cache )); then
|
||||||
|
_zsh_highlight_main__command_type_cache[(e)$1]=$REPLY
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check whether the first argument is a redirection operator token.
|
||||||
|
# Report result via the exit code.
|
||||||
|
_zsh_highlight_main__is_redirection() {
|
||||||
|
# A redirection operator token:
|
||||||
|
# - starts with an optional single-digit number;
|
||||||
|
# - then, has a '<' or '>' character;
|
||||||
|
# - is not a process substitution [<(...) or >(...)].
|
||||||
|
[[ $1 == (<0-9>|)(\<|\>)* ]] && [[ $1 != (\<|\>)$'\x28'* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
# Resolve alias.
|
||||||
|
#
|
||||||
|
# Takes a single argument.
|
||||||
|
#
|
||||||
|
# The result will be stored in REPLY.
|
||||||
|
_zsh_highlight_main__resolve_alias() {
|
||||||
|
if zmodload -e zsh/parameter; then
|
||||||
|
REPLY=${aliases[$arg]}
|
||||||
|
else
|
||||||
|
REPLY="${"$(alias -- $arg)"#*=}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check that the top of $braces_stack has the expected value. If it does, set
|
||||||
|
# the style according to $2; otherwise, set style=unknown-token.
|
||||||
|
#
|
||||||
|
# $1: character expected to be at the top of $braces_stack
|
||||||
|
# $2: assignment to execute it if matches
|
||||||
|
_zsh_highlight_main__stack_pop() {
|
||||||
|
if [[ $braces_stack[1] == $1 ]]; then
|
||||||
|
braces_stack=${braces_stack:1}
|
||||||
|
eval "$2"
|
||||||
|
else
|
||||||
|
style=unknown-token
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main syntax highlighting function.
|
||||||
|
_zsh_highlight_highlighter_main_paint()
|
||||||
|
{
|
||||||
|
## Before we even 'emulate -L', we must test a few options that would reset.
|
||||||
|
if [[ -o interactive_comments ]]; then
|
||||||
|
local interactive_comments= # set to empty
|
||||||
|
fi
|
||||||
|
if [[ -o ignore_braces ]] || eval '[[ -o ignore_close_braces ]] 2>/dev/null'; then
|
||||||
|
local right_brace_is_recognised_everywhere=false
|
||||||
|
else
|
||||||
|
local right_brace_is_recognised_everywhere=true
|
||||||
|
fi
|
||||||
|
if [[ -o path_dirs ]]; then
|
||||||
|
integer path_dirs_was_set=1
|
||||||
|
else
|
||||||
|
integer path_dirs_was_set=0
|
||||||
|
fi
|
||||||
|
if [[ -o multi_func_def ]]; then
|
||||||
|
integer multi_func_def=1
|
||||||
|
else
|
||||||
|
integer multi_func_def=0
|
||||||
|
fi
|
||||||
|
emulate -L zsh
|
||||||
|
setopt localoptions extendedglob bareglobqual
|
||||||
|
|
||||||
|
# At the PS3 prompt and in vared, highlight nothing.
|
||||||
|
#
|
||||||
|
# (We can't check this in _zsh_highlight_highlighter_main_predicate because
|
||||||
|
# if the predicate returns false, the previous value of region_highlight
|
||||||
|
# would be reused.)
|
||||||
|
if [[ $CONTEXT == (select|vared) ]]; then
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
## Variable declarations and initializations
|
||||||
|
local start_pos=0 end_pos highlight_glob=true arg style
|
||||||
|
local in_array_assignment=false # true between 'a=(' and the matching ')'
|
||||||
|
typeset -a ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR
|
||||||
|
typeset -a ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS
|
||||||
|
typeset -a ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW
|
||||||
|
local -a options_to_set # used in callees
|
||||||
|
local buf="$PREBUFFER$BUFFER"
|
||||||
|
integer len="${#buf}"
|
||||||
|
integer pure_buf_len=$(( len - ${#PREBUFFER} )) # == $#BUFFER, used e.g. in *_check_path
|
||||||
|
|
||||||
|
# "R" for round
|
||||||
|
# "Q" for square
|
||||||
|
# "Y" for curly
|
||||||
|
# "D" for do/done
|
||||||
|
# "$" for 'end' (matches 'foreach' always; also used with cshjunkiequotes in repeat/while)
|
||||||
|
local braces_stack
|
||||||
|
|
||||||
|
if (( path_dirs_was_set )); then
|
||||||
|
options_to_set+=( PATH_DIRS )
|
||||||
|
fi
|
||||||
|
unset path_dirs_was_set
|
||||||
|
|
||||||
|
ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR=(
|
||||||
|
'|' '||' ';' '&' '&&'
|
||||||
|
'|&'
|
||||||
|
'&!' '&|'
|
||||||
|
# ### 'case' syntax, but followed by a pattern, not by a command
|
||||||
|
# ';;' ';&' ';|'
|
||||||
|
)
|
||||||
|
ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS=(
|
||||||
|
'builtin' 'command' 'exec' 'nocorrect' 'noglob'
|
||||||
|
'pkexec' # immune to #121 because it's usually not passed --option flags
|
||||||
|
)
|
||||||
|
|
||||||
|
# Tokens that, at (naively-determined) "command position", are followed by
|
||||||
|
# a de jure command position. All of these are reserved words.
|
||||||
|
ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW=(
|
||||||
|
$'\x7b' # block
|
||||||
|
$'\x28' # subshell
|
||||||
|
'()' # anonymous function
|
||||||
|
'while'
|
||||||
|
'until'
|
||||||
|
'if'
|
||||||
|
'then'
|
||||||
|
'elif'
|
||||||
|
'else'
|
||||||
|
'do'
|
||||||
|
'time'
|
||||||
|
'coproc'
|
||||||
|
'!' # reserved word; unrelated to $histchars[1]
|
||||||
|
)
|
||||||
|
|
||||||
|
local -a match mbegin mend
|
||||||
|
|
||||||
|
# State machine
|
||||||
|
#
|
||||||
|
# The states are:
|
||||||
|
# - :start: Command word
|
||||||
|
# - :sudo_opt: A leading-dash option to sudo (such as "-u" or "-i")
|
||||||
|
# - :sudo_arg: The argument to a sudo leading-dash option that takes one,
|
||||||
|
# when given as a separate word; i.e., "foo" in "-u foo" (two
|
||||||
|
# words) but not in "-ufoo" (one word).
|
||||||
|
# - :regular: "Not a command word", and command delimiters are permitted.
|
||||||
|
# Mainly used to detect premature termination of commands.
|
||||||
|
# - :always: The word 'always' in the «{ foo } always { bar }» syntax.
|
||||||
|
#
|
||||||
|
# When the kind of a word is not yet known, $this_word / $next_word may contain
|
||||||
|
# multiple states. For example, after "sudo -i", the next word may be either
|
||||||
|
# another --flag or a command name, hence the state would include both :start:
|
||||||
|
# and :sudo_opt:.
|
||||||
|
#
|
||||||
|
# The tokens are always added with both leading and trailing colons to serve as
|
||||||
|
# word delimiters (an improvised array); [[ $x == *:foo:* ]] and x=${x//:foo:/}
|
||||||
|
# will DTRT regardless of how many elements or repetitions $x has..
|
||||||
|
#
|
||||||
|
# Handling of redirections: upon seeing a redirection token, we must stall
|
||||||
|
# the current state --- that is, the value of $this_word --- for two iterations
|
||||||
|
# (one for the redirection operator, one for the word following it representing
|
||||||
|
# the redirection target). Therefore, we set $in_redirection to 2 upon seeing a
|
||||||
|
# redirection operator, decrement it each iteration, and stall the current state
|
||||||
|
# when it is non-zero. Thus, upon reaching the next word (the one that follows
|
||||||
|
# the redirection operator and target), $this_word will still contain values
|
||||||
|
# appropriate for the word immediately following the word that preceded the
|
||||||
|
# redirection operator.
|
||||||
|
#
|
||||||
|
# The "the previous word was a redirection operator" state is not communicated
|
||||||
|
# to the next iteration via $next_word/$this_word as usual, but via
|
||||||
|
# $in_redirection. The value of $next_word from the iteration that processed
|
||||||
|
# the operator is discarded.
|
||||||
|
#
|
||||||
|
local this_word=':start:' next_word
|
||||||
|
integer in_redirection
|
||||||
|
# Processing buffer
|
||||||
|
local proc_buf="$buf"
|
||||||
|
for arg in ${interactive_comments-${(z)buf}} \
|
||||||
|
${interactive_comments+${(zZ+c+)buf}}; do
|
||||||
|
# Initialize $next_word.
|
||||||
|
if (( in_redirection )); then
|
||||||
|
(( --in_redirection ))
|
||||||
|
fi
|
||||||
|
if (( in_redirection == 0 )); then
|
||||||
|
# Initialize $next_word to its default value.
|
||||||
|
next_word=':regular:'
|
||||||
|
else
|
||||||
|
# Stall $next_word.
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Initialize per-"simple command" [zshmisc(1)] variables:
|
||||||
|
#
|
||||||
|
# $already_added (see next paragraph)
|
||||||
|
# $style how to highlight $arg
|
||||||
|
# $in_array_assignment boolean flag for "between '(' and ')' of array assignment"
|
||||||
|
# $highlight_glob boolean flag for "'noglob' is in effect"
|
||||||
|
#
|
||||||
|
# $already_added is set to 1 to disable adding an entry to region_highlight
|
||||||
|
# for this iteration. Currently, that is done for "" and $'' strings,
|
||||||
|
# which add the entry early so escape sequences within the string override
|
||||||
|
# the string's color.
|
||||||
|
integer already_added=0
|
||||||
|
style=unknown-token
|
||||||
|
if [[ $this_word == *':start:'* ]]; then
|
||||||
|
in_array_assignment=false
|
||||||
|
if [[ $arg == 'noglob' ]]; then
|
||||||
|
highlight_glob=false
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Compute the new $start_pos and $end_pos, skipping over whitespace in $buf.
|
||||||
|
if [[ $arg == ';' ]] ; then
|
||||||
|
# We're looking for either a semicolon or a newline, whichever comes
|
||||||
|
# first. Both of these are rendered as a ";" (SEPER) by the ${(z)..}
|
||||||
|
# flag.
|
||||||
|
#
|
||||||
|
# We can't use the (Z+n+) flag because that elides the end-of-command
|
||||||
|
# token altogether, so 'echo foo\necho bar' (two commands) becomes
|
||||||
|
# indistinguishable from 'echo foo echo bar' (one command with three
|
||||||
|
# words for arguments).
|
||||||
|
local needle=$'[;\n]'
|
||||||
|
integer offset=$(( ${proc_buf[(i)$needle]} - 1 ))
|
||||||
|
(( start_pos += offset ))
|
||||||
|
(( end_pos = start_pos + $#arg ))
|
||||||
|
else
|
||||||
|
# The line was:
|
||||||
|
#
|
||||||
|
# integer offset=$(((len-start_pos)-${#${proc_buf##([[:space:]]|\\[[:space:]])#}}))
|
||||||
|
#
|
||||||
|
# - len-start_pos is length of current proc_buf; basically: initial length minus where
|
||||||
|
# we are, and proc_buf is chopped to the "where we are" (compare the "previous value
|
||||||
|
# of start_pos" below, and the len-(start_pos-offset) = len-start_pos+offset)
|
||||||
|
# - what's after main minus sign is: length of proc_buf without spaces at the beginning
|
||||||
|
# - so what the line actually did, was computing length of the spaces!
|
||||||
|
# - this can be done via (#b) flag, like below
|
||||||
|
if [[ "$proc_buf" = (#b)(#s)(([[:space:]]|\\[[:space:]])##)* ]]; then
|
||||||
|
# The first, outer parenthesis
|
||||||
|
integer offset="${#match[1]}"
|
||||||
|
else
|
||||||
|
integer offset=0
|
||||||
|
fi
|
||||||
|
((start_pos+=offset))
|
||||||
|
((end_pos=$start_pos+${#arg}))
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Compute the new $proc_buf. We advance it
|
||||||
|
# (chop off characters from the beginning)
|
||||||
|
# beyond what end_pos points to, by skipping
|
||||||
|
# as many characters as end_pos was advanced.
|
||||||
|
#
|
||||||
|
# end_pos was advanced by $offset (via start_pos)
|
||||||
|
# and by $#arg. Note the `start_pos=$end_pos`
|
||||||
|
# below.
|
||||||
|
#
|
||||||
|
# As for the [,len]. We could use [,len-start_pos+offset]
|
||||||
|
# here, but to make it easier on eyes, we use len and
|
||||||
|
# rely on the fact that Zsh simply handles that. The
|
||||||
|
# length of proc_buf is len-start_pos+offset because
|
||||||
|
# we're chopping it to match current start_pos, so its
|
||||||
|
# length matches the previous value of start_pos.
|
||||||
|
#
|
||||||
|
# Why [,-1] is slower than [,length] isn't clear.
|
||||||
|
proc_buf="${proc_buf[offset + $#arg + 1,len]}"
|
||||||
|
|
||||||
|
# Handle the INTERACTIVE_COMMENTS option.
|
||||||
|
#
|
||||||
|
# We use the (Z+c+) flag so the entire comment is presented as one token in $arg.
|
||||||
|
if [[ -n ${interactive_comments+'set'} && $arg[1] == $histchars[3] ]]; then
|
||||||
|
if [[ $this_word == *(':regular:'|':start:')* ]]; then
|
||||||
|
style=comment
|
||||||
|
else
|
||||||
|
style=unknown-token # prematurely terminated
|
||||||
|
fi
|
||||||
|
_zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
|
||||||
|
already_added=1
|
||||||
|
start_pos=$end_pos
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Analyse the current word.
|
||||||
|
if _zsh_highlight_main__is_redirection $arg ; then
|
||||||
|
# A '<' or '>', possibly followed by a digit
|
||||||
|
in_redirection=2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Special-case the first word after 'sudo'.
|
||||||
|
if (( ! in_redirection )); then
|
||||||
|
if [[ $this_word == *':sudo_opt:'* ]] && [[ $arg != -* ]]; then
|
||||||
|
this_word=${this_word//:sudo_opt:/}
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Parse the sudo command line
|
||||||
|
if (( ! in_redirection )); then
|
||||||
|
if [[ $this_word == *':sudo_opt:'* ]]; then
|
||||||
|
case "$arg" in
|
||||||
|
# Flag that requires an argument
|
||||||
|
'-'[Cgprtu]) this_word=${this_word//:start:/};
|
||||||
|
next_word=':sudo_arg:';;
|
||||||
|
# This prevents misbehavior with sudo -u -otherargument
|
||||||
|
'-'*) this_word=${this_word//:start:/};
|
||||||
|
next_word+=':start:';
|
||||||
|
next_word+=':sudo_opt:';;
|
||||||
|
*) ;;
|
||||||
|
esac
|
||||||
|
elif [[ $this_word == *':sudo_arg:'* ]]; then
|
||||||
|
next_word+=':sudo_opt:'
|
||||||
|
next_word+=':start:'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# The Great Fork: is this a command word? Is this a non-command word?
|
||||||
|
if [[ $this_word == *':always:'* && $arg == 'always' ]]; then
|
||||||
|
# try-always construct
|
||||||
|
style=reserved-word # de facto a reserved word, although not de jure
|
||||||
|
next_word=':start:'
|
||||||
|
elif [[ $this_word == *':start:'* ]] && (( in_redirection == 0 )); then # $arg is the command word
|
||||||
|
if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]]; then
|
||||||
|
style=precommand
|
||||||
|
elif [[ "$arg" = "sudo" ]]; then
|
||||||
|
style=precommand
|
||||||
|
next_word=${next_word//:regular:/}
|
||||||
|
next_word+=':sudo_opt:'
|
||||||
|
next_word+=':start:'
|
||||||
|
else
|
||||||
|
_zsh_highlight_main_highlighter_expand_path $arg
|
||||||
|
local expanded_arg="$REPLY"
|
||||||
|
_zsh_highlight_main__type ${expanded_arg}
|
||||||
|
local res="$REPLY"
|
||||||
|
() {
|
||||||
|
# Special-case: command word is '$foo', like that, without braces or anything.
|
||||||
|
#
|
||||||
|
# That's not entirely correct --- if the parameter's value happens to be a reserved
|
||||||
|
# word, the parameter expansion will be highlighted as a reserved word --- but that
|
||||||
|
# incorrectness is outweighed by the usability improvement of permitting the use of
|
||||||
|
# parameters that refer to commands, functions, and builtins.
|
||||||
|
local -a match mbegin mend
|
||||||
|
local MATCH; integer MBEGIN MEND
|
||||||
|
if [[ $res == none ]] && (( ${+parameters} )) &&
|
||||||
|
[[ ${arg[1]} == \$ ]] && [[ ${arg:1} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+)$ ]] &&
|
||||||
|
(( ${+parameters[${MATCH}]} ))
|
||||||
|
then
|
||||||
|
_zsh_highlight_main__type ${(P)MATCH}
|
||||||
|
res=$REPLY
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
case $res in
|
||||||
|
reserved) # reserved word
|
||||||
|
style=reserved-word
|
||||||
|
case $arg in
|
||||||
|
($'\x7b')
|
||||||
|
braces_stack='Y'"$braces_stack"
|
||||||
|
;;
|
||||||
|
($'\x7d')
|
||||||
|
# We're at command word, so no need to check $right_brace_is_recognised_everywhere
|
||||||
|
_zsh_highlight_main__stack_pop 'Y' style=reserved-word
|
||||||
|
if [[ $style == reserved-word ]]; then
|
||||||
|
next_word+=':always:'
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
('do')
|
||||||
|
braces_stack='D'"$braces_stack"
|
||||||
|
;;
|
||||||
|
('done')
|
||||||
|
_zsh_highlight_main__stack_pop 'D' style=reserved-word
|
||||||
|
;;
|
||||||
|
('foreach')
|
||||||
|
braces_stack='$'"$braces_stack"
|
||||||
|
;;
|
||||||
|
('end')
|
||||||
|
_zsh_highlight_main__stack_pop '$' style=reserved-word
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
'suffix alias') style=suffix-alias;;
|
||||||
|
alias) () {
|
||||||
|
integer insane_alias
|
||||||
|
case $arg in
|
||||||
|
# Issue #263: aliases with '=' on their LHS.
|
||||||
|
#
|
||||||
|
# There are three cases:
|
||||||
|
#
|
||||||
|
# - Unsupported, breaks 'alias -L' output, but invokable:
|
||||||
|
('='*) :;;
|
||||||
|
# - Unsupported, not invokable:
|
||||||
|
(*'='*) insane_alias=1;;
|
||||||
|
# - The common case:
|
||||||
|
(*) :;;
|
||||||
|
esac
|
||||||
|
if (( insane_alias )); then
|
||||||
|
style=unknown-token
|
||||||
|
else
|
||||||
|
style=alias
|
||||||
|
_zsh_highlight_main__resolve_alias $arg
|
||||||
|
local alias_target="$REPLY"
|
||||||
|
[[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$alias_target"} && -z ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} ]] && ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS+=($arg)
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
;;
|
||||||
|
builtin) style=builtin;;
|
||||||
|
function) style=function;;
|
||||||
|
command) style=command;;
|
||||||
|
hashed) style=hashed-command;;
|
||||||
|
none) if _zsh_highlight_main_highlighter_check_assign; then
|
||||||
|
style=assign
|
||||||
|
if [[ $arg[-1] == '(' ]]; then
|
||||||
|
in_array_assignment=true
|
||||||
|
else
|
||||||
|
# assignment to a scalar parameter.
|
||||||
|
# (For array assignments, the command doesn't start until the ")" token.)
|
||||||
|
next_word+=':start:'
|
||||||
|
fi
|
||||||
|
elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
|
||||||
|
style=history-expansion
|
||||||
|
elif [[ $arg[0,1] == $histchars[2,2] ]]; then
|
||||||
|
style=history-expansion
|
||||||
|
elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
|
||||||
|
if [[ $this_word == *':regular:'* ]]; then
|
||||||
|
# This highlights empty commands (semicolon follows nothing) as an error.
|
||||||
|
# Zsh accepts them, though.
|
||||||
|
style=commandseparator
|
||||||
|
else
|
||||||
|
style=unknown-token
|
||||||
|
fi
|
||||||
|
elif (( in_redirection == 2 )); then
|
||||||
|
style=redirection
|
||||||
|
elif [[ $arg[1,2] == '((' ]]; then
|
||||||
|
# Arithmetic evaluation.
|
||||||
|
#
|
||||||
|
# Note: prior to zsh-5.1.1-52-g4bed2cf (workers/36669), the ${(z)...}
|
||||||
|
# splitter would only output the '((' token if the matching '))' had
|
||||||
|
# been typed. Therefore, under those versions of zsh, BUFFER="(( 42"
|
||||||
|
# would be highlighted as an error until the matching "))" are typed.
|
||||||
|
#
|
||||||
|
# We highlight just the opening parentheses, as a reserved word; this
|
||||||
|
# is how [[ ... ]] is highlighted, too.
|
||||||
|
style=reserved-word
|
||||||
|
_zsh_highlight_main_add_region_highlight $start_pos $((start_pos + 2)) $style
|
||||||
|
already_added=1
|
||||||
|
if [[ $arg[-2,-1] == '))' ]]; then
|
||||||
|
_zsh_highlight_main_add_region_highlight $((end_pos - 2)) $end_pos $style
|
||||||
|
already_added=1
|
||||||
|
fi
|
||||||
|
elif [[ $arg == '()' ]]; then
|
||||||
|
# anonymous function
|
||||||
|
style=reserved-word
|
||||||
|
elif [[ $arg == $'\x28' ]]; then
|
||||||
|
# subshell
|
||||||
|
style=reserved-word
|
||||||
|
braces_stack='R'"$braces_stack"
|
||||||
|
elif [[ $arg == $'\x29' ]]; then
|
||||||
|
# end of subshell
|
||||||
|
_zsh_highlight_main__stack_pop 'R' style=reserved-word
|
||||||
|
else
|
||||||
|
if _zsh_highlight_main_highlighter_check_path; then
|
||||||
|
style=$REPLY
|
||||||
|
else
|
||||||
|
style=unknown-token
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) _zsh_highlight_main_add_region_highlight $start_pos $end_pos arg0_$res arg0
|
||||||
|
already_added=1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if (( ! already_added )) && [[ $style == unknown-token ]] && # not handled by the 'command word' codepath
|
||||||
|
{ (( in_redirection )) || [[ $this_word == *':regular:'* ]] || [[ $this_word == *':sudo_opt:'* ]] || [[ $this_word == *':sudo_arg:'* ]] }
|
||||||
|
then # $arg is a non-command word
|
||||||
|
case $arg in
|
||||||
|
$'\x29') # subshell or end of array assignment
|
||||||
|
if $in_array_assignment; then
|
||||||
|
style=assign
|
||||||
|
in_array_assignment=false
|
||||||
|
next_word+=':start:'
|
||||||
|
else
|
||||||
|
_zsh_highlight_main__stack_pop 'R' style=reserved-word
|
||||||
|
fi;;
|
||||||
|
$'\x28\x29') # possibly a function definition
|
||||||
|
if (( multi_func_def )) || false # TODO: or if the previous word was a command word
|
||||||
|
then
|
||||||
|
next_word+=':start:'
|
||||||
|
fi
|
||||||
|
style=reserved-word
|
||||||
|
;;
|
||||||
|
$'\x7d') # right brace
|
||||||
|
#
|
||||||
|
# Parsing rule: # {
|
||||||
|
#
|
||||||
|
# Additionally, `tt(})' is recognized in any position if neither the
|
||||||
|
# tt(IGNORE_BRACES) option nor the tt(IGNORE_CLOSE_BRACES) option is set."""
|
||||||
|
if $right_brace_is_recognised_everywhere; then
|
||||||
|
_zsh_highlight_main__stack_pop 'Y' style=reserved-word
|
||||||
|
if [[ $style == reserved-word ]]; then
|
||||||
|
next_word+=':always:'
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Fall through to the catchall case at the end.
|
||||||
|
fi
|
||||||
|
;|
|
||||||
|
'--'*) style=double-hyphen-option;;
|
||||||
|
'-'*) style=single-hyphen-option;;
|
||||||
|
"'"*) style=single-quoted-argument;;
|
||||||
|
'"'*) style=double-quoted-argument
|
||||||
|
_zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
|
||||||
|
_zsh_highlight_main_highlighter_highlight_string
|
||||||
|
already_added=1
|
||||||
|
;;
|
||||||
|
\$\'*) style=dollar-quoted-argument
|
||||||
|
_zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
|
||||||
|
_zsh_highlight_main_highlighter_highlight_dollar_string
|
||||||
|
already_added=1
|
||||||
|
;;
|
||||||
|
'`'*) style=back-quoted-argument;;
|
||||||
|
[*?]*|*[^\\][*?]*)
|
||||||
|
$highlight_glob && style=globbing || style=default;;
|
||||||
|
*) if false; then
|
||||||
|
elif [[ $arg = $'\x7d' ]] && $right_brace_is_recognised_everywhere; then
|
||||||
|
# was handled by the $'\x7d' case above
|
||||||
|
elif [[ $arg[0,1] = $histchars[0,1] ]] && (( $#arg[0,2] == 2 )); then
|
||||||
|
style=history-expansion
|
||||||
|
elif [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
|
||||||
|
if [[ $this_word == *':regular:'* ]]; then
|
||||||
|
style=commandseparator
|
||||||
|
else
|
||||||
|
style=unknown-token
|
||||||
|
fi
|
||||||
|
elif (( in_redirection == 2 )); then
|
||||||
|
style=redirection
|
||||||
|
else
|
||||||
|
if _zsh_highlight_main_highlighter_check_path; then
|
||||||
|
style=$REPLY
|
||||||
|
else
|
||||||
|
style=default
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
if ! (( already_added )); then
|
||||||
|
_zsh_highlight_main_add_region_highlight $start_pos $end_pos $style
|
||||||
|
[[ $style == path || $style == path_prefix ]] && _zsh_highlight_main_highlighter_highlight_path_separators
|
||||||
|
fi
|
||||||
|
if [[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_COMMANDSEPARATOR:#"$arg"} ]]; then
|
||||||
|
if [[ $arg == ';' ]] && $in_array_assignment; then
|
||||||
|
# literal newline inside an array assignment
|
||||||
|
next_word=':regular:'
|
||||||
|
else
|
||||||
|
next_word=':start:'
|
||||||
|
highlight_glob=true
|
||||||
|
fi
|
||||||
|
elif
|
||||||
|
[[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_CONTROL_FLOW:#"$arg"} && $this_word == *':start:'* ]] ||
|
||||||
|
[[ -n ${(M)ZSH_HIGHLIGHT_TOKENS_PRECOMMANDS:#"$arg"} && $this_word == *':start:'* ]]; then
|
||||||
|
next_word=':start:'
|
||||||
|
elif [[ $arg == "repeat" && $this_word == *':start:'* ]]; then
|
||||||
|
# skip the repeat-count word
|
||||||
|
in_redirection=2
|
||||||
|
# The redirection mechanism assumes $this_word describes the word
|
||||||
|
# following the redirection. Make it so.
|
||||||
|
#
|
||||||
|
# That word can be a command word with shortloops (`repeat 2 ls`)
|
||||||
|
# or a command separator (`repeat 2; ls` or `repeat 2; do ls; done`).
|
||||||
|
#
|
||||||
|
# The repeat-count word will be handled like a redirection target.
|
||||||
|
this_word=':start::regular:'
|
||||||
|
fi
|
||||||
|
start_pos=$end_pos
|
||||||
|
if (( in_redirection == 0 )); then
|
||||||
|
# This is the default/common codepath.
|
||||||
|
this_word=$next_word
|
||||||
|
else
|
||||||
|
# Stall $this_word.
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if $arg is variable assignment
|
||||||
|
_zsh_highlight_main_highlighter_check_assign()
|
||||||
|
{
|
||||||
|
setopt localoptions extended_glob
|
||||||
|
[[ $arg == [[:alpha:]_][[:alnum:]_]#(|\[*\])(|[+])=* ]] ||
|
||||||
|
[[ $arg == [0-9]##(|[+])=* ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
_zsh_highlight_main_highlighter_highlight_path_separators()
|
||||||
|
{
|
||||||
|
local pos style_pathsep
|
||||||
|
style_pathsep=${style}_pathseparator
|
||||||
|
[[ -z "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" || "$ZSH_HIGHLIGHT_STYLES[$style]" == "$ZSH_HIGHLIGHT_STYLES[$style_pathsep]" ]] && return 0
|
||||||
|
for (( pos = start_pos; $pos <= end_pos; pos++ )) ; do
|
||||||
|
if [[ $BUFFER[pos] == / ]]; then
|
||||||
|
_zsh_highlight_main_add_region_highlight $((pos - 1)) $pos $style_pathsep
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if $arg is a path.
|
||||||
|
# If yes, return 0 and in $REPLY the style to use.
|
||||||
|
# Else, return non-zero (and the contents of $REPLY is undefined).
|
||||||
|
_zsh_highlight_main_highlighter_check_path()
|
||||||
|
{
|
||||||
|
_zsh_highlight_main_highlighter_expand_path $arg;
|
||||||
|
local expanded_path="$REPLY"
|
||||||
|
|
||||||
|
REPLY=path
|
||||||
|
|
||||||
|
[[ -z $expanded_path ]] && return 1
|
||||||
|
[[ -L $expanded_path ]] && return 0
|
||||||
|
[[ -e $expanded_path ]] && return 0
|
||||||
|
|
||||||
|
# Search the path in CDPATH
|
||||||
|
local cdpath_dir
|
||||||
|
for cdpath_dir in $cdpath ; do
|
||||||
|
[[ -e "$cdpath_dir/$expanded_path" ]] && return 0
|
||||||
|
done
|
||||||
|
|
||||||
|
# If dirname($arg) doesn't exist, neither does $arg.
|
||||||
|
[[ ! -d ${expanded_path:h} ]] && return 1
|
||||||
|
|
||||||
|
# If this word ends the buffer, check if it's the prefix of a valid path.
|
||||||
|
if [[ ${BUFFER[1]} != "-" && $pure_buf_len == $end_pos ]] &&
|
||||||
|
[[ $WIDGET != zle-line-finish ]]; then
|
||||||
|
local -a tmp
|
||||||
|
tmp=( ${expanded_path}*(N) )
|
||||||
|
(( $#tmp > 0 )) && REPLY=path_prefix && return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# It's not a path.
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Highlight special chars inside double-quoted strings
|
||||||
|
_zsh_highlight_main_highlighter_highlight_string()
|
||||||
|
{
|
||||||
|
setopt localoptions noksharrays
|
||||||
|
local -a match mbegin mend
|
||||||
|
local MATCH; integer MBEGIN MEND
|
||||||
|
local i j k style
|
||||||
|
# Starting quote is at 1, so start parsing at offset 2 in the string.
|
||||||
|
for (( i = 2 ; i < end_pos - start_pos ; i += 1 )) ; do
|
||||||
|
(( j = i + start_pos - 1 ))
|
||||||
|
(( k = j + 1 ))
|
||||||
|
case "$arg[$i]" in
|
||||||
|
'$' ) style=dollar-double-quoted-argument
|
||||||
|
# Look for an alphanumeric parameter name.
|
||||||
|
if [[ ${arg:$i} =~ ^([A-Za-z_][A-Za-z0-9_]*|[0-9]+) ]] ; then
|
||||||
|
(( k += $#MATCH )) # highlight the parameter name
|
||||||
|
(( i += $#MATCH )) # skip past it
|
||||||
|
elif [[ ${arg:$i} =~ ^[{]([A-Za-z_][A-Za-z0-9_]*|[0-9]+)[}] ]] ; then
|
||||||
|
(( k += $#MATCH )) # highlight the parameter name and braces
|
||||||
|
(( i += $#MATCH )) # skip past it
|
||||||
|
elif [[ $arg[i+1] == '$' ]]; then
|
||||||
|
# $$ - pid
|
||||||
|
(( k += 1 )) # highlight both dollar signs
|
||||||
|
(( i += 1 )) # don't consider the second one as introducing another parameter expansion
|
||||||
|
elif [[ $arg[i+1] == [-#*@?] ]]; then
|
||||||
|
# $#, $*, $@, $?, $- - like $$ above
|
||||||
|
(( k += 1 )) # highlight both dollar signs
|
||||||
|
(( i += 1 )) # don't consider the second one as introducing another parameter expansion
|
||||||
|
elif [[ $arg[i+1] == $'\x28' ]]; then
|
||||||
|
# Highlight just the '$'.
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
"\\") style=back-double-quoted-argument
|
||||||
|
if [[ \\\`\"\$${histchars[1]} == *$arg[$i+1]* ]]; then
|
||||||
|
(( k += 1 )) # Color following char too.
|
||||||
|
(( i += 1 )) # Skip parsing the escaped char.
|
||||||
|
else
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) continue ;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
_zsh_highlight_main_add_region_highlight $j $k $style
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Highlight special chars inside dollar-quoted strings
|
||||||
|
_zsh_highlight_main_highlighter_highlight_dollar_string()
|
||||||
|
{
|
||||||
|
setopt localoptions noksharrays
|
||||||
|
local -a match mbegin mend
|
||||||
|
local MATCH; integer MBEGIN MEND
|
||||||
|
local i j k style
|
||||||
|
local AA
|
||||||
|
integer c
|
||||||
|
# Starting dollar-quote is at 1:2, so start parsing at offset 3 in the string.
|
||||||
|
for (( i = 3 ; i < end_pos - start_pos ; i += 1 )) ; do
|
||||||
|
(( j = i + start_pos - 1 ))
|
||||||
|
(( k = j + 1 ))
|
||||||
|
case "$arg[$i]" in
|
||||||
|
"\\") style=back-dollar-quoted-argument
|
||||||
|
for (( c = i + 1 ; c <= end_pos - start_pos ; c += 1 )); do
|
||||||
|
[[ "$arg[$c]" != ([0-9xXuUa-fA-F]) ]] && break
|
||||||
|
done
|
||||||
|
AA=$arg[$i+1,$c-1]
|
||||||
|
# Matching for HEX and OCT values like \0xA6, \xA6 or \012
|
||||||
|
if [[ "$AA" =~ "^(x|X)[0-9a-fA-F]{1,2}"
|
||||||
|
|| "$AA" =~ "^[0-7]{1,3}"
|
||||||
|
|| "$AA" =~ "^u[0-9a-fA-F]{1,4}"
|
||||||
|
|| "$AA" =~ "^U[0-9a-fA-F]{1,8}"
|
||||||
|
]]; then
|
||||||
|
(( k += $#MATCH ))
|
||||||
|
(( i += $#MATCH ))
|
||||||
|
else
|
||||||
|
if (( $#arg > $i+1 )) && [[ $arg[$i+1] == [xXuU] ]]; then
|
||||||
|
# \x not followed by hex digits is probably an error
|
||||||
|
style=unknown-token
|
||||||
|
fi
|
||||||
|
(( k += 1 )) # Color following char too.
|
||||||
|
(( i += 1 )) # Skip parsing the escaped char.
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*) continue ;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
_zsh_highlight_main_add_region_highlight $j $k $style
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# Called with a single positional argument.
|
||||||
|
# Perform filename expansion (tilde expansion) on the argument and set $REPLY to the expanded value.
|
||||||
|
#
|
||||||
|
# Does not perform filename generation (globbing).
|
||||||
|
_zsh_highlight_main_highlighter_expand_path()
|
||||||
|
{
|
||||||
|
(( $# == 1 )) || print -r -- >&2 "zsh-syntax-highlighting: BUG: _zsh_highlight_main_highlighter_expand_path: called without argument"
|
||||||
|
|
||||||
|
# The $~1 syntax normally performs filename generation, but not when it's on the right-hand side of ${x:=y}.
|
||||||
|
setopt localoptions nonomatch
|
||||||
|
unset REPLY
|
||||||
|
: ${REPLY:=${(Q)~1}}
|
||||||
|
}
|
||||||
|
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Main highlighter initialization
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
_zsh_highlight_main__precmd_hook() {
|
||||||
|
_zsh_highlight_main__command_type_cache=()
|
||||||
|
}
|
||||||
|
|
||||||
|
autoload -U add-zsh-hook
|
||||||
|
if add-zsh-hook precmd _zsh_highlight_main__precmd_hook 2>/dev/null; then
|
||||||
|
# Initialize command type cache
|
||||||
|
typeset -gA _zsh_highlight_main__command_type_cache
|
||||||
|
else
|
||||||
|
print -r -- >&2 'zsh-syntax-highlighting: Failed to load add-zsh-hook. Some speed optimizations will not be used.'
|
||||||
|
# Make sure the cache is unset
|
||||||
|
unset _zsh_highlight_main__command_type_cache
|
||||||
|
fi
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Issue #263 (more-pathological case): aliases[x=y]=z works; the ${(z)} splitter considers
|
||||||
|
# that a single word; but it's not looked up as an alias. Hence, highlight it as an error.
|
||||||
|
aliases[x=y]='lorem ipsum dolor sit amet'
|
||||||
|
BUFFER='x=y ls'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 3 unknown-token" # x=y
|
||||||
|
)
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
alias alias1="unused expansion"
|
||||||
|
alias -s alias2="echo"
|
||||||
|
alias1() {} # to check that it's highlighted as an alias, not as a function
|
||||||
|
|
||||||
|
BUFFER='x.alias2; alias1'
|
||||||
|
|
||||||
|
# Set expected_region_highlight as a function of zsh version.
|
||||||
|
#
|
||||||
|
# Highlight of suffix alias requires zsh-5.1.1 or newer; see issue #126,
|
||||||
|
# and commit 36403 to zsh itself. Therefore, check if the requisite zsh
|
||||||
|
# functionality is present, and skip verifying suffix-alias highlighting
|
||||||
|
# if it isn't.
|
||||||
|
expected_region_highlight=()
|
||||||
|
if [[ "$(type -w x.alias2)" == *suffix* ]]; then
|
||||||
|
expected_region_highlight+=(
|
||||||
|
"1 8 suffix-alias" # x.alias2
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
expected_region_highlight+=(
|
||||||
|
"11 16 alias" # alias1
|
||||||
|
)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='{ ls } always { pwd }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 1 reserved-word' # {
|
||||||
|
'3 4 command' # ls
|
||||||
|
'6 6 reserved-word' # }
|
||||||
|
'8 13 reserved-word' # always
|
||||||
|
'15 15 reserved-word' # {
|
||||||
|
'17 19 builtin' # pwd
|
||||||
|
'21 21 reserved-word' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=$'{\nls\n} always { pwd }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 1 reserved-word' # {
|
||||||
|
'2 2 unknown-token' # \n
|
||||||
|
'3 4 command' # ls
|
||||||
|
'5 5 commandseparator' # \n
|
||||||
|
'6 6 reserved-word' # }
|
||||||
|
'8 13 reserved-word' # always
|
||||||
|
'15 15 reserved-word' # {
|
||||||
|
'17 19 builtin' # pwd
|
||||||
|
'21 21 reserved-word' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,43 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
setopt ignorebraces
|
||||||
|
BUFFER='echo { foo } always { bar }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 4 builtin' # echo
|
||||||
|
'6 6 default' # {
|
||||||
|
'8 10 default' # foo
|
||||||
|
'12 12 default' # }
|
||||||
|
'14 19 default' # always
|
||||||
|
'21 21 default' # {
|
||||||
|
'23 25 default' # bar
|
||||||
|
'27 27 default' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='() echo hello; () { echo world } "argument"'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 2 reserved-word" # ()
|
||||||
|
"4 7 builtin" # echo
|
||||||
|
"9 13 default" # hello
|
||||||
|
"14 14 commandseparator" # ;
|
||||||
|
"16 17 reserved-word" # ()
|
||||||
|
"19 19 reserved-word" # {
|
||||||
|
"21 24 builtin" # echo
|
||||||
|
"34 43 double-quoted-argument" # "argument"
|
||||||
|
)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=''\''x: /'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 5 unknown-token' # \'x: /
|
||||||
|
)
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Must be at command word, since the word following 'if' isn't currently considered
|
||||||
|
# a command word (issue #207).
|
||||||
|
#
|
||||||
|
# An opening '((' without matching '))' is highlighted correctly under zsh-5.1.1-52-g4bed2cf
|
||||||
|
# or newer, only (issue #188).
|
||||||
|
BUFFER='(( x == 42 ))'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 2 reserved-word" # ((
|
||||||
|
"12 13 reserved-word" # ))
|
||||||
|
)
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='a+=(lorem ipsum)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 4 assign" # a+=(
|
||||||
|
)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='42=foo 43+=bar'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 6 assign" # 42=foo
|
||||||
|
"8 14 assign" # 43+=bar
|
||||||
|
)
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='(A=(hello world))'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 1 reserved-word" # (
|
||||||
|
"2 4 assign" # A=(
|
||||||
|
"16 16 assign" # )
|
||||||
|
"17 17 reserved-word" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='A=(hello world) ls'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 3 assign" # A=(
|
||||||
|
"15 15 assign" # )
|
||||||
|
"17 18 command" # ls
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='A=(hello world) b=42'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 3 assign" # A=(
|
||||||
|
"15 15 assign" # )
|
||||||
|
"17 20 assign" # b=42
|
||||||
|
)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='A=1; echo hello world'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"4 4 commandseparator" # ;
|
||||||
|
"6 9 builtin" # echo
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='(A=1)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 1 reserved-word" # (
|
||||||
|
"2 4 assign" # A=1
|
||||||
|
"5 5 reserved-word" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='A=1 b=("foo" bar)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 3 assign" # A=1
|
||||||
|
"5 7 assign" # b=(
|
||||||
|
"8 12 double-quoted-argument" # "foo"
|
||||||
|
"14 16 default" # bar
|
||||||
|
"17 17 assign" # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='echo `echo 42`'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"6 14 back-quoted-argument"
|
||||||
|
)
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
PREBUFFER=$'echo \\\n'
|
||||||
|
BUFFER='noglob'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"1 6 default" # 'noglob' highlighted as a string, not as a precomand
|
||||||
|
)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=$'() { echo }\n}'
|
||||||
|
# no special setopts
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 2 reserved-word' # ()
|
||||||
|
'4 4 reserved-word' # {
|
||||||
|
'6 9 builtin' # echo
|
||||||
|
'11 11 reserved-word' # }
|
||||||
|
'12 12 commandseparator' # \n
|
||||||
|
'13 13 unknown-token' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=$'() { echo }\n}'
|
||||||
|
setopt ignorebraces
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 2 reserved-word' # ()
|
||||||
|
'4 4 reserved-word' # {
|
||||||
|
'6 9 builtin' # echo
|
||||||
|
'11 11 default' # }
|
||||||
|
'12 12 commandseparator' # \n
|
||||||
|
'13 13 reserved-word' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='() { echo foo )'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 2 reserved-word' # ()
|
||||||
|
'4 4 reserved-word' # {
|
||||||
|
'6 9 builtin' # echo
|
||||||
|
'11 13 default' # foo
|
||||||
|
'15 15 unknown-token' # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='() ( echo foo }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 2 reserved-word' # ()
|
||||||
|
'4 4 reserved-word' # (
|
||||||
|
'6 9 builtin' # echo
|
||||||
|
'11 13 default' # foo
|
||||||
|
'15 15 unknown-token' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='echo )'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 4 builtin' # echo
|
||||||
|
'6 6 unknown-token' # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='echo }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 4 builtin' # echo
|
||||||
|
'6 6 unknown-token' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='echo { }'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 4 builtin' # echo
|
||||||
|
'6 6 default' # {
|
||||||
|
'8 8 unknown-token' # }
|
||||||
|
)
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='(repeat 1; do)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 1 reserved-word' # (
|
||||||
|
'2 7 reserved-word' # repeat
|
||||||
|
'9 9 default' # 1
|
||||||
|
'10 10 commandseparator' # ;
|
||||||
|
'12 13 reserved-word' # do
|
||||||
|
'14 14 unknown-token' # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2012 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='for n in *; do echo $n; end'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 3 reserved-word' # for
|
||||||
|
'5 5 default' # n
|
||||||
|
'7 8 default' # in
|
||||||
|
'10 10 globbing' # *
|
||||||
|
'11 11 commandseparator' # ;
|
||||||
|
'13 14 reserved-word' # do
|
||||||
|
'16 19 builtin' # echo
|
||||||
|
'21 22 default' # $n
|
||||||
|
'23 23 commandseparator' # ;
|
||||||
|
'25 27 unknown-token' # end
|
||||||
|
)
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#!/usr/bin/env zsh
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2016 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER='(ls&)'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
'1 1 reserved-word' # (
|
||||||
|
'2 3 command' # ls
|
||||||
|
'4 4 commandseparator' # &
|
||||||
|
'5 5 reserved-word' # )
|
||||||
|
)
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# Copyright (c) 2015 zsh-syntax-highlighting contributors
|
||||||
|
# All rights reserved.
|
||||||
|
#
|
||||||
|
# Redistribution and use in source and binary forms, with or without modification, are permitted
|
||||||
|
# provided that the following conditions are met:
|
||||||
|
#
|
||||||
|
# * Redistributions of source code must retain the above copyright notice, this list of conditions
|
||||||
|
# and the following disclaimer.
|
||||||
|
# * Redistributions in binary form must reproduce the above copyright notice, this list of
|
||||||
|
# conditions and the following disclaimer in the documentation and/or other materials provided
|
||||||
|
# with the distribution.
|
||||||
|
# * Neither the name of the zsh-syntax-highlighting contributors nor the names of its contributors
|
||||||
|
# may be used to endorse or promote products derived from this software without specific prior
|
||||||
|
# written permission.
|
||||||
|
#
|
||||||
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
|
||||||
|
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||||
|
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
|
||||||
|
# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||||
|
# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
# -*- mode: zsh; sh-indentation: 2; indent-tabs-mode: nil; sh-basic-offset: 2; -*-
|
||||||
|
# vim: ft=zsh sw=2 ts=2 et
|
||||||
|
# -------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
BUFFER=':; pwd &! ls'
|
||||||
|
|
||||||
|
expected_region_highlight=(
|
||||||
|
"2 2 commandseparator" # ;
|
||||||
|
"4 6 builtin" # pwd
|
||||||
|
"8 9 commandseparator" # &!
|
||||||
|
"11 12 command" # ls
|
||||||
|
)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user