summaryrefslogtreecommitdiff
path: root/src/libvterm/src
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-05-17 22:27:55 +0200
committerBram Moolenaar <Bram@vim.org>2020-05-17 22:27:55 +0200
commit6fc3b59ee914a0d1710c8b037a0c592e0a7c34d4 (patch)
treeaf8250bd6fc8b95088c59d0049150235fda7a471 /src/libvterm/src
parent94d729cbe8f0f788d9d7539f733cff395e73b228 (diff)
downloadvim-git-6fc3b59ee914a0d1710c8b037a0c592e0a7c34d4.tar.gz
patch 8.2.0785: libvterm code lags behind the upstream versionv8.2.0785
Problem: Libvterm code lags behind the upstream version. Solution: Include revisions 734 - 740.
Diffstat (limited to 'src/libvterm/src')
-rw-r--r--src/libvterm/src/pen.c33
-rw-r--r--src/libvterm/src/vterm.c17
2 files changed, 43 insertions, 7 deletions
diff --git a/src/libvterm/src/pen.c b/src/libvterm/src/pen.c
index d34599da1..5619f276d 100644
--- a/src/libvterm/src/pen.c
+++ b/src/libvterm/src/pen.c
@@ -261,9 +261,26 @@ INTERNAL void vterm_state_setpen(VTermState *state, const long args[], int argco
setpenattr_bool(state, VTERM_ATTR_ITALIC, 1);
break;
- case 4: // Underline single
- state->pen.underline = 1;
- setpenattr_int(state, VTERM_ATTR_UNDERLINE, 1);
+ case 4: // Underline
+ state->pen.underline = VTERM_UNDERLINE_SINGLE;
+ if(CSI_ARG_HAS_MORE(args[argi])) {
+ argi++;
+ switch(CSI_ARG(args[argi])) {
+ case 0:
+ state->pen.underline = 0;
+ break;
+ case 1:
+ state->pen.underline = VTERM_UNDERLINE_SINGLE;
+ break;
+ case 2:
+ state->pen.underline = VTERM_UNDERLINE_DOUBLE;
+ break;
+ case 3:
+ state->pen.underline = VTERM_UNDERLINE_CURLY;
+ break;
+ }
+ }
+ setpenattr_int(state, VTERM_ATTR_UNDERLINE, state->pen.underline);
break;
case 5: // Blink
@@ -288,8 +305,8 @@ INTERNAL void vterm_state_setpen(VTermState *state, const long args[], int argco
break;
case 21: // Underline double
- state->pen.underline = 2;
- setpenattr_int(state, VTERM_ATTR_UNDERLINE, 2);
+ state->pen.underline = VTERM_UNDERLINE_DOUBLE;
+ setpenattr_int(state, VTERM_ATTR_UNDERLINE, state->pen.underline);
break;
case 22: // Bold off
@@ -405,8 +422,10 @@ INTERNAL int vterm_state_getpen(VTermState *state, long args[], int argcount UNU
if(state->pen.italic)
args[argi++] = 3;
- if(state->pen.underline == 1)
+ if(state->pen.underline == VTERM_UNDERLINE_SINGLE)
args[argi++] = 4;
+ if(state->pen.underline == VTERM_UNDERLINE_CURLY)
+ args[argi++] = 4 | CSI_ARG_FLAG_MORE, args[argi++] = 3;
if(state->pen.blink)
args[argi++] = 5;
@@ -420,7 +439,7 @@ INTERNAL int vterm_state_getpen(VTermState *state, long args[], int argcount UNU
if(state->pen.font)
args[argi++] = 10 + state->pen.font;
- if(state->pen.underline == 2)
+ if(state->pen.underline == VTERM_UNDERLINE_DOUBLE)
args[argi++] = 21;
if(state->fg_index >= 0 && state->fg_index < 8)
diff --git a/src/libvterm/src/vterm.c b/src/libvterm/src/vterm.c
index c5b6652d0..7b06c04bb 100644
--- a/src/libvterm/src/vterm.c
+++ b/src/libvterm/src/vterm.c
@@ -406,3 +406,20 @@ void vterm_copy_cells(VTermRect dest,
(*copycell)(pos, srcpos, user);
}
}
+
+void vterm_check_version(int major, int minor)
+{
+ if(major != VTERM_VERSION_MAJOR) {
+ fprintf(stderr, "libvterm major version mismatch; %d (wants) != %d (library)\n",
+ major, VTERM_VERSION_MAJOR);
+ exit(1);
+ }
+
+ if(minor > VTERM_VERSION_MINOR) {
+ fprintf(stderr, "libvterm minor version mismatch; %d (wants) > %d (library)\n",
+ minor, VTERM_VERSION_MINOR);
+ exit(1);
+ }
+
+ // Happy
+}