PR #776 fixed an issue with complex aliases and expansion. However, this change
also introduced a problem with aliases which contain `]` (for example, commonly
seen on macOS: `alias ]=open`), due to using an associative array `seen_alias`,
indexed by the alias name. Due to `"$seen_alias[$arg]"`, it would fail when
`$arg` is expanded to anything containing `]`'. Thus, typing `] /` would result
in:
```
> ] /
(anon):unset:3: seen_alias[]]: invalid parameter name
```
This change fixes the issue by ensuring we properly access keys in the
associative array `seen_alias`.
Older versions of zsh have issues with map keys having special
characters, especially lacking ways to remove such keys. The
issue is described in detail in
https://unix.stackexchange.com/questions/626393/in-zsh-how-do-i-unset-an-arbitrary-associative-array-element.
This fix uses proposal from
[zsh-workers/43269](https://www.zsh.org/mla/workers/2018/msg01073.html),
discovered by Stephane Chazelas, that boils down to avoid removing keys
from the map, and reconstruct the map anew with some keys omitted.
Co-authored-by: @phy1729
See comments within for the rationale.
This is a regression test for a regression that was only present in development
versions of PR #764 and was never present in master.
The parent commit, which merged the feature/redrawhook bug and thereby
closed PR #749, also fixed the following issue:
Fixes#40.
Fixes#90, closes#470. (The latter is a PR for the former.)
Fixes#150, closes#151, closes#160. (The latter two are PR's for the first one.) The related issue #183 appears to have been fixed in master. For #150, a different fix for older versions of zsh was considered but has not been implemented.
Issue #154 was fixed in xsel(1) in 2017. The parent commit probably fixed that issue for pre-2017 xsel(1).
Is #245, #356, and #749. Fixes#245 (redrawhook umbrella issue).
Does not reintroduce #257 (comment).
Does not reintroduce #259 (comment)
Closes#281 as obsolete.
Fixes#295.
Fixes#324.
Fixes#375.
Fixes#377.
Closes#421 as obsolete.
Fixes#520.
Unblocks #536 (already milestoned).
Fixes#632.
Unblocks #635. Milestoned.
Unblocks #688. Milestoned.
Unblocks administrative issue #655 (already milestoned).
(The above is copied from
https://github.com/zsh-users/zsh-syntax-highlighting/pull/749#issuecomment-658407330,
but repeated here for the sake of github's commit-to-issue linking magic.)
* feature/redrawhook:
docs: Track making the new codepath conditional upon the 'memo=' feature.
On the feature/redrawhook branch, changelog: Add entries for issues fixed by this branch.
On the feature/redrawhook branch, change the detection of the 'memo=' feature to avoid a catch-22.
driver: Make the redrawhook codepath conditional upon the memo= feature.
On the feature/redrawhook branch, move the changelog entry to the current release's section.
driver: Fix a bug that prevented subsequent, third-party zle-line-pre-redraw hooks from running.
driver: Do not pass widget arguments to _zsh_highlight
driver: Clarify comment. No functional change.
driver: Allow for -U in autoloaded function definition
driver: Use idiomatic module check
driver: Make the shadowing $WIDGET read only.
driver: Avoid a fork in the common case.
test harness: Actually test the new code.
driver: Rewrite without a state variable
noop: Make a whitespace-only change to reduce noise in the next commit.
docs: Rewrap.
docs: Update FAQ answer per changes on this branch.
redo _zsh_highlight__function_callable_p
driver: Use a different way of checking whether add-zle-hook-widget is present.
changelog: Use a more specific link.
changelog: Note the effect of fixing #245/#90 and an alternative.
driver: Pass zle-line-finish arguments on to _zsh_highlight.
driver: Hook zle-line-finish.
driver: Reimplement using 'add-zle-hook-widget zle-line-pre-redraw'
wrappers: Reimplement using Mikachu's zle-line-pre-redraw hook (workers/36650).
This reverts commit 8a1bd7c8b6.
The detection only works correctly from a widget function, so the change
was wrong: it caused zsh_highlight__memo_feature to be set to false
every time.
* origin/master: (297 commits)
driver: Follow-up to grandparent: Have all test suite entry points declare the mock $region_highlight.
Use the new, unreleased zsh 'memo=' feature to remove only our own entries from $region_highlight.
driver: Stop re-declaring $region_highlight. It's unneeded.
docs: regexp highlighter: Fix a wrong associative array name in the example.
docs: Fix obs-repository link
tests: Fix a wrong value of $PREBUFFER in a test, and add checks to prevent this from recurring.
test harness: Fix use of an undefined variable in an error message.
'main': Don't progress the $in_redirection staller while $in_param.
tests: Add an XFail test for issue #712.
'main': Highlight the parentheses of array assignments as reserved words.
CI += zsh-5.8
main: Add tests for arithmetic expansion
main: Add arithmetic substitution highlighting
changelog.md: Restore vertical whitespace before section headers.
'main': Fix issue #677, concerning multiline aliases.
changelog: Update through HEAD.
'main': Further optimize argument parsing.
'main': Optimize a hot path.
tests: Add a performance testing script, for measuring the performance of the 'main' highlighter on a large file.
changelog: Update through HEAD.
test harness: Print the expected-v.-actual on every failure, not just upon cardinality failures.
Document ZSH_HIGHLIGHT_MAXLENGTH.
'main': Fix the last commit's bug concerning parameter elision not happening in redirects in command position.
'main': Add a test for parameter elision not happening in redirects in command position.
'main': Fix regression in zsh 5.3.1 and older: all precmd hooks later than z-sy-h would be aborted.
changelog += WARN_NESTED_VAR fixes (#727, #731)
'main': Fix a regression caused by the great-grandparent commit's WARN_NESTED_VAR fix.
'main': Don't run `_zsh_highlight_main__type` on every non-command word.
'make perf': Show only a cumulative datum per highligher, rather than per test file.
'main': Don't trip WARN_NESTED_VAR.
'main': Follow-up to previous: Document the version number, and deduplicate some option letters.
'main': precommands += strace
editorconfig: Fix Makefile settings
Fix typo
Bump copyright years.
driver: Fix "_zsh_highlight:3: read-only variable: ret" warnings when POSIX_BUILTINS is set.
tests: Add a test for the infinite loop fixed by each of the last two commits.
'main': Fix expansion of positional parameters in `_zsh_highlight_main_highlighter__try_expand_parameter`.
'main': Fix an infinite loop.
'main': precommands += ionice(1) (from util-linux)
driver: Simplify initialization of $zsyh_user_options in the fallback codepath.
driver: Make sure we don't change the return value in a called function.
'main': Make logic more robust. No functional change.
'main': Break out an anonymous function into a named function.
Fix typos in comments.
main: Add test for issue #713
'main': Support the 'env' precommand.
test harness: Fix the pretty-printer's padding implementation.
Revert "test harness: Rewrite the columnar pretty-printer without external tools." and "travis: Remove bsdmainutils since column(1) has been removed, three commits ago."
changelog: Update through HEAD.
'main': Correctly highlight '&&' and '||' inside '[[ … ]]' conditions.
'main': Highlight reserved words following assignments as errors.
tests: Add tests for issue #461.
test harness: Output the time information to the same place the test name was printed to.
test harness: Stringify values in a more readable manner.
tests: Add a unit test for a path specified with mixed quoting.
tests: Add a test for issue #498, which has already been fixed.
tests: Test that global qualifiers and command substitutions aren't evaluated.
'main': Don't consider path_prefix in alias expansions.
'main': Add a test for aliases to AUTO_CD directories.
'main': Let AUTO_CD directories be highlighted with their own style.
'main': Add an auxiliary variable for readability.
'main': In command position, do not highlight directories (unless AUTO_CD is set) and non-executable files.
'main': Extend tests to capture the current behaviour.
'main': Add an XFail test for issue #202.
'main': Highlight errors from the EQUALS option.
'main': Let the type determination ignore global aliases when it ignores regular ones.
'main': Add a regression test for parameters that expand to global aliases.
'main': Enable the zsh/parameter codepath of global aliases highlighting.
changelog: Update through HEAD.
travis: Remove bsdmainutils since column(1) has been removed, three commits ago.
'main': Highlight global aliases
tests: Record current behaviour on global aliases.
test harness: Rewrite the columnar pretty-printer without external tools.
test harness: Fix an issue with the pretty-printed $expected_region_highlight/$region_highlight diffing.
'main': Support the "close file descriptor" and "coproc" redirection syntaxes
tests: Add a test for the "close file descriptor" and "coproc" redirection syntaxes
tests: Fix the test added in the last commit.
tests: Add a test for issue #705, concerning continuation lines.
test harness: Let tests fail early by exiting non-zero or by setting a flag.
test harness: Print the test name when $skip_test is set.
test harness: Remove a bogus check.
test harness: Fix $skip_test support, broken yesterday.
travis: Install bsdmainutils to provide column(1).
test harness: When the cardinality check fails, pretty-print \$expected_region_highlight and \$region_highlight.
test harness: Don't leak options from test files to the test harness.
test harness: Fix test failures under zsh 5.0.8 and older.
'main': Fix a bug manifesting under zsh 5.2 and older.
'main': Don't highlight arithmetic expansions as command substitutions.
tests: Add a test documenting the current state, prior to introducing #704.
test harness: Change cardinality check semantics
test harness: No-op change to minimize the next diff.
'main': Document additional meanings of the 'S' $braces_stack flag.
'main': When the redirection operator '>&' or '<&' is followed by a positive integer, do not consider that as a filename; it's always a file descriptor.
'main': Add $last_arg for "lookbehind".
noop: Clarify comment.
'main': Honour the MULTIOS option when applying the 'globbing' style.
'main': Document what $in_redirection is currently used for.
'main': The optimized cmdsubst input syntax doesn't glob.
changelog: Fix markup.
...