Commit graph

202 commits

Author SHA1 Message Date
Matthew Martin
341a3ae1f0 highlighters: Use _zsh_highlight_add_highlight
_zsh_highlight_add_highlight appends to region_highlight $1 $2 and the
next non-null parameter. If there is no non-null parameter, do nothing,
This is so that highlighters can add a style with fallbacks if the most
specific style is not defined. If none of the applicable styles are
defined, do the right thing and don't add an invalid entry to
region_highlight.

The pattern highlighter doesn't use this function as it'd need too large
of an API change.
2016-04-29 10:09:16 -05:00
Daniel Shahaf
c54c076cfa cleanup: Avoid colon after parameter expansion to avoid risking introducing a colon modifier. 2016-04-24 17:08:08 +00:00
m0viefreak
79e4d3d124 apply suffix and isearch zle_highlights on top 2016-03-28 18:24:29 +02:00
Daniel Shahaf
cb02451a4e widget binding: Fix crucial typo in last commit. 2016-03-18 15:14:09 +00:00
Daniel Shahaf
11d378332e widget binding: Further unbreak the build.
7e7e291b20 broke 'zle -C' completions, as reported in #278 just now.
2016-03-18 15:12:04 +00:00
Daniel Shahaf
6a634fac9f widget binding: Properly escape widget names at definition.
Re-Fixes zsh-users/zsh-syntax-highlighting#278.
2016-03-18 14:53:53 +00:00
Daniel Shahaf
47a664447c noop: Remove stray statement terminators and line joiners. 2016-03-18 14:47:53 +00:00
Daniel Shahaf
261c180a36 widget binding: Unbreak the build.
The last commit inadvertently broke interactive use, although the test suite passed.

See issue #278.
2016-03-18 14:41:18 +00:00
Daniel Shahaf
7e7e291b20 widget binding: Remove an unnecessary layer of indirection.
The 'eval' was never needed, and the lack of proper quoting of the interpolated
variables caused issues, such as #278.

Fixes zsh-users/zsh-syntax-highlighting#278.
2016-03-18 13:58:55 +00:00
m0viefreak
4849ef3307 Refactor the application of zle_highlight settings
- Extract duplicated code into a new function.
  This makes it easier to add support for other entries in the
  future, that cannot be accessed in the current version of zsh
  (isearch, suffix).
- Make decision logic more comprehensible.
- Respect deliberately empty entries in zle_highlight.
  Don't force the default value when the user deliberately sets
  an entry in zle_highlight to the empty string.
  For example
    zle_highligh(paste:)
  to disable paste highlighting completely.
2016-03-13 16:29:00 +01:00
Daniel Shahaf
18df692ae6 widget binding: Remove some too-wide exclusions
* m0vie/p_bindings:
  widget binding: don't exlude widgets with identical function name
  widget binding: don't exclude widgets starting with '_'
2016-03-12 17:24:03 +00:00
m0viefreak
487b122c48 widget binding: don't exclude widgets with identical function name
Skipping when $cur_widgets == user:$cur_widget was introduced
with 776453cb5b. However there
are cases where this is not just an 'already rebound' event, but
simply a normal widget whose function name happens to be identical
to its widget name.

Example:
expand-absolute-path is a widget whose function name is also
expand-absolute-path. No reason why this should be ignored.

Another example:
edit-command-line
2016-03-12 17:23:12 +00:00
Daniel Shahaf
282c7134e8 Revert "wrapping: Don't add '--' when invoking widgets."
The '--' guard was correct; it was there to guard against arguments belonging
to the syntax «zle widget [ -n num ] [ -Nw ] [ -K keymap ] args».

For example, this affected using <backward-kill-word> over
    BUFFER="-w "
    CURSOR=3
after
    autoload -Uz select-word-style
    select-word-style default
    zstyle ':zle:backward-kill-word' word-style shell
.

This reverts commit c808d2187a.
2016-01-17 19:43:48 +00:00
m0viefreak
ed33d2cb13 widget binding: don't exclude widgets starting with '_'
Just because a widget starts with _ does not mean it should be
skipped when rebinding. The only reason widgets need to be skipped
is when their function name start with _zsh_highlight_widget*,
which is checked later.

Example:
_expand_alias (^Xa) needs to be wrapped.

