Bash-4.3 distribution sources and documentation
[platform/upstream/bash.git] / examples / functions / fstty
1 #
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 #
5 #
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.
23
24 #
25 # Convert between the stty ^H control character form and the readline \C-H
26 # form
27 #
28 cvt()
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 #
37 fstty()
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 }