#!/bin/zsh keymap_file="$1" # taken from zkbd emulate -RL zsh trap "return 1" 1 2 15 function getseq() { trap "stty ${$(stty -g 2>/dev/null):-echo -raw}" 0 1 2 15 stty raw -echo local k='' seq='' i for ((i=10; i>0; --i)) do read -t -k 1 k && break sleep 1 done [[ -n $k ]] || exit [[ $k = $'\012' || $k = $'\015' || $k = ' ' ]] && exit seq=$k while read -t -k 1 k do seq=$seq$k done print -Rn ${(V)seq} } function entry() { echo -n "$1: " seq="$(getseq)" echo echo "key[$1]='$seq'" >> "$keymap_file.tmp" } echo "keymap time!" echo 'typeset -g -A key' > "$keymap_file.tmp" entry Backspace entry CtrlBackspace entry Insert entry Delete entry PageUp entry PageDown entry Home entry End entry Up entry Left entry Down entry Right entry CtrlUp entry CtrlLeft entry CtrlDown entry CtrlRight mv "$keymap_file.tmp" "$keymap_file"