Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: ZLE Vi-mode: visual mode selection doesn't match the characters highlighted

On Wed, Oct 16, 2019 at 09:37:50PM +0200, Oliver Kiddle wrote:
> Replying off-list because your message was off-list. Feel free to quote
> me from this message if you reply back on-list.
> On 13 Oct, Doron Behar wrote:
> > Thanks for suggesting that. Indeed this is a combination of terminal
> > emulators' settings / differences in behaviour along with a certain
> > plugin I use: https://github.com/zsh-users/zsh-syntax-highlighting
> If I run zsh -df and then enable just that plugin by doing
>   . zsh-syntax-highlighting.zsh
> then I still can't reproduce the problem with highlighting of the t.
> It doesn't appear to create any new keymaps so I'm unsure why you
> don't get the `t' highlighted. Are you loading it with a plugin
> manager. It'd be useful to isolate just the minimum required to
> cause the problem.

Oliver I appreciate your attendance to this issue yet I believe it's not
related to the cursor's character not getting highlighted. I'd like to
focus here on the cursor's character's highlighting and tend to the `t`
not highlighted at the GitHub thread:


I'll emphasize though, that _that_ plugin's issue, making the `t` not
highlighted, appears only when the plugin colors the text selected, as
best explained and demonstrated here:


> Zsh does highlight the cursor position. It is down to the terminal
> emulator how that appears. What terminal emulator do you use? What is
> $TERM set to and what OS are you on? I use a green solid block as my
> cursor and I know that the cursor position is included in the
> selection.  It appears much the same in vim and gvim.

I'm using NixOS with URxvt. Our urxvt is compiled according to this


My `$TERM` using `Urxvt` is `rxvt-unicode-256color`.

I tested Urxvt with a blank .Xresources (I ran `xrdb merge .Xresources`)
and other terminal emulators:

- Gnome Terminal
- Konsole

Using a **non blinking cursor**, **all terminal emulators** have this

I made a demonstration of the other terminals here:


I dearly hope the issue is clear now.


> You may be able to configure the cursor with escape sequences. For
> example, for a vertical bar (good for vi insert mode):
>   print -n $'\e[5 q'

I tried using an underline cursor and it's a good enough workaround for
now - The character the cursor is located at is highlighted and I can
even see the cursor's underline at the same color of the background
right below that character. I wouldn't consider this as a solution
because I tend to prefer the block cursor.

> We could perhaps use some hooks for when visual mode is invoked and
> finished.

Yea I can use zle-keymap-select to further improve the experience but I
still prefer using a unchanging block cursor.

> > Oliver, do you think perhaps ZSH could 'double reverse' the cursor in
> > visual mode? I think this will emulate Vim's behaviour better because
> > this way, with a non blinking cursor in visual mode, the character the cursor
> > stands upon will standout as well.
> That could make it hard to see which end of the selection the cursor
> is at.

I agree, but the current behavior is even worse: With a non blinking
cursor, it's still impossible to see what end of the selection the
cursor is at. On top of that, the character the cursor is at is not
highlighted at all - misleading me into thinking it's an exclusive

> Whatever highlighting is chosen, there will be some terminal
> setup for which it is not ideal and somebody who complains.

I tend to disagree, as my GIF demonstrations show that probably all
terminal emulators, with whatever colors and configured to not the
cursor don't highlight characters properly.

> Vim's defaults result in a barely visible selection if you chose a
> near-white default background colour.

I tested the terminal emulators listed above with white or whitish
backgrounds, and the same misleading highlighting behaviour was there,
only the colors were reversed. Again, only with a non blinking cursor.

> Copying Vim might be tempting but Vim is not the only editor - zsh
> uses the term region for the selection in many cases because the
> feature first appeared in an Emacs form.

I don't know how Emacs feels in that sense, nor ZSH when trying to
emulate Emacs. But since ZSH emulates no more then 2 editors - I don't
think it would be too much to emulate Vim better, if `bindkey -v` was

> Feel free to lobby on zsh-workers if you want the defaults changed.
> Personally I was happy to just tweak zle_highlight and the terminal
> emulator.

Thanks for the suggestion, yet I'm not sure what defaults I can change
as it seems to me the underlying code needs a change. I'd thank you a
lot Oliver if you'll merely tell me whether you get a sense of the issue
thanks to the GIF demonstrations. Hoping you'll be able to advice me how
to describe it better for zsh-workers.


Messages sorted by: Reverse Date, Date, Thread, Author