Mercurial > vim
changeset 20462:9ad473b50471 v8.2.0785
patch 8.2.0785: libvterm code lags behind the upstream version
Commit: https://github.com/vim/vim/commit/6fc3b59ee914a0d1710c8b037a0c592e0a7c34d4
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 17 22:27:55 2020 +0200
patch 8.2.0785: libvterm code lags behind the upstream version
Problem: Libvterm code lags behind the upstream version.
Solution: Include revisions 734 - 740.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 17 May 2020 22:30:03 +0200 |
parents | 875823cde2ff |
children | 9560e7e6c8f3 |
files | src/libvterm/CONTRIBUTING src/libvterm/Makefile src/libvterm/doc/seqs.txt src/libvterm/include/vterm.h src/libvterm/src/pen.c src/libvterm/src/vterm.c src/libvterm/t/30state_pen.test src/libvterm/t/run-test.pl src/version.c |
diffstat | 9 files changed, 98 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/src/libvterm/CONTRIBUTING @@ -0,0 +1,22 @@ +How to Contribute +----------------- + +The main resources for this library are: + + Launchpad + https://launchpad.net/libvterm + + Freenode: + ##tty or #tickit on irc.freenode.net + + Email: + Paul "LeoNerd" Evans <leonerd@leonerd.org.uk> + + +Bug reports and feature requests can be sent to any of the above resources. + +New features, bug patches, etc.. should in the first instance be discussed via +any of the resources listed above, before starting work on the actual code. +There may be future plans or development already in-progress that could be +affected so it is better to discuss the ideas first before starting work +actually writing any code.
--- a/src/libvterm/Makefile +++ b/src/libvterm/Makefile @@ -37,13 +37,13 @@ INCFILES=$(TBLFILES:.tbl=.inc) HFILES_INT=$(sort $(wildcard src/*.h)) $(HFILES) VERSION_MAJOR=0 -VERSION_MINOR=0 +VERSION_MINOR=1 VERSION_CURRENT=0 VERSION_REVISION=0 VERSION_AGE=0 -VERSION=0 +VERSION=$(VERSION_MAJOR).$(VERSION_MINOR) PREFIX=/usr/local BINDIR=$(PREFIX)/bin @@ -110,13 +110,11 @@ install-bin: $(BINFILES) # DIST CUT -VERSION=$(VERSION_MAJOR).$(VERSION_MINOR) - DISTDIR=libvterm-$(VERSION) distdir: $(INCFILES) mkdir __distdir - cp LICENSE __distdir + cp LICENSE CONTRIBUTING __distdir mkdir __distdir/src cp src/*.c src/*.h src/*.inc __distdir/src mkdir __distdir/src/encoding
--- a/src/libvterm/doc/seqs.txt +++ b/src/libvterm/doc/seqs.txt @@ -167,6 +167,7 @@ 123 SGR 0 = Reset 123 SGR 1 = Bold on SGR 3 = Italic on 123 SGR 4 = Underline single + SGR 4:x = Underline style 123 SGR 5 = Blink on 123 SGR 7 = Reverse on SGR 9 = Strikethrough on
--- a/src/libvterm/include/vterm.h +++ b/src/libvterm/include/vterm.h @@ -19,6 +19,12 @@ extern "C" { typedef unsigned char uint8_t; typedef unsigned int uint32_t; +#define VTERM_VERSION_MAJOR 0 +#define VTERM_VERSION_MINOR 1 + +#define VTERM_CHECK_VERSION \ + vterm_check_version(VTERM_VERSION_MAJOR, VTERM_VERSION_MINOR) + typedef struct VTerm VTerm; typedef struct VTermState VTermState; typedef struct VTermScreen VTermScreen; @@ -175,6 +181,8 @@ typedef struct { void (*free)(void *ptr, void *allocdata); } VTermAllocatorFunctions; +void vterm_check_version(int major, int minor); + // Allocate and initialize a new terminal with default allocators. VTerm *vterm_new(int rows, int cols); @@ -330,6 +338,13 @@ typedef struct { unsigned int dhl : 2; // On a DECDHL line (1=top 2=bottom) } VTermScreenCellAttrs; +enum { + VTERM_UNDERLINE_OFF, + VTERM_UNDERLINE_SINGLE, + VTERM_UNDERLINE_DOUBLE, + VTERM_UNDERLINE_CURLY, +}; + typedef struct { #define VTERM_MAX_CHARS_PER_CELL 6 uint32_t chars[VTERM_MAX_CHARS_PER_CELL];
--- a/src/libvterm/src/pen.c +++ b/src/libvterm/src/pen.c @@ -261,9 +261,26 @@ INTERNAL void vterm_state_setpen(VTermSt 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(VTermSt 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(VTermSta 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(VTermSta 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)
--- 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 +}
--- a/src/libvterm/t/30state_pen.test +++ b/src/libvterm/t/30state_pen.test @@ -28,6 +28,14 @@ PUSH "\e[21m" ?pen underline = 2 PUSH "\e[24m" ?pen underline = 0 +PUSH "\e[4m\e[4:0m" + ?pen underline = 0 +PUSH "\e[4:1m" + ?pen underline = 1 +PUSH "\e[4:2m" + ?pen underline = 2 +PUSH "\e[4:3m" + ?pen underline = 3 PUSH "\e[4m\e[m" ?pen underline = 0
--- a/src/libvterm/t/run-test.pl +++ b/src/libvterm/t/run-test.pl @@ -177,9 +177,11 @@ open my $test, "<", $ARGV[0] or die "Can while( my $line = <$test> ) { $line =~ s/^\s+//; - next if $line =~ m/^(?:#|$)/; + chomp $line; - chomp $line; + next if $line =~ m/^(?:#|$)/; + last if $line eq "__END__"; + do_line( $line ); }