aboutsummaryrefslogtreecommitdiffstats
path: root/examples/scripts.noah/remap_keys.bash
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scripts.noah/remap_keys.bash')
-rw-r--r--examples/scripts.noah/remap_keys.bash71
1 files changed, 71 insertions, 0 deletions
diff --git a/examples/scripts.noah/remap_keys.bash b/examples/scripts.noah/remap_keys.bash
new file mode 100644
index 0000000..aa7c463
--- /dev/null
+++ b/examples/scripts.noah/remap_keys.bash
@@ -0,0 +1,71 @@
+# remap_keybindings.bash
+# Author: Noah Friedman <friedman@prep.ai.mit.edu>
+# Created: 1992-01-11
+# Last modified: 1993-02-03
+# Public domain
+
+# Conversion to bash v2 syntax done by Chet Ramey
+
+# Commentary:
+# Code:
+
+#:docstring remap_keybindings:
+# Usage: remap_keybindings old_function new_function
+#
+# Clear all readline keybindings associated with OLD_FUNCTION (a Readline
+# function) rebinding them to NEW_FUNCTION (`self-insert' by default)
+#
+# This requires bash version 1.10 or newer, since previous versions did not
+# implement the `bind' builtin.
+#:end docstring:
+
+###;;;autoload
+function remap_keybindings ()
+{
+ local unbind_function="$1"
+ local bind_function="${2:-'self-insert'}"
+ local bind_output
+ local arg
+
+ # If they're the same thing, the work has already been done. :-)
+ if [ "${unbind_function}" = "${bind_function}" ]; then
+ return 0
+ fi
+
+ while : ; do
+ bind_output="$(bind -q ${unbind_function} 2> /dev/null)"
+
+ case "${bind_output}" in
+ "${unbind_function} can be invoked via"* ) ;;
+ "" ) return 1 ;; # probably bad argument to bind
+ *) return 0 ;; # unbound
+ esac
+
+ # Format of bind_output is like:
+ # 'quoted-insert can be invoked via "\C-q", "\C-v".'
+ # 'self-insert can be invoked via " ", "!", """, "$", "%", ...'
+ set -- ${bind_output}
+ shift 5
+
+ for arg in "$@" ; do
+ # strip off trailing `.' or `,'
+ arg=${arg%.};
+ arg=${arg%,};
+
+ case ${arg} in
+ ..)
+ # bind -q didn't provide whole list of key bindings; jump
+ # to top loop to get more
+ continue 2 ;
+ ;;
+ *)
+ bind "${arg}: ${bind_function}"
+ ;;
+ esac
+ done
+ done
+}
+
+provide remap_keybindings
+
+# remap_keybindings.bash ends here