113 lines
4.2 KiB
Bash
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
|