about summary refs log tree commit diff stats
path: root/modules/by-name/zs/zsh/config/custom_cursor.zsh
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 19:43:11 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2024-10-18 19:45:26 +0200
commit7b9400b9453a63477d17ad212afba5b5644ae6d3 (patch)
tree51d5db3356942501cafeb6195234908297625c91 /modules/by-name/zs/zsh/config/custom_cursor.zsh
parentrefactor(modules/legacy/conf/zsh): Modernize module (diff)
downloadnixos-config-7b9400b9453a63477d17ad212afba5b5644ae6d3.zip
refactor(modules/legacy/conf/zsh): Parameterize and move to new `by-name`
Diffstat (limited to 'modules/by-name/zs/zsh/config/custom_cursor.zsh')
-rw-r--r--modules/by-name/zs/zsh/config/custom_cursor.zsh42
1 files changed, 42 insertions, 0 deletions
diff --git a/modules/by-name/zs/zsh/config/custom_cursor.zsh b/modules/by-name/zs/zsh/config/custom_cursor.zsh
new file mode 100644
index 00000000..37390c1c
--- /dev/null
+++ b/modules/by-name/zs/zsh/config/custom_cursor.zsh
@@ -0,0 +1,42 @@
+#!/usr/bin/env zsh
+
+# Change cursor shape for different vi modes.
+function zle-keymap-select {
+  if [[ ${KEYMAP} == vicmd ]] ||
+     [[ $1 = 'block' ]]; then
+    echo -ne '\e[1 q'
+  elif [[ ${KEYMAP} == main ]] ||
+       [[ ${KEYMAP} == viins ]] ||
+       [[ ${KEYMAP} = '' ]] ||
+       [[ $1 = 'beam' ]]; then
+    echo -ne '\e[5 q'
+  fi
+}
+zle -N zle-keymap-select
+
+# ci", ci', ci`, di", etc
+autoload -U select-quoted
+zle -N select-quoted
+for m in visual viopp; do
+  for c in {a,i}{\',\",\`}; do
+    bindkey -M "$m" "$c" select-quoted
+  done
+done
+
+# ci{, ci(, ci<, di{, etc
+autoload -U select-bracketed
+zle -N select-bracketed
+for m in visual viopp; do
+  for c in {a,i}${(s..)^:-'()[]{}<>bB'}; do
+    bindkey -M $m $c select-bracketed
+  done
+done
+
+zle-line-init() {
+    zle -K viins # initiate `vi insert` as keymap (can be removed if `bindkey -V` has been set elsewhere)
+    echo -ne "\e[5 q"
+}
+zle -N zle-line-init
+
+echo -ne '\e[5 q' # Use beam shape cursor on startup.
+precmd() { echo -ne '\e[5 q' ;} # Use beam shape cursor for each new prompt.