Skip to content

Instantly share code, notes, and snippets.

@saitoha
Created October 4, 2012 08:39
Show Gist options
  • Select an option

  • Save saitoha/3832279 to your computer and use it in GitHub Desktop.

Select an option

Save saitoha/3832279 to your computer and use it in GitHub Desktop.
Support DECSCUSR / xterm patch#282 compatible, for iTerm2
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