Skip to content
Snippets Groups Projects
Commit 0f33856a authored by Deucе's avatar Deucе :ok_hand_tone4:
Browse files

Add support for DECBKM.

parent 32cad313
No related branches found
No related tags found
No related merge requests found
Pipeline #5762 passed
...@@ -2623,6 +2623,9 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -2623,6 +2623,9 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
flags |= CIOLIB_VIDEO_NOBLINK; flags |= CIOLIB_VIDEO_NOBLINK;
SETVIDEOFLAGS(flags); SETVIDEOFLAGS(flags);
break; break;
case 67:
cterm->extattr |= CTERM_EXTATTR_DECBKM;
break;
case 69: case 69:
cterm->extattr |= CTERM_EXTATTR_DECLRMM; cterm->extattr |= CTERM_EXTATTR_DECLRMM;
break; break;
...@@ -2725,6 +2728,9 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -2725,6 +2728,9 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
flags &= ~CIOLIB_VIDEO_NOBLINK; flags &= ~CIOLIB_VIDEO_NOBLINK;
SETVIDEOFLAGS(flags); SETVIDEOFLAGS(flags);
break; break;
case 67:
cterm->extattr &= ~(CTERM_EXTATTR_DECBKM);
break;
case 69: case 69:
cterm->extattr &= ~(CTERM_EXTATTR_DECLRMM); cterm->extattr &= ~(CTERM_EXTATTR_DECLRMM);
break; break;
...@@ -2910,7 +2916,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -2910,7 +2916,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN|CTERM_SAVEMODE_SIXEL_SCROLL| CTERM_SAVEMODE_NOBRIGHT|CTERM_SAVEMODE_BGBRIGHT|CTERM_SAVEMODE_ORIGIN|CTERM_SAVEMODE_SIXEL_SCROLL|
CTERM_SAVEMODE_MOUSE_X10|CTERM_SAVEMODE_MOUSE_NORMAL|CTERM_SAVEMODE_MOUSE_HIGHLIGHT| CTERM_SAVEMODE_MOUSE_X10|CTERM_SAVEMODE_MOUSE_NORMAL|CTERM_SAVEMODE_MOUSE_HIGHLIGHT|
CTERM_SAVEMODE_MOUSE_BUTTONTRACK|CTERM_SAVEMODE_MOUSE_ANY|CTERM_SAVEMODE_MOUSE_FOCUS| CTERM_SAVEMODE_MOUSE_BUTTONTRACK|CTERM_SAVEMODE_MOUSE_ANY|CTERM_SAVEMODE_MOUSE_FOCUS|
CTERM_SAVEMODE_MOUSE_UTF8|CTERM_SAVEMODE_MOUSE_SGR|CTERM_SAVEMODE_MOUSE_ALTSCROLL|CTERM_SAVEMODE_MOUSE_URXVT|CTERM_SAVEMODE_DECLRMM); CTERM_SAVEMODE_MOUSE_UTF8|CTERM_SAVEMODE_MOUSE_SGR|CTERM_SAVEMODE_MOUSE_ALTSCROLL|CTERM_SAVEMODE_MOUSE_URXVT|CTERM_SAVEMODE_DECLRMM|CTERM_SAVEMODE_DECBKM);
cterm->saved_mode &= ~(cterm->saved_mode_mask); cterm->saved_mode &= ~(cterm->saved_mode_mask);
cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_AUTOWRAP)?CTERM_SAVEMODE_AUTOWRAP:0; cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_AUTOWRAP)?CTERM_SAVEMODE_AUTOWRAP:0;
cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0; cterm->saved_mode |= (cterm->cursor==_NORMALCURSOR)?CTERM_SAVEMODE_CURSOR:0;
...@@ -2932,6 +2938,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -2932,6 +2938,7 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
cterm->saved_mode |= (cterm->mouse_state_query(1007, cterm->mouse_state_query_cbdata) ? CTERM_SAVEMODE_MOUSE_ALTSCROLL : 0); cterm->saved_mode |= (cterm->mouse_state_query(1007, cterm->mouse_state_query_cbdata) ? CTERM_SAVEMODE_MOUSE_ALTSCROLL : 0);
cterm->saved_mode |= (cterm->mouse_state_query(1015, cterm->mouse_state_query_cbdata) ? CTERM_SAVEMODE_MOUSE_URXVT : 0); cterm->saved_mode |= (cterm->mouse_state_query(1015, cterm->mouse_state_query_cbdata) ? CTERM_SAVEMODE_MOUSE_URXVT : 0);
cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_DECLRMM) ? CTERM_SAVEMODE_DECLRMM : 0; cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_DECLRMM) ? CTERM_SAVEMODE_DECLRMM : 0;
cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_DECBKM) ? CTERM_SAVEMODE_DECBKM : 0;
setwindow(cterm); setwindow(cterm);
break; break;
} }
...@@ -2984,6 +2991,11 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -2984,6 +2991,11 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBLINK); cterm->saved_mode &= ~(CTERM_SAVEMODE_NOBLINK);
cterm->saved_mode |= (flags & CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0; cterm->saved_mode |= (flags & CIOLIB_VIDEO_NOBLINK)?CTERM_SAVEMODE_NOBLINK:0;
break; break;
case 67:
cterm->saved_mode_mask |= CTERM_SAVEMODE_DECBKM;
cterm->saved_mode &= ~(CTERM_SAVEMODE_DECBKM);
cterm->saved_mode |= (cterm->extattr & CTERM_EXTATTR_DECBKM) ? CTERM_SAVEMODE_DECBKM : 0;
break;
case 69: case 69:
cterm->saved_mode_mask |= CTERM_SAVEMODE_DECLRMM; cterm->saved_mode_mask |= CTERM_SAVEMODE_DECLRMM;
cterm->saved_mode &= ~(CTERM_SAVEMODE_DECLRMM); cterm->saved_mode &= ~(CTERM_SAVEMODE_DECLRMM);
...@@ -3127,6 +3139,12 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -3127,6 +3139,12 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
cterm->mouse_state_change(1007, cterm->saved_mode & CTERM_SAVEMODE_MOUSE_ALTSCROLL, cterm->mouse_state_change_cbdata); cterm->mouse_state_change(1007, cterm->saved_mode & CTERM_SAVEMODE_MOUSE_ALTSCROLL, cterm->mouse_state_change_cbdata);
if(cterm->saved_mode_mask & CTERM_SAVEMODE_MOUSE_URXVT) if(cterm->saved_mode_mask & CTERM_SAVEMODE_MOUSE_URXVT)
cterm->mouse_state_change(1015, cterm->saved_mode & CTERM_SAVEMODE_MOUSE_URXVT, cterm->mouse_state_change_cbdata); cterm->mouse_state_change(1015, cterm->saved_mode & CTERM_SAVEMODE_MOUSE_URXVT, cterm->mouse_state_change_cbdata);
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECBKM) {
if (cterm->saved_mode & CTERM_SAVEMODE_DECBKM)
cterm->extattr |= CTERM_EXTATTR_DECBKM;
else
cterm->extattr &= ~CTERM_EXTATTR_DECBKM;
}
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECLRMM) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECLRMM) {
if (cterm->saved_mode & CTERM_SAVEMODE_DECLRMM) if (cterm->saved_mode & CTERM_SAVEMODE_DECLRMM)
cterm->extattr |= CTERM_EXTATTR_DECLRMM; cterm->extattr |= CTERM_EXTATTR_DECLRMM;
...@@ -3210,6 +3228,14 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int * ...@@ -3210,6 +3228,14 @@ static void do_ansi(struct cterminal *cterm, char *retbuf, size_t retsize, int *
SETVIDEOFLAGS(flags); SETVIDEOFLAGS(flags);
} }
break; break;
case 67:
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECBKM) {
if (cterm->saved_mode & CTERM_SAVEMODE_DECBKM)
cterm->extattr |= CTERM_EXTATTR_DECBKM;
else
cterm->extattr &= ~CTERM_EXTATTR_DECBKM;
}
break;
case 69: case 69:
if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECLRMM) { if(cterm->saved_mode_mask & CTERM_SAVEMODE_DECLRMM) {
if (cterm->saved_mode & CTERM_SAVEMODE_DECLRMM) if (cterm->saved_mode & CTERM_SAVEMODE_DECLRMM)
...@@ -4516,7 +4542,7 @@ cterm_reset(struct cterminal *cterm) ...@@ -4516,7 +4542,7 @@ cterm_reset(struct cterminal *cterm)
cterm->xpos = TERM_MINX; cterm->xpos = TERM_MINX;
cterm->ypos = TERM_MINY; cterm->ypos = TERM_MINY;
cterm->cursor=_NORMALCURSOR; cterm->cursor=_NORMALCURSOR;
cterm->extattr = CTERM_EXTATTR_AUTOWRAP | CTERM_EXTATTR_SXSCROLL; cterm->extattr = CTERM_EXTATTR_AUTOWRAP | CTERM_EXTATTR_SXSCROLL | CTERM_EXTATTR_DECBKM;
FREE_AND_NULL(cterm->tabs); FREE_AND_NULL(cterm->tabs);
cterm->tabs = malloc(sizeof(cterm_tabs)); cterm->tabs = malloc(sizeof(cterm_tabs));
if (cterm->tabs) { if (cterm->tabs) {
......
...@@ -109,6 +109,7 @@ struct cterminal { ...@@ -109,6 +109,7 @@ struct cterminal {
#define CTERM_SAVEMODE_MOUSE_ALTSCROLL 0x20000 #define CTERM_SAVEMODE_MOUSE_ALTSCROLL 0x20000
#define CTERM_SAVEMODE_MOUSE_URXVT 0x40000 #define CTERM_SAVEMODE_MOUSE_URXVT 0x40000
#define CTERM_SAVEMODE_DECLRMM 0x80000 #define CTERM_SAVEMODE_DECLRMM 0x80000
#define CTERM_SAVEMODE_DECBKM 0x100000
int32_t saved_mode; int32_t saved_mode;
int32_t saved_mode_mask; int32_t saved_mode_mask;
...@@ -125,6 +126,7 @@ struct cterminal { ...@@ -125,6 +126,7 @@ struct cterminal {
#define CTERM_EXTATTR_SXSCROLL 0x0004 #define CTERM_EXTATTR_SXSCROLL 0x0004
#define CTERM_EXTATTR_DECLRMM 0x0008 #define CTERM_EXTATTR_DECLRMM 0x0008
#define CTERM_EXTATTR_BRACKETPASTE 0x0010 #define CTERM_EXTATTR_BRACKETPASTE 0x0010
#define CTERM_EXTATTR_DECBKM 0x0020
int save_xpos; // Saved position (for later restore) int save_xpos; // Saved position (for later restore)
int save_ypos; int save_ypos;
int sequence; // An escape sequence is being parsed int sequence; // An escape sequence is being parsed
......
...@@ -874,6 +874,8 @@ CSI ? Ps... h (DECSET) ...@@ -874,6 +874,8 @@ CSI ? Ps... h (DECSET)
This makes the blink (5, 6) graphic renditions not cause the This makes the blink (5, 6) graphic renditions not cause the
character to blink. Mostly for use with CSI ? 34 h to permit character to blink. Mostly for use with CSI ? 34 h to permit
fonts to be used without blinking. Defaults to reset. fonts to be used without blinking. Defaults to reset.
67 - When set, the backspace key sends a backspace character.
Defaults to set.
69 - DEC Left Right Margin Mode enabled 69 - DEC Left Right Margin Mode enabled
Enables CSI s to set the left/right margins, and disables CSI s Enables CSI s to set the left/right margins, and disables CSI s
from saving the current cursor position. from saving the current cursor position.
...@@ -1001,6 +1003,8 @@ CSI ? Ps... l (DECRST) ...@@ -1001,6 +1003,8 @@ CSI ? Ps... l (DECRST)
35 - Blink Enable 35 - Blink Enable
With this mode reset, the blink (5,6) graphic renditions behave With this mode reset, the blink (5,6) graphic renditions behave
normally (cause the characters to blink). Defaults to reset. normally (cause the characters to blink). Defaults to reset.
67 - When reset, the backspace key sends a delete character.
Defaults to set.
69 - DEC Left Right Margin Mode disabled 69 - DEC Left Right Margin Mode disabled
Disables CSI s from setting the left/right margins, and changes Disables CSI s from setting the left/right margins, and changes
it back to saving the current cursor position. The current it back to saving the current cursor position. The current
......
...@@ -4586,7 +4586,11 @@ doterm(struct bbslist *bbs) ...@@ -4586,7 +4586,11 @@ doterm(struct bbslist *bbs)
conn_send("\033[Z", 3, 0); conn_send("\033[Z", 3, 0);
break; break;
case '\b': case '\b':
if (cterm->extattr & CTERM_EXTATTR_DECBKM)
key = '\b'; key = '\b';
else
key = '\x7f';
break;
/* FALLTHROUGH to default */ /* FALLTHROUGH to default */
default: default:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment