| From: Mike Frysinger <vapier@chromium.org> |
| Date: Mon, 29 Jan 2018 17:08:21 -0500 |
| Subject: vt: change SGR 21 to follow the standards |
| |
| commit 65d9982d7e523a1a8e7c9af012da0d166f72fc56 upstream. |
| |
| ECMA-48 [1] (aka ISO 6429) has defined SGR 21 as "doubly underlined" |
| since at least March 1984. The Linux kernel has treated it as SGR 22 |
| "normal intensity" since it was added in Linux-0.96b in June 1992. |
| Before that, it was simply ignored. Other terminal emulators have |
| either ignored it, or treat it as double underline now. xterm for |
| example added support in its 304 release (May 2014) [2] where it was |
| previously ignoring it. |
| |
| Changing this behavior shouldn't be an issue: |
| - It isn't a named capability in ncurses's terminfo database, so no |
| script is using libtinfo/libcurses to look this up, or using tput |
| to query & output the right sequence. |
| - Any script assuming SGR 21 will reset intensity in all terminals |
| already do not work correctly on non-Linux VTs (including running |
| under screen/tmux/etc...). |
| - If someone has written a script that only runs in the Linux VT, and |
| they're using SGR 21 (instead of SGR 22), the output should still |
| be readable. |
| |
| imo it's important to change this as the Linux VT's non-conformance |
| is sometimes used as an argument for other terminal emulators to not |
| implement SGR 21 at all, or do so incorrectly. |
| |
| [1]: https://www.ecma-international.org/publications/standards/Ecma-048.htm |
| [2]: https://github.com/ThomasDickey/xterm-snapshots/commit/2fd29cb98d214cb536bcafbee00bc73b3f1eeb9d |
| |
| Signed-off-by: Mike Frysinger <vapier@chromium.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| [bwh: Backported to 3.16: adjust indentation] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/tty/vt/vt.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/drivers/tty/vt/vt.c |
| +++ b/drivers/tty/vt/vt.c |
| @@ -1303,6 +1303,11 @@ static void csi_m(struct vc_data *vc) |
| case 3: |
| vc->vc_italic = 1; |
| break; |
| + case 21: |
| + /* |
| + * No console drivers support double underline, so |
| + * convert it to a single underline. |
| + */ |
| case 4: |
| vc->vc_underline = 1; |
| break; |
| @@ -1339,7 +1344,6 @@ static void csi_m(struct vc_data *vc) |
| vc->vc_disp_ctrl = 1; |
| vc->vc_toggle_meta = 1; |
| break; |
| - case 21: |
| case 22: |
| vc->vc_intensity = 1; |
| break; |