bash/.local/share/blesh/lib/init-bind.sh
2024-08-18 03:40:38 +02:00

113 lines
4.2 KiB
Bash

# Copyright 2015 Koichi Murase <myoga.murase@gmail.com>. All rights reserved.
# This script is a part of blesh (https://github.com/akinomyoga/ble.sh)
# provided under the BSD-3-Clause license. Do not edit this file because this
# is not the original source code: Various pre-processing has been applied.
# Also, the code comments and blank lines are stripped off in the installation
# process. Please find the corresponding source file(s) in the repository
# "akinomyoga/ble.sh".
#
# Source: /lib/init-bind.sh
function ble/init:bind/append {
local xarg="\"$1\":_ble_decode_hook $2; builtin eval -- \"\$_ble_decode_bind_hook\""
local rarg=$1 condition=$3${3:+' && '}
ble/util/print "${condition}builtin bind -x '${xarg//$q/$Q}'" >> "$fbind1"
ble/util/print "${condition}builtin bind -r '${rarg//$q/$Q}'" >> "$fbind2"
}
function ble/init:bind/append-macro {
local kseq1=$1 kseq2=$2 condition=$3${3:+' && '}
local sarg="\"$kseq1\":\"$kseq2\"" rarg=$kseq1
ble/util/print "${condition}builtin bind '${sarg//$q/$Q}'" >> "$fbind1"
ble/util/print "${condition}builtin bind -r '${rarg//$q/$Q}'" >> "$fbind2"
}
function ble/init:bind/bind-s {
local sarg=$1
ble/util/print "builtin bind '${sarg//$q/$Q}'" >> "$fbind1"
}
function ble/init:bind/generate-binder {
local fbind1=$_ble_base_cache/decode.bind.$_ble_bash.$bleopt_input_encoding.bind
local fbind2=$_ble_base_cache/decode.bind.$_ble_bash.$bleopt_input_encoding.unbind
ble/edit/info/show text "ble.sh: updating binders..."
>| "$fbind1"
>| "$fbind2"
local q=\' Q="'\\''"
local altdqs00='\xC0\x80'
local altdqs24='\xC0\x98'
local altdqs27='\xC0\x9B'
local esc00=$((40300<=_ble_bash&&_ble_bash<50000))
local bind18XX=0
if ((40400<=_ble_bash&&_ble_bash<50000)); then
ble/util/print "[[ -o emacs ]] && builtin bind 'set keyseq-timeout 1'" >> "$fbind1"
fbind2=$fbind1 ble/init:bind/append '\C-x\C-x' 24 '[[ -o emacs ]]'
elif ((_ble_bash<40300)); then
bind18XX=1
fi
local esc1B=3
local esc1B5B=1 bindAllSeq=0
local esc1B1B=$((40100<=_ble_bash&&_ble_bash<40300))
local i
for i in {128..255} {0..127}; do
local ret; ble/decode/c2dqs "$i"
if ((i==0)); then
if ((esc00)); then
ble/init:bind/append-macro '\C-@' "$altdqs00"
else
ble/init:bind/append "$ret" "$i"
fi
elif ((i==24)); then
if ((bind18XX)); then
ble/init:bind/append "$ret" "$i" '[[ ! -o emacs ]]'
else
ble/init:bind/append "$ret" "$i"
fi
elif ((i==27)); then
if ((esc1B==0)); then
ble/init:bind/append "$ret" "$i"
elif ((esc1B==2)); then
ble/init:bind/append-macro '\e' "$altdqs27"
elif ((esc1B==3)); then
ble/init:bind/append-macro '\e' '\xDF\xBC' # C-[
fi
else
((i==28&&_ble_bash>=50000)) && ret='\x1C'
ble/init:bind/append "$ret" "$i"
fi
if ((bind18XX)); then
if ((i==0)); then
ble/init:bind/append-macro "\C-x$ret" "$altdqs24$altdqs00" '[[ -o emacs ]]'
elif ((i==24)); then
ble/init:bind/append-macro "\C-x$ret" "$altdqs24$altdqs24" '[[ -o emacs ]]'
else
ble/init:bind/append-macro "\C-x$ret" "$altdqs24$ret" '[[ -o emacs ]]'
fi
fi
if ((esc1B==3)); then
if ((i==0)); then
ble/init:bind/append-macro '\e'"$ret" "$altdqs27$altdqs00"
elif ((bind18XX&&i==24)); then
ble/init:bind/append-macro '\e'"$ret" "$altdqs27$altdqs24"
else
ble/init:bind/append-macro '\e'"$ret" "$altdqs27$ret"
fi
else
if ((esc1B==1)); then
if ((i==91&&esc1B5B)); then
ble/init:bind/append-macro '\e[' "$altdqs27["
else
ble/init:bind/append "\\e$ret" "27 $i"
fi
fi
if ((i==27&&esc1B1B)); then
ble/init:bind/append-macro '\e\e' '\e[^'
ble/util/print "ble-bind -k 'ESC [ ^' __esc__" >> "$fbind1"
ble/util/print "ble-bind -f __esc__ '.CHARS 27 27'" >> "$fbind1"
fi
fi
done
if ((bindAllSeq)); then
ble/util/print 'source "$_ble_decode_bind_fbinder.bind"' >> "$fbind1"
ble/util/print 'source "$_ble_decode_bind_fbinder.unbind"' >> "$fbind2"
fi
ble/function#try ble/encoding:"$bleopt_input_encoding"/generate-binder
ble/edit/info/immediate-show text "ble.sh: updating binders... done"
}
ble/init:bind/generate-binder