summaryrefslogtreecommitdiff
path: root/examples/scripts.noah/stty.bash
diff options
context:
space:
mode:
Diffstat (limited to 'examples/scripts.noah/stty.bash')
-rw-r--r--examples/scripts.noah/stty.bash64
1 files changed, 64 insertions, 0 deletions
diff --git a/examples/scripts.noah/stty.bash b/examples/scripts.noah/stty.bash
new file mode 100644
index 0000000..611d970
--- /dev/null
+++ b/examples/scripts.noah/stty.bash
@@ -0,0 +1,64 @@
+# 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