annotate src/misc2.c @ 34686:83875247fbc0 v9.1.0224

patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text Commit: https://github.com/vim/vim/commit/515f734e687f28f7199b2a8042197624d9f3ec15 Author: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Date: Thu Mar 28 12:01:14 2024 +0100 patch 9.1.0224: cursor may move too many lines over "right" & "below" virt text Problem: If a line has "right" & "below" virtual text properties, where the "below" property may be stored first due to lack of ordering between them, then the line height is calculated to be 1 more and causes the cursor to far over the line. Solution: Remove some unnecessary setting of a `next_right_goes_below = TRUE` flag for "below" and "above" text properties. (Dylan Thacker-Smith) I modified a regression test I recently added to cover this case, leveraging the fact that "after", "right" & "below" text properties are being stored in the reverse of the order they are added in. The previous version of this regression test was crafted to workaround this issue so it can be addressed by this separate patch. closes: #14317 Signed-off-by: Dylan Thacker-Smith <dylan.ah.smith@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Thu, 28 Mar 2024 12:15:03 +0100
parents 9e093c96dff6
children 63e3334bcadb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10042
4aead6a9b7a9 commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents: 9869
diff changeset
1 /* vi:set ts=8 sts=4 sw=4 noet:
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 * VIM - Vi IMproved by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 * Do ":help uganda" in Vim to read copying and usage conditions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6 * Do ":help credits" in Vim to see a list of people who contributed.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7 * See README.txt for an overview of the Vim source code.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11 * misc2.c: Various functions.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 #include "vim.h"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
15 static char_u *username = NULL; // cached result of mch_get_user_name()
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
16
7803
37c929c4a073 commit https://github.com/vim/vim/commit/92b8b2d307e34117f146319872010b0ccc9d2713
Christian Brabandt <cb@256bit.org>
parents: 7664
diff changeset
17 static int coladvance2(pos_T *pos, int addspaces, int finetune, colnr_T wcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 * Return TRUE if in the current mode we need to use virtual.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
23 virtual_active(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24 {
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
25 unsigned int cur_ve_flags = get_ve_flags();
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
26
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
27 // While an operator is being executed we return "virtual_op", because
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
28 // VIsual_active has already been reset, thus we can't check for "block"
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
29 // being used.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 if (virtual_op != MAYBE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 return virtual_op;
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
32 return (cur_ve_flags == VE_ALL
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
33 || ((cur_ve_flags & VE_BLOCK) && VIsual_active
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
34 && VIsual_mode == Ctrl_V)
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
35 || ((cur_ve_flags & VE_INSERT) && (State & MODE_INSERT)));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 * Get the screen position of the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
42 getviscol(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 colnr_T x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 getvvcol(curwin, &curwin->w_cursor, &x, NULL, NULL);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47 return (int)x;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 /*
1209
070f2ac50cf8 updated for version 7.1b
vimboss
parents: 1099
diff changeset
51 * Go to column "wcol", and add/insert white space as necessary to get the
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 * cursor in that column.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 * The caller must have saved the cursor line for undo!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
56 coladvance_force(colnr_T wcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 int rc = coladvance2(&curwin->w_cursor, TRUE, FALSE, wcol);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 if (wcol == MAXCOL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61 curwin->w_valid &= ~VALID_VIRTCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
64 // Virtcol is valid
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 curwin->w_valid |= VALID_VIRTCOL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 curwin->w_virtcol = wcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 return rc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71 /*
15428
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
72 * Get the screen position of character col with a coladd in the cursor line.
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
73 */
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
74 int
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
75 getviscol2(colnr_T col, colnr_T coladd UNUSED)
15428
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
76 {
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
77 colnr_T x;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
78 pos_T pos;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
79
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
80 pos.lnum = curwin->w_cursor.lnum;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
81 pos.col = col;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
82 pos.coladd = coladd;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
83 getvvcol(curwin, &pos, &x, NULL, NULL);
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
84 return (int)x;
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
85 }
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
86
eae582bfb293 patch 8.1.0722: cannot build without the virtualedit feature
Bram Moolenaar <Bram@vim.org>
parents: 15292
diff changeset
87 /*
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
88 * Try to advance the Cursor to the specified screen column "wantcol".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89 * If virtual editing: fine tune the cursor position.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 * Note that all virtual positions off the end of a line should share
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 * a curwin->w_cursor.col value (n.b. this is equal to STRLEN(line)),
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 * beginning at coladd 0.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 * return OK if desired column is reached, FAIL if not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96 int
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
97 coladvance(colnr_T wantcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98 {
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
99 int rc = getvpos(&curwin->w_cursor, wantcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
101 if (wantcol == MAXCOL || rc == FAIL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 curwin->w_valid &= ~VALID_VIRTCOL;
44
af1bcb9a13c0 updated for version 7.0027
vimboss
parents: 41
diff changeset
103 else if (*ml_get_cursor() != TAB)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
105 // Virtcol is valid when not on a TAB
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 curwin->w_valid |= VALID_VIRTCOL;
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
107 curwin->w_virtcol = wantcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109 return rc;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112 /*
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
113 * Return in "pos" the position of the cursor advanced to screen column
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
114 * "wantcol".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115 * return OK if desired column is reached, FAIL if not
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 int
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
118 getvpos(pos_T *pos, colnr_T wantcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119 {
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
120 return coladvance2(pos, FALSE, virtual_active(), wantcol);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 static int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
124 coladvance2(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
125 pos_T *pos,
18291
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
126 int addspaces, // change the text to achieve our goal?
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
127 int finetune, // change char offset for the exact column
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
128 colnr_T wcol_arg) // column to move to (can be negative)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129 {
18291
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
130 colnr_T wcol = wcol_arg;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 int idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132 char_u *line;
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
133 int linelen;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 colnr_T col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 int csize = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 int one_more;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 #ifdef FEAT_LINEBREAK
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138 int head = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
141 one_more = (State & MODE_INSERT)
772
aaaca5077255 updated for version 7.0226
vimboss
parents: 766
diff changeset
142 || restart_edit != NUL
aaaca5077255 updated for version 7.0226
vimboss
parents: 766
diff changeset
143 || (VIsual_active && *p_sel != 'o')
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
144 || ((get_ve_flags() & VE_ONEMORE) && wcol < MAXCOL);
1982
b1b09b68d706 updated for version 7.2-279
vimboss
parents: 1881
diff changeset
145 line = ml_get_buf(curbuf, pos->lnum, FALSE);
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
146 linelen = ml_get_buf_len(curbuf, pos->lnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 if (wcol >= MAXCOL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 {
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
150 idx = linelen - 1 + one_more;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 col = wcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 if ((addspaces || finetune) && !VIsual_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 {
33000
bc3b293a965c patch 9.0.1792: problem with gj/gk/gM and virtual text
Christian Brabandt <cb@256bit.org>
parents: 32138
diff changeset
155 curwin->w_curswant = linetabsize(curwin, pos->lnum) + one_more;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 if (curwin->w_curswant > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157 --curwin->w_curswant;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 {
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
162 int width = curwin->w_width - win_col_off(curwin);
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
163 chartabsize_T cts;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164
620
9e359e5759f6 updated for version 7.0177
vimboss
parents: 574
diff changeset
165 if (finetune
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 && curwin->w_p_wrap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 && curwin->w_width != 0
25642
b46214b82d6e patch 8.2.3357: crash when 'virtualedit' is set and window is narrow
Bram Moolenaar <Bram@vim.org>
parents: 25529
diff changeset
168 && wcol >= (colnr_T)width
b46214b82d6e patch 8.2.3357: crash when 'virtualedit' is set and window is narrow
Bram Moolenaar <Bram@vim.org>
parents: 25529
diff changeset
169 && width > 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 {
33000
bc3b293a965c patch 9.0.1792: problem with gj/gk/gM and virtual text
Christian Brabandt <cb@256bit.org>
parents: 32138
diff changeset
171 csize = linetabsize(curwin, pos->lnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 if (csize > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173 csize--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174
620
9e359e5759f6 updated for version 7.0177
vimboss
parents: 574
diff changeset
175 if (wcol / width > (colnr_T)csize / width
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
176 && ((State & MODE_INSERT) == 0 || (int)wcol > csize + 1))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
178 // In case of line wrapping don't move the cursor beyond the
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
179 // right screen edge. In Insert mode allow going just beyond
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
180 // the last character (like what happens when typing and
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
181 // reaching the right window edge).
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182 wcol = (csize / width + 1) * width - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185
29451
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
186 init_chartabsize_arg(&cts, curwin, pos->lnum, 0, line, line);
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
187 while (cts.cts_vcol <= wcol && *cts.cts_ptr != NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188 {
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
189 #ifdef FEAT_PROP_POPUP
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
190 int at_start = cts.cts_ptr == cts.cts_line;
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
191 #endif
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
192 // Count a tab for what it's worth (if list mode not on)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193 #ifdef FEAT_LINEBREAK
29451
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
194 csize = win_lbr_chartabsize(&cts, &head);
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
195 MB_PTR_ADV(cts.cts_ptr);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 #else
29451
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
197 csize = lbr_chartabsize_adv(&cts);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 #endif
29451
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
199 cts.cts_vcol += csize;
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
200 #ifdef FEAT_PROP_POPUP
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
201 if (at_start)
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
202 // do not count the columns for virtual text above
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
203 cts.cts_vcol -= cts.cts_first_char;
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
204 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205 }
29451
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
206 col = cts.cts_vcol;
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
207 idx = (int)(cts.cts_ptr - line);
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
208 clear_chartabsize_arg(&cts);
057c26b5c33a patch 9.0.0067: cannot show virtual text
Bram Moolenaar <Bram@vim.org>
parents: 28893
diff changeset
209
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 * Handle all the special cases. The virtual_active() check
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 * is needed to ensure that a virtual position off the end of
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213 * a line has the correct indexing. The one_more comparison
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214 * replaces an explicit add of one_more later on.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216 if (col > wcol || (!virtual_active() && one_more == 0))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218 idx -= 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 # ifdef FEAT_LINEBREAK
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
220 // Don't count the chars from 'showbreak'.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 csize -= head;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 col -= csize;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 if (virtual_active()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227 && addspaces
18291
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
228 && wcol >= 0
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229 && ((col != wcol && col != wcol + 1) || csize > 1))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
231 // 'virtualedit' is set: The difference between wcol and col is
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
232 // filled with spaces.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 if (line[idx] == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
236 // Append spaces
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237 int correct = wcol - col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 char_u *newline = alloc(idx + correct + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 int t;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 if (newline == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 for (t = 0; t < idx; ++t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245 newline[t] = line[t];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 for (t = 0; t < correct; ++t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248 newline[t + idx] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 newline[idx + correct] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 ml_replace(pos->lnum, newline, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253 changed_bytes(pos->lnum, (colnr_T)idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 idx += correct;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255 col = wcol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
259 // Break a tab
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
260 int correct = wcol - col - csize + 1; // negative!!
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
261 char_u *newline;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 int t, s = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 int v;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264
840
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
265 if (-correct > csize)
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
266 return FAIL;
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
267
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
268 newline = alloc(linelen + csize);
2c885fab04e3 updated for version 7.0e06
vimboss
parents: 839
diff changeset
269 if (newline == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272 for (t = 0; t < linelen; t++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 if (t != idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 newline[s++] = line[t];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 for (v = 0; v < csize; v++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 newline[s++] = ' ';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 newline[linelen + csize - 1] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 ml_replace(pos->lnum, newline, FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284 changed_bytes(pos->lnum, idx);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 idx += (csize - 1 + correct);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 col += correct;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291 if (idx < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
292 pos->col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
294 pos->col = idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
295
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
296 pos->coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 if (finetune)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 if (wcol == MAXCOL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
302 // The width of the last character is used to set coladd.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303 if (!one_more)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 colnr_T scol, ecol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 getvcol(curwin, pos, &scol, NULL, &ecol);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308 pos->coladd = ecol - scol;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313 int b = (int)wcol - (int)col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
315 // The difference between wcol and col is used to set coladd.
12515
972ea22c946f patch 8.0.1136: W_WIDTH() is always the same
Christian Brabandt <cb@256bit.org>
parents: 12477
diff changeset
316 if (b > 0 && b < (MAXCOL - 2 * curwin->w_width))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317 pos->coladd = b;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 col += b;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
323 // prevent from moving onto a trail byte
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 if (has_mbyte)
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
325 mb_adjustpos(curbuf, pos);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326
18291
11f68eb58fda patch 8.1.2140: "gk" and "gj" do not work correctly in number column
Bram Moolenaar <Bram@vim.org>
parents: 18195
diff changeset
327 if (wcol < 0 || col < wcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 return FAIL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
330 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
331
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
332 /*
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
333 * Increment the cursor position. See inc() for return values.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
336 inc_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338 return inc(&curwin->w_cursor);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340
1621
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
341 /*
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
342 * Increment the line pointer "lp" crossing line boundaries as necessary.
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
343 * Return 1 when going to the next line.
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
344 * Return 2 when moving forward onto a NUL at the end of the line).
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
345 * Return -1 when at the end of file.
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
346 * Return 0 otherwise.
82b5078be2dd updated for version 7.2a
vimboss
parents: 1576
diff changeset
347 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
349 inc(pos_T *lp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 {
13082
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
351 char_u *p;
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
352
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
353 // when searching position may be set to end of a line
13082
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
354 if (lp->col != MAXCOL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 {
13082
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
356 p = ml_get_pos(lp);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
357 if (*p != NUL) // still within line, move to next char (may be NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 {
13082
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
359 if (has_mbyte)
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
360 {
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
361 int l = (*mb_ptr2len)(p);
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
362
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
363 lp->col += l;
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
364 return ((p[l] != NUL) ? 0 : 2);
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
365 }
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
366 lp->col++;
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
367 lp->coladd = 0;
a80082fd1a1d patch 8.0.1416: crash when searching for a sentence
Christian Brabandt <cb@256bit.org>
parents: 12865
diff changeset
368 return ((p[1] != NUL) ? 0 : 2);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
371 if (lp->lnum != curbuf->b_ml.ml_line_count) // there is a next line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 lp->col = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 lp->lnum++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 lp->coladd = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 * incl(lp): same as inc(), but skip the NUL at the end of non-empty lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
384 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
385 incl(pos_T *lp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
386 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
387 int r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
388
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
389 if ((r = inc(lp)) >= 1 && lp->col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
390 r = inc(lp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
391 return r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
392 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
393
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
394 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
395 * dec(p)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
396 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
397 * Decrement the line pointer 'p' crossing line boundaries as necessary.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
398 * Return 1 when crossing a line, -1 when at start of file, 0 otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
399 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
400 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
401 dec_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
402 {
10549
055b1633aed7 patch 8.0.0164: outdated and misplaced comments
Christian Brabandt <cb@256bit.org>
parents: 10449
diff changeset
403 return dec(&curwin->w_cursor);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
404 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
405
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
406 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
407 dec(pos_T *lp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
408 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
409 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
410
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
411 lp->coladd = 0;
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
412 if (lp->col == MAXCOL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
413 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
414 // past end of line
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
415 p = ml_get(lp->lnum);
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
416 lp->col = ml_get_len(lp->lnum);
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
417 if (has_mbyte)
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
418 lp->col -= (*mb_head_off)(p, p + lp->col);
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
419 return 0;
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
420 }
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
421
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
422 if (lp->col > 0)
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
423 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
424 // still within line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
425 lp->col--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
426 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
427 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
428 p = ml_get(lp->lnum);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
429 lp->col -= (*mb_head_off)(p, p + lp->col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
430 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
431 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
432 }
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
433
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
434 if (lp->lnum > 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
435 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
436 // there is a prior line
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
437 lp->lnum--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
438 p = ml_get(lp->lnum);
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
439 lp->col = ml_get_len(lp->lnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
440 if (has_mbyte)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
441 lp->col -= (*mb_head_off)(p, p + lp->col);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
442 return 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
443 }
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
444
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
445 // at start of file
13084
25ab78f14c8b patch 8.0.1417: test doesn't search for a sentence
Christian Brabandt <cb@256bit.org>
parents: 13082
diff changeset
446 return -1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
447 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
448
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
449 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
450 * decl(lp): same as dec(), but skip the NUL at the end of non-empty lines
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
451 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
452 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
453 decl(pos_T *lp)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
454 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
455 int r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
456
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
457 if ((r = dec(lp)) == 1 && lp->col)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
458 r = dec(lp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
459 return r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
460 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
461
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
462 /*
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
463 * Get the line number relative to the current cursor position, i.e. the
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
464 * difference between line number and cursor position. Only look for lines that
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
465 * can be visible, folded lines don't count.
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
466 */
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
467 linenr_T
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
468 get_cursor_rel_lnum(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
469 win_T *wp,
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
470 linenr_T lnum) // line number to get the result for
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
471 {
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
472 linenr_T cursor = wp->w_cursor.lnum;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
473 linenr_T retval = 0;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
474
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
475 #ifdef FEAT_FOLDING
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
476 if (hasAnyFolding(wp))
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
477 {
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
478 if (lnum > cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
479 {
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
480 while (lnum > cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
481 {
5564
cf722c092360 updated for version 7.4.130
Bram Moolenaar <bram@vim.org>
parents: 5347
diff changeset
482 (void)hasFoldingWin(wp, lnum, &lnum, NULL, TRUE, NULL);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
483 // if lnum and cursor are in the same fold,
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
484 // now lnum <= cursor
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
485 if (lnum > cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
486 retval++;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
487 lnum--;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
488 }
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
489 }
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
490 else if (lnum < cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
491 {
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
492 while (lnum < cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
493 {
5564
cf722c092360 updated for version 7.4.130
Bram Moolenaar <bram@vim.org>
parents: 5347
diff changeset
494 (void)hasFoldingWin(wp, lnum, NULL, &lnum, TRUE, NULL);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
495 // if lnum and cursor are in the same fold,
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
496 // now lnum >= cursor
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
497 if (lnum < cursor)
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
498 retval--;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
499 lnum++;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
500 }
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
501 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
502 // else if (lnum == cursor)
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
503 // retval = 0;
2178
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
504 }
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
505 else
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
506 #endif
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
507 retval = lnum - cursor;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
508
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
509 return retval;
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
510 }
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
511
c6f1aa1e9f32 Add 'relativenumber' patch from Markus Heidelberg.
Bram Moolenaar <bram@vim.org>
parents: 2027
diff changeset
512 /*
10110
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
513 * Make sure "pos.lnum" and "pos.col" are valid in "buf".
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
514 * This allows for the col to be on the NUL byte.
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
515 */
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
516 void
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
517 check_pos(buf_T *buf, pos_T *pos)
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
518 {
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
519 colnr_T len;
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
520
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
521 if (pos->lnum > buf->b_ml.ml_line_count)
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
522 pos->lnum = buf->b_ml.ml_line_count;
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
523
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
524 if (pos->col > 0)
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
525 {
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
526 len = ml_get_buf_len(buf, pos->lnum);
10110
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
527 if (pos->col > len)
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
528 pos->col = len;
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
529 }
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
530 }
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
531
cfb38b57d407 commit https://github.com/vim/vim/commit/d5824ce1b5491df7d2eb0b66189d366fa67b4585
Christian Brabandt <cb@256bit.org>
parents: 10042
diff changeset
532 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
533 * Make sure curwin->w_cursor.lnum is valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
534 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
535 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
536 check_cursor_lnum(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
537 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
538 if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
539 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
540 #ifdef FEAT_FOLDING
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
541 // If there is a closed fold at the end of the file, put the cursor in
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
542 // its first line. Otherwise in the last line.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
543 if (!hasFolding(curbuf->b_ml.ml_line_count,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
544 &curwin->w_cursor.lnum, NULL))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
545 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
546 curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
547 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
548 if (curwin->w_cursor.lnum <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
549 curwin->w_cursor.lnum = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
550 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
551
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
552 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
553 * Make sure curwin->w_cursor.col is valid.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
554 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
555 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
556 check_cursor_col(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
557 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
558 check_cursor_col_win(curwin);
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
559 }
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
560
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
561 /*
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
562 * Make sure win->w_cursor.col is valid.
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
563 */
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
564 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
565 check_cursor_col_win(win_T *win)
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
566 {
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
567 colnr_T len;
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
568 colnr_T oldcol = win->w_cursor.col;
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
569 colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
570 unsigned int cur_ve_flags = get_ve_flags();
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
571
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
572 len = ml_get_buf_len(win->w_buffer, win->w_cursor.lnum);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
573 if (len == 0)
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
574 win->w_cursor.col = 0;
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
575 else if (win->w_cursor.col >= len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
576 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
577 // Allow cursor past end-of-line when:
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
578 // - in Insert mode or restarting Insert mode
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
579 // - in Visual mode and 'selection' isn't "old"
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
580 // - 'virtualedit' is set
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
581 if ((State & MODE_INSERT) || restart_edit
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
582 || (VIsual_active && *p_sel != 'o')
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
583 || (cur_ve_flags & VE_ONEMORE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
584 || virtual_active())
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
585 win->w_cursor.col = len;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
586 else
1099
2ec8266fa254 updated for version 7.0-225
vimboss
parents: 1072
diff changeset
587 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
588 win->w_cursor.col = len - 1;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
589 // Move the cursor to the head byte.
1099
2ec8266fa254 updated for version 7.0-225
vimboss
parents: 1072
diff changeset
590 if (has_mbyte)
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
591 mb_adjustpos(win->w_buffer, &win->w_cursor);
1099
2ec8266fa254 updated for version 7.0-225
vimboss
parents: 1072
diff changeset
592 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
593 }
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
594 else if (win->w_cursor.col < 0)
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
595 win->w_cursor.col = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
596
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
597 // If virtual editing is on, we can leave the cursor on the old position,
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
598 // only we must set it to virtual. But don't do it when at the end of the
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
599 // line.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
600 if (oldcol == MAXCOL)
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
601 win->w_cursor.coladd = 0;
25380
ac88cd21ae88 patch 8.2.3227: 'virtualedit' can only be set globally
Bram Moolenaar <Bram@vim.org>
parents: 25206
diff changeset
602 else if (cur_ve_flags == VE_ALL)
1841
72ef7987368d updated for version 7.2-139
vimboss
parents: 1828
diff changeset
603 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
604 if (oldcoladd > win->w_cursor.col)
12164
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
605 {
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
606 win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
12279
57e0b701611e patch 8.0.1019: pasting in virtual edit happens in the wrong place
Christian Brabandt <cb@256bit.org>
parents: 12240
diff changeset
607
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
608 // Make sure that coladd is not more than the char width.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
609 // Not for the last character, coladd is then used when the cursor
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
610 // is actually after the last character.
28169
bef82285dda0 patch 8.2.4610: some conditions are always true
Bram Moolenaar <Bram@vim.org>
parents: 27617
diff changeset
611 if (win->w_cursor.col + 1 < len)
12164
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
612 {
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
613 int cs, ce;
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
614
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
615 getvcol(win, &win->w_cursor, &cs, NULL, &ce);
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
616 if (win->w_cursor.coladd > ce - cs)
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
617 win->w_cursor.coladd = ce - cs;
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
618 }
5d82470552ce patch 8.0.0962: crash with virtualedit and joining lines
Christian Brabandt <cb@256bit.org>
parents: 11737
diff changeset
619 }
1841
72ef7987368d updated for version 7.2-139
vimboss
parents: 1828
diff changeset
620 else
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
621 // avoid weird number when there is a miscalculation or overflow
2933
0bef86c5c985 updated for version 7.3.239
Bram Moolenaar <bram@vim.org>
parents: 2768
diff changeset
622 win->w_cursor.coladd = 0;
1841
72ef7987368d updated for version 7.2-139
vimboss
parents: 1828
diff changeset
623 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
624 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
625
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
626 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
627 * make sure curwin->w_cursor in on a valid character
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
628 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
629 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
630 check_cursor(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
631 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
632 check_cursor_lnum();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
633 check_cursor_col();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
634 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
635
28893
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
636 /*
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
637 * Check if VIsual position is valid, correct it if not.
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
638 * Can be called when in Visual mode and a change has been made.
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
639 */
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
640 void
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
641 check_visual_pos(void)
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
642 {
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
643 if (VIsual.lnum > curbuf->b_ml.ml_line_count)
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
644 {
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
645 VIsual.lnum = curbuf->b_ml.ml_line_count;
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
646 VIsual.col = 0;
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
647 VIsual.coladd = 0;
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
648 }
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
649 else
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
650 {
34540
9e093c96dff6 patch 9.1.0172: More code can use ml_get_buf_len() instead of STRLEN()
Christian Brabandt <cb@256bit.org>
parents: 34269
diff changeset
651 int len = ml_get_len(VIsual.lnum);
28893
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
652
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
653 if (VIsual.col > len)
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
654 {
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
655 VIsual.col = len;
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
656 VIsual.coladd = 0;
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
657 }
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
658 }
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
659 }
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
660
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
661 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
662 * Make sure curwin->w_cursor is not on the NUL at the end of the line.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
663 * Allow it when in Visual mode and 'selection' is not "old".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
664 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
665 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
666 adjust_cursor_col(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
667 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
668 if (curwin->w_cursor.col > 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
669 && (!VIsual_active || *p_sel == 'o')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
670 && gchar_cursor() == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
671 --curwin->w_cursor.col;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
672 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
673
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
674 /*
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
675 * Set "curwin->w_leftcol" to "leftcol".
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
676 * Adjust the cursor position if needed.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
677 * Return TRUE if the cursor was moved.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
678 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
679 int
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
680 set_leftcol(colnr_T leftcol)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
681 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
682 int retval = FALSE;
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
683
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
684 // Return quickly when there is no change.
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
685 if (curwin->w_leftcol == leftcol)
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
686 return FALSE;
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
687 curwin->w_leftcol = leftcol;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
688
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
689 changed_cline_bef_curs();
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
690 long lastcol = curwin->w_leftcol + curwin->w_width - curwin_col_off() - 1;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
691 validate_virtcol();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
692
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
693 // If the cursor is right or left of the screen, move it to last or first
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
694 // visible character.
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
695 long siso = get_sidescrolloff_value();
15713
ad8b2c109b22 patch 8.1.0864: cannot have a local value for 'scrolloff' and 'sidescrolloff'
Bram Moolenaar <Bram@vim.org>
parents: 15675
diff changeset
696 if (curwin->w_virtcol > (colnr_T)(lastcol - siso))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
697 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
698 retval = TRUE;
15713
ad8b2c109b22 patch 8.1.0864: cannot have a local value for 'scrolloff' and 'sidescrolloff'
Bram Moolenaar <Bram@vim.org>
parents: 15675
diff changeset
699 coladvance((colnr_T)(lastcol - siso));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
700 }
15713
ad8b2c109b22 patch 8.1.0864: cannot have a local value for 'scrolloff' and 'sidescrolloff'
Bram Moolenaar <Bram@vim.org>
parents: 15675
diff changeset
701 else if (curwin->w_virtcol < curwin->w_leftcol + siso)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
702 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
703 retval = TRUE;
15713
ad8b2c109b22 patch 8.1.0864: cannot have a local value for 'scrolloff' and 'sidescrolloff'
Bram Moolenaar <Bram@vim.org>
parents: 15675
diff changeset
704 (void)coladvance((colnr_T)(curwin->w_leftcol + siso));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
705 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
706
31133
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
707 // If the start of the character under the cursor is not on the screen,
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
708 // advance the cursor one more char. If this fails (last char of the
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
709 // line) adjust the scrolling.
cc0c4141fb73 patch 9.0.0901: setting w_leftcol and handling side effects is confusing
Bram Moolenaar <Bram@vim.org>
parents: 31093
diff changeset
710 colnr_T s, e;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
711 getvvcol(curwin, &curwin->w_cursor, &s, NULL, &e);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
712 if (e > (colnr_T)lastcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
713 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
714 retval = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
715 coladvance(s - 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
716 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
717 else if (s < curwin->w_leftcol)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
718 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
719 retval = TRUE;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
720 if (coladvance(e + 1) == FAIL) // there isn't another character
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
721 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
722 curwin->w_leftcol = s; // adjust w_leftcol instead
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
723 changed_cline_bef_curs();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
724 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
725 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
726
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
727 if (retval)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
728 curwin->w_set_curswant = TRUE;
29732
89e1d67814a9 patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents: 29451
diff changeset
729 redraw_later(UPD_NOT_VALID);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
730 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
731 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
732
15292
ba6f0f1bb9d0 patch 8.1.0654: when deleting a line text property flags are not adjusted
Bram Moolenaar <Bram@vim.org>
parents: 15211
diff changeset
733 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
734 * Isolate one part of a string option where parts are separated with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
735 * "sep_chars".
459
d9d38102399f updated for version 7.0122
vimboss
parents: 448
diff changeset
736 * The part is copied into "buf[maxlen]".
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
737 * "*option" is advanced to the next part.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
738 * The length is returned.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
739 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
740 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
741 copy_option_part(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
742 char_u **option,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
743 char_u *buf,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
744 int maxlen,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
745 char *sep_chars)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
746 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
747 int len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
748 char_u *p = *option;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
749
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
750 // skip '.' at start of option part, for 'suffixes'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
751 if (*p == '.')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
752 buf[len++] = *p++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
753 while (*p != NUL && vim_strchr((char_u *)sep_chars, *p) == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
755 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
756 * Skip backslash before a separator character and space.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
757 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
758 if (p[0] == '\\' && vim_strchr((char_u *)sep_chars, p[1]) != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
759 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
760 if (len < maxlen - 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
761 buf[len++] = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
762 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
763 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
764 buf[len] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
765
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
766 if (*p != NUL && *p != ',') // skip non-standard separator
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
767 ++p;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
768 p = skip_to_option_part(p); // p points to next file name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
769
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
770 *option = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
771 return len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
772 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
773
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
774 #ifndef HAVE_MEMSET
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
775 void *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
776 vim_memset(void *ptr, int c, size_t size)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
777 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
778 char *p = ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
779
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
780 while (size-- > 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
781 *p++ = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
782 return ptr;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
783 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
784 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
785
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
786 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
787 * Vim has its own isspace() function, because on some machines isspace()
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
788 * can't handle characters above 128.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
789 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
790 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
791 vim_isspace(int x)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
792 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
793 return ((x >= 9 && x <= 13) || x == ' ');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
794 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
795
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
796 /************************************************************************
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
797 * functions that use lookup tables for various things, generally to do with
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
798 * special key codes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
799 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
800
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
801 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
802 * Some useful tables.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
803 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
804
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
805 static struct modmasktable
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
806 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
807 short mod_mask; // Bit-mask for particular key modifier
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
808 short mod_flag; // Bit(s) for particular key modifier
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
809 char_u name; // Single letter name of modifier
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
810 } mod_mask_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
812 {MOD_MASK_ALT, MOD_MASK_ALT, (char_u)'M'},
179
7fd70926e2e1 updated for version 7.0055
vimboss
parents: 170
diff changeset
813 {MOD_MASK_META, MOD_MASK_META, (char_u)'T'},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
814 {MOD_MASK_CTRL, MOD_MASK_CTRL, (char_u)'C'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
815 {MOD_MASK_SHIFT, MOD_MASK_SHIFT, (char_u)'S'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
816 {MOD_MASK_MULTI_CLICK, MOD_MASK_2CLICK, (char_u)'2'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
817 {MOD_MASK_MULTI_CLICK, MOD_MASK_3CLICK, (char_u)'3'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
818 {MOD_MASK_MULTI_CLICK, MOD_MASK_4CLICK, (char_u)'4'},
34219
a0a4a774117b patch 9.1.0058: Cannot map Super Keys in GTK UI
Christian Brabandt <cb@256bit.org>
parents: 33000
diff changeset
819 #if defined(MACOS_X) || defined(FEAT_GUI_GTK)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
820 {MOD_MASK_CMD, MOD_MASK_CMD, (char_u)'D'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
821 #endif
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
822 // 'A' must be the last one
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
823 {MOD_MASK_ALT, MOD_MASK_ALT, (char_u)'A'},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
824 {0, 0, NUL}
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
825 // NOTE: when adding an entry, update MAX_KEY_NAME_LEN!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
826 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
827
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
828 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
829 * Shifted key terminal codes and their unshifted equivalent.
1209
070f2ac50cf8 updated for version 7.1b
vimboss
parents: 1099
diff changeset
830 * Don't add mouse codes here, they are handled separately!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
831 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
832 #define MOD_KEYS_ENTRY_SIZE 5
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
833
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
834 static char_u modifier_keys_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
835 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
836 // mod mask with modifier without modifier
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
837 MOD_MASK_SHIFT, '&', '9', '@', '1', // begin
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
838 MOD_MASK_SHIFT, '&', '0', '@', '2', // cancel
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
839 MOD_MASK_SHIFT, '*', '1', '@', '4', // command
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
840 MOD_MASK_SHIFT, '*', '2', '@', '5', // copy
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
841 MOD_MASK_SHIFT, '*', '3', '@', '6', // create
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
842 MOD_MASK_SHIFT, '*', '4', 'k', 'D', // delete char
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
843 MOD_MASK_SHIFT, '*', '5', 'k', 'L', // delete line
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
844 MOD_MASK_SHIFT, '*', '7', '@', '7', // end
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
845 MOD_MASK_CTRL, KS_EXTRA, (int)KE_C_END, '@', '7', // end
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
846 MOD_MASK_SHIFT, '*', '9', '@', '9', // exit
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
847 MOD_MASK_SHIFT, '*', '0', '@', '0', // find
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
848 MOD_MASK_SHIFT, '#', '1', '%', '1', // help
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
849 MOD_MASK_SHIFT, '#', '2', 'k', 'h', // home
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
850 MOD_MASK_CTRL, KS_EXTRA, (int)KE_C_HOME, 'k', 'h', // home
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
851 MOD_MASK_SHIFT, '#', '3', 'k', 'I', // insert
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
852 MOD_MASK_SHIFT, '#', '4', 'k', 'l', // left arrow
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
853 MOD_MASK_CTRL, KS_EXTRA, (int)KE_C_LEFT, 'k', 'l', // left arrow
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
854 MOD_MASK_SHIFT, '%', 'a', '%', '3', // message
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
855 MOD_MASK_SHIFT, '%', 'b', '%', '4', // move
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
856 MOD_MASK_SHIFT, '%', 'c', '%', '5', // next
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
857 MOD_MASK_SHIFT, '%', 'd', '%', '7', // options
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
858 MOD_MASK_SHIFT, '%', 'e', '%', '8', // previous
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
859 MOD_MASK_SHIFT, '%', 'f', '%', '9', // print
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
860 MOD_MASK_SHIFT, '%', 'g', '%', '0', // redo
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
861 MOD_MASK_SHIFT, '%', 'h', '&', '3', // replace
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
862 MOD_MASK_SHIFT, '%', 'i', 'k', 'r', // right arr.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
863 MOD_MASK_CTRL, KS_EXTRA, (int)KE_C_RIGHT, 'k', 'r', // right arr.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
864 MOD_MASK_SHIFT, '%', 'j', '&', '5', // resume
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
865 MOD_MASK_SHIFT, '!', '1', '&', '6', // save
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
866 MOD_MASK_SHIFT, '!', '2', '&', '7', // suspend
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
867 MOD_MASK_SHIFT, '!', '3', '&', '8', // undo
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
868 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_UP, 'k', 'u', // up arrow
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
869 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_DOWN, 'k', 'd', // down arrow
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
870
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
871 // vt100 F1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
872 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_XF1, KS_EXTRA, (int)KE_XF1,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
873 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_XF2, KS_EXTRA, (int)KE_XF2,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
874 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_XF3, KS_EXTRA, (int)KE_XF3,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
875 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_XF4, KS_EXTRA, (int)KE_XF4,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
876
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
877 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F1, 'k', '1', // F1
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
878 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F2, 'k', '2',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
879 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F3, 'k', '3',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
880 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F4, 'k', '4',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
881 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F5, 'k', '5',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
882 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F6, 'k', '6',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
883 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F7, 'k', '7',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
884 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F8, 'k', '8',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
885 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F9, 'k', '9',
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
886 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F10, 'k', ';', // F10
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
887
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
888 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F11, 'F', '1',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
889 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F12, 'F', '2',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
890 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F13, 'F', '3',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
891 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F14, 'F', '4',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
892 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F15, 'F', '5',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
893 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F16, 'F', '6',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
894 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F17, 'F', '7',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
895 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F18, 'F', '8',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
896 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F19, 'F', '9',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
897 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F20, 'F', 'A',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
898
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
899 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F21, 'F', 'B',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
900 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F22, 'F', 'C',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
901 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F23, 'F', 'D',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
902 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F24, 'F', 'E',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
903 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F25, 'F', 'F',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
904 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F26, 'F', 'G',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
905 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F27, 'F', 'H',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
906 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F28, 'F', 'I',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
907 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F29, 'F', 'J',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
908 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F30, 'F', 'K',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
909
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
910 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F31, 'F', 'L',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
911 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F32, 'F', 'M',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
912 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F33, 'F', 'N',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
913 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F34, 'F', 'O',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
914 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F35, 'F', 'P',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
915 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F36, 'F', 'Q',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
916 MOD_MASK_SHIFT, KS_EXTRA, (int)KE_S_F37, 'F', 'R',
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
917
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
918 // TAB pseudo code
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
919 MOD_MASK_SHIFT, 'k', 'B', KS_EXTRA, (int)KE_TAB,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
920
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
921 NUL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
922 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
923
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
924 static struct key_name_entry
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
925 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
926 int key; // Special key code or ascii value
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
927 char_u *name; // Name of key
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
928 } key_names_table[] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
929 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
930 {' ', (char_u *)"Space"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
931 {TAB, (char_u *)"Tab"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
932 {K_TAB, (char_u *)"Tab"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
933 {NL, (char_u *)"NL"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
934 {NL, (char_u *)"NewLine"}, // Alternative name
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
935 {NL, (char_u *)"LineFeed"}, // Alternative name
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
936 {NL, (char_u *)"LF"}, // Alternative name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
937 {CAR, (char_u *)"CR"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
938 {CAR, (char_u *)"Return"}, // Alternative name
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
939 {CAR, (char_u *)"Enter"}, // Alternative name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
940 {K_BS, (char_u *)"BS"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
941 {K_BS, (char_u *)"BackSpace"}, // Alternative name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
942 {ESC, (char_u *)"Esc"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
943 {CSI, (char_u *)"CSI"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
944 {K_CSI, (char_u *)"xCSI"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
945 {'|', (char_u *)"Bar"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
946 {'\\', (char_u *)"Bslash"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
947 {K_DEL, (char_u *)"Del"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
948 {K_DEL, (char_u *)"Delete"}, // Alternative name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
949 {K_KDEL, (char_u *)"kDel"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
950 {K_UP, (char_u *)"Up"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
951 {K_DOWN, (char_u *)"Down"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
952 {K_LEFT, (char_u *)"Left"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
953 {K_RIGHT, (char_u *)"Right"},
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
954 {K_XUP, (char_u *)"xUp"},
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
955 {K_XDOWN, (char_u *)"xDown"},
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
956 {K_XLEFT, (char_u *)"xLeft"},
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
957 {K_XRIGHT, (char_u *)"xRight"},
10640
27be410d6d29 patch 8.0.0210: no support for bracketed paste
Christian Brabandt <cb@256bit.org>
parents: 10549
diff changeset
958 {K_PS, (char_u *)"PasteStart"},
27be410d6d29 patch 8.0.0210: no support for bracketed paste
Christian Brabandt <cb@256bit.org>
parents: 10549
diff changeset
959 {K_PE, (char_u *)"PasteEnd"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
960
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
961 {K_F1, (char_u *)"F1"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
962 {K_F2, (char_u *)"F2"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
963 {K_F3, (char_u *)"F3"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
964 {K_F4, (char_u *)"F4"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
965 {K_F5, (char_u *)"F5"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
966 {K_F6, (char_u *)"F6"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
967 {K_F7, (char_u *)"F7"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
968 {K_F8, (char_u *)"F8"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
969 {K_F9, (char_u *)"F9"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
970 {K_F10, (char_u *)"F10"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
971
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
972 {K_F11, (char_u *)"F11"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
973 {K_F12, (char_u *)"F12"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
974 {K_F13, (char_u *)"F13"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
975 {K_F14, (char_u *)"F14"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
976 {K_F15, (char_u *)"F15"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
977 {K_F16, (char_u *)"F16"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
978 {K_F17, (char_u *)"F17"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
979 {K_F18, (char_u *)"F18"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
980 {K_F19, (char_u *)"F19"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
981 {K_F20, (char_u *)"F20"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
982
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
983 {K_F21, (char_u *)"F21"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
984 {K_F22, (char_u *)"F22"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
985 {K_F23, (char_u *)"F23"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
986 {K_F24, (char_u *)"F24"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
987 {K_F25, (char_u *)"F25"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
988 {K_F26, (char_u *)"F26"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
989 {K_F27, (char_u *)"F27"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
990 {K_F28, (char_u *)"F28"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
991 {K_F29, (char_u *)"F29"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
992 {K_F30, (char_u *)"F30"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
993
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
994 {K_F31, (char_u *)"F31"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
995 {K_F32, (char_u *)"F32"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
996 {K_F33, (char_u *)"F33"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
997 {K_F34, (char_u *)"F34"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
998 {K_F35, (char_u *)"F35"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
999 {K_F36, (char_u *)"F36"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1000 {K_F37, (char_u *)"F37"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1001
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1002 {K_XF1, (char_u *)"xF1"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1003 {K_XF2, (char_u *)"xF2"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1004 {K_XF3, (char_u *)"xF3"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1005 {K_XF4, (char_u *)"xF4"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1006
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1007 {K_HELP, (char_u *)"Help"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1008 {K_UNDO, (char_u *)"Undo"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1009 {K_INS, (char_u *)"Insert"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1010 {K_INS, (char_u *)"Ins"}, // Alternative name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1011 {K_KINS, (char_u *)"kInsert"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1012 {K_HOME, (char_u *)"Home"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1013 {K_KHOME, (char_u *)"kHome"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1014 {K_XHOME, (char_u *)"xHome"},
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
1015 {K_ZHOME, (char_u *)"zHome"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1016 {K_END, (char_u *)"End"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1017 {K_KEND, (char_u *)"kEnd"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1018 {K_XEND, (char_u *)"xEnd"},
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
1019 {K_ZEND, (char_u *)"zEnd"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1020 {K_PAGEUP, (char_u *)"PageUp"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1021 {K_PAGEDOWN, (char_u *)"PageDown"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1022 {K_KPAGEUP, (char_u *)"kPageUp"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1023 {K_KPAGEDOWN, (char_u *)"kPageDown"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1024
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1025 {K_KPLUS, (char_u *)"kPlus"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1026 {K_KMINUS, (char_u *)"kMinus"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1027 {K_KDIVIDE, (char_u *)"kDivide"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1028 {K_KMULTIPLY, (char_u *)"kMultiply"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1029 {K_KENTER, (char_u *)"kEnter"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1030 {K_KPOINT, (char_u *)"kPoint"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1031
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1032 {K_K0, (char_u *)"k0"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1033 {K_K1, (char_u *)"k1"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1034 {K_K2, (char_u *)"k2"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1035 {K_K3, (char_u *)"k3"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1036 {K_K4, (char_u *)"k4"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1037 {K_K5, (char_u *)"k5"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1038 {K_K6, (char_u *)"k6"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1039 {K_K7, (char_u *)"k7"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1040 {K_K8, (char_u *)"k8"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1041 {K_K9, (char_u *)"k9"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1042
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1043 {'<', (char_u *)"lt"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1044
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1045 {K_MOUSE, (char_u *)"Mouse"},
3273
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1046 #ifdef FEAT_MOUSE_NET
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1047 {K_NETTERM_MOUSE, (char_u *)"NetMouse"},
3273
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1048 #endif
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1049 #ifdef FEAT_MOUSE_DEC
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1050 {K_DEC_MOUSE, (char_u *)"DecMouse"},
3273
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1051 #endif
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1052 #ifdef FEAT_MOUSE_JSB
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1053 {K_JSBTERM_MOUSE, (char_u *)"JsbMouse"},
3273
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1054 #endif
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1055 #ifdef FEAT_MOUSE_PTERM
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1056 {K_PTERM_MOUSE, (char_u *)"PtermMouse"},
3273
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1057 #endif
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1058 #ifdef FEAT_MOUSE_URXVT
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1059 {K_URXVT_MOUSE, (char_u *)"UrxvtMouse"},
c75a8d2404bd updated for version 7.3.405
Bram Moolenaar <bram@vim.org>
parents: 3263
diff changeset
1060 #endif
3746
44038a9777aa updated for version 7.3.632
Bram Moolenaar <bram@vim.org>
parents: 3744
diff changeset
1061 {K_SGR_MOUSE, (char_u *)"SgrMouse"},
24008
51cccde1b1aa patch 8.2.2546: typo in mouse key name
Bram Moolenaar <Bram@vim.org>
parents: 23683
diff changeset
1062 {K_SGR_MOUSERELEASE, (char_u *)"SgrMouseRelease"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1063 {K_LEFTMOUSE, (char_u *)"LeftMouse"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1064 {K_LEFTMOUSE_NM, (char_u *)"LeftMouseNM"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1065 {K_LEFTDRAG, (char_u *)"LeftDrag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1066 {K_LEFTRELEASE, (char_u *)"LeftRelease"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1067 {K_LEFTRELEASE_NM, (char_u *)"LeftReleaseNM"},
12865
ebb4f6c93598 patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents: 12798
diff changeset
1068 {K_MOUSEMOVE, (char_u *)"MouseMove"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1069 {K_MIDDLEMOUSE, (char_u *)"MiddleMouse"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1070 {K_MIDDLEDRAG, (char_u *)"MiddleDrag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1071 {K_MIDDLERELEASE, (char_u *)"MiddleRelease"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1072 {K_RIGHTMOUSE, (char_u *)"RightMouse"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1073 {K_RIGHTDRAG, (char_u *)"RightDrag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1074 {K_RIGHTRELEASE, (char_u *)"RightRelease"},
2409
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2363
diff changeset
1075 {K_MOUSEDOWN, (char_u *)"ScrollWheelUp"},
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2363
diff changeset
1076 {K_MOUSEUP, (char_u *)"ScrollWheelDown"},
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2363
diff changeset
1077 {K_MOUSELEFT, (char_u *)"ScrollWheelRight"},
0ca06a92adfb Add support for horizontal scroll wheel. (Bjorn Winckler)
Bram Moolenaar <bram@vim.org>
parents: 2363
diff changeset
1078 {K_MOUSERIGHT, (char_u *)"ScrollWheelLeft"},
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1079 {K_MOUSEDOWN, (char_u *)"MouseDown"}, // OBSOLETE: Use
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1080 {K_MOUSEUP, (char_u *)"MouseUp"}, // ScrollWheelXXX instead
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1081 {K_X1MOUSE, (char_u *)"X1Mouse"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1082 {K_X1DRAG, (char_u *)"X1Drag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1083 {K_X1RELEASE, (char_u *)"X1Release"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1084 {K_X2MOUSE, (char_u *)"X2Mouse"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1085 {K_X2DRAG, (char_u *)"X2Drag"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1086 {K_X2RELEASE, (char_u *)"X2Release"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1087 {K_DROP, (char_u *)"Drop"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1088 {K_ZERO, (char_u *)"Nul"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1089 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1090 {K_SNR, (char_u *)"SNR"},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1091 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1092 {K_PLUG, (char_u *)"Plug"},
6245
96761b6789f6 updated for version 7.4.457
Bram Moolenaar <bram@vim.org>
parents: 6222
diff changeset
1093 {K_CURSORHOLD, (char_u *)"CursorHold"},
16594
6f52e82d9d4e patch 8.1.1300: in a terminal 'ballooneval' does not work right away
Bram Moolenaar <Bram@vim.org>
parents: 16511
diff changeset
1094 {K_IGNORE, (char_u *)"Ignore"},
22862
6d50182e7e24 patch 8.2.1978: making a mapping work in all modes is complicated
Bram Moolenaar <Bram@vim.org>
parents: 22732
diff changeset
1095 {K_COMMAND, (char_u *)"Cmd"},
27140
a9eeb18e749c patch 8.2.4099: Vim9: cannot use Vim9 syntax in mapping
Bram Moolenaar <Bram@vim.org>
parents: 27018
diff changeset
1096 {K_SCRIPT_COMMAND, (char_u *)"ScriptCmd"},
23683
c6b9df4c442d patch 8.2.2383: focus escape sequences are not named
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
1097 {K_FOCUSGAINED, (char_u *)"FocusGained"},
c6b9df4c442d patch 8.2.2383: focus escape sequences are not named
Bram Moolenaar <Bram@vim.org>
parents: 22862
diff changeset
1098 {K_FOCUSLOST, (char_u *)"FocusLost"},
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1099 {0, NULL}
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1100 // NOTE: When adding a long name update MAX_KEY_NAME_LEN.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1101 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1102
24768
7334bf933510 patch 8.2.2922: computing array length is done in various ways
Bram Moolenaar <Bram@vim.org>
parents: 24375
diff changeset
1103 #define KEY_NAMES_TABLE_LEN ARRAY_LENGTH(key_names_table)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1104
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1105 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1106 * Return the modifier mask bit (MOD_MASK_*) which corresponds to the given
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1107 * modifier name ('S' for Shift, 'C' for Ctrl etc).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1108 */
17789
0f7ae8010787 patch 8.1.1891: functions used in one file are global
Bram Moolenaar <Bram@vim.org>
parents: 17781
diff changeset
1109 static int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1110 name_to_mod_mask(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1111 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1112 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1113
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1114 c = TOUPPER_ASC(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1115 for (i = 0; mod_mask_table[i].mod_mask != 0; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1116 if (c == mod_mask_table[i].name)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1117 return mod_mask_table[i].mod_flag;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1118 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1119 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1120
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1121 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1122 * Check if if there is a special key code for "key" that includes the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1123 * modifiers specified.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1124 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1125 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1126 simplify_key(int key, int *modifiers)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1127 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1128 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1129 int key0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1130 int key1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1131
34269
22be86ed7545 patch 9.1.0073: Looping over modifier_keys_table unnecessarily
Christian Brabandt <cb@256bit.org>
parents: 34219
diff changeset
1132 if (!(*modifiers & (MOD_MASK_SHIFT | MOD_MASK_CTRL)))
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1133 return key;
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1134
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1135 // TAB is a special case
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1136 if (key == TAB && (*modifiers & MOD_MASK_SHIFT))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1137 {
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1138 *modifiers &= ~MOD_MASK_SHIFT;
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1139 return K_S_TAB;
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1140 }
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1141 key0 = KEY2TERMCAP0(key);
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1142 key1 = KEY2TERMCAP1(key);
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1143 for (i = 0; modifier_keys_table[i] != NUL; i += MOD_KEYS_ENTRY_SIZE)
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1144 {
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1145 if (key0 == modifier_keys_table[i + 3]
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1146 && key1 == modifier_keys_table[i + 4]
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1147 && (*modifiers & modifier_keys_table[i]))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1148 {
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1149 *modifiers &= ~modifier_keys_table[i];
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1150 return TERMCAP2KEY(modifier_keys_table[i + 1],
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1151 modifier_keys_table[i + 2]);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1152 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1153 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1154 return key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1155 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1156
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1157 /*
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1158 * Change <xHome> to <Home>, <xUp> to <Up>, etc.
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1159 */
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1160 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1161 handle_x_keys(int key)
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1162 {
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1163 switch (key)
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1164 {
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1165 case K_XUP: return K_UP;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1166 case K_XDOWN: return K_DOWN;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1167 case K_XLEFT: return K_LEFT;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1168 case K_XRIGHT: return K_RIGHT;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1169 case K_XHOME: return K_HOME;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
1170 case K_ZHOME: return K_HOME;
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1171 case K_XEND: return K_END;
230
9281a51ca7a2 updated for version 7.0064
vimboss
parents: 227
diff changeset
1172 case K_ZEND: return K_END;
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1173 case K_XF1: return K_F1;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1174 case K_XF2: return K_F2;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1175 case K_XF3: return K_F3;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1176 case K_XF4: return K_F4;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1177 case K_S_XF1: return K_S_F1;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1178 case K_S_XF2: return K_S_F2;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1179 case K_S_XF3: return K_S_F3;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1180 case K_S_XF4: return K_S_F4;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1181 }
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1182 return key;
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1183 }
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1184
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1185 /*
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1186 * Return a string which contains the name of the given key when the given
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1187 * modifiers are down.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1188 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1189 char_u *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1190 get_special_key_name(int c, int modifiers)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1191 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1192 static char_u string[MAX_KEY_NAME_LEN + 1];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1194 int i, idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1195 int table_idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1196 char_u *s;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1197
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1198 string[0] = '<';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1199 idx = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1200
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1201 // Key that stands for a normal character.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1202 if (IS_SPECIAL(c) && KEY2TERMCAP0(c) == KS_KEY)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1203 c = KEY2TERMCAP1(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1204
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1205 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1206 * Translate shifted special keys into unshifted keys and set modifier.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1207 * Same for CTRL and ALT modifiers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1208 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1209 if (IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1210 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1211 for (i = 0; modifier_keys_table[i] != 0; i += MOD_KEYS_ENTRY_SIZE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1212 if ( KEY2TERMCAP0(c) == (int)modifier_keys_table[i + 1]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1213 && (int)KEY2TERMCAP1(c) == (int)modifier_keys_table[i + 2])
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1214 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1215 modifiers |= modifier_keys_table[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1216 c = TERMCAP2KEY(modifier_keys_table[i + 3],
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1217 modifier_keys_table[i + 4]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1218 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1219 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1220 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1221
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1222 // try to find the key in the special key table
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1223 table_idx = find_special_key_in_table(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1224
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1225 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1226 * When not a known special key, and not a printable character, try to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1227 * extract modifiers.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1228 */
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
1229 if (c > 0 && (*mb_char2len)(c) == 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1230 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1231 if (table_idx < 0
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1232 && (!vim_isprintc(c) || (c & 0x7f) == ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1233 && (c & 0x80))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1234 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1235 c &= 0x7f;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1236 modifiers |= MOD_MASK_ALT;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1237 // try again, to find the un-alted key in the special key table
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1238 table_idx = find_special_key_in_table(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1239 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1240 if (table_idx < 0 && !vim_isprintc(c) && c < ' ')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1241 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1242 c += '@';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1243 modifiers |= MOD_MASK_CTRL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1244 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1245 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1246
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1247 // translate the modifier into a string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1248 for (i = 0; mod_mask_table[i].name != 'A'; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1249 if ((modifiers & mod_mask_table[i].mod_mask)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1250 == mod_mask_table[i].mod_flag)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1251 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1252 string[idx++] = mod_mask_table[i].name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1253 string[idx++] = (char_u)'-';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1254 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1255
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1256 if (table_idx < 0) // unknown special key, may output t_xx
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1257 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1258 if (IS_SPECIAL(c))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1260 string[idx++] = 't';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1261 string[idx++] = '_';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1262 string[idx++] = KEY2TERMCAP0(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1263 string[idx++] = KEY2TERMCAP1(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1264 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1265 // Not a special key, only modifiers, output directly
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1266 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1267 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1268 if (has_mbyte && (*mb_char2len)(c) > 1)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1269 idx += (*mb_char2bytes)(c, string + idx);
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
1270 else if (vim_isprintc(c))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1271 string[idx++] = c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1272 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1273 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1274 s = transchar(c);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1275 while (*s)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1276 string[idx++] = *s++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1277 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1278 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1279 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1280 else // use name of special key
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1281 {
10644
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1282 size_t len = STRLEN(key_names_table[table_idx].name);
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1283
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1284 if (len + idx + 2 <= MAX_KEY_NAME_LEN)
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1285 {
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1286 STRCPY(string + idx, key_names_table[table_idx].name);
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1287 idx += (int)len;
2025bec9175f patch 8.0.0212: buffer for key name may be too small
Christian Brabandt <cb@256bit.org>
parents: 10640
diff changeset
1288 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1289 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1290 string[idx++] = '>';
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1291 string[idx] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1292 return string;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1293 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1294
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1295 /*
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1296 * Try translating a <> name at "(*srcp)[]" to "dst[]".
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1297 * Return the number of characters added to "dst[]", zero for no match.
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1298 * If there is a match, "srcp" is advanced to after the <> name.
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1299 * "dst[]" must be big enough to hold the result (up to six characters)!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1300 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1301 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1302 trans_special(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1303 char_u **srcp,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1304 char_u *dst,
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1305 int flags, // FSK_ values
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1306 int escape_ks, // escape K_SPECIAL bytes in the character
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1307 int *did_simplify) // FSK_SIMPLIFY and found <C-H> or <A-x>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1308 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1309 int modifiers = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1310 int key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1311
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1312 key = find_special_key(srcp, &modifiers, flags, did_simplify);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1313 if (key == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1314 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1315
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1316 return special_to_buf(key, modifiers, escape_ks, dst);
16880
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1317 }
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1318
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1319 /*
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1320 * Put the character sequence for "key" with "modifiers" into "dst" and return
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1321 * the resulting length.
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1322 * When "escape_ks" is TRUE escape K_SPECIAL bytes in the character.
16880
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1323 * The sequence is not NUL terminated.
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1324 * This is how characters in a string are encoded.
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1325 */
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1326 int
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1327 special_to_buf(int key, int modifiers, int escape_ks, char_u *dst)
16880
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1328 {
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1329 int dlen = 0;
998603a243d7 patch 8.1.1441: popup window filter not yet implemented
Bram Moolenaar <Bram@vim.org>
parents: 16876
diff changeset
1330
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1331 // Put the appropriate modifier in a string
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1332 if (modifiers != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1333 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1334 dst[dlen++] = K_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1335 dst[dlen++] = KS_MODIFIER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1336 dst[dlen++] = modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1337 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1339 if (IS_SPECIAL(key))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1340 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1341 dst[dlen++] = K_SPECIAL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1342 dst[dlen++] = KEY2TERMCAP0(key);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1343 dst[dlen++] = KEY2TERMCAP1(key);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1344 }
28668
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1345 else if (escape_ks)
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1346 dlen = (int)(add_char2buf(key, dst + dlen) - dst);
53c608c7ea9e patch 8.2.4858: K_SPECIAL may be escaped twice
Bram Moolenaar <Bram@vim.org>
parents: 28610
diff changeset
1347 else if (has_mbyte)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1348 dlen += (*mb_char2bytes)(key, dst + dlen);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1349 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1350 dst[dlen++] = key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1351
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1352 return dlen;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1353 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1354
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1355 /*
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1356 * Try translating a <> name at "(*srcp)[]", return the key and put modifiers
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1357 * in "modp".
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1358 * "srcp" is advanced to after the <> name.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1359 * returns 0 if there is no match.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1360 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1361 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1362 find_special_key(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1363 char_u **srcp,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1364 int *modp,
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1365 int flags, // FSK_ values
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1366 int *did_simplify) // found <C-H> or <A-x>
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1367 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1368 char_u *last_dash;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1369 char_u *end_of_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1370 char_u *src;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1371 char_u *bp;
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1372 int in_string = flags & FSK_IN_STRING;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1373 int modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1374 int bit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1375 int key;
9389
32e34e574716 commit https://github.com/vim/vim/commit/22fcfad29276bd5f317faf516637dcd491b96a12
Christian Brabandt <cb@256bit.org>
parents: 9387
diff changeset
1376 uvarnumber_T n;
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1377 int l;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1378
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1379 src = *srcp;
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1380 if (src[0] != '<')
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1381 return 0;
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1382 if (src[1] == '*') // <*xxx>: do not simplify
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1383 ++src;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1384
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1385 // Find end of modifier list
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1386 last_dash = src;
24375
fe4b6fc7149c patch 8.2.2728: special key names don't work if 'isident' is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24188
diff changeset
1387 for (bp = src + 1; *bp == '-' || vim_isNormalIDc(*bp); bp++)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1388 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1389 if (*bp == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1390 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1391 last_dash = bp;
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1392 if (bp[1] != NUL)
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1393 {
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1394 if (has_mbyte)
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1395 l = mb_ptr2len(bp + 1);
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1396 else
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1397 l = 1;
17720
844f470532b6 patch 8.1.1857: cannot use modifier with multi-byte character
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
1398 // Anything accepted, like <C-?>.
844f470532b6 patch 8.1.1857: cannot use modifier with multi-byte character
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
1399 // <C-"> or <M-"> are not special in strings as " is
844f470532b6 patch 8.1.1857: cannot use modifier with multi-byte character
Bram Moolenaar <Bram@vim.org>
parents: 17708
diff changeset
1400 // the string delimiter. With a backslash it works: <M-\">
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1401 if (!(in_string && bp[1] == '"') && bp[l + 1] == '>')
9373
b88c573d8aa4 commit https://github.com/vim/vim/commit/1d90a5a5af84250e226f8a9121e771f7b72aa894
Christian Brabandt <cb@256bit.org>
parents: 9347
diff changeset
1402 bp += l;
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1403 else if (in_string && bp[1] == '\\' && bp[2] == '"'
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1404 && bp[3] == '>')
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1405 bp += 2;
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1406 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1407 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1408 if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1409 bp += 3; // skip t_xx, xx may be '-' or '>'
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1410 else if (STRNICMP(bp, "char-", 5) == 0)
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1411 {
32098
39f4126d2a0d patch 9.0.1380: CTRL-X on 2**64 subtracts two
Bram Moolenaar <Bram@vim.org>
parents: 31940
diff changeset
1412 vim_str2nr(bp + 5, NULL, &l, STR2NR_ALL, NULL, NULL, 0, TRUE, NULL);
16706
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1413 if (l == 0)
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1414 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26602
diff changeset
1415 emsg(_(e_invalid_argument));
16706
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1416 return 0;
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1417 }
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1418 bp += l + 5;
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1419 break;
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1420 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1421 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1422
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1423 if (*bp == '>') // found matching '>'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1424 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1425 end_of_name = bp + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1426
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1427 // Which modifiers are given?
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1428 modifiers = 0x0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1429 for (bp = src + 1; bp < last_dash; bp++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1430 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1431 if (*bp != '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1432 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1433 bit = name_to_mod_mask(*bp);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1434 if (bit == 0x0)
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1435 break; // Illegal modifier name
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1436 modifiers |= bit;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1437 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1438 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1439
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1440 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1441 * Legal modifier name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1442 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1443 if (bp >= last_dash)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1444 {
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1445 if (STRNICMP(last_dash + 1, "char-", 5) == 0
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1446 && VIM_ISDIGIT(last_dash[6]))
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1447 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1448 // <Char-123> or <Char-033> or <Char-0x33>
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1449 vim_str2nr(last_dash + 6, NULL, &l, STR2NR_ALL, NULL,
32098
39f4126d2a0d patch 9.0.1380: CTRL-X on 2**64 subtracts two
Bram Moolenaar <Bram@vim.org>
parents: 31940
diff changeset
1450 &n, 0, TRUE, NULL);
16706
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1451 if (l == 0)
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1452 {
26865
bce848ec8b1b patch 8.2.3961: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26602
diff changeset
1453 emsg(_(e_invalid_argument));
16706
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1454 return 0;
77bcb5055fec patch 8.1.1355: obvious mistakes are accepted as valid expressions
Bram Moolenaar <Bram@vim.org>
parents: 16606
diff changeset
1455 }
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1456 key = (int)n;
3024
27d43855b723 updated for version 7.3.284
Bram Moolenaar <bram@vim.org>
parents: 2984
diff changeset
1457 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1458 else
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1459 {
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1460 int off = 1;
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1461
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1462 // Modifier with single letter, or special key name.
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1463 if (in_string && last_dash[1] == '\\' && last_dash[2] == '"')
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1464 off = 2;
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1465 if (has_mbyte)
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1466 l = mb_ptr2len(last_dash + off);
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1467 else
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1468 l = 1;
20627
8bce783af0cb patch 8.2.0867: using {xxx} for encoding a modifier is not nice
Bram Moolenaar <Bram@vim.org>
parents: 20603
diff changeset
1469 if (modifiers != 0 && last_dash[l + off] == '>')
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1470 key = PTR2CHAR(last_dash + off);
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1471 else
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1472 {
9869
989d44d35a66 commit https://github.com/vim/vim/commit/35a4cfa200917dd171b1fff3cd5b6cee9add673d
Christian Brabandt <cb@256bit.org>
parents: 9723
diff changeset
1473 key = get_special_key_code(last_dash + off);
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1474 if (!(flags & FSK_KEEP_X_KEY))
3026
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1475 key = handle_x_keys(key);
6018c815e120 updated for version 7.3.285
Bram Moolenaar <bram@vim.org>
parents: 3024
diff changeset
1476 }
180
7e70fc748752 updated for version 7.0056
vimboss
parents: 179
diff changeset
1477 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1478
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1479 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1480 * get_special_key_code() may return NUL for invalid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1481 * special key name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1482 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1483 if (key != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1484 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1485 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1486 * Only use a modifier when there is no special key code that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1487 * includes the modifier.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1488 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1489 key = simplify_key(key, &modifiers);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1490
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1491 if ((flags & FSK_KEYCODE) == 0)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1492 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1493 // don't want keycode, use single byte code
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1494 if (key == K_BS)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1495 key = BS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1496 else if (key == K_DEL || key == K_KDEL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1497 key = DEL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1498 }
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1499 else if (key == 27
31734
59c474f6715d patch 9.0.1199: crash when using kitty and using a mapping with <Esc>
Bram Moolenaar <Bram@vim.org>
parents: 31728
diff changeset
1500 && (flags & FSK_FROM_PART) != 0
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1501 && (kitty_protocol_state == KKPS_ENABLED
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1502 || kitty_protocol_state == KKPS_DISABLED))
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1503 {
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1504 // Using the Kitty key protocol, which uses K_ESC for an
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1505 // Esc character. For the simplified keys use the Esc
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1506 // character and set did_simplify, then in the
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1507 // non-simplified keys use K_ESC.
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1508 if ((flags & FSK_SIMPLIFY) != 0)
31734
59c474f6715d patch 9.0.1199: crash when using kitty and using a mapping with <Esc>
Bram Moolenaar <Bram@vim.org>
parents: 31728
diff changeset
1509 {
59c474f6715d patch 9.0.1199: crash when using kitty and using a mapping with <Esc>
Bram Moolenaar <Bram@vim.org>
parents: 31728
diff changeset
1510 if (did_simplify != NULL)
59c474f6715d patch 9.0.1199: crash when using kitty and using a mapping with <Esc>
Bram Moolenaar <Bram@vim.org>
parents: 31728
diff changeset
1511 *did_simplify = TRUE;
59c474f6715d patch 9.0.1199: crash when using kitty and using a mapping with <Esc>
Bram Moolenaar <Bram@vim.org>
parents: 31728
diff changeset
1512 }
31722
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1513 else
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1514 key = K_ESC;
6fa4f94aca5a patch 9.0.1193: cannot map <Esc> when using the Kitty key protocol
Bram Moolenaar <Bram@vim.org>
parents: 31156
diff changeset
1515 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1516
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1517 // Normal Key with modifier: Try to make a single byte code.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1518 if (!IS_SPECIAL(key))
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1519 key = extract_modifiers(key, &modifiers,
20603
c2570baa2e4c patch 8.2.0855: GUI tests fail because the test doesn't use a modifier
Bram Moolenaar <Bram@vim.org>
parents: 20392
diff changeset
1520 flags & FSK_SIMPLIFY, did_simplify);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1521
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1522 *modp = modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1523 *srcp = end_of_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1524 return key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1525 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1526 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1527 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1528 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1529 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1530
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1531
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1532 /*
22522
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1533 * Some keys are used with Ctrl without Shift and are still expected to be
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1534 * mapped as if Shift was pressed:
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1535 * CTRL-2 is CTRL-@
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1536 * CTRL-6 is CTRL-^
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1537 * CTRL-- is CTRL-_
31156
0ecb16d5f86f patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm
Bram Moolenaar <Bram@vim.org>
parents: 31133
diff changeset
1538 * Also, unless no_reduce_keys is set then <C-H> and <C-h> mean the same thing,
0ecb16d5f86f patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm
Bram Moolenaar <Bram@vim.org>
parents: 31133
diff changeset
1539 * use "H".
22522
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1540 * Returns the possibly adjusted key.
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1541 */
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1542 int
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1543 may_adjust_key_for_ctrl(int modifiers, int key)
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1544 {
31940
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1545 if ((modifiers & MOD_MASK_CTRL) == 0)
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1546 return key;
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1547
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1548 if (ASCII_ISALPHA(key))
22522
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1549 {
31156
0ecb16d5f86f patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm
Bram Moolenaar <Bram@vim.org>
parents: 31133
diff changeset
1550 #ifdef FEAT_TERMINAL
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1551 check_no_reduce_keys(); // may update the no_reduce_keys flag
31156
0ecb16d5f86f patch 9.0.0912: libvterm with modifyOtherKeys level 2 does not match xterm
Bram Moolenaar <Bram@vim.org>
parents: 31133
diff changeset
1552 #endif
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1553 return no_reduce_keys == 0 ? TOUPPER_ASC(key) : key;
22522
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1554 }
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1555 if (key == '2')
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1556 return '@';
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1557 if (key == '6')
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1558 return '^';
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1559 if (key == '-')
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
1560 return '_';
31940
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1561
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1562 // On a Belgian keyboard AltGr $ is ']', on other keyboards '$' can only be
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1563 // obtained with Shift. Assume that '$' without shift implies a Belgian
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1564 // keyboard, where CTRL-$ means CTRL-].
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1565 if (key == '$' && (modifiers & MOD_MASK_SHIFT) == 0)
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1566 return ']';
03188d05289a patch 9.0.1302: on a Belgian keyboard CTRL-] does not work
Bram Moolenaar <Bram@vim.org>
parents: 31734
diff changeset
1567
22522
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1568 return key;
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1569 }
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1570
6c7e4db139a3 patch 8.2.1809: mapping some keys with Ctrl does not work properly
Bram Moolenaar <Bram@vim.org>
parents: 22407
diff changeset
1571 /*
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1572 * Some keys already have Shift included, pass them as normal keys.
22526
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1573 * When Ctrl is also used <C-H> and <C-S-H> are different, but <C-S-{> should
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1574 * be <C-{>. Same for <C-S-}> and <C-S-|>.
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1575 * Also for <A-S-a> and <M-S-a>.
30235
2403a1b53826 patch 9.0.0453: on an AZERTY keyboard digit keys get the shift modifier
Bram Moolenaar <Bram@vim.org>
parents: 30205
diff changeset
1576 * This includes all printable ASCII characters except a-z.
2403a1b53826 patch 9.0.0453: on an AZERTY keyboard digit keys get the shift modifier
Bram Moolenaar <Bram@vim.org>
parents: 30205
diff changeset
1577 * Digits are included because with AZERTY the Shift key is used to get them.
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1578 */
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1579 int
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1580 may_remove_shift_modifier(int modifiers, int key)
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1581 {
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1582 if ((modifiers == MOD_MASK_SHIFT
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1583 || modifiers == (MOD_MASK_SHIFT | MOD_MASK_ALT)
34219
a0a4a774117b patch 9.1.0058: Cannot map Super Keys in GTK UI
Christian Brabandt <cb@256bit.org>
parents: 33000
diff changeset
1584 #ifdef FEAT_GUI_GTK
a0a4a774117b patch 9.1.0058: Cannot map Super Keys in GTK UI
Christian Brabandt <cb@256bit.org>
parents: 33000
diff changeset
1585 || modifiers == (MOD_MASK_SHIFT | MOD_MASK_CMD)
a0a4a774117b patch 9.1.0058: Cannot map Super Keys in GTK UI
Christian Brabandt <cb@256bit.org>
parents: 33000
diff changeset
1586 #endif
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1587 || modifiers == (MOD_MASK_SHIFT | MOD_MASK_META))
22407
c19acd92ee83 patch 8.2.1752: GTK GUI: cannot map alt-? with <A-?>
Bram Moolenaar <Bram@vim.org>
parents: 21745
diff changeset
1588 && ((key >= '!' && key <= '/')
c19acd92ee83 patch 8.2.1752: GTK GUI: cannot map alt-? with <A-?>
Bram Moolenaar <Bram@vim.org>
parents: 21745
diff changeset
1589 || (key >= ':' && key <= 'Z')
30235
2403a1b53826 patch 9.0.0453: on an AZERTY keyboard digit keys get the shift modifier
Bram Moolenaar <Bram@vim.org>
parents: 30205
diff changeset
1590 || vim_isdigit(key)
22407
c19acd92ee83 patch 8.2.1752: GTK GUI: cannot map alt-? with <A-?>
Bram Moolenaar <Bram@vim.org>
parents: 21745
diff changeset
1591 || (key >= '[' && key <= '`')
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1592 || (key >= '{' && key <= '~')))
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1593 return modifiers & ~MOD_MASK_SHIFT;
22526
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1594
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1595 if (modifiers == (MOD_MASK_SHIFT | MOD_MASK_CTRL)
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1596 && (key == '{' || key == '}' || key == '|'))
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1597 return modifiers & ~MOD_MASK_SHIFT;
6325ef9143bc patch 8.2.1811: mapping Ctrl-key does not work for '{', '}' and '|'
Bram Moolenaar <Bram@vim.org>
parents: 22522
diff changeset
1598
20935
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1599 return modifiers;
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1600 }
d64520bfafa0 patch 8.2.1019: mapping <M-S-a> does not work in the GUI
Bram Moolenaar <Bram@vim.org>
parents: 20927
diff changeset
1601
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1602 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1603 * Try to include modifiers in the key.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1604 * Changes "Shift-a" to 'A', "Alt-A" to 0xc0, etc.
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1605 * When "simplify" is FALSE don't do Ctrl and Alt.
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1606 * When "simplify" is TRUE and Ctrl or Alt is removed from modifiers set
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1607 * "did_simplify" when it's not NULL.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1608 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1609 int
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1610 extract_modifiers(int key, int *modp, int simplify, int *did_simplify)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1611 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1612 int modifiers = *modp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1613
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12672
diff changeset
1614 #ifdef MACOS_X
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1615 // Command-key really special, no fancynest
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1616 if (!(modifiers & MOD_MASK_CMD))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1617 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1618 if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1619 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1620 key = TOUPPER_ASC(key);
20927
9328feafbbf5 patch 8.2.1015: popup filter gets key with modifier prepended
Bram Moolenaar <Bram@vim.org>
parents: 20751
diff changeset
1621 // With <C-S-a> we keep the shift modifier.
9328feafbbf5 patch 8.2.1015: popup filter gets key with modifier prepended
Bram Moolenaar <Bram@vim.org>
parents: 20751
diff changeset
1622 // With <S-a>, <A-S-a> and <S-A> we don't keep the shift modifier.
9328feafbbf5 patch 8.2.1015: popup filter gets key with modifier prepended
Bram Moolenaar <Bram@vim.org>
parents: 20751
diff changeset
1623 if (simplify || modifiers == MOD_MASK_SHIFT
9328feafbbf5 patch 8.2.1015: popup filter gets key with modifier prepended
Bram Moolenaar <Bram@vim.org>
parents: 20751
diff changeset
1624 || modifiers == (MOD_MASK_SHIFT | MOD_MASK_ALT)
9328feafbbf5 patch 8.2.1015: popup filter gets key with modifier prepended
Bram Moolenaar <Bram@vim.org>
parents: 20751
diff changeset
1625 || modifiers == (MOD_MASK_SHIFT | MOD_MASK_META))
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1626 modifiers &= ~MOD_MASK_SHIFT;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1627 }
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1628
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1629 // <C-H> and <C-h> mean the same thing, always use "H"
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1630 if ((modifiers & MOD_MASK_CTRL) && ASCII_ISALPHA(key))
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1631 key = TOUPPER_ASC(key);
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1632
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1633 if (simplify && (modifiers & MOD_MASK_CTRL)
27490
fb4c30606b4a patch 8.2.4273: the EBCDIC support is outdated
Bram Moolenaar <Bram@vim.org>
parents: 27181
diff changeset
1634 && ((key >= '?' && key <= '_') || ASCII_ISALPHA(key)))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1635 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1636 key = Ctrl_chr(key);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1637 modifiers &= ~MOD_MASK_CTRL;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1638 // <C-@> is <Nul>
28610
ce202d2984a0 patch 8.2.4829: a key may be simplified to NUL
Bram Moolenaar <Bram@vim.org>
parents: 28169
diff changeset
1639 if (key == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1640 key = K_ZERO;
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1641 if (did_simplify != NULL)
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1642 *did_simplify = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1643 }
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1644
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12672
diff changeset
1645 #ifdef MACOS_X
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1646 // Command-key really special, no fancynest
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1647 if (!(modifiers & MOD_MASK_CMD))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1648 #endif
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1649 if (simplify && (modifiers & MOD_MASK_ALT) && key < 0x80
15597
536dd2bc5ac9 patch 8.1.0806: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents: 15555
diff changeset
1650 && !enc_dbcs) // avoid creating a lead byte
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1651 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1652 key |= 0x80;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1653 modifiers &= ~MOD_MASK_ALT; // remove the META modifier
18301
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1654 if (did_simplify != NULL)
506bf60a30a0 patch 8.1.2145: cannot map <C-H> when modifyOtherKeys is enabled
Bram Moolenaar <Bram@vim.org>
parents: 18291
diff changeset
1655 *did_simplify = TRUE;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1657
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1658 *modp = modifiers;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1659 return key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1660 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1662 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1663 * Try to find key "c" in the special key table.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1664 * Return the index when found, -1 when not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1665 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1666 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1667 find_special_key_in_table(int c)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1668 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1669 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1670
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1671 for (i = 0; key_names_table[i].name != NULL; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1672 if (c == key_names_table[i].key)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1673 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1674 if (key_names_table[i].name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1675 i = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1676 return i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1677 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1678
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1679 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1680 * Find the special key with the given name (the given string does not have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1681 * end with NUL, the name is assumed to end before the first non-idchar).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1682 * If the name starts with "t_" the next two characters are interpreted as a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1683 * termcap name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1684 * Return the key code, or 0 if not found.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1685 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1686 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1687 get_special_key_code(char_u *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1688 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1689 char_u *table_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1690 char_u string[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1691 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1692
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1693 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1694 * If it's <t_xx> we get the code for xx from the termcap
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1695 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1696 if (name[0] == 't' && name[1] == '_' && name[2] != NUL && name[3] != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1697 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1698 string[0] = name[2];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1699 string[1] = name[3];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1700 string[2] = NUL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1701 if (add_termcap_entry(string, FALSE) == OK)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1702 return TERMCAP2KEY(name[2], name[3]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1703 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1704 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1705 for (i = 0; key_names_table[i].name != NULL; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1706 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1707 table_name = key_names_table[i].name;
24375
fe4b6fc7149c patch 8.2.2728: special key names don't work if 'isident' is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24188
diff changeset
1708 for (j = 0; vim_isNormalIDc(name[j]) && table_name[j] != NUL; j++)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1709 if (TOLOWER_ASC(table_name[j]) != TOLOWER_ASC(name[j]))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1710 break;
24375
fe4b6fc7149c patch 8.2.2728: special key names don't work if 'isident' is cleared
Bram Moolenaar <Bram@vim.org>
parents: 24188
diff changeset
1711 if (!vim_isNormalIDc(name[j]) && table_name[j] == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1712 return key_names_table[i].key;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1713 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1714 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1715 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1716
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1717 char_u *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1718 get_key_name(int i)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1719 {
1881
6605dca2960f updated for version 7.2-178
vimboss
parents: 1863
diff changeset
1720 if (i >= (int)KEY_NAMES_TABLE_LEN)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1721 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1722 return key_names_table[i].name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1723 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1724
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1725 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1726 * Return the current end-of-line type: EOL_DOS, EOL_UNIX or EOL_MAC.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1727 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1728 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1729 get_fileformat(buf_T *buf)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1730 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1731 int c = *buf->b_p_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1732
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1733 if (buf->b_p_bin || c == 'u')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1734 return EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1735 if (c == 'm')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1736 return EOL_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1737 return EOL_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1738 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1739
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1740 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1741 * Like get_fileformat(), but override 'fileformat' with "p" for "++opt=val"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1742 * argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1743 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1744 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1745 get_fileformat_force(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1746 buf_T *buf,
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1747 exarg_T *eap) // can be NULL!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1748 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1749 int c;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1750
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1751 if (eap != NULL && eap->force_ff != 0)
13575
4df23d9bad47 patch 8.0.1660: the terminal API "drop" command doesn't support options
Christian Brabandt <cb@256bit.org>
parents: 13493
diff changeset
1752 c = eap->force_ff;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1753 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1754 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1755 if ((eap != NULL && eap->force_bin != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1756 ? (eap->force_bin == FORCE_BIN) : buf->b_p_bin)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1757 return EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1758 c = *buf->b_p_ff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1759 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1760 if (c == 'u')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1761 return EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1762 if (c == 'm')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1763 return EOL_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1764 return EOL_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1765 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1766
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1767 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1768 * Set the current end-of-line type to EOL_DOS, EOL_UNIX or EOL_MAC.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1769 * Sets both 'textmode' and 'fileformat'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1770 * Note: Does _not_ set global value of 'textmode'!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1771 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1772 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1773 set_fileformat(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1774 int t,
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1775 int opt_flags) // OPT_LOCAL and/or OPT_GLOBAL
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1776 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1777 char *p = NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1778
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1779 switch (t)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1780 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1781 case EOL_DOS:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1782 p = FF_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1783 curbuf->b_p_tx = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1784 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1785 case EOL_UNIX:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1786 p = FF_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1787 curbuf->b_p_tx = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1788 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1789 case EOL_MAC:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1790 p = FF_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1791 curbuf->b_p_tx = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1792 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1793 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1794 if (p != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1795 set_string_option_direct((char_u *)"ff", -1, (char_u *)p,
694
07d199fe02ed updated for version 7.0209
vimboss
parents: 681
diff changeset
1796 OPT_FREE | opt_flags, 0);
07d199fe02ed updated for version 7.0209
vimboss
parents: 681
diff changeset
1797
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1798 // This may cause the buffer to become (un)modified.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1799 check_status(curbuf);
673
513866ffe6af updated for version 7.0200
vimboss
parents: 671
diff changeset
1800 redraw_tabline = TRUE;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1801 need_maketitle = TRUE; // set window title later
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1802 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1803
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1804 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1805 * Return the default fileformat from 'fileformats'.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1806 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1807 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1808 default_fileformat(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1809 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1810 switch (*p_ffs)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1811 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1812 case 'm': return EOL_MAC;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1813 case 'd': return EOL_DOS;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1814 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1815 return EOL_UNIX;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1816 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1817
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1818 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1819 * Call shell. Calls mch_call_shell, with 'shellxquote' added.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1820 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1821 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1822 call_shell(char_u *cmd, int opt)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1823 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1824 char_u *ncmd;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1825 int retval;
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1826 #ifdef FEAT_PROFILE
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1827 proftime_T wait_time;
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1828 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1829
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1830 if (p_verbose > 3)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1831 {
293
f811be6fa9b5 updated for version 7.0077
vimboss
parents: 273
diff changeset
1832 verbose_enter();
20380
79c870b68cf3 patch 8.2.0745: crash on exit when not all popups are closed
Bram Moolenaar <Bram@vim.org>
parents: 20033
diff changeset
1833 smsg(_("Calling shell to execute: \"%s\""), cmd == NULL ? p_sh : cmd);
30519
4a88061200c2 patch 9.0.0595: extra newline in messages after a verbose shell message
Bram Moolenaar <Bram@vim.org>
parents: 30235
diff changeset
1834 msg_putchar_attr('\n', 0);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1835 cursor_on();
293
f811be6fa9b5 updated for version 7.0077
vimboss
parents: 273
diff changeset
1836 verbose_leave();
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1837 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1838
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1839 #ifdef FEAT_PROFILE
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 782
diff changeset
1840 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1841 prof_child_enter(&wait_time);
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1842 #endif
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1843
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1844 if (*p_sh == NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1845 {
26602
fac6673086df patch 8.2.3830: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26336
diff changeset
1846 emsg(_(e_shell_option_is_empty));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1847 retval = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1848 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1849 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1850 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1851 #ifdef FEAT_GUI_MSWIN
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1852 // Don't hide the pointer while executing a shell command.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1853 gui_mch_mousehide(FALSE);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1854 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1855 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1856 ++hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1857 #endif
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1858 // The external command may update a tags file, clear cached tags.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1859 tag_freematch();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1860
17028
70933f7b5de4 patch 8.1.1514: MS-Windows: wrong shell command with ! in 'guioptions'
Bram Moolenaar <Bram@vim.org>
parents: 17000
diff changeset
1861 if (cmd == NULL || *p_sxq == NUL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1862 retval = mch_call_shell(cmd, opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1863 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1864 {
3359
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1865 char_u *ecmd = cmd;
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1866
18195
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1867 if (*p_sxe != NUL && *p_sxq == '(')
3359
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1868 {
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1869 ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1870 if (ecmd == NULL)
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1871 ecmd = cmd;
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1872 }
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16706
diff changeset
1873 ncmd = alloc(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1874 if (ncmd != NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1875 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1876 STRCPY(ncmd, p_sxq);
3359
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1877 STRCAT(ncmd, ecmd);
18195
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1878 // When 'shellxquote' is ( append ).
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1879 // When 'shellxquote' is "( append )".
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1880 STRCAT(ncmd, *p_sxq == '(' ? (char_u *)")"
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1881 : *p_sxq == '"' && *(p_sxq+1) == '(' ? (char_u *)")\""
a81f0c936112 patch 8.1.2092: MS-Windows: redirect in system() does not work
Bram Moolenaar <Bram@vim.org>
parents: 18135
diff changeset
1882 : p_sxq);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1883 retval = mch_call_shell(ncmd, opt);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1884 vim_free(ncmd);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1885 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1886 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1887 retval = -1;
3359
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1888 if (ecmd != cmd)
20ca2e05ae20 updated for version 7.3.446
Bram Moolenaar <bram@vim.org>
parents: 3357
diff changeset
1889 vim_free(ecmd);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1890 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1891 #ifdef FEAT_GUI
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1892 --hold_gui_events;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1893 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1894 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1895 * Check the window size, in case it changed while executing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1896 * external command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1897 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1898 shell_resized_check();
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1899 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1900
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1901 #ifdef FEAT_EVAL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1902 set_vim_var_nr(VV_SHELL_ERROR, (long)retval);
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1903 # ifdef FEAT_PROFILE
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 782
diff changeset
1904 if (do_profiling == PROF_YES)
170
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1905 prof_child_exit(&wait_time);
8c60f65311fa updated for version 7.0052
vimboss
parents: 119
diff changeset
1906 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1907 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1908
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1909 return retval;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1910 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1911
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1912 /*
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1913 * MODE_VISUAL, MODE_SELECT and MODE_OP_PENDING State are never set, they are
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1914 * equal to MODE_NORMAL State with a condition. This function returns the real
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1915 * State.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1916 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1917 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1918 get_real_state(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1919 {
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1920 if (State & MODE_NORMAL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1921 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1922 if (VIsual_active)
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 782
diff changeset
1923 {
b29b006d52d2 updated for version 7.0230
vimboss
parents: 782
diff changeset
1924 if (VIsual_select)
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1925 return MODE_SELECT;
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1926 return MODE_VISUAL;
789
b29b006d52d2 updated for version 7.0230
vimboss
parents: 782
diff changeset
1927 }
5735
50dbef5e774a updated for version 7.4.212
Bram Moolenaar <bram@vim.org>
parents: 5690
diff changeset
1928 else if (finish_op)
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
1929 return MODE_OP_PENDING;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1930 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1931 return State;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1932 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1933
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1934 /*
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1935 * Return TRUE if "p" points to just after a path separator.
2939
3d96ddbeb3b0 updated for version 7.3.242
Bram Moolenaar <bram@vim.org>
parents: 2935
diff changeset
1936 * Takes care of multi-byte characters.
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1937 * "b" must point to the start of the file name
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1938 */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1939 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1940 after_pathsep(char_u *b, char_u *p)
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1941 {
2939
3d96ddbeb3b0 updated for version 7.3.242
Bram Moolenaar <bram@vim.org>
parents: 2935
diff changeset
1942 return p > b && vim_ispathsep(p[-1])
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1943 && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1944 }
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1945
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1946 /*
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1947 * Return TRUE if file names "f1" and "f2" are in the same directory.
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1948 * "f1" may be a short name, "f2" must be a full path.
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1949 */
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1950 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
1951 same_directory(char_u *f1, char_u *f2)
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1952 {
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1953 char_u ffname[MAXPATHL];
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1954 char_u *t1;
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1955 char_u *t2;
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1956
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
1957 // safety check
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1958 if (f1 == NULL || f2 == NULL)
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1959 return FALSE;
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1960
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1961 (void)vim_FullName(f1, ffname, MAXPATHL, FALSE);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1962 t1 = gettail_sep(ffname);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1963 t2 = gettail_sep(f2);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1964 return (t1 - ffname == t2 - f2
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1965 && pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0);
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1966 }
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1967
14220
96e4c6b26998 patch 8.1.0127: build failure when disabling the session feature
Christian Brabandt <cb@256bit.org>
parents: 13750
diff changeset
1968 #if defined(FEAT_SESSION) || defined(FEAT_AUTOCHDIR) \
21745
35921b7fc07a patch 8.2.1422: the Mac GUI implementation is outdated
Bram Moolenaar <Bram@vim.org>
parents: 21558
diff changeset
1969 || defined(MSWIN) || defined(FEAT_GUI_GTK) \
15510
41fbbcea0f1b patch 8.1.0763: nobody is using the Sun Workshop support
Bram Moolenaar <Bram@vim.org>
parents: 15470
diff changeset
1970 || defined(FEAT_NETBEANS_INTG) \
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1971 || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1972 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1973 * Change to a file's directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1974 * Caller must call shorten_fnames()!
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1975 * Return OK or FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1976 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
1977 int
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1978 vim_chdirfile(char_u *fname, char *trigger_autocmd)
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1979 {
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1980 char_u old_dir[MAXPATHL];
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1981 char_u new_dir[MAXPATHL];
39
410fa1a31baf updated for version 7.0023
vimboss
parents: 29
diff changeset
1982
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1983 if (mch_dirname(old_dir, MAXPATHL) != OK)
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1984 *old_dir = NUL;
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1985
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1986 vim_strncpy(new_dir, fname, MAXPATHL - 1);
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1987 *gettail_sep(new_dir) = NUL;
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1988
15188
2d8c31ae1e24 patch 8.1.0604: autocommand test fails on MS-Windows
Bram Moolenaar <Bram@vim.org>
parents: 15184
diff changeset
1989 if (pathcmp((char *)old_dir, (char *)new_dir, -1) == 0)
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1990 // nothing to do
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
1991 return OK;
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
1992
27617
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
1993 if (trigger_autocmd != NULL)
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
1994 trigger_DirChangedPre((char_u *)trigger_autocmd, new_dir);
269f89efb06a patch 8.2.4335: no autocommand event triggered before changing directory
Bram Moolenaar <Bram@vim.org>
parents: 27511
diff changeset
1995
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
1996 if (mch_chdir((char *)new_dir) != 0)
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
1997 return FAIL;
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
1998
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
1999 if (trigger_autocmd != NULL)
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
2000 apply_autocmds(EVENT_DIRCHANGED, (char_u *)trigger_autocmd,
15184
90ab2d3ce11d patch 8.1.0602: DirChanged is also triggered when directory didn't change
Bram Moolenaar <Bram@vim.org>
parents: 15160
diff changeset
2001 new_dir, FALSE, curbuf);
27511
9986f96fb1bd patch 8.2.4283: using a variable for the return value is not needed
Bram Moolenaar <Bram@vim.org>
parents: 27490
diff changeset
2002 return OK;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2003 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2004 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2005
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2006 #if defined(STAT_IGNORES_SLASH) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2007 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2008 * Check if "name" ends in a slash and is not a directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2009 * Used for systems where stat() ignores a trailing slash on a file name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2010 * The Vim code assumes a trailing slash is only ignored for a directory.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2011 */
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2012 static int
11146
6ce90f33373f patch 8.0.0460: can't build on HPUX
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
2013 illegal_slash(const char *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2014 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2015 if (name[0] == NUL)
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2016 return FALSE; // no file name is not illegal
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2017 if (name[strlen(name) - 1] != '/')
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2018 return FALSE; // no trailing slash
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2019 if (mch_isdir((char_u *)name))
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2020 return FALSE; // trailing slash for a directory
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2021 return TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2022 }
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2023
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2024 /*
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2025 * Special implementation of mch_stat() for Solaris.
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2026 */
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2027 int
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2028 vim_stat(const char *name, stat_T *stp)
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2029 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2030 // On Solaris stat() accepts "file/" as if it was "file". Return -1 if
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2031 // the name ends in "/" and it's not a directory.
11146
6ce90f33373f patch 8.0.0460: can't build on HPUX
Christian Brabandt <cb@256bit.org>
parents: 11129
diff changeset
2032 return illegal_slash(name) ? -1 : stat(name, stp);
11127
506f5d8b7d8b patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents: 11016
diff changeset
2033 }
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2034 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2035
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2036 #if defined(CURSOR_SHAPE) || defined(PROTO)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2037
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2038 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2039 * Handling of cursor and mouse pointer shapes in various modes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2040 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2041
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2042 cursorentry_T shape_table[SHAPE_IDX_COUNT] =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2043 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2044 // The values will be filled in from the 'guicursor' and 'mouseshape'
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2045 // defaults when Vim starts.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2046 // Adjust the SHAPE_IDX_ defines when making changes!
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2047 {0, 0, 0, 700L, 400L, 250L, 0, 0, "n", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2048 {0, 0, 0, 700L, 400L, 250L, 0, 0, "v", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2049 {0, 0, 0, 700L, 400L, 250L, 0, 0, "i", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2050 {0, 0, 0, 700L, 400L, 250L, 0, 0, "r", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2051 {0, 0, 0, 700L, 400L, 250L, 0, 0, "c", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2052 {0, 0, 0, 700L, 400L, 250L, 0, 0, "ci", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2053 {0, 0, 0, 700L, 400L, 250L, 0, 0, "cr", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2054 {0, 0, 0, 700L, 400L, 250L, 0, 0, "o", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2055 {0, 0, 0, 700L, 400L, 250L, 0, 0, "ve", SHAPE_CURSOR+SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2056 {0, 0, 0, 0L, 0L, 0L, 0, 0, "e", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2057 {0, 0, 0, 0L, 0L, 0L, 0, 0, "s", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2058 {0, 0, 0, 0L, 0L, 0L, 0, 0, "sd", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2059 {0, 0, 0, 0L, 0L, 0L, 0, 0, "vs", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2060 {0, 0, 0, 0L, 0L, 0L, 0, 0, "vd", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2061 {0, 0, 0, 0L, 0L, 0L, 0, 0, "m", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2062 {0, 0, 0, 0L, 0L, 0L, 0, 0, "ml", SHAPE_MOUSE},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2063 {0, 0, 0, 100L, 100L, 100L, 0, 0, "sm", SHAPE_CURSOR},
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2064 };
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2065
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2066 # ifdef FEAT_MOUSESHAPE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2067 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2068 * Table with names for mouse shapes. Keep in sync with all the tables for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2069 * mch_set_mouse_shape()!.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2070 */
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2071 static char *mshape_names[] =
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2072 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2073 "arrow", // default, must be the first one
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2074 "blank", // hidden
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2075 "beam",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2076 "updown",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2077 "udsizing",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2078 "leftright",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2079 "lrsizing",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2080 "busy",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2081 "no",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2082 "crosshair",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2083 "hand1",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2084 "hand2",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2085 "pencil",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2086 "question",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2087 "rightup-arrow",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2088 "up-arrow",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2089 NULL
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2090 };
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2091
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2092 # define MSHAPE_NAMES_COUNT (ARRAY_LENGTH(mshape_names) - 1)
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2093 # endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2094
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2095 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2096 * Parse the 'guicursor' option ("what" is SHAPE_CURSOR) or 'mouseshape'
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2097 * ("what" is SHAPE_MOUSE).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2098 * Returns error message for an illegal option, NULL otherwise.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2099 */
15470
55ccc2d353bd patch 8.1.0743: giving error messages is not flexible
Bram Moolenaar <Bram@vim.org>
parents: 15428
diff changeset
2100 char *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2101 parse_shape_opt(int what)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2102 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2103 char_u *modep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2104 char_u *colonp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2105 char_u *commap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2106 char_u *slashp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2107 char_u *p, *endp;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2108 int idx = 0; // init for GCC
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2109 int all_idx;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2110 int len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2111 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2112 long n;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2113 int found_ve = FALSE; // found "ve" flag
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2114 int round;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2116 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2117 * First round: check for errors; second round: do it for real.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2118 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2119 for (round = 1; round <= 2; ++round)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2120 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2121 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2122 * Repeat for all comma separated parts.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2123 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2124 #ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2125 if (what == SHAPE_MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2126 modep = p_mouseshape;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2127 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2128 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2129 modep = p_guicursor;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2130 while (*modep != NUL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2131 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2132 colonp = vim_strchr(modep, ':');
10936
a516b6c279d9 patch 8.0.0357: crash when setting 'guicursor' to weird value
Christian Brabandt <cb@256bit.org>
parents: 10716
diff changeset
2133 commap = vim_strchr(modep, ',');
a516b6c279d9 patch 8.0.0357: crash when setting 'guicursor' to weird value
Christian Brabandt <cb@256bit.org>
parents: 10716
diff changeset
2134
a516b6c279d9 patch 8.0.0357: crash when setting 'guicursor' to weird value
Christian Brabandt <cb@256bit.org>
parents: 10716
diff changeset
2135 if (colonp == NULL || (commap != NULL && commap < colonp))
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2136 return e_missing_colon_2;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2137 if (colonp == modep)
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2138 return e_illegal_mode;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2139
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2140 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2141 * Repeat for all mode's before the colon.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2142 * For the 'a' mode, we loop to handle all the modes.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2143 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2144 all_idx = -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2145 while (modep < colonp || all_idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2146 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2147 if (all_idx < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2148 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2149 // Find the mode.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2150 if (modep[1] == '-' || modep[1] == ':')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2151 len = 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2152 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2153 len = 2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2154 if (len == 1 && TOLOWER_ASC(modep[0]) == 'a')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2155 all_idx = SHAPE_IDX_COUNT - 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2156 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2157 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2158 for (idx = 0; idx < SHAPE_IDX_COUNT; ++idx)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2159 if (STRNICMP(modep, shape_table[idx].name, len)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2160 == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2161 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2162 if (idx == SHAPE_IDX_COUNT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2163 || (shape_table[idx].used_for & what) == 0)
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2164 return e_illegal_mode;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2165 if (len == 2 && modep[0] == 'v' && modep[1] == 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2166 found_ve = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2167 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2168 modep += len + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2169 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2170
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2171 if (all_idx >= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2172 idx = all_idx--;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2173 else if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2174 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2175 #ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2176 if (what == SHAPE_MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2177 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2178 // Set the default, for the missing parts
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2179 shape_table[idx].mshape = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2180 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2181 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2182 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2183 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2184 // Set the defaults, for the missing parts
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2185 shape_table[idx].shape = SHAPE_BLOCK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2186 shape_table[idx].blinkwait = 700L;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2187 shape_table[idx].blinkon = 400L;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2188 shape_table[idx].blinkoff = 250L;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2189 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2190 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2191
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2192 // Parse the part after the colon
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2193 for (p = colonp + 1; *p && *p != ','; )
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2194 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2195 #ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2196 if (what == SHAPE_MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2197 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2198 for (i = 0; ; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2199 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2200 if (mshape_names[i] == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2201 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2202 if (!VIM_ISDIGIT(*p))
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2203 return e_illegal_mouseshape;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2204 if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2205 shape_table[idx].mshape =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2206 getdigits(&p) + MSHAPE_NUMBERED;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2207 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2208 (void)getdigits(&p);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2209 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2210 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2211 len = (int)STRLEN(mshape_names[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2212 if (STRNICMP(p, mshape_names[i], len) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2213 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2214 if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2215 shape_table[idx].mshape = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2216 p += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2217 break;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2218 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2219 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2220 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2221 else // if (what == SHAPE_MOUSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2222 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2223 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2224 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2225 * First handle the ones with a number argument.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2226 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2227 i = *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2228 len = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2229 if (STRNICMP(p, "ver", 3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2230 len = 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2231 else if (STRNICMP(p, "hor", 3) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2232 len = 3;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2233 else if (STRNICMP(p, "blinkwait", 9) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2234 len = 9;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2235 else if (STRNICMP(p, "blinkon", 7) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2236 len = 7;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2237 else if (STRNICMP(p, "blinkoff", 8) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2238 len = 8;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2239 if (len != 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2240 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2241 p += len;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2242 if (!VIM_ISDIGIT(*p))
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2243 return e_digit_expected;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2244 n = getdigits(&p);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2245 if (len == 3) // "ver" or "hor"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2246 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2247 if (n == 0)
26917
d91aea2a612c patch 8.2.3987: error messages are spread out
Bram Moolenaar <Bram@vim.org>
parents: 26865
diff changeset
2248 return e_illegal_percentage;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2249 if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2250 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2251 if (TOLOWER_ASC(i) == 'v')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2252 shape_table[idx].shape = SHAPE_VER;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2253 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2254 shape_table[idx].shape = SHAPE_HOR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2255 shape_table[idx].percentage = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2256 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2257 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2258 else if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2259 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2260 if (len == 9)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2261 shape_table[idx].blinkwait = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2262 else if (len == 7)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2263 shape_table[idx].blinkon = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2264 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2265 shape_table[idx].blinkoff = n;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2266 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2267 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2268 else if (STRNICMP(p, "block", 5) == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2269 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2270 if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2271 shape_table[idx].shape = SHAPE_BLOCK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2272 p += 5;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2273 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2274 else // must be a highlight group name then
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2275 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2276 endp = vim_strchr(p, '-');
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2277 if (commap == NULL) // last part
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2278 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2279 if (endp == NULL)
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2280 endp = p + STRLEN(p); // find end of part
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2281 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2282 else if (endp > commap || endp == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2283 endp = commap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2284 slashp = vim_strchr(p, '/');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2285 if (slashp != NULL && slashp < endp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2286 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2287 // "group/langmap_group"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2288 i = syn_check_group(p, (int)(slashp - p));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2289 p = slashp + 1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2290 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2291 if (round == 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2292 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2293 shape_table[idx].id = syn_check_group(p,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2294 (int)(endp - p));
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2295 shape_table[idx].id_lm = shape_table[idx].id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2296 if (slashp != NULL && slashp < endp)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2297 shape_table[idx].id = i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2298 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2299 p = endp;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2300 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2301 } // if (what != SHAPE_MOUSE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2302
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2303 if (*p == '-')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2304 ++p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2305 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2306 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2307 modep = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2308 if (*modep == ',')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2309 ++modep;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2310 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2311 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2312
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2313 // If the 's' flag is not given, use the 'v' cursor for 's'
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2314 if (!found_ve)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2315 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2316 #ifdef FEAT_MOUSESHAPE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2317 if (what == SHAPE_MOUSE)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2318 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2319 shape_table[SHAPE_IDX_VE].mshape = shape_table[SHAPE_IDX_V].mshape;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2320 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2321 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2322 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2323 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2324 shape_table[SHAPE_IDX_VE].shape = shape_table[SHAPE_IDX_V].shape;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2325 shape_table[SHAPE_IDX_VE].percentage =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2326 shape_table[SHAPE_IDX_V].percentage;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2327 shape_table[SHAPE_IDX_VE].blinkwait =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2328 shape_table[SHAPE_IDX_V].blinkwait;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2329 shape_table[SHAPE_IDX_VE].blinkon =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2330 shape_table[SHAPE_IDX_V].blinkon;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2331 shape_table[SHAPE_IDX_VE].blinkoff =
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2332 shape_table[SHAPE_IDX_V].blinkoff;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2333 shape_table[SHAPE_IDX_VE].id = shape_table[SHAPE_IDX_V].id;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2334 shape_table[SHAPE_IDX_VE].id_lm = shape_table[SHAPE_IDX_V].id_lm;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2335 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2336 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2337
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2338 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2339 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2340
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 474
diff changeset
2341 # if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 474
diff changeset
2342 || defined(FEAT_MOUSESHAPE) || defined(PROTO)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2343 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2344 * Return the index into shape_table[] for the current mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2345 * When "mouse" is TRUE, consider indexes valid for the mouse pointer.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2346 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2347 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2348 get_shape_idx(int mouse)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2349 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2350 #ifdef FEAT_MOUSESHAPE
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
2351 if (mouse && (State == MODE_HITRETURN || State == MODE_ASKMORE))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2352 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2353 # ifdef FEAT_GUI
87
014ba200db86 updated for version 7.0035
vimboss
parents: 44
diff changeset
2354 int x, y;
014ba200db86 updated for version 7.0035
vimboss
parents: 44
diff changeset
2355 gui_mch_getmouse(&x, &y);
014ba200db86 updated for version 7.0035
vimboss
parents: 44
diff changeset
2356 if (Y_2_ROW(y) == Rows - 1)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2357 return SHAPE_IDX_MOREL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2358 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2359 return SHAPE_IDX_MORE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2360 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2361 if (mouse && drag_status_line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2362 return SHAPE_IDX_SDRAG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2363 if (mouse && drag_sep_line)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2364 return SHAPE_IDX_VDRAG;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2365 #endif
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
2366 if (!mouse && State == MODE_SHOWMATCH)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2367 return SHAPE_IDX_SM;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2368 if (State & VREPLACE_FLAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2369 return SHAPE_IDX_R;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2370 if (State & REPLACE_FLAG)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2371 return SHAPE_IDX_R;
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
2372 if (State & MODE_INSERT)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2373 return SHAPE_IDX_I;
28773
d770568e6c98 patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents: 28668
diff changeset
2374 if (State & MODE_CMDLINE)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2375 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2376 if (cmdline_at_end())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2377 return SHAPE_IDX_C;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2378 if (cmdline_overstrike())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2379 return SHAPE_IDX_CR;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2380 return SHAPE_IDX_CI;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2381 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2382 if (finish_op)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2383 return SHAPE_IDX_O;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2384 if (VIsual_active)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2385 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2386 if (*p_sel == 'e')
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2387 return SHAPE_IDX_VE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2388 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2389 return SHAPE_IDX_V;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2390 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2391 return SHAPE_IDX_N;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2392 }
500
4772a5e3f9fa updated for version 7.0138
vimboss
parents: 474
diff changeset
2393 #endif
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2394
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2395 # if defined(FEAT_MOUSESHAPE) || defined(PROTO)
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2396 static int current_mouse_shape = 0;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2397
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2398 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2399 * Set the mouse shape:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2400 * If "shape" is -1, use shape depending on the current mode,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2401 * depending on the current state.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2402 * If "shape" is -2, only update the shape when it's CLINE or STATUS (used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2403 * when the mouse moves off the status or command line).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2404 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2405 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2406 update_mouseshape(int shape_idx)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2407 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2408 int new_mouse_shape;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2409
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2410 // Only works in GUI mode.
227
ef254e0f2365 updated for version 7.0063
vimboss
parents: 180
diff changeset
2411 if (!gui.in_use || gui.starting)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2412 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2413
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2414 // Postpone the updating when more is to come. Speeds up executing of
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2415 // mappings.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2416 if (shape_idx == -1 && char_avail())
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2417 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2418 postponed_mouseshape = TRUE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2419 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2420 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2421
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2422 // When ignoring the mouse don't change shape on the statusline.
864
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2423 if (*p_mouse == NUL
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2424 && (shape_idx == SHAPE_IDX_CLINE
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2425 || shape_idx == SHAPE_IDX_STATUS
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2426 || shape_idx == SHAPE_IDX_VSEP))
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2427 shape_idx = -2;
bc620d6bdf06 updated for version 7.0g03
vimboss
parents: 853
diff changeset
2428
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2429 if (shape_idx == -2
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2430 && current_mouse_shape != shape_table[SHAPE_IDX_CLINE].mshape
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2431 && current_mouse_shape != shape_table[SHAPE_IDX_STATUS].mshape
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2432 && current_mouse_shape != shape_table[SHAPE_IDX_VSEP].mshape)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2433 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2434 if (shape_idx < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2435 new_mouse_shape = shape_table[get_shape_idx(TRUE)].mshape;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2436 else
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2437 new_mouse_shape = shape_table[shape_idx].mshape;
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2438 if (new_mouse_shape != current_mouse_shape)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2439 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2440 mch_set_mouse_shape(new_mouse_shape);
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2441 current_mouse_shape = new_mouse_shape;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2442 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2443 postponed_mouseshape = FALSE;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2444 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2445 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2446
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2447 #endif // CURSOR_SHAPE
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2448
31093
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2449 #if defined(FEAT_EVAL) || defined(PROTO)
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2450 /*
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2451 * Mainly for tests: get the name of the current mouse shape.
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2452 */
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2453 void
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2454 f_getmouseshape(typval_T *argvars UNUSED, typval_T *rettv)
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2455 {
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2456 rettv->v_type = VAR_STRING;
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2457 rettv->vval.v_string = NULL;
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2458 # if defined(FEAT_MOUSESHAPE) || defined(PROTO)
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2459 if (current_mouse_shape >= 0
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2460 && current_mouse_shape < (int)MSHAPE_NAMES_COUNT)
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2461 rettv->vval.v_string = vim_strsave(
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2462 (char_u *)mshape_names[current_mouse_shape]);
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2463 # endif
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2464 }
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2465 #endif
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2466
004aee2845d2 patch 9.0.0881: cannot get the currently showing mouse shape
Bram Moolenaar <Bram@vim.org>
parents: 30833
diff changeset
2467
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2468
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2469 /*
29853
31c598083364 patch 9.0.0265: no good reason why the "gf" command isn't in the tiny version
Bram Moolenaar <Bram@vim.org>
parents: 29765
diff changeset
2470 * Change directory to "new_dir". Search 'cdpath' for relative directory
30205
ed6f3d2593df patch 9.0.0438: cannot put virtual text above a line
Bram Moolenaar <Bram@vim.org>
parents: 29853
diff changeset
2471 * names.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2472 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2473 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2474 vim_chdir(char_u *new_dir)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2475 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2476 char_u *dir_name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2477 int r;
32138
2c09e40ce3da patch 9.0.1400: find_file_in_path() is not reentrant
Bram Moolenaar <Bram@vim.org>
parents: 32098
diff changeset
2478 char_u *file_to_find = NULL;
2c09e40ce3da patch 9.0.1400: find_file_in_path() is not reentrant
Bram Moolenaar <Bram@vim.org>
parents: 32098
diff changeset
2479 char *search_ctx = NULL;
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2480
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2481 dir_name = find_directory_in_path(new_dir, (int)STRLEN(new_dir),
32138
2c09e40ce3da patch 9.0.1400: find_file_in_path() is not reentrant
Bram Moolenaar <Bram@vim.org>
parents: 32098
diff changeset
2482 FNAME_MESS, curbuf->b_ffname, &file_to_find, &search_ctx);
2c09e40ce3da patch 9.0.1400: find_file_in_path() is not reentrant
Bram Moolenaar <Bram@vim.org>
parents: 32098
diff changeset
2483 vim_free(file_to_find);
2c09e40ce3da patch 9.0.1400: find_file_in_path() is not reentrant
Bram Moolenaar <Bram@vim.org>
parents: 32098
diff changeset
2484 vim_findfile_cleanup(search_ctx);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2485 if (dir_name == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2486 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2487 r = mch_chdir((char *)dir_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2488 vim_free(dir_name);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2489 return r;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2490 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2491
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2492 /*
418
84825cc6f049 updated for version 7.0109
vimboss
parents: 378
diff changeset
2493 * Get user name from machine-specific function.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2494 * Returns the user name in "buf[len]".
418
84825cc6f049 updated for version 7.0109
vimboss
parents: 378
diff changeset
2495 * Some systems are quite slow in obtaining the user name (Windows NT), thus
84825cc6f049 updated for version 7.0109
vimboss
parents: 378
diff changeset
2496 * cache the result.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2497 * Returns OK or FAIL.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2498 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2499 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2500 get_user_name(char_u *buf, int len)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2501 {
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2502 if (username == NULL)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2503 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2504 if (mch_get_user_name(buf, len) == FAIL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2505 return FAIL;
359
6c62b9b939bd updated for version 7.0093
vimboss
parents: 356
diff changeset
2506 username = vim_strsave(buf);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2507 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2508 else
418
84825cc6f049 updated for version 7.0109
vimboss
parents: 378
diff changeset
2509 vim_strncpy(buf, username, len - 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2510 return OK;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2511 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2512
28893
aa44d5842d6c patch 8.2.4969: changing text in Visual mode may cause invalid memory access
Bram Moolenaar <Bram@vim.org>
parents: 28809
diff changeset
2513 #if defined(EXITFREE) || defined(PROTO)
25529
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2514 /*
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2515 * Free the memory allocated by get_user_name()
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2516 */
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2517 void
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2518 free_username(void)
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2519 {
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2520 vim_free(username);
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2521 }
27018
268f6a3511df patch 8.2.4038: various code not used when features are disabled
Bram Moolenaar <Bram@vim.org>
parents: 26917
diff changeset
2522 #endif
25529
bb1097899693 patch 8.2.3301: memory allocation functions don't have their own place
Bram Moolenaar <Bram@vim.org>
parents: 25435
diff changeset
2523
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2524 #ifndef HAVE_QSORT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2525 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2526 * Our own qsort(), for systems that don't have it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2527 * It's simple and slow. From the K&R C book.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2528 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2529 void
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2530 qsort(
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2531 void *base,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2532 size_t elm_count,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2533 size_t elm_size,
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2534 int (*cmp)(const void *, const void *))
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2535 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2536 char_u *buf;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2537 char_u *p1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2538 char_u *p2;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2539 int i, j;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2540 int gap;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2541
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16706
diff changeset
2542 buf = alloc(elm_size);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2543 if (buf == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2544 return;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2545
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2546 for (gap = elm_count / 2; gap > 0; gap /= 2)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2547 for (i = gap; i < elm_count; ++i)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2548 for (j = i - gap; j >= 0; j -= gap)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2549 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2550 // Compare the elements.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2551 p1 = (char_u *)base + j * elm_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2552 p2 = (char_u *)base + (j + gap) * elm_size;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2553 if ((*cmp)((void *)p1, (void *)p2) <= 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2554 break;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2555 // Exchange the elements.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2556 mch_memmove(buf, p1, elm_size);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2557 mch_memmove(p1, p2, elm_size);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2558 mch_memmove(p2, buf, elm_size);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2559 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2560
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2561 vim_free(buf);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2562 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2563 #endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2564
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2565 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2566 * The putenv() implementation below comes from the "screen" program.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2567 * Included with permission from Juergen Weigert.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2568 * See pty.c for the copyright notice.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2569 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2570
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2571 /*
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2572 * putenv -- put value into environment
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2573 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2574 * Usage: i = putenv (string)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2575 * int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2576 * char *string;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2577 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2578 * where string is of the form <name>=<value>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2579 * Putenv returns 0 normally, -1 on error (not enough core for malloc).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2580 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2581 * Putenv may need to add a new name into the environment, or to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2582 * associate a value longer than the current value with a particular
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2583 * name. So, to make life simpler, putenv() copies your entire
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2584 * environment into the heap (i.e. malloc()) from the stack
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2585 * (i.e. where it resides when your process is initiated) the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2586 * time you call it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2587 *
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2588 * (history removed, not very interesting. See the "screen" sources.)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2589 */
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2590
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2591 #if !defined(HAVE_SETENV) && !defined(HAVE_PUTENV)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2592
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2593 #define EXTRASIZE 5 // increment to add to env. size
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2594
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2595 static int envsize = -1; // current size of environment
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2596 extern char **environ; // the global which is your env.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2597
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2598 static int findenv(char *name); // look for a name in the env.
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2599 static int newenv(void); // copy env. from stack to heap
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2600 static int moreenv(void); // incr. size of env.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2601
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2602 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2603 putenv(const char *string)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2604 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2605 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2606 char *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2607
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2608 if (envsize < 0)
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2609 { // first time putenv called
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2610 if (newenv() < 0) // copy env. to heap
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2611 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2612 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2613
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2614 i = findenv((char *)string); // look for name in environment
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2615
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2616 if (i < 0)
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2617 { // name must be added
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2618 for (i = 0; environ[i]; i++);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2619 if (i >= (envsize - 1))
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2620 { // need new slot
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2621 if (moreenv() < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2622 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2623 }
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
2624 p = alloc(strlen(string) + 1);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2625 if (p == NULL) // not enough core
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2626 return -1;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2627 environ[i + 1] = 0; // new end of env.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2628 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2629 else
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2630 { // name already in env.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2631 p = vim_realloc(environ[i], strlen(string) + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2632 if (p == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2633 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2634 }
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2635 sprintf(p, "%s", string); // copy into env.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2636 environ[i] = p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2637
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2638 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2639 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2640
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2641 static int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2642 findenv(char *name)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2643 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2644 char *namechar, *envchar;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2645 int i, found;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2646
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2647 found = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2648 for (i = 0; environ[i] && !found; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2649 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2650 envchar = environ[i];
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2651 namechar = name;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2652 while (*namechar && *namechar != '=' && (*namechar == *envchar))
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2653 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2654 namechar++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2655 envchar++;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2656 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2657 found = ((*namechar == '\0' || *namechar == '=') && *envchar == '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2658 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2659 return found ? i - 1 : -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2660 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2661
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2662 static int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2663 newenv(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2664 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2665 char **env, *elem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2666 int i, esize;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2667
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2668 for (i = 0; environ[i]; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2669 ;
12716
351cf7c67bbe patch 8.0.1236: Mac features are confusing
Christian Brabandt <cb@256bit.org>
parents: 12672
diff changeset
2670
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2671 esize = i + EXTRASIZE + 1;
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
2672 env = ALLOC_MULT(char *, esize);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2673 if (env == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2674 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2675
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2676 for (i = 0; environ[i]; i++)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2677 {
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
2678 elem = alloc(strlen(environ[i]) + 1);
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2679 if (elem == NULL)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2680 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2681 env[i] = elem;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2682 strcpy(elem, environ[i]);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2683 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2684
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2685 env[i] = 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2686 environ = env;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2687 envsize = esize;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2688 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2689 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2690
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2691 static int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2692 moreenv(void)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2693 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2694 int esize;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2695 char **env;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2696
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2697 esize = envsize + EXTRASIZE;
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
2698 env = vim_realloc((char *)environ, esize * sizeof (*env));
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2699 if (env == 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2700 return -1;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2701 environ = env;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2702 envsize = esize;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2703 return 0;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2704 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2705
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2706 # ifdef USE_VIMPTY_GETENV
11737
7791a15353dc patch 8.0.0751: OpenPTY missing with some combination of features
Christian Brabandt <cb@256bit.org>
parents: 11557
diff changeset
2707 /*
7791a15353dc patch 8.0.0751: OpenPTY missing with some combination of features
Christian Brabandt <cb@256bit.org>
parents: 11557
diff changeset
2708 * Used for mch_getenv() for Mac.
7791a15353dc patch 8.0.0751: OpenPTY missing with some combination of features
Christian Brabandt <cb@256bit.org>
parents: 11557
diff changeset
2709 */
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2710 char_u *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2711 vimpty_getenv(const char_u *string)
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2712 {
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2713 int i;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2714 char_u *p;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2715
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2716 if (envsize < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2717 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2718
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2719 i = findenv((char *)string);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2720
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2721 if (i < 0)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2722 return NULL;
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2723
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2724 p = vim_strchr((char_u *)environ[i], '=');
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2725 return (p + 1);
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2726 }
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2727 # endif
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2728
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2729 #endif // !defined(HAVE_SETENV) && !defined(HAVE_PUTENV)
313
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2730
741
ac1f1e69c50d updated for version 7.0222
vimboss
parents: 694
diff changeset
2731 #if defined(FEAT_EVAL) || defined(FEAT_SPELL) || defined(PROTO)
313
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2732 /*
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2733 * Return 0 for not writable, 1 for writable file, 2 for a dir which we have
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2734 * rights to write into.
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2735 */
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2736 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2737 filewritable(char_u *fname)
313
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2738 {
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2739 int retval = 0;
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2740 #if defined(UNIX) || defined(VMS)
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2741 int perm = 0;
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2742 #endif
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2743
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2744 #if defined(UNIX) || defined(VMS)
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2745 perm = mch_getperm(fname);
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2746 #endif
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2747 if (
15868
7fad90423bd2 patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents: 15814
diff changeset
2748 # ifdef MSWIN
313
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2749 mch_writable(fname) &&
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2750 # else
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2751 # if defined(UNIX) || defined(VMS)
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2752 (perm & 0222) &&
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2753 # endif
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2754 # endif
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2755 mch_access((char *)fname, W_OK) == 0
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2756 )
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2757 {
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2758 ++retval;
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2759 if (mch_isdir(fname))
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2760 ++retval;
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2761 }
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2762 return retval;
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2763 }
96a9bfba3880 updated for version 7.0082
vimboss
parents: 297
diff changeset
2764 #endif
332
d5e895294dce updated for version 7.0086
vimboss
parents: 323
diff changeset
2765
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2766 #if defined(FEAT_SPELL) || defined(FEAT_PERSISTENT_UNDO) || defined(PROTO)
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2767 /*
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2768 * Read 2 bytes from "fd" and turn them into an int, MSB first.
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2769 * Returns -1 when encountering EOF.
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2770 */
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2771 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2772 get2c(FILE *fd)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2773 {
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2774 int c, n;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2775
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2776 n = getc(fd);
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2777 if (n == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2778 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2779 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2780 return (n << 8) + c;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2781 }
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2782
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2783 /*
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2784 * Read 3 bytes from "fd" and turn them into an int, MSB first.
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2785 * Returns -1 when encountering EOF.
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2786 */
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2787 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2788 get3c(FILE *fd)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2789 {
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2790 int c, n;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2791
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2792 n = getc(fd);
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2793 if (n == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2794 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2795 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2796 n = (n << 8) + c;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2797 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2798 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2799 return (n << 8) + c;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2800 }
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2801
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2802 /*
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2803 * Read 4 bytes from "fd" and turn them into an int, MSB first.
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2804 * Returns -1 when encountering EOF.
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2805 */
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2806 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2807 get4c(FILE *fd)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2808 {
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2809 int c;
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2810 // Use unsigned rather than int otherwise result is undefined
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2811 // when left-shift sets the MSB.
5347
6bbb2ae990c9 updated for version 7.4.026
Bram Moolenaar <bram@vim.org>
parents: 5151
diff changeset
2812 unsigned n;
6bbb2ae990c9 updated for version 7.4.026
Bram Moolenaar <bram@vim.org>
parents: 5151
diff changeset
2813
13493
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2814 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2815 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2816 n = (unsigned)c;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2817 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2818 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2819 n = (n << 8) + (unsigned)c;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2820 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2821 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2822 n = (n << 8) + (unsigned)c;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2823 c = getc(fd);
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2824 if (c == EOF) return -1;
96de13023cad patch 8.0.1620: reading spell file has no good EOF detection
Christian Brabandt <cb@256bit.org>
parents: 13380
diff changeset
2825 n = (n << 8) + (unsigned)c;
5347
6bbb2ae990c9 updated for version 7.4.026
Bram Moolenaar <bram@vim.org>
parents: 5151
diff changeset
2826 return (int)n;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2827 }
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2828
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2829 /*
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2830 * Read a string of length "cnt" from "fd" into allocated memory.
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2831 * Returns NULL when out of memory or unable to read that many bytes.
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2832 */
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2833 char_u *
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2834 read_string(FILE *fd, int cnt)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2835 {
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2836 char_u *str;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2837 int i;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2838 int c;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2839
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2840 // allocate memory
16764
ef00b6bc186b patch 8.1.1384: using "int" for alloc() often results in compiler warnings
Bram Moolenaar <Bram@vim.org>
parents: 16706
diff changeset
2841 str = alloc(cnt + 1);
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2842 if (str == NULL)
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2843 return NULL;
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2844
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2845 // Read the string. Quit when running into the EOF.
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2846 for (i = 0; i < cnt; ++i)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2847 {
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2848 c = getc(fd);
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2849 if (c == EOF)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2850 {
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2851 vim_free(str);
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2852 return NULL;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2853 }
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2854 str[i] = c;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2855 }
31728
238ca27dbfd2 patch 9.0.1196: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents: 31722
diff changeset
2856 str[i] = NUL;
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2857 return str;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2858 }
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2859
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2860 /*
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2861 * Write a number to file "fd", MSB first, in "len" bytes.
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2862 */
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2863 int
7829
2a8d6b2dd925 commit https://github.com/vim/vim/commit/9b57814db13c29ecb08260b36923c0e1c8a373a9
Christian Brabandt <cb@256bit.org>
parents: 7803
diff changeset
2864 put_bytes(FILE *fd, long_u nr, int len)
2229
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2865 {
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2866 int i;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2867
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2868 for (i = len - 1; i >= 0; --i)
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2869 if (putc((int)(nr >> (i * 8)), fd) == EOF)
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2870 return FAIL;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2871 return OK;
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2872 }
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2873
d45902a5c61c Fix a few more things for persistent undo.
Bram Moolenaar <bram@vim.org>
parents: 2215
diff changeset
2874 #endif
3257
75217982ea46 updated for version 7.3.397
Bram Moolenaar <bram@vim.org>
parents: 3202
diff changeset
2875
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2876 #ifndef PROTO // proto is defined in vim.h
10449
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2877 # ifdef ELAPSED_TIMEVAL
10406
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2878 /*
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2879 * Return time in msec since "start_tv".
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2880 */
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2881 long
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2882 elapsed(struct timeval *start_tv)
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2883 {
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2884 struct timeval now_tv;
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2885
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2886 gettimeofday(&now_tv, NULL);
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2887 return (now_tv.tv_sec - start_tv->tv_sec) * 1000L
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2888 + (now_tv.tv_usec - start_tv->tv_usec) / 1000L;
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2889 }
10449
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2890 # endif
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2891
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2892 # ifdef ELAPSED_TICKCOUNT
10406
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2893 /*
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2894 * Return time in msec since "start_tick".
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2895 */
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2896 long
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2897 elapsed(DWORD start_tick)
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2898 {
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2899 DWORD now = GetTickCount();
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2900
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2901 return (long)now - (long)start_tick;
42911b233245 commit https://github.com/vim/vim/commit/833eb1d752426689051bf2001083359899536939
Christian Brabandt <cb@256bit.org>
parents: 10359
diff changeset
2902 }
10449
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2903 # endif
222b1432814e commit https://github.com/vim/vim/commit/5162822914372fc916a93f85848c0c82209e7cec
Christian Brabandt <cb@256bit.org>
parents: 10430
diff changeset
2904 #endif
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2905
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2906 #if defined(FEAT_JOB_CHANNEL) \
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2907 || (defined(UNIX) && (!defined(USE_SYSTEM) \
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2908 || (defined(FEAT_GUI) && defined(FEAT_TERMINAL)))) \
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2909 || defined(PROTO)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2910 /*
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2911 * Parse "cmd" and put the white-separated parts in "argv".
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2912 * "argv" is an allocated array with "argc" entries and room for 4 more.
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2913 * Returns FAIL when out of memory.
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2914 */
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2915 int
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2916 mch_parse_cmd(char_u *cmd, int use_shcf, char ***argv, int *argc)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2917 {
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2918 int i;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2919 char_u *p, *d;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2920 int inquote;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2921
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2922 /*
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2923 * Do this loop twice:
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2924 * 1: find number of arguments
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2925 * 2: separate them and build argv[]
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2926 */
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2927 for (i = 1; i <= 2; ++i)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2928 {
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2929 p = skipwhite(cmd);
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2930 inquote = FALSE;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2931 *argc = 0;
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2932 while (*p != NUL)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2933 {
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2934 if (i == 2)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2935 (*argv)[*argc] = (char *)p;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2936 ++*argc;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2937 d = p;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2938 while (*p != NUL && (inquote || (*p != ' ' && *p != TAB)))
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2939 {
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2940 if (p[0] == '"')
14905
c1e94bb0f004 patch 8.1.0464: MS-Windows: job_info() has cmd without backslashes
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
2941 // quotes surrounding an argument and are dropped
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2942 inquote = !inquote;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2943 else
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2944 {
14905
c1e94bb0f004 patch 8.1.0464: MS-Windows: job_info() has cmd without backslashes
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
2945 if (rem_backslash(p))
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2946 {
14905
c1e94bb0f004 patch 8.1.0464: MS-Windows: job_info() has cmd without backslashes
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
2947 // First pass: skip over "\ " and "\"".
c1e94bb0f004 patch 8.1.0464: MS-Windows: job_info() has cmd without backslashes
Bram Moolenaar <Bram@vim.org>
parents: 14862
diff changeset
2948 // Second pass: Remove the backslash.
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2949 ++p;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2950 }
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2951 if (i == 2)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2952 *d++ = *p;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2953 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2954 ++p;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2955 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2956 if (*p == NUL)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2957 {
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2958 if (i == 2)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2959 *d++ = NUL;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2960 break;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2961 }
19793
607e5d7968b9 patch 8.2.0453: trailing space in job_start() command causes empty argument
Bram Moolenaar <Bram@vim.org>
parents: 19396
diff changeset
2962 if (i == 2)
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2963 *d++ = NUL;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2964 p = skipwhite(p + 1);
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2965 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2966 if (*argv == NULL)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2967 {
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2968 if (use_shcf)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2969 {
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2970 // Account for possible multiple args in p_shcf.
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2971 p = p_shcf;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2972 for (;;)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2973 {
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2974 p = skiptowhite(p);
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2975 if (*p == NUL)
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2976 break;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2977 ++*argc;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2978 p = skipwhite(p);
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2979 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2980 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2981
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
2982 *argv = ALLOC_MULT(char *, *argc + 4);
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
2983 if (*argv == NULL) // out of memory
13746
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2984 return FAIL;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2985 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2986 }
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2987 return OK;
260256caac38 patch 8.0.1745: build failure on MS-Windows
Christian Brabandt <cb@256bit.org>
parents: 13575
diff changeset
2988 }
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2989
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2990 /*
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2991 * Build "argv[argc]" from the string "cmd".
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2992 * "argv[argc]" is set to NULL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2993 * Return FAIL when out of memory.
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2994 */
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2995 int
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2996 build_argv_from_string(char_u *cmd, char ***argv, int *argc)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2997 {
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2998 char_u *cmd_copy;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
2999 int i;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3000
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
3001 // Make a copy, parsing will modify "cmd".
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3002 cmd_copy = vim_strsave(cmd);
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3003 if (cmd_copy == NULL
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3004 || mch_parse_cmd(cmd_copy, FALSE, argv, argc) == FAIL)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3005 {
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3006 vim_free(cmd_copy);
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3007 return FAIL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3008 }
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3009 for (i = 0; i < *argc; i++)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3010 (*argv)[i] = (char *)vim_strsave((char_u *)(*argv)[i]);
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3011 (*argv)[*argc] = NULL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3012 vim_free(cmd_copy);
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3013 return OK;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3014 }
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3015
27181
f9f1e76957a6 patch 8.2.4119: build failure when disabling the channel feature
Bram Moolenaar <Bram@vim.org>
parents: 27140
diff changeset
3016 # if defined(FEAT_JOB_CHANNEL) || defined(PROTO)
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3017 /*
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3018 * Build "argv[argc]" from the list "l".
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3019 * "argv[argc]" is set to NULL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3020 * Return FAIL when out of memory.
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3021 */
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3022 int
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3023 build_argv_from_list(list_T *l, char ***argv, int *argc)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3024 {
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3025 listitem_T *li;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3026 char_u *s;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3027
18931
80b40bd5ec1a patch 8.2.0026: still some /* */ comments
Bram Moolenaar <Bram@vim.org>
parents: 18886
diff changeset
3028 // Pass argv[] to mch_call_shell().
16825
ce04ebdf26b8 patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents: 16782
diff changeset
3029 *argv = ALLOC_MULT(char *, l->lv_len + 1);
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3030 if (*argv == NULL)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3031 return FAIL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3032 *argc = 0;
19888
435726a03481 patch 8.2.0500: using the same loop in many places
Bram Moolenaar <Bram@vim.org>
parents: 19793
diff changeset
3033 FOR_ALL_LIST_ITEMS(l, li)
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3034 {
15211
de63593896b3 patch 8.1.0615: get_tv function names are not consistent
Bram Moolenaar <Bram@vim.org>
parents: 15209
diff changeset
3035 s = tv_get_string_chk(&li->li_tv);
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3036 if (s == NULL)
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3037 {
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3038 int i;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3039
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3040 for (i = 0; i < *argc; ++i)
20033
2e5e86ff7596 patch 8.2.0572: using two lines for free and reset
Bram Moolenaar <Bram@vim.org>
parents: 20031
diff changeset
3041 VIM_CLEAR((*argv)[i]);
25891
58b1c9d96ec6 patch 8.2.3479: crash when calling job_start with an invalid argument
Bram Moolenaar <Bram@vim.org>
parents: 25642
diff changeset
3042 (*argv)[0] = NULL;
13750
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3043 return FAIL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3044 }
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3045 (*argv)[*argc] = (char *)vim_strsave(s);
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3046 *argc += 1;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3047 }
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3048 (*argv)[*argc] = NULL;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3049 return OK;
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3050 }
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3051 # endif
3ab6198c1f9a patch 8.0.1747: MS-Windows: term_start() does not set job_info() cmd
Christian Brabandt <cb@256bit.org>
parents: 13746
diff changeset
3052 #endif
18064
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3053
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3054 /*
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3055 * Change the behavior of vterm.
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3056 * 0: As usual.
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3057 * 1: Windows 10 version 1809
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3058 * The bug causes unstable handling of ambiguous width character.
18611
6a7ebc2ee528 patch 8.1.2299: ConPTY in MS-Windows 1909 is still wrong
Bram Moolenaar <Bram@vim.org>
parents: 18301
diff changeset
3059 * 2: Windows 10 version 1903 & 1909
18064
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3060 * Use the wrong result because each result is different.
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3061 * 3: Windows 10 insider preview (current latest logic)
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3062 */
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3063 int
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3064 get_special_pty_type(void)
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3065 {
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3066 #ifdef MSWIN
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3067 return get_conpty_type();
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3068 #else
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3069 return 0;
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3070 #endif
8b4f9be5db73 patch 8.1.2027: MS-Windows: problem with ambiwidth characters
Bram Moolenaar <Bram@vim.org>
parents: 17978
diff changeset
3071 }