getty: set tty attrs so that control chars are shown as ^c
authorDenys Vlasenko <vda.linux@googlemail.com>
Thu, 2 Oct 2014 11:45:21 +0000 (13:45 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Thu, 2 Oct 2014 11:45:21 +0000 (13:45 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
loginutils/getty.c

index 4b1b73befd3f116df27d8cc86a02e14c866c6ad3..174542841925f0d9d98426a53f52c5d31db448e7 100644 (file)
@@ -334,18 +334,19 @@ static void finalize_tty_attrs(void)
         *         observed to improve backspacing through Unicode chars
         */
 
-       /* line buffered input (NL or EOL or EOF chars end a line);
-        * recognize INT/QUIT/SUSP chars;
-        * echo input chars;
-        * echo BS-SP-BS on erase character;
-        * echo kill char specially, not as ^c (ECHOKE controls how exactly);
-        * erase all input via BS-SP-BS on kill char (else go to next line)
+       /* ICANON  line buffered input (NL or EOL or EOF chars end a line);
+        * ISIG    recognize INT/QUIT/SUSP chars;
+        * ECHO    echo input chars;
+        * ECHOE   echo BS-SP-BS on erase character;
+        * ECHOK   echo kill char specially, not as ^c (ECHOKE controls how exactly);
+        * ECHOKE  erase all input via BS-SP-BS on kill char (else go to next line)
+        * ECHOCTL Echo ctrl chars as ^c (else echo verbatim:
+        *         e.g. up arrow emits "ESC-something" and thus moves cursor up!)
         */
-       G.tty_attrs.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE;
+       G.tty_attrs.c_lflag |= ICANON | ISIG | ECHO | ECHOE | ECHOK | ECHOKE | ECHOCTL;
        /* Other bits in c_lflag:
         * XCASE   Map uppercase to \lowercase [tried, doesn't work]
         * ECHONL  Echo NL even if ECHO is not set
-        * ECHOCTL Echo ctrl chars as ^c (else don't echo) - maybe set this?
         * ECHOPRT On erase, echo erased chars
         *         [qwe<BS><BS><BS> input looks like "qwe\ewq/" on screen]
         * NOFLSH  Don't flush input buffer after interrupt or quit chars