Mercurial > vim
comparison src/libvterm/src/utf8.h @ 11621:b8299e742f41 v8.0.0693
patch 8.0.0693: no terminal emulator support
commit https://github.com/vim/vim/commit/e4f25e4a8db2c8a8a71a4ba2a68540b3ab341e42
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Jul 7 11:54:15 2017 +0200
patch 8.0.0693: no terminal emulator support
Problem: No terminal emulator support. Cannot properly run commands in the
GUI. Cannot run a job interactively with an ssh connection.
Solution: Very early implementation of the :terminal command. Includes
libvterm converted to ANSI C. Many parts still missing.
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Fri, 07 Jul 2017 12:00:04 +0200 |
parents | |
children | 2449b6ce1456 |
comparison
equal
deleted
inserted
replaced
11620:fb788b3997c1 | 11621:b8299e742f41 |
---|---|
1 /* The following functions copied and adapted from libtermkey | |
2 * | |
3 * http://www.leonerd.org.uk/code/libtermkey/ | |
4 */ | |
5 unsigned int utf8_seqlen(long codepoint); | |
6 | |
7 #if defined(DEFINE_INLINES) || USE_INLINE | |
8 INLINE unsigned int utf8_seqlen(long codepoint) | |
9 { | |
10 if(codepoint < 0x0000080) return 1; | |
11 if(codepoint < 0x0000800) return 2; | |
12 if(codepoint < 0x0010000) return 3; | |
13 if(codepoint < 0x0200000) return 4; | |
14 if(codepoint < 0x4000000) return 5; | |
15 return 6; | |
16 } | |
17 #endif | |
18 | |
19 /* Does NOT NUL-terminate the buffer */ | |
20 int fill_utf8(long codepoint, char *str); | |
21 | |
22 #if defined(DEFINE_INLINES) || USE_INLINE | |
23 INLINE int fill_utf8(long codepoint, char *str) | |
24 { | |
25 int nbytes = utf8_seqlen(codepoint); | |
26 | |
27 /* This is easier done backwards */ | |
28 int b = nbytes; | |
29 while(b > 1) { | |
30 b--; | |
31 str[b] = 0x80 | (codepoint & 0x3f); | |
32 codepoint >>= 6; | |
33 } | |
34 | |
35 switch(nbytes) { | |
36 case 1: str[0] = (codepoint & 0x7f); break; | |
37 case 2: str[0] = 0xc0 | (codepoint & 0x1f); break; | |
38 case 3: str[0] = 0xe0 | (codepoint & 0x0f); break; | |
39 case 4: str[0] = 0xf0 | (codepoint & 0x07); break; | |
40 case 5: str[0] = 0xf8 | (codepoint & 0x03); break; | |
41 case 6: str[0] = 0xfc | (codepoint & 0x01); break; | |
42 } | |
43 | |
44 return nbytes; | |
45 } | |
46 #endif | |
47 /* end copy */ |