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
							 |