Created
October 4, 2012 08:39
-
-
Save saitoha/3832279 to your computer and use it in GitHub Desktop.
Support DECSCUSR / xterm patch#282 compatible, for iTerm2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/VT100Screen.m b/VT100Screen.m | |
| index cd303ae..03cc274 100644 | |
| --- a/VT100Screen.m | |
| +++ b/VT100Screen.m | |
| @@ -1571,6 +1571,38 @@ static char* FormatCont(int c) | |
| break; | |
| case VT100CSI_RM: | |
| break; | |
| + case VT100CSI_DECSCUSR: | |
| + switch (token.u.csi.p[0]) { | |
| + case 0: | |
| + case 1: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:true]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_BOX]; | |
| + break; | |
| + case 2: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:false]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_BOX]; | |
| + break; | |
| + case 3: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:true]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_UNDERLINE]; | |
| + break; | |
| + case 4: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:false]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_UNDERLINE]; | |
| + break; | |
| + case 5: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:true]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_VERTICAL]; | |
| + break; | |
| + case 6: | |
| + [[SESSION TEXTVIEW] setBlinkingCursor:false]; | |
| + [[SESSION TEXTVIEW] setCursorType:CURSOR_VERTICAL]; | |
| + break; | |
| + default: | |
| + //NSLog(@"DECSCUSR: Unrecognized parameter: %d", token.u.csi.p[0]); | |
| + break; | |
| + } | |
| + break; | |
| /* My interpretation of this: | |
| * http://www.cl.cam.ac.uk/~mgk25/unicode.html#term | |
| diff --git a/VT100Terminal.h b/VT100Terminal.h | |
| index 2c59900..ebbd797 100644 | |
| --- a/VT100Terminal.h | |
| +++ b/VT100Terminal.h | |
| @@ -100,6 +100,7 @@ | |
| #define VT100CSI_SGR 2045 // Select Graphic Rendition | |
| #define VT100CSI_SM 2046 // Set Mode | |
| #define VT100CSI_TBC 2047 // Tabulation Clear | |
| +#define VT100CSI_DECSCUSR 2048 // Select the Style of the Cursor | |
| // some xterm extension | |
| #define XTERMCC_WIN_TITLE 86 // Set window title | |
| diff --git a/VT100Terminal.m b/VT100Terminal.m | |
| index 7954acc..0b6bbec 100644 | |
| --- a/VT100Terminal.m | |
| +++ b/VT100Terminal.m | |
| @@ -134,6 +134,7 @@ | |
| #define REPORT_VT52 "\033/Z" | |
| #define conststr_sizeof(n) ((sizeof(n)) - 1) | |
| +#define MAKE_COMMAND(first, second) ((first << 8) | second) | |
| typedef struct { | |
| @@ -319,6 +320,23 @@ static size_t getCSIParam(unsigned char *datap, | |
| datap++; | |
| break; | |
| } | |
| + else if (*datap == ' ') { | |
| + datap++; | |
| + datalen--; | |
| + switch (*datap) { | |
| + case 'q': | |
| + param->cmd = MAKE_COMMAND(' ', 'q'); | |
| + datap++; | |
| + datalen--; | |
| + return datap - orgp; | |
| + default: | |
| + //NSLog(@"Unrecognized sequence: CSI SP %c (0x%x)", *datap, *datap); | |
| + datap++; | |
| + datalen--; | |
| + param->cmd=0xff; | |
| + break; | |
| + } | |
| + } | |
| else if (*datap=='\'') { | |
| datap++; | |
| datalen--; | |
| @@ -538,6 +556,11 @@ static VT100TCC decode_csi(unsigned char *datap, | |
| result.type = VT100CSI_TBC; | |
| SET_PARAM_DEFAULT(param, 0, 0); | |
| break; | |
| + | |
| + case MAKE_COMMAND(' ', 'q'): | |
| + result.type = VT100CSI_DECSCUSR; | |
| + SET_PARAM_DEFAULT(param, 0, 0); | |
| + break; | |
| // these are xterm controls | |
| case '@': |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment