72 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | # 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 |