| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.627 |
| Fcc: outbox |
| From: Bram Moolenaar <Bram@moolenaar.net> |
| Mime-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| |
| Patch 7.4.627 |
| Problem: The last screen cell is not updated. |
| Solution: Respect the "tn" termcap feature. (Hayaki Saito) |
| Files: runtime/doc/term.txt, src/option.c, src/screen.c, src/term.c, |
| src/term.h |
| |
| |
| |
| |
| |
| *** 224,233 **** |
| 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. |
| |
| OUTPUT CODES |
| option meaning ~ |
| --- 224,234 ---- |
| 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', '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,286 **** |
| --- 282,290 ---- |
| 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'* |
| |
| |
| |
| |
| *** 2978,2983 **** |
| --- 2978,2984 ---- |
| p_term("t_WS", T_CWS) |
| p_term("t_SI", T_CSI) |
| p_term("t_EI", T_CEI) |
| + p_term("t_xn", T_XN) |
| p_term("t_xs", T_XS) |
| p_term("t_ZH", T_CZH) |
| p_term("t_ZR", T_CZR) |
| |
| |
| |
| *** 7968,7976 **** |
| if (row >= screen_Rows || col >= screen_Columns) |
| 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) */ |
| ! if (row == screen_Rows - 1 && col == screen_Columns - 1 |
| #ifdef FEAT_RIGHTLEFT |
| /* account for first command-line character in rightleft mode */ |
| && !cmdmsg_rl |
| --- 7968,7978 ---- |
| if (row >= screen_Rows || col >= screen_Columns) |
| return; |
| |
| ! /* Outputting a character in the last cell on the screen may scroll the |
| ! * screen up. Only do it when the "xn" termcap property is set, otherwise |
| ! * mark the character invalid (update it when scrolled up). */ |
| ! if (*T_XN == NUL |
| ! && row == screen_Rows - 1 && col == screen_Columns - 1 |
| #ifdef FEAT_RIGHTLEFT |
| /* account for first command-line character in rightleft mode */ |
| && !cmdmsg_rl |
| |
| |
| |
| *** 200,205 **** |
| --- 200,206 ---- |
| {(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,663 **** |
| --- 659,665 ---- |
| |
| {(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,777 **** |
| --- 774,780 ---- |
| {(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,1212 **** |
| --- 1210,1216 ---- |
| {(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,1650 **** |
| --- 1649,1657 ---- |
| 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"; |
| |
| |
| |
| *** 66,71 **** |
| --- 66,72 ---- |
| 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,149 **** |
| --- 145,151 ---- |
| #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) */ |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 627, |
| /**/ |
| |
| -- |
| msdn.microsoft.com: |
| ERROR_SUCCESS 0 (0x0) The operation completed successfully. |
| I have always suspected that for Microsoft success is an error. |
| |
| /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ |
| /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ |
| \\\ an exciting new programming language -- http://www.Zimbu.org /// |
| \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |