From c3362aefa2e762211409923cfff065541bebf9e7 Mon Sep 17 00:00:00 2001 From: Saumit Dinesan Date: Sun, 22 May 2022 00:37:40 +0530 Subject: ble.sh & z4h addition --- .local/src/blesh/keymap/emacs.sh | 163 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 163 insertions(+) create mode 100644 .local/src/blesh/keymap/emacs.sh (limited to '.local/src/blesh/keymap/emacs.sh') diff --git a/.local/src/blesh/keymap/emacs.sh b/.local/src/blesh/keymap/emacs.sh new file mode 100644 index 0000000..430e213 --- /dev/null +++ b/.local/src/blesh/keymap/emacs.sh @@ -0,0 +1,163 @@ +# this script is a part of blesh (https://github.com/akinomyoga/ble.sh) under BSD-3-Clause license +ble/is-function ble-edit/bind/load-editing-mode:emacs && return 0 +function ble-edit/bind/load-editing-mode:emacs { :; } +ble/util/autoload "$_ble_base/keymap/vi.sh" \ + ble/widget/vi-rlfunc/{prev,end,next}-word \ + ble/widget/vi-command/{forward,backward}-{v,u}word \ + ble/widget/vi-command/forward-{v,u}word-end +_ble_keymap_emacs_white_list=( + self-insert + batch-insert + nop + magic-space + copy{,-forward,-backward}-{c,f,s,u}word + copy-region{,-or} + clear-screen + command-help + display-shell-version + redraw-line +) +function ble/keymap:emacs/is-command-white { + if [[ $1 == ble/widget/self-insert ]]; then + return 0 + elif [[ $1 == ble/widget/* ]]; then + local IFS=$_ble_term_IFS + local cmd=${1#ble/widget/}; cmd=${cmd%%["$_ble_term_IFS"]*} + [[ $cmd == emacs/* || " ${_ble_keymap_emacs_white_list[*]} " == *" $cmd "* ]] && return 0 + fi + return 1 +} +function ble/widget/emacs/__before_widget__ { + if ! ble/keymap:emacs/is-command-white "$WIDGET"; then + ble-edit/undo/add + fi +} +function ble/widget/emacs/undo { + local arg; ble-edit/content/get-arg 1 + ble-edit/undo/undo "$arg" || ble/widget/.bell 'no more older undo history' +} +function ble/widget/emacs/redo { + local arg; ble-edit/content/get-arg 1 + ble-edit/undo/redo "$arg" || ble/widget/.bell 'no more recent undo history' +} +function ble/widget/emacs/revert { + local arg; ble-edit/content/clear-arg + ble-edit/undo/revert +} +_ble_keymap_emacs_modeline=:: +ble/array#push _ble_textarea_local_VARNAMES \ + _ble_keymap_emacs_modeline +function ble/keymap:emacs/update-mode-name { + local opt_multiline=; [[ $_ble_edit_str == *$'\n'* ]] && opt_multiline=1 + local footprint=$opt_multiline:$_ble_edit_arg:$_ble_edit_kbdmacro_record + [[ $footprint == "$_ble_keymap_emacs_modeline" ]] && return 0 + _ble_keymap_emacs_modeline=$footprint + local name= + [[ $opt_multiline ]] && name=$'\e[1m-- MULTILINE --\e[m' + local info= + [[ $_ble_edit_arg ]] && + info=$info$' (arg: \e[1;34m'$_ble_edit_arg$'\e[m)' + [[ $_ble_edit_kbdmacro_record ]] && + info=$info$' \e[1;31mREC\e[m' + [[ ! $info && $opt_multiline ]] && + info=$' (\e[35mRET\e[m or \e[35mC-m\e[m: insert a newline, \e[35mC-j\e[m: run)' + [[ $name ]] || info=${info#' '} + name=$name$info + ble/edit/info/default ansi "$name" +} +function ble/widget/emacs/__after_widget__ { + ble/keymap:emacs/update-mode-name +} +function ble/widget/emacs/quoted-insert-char { + _ble_edit_mark_active= + _ble_decode_char__hook=ble/widget/emacs/quoted-insert-char.hook + return 147 +} +function ble/widget/emacs/quoted-insert-char.hook { + ble/widget/quoted-insert-char.hook + ble/keymap:emacs/update-mode-name +} +function ble/widget/emacs/quoted-insert { + _ble_edit_mark_active= + _ble_decode_key__hook=ble/widget/emacs/quoted-insert.hook + return 147 +} +function ble/widget/emacs/quoted-insert.hook { + ble/widget/quoted-insert.hook + ble/keymap:emacs/update-mode-name +} +function ble/widget/emacs/bracketed-paste { + ble/widget/bracketed-paste + _ble_edit_bracketed_paste_proc=ble/widget/emacs/bracketed-paste.proc + return 147 +} +function ble/widget/emacs/bracketed-paste.proc { + ble/widget/bracketed-paste.proc "$@" + ble/keymap:emacs/update-mode-name +} +function ble-decode/keymap:emacs/define { + local ble_bind_nometa= + ble-decode/keymap:safe/bind-common + ble-decode/keymap:safe/bind-history + ble-decode/keymap:safe/bind-complete + ble-decode/keymap:safe/bind-arg + ble-bind -f 'C-d' 'delete-region-or delete-forward-char-or-exit' + ble-bind -f 'M-^' history-expand-line + ble-bind -f 'SP' magic-space + ble-bind -f __attach__ safe/__attach__ + ble-bind -f __before_widget__ emacs/__before_widget__ + ble-bind -f __after_widget__ emacs/__after_widget__ + ble-bind -f __line_limit__ __line_limit__ + ble-bind -f 'C-c' discard-line + ble-bind -f 'C-j' accept-line + ble-bind -f 'C-RET' accept-line + ble-bind -f 'C-m' accept-single-line-or-newline + ble-bind -f 'RET' accept-single-line-or-newline + ble-bind -f 'C-o' accept-and-next + ble-bind -f 'C-x C-e' edit-and-execute-command + ble-bind -f 'M-#' insert-comment + ble-bind -f 'M-C-e' shell-expand-line + ble-bind -f 'M-&' tilde-expand + ble-bind -f 'C-g' bell + ble-bind -f 'C-x C-g' bell + ble-bind -f 'C-M-g' bell + ble-bind -f 'C-l' clear-screen + ble-bind -f 'C-M-l' redraw-line + ble-bind -f 'f1' command-help + ble-bind -f 'C-x C-v' display-shell-version + ble-bind -c 'C-z' fg + ble-bind -c 'M-z' fg + ble-bind -f 'C-\' bell + ble-bind -f 'C-^' bell + ble-bind -f 'C-_' emacs/undo + ble-bind -f 'C-DEL' emacs/undo + ble-bind -f 'C-BS' emacs/undo + ble-bind -f 'C-/' emacs/undo + ble-bind -f 'C-x u' emacs/undo + ble-bind -f 'C-x C-u' emacs/undo + ble-bind -f 'C-x U' emacs/redo + ble-bind -f 'C-x C-S-u' emacs/redo + ble-bind -f 'M-r' emacs/revert + ble-bind -f 'C-q' emacs/quoted-insert + ble-bind -f 'C-v' emacs/quoted-insert + ble-bind -f paste_begin emacs/bracketed-paste +} +function ble-decode/keymap:emacs/initialize { + local fname_keymap_cache=$_ble_base_cache/keymap.emacs + if [[ -s $fname_keymap_cache && + $fname_keymap_cache -nt $_ble_base/keymap/emacs.sh && + $fname_keymap_cache -nt $_ble_base/lib/init-cmap.sh ]]; then + source "$fname_keymap_cache" && return 0 + fi + ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.emacs..." + { + ble/decode/keymap#load isearch dump + ble/decode/keymap#load nsearch dump + ble/decode/keymap#load emacs dump + } 3>| "$fname_keymap_cache" + ble/edit/info/immediate-show text "ble.sh: updating cache/keymap.emacs... done" +} +ble-decode/keymap:emacs/initialize +blehook/invoke keymap_load +blehook/invoke keymap_emacs_load +return 0 -- cgit v1.2.3