1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-02-02 09:47:03 +03:00

terminal: split ANSI from DEC mode changes

This commit is contained in:
Tom Gundersen 2014-10-16 14:27:34 +02:00
parent 80d3d25d09
commit 7ee738ec33

View File

@ -392,61 +392,55 @@ static inline void set_reset(term_screen *screen, unsigned int flag, bool set) {
screen->flags &= ~flag;
}
static void screen_mode_change(term_screen *screen, unsigned int mode, bool dec, bool set) {
static void screen_mode_change_ansi(term_screen *screen, unsigned mode, bool set) {
switch (mode) {
case 1:
if (dec) {
/*
* DECCKM: cursor-keys
* TODO
*/
set_reset(screen, TERM_FLAG_CURSOR_KEYS, set);
}
break;
case 6:
if (dec) {
/*
* DECOM: origin-mode
* TODO
*/
screen->state.origin_mode = set;
}
break;
case 7:
if (dec) {
/*
* DECAWN: auto-wrap mode
* TODO
*/
screen->state.auto_wrap = set;
}
break;
case 20:
if (!dec) {
/*
* LNM: line-feed/new-line mode
* TODO
*/
set_reset(screen, TERM_FLAG_NEWLINE_MODE, set);
break;
}
}
static void screen_mode_change_dec(term_screen *screen, unsigned int mode, bool set) {
switch (mode) {
case 1:
/*
* DECCKM: cursor-keys
* TODO
*/
set_reset(screen, TERM_FLAG_CURSOR_KEYS, set);
break;
case 6:
/*
* DECOM: origin-mode
* TODO
*/
screen->state.origin_mode = set;
break;
case 7:
/*
* DECAWN: auto-wrap mode
* TODO
*/
screen->state.auto_wrap = set;
break;
case 25:
if (dec) {
/*
* DECTCEM: text-cursor-enable
* TODO
*/
set_reset(screen, TERM_FLAG_HIDE_CURSOR, !set);
screen_age_cursor(screen);
}
break;
case 47:
if (dec) {
/*
* XTERM-ASB: alternate-screen-buffer
* This enables/disables the alternate screen-buffer.
@ -455,11 +449,9 @@ static void screen_mode_change(term_screen *screen, unsigned int mode, bool dec,
* original screen-buffer again.
*/
screen_change_alt(screen, set);
}
break;
case 1047:
if (dec) {
/*
* XTERM-ASBPE: alternate-screen-buffer-post-erase
* This is the same as XTERM-ASB but erases the
@ -471,11 +463,9 @@ static void screen_mode_change(term_screen *screen, unsigned int mode, bool dec,
screen_reset_page(screen, screen->page_alt);
screen_change_alt(screen, set);
}
break;
case 1048:
if (dec) {
/*
* XTERM-ASBCS: alternate-screen-buffer-cursor-state
* This has the same effect as DECSC/DECRC, but uses a
@ -487,11 +477,9 @@ static void screen_mode_change(term_screen *screen, unsigned int mode, bool dec,
screen_save_state(screen, &screen->saved_alt);
else
screen_restore_state(screen, &screen->saved_alt);
}
break;
case 1049:
if (dec) {
/*
* XTERM-ASBX: alternate-screen-buffer-extended
* This combines XTERM-ASBPE and XTERM-ASBCS somewhat.
@ -509,7 +497,6 @@ static void screen_mode_change(term_screen *screen, unsigned int mode, bool dec,
if (!set)
screen_restore_state(screen, &screen->saved_alt);
}
break;
}
@ -2763,7 +2750,7 @@ static int screen_RM_ANSI(term_screen *screen, const term_seq *seq) {
unsigned int i;
for (i = 0; i < seq->n_args; ++i)
screen_mode_change(screen, seq->args[i], false, false);
screen_mode_change_ansi(screen, seq->args[i], false);
return 0;
}
@ -2777,7 +2764,7 @@ static int screen_RM_DEC(term_screen *screen, const term_seq *seq) {
unsigned int i;
for (i = 0; i < seq->n_args; ++i)
screen_mode_change(screen, seq->args[i], true, false);
screen_mode_change_dec(screen, seq->args[i], false);
return 0;
}
@ -3057,7 +3044,7 @@ static int screen_SM_ANSI(term_screen *screen, const term_seq *seq) {
unsigned int i;
for (i = 0; i < seq->n_args; ++i)
screen_mode_change(screen, seq->args[i], false, true);
screen_mode_change_ansi(screen, seq->args[i], true);
return 0;
}
@ -3071,7 +3058,7 @@ static int screen_SM_DEC(term_screen *screen, const term_seq *seq) {
unsigned int i;
for (i = 0; i < seq->n_args; ++i)
screen_mode_change(screen, seq->args[i], true, true);
screen_mode_change_dec(screen, seq->args[i], true);
return 0;
}