5

I have a couple of questions regarding the emacs-like keyboard bindings in Zsh. As background to all the questions: I have Emacs-like keybinding activated with bindkey -e (activated by default)

Copying and region highlighting:

In Emacs, if you run C-space (set-mark), select a region and then copy it using M-w, Emacs puts the region in the kill ring and stops selecting text (i.e. if I move the point, no more text is selected).

However, I can't get the same behavior in ZLE. Once I copy a region with M-W, the selection mode is still on, and if I move my cursor, the selection keeps changing.

Stop selection:

In Emacs, if I am selecting a region, and press C-g, the selection stops (the current mark is killed). In Zsh, by default, C-g starts a new line in the shell. So is there a ZLE command that I can bind to (maybe using something different from C-g) to stop an ongoing selection?

Amelio Vazquez-Reina
  • 40,169
  • 77
  • 197
  • 294

1 Answers1

3

To deactivate the selection, run set-mark-command with a negative argument: ESC - Ctrl+Space.

To copy the region and deactivate the selection, write a function that performs the two actions, then declare it as a widget with zle -N and bind that widget to a key.

copy-region-as-kill-deactivate-mark () {
  zle copy-region-as-kill
  zle set-mark-command -n -1
}
zle -N copy-region-as-kill-deactivate-mark
bindkey '\ew' copy-region-as-kill-deactivate-mark
Gilles 'SO- stop being evil'
  • 807,993
  • 194
  • 1,674
  • 2,175
  • hi Gilles, when i run `set-mark-command` in zsh and move the cursor left/right, will it markup the selected text in black bgcolor... i am not seeing such highlighting in my zsh/gnome terminal... In bash as well, @http://unix.stackexchange.com/questions/11933/copy-and-set-mark-in-bash-as-in-emacs Mikel has said, bash doesn't do highlighting.... –  Aug 06 '15 at 16:51