about summary refs log tree commit diff
path: root/Functions/Zle/insert-unicode-char
diff options
context:
space:
mode:
Diffstat (limited to 'Functions/Zle/insert-unicode-char')
-rw-r--r--Functions/Zle/insert-unicode-char17
1 files changed, 17 insertions, 0 deletions
diff --git a/Functions/Zle/insert-unicode-char b/Functions/Zle/insert-unicode-char
new file mode 100644
index 000000000..0ffd29418
--- /dev/null
+++ b/Functions/Zle/insert-unicode-char
@@ -0,0 +1,17 @@
+# Make hex integers appear as 0x...
+setopt localoptions cbases
+
+if [[ $LASTWIDGET = insert-unicode-char ]]; then
+  # Second call; we should have a usable prefix.
+  # If we don't, give up.
+  (( ${+NUMERIC} )) || return 1
+  # Convert it back to hex, padded with zeroes to 8 digits plus the 0x...
+  local -i 16 -Z 10 arg=$NUMERIC
+  # ...and use print to turn this into a Unicode character.
+  LBUFFER+="$(print -n "\U${arg##0x}")"
+else
+  # Set the base to 16...
+  zle argument-base 16
+  # ...wait for user to type hex keys then call this widget again.
+  zle universal-argument
+fi