The exclusion of _* was introduced in 186d80054a
to fix #65, but it is not needed. The relevant exclusion of
_zsh_highlight_widget* is already enough due to the case statement.
2016-01-02 14:29:04 +01:00
Daniel Shahaf
84734ba950 versionstamp: Better $ZSH_HIGHLIGHT_REVISION reporting when running from git. 2015-11-25 03:55:20 +00:00
Daniel Shahaf
635a68f7b4 driver: Fix error message wording 2015-11-25 03:54:33 +00:00
Daniel Shahaf
8f19af6b31 driver: Tolerate KSH_ARRAYS being set in the calling context.
Fixes zsh-users/zsh-syntax-highlighting#162.
2015-11-17 00:48:22 +00:00
Daniel Shahaf
c808d2187a wrapping: Don't add '--' when invoking widgets.
It's the widget's caller's responsibility, not ours, to add '--' where due.  If
we do it, two instances of '--' might result.  (I haven't been able to provoke
this problem.)

If this commit causes problems, the cause would be widget-callers that don't
pass '--' although they should.
2015-10-28 08:30:05 +02:00
Daniel Shahaf
7e6d960a08 noop: Break out a helper function. 2015-10-28 08:30:05 +02:00
Daniel Shahaf
083c47b007 regerssion: Look for .version and .revision-hash in the correct place.
Fixes zsh-users/zsh-syntax-highlighting#215.
2015-10-21 06:55:00 +00:00
Daniel Shahaf
c30301d474 Drop unnecessary shebang lines.
All these files should be sourced, not executed; and Debian's lintian complains:

W: zsh-syntax-highlighting: script-not-executable usr/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
2015-10-20 11:49:51 +00:00
Daniel Shahaf
0a7035170a versioning: Expose .revision-hash as $ZSH_HIGHLIGHT_REVISION.
Currently, this only works in installed trees and exported tarballs; the
parameter is left unset when running directly from a git worktree.
2015-10-20 03:07:04 +00:00
Daniel Shahaf
3576df29aa Don't leak $REPLY into global scope.
Fixes issue #213.
2015-10-20 00:21:11 +00:00
Daniel Shahaf
f48f5400c1 Revert "Do wrap the 'yank' widget, because that works."
This reverts commit 8e7c26f489.

Currently, after a 'yank', paste highlighting (via $YANK_ACTIVE in zsh 5.1.1)
is applied but other highlighting (e.g., string highlighting when the yanked
text is «"foo» as a new word) is not.

See issue #183 for context.

Conflicts:
	zsh-syntax-highlighting.zsh
2015-10-19 13:40:51 +00:00
Daniel Shahaf
766b350a7d Wrap yank-pop.
As explained in #143 (which was a PR for #99), 'yank-pop' only works when the
previous widget has the ZLE_YANK flag, which means wrapping the 'yank' widget
breaks the 'yank-pop' widget (makes it a no-op).  However, that is a reason
against wrapping the 'yank' widget, but not against wrapping the 'yank-pop'
widget.  Indeed, if 'yank-pop' is wrapped but 'yank' isn't, then yank-pop
functions correctly and updates highlighting properly.

To unbreak yank-pop, either 'yank' should be excluded from wrapping, or one of
the fixes mentioned on issue #183 should be applied.
2015-10-19 08:34:08 +00:00
Daniel Shahaf
9c56c624e9 versionstamp: Handle NO_FUNCTION_ARGZERO.
Sourcing zsh-syntax-highlighting.zsh without FUNCTION_ARGZERO doesn't work (for
reasons unrelated to this branch), but now errors out gracefully.  The failure mode
before this branch was:

    zsh-syntax-highlighting: highlighters directory '/usr/local/bin/highlighters' not found.

