diff options
author | An-Cheng Huang <ancheng@vyatta.com> | 2007-11-12 13:06:02 -0800 |
---|---|---|
committer | An-Cheng Huang <ancheng@vyatta.com> | 2007-11-12 13:06:02 -0800 |
commit | b7fc9e0f6d6105ba2203f219743d4b269415e84b (patch) | |
tree | ef6586dfc62798c2b17487b443864699aca55f31 /examples/scripts.noah/remap_keys.bash | |
download | vyatta-bash-b7fc9e0f6d6105ba2203f219743d4b269415e84b.tar.gz vyatta-bash-b7fc9e0f6d6105ba2203f219743d4b269415e84b.zip |
initial import from bash_3.1dfsg.orig.tar.gz
Diffstat (limited to 'examples/scripts.noah/remap_keys.bash')
-rw-r--r-- | examples/scripts.noah/remap_keys.bash | 71 |
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 |