| To: vim_dev@googlegroups.com |
| Subject: Patch 7.4.687 |
| 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.687 |
| Problem: There is no way to use a different in Replace mode for a terminal. |
| Solution: Add t_SR. (Omar Sandoval) |
| Files: runtime/doc/options.txt, runtime/doc/term.txt, |
| src/option.c, src/term.c, src/term.h |
| |
| |
| |
| |
| |
| *** 3419,3425 **** |
| the height of the cursor can be changed. This can be done by |
| specifying a block cursor, or a percentage for a vertical or |
| horizontal cursor. |
| ! For a console the 't_SI' and 't_EI' escape sequences are used. |
| |
| The option is a comma separated list of parts. Each part consist of a |
| mode-list and an argument-list: |
| --- 3420,3427 ---- |
| the height of the cursor can be changed. This can be done by |
| specifying a block cursor, or a percentage for a vertical or |
| horizontal cursor. |
| ! For a console the 't_SI', 't_SR', and 't_EI' escape sequences are |
| ! used. |
| |
| The option is a comma separated list of parts. Each part consist of a |
| mode-list and an argument-list: |
| |
| |
| |
| *** 283,290 **** |
| *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'* |
| |
| --- 283,290 ---- |
| *t_xs* *'t_xs'* |
| t_xs if non-empty, standout not erased by overwriting (hpterm) |
| *t_xn* *'t_xn'* |
| ! t_xn if non-empty, writing a character at the last screen cell |
| ! does not cause scrolling |
| t_ZH italics mode *t_ZH* *'t_ZH'* |
| t_ZR italics end *t_ZR* *'t_ZR'* |
| |
| |
| *** 294,300 **** |
| t_WP set window position (Y, X) in pixels *t_WP* *'t_WP'* |
| t_WS set window size (height, width) in characters *t_WS* *'t_WS'* |
| t_SI start insert mode (bar cursor shape) *t_SI* *'t_SI'* |
| ! t_EI end insert mode (block cursor shape) *t_EI* *'t_EI'* |
| |termcap-cursor-shape| |
| t_RV request terminal version string (for xterm) *t_RV* *'t_RV'* |
| |xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes| |
| --- 294,301 ---- |
| t_WP set window position (Y, X) in pixels *t_WP* *'t_WP'* |
| t_WS set window size (height, width) in characters *t_WS* *'t_WS'* |
| t_SI start insert mode (bar cursor shape) *t_SI* *'t_SI'* |
| ! t_SR start replace mode (underline cursor shape) *t_SR* *'t_SR'* |
| ! t_EI end insert or replace mode (block cursor shape) *t_EI* *'t_EI'* |
| |termcap-cursor-shape| |
| t_RV request terminal version string (for xterm) *t_RV* *'t_RV'* |
| |xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes| |
| |
| *** 438,450 **** |
| to reset to the default colors. |
| |
| *termcap-cursor-shape* *termcap-cursor-color* |
| ! When Vim enters Insert mode the 't_SI' escape sequence is sent. When leaving |
| ! Insert mode 't_EI' is used. But only if both are defined. This can be used |
| ! to change the shape or color of the cursor in Insert mode. These are not |
| ! standard termcap/terminfo entries, you need to set them yourself. |
| Example for an xterm, this changes the color of the cursor: > |
| if &term =~ "xterm" |
| let &t_SI = "\<Esc>]12;purple\x7" |
| let &t_EI = "\<Esc>]12;blue\x7" |
| endif |
| NOTE: When Vim exits the shape for Normal mode will remain. The shape from |
| --- 439,454 ---- |
| to reset to the default colors. |
| |
| *termcap-cursor-shape* *termcap-cursor-color* |
| ! When Vim enters Insert mode the 't_SI' escape sequence is sent. When Vim |
| ! enters Replace mode the 't_SR' escape sequence is sent if it is set, otherwise |
| ! 't_SI' is sent. When leaving Insert mode or Replace mode 't_EI' is used. This |
| ! can be used to change the shape or color of the cursor in Insert or Replace |
| ! mode. These are not standard termcap/terminfo entries, you need to set them |
| ! yourself. |
| Example for an xterm, this changes the color of the cursor: > |
| if &term =~ "xterm" |
| let &t_SI = "\<Esc>]12;purple\x7" |
| + let &t_SR = "\<Esc>]12;red\x7" |
| let &t_EI = "\<Esc>]12;blue\x7" |
| endif |
| NOTE: When Vim exits the shape for Normal mode will remain. The shape from |
| |
| *** 670,677 **** |
| |
| *xterm-copy-paste* |
| NOTE: In some (older) xterms, it's not possible to move the cursor past column |
| ! 95. This is an xterm problem, not Vim's. Get a newer xterm |color-xterm|. |
| ! Now the limit is 223 columns. |
| |
| Copy/paste in xterm with (current mode NOT included in 'mouse'): |
| 1. Press left mouse button on first letter of text, move mouse pointer to last |
| --- 674,681 ---- |
| |
| *xterm-copy-paste* |
| NOTE: In some (older) xterms, it's not possible to move the cursor past column |
| ! 95 or 223. This is an xterm problem, not Vim's. Get a newer xterm |
| ! |color-xterm|. Also see |'ttymouse'|. |
| |
| Copy/paste in xterm with (current mode NOT included in 'mouse'): |
| 1. Press left mouse button on first letter of text, move mouse pointer to last |
| |
| |
| |
| *** 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_SR", T_CSR) |
| p_term("t_xn", T_XN) |
| p_term("t_xs", T_XS) |
| p_term("t_ZH", T_CZH) |
| |
| *** 8560,8566 **** |
| errmsg = e_invarg; |
| curwin->w_p_nuw = 10; |
| } |
| ! curwin->w_nrwidth_line_count = 0; |
| } |
| #endif |
| |
| --- 8561,8567 ---- |
| errmsg = e_invarg; |
| curwin->w_p_nuw = 10; |
| } |
| ! curwin->w_nrwidth_line_count = 0; /* trigger a redraw */ |
| } |
| #endif |
| |
| |
| |
| |
| *** 3567,3593 **** |
| |
| #if defined(CURSOR_SHAPE) || defined(PROTO) |
| /* |
| ! * Set cursor shape to match Insert mode. |
| */ |
| void |
| term_cursor_shape() |
| { |
| ! static int showing_insert_mode = MAYBE; |
| |
| ! if (!full_screen || *T_CSI == NUL || *T_CEI == NUL) |
| return; |
| |
| ! if (State & INSERT) |
| { |
| ! if (showing_insert_mode != TRUE) |
| out_str(T_CSI); /* Insert mode cursor */ |
| ! showing_insert_mode = TRUE; |
| } |
| ! else |
| { |
| ! if (showing_insert_mode != FALSE) |
| ! out_str(T_CEI); /* non-Insert mode cursor */ |
| ! showing_insert_mode = FALSE; |
| } |
| } |
| #endif |
| --- 3567,3612 ---- |
| |
| #if defined(CURSOR_SHAPE) || defined(PROTO) |
| /* |
| ! * Set cursor shape to match Insert or Replace mode. |
| */ |
| void |
| term_cursor_shape() |
| { |
| ! static int showing_mode = NORMAL; |
| ! char_u *p; |
| |
| ! /* Only do something when redrawing the screen and we can restore the |
| ! * mode. */ |
| ! if (!full_screen || *T_CEI == NUL) |
| return; |
| |
| ! if ((State & REPLACE) == REPLACE) |
| { |
| ! if (showing_mode != REPLACE) |
| ! { |
| ! if (*T_CSR != NUL) |
| ! p = T_CSR; /* Replace mode cursor */ |
| ! else |
| ! p = T_CSI; /* fall back to Insert mode cursor */ |
| ! if (*p != NUL) |
| ! { |
| ! out_str(p); |
| ! showing_mode = REPLACE; |
| ! } |
| ! } |
| ! } |
| ! else if (State & INSERT) |
| ! { |
| ! if (showing_mode != INSERT && *T_CSI != NUL) |
| ! { |
| out_str(T_CSI); /* Insert mode cursor */ |
| ! showing_mode = INSERT; |
| ! } |
| } |
| ! else if (showing_mode != NORMAL) |
| { |
| ! out_str(T_CEI); /* non-Insert mode cursor */ |
| ! showing_mode = NORMAL; |
| } |
| } |
| #endif |
| |
| |
| |
| *** 81,86 **** |
| --- 81,87 ---- |
| KS_CRV, /* request version string */ |
| KS_CSI, /* start insert mode (bar cursor) */ |
| KS_CEI, /* end insert mode (block cursor) */ |
| + KS_CSR, /* start replace mode (underline cursor) */ |
| #ifdef FEAT_VERTSPLIT |
| KS_CSV, /* scroll region vertical */ |
| #endif |
| |
| *** 159,164 **** |
| --- 160,166 ---- |
| #define T_CWS (term_str(KS_CWS)) /* window size */ |
| #define T_CSI (term_str(KS_CSI)) /* start insert mode */ |
| #define T_CEI (term_str(KS_CEI)) /* end insert mode */ |
| + #define T_CSR (term_str(KS_CSR)) /* start replace mode */ |
| #define T_CRV (term_str(KS_CRV)) /* request version string */ |
| #define T_OP (term_str(KS_OP)) /* original color pair */ |
| #define T_U7 (term_str(KS_U7)) /* request cursor position */ |
| |
| |
| |
| *** 743,744 **** |
| --- 743,746 ---- |
| { /* Add new patch number below this line */ |
| + /**/ |
| + 687, |
| /**/ |
| |
| -- |
| It is illegal to rob a bank and then shoot at the bank teller with a water |
| pistol. |
| [real standing law in Louisana, United States of America] |
| |
| /// 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 /// |