where /usr/local/bin is dirname() of the zsh binary.
2015-10-19 07:21:20 +00:00
Daniel Shahaf
43386376d8 Set the version number.
Store it in a separate file so OS packages and 'make install' (issue #177) can
reuse it.
2015-10-19 07:20:57 +00:00
Daniel Shahaf
3fdaec3d4a WARN_CREATE_GLOBAL: Plug yet another instance. 2015-09-26 16:27:08 +00:00
Daniel Shahaf
dd12dde93a Fix errors with non-reserved-word typeset.
Follow-up to 908c4fe150.

Intended to fix fix zsh-users/zsh-syntax-highlighting#206.
2015-09-25 17:53:22 +00:00
Daniel Shahaf
cb5589db73 Don't wrap set-local-history.
See issue #137.  A reproduction recipe for testing this change:

$ zsh -f
% bindkey -e
% source <the script from http://www.zsh.org/mla/users/2014/msg00321.html users/18584>
% source zsh-syntax-highlighting.zsh
% echo foo
% echo bar
% <^R>echo<^R>

This finds the 'echo foo' with this change but not without it.
2015-09-25 15:35:03 +00:00
Daniel Shahaf
35c4bb7bdc More WARN_CREATE_GLOBAL cleanups.
Followup to 908c4fe150.
Found by test-perfs.zsh.
2015-09-25 13:04:37 +00:00
Daniel Shahaf
908c4fe150 Stop leaking variables into global namespace.
Set WARN_CREATE_GLOBAL to prevent recurrence.

Fixes zsh-users/zsh-syntax-highlighting#192.
2015-09-24 18:01:06 +00:00
Daniel Shahaf
9e80fe8f02 Bump copyright years. 2015-09-24 16:46:28 +00:00
Daniel Shahaf
00862cf4fa Followup to e5c2a88db0 (merged in 51102bf83f):
Have widgets return EXIT_SUCCESS.
2015-09-18 12:38:24 +00:00
Daniel Shahaf
e5c2a88db0 Highlight yanks/pastes on top of syntax highlighting.
Let $zle_highlight[paste] override $region_highlight.
2015-09-10 19:31:36 +00:00
Daniel Shahaf
0e31d6e1a2 Highlight the region on top of syntax highlighting.
Let $zle_highlight[region] override $region_highlight.
2015-09-08 20:22:22 +00:00
Daniel Shahaf
f78919d941 Preserve $? of wrapped widgets. 2015-09-05 21:44:11 +00:00
Daniel Shahaf
8e7c26f489 Do wrap the 'yank' widget, because that works.
Partly reverts eb9870f4db which was PR #143 to
fix issue #99.
2015-09-05 12:50:32 +00:00
nicoulaj
3dc5741900 Merge pull request #140 from randomize/pr_fix_issue_#77
Pr fix issue #77
2014-09-24 22:58:20 +02:00
Vincent Bernat
74a183447d zle: don't override yank/yank-pop
`yank-pop` relies on the fact that the last zle command is `yank` or
`yank-pop` to work correctly. Rewriting them prevents this check to work
correctly breaking `yank-pop`.

This fix just disallow overriding of those two zle commands. As a
side-effect, syntax highlighting will not happen when using.

This fixes #99.
2014-06-29 11:52:32 +02:00
Randy
7edd08156e Chaned main highlighter alorithm to resolve issue #77 2014-03-29 22:52:10 +02:00
Evan Pitstick
dffbab0c92 a more simple and universal way (for zsh projects) to find highlight dir path 2013-10-09 12:02:34 -04:00
Evan Pitstick
0fcc2629d2 Finds highlighters dir a little better 2013-03-08 00:57:16 -05:00
Jan M. Binder
966eb851ca Added quotes to suppress error 2012-04-07 11:48:11 +02:00
NAKAMURA Yoshitaka
56b134f5d6 fix "_zsh_highlight_widget_XXX:zle: unknown option: X" error 2011-11-01 20:02:03 +09:00
Andreas Gahr
603fce64b5 autoload add-zsh-hook && provide a nicer error message if that fails due to old zsh version, or similar situations. Reset another variable in hook function; it can't hurt 2011-09-28 16:35:19 +02:00
Andreas Gahr
304ddb9400 make highlighting work for first entry in history. fixes #79 2011-09-27 16:08:23 +02:00
Takeshi Banse
b0fee4e758 pass args down to each original zle call
Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-09-07 01:39:52 +08:00
Takeshi Banse
9706996d3b make _zsh_highlight nounset-able
Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-08-24 14:18:23 +09:00
Simon Heimlicher
854038010f Added || true to ensure zero exit code 2011-08-03 09:40:19 +00:00
Julien Nicoulaud
186d80054a Fix #65, sourcing the script multiples times should not cause issues anymore 2011-08-02 20:25:49 +02:00
Julien Nicoulaud
0e331cd654 Isolate setup code in functions to ease messing with zsh-syntax-highlighting 2011-07-31 17:59:55 +02:00
Julien Nicoulaud
5003fa7c9b We don't need this hook as we have already bound every widget we could find (stop me if I'm wrong) 2011-07-31 17:14:56 +02:00
Julien Nicoulaud
4ff08dcfa6 Fix #53: Prefix all defined functions with _zsh_highlight 2011-07-26 23:16:52 +02:00
Julien Nicoulaud
776453cb5b Fix #46: Conflict with url-quote-magic 2011-07-26 22:50:53 +02:00
Julien Nicoulaud
3b27ad778d More efficient way to strip leading dot 2011-07-25 22:30:06 +02:00
Valodim
5f68accccf Don't highlight if buffer is longer than $ZSH_HIGHLIGHT_MAXLENGTH 2011-07-25 14:51:43 +02:00
garinger
1858be26bd exclude .beep 2011-07-07 00:25:44 +08:00
Julien Nicoulaud
28720c77aa Some fixes consecutive to pull request #61 merge
* Allow to override highlighters directory through `ZSH_HIGHLIGHT_HIGHLIGHTERS_DIR`
* Handle spaces in the directory path
* Use Zsh builtin "h" modifier instead of `dirname`
2011-06-30 20:08:43 +02:00
Ted Naleid
4ed9f9a68f fix for issue #60, unrecognized modifier 'A' on startup 2011-06-29 21:32:58 -05:00
Julien Nicoulaud
e04f6ab862 Safety checks before looking up cursor position 2011-06-17 12:36:07 +02:00
Julien Nicoulaud
f6af27b8a6 More reliable way to hook precmd 2011-06-17 12:35:26 +02:00
Guido
71e797a8b5 Much easier and less error prone way to start highlighting immediately after the creation of a new command line. 2011-06-16 13:57:34 -07:00
Guido
56801a6b42 * added a workaround to start highlighting immediately after the creation of a new command line. 2011-06-16 04:26:51 -07:00
Julien Nicoulaud
bb7fcb79fa Fix #56: tolerance to WARN_GLOBAL option 2011-06-12 23:09:59 +02:00
Julien Nicoulaud
55e6a85fbb Merge branch 'master' of github.com:nicoulaj/zsh-syntax-highlighting
Conflicts:
	zsh-syntax-highlighting.zsh
2011-06-12 23:04:33 +02:00
Julien Nicoulaud
0772ddd346 Big refactoring.
* Don't override user defined styles
* Better modularisation of highlighters
* Allow to define which highlighters are activated
* Allow to define the order in which they are defined
* Minor performance optimizations
* Fixed some variables leak
* Improve documentation
* Brackets highlighter: use ZSH_HIGHLIGHT_STYLES instead of a specific array
2011-06-12 22:57:14 +02:00
NAKAMURA Yoshitaka
0999ab05ba do nothing if PENDING inputs are exist
Originally, zsh-syntax-highlighting called highlight functions at every inputs.
It's OK for user's keyboard inputs. But when long inputs come from clipboard,
it cause noticeable slowdown.
2011-03-12 16:31:18 +09:00
Julien Nicoulaud
19f16752bb Issue 49: Don't use readlink, options differ between systems
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-03-02 00:34:12 +01:00
Julien Nicoulaud
bc788f3f19 Start splitting highlighters to separate files.
The script still works on its own, highlighters in highlighters/ are
loaded as addons if present.

Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 23:41:01 +01:00
Julien Nicoulaud
2f0fb81af4 More efficient way to look for elements in arrays
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 22:27:31 +01:00
Julien Nicoulaud
3abf463753 More code style fixes
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 21:02:23 +01:00
Julien Nicoulaud
2670c93e05 Make sure functions names match _zsh_highlight_*
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 20:58:22 +01:00
Julien Nicoulaud
dd84bff854 Code style
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 19:51:07 +01:00
Julien Nicoulaud
6879d3c29f Issue 47: Removing styling of 'isearch' and 'special', as it has no effect
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-17 19:31:20 +01:00
Julien Nicoulaud
e1479022a0 Merge branch 'hchbaw-for-nicoulaj' 2011-02-17 19:20:32 +01:00
NAKAMURA Yoshitaka
390ab0fc32 Highlight variable assignment 2011-02-14 19:26:24 +09:00
Julien Nicoulaud
78ff61eddc Fix typo
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-02-01 21:01:37 +01:00
Takeshi Banse
0948c3d676 Introduce _zsh_add-highlighter.
For easily extending the highlighting behavior, split the
actual highlighting function into some pieces.

For example "_zsh_main-highlight" transformed into,

1) An actual highlighting function which updates the
`region_highlight` on its own. (_zsh_main-highlight)
2) A predicate which determines whether its highlighting function
(in this case `_zsh_main-highlight`) should be called or not.
(_zsh_buffer-modified-p)

Likewise, `_zsh_highlight-bracket-match` and
`_zsh_highlight-bracket-match-p` are born.

Eventually, `_zsh_highlight-zle-buffer` coordinates above these
functions and maintain some internal state variables.

Finally, added `_zsh_add-highlighter` a little syntactic-sugar-ish
function to register the highlighting functions in an appropriate manner.

Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-16 20:32:53 +09:00
Takeshi Banse
6663c5647d Make bracket match a function.
Append it to ZSH_HIGHLIGHT_FUNCTIONS.

Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-16 20:32:20 +09:00
Takeshi Banse
07588d2165 Make core syntax highlighting a function.
Make `_zsh_highlight-zle-buffer` just a hands-off.
Now, `_zsh_highlight-zle-buffer` calls each ZSH_HIGHLIGHT_FUNCTIONS
in turn.  The former `_zsh_highlight-zle-buffer` is renamed to
`_zsh_main-highlight.`

Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-16 20:26:50 +09:00
Julien Nicoulaud
e162de6f51 Add BSD license
(http://www.zsh.org/mla/users//2011/msg00030.html)

Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-01-10 10:11:35 +01:00
Julien Nicoulaud
0392fdc46a Issue 34: Do not highlight non commands as commands.
Signed-off-by: Julien Nicoulaud <julien.nicoulaud@gmail.com>
2011-01-08 18:03:52 +01:00
Arlen Cuss
a40d777860 Use ${(Q)arg} to expand a level of quotes, such that files/directories with spaces in their name (escaped with backslash) are noticed correctly. 2011-01-08 15:51:26 +11:00
Takeshi Banse
d2f641ca50 Carefully rebind the $clean_event.
% bindkey "^I" complete-word
  % bi<TAB>

If we had not source the zsh-syntax-highlighting.zsh, it could
complete something. This is due to that `complete-word` will be
rebinded with 'zle -N $clean_event'.

Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-07 21:51:39 +09:00
Takeshi Banse
2fd0845b77 Recreate the completion widget with its own function.
Currently, each completion widgets will be re-installed, but its
function will be statically associated with `_main_complete`.

We can get this function name via $widget[$event] which is the
zsh's zsh/zleparameter module's feature. We can use this information
for `zle -C`ing.

Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-07 21:46:17 +09:00
Takeshi Banse
802583ea94 Make this clause function and call it afterward.
Signed-off-by: Takeshi Banse <takebi@laafc.net>
2011-01-07 21:35:43 +09:00
Julien Nicoulaud
f962bdf1e7 Fix regression 2011-01-06 23:28:41 +01:00
Julien Nicoulaud
83372a5cee Issue 38: Conflict with command-not-found 2011-01-06 22:25:16 +01:00
Julien Nicoulaud
fc5caa4e2d Fix error when sourcing twice the script 2011-01-06 14:59:23 +01:00
Mounier Florian
7e963c6c7e Fix issue 31 2011-01-06 09:16:15 +01:00
Julien Nicoulaud
0a50e2a830 Issue 32: 'xargs' and 'zargs' are followed by commands (thanks to claytron) 2011-01-06 08:41:52 +01:00
Julien Nicoulaud
a9da4e6c76 Harmonize exported variables names 2011-01-05 23:07:56 +01:00
Julien Nicoulaud
60842aa75b Define a style for hashed commands 2011-01-05 22:51:00 +01:00
Sorin Ionescu
a7746077bf Added hashed commands highlighting to zsh-syntax-highlighting oh-my-zsh plugin. 2011-01-06 05:47:42 +08:00
Julien Nicoulaud
b45891cdf4 Fix variable scope and make variable names even more obvious 2011-01-05 22:16:17 +01:00
Julien Nicoulaud
0e55450a0b Issue 26: The script unplugs user defined events 2011-01-05 22:11:00 +01:00
Mounier Florian
701cc303fe Highlighting bracket pair, when one is under the cursor (Issue 24) 2011-01-05 17:08:34 +01:00
Mounier Florian
f78e444451 Fix highlighting on new line with same buffer 2011-01-05 14:27:22 +01:00
Mounier Florian
a765f76656 Remove the huge zle functions array and replace it with zle -la output 2011-01-05 14:10:57 +01:00