1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
# -*- mode: sh; mode: sh-bash -*-
q=\'
{
for map in vi-insert vi-command emacs; do
echo __CLEAR__
echo KEYMAP="$map"
echo __BIND0__
"$BASH" --norc -i -c "bind -m $map -p" | sed '/^#/d;s/"\\M-/"\\e/'
echo __BINDX__
builtin bind -m "$map" -X
echo __BINDS__
builtin bind -m "$map" -s
echo __BINDP__
builtin bind -m "$map" -p
echo __PRINT__
done
} | LC_ALL= LC_CTYPE=C awk -v q="$q" '
function keymap_register(key, val, type) {
if (!haskey[key]) {
keys[nkey++] = key;
haskey[key] = 1;
}
keymap[key] = val;
keymap_type[key] = type;
}
function keymap_clear(_, i, key) {
for(i = 0; i < nkey; i++) {
key = keys[i];
delete keymap[key];
delete keymap_type[key];
delete keymap0[key];
haskey[key] = 0;
}
nkey = 0;
}
function keymap_print(_, i, key, type, value, text, line) {
for (i = 0; i < nkey; i++) {
key = keys[i];
type = keymap_type[key];
value = keymap[key];
if (type == "" && value == keymap0[key]) continue;
text = key ": " value;
gsub(/'$q'/, q "\\" q q, text);
line = "bind";
if (KEYMAP != "") line = line " -m " KEYMAP;
if (type == "x") line = line " -x";
line = line " " q text q;
print line;
}
}
/^__BIND0__$/ { mode = 0; next; }
/^__BINDX__$/ { mode = 1; next; }
/^__BINDS__$/ { mode = 2; next; }
/^__BINDP__$/ { mode = 3; next; }
/^__CLEAR__$/ { keymap_clear(); next; }
/^__PRINT__$/ { keymap_print(); next; }
sub(/^KEYMAP=/, "") { KEYMAP = $0; }
/(ble-decode\/.hook|_ble_decode_hook) / { next; }
match($0, /^"(\\.|[^"])+": /) {
key = substr($0, 1, RLENGTH - 2);
val = substr($0, 1 + RLENGTH);
gsub(/\\M-/, "\\e", key);
if (mode) {
type = mode == 1 ? "x" : mode == 2 ? "s" : "";
keymap_register(key, val, type);
} else {
keymap0[key] = val;
}
}
'
|