65 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
|   | # stty.bash | ||
|  | # Author: Noah Friedman <friedman@prep.ai.mit.edu> | ||
|  | # Created: 1992-01-11 | ||
|  | # Last modified: 1993-09-29 | ||
|  | # Public domain | ||
|  | 
 | ||
|  | # Conversion to bash v2 syntax done by Chet Ramey | ||
|  | 
 | ||
|  | # Commentary: | ||
|  | # Code: | ||
|  | 
 | ||
|  | require remap_keybindings | ||
|  | 
 | ||
|  | #:docstring stty: | ||
|  | # Track changes to certain keybindings with stty, and make those changes | ||
|  | # reflect in bash's readline bindings as well.  | ||
|  | # | ||
|  | # This requires bash version 1.10 or newer, since previous versions did not | ||
|  | # implement the `bind' builtin. | ||
|  | #:end docstring: | ||
|  | 
 | ||
|  | ###;;;autoload | ||
|  | function stty () | ||
|  | { | ||
|  |     local erase="backward-delete-char" | ||
|  |     local kill="unix-line-discard" | ||
|  |     local werase="backward-kill-word" | ||
|  |     local lnext="quoted-insert" | ||
|  |     local readline_function="" | ||
|  |     local key="" | ||
|  |     local stty_command="" | ||
|  | 
 | ||
|  |     while [ $# -gt 0 ]; do | ||
|  |        case "$1" in | ||
|  |           erase | kill | werase | lnext ) | ||
|  |              key=$(echo "${2}" | cat -v | sed 's/\^/\\C-/') | ||
|  |              readline_function=$(eval echo \$${1}) | ||
|  | 
 | ||
|  |              # Get rid of any current bindings; the whole point of this | ||
|  |              # function is to make the distinction between readline | ||
|  |              # bindings and particular cbreak characters transparent; old | ||
|  |              # readline keybindings shouldn't hang around. | ||
|  | 	     # could use bind -r here instead of binding to self-insert | ||
|  |              remap_keybindings "${readline_function}" "self-insert" | ||
|  |               | ||
|  |              # Bind new key to appropriate readline function | ||
|  |              bind "\"${key}\": ${readline_function}" | ||
|  | 
 | ||
|  |              stty_command="${stty_command} ${1} ${2}" | ||
|  |              shift 2 | ||
|  |             ;; | ||
|  |           *) | ||
|  |              stty_command="${stty_command} ${1}" | ||
|  |              shift | ||
|  |             ;; | ||
|  |        esac | ||
|  |     done | ||
|  | 
 | ||
|  |     command stty ${stty_command} | ||
|  | } | ||
|  | 
 | ||
|  | provide stty | ||
|  | 
 | ||
|  | # stty.bash ends here |