Last active
August 29, 2015 14:13
-
-
Save saitoha/aa6485b2533639843508 to your computer and use it in GitHub Desktop.
vim: respect xenl/xn capability when writing a character on the last cell of terminal screen
This file contains 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 -r 930ad67c0414 runtime/doc/term.txt | |
--- a/runtime/doc/term.txt Tue Jan 27 14:09:37 2015 +0100 | |
+++ b/runtime/doc/term.txt Tue Jan 27 22:16:32 2015 +0900 | |
@@ -224,10 +224,11 @@ | |
the last two characters of the option name. Only one termcap code is | |
required: Cursor motion, 't_cm'. | |
-The options 't_da', 't_db', 't_ms', 't_xs' represent flags in the termcap. | |
-When the termcap flag is present, the option will be set to "y". But any | |
-non-empty string means that the flag is set. An empty string means that the | |
-flag is not set. 't_CS' works like this too, but it isn't a termcap flag. | |
+The options 't_da', 't_db', 't_ms', 't_xs', 't_xn' represent flags in the | |
+termcap. When the termcap flag is present, the option will be set to "y". | |
+But any non-empty string means that the flag is set. An empty string means | |
+that the flag is not set. 't_CS' works like this too, but it isn't a termcap | |
+flag. | |
OUTPUT CODES | |
option meaning ~ | |
@@ -281,6 +282,9 @@ | |
t_vs cursor very visible *t_vs* *'t_vs'* | |
*t_xs* *'t_xs'* | |
t_xs if non-empty, standout not erased by overwriting (hpterm) | |
+ *t_xn* *'t_xn'* | |
+ t_xn if non-empty, character writing at the last cell of screen | |
+ didn't causes scrolling | |
t_ZH italics mode *t_ZH* *'t_ZH'* | |
t_ZR italics end *t_ZR* *'t_ZR'* | |
diff -r 930ad67c0414 src/option.c | |
--- a/src/option.c Tue Jan 27 14:09:37 2015 +0100 | |
+++ b/src/option.c Tue Jan 27 22:16:32 2015 +0900 | |
@@ -2979,6 +2979,7 @@ | |
p_term("t_SI", T_CSI) | |
p_term("t_EI", T_CEI) | |
p_term("t_xs", T_XS) | |
+ p_term("t_xn", T_XN) | |
p_term("t_ZH", T_CZH) | |
p_term("t_ZR", T_CZR) | |
diff -r 930ad67c0414 src/screen.c | |
--- a/src/screen.c Tue Jan 27 14:09:37 2015 +0100 | |
+++ b/src/screen.c Tue Jan 27 22:16:32 2015 +0900 | |
@@ -7945,8 +7945,9 @@ | |
return; | |
/* Outputting the last character on the screen may scrollup the screen. | |
- * Don't to it! Mark the character invalid (update it when scrolled up) */ | |
+ * Don't do it! Mark the character invalid (update it when scrolled up) */ | |
if (row == screen_Rows - 1 && col == screen_Columns - 1 | |
+ && *T_XN == NUL | |
#ifdef FEAT_RIGHTLEFT | |
/* account for first command-line character in rightleft mode */ | |
&& !cmdmsg_rl | |
diff -r 930ad67c0414 src/term.c | |
--- a/src/term.c Tue Jan 27 14:09:37 2015 +0100 | |
+++ b/src/term.c Tue Jan 27 22:16:32 2015 +0900 | |
@@ -200,6 +200,7 @@ | |
{(int)KS_VB, IF_EB("\033|f", ESC_STR "|f")}, | |
{(int)KS_MS, "y"}, | |
{(int)KS_UT, "y"}, | |
+ {(int)KS_XN, "y"}, | |
{(int)KS_LE, "\b"}, /* cursor-left = BS */ | |
{(int)KS_ND, "\014"}, /* cursor-right = CTRL-L */ | |
# ifdef TERMINFO | |
@@ -658,6 +659,7 @@ | |
{(int)KS_MS, "y"}, /* save to move cur in reverse mode */ | |
{(int)KS_UT, "y"}, | |
+ {(int)KS_XN, "y"}, | |
{(int)KS_LE, "\b"}, | |
# ifdef TERMINFO | |
{(int)KS_CM, "\033|%i%p1%d;%p2%dH"},/* cursor motion */ | |
@@ -772,6 +774,7 @@ | |
{(int)KS_CSF, IF_EB("\033[101;%dm", ESC_STR "[101;%dm")}, /* set screen foreground color */ | |
{(int)KS_MS, "y"}, | |
{(int)KS_UT, "y"}, | |
+ {(int)KS_XN, "y"}, | |
{(int)KS_LE, "\b"}, | |
# ifdef TERMINFO | |
{(int)KS_CM, IF_EB("\033[%i%p1%d;%p2%dH", | |
@@ -1207,6 +1210,7 @@ | |
{(int)KS_UCS, "[UCS]"}, | |
{(int)KS_MS, "[MS]"}, | |
{(int)KS_UT, "[UT]"}, | |
+ {(int)KS_XN, "[XN]"}, | |
# ifdef TERMINFO | |
{(int)KS_CM, "[%p1%dCM%p2%d]"}, | |
# else | |
@@ -1645,6 +1649,9 @@ | |
if ((T_XS == NULL || T_XS == empty_option) | |
&& tgetflag("xs") > 0) | |
T_XS = (char_u *)"y"; | |
+ if ((T_XN == NULL || T_XN == empty_option) | |
+ && tgetflag("xn") > 0) | |
+ T_XN = (char_u *)"y"; | |
if ((T_DB == NULL || T_DB == empty_option) | |
&& tgetflag("db") > 0) | |
T_DB = (char_u *)"y"; | |
diff -r 930ad67c0414 src/term.h | |
--- a/src/term.h Tue Jan 27 14:09:37 2015 +0100 | |
+++ b/src/term.h Tue Jan 27 22:16:32 2015 +0900 | |
@@ -66,6 +66,7 @@ | |
KS_CSF, /* set foreground color */ | |
KS_CSB, /* set background color */ | |
KS_XS, /* standout not erased by overwriting (hpterm) */ | |
+ KS_XN, /* newline glitch */ | |
KS_MB, /* blink mode */ | |
KS_CAF, /* set foreground color (ANSI) */ | |
KS_CAB, /* set background color (ANSI) */ | |
@@ -144,6 +145,7 @@ | |
#define T_CSF (term_str(KS_CSF)) /* set foreground color */ | |
#define T_CSB (term_str(KS_CSB)) /* set background color */ | |
#define T_XS (term_str(KS_XS)) /* standout not erased by overwriting */ | |
+#define T_XN (term_str(KS_XN)) /* newline glitch */ | |
#define T_MB (term_str(KS_MB)) /* blink mode */ | |
#define T_CAF (term_str(KS_CAF)) /* set foreground color (ANSI) */ | |
#define T_CAB (term_str(KS_CAB)) /* set background color (ANSI) */ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment