summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames McCoy <jamessan@debian.org>2022-09-18 11:13:50 -0400
committerJames McCoy <jamessan@debian.org>2022-09-18 11:13:50 -0400
commit2838e573b499029474aad60330360347315cc20c (patch)
tree81d95d0cb262efd0a069e79ffd190cd3d952f79f
parent97864b073a8a8cc553a844063242a2b0dec364a3 (diff)
New upstream version 0.3
-rw-r--r--doc/seqs.txt1
-rw-r--r--include/vterm.h5
-rw-r--r--src/screen.c8
-rw-r--r--src/state.c23
-rw-r--r--t/harness.c2
5 files changed, 36 insertions, 3 deletions
diff --git a/doc/seqs.txt b/doc/seqs.txt
index 16bfee2..27f28b9 100644
--- a/doc/seqs.txt
+++ b/doc/seqs.txt
@@ -122,6 +122,7 @@ x = xterm
123x CSI l = RM, Reset mode
123x CSI ? l = DECRM, DEC reset mode
123x CSI m = SGR, Set Graphic Rendition
+ CSI ? m = DECSGR, private Set Graphic Rendition
123x CSI n = DSR, Device Status Report
23x 5 = operating status
23x 6 = CPR = cursor position
diff --git a/include/vterm.h b/include/vterm.h
index 257b677..c6124a1 100644
--- a/include/vterm.h
+++ b/include/vterm.h
@@ -544,7 +544,10 @@ void *vterm_screen_get_cbdata(VTermScreen *screen);
void vterm_screen_set_unrecognised_fallbacks(VTermScreen *screen, const VTermStateFallbacks *fallbacks, void *user);
void *vterm_screen_get_unrecognised_fbdata(VTermScreen *screen);
-void vterm_screen_set_reflow(VTermScreen *screen, bool reflow);
+void vterm_screen_enable_reflow(VTermScreen *screen, bool reflow);
+
+// Back-compat alias for the brief time it was in 0.3-RC1
+#define vterm_screen_set_reflow vterm_screen_enable_reflow
void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen);
diff --git a/src/screen.c b/src/screen.c
index a86b7b8..77c0af8 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -1017,11 +1017,17 @@ VTermScreen *vterm_obtain_screen(VTerm *vt)
return screen;
}
-void vterm_screen_set_reflow(VTermScreen *screen, bool reflow)
+void vterm_screen_enable_reflow(VTermScreen *screen, bool reflow)
{
screen->reflow = reflow;
}
+#undef vterm_screen_set_reflow
+void vterm_screen_set_reflow(VTermScreen *screen, bool reflow)
+{
+ vterm_screen_enable_reflow(screen, reflow);
+}
+
void vterm_screen_enable_altscreen(VTermScreen *screen, int altscreen)
{
if(!screen->buffers[BUFIDX_ALTSCREEN] && altscreen) {
diff --git a/src/state.c b/src/state.c
index 302ec0f..ccc6981 100644
--- a/src/state.c
+++ b/src/state.c
@@ -1341,6 +1341,29 @@ static int on_csi(const char *leader, const long args[], int argcount, const cha
vterm_state_setpen(state, args, argcount);
break;
+ case LEADER('?', 0x6d): // DECSGR
+ /* No actual DEC terminal recognised these, but some printers did. These
+ * are alternative ways to request subscript/superscript/off
+ */
+ for(int argi = 0; argi < argcount; argi++) {
+ long arg;
+ switch(arg = CSI_ARG(args[argi])) {
+ case 4: // Superscript on
+ arg = 73;
+ vterm_state_setpen(state, &arg, 1);
+ break;
+ case 5: // Subscript on
+ arg = 74;
+ vterm_state_setpen(state, &arg, 1);
+ break;
+ case 24: // Super+subscript off
+ arg = 75;
+ vterm_state_setpen(state, &arg, 1);
+ break;
+ }
+ }
+ break;
+
case 0x6e: // DSR - ECMA-48 8.3.35
case LEADER('?', 0x6e): // DECDSR
val = CSI_ARG_OR(args[0], 0);
diff --git a/t/harness.c b/t/harness.c
index d541cb2..be468d9 100644
--- a/t/harness.c
+++ b/t/harness.c
@@ -718,7 +718,7 @@ int main(int argc, char **argv)
want_screen_scrollback = sense;
break;
case 'r':
- vterm_screen_set_reflow(screen, sense);
+ vterm_screen_enable_reflow(screen, sense);
break;
default:
fprintf(stderr, "Unrecognised WANTSCREEN flag '%c'\n", line[i]);