annotate src/misc2.c @ 33004:50e7d33c40f9 v9.0.1794

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