blob: 5ed594f04f6b391d40c2b921e19b1f057b93b4ee [file] [log] [blame]
Jari Aalto726f6381996-08-26 18:22:31 +00001#
2# A function that works as a front end for both stty and the `bind'
3# builtin, so the tty driver and readline see the same changes
4#
Chet Rameyac50fba2014-02-26 09:36:43 -05005#
6# Chet Ramey <chet.ramey@case.edu>
7#
8# Copyright 2011 Chester Ramey
9#
10# This program is free software; you can redistribute it and/or modify
11# it under the terms of the GNU General Public License as published by
12# the Free Software Foundation; either version 2, or (at your option)
13# any later version.
14#
15# TThis program is distributed in the hope that it will be useful,
16# but WITHOUT ANY WARRANTY; without even the implied warranty of
17# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18# GNU General Public License for more details.
19#
20# You should have received a copy of the GNU General Public License
21# along with this program; if not, write to the Free Software Foundation,
22# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Jari Aalto726f6381996-08-26 18:22:31 +000023
24#
25# Convert between the stty ^H control character form and the readline \C-H
26# form
27#
28cvt()
29{
30 echo "$@" | cat -v | sed 's/\^/\\C-/'
31}
32
33#
34# stty front-end. Parses the argument list and creates two command strings,
35# one for stty, another for bind.
36#
37fstty()
38{
39 local cmd="" bargs=""
40 local e
41
42 while [ $# -gt 0 ]
43 do
44 case "$1" in
45 -a) cmd="$cmd everything"
46 ;;
47 erase) shift;
48 e=$(cvt "$1")
49 cmd="$cmd erase $1"
50 bargs="$bargs '\"$e\": backward-delete-char'"
51 ;;
52 kill) shift
53 e=$(cvt "$1")
54 cmd="$cmd kill $1"
55 bargs="$bargs '\"$e\": unix-line-discard'"
56 ;;
57 werase) shift;
58 e=$(cvt "$1")
59 cmd="$cmd erase $1"
60 bargs="$bargs '\"$e\": backward-kill-word'"
61 ;;
62 lnext) shift;
63 e=$(cvt "$1")
64 cmd="$cmd erase $1"
65 bargs="$bargs '\"$e\": quoted-insert'"
66 ;;
67 *) cmd="$cmd $1"
68 ;;
69 esac
70 shift
71 done
72
73 command stty $cmd
74 if [ -n "$bargs" ]; then
75 builtin bind $bargs
76 fi
77}