Mercurial > vim
annotate src/popupmenu.c @ 32395:2ed95122d59c v9.0.1529
patch 9.0.1529: code style test doesn't check for space after "if"
Commit: https://github.com/vim/vim/commit/c9471b18728b1b37c04845ca2bc59fc981308b2d
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue May 9 15:00:00 2023 +0100
patch 9.0.1529: code style test doesn't check for space after "if"
Problem: Code style test doesn't check for space after "if".
Solution: Add a test for space.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 09 May 2023 16:15:05 +0200 |
parents | b8e9ea3c1ed0 |
children | 87f59a64efab |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
8220
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
800 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * | |
5 * Do ":help uganda" in Vim to read copying and usage conditions. | |
6 * Do ":help credits" in Vim to see a list of people who contributed. | |
7 * See README.txt for an overview of the Vim source code. | |
8 */ | |
9 | |
10 /* | |
18174
1ec6539cef68
patch 8.1.2082: some files have a weird name to fit in 8.3 characters
Bram Moolenaar <Bram@vim.org>
parents:
17950
diff
changeset
|
11 * popupmenu.c: Popup menu (PUM) |
800 | 12 */ |
13 #include "vim.h" | |
14 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
15 static pumitem_T *pum_array = NULL; // items of displayed pum |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
16 static int pum_size; // nr of items in "pum_array" |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
17 static int pum_selected; // index of selected item or -1 |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
18 static int pum_first = 0; // index of top item |
800 | 19 |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
20 static int call_update_screen = FALSE; |
32297
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
21 static int pum_in_cmdline = FALSE; |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
22 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
23 static int pum_height; // nr of displayed pum items |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
24 static int pum_width; // width of displayed pum items |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
25 static int pum_base_width; // width of pum items base |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
26 static int pum_kind_width; // width of pum items kind column |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
27 static int pum_extra_width; // width of extra stuff |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
28 static int pum_scrollbar; // TRUE when scrollbar present |
800 | 29 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
30 static int pum_row; // top row of pum |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
31 static int pum_col; // left column of pum |
800 | 32 |
14095
f452c4aeb837
patch 8.1.0065: balloon displayed at the wrong position
Christian Brabandt <cb@256bit.org>
parents:
14089
diff
changeset
|
33 static win_T *pum_window = NULL; |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
34 static int pum_win_row; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
35 static int pum_win_height; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
36 static int pum_win_col; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
37 static int pum_win_wcol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
38 static int pum_win_width; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
39 |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
40 // Some parts are not updated when a popup menu is visible. Setting this flag |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
41 // makes pum_visible() return FALSE even when there is a popup menu. |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
42 static int pum_pretend_not_visible = FALSE; |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
43 |
7805
0b6c37dd858d
commit https://github.com/vim/vim/commit/baaa7e9ec7398a813e21285c272fa99792642077
Christian Brabandt <cb@256bit.org>
parents:
7181
diff
changeset
|
44 static int pum_set_selected(int n, int repeat); |
800 | 45 |
46 #define PUM_DEF_HEIGHT 10 | |
47 | |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
48 static void |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
49 pum_compute_size(void) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
50 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
51 int i; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
52 int w; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
53 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
54 // Compute the width of the widest match and the widest extra. |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
55 pum_base_width = 0; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
56 pum_kind_width = 0; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
57 pum_extra_width = 0; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
58 for (i = 0; i < pum_size; ++i) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
59 { |
20245
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
60 if (pum_array[i].pum_text != NULL) |
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
61 { |
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
62 w = vim_strsize(pum_array[i].pum_text); |
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
63 if (pum_base_width < w) |
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
64 pum_base_width = w; |
43ae8e2fd4c4
patch 8.2.0678: rare crash for popup menu
Bram Moolenaar <Bram@vim.org>
parents:
20007
diff
changeset
|
65 } |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
66 if (pum_array[i].pum_kind != NULL) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
67 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
68 w = vim_strsize(pum_array[i].pum_kind) + 1; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
69 if (pum_kind_width < w) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
70 pum_kind_width = w; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
71 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
72 if (pum_array[i].pum_extra != NULL) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
73 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
74 w = vim_strsize(pum_array[i].pum_extra) + 1; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
75 if (pum_extra_width < w) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
76 pum_extra_width = w; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
77 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
78 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
79 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
80 |
800 | 81 /* |
82 * Show the popup menu with items "array[size]". | |
83 * "array" must remain valid until pum_undisplay() is called! | |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
84 * When possible the leftmost character is aligned with cursor column. |
800 | 85 * The menu appears above the screen line "row" or at "row" + "height" - 1. |
86 */ | |
87 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
88 pum_display( |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
89 pumitem_T *array, |
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
90 int size, |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
91 int selected) // index of initially selected item, none if |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
92 // out of range |
800 | 93 { |
94 int def_width; | |
95 int max_width; | |
1622 | 96 int context_lines; |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
97 int cursor_col; |
10326
7d10572eaba4
commit https://github.com/vim/vim/commit/91e44a3305ef6bf2d43496c351dcff0a45c6bfb8
Christian Brabandt <cb@256bit.org>
parents:
10302
diff
changeset
|
98 int above_row; |
7d10572eaba4
commit https://github.com/vim/vim/commit/91e44a3305ef6bf2d43496c351dcff0a45c6bfb8
Christian Brabandt <cb@256bit.org>
parents:
10302
diff
changeset
|
99 int below_row; |
838 | 100 int redo_count = 0; |
12477
68d7bc045dbe
patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
11127
diff
changeset
|
101 #if defined(FEAT_QUICKFIX) |
10326
7d10572eaba4
commit https://github.com/vim/vim/commit/91e44a3305ef6bf2d43496c351dcff0a45c6bfb8
Christian Brabandt <cb@256bit.org>
parents:
10302
diff
changeset
|
102 win_T *pvwin; |
10332
4d98f501d1c5
commit https://github.com/vim/vim/commit/aab3383e70456f054fe9d0963fe3eb45994aa5e7
Christian Brabandt <cb@256bit.org>
parents:
10326
diff
changeset
|
103 #endif |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
104 #ifdef FEAT_RIGHTLEFT |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
105 int right_left = State == MODE_CMDLINE ? FALSE : curwin->w_p_rl; |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
106 #endif |
800 | 107 |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
108 do |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
109 { |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
110 def_width = p_pw; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
111 above_row = 0; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
112 below_row = cmdline_row; |
800 | 113 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
114 // Pretend the pum is already there to avoid that must_redraw is set |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
115 // when 'cuc' is on. |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
116 pum_array = (pumitem_T *)1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
117 validate_cursor_col(); |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
118 pum_array = NULL; |
800 | 119 |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
120 // Remember the essential parts of the window position and size, so we |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
121 // can decide when to reposition the popup menu. |
14095
f452c4aeb837
patch 8.1.0065: balloon displayed at the wrong position
Christian Brabandt <cb@256bit.org>
parents:
14089
diff
changeset
|
122 pum_window = curwin; |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
123 if (State == MODE_CMDLINE) |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27597
diff
changeset
|
124 // cmdline completion popup menu |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
26887
diff
changeset
|
125 pum_win_row = cmdline_row; |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
26887
diff
changeset
|
126 else |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
26887
diff
changeset
|
127 pum_win_row = curwin->w_wrow + W_WINROW(curwin); |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
128 pum_win_height = curwin->w_height; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
129 pum_win_col = curwin->w_wincol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
130 pum_win_wcol = curwin->w_wcol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
131 pum_win_width = curwin->w_width; |
800 | 132 |
12477
68d7bc045dbe
patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
11127
diff
changeset
|
133 #if defined(FEAT_QUICKFIX) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
134 FOR_ALL_WINDOWS(pvwin) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
135 if (pvwin->w_p_pvw) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
136 break; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
137 if (pvwin != NULL) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
138 { |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
139 if (W_WINROW(pvwin) < W_WINROW(curwin)) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
140 above_row = W_WINROW(pvwin) + pvwin->w_height; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
141 else if (W_WINROW(pvwin) > W_WINROW(curwin) + curwin->w_height) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
142 below_row = W_WINROW(pvwin); |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
143 } |
8220
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
7833
diff
changeset
|
144 #endif |
800 | 145 |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
146 /* |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
147 * Figure out the size and position of the pum. |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
148 */ |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
149 if (size < PUM_DEF_HEIGHT) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
150 pum_height = size; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
151 else |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
152 pum_height = PUM_DEF_HEIGHT; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
153 if (p_ph > 0 && pum_height > p_ph) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
154 pum_height = p_ph; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
155 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
156 // Put the pum below "pum_win_row" if possible. If there are few lines |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
157 // decide on where there is more room. |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
158 if (pum_win_row + 2 >= below_row - pum_height |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
159 && pum_win_row - above_row > (below_row - above_row) / 2) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
160 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
161 // pum above "pum_win_row" |
800 | 162 |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
163 if (State == MODE_CMDLINE) |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
164 // for cmdline pum, no need for context lines |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
165 context_lines = 0; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
166 else |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
167 { |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
168 // Leave two lines of context if possible |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
169 if (curwin->w_wrow - curwin->w_cline_row >= 2) |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
170 context_lines = 2; |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
171 else |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
172 context_lines = curwin->w_wrow - curwin->w_cline_row; |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
173 } |
1622 | 174 |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
175 if (pum_win_row >= size + context_lines) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
176 { |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
177 pum_row = pum_win_row - size - context_lines; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
178 pum_height = size; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
179 } |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
180 else |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
181 { |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
182 pum_row = 0; |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
183 pum_height = pum_win_row - context_lines; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
184 } |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
185 if (p_ph > 0 && pum_height > p_ph) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
186 { |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
187 pum_row += pum_height - p_ph; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
188 pum_height = p_ph; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
189 } |
800 | 190 } |
191 else | |
192 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
193 // pum below "pum_win_row" |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
194 |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
195 if (State == MODE_CMDLINE) |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
196 // for cmdline pum, no need for context lines |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
197 context_lines = 0; |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
198 else |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
199 { |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
200 // Leave two lines of context if possible |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
201 validate_cheight(); |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
202 if (curwin->w_cline_row |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
203 + curwin->w_cline_height - curwin->w_wrow >= 3) |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
204 context_lines = 3; |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
205 else |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
206 context_lines = curwin->w_cline_row |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
207 + curwin->w_cline_height - curwin->w_wrow; |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
208 } |
1622 | 209 |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
210 pum_row = pum_win_row + context_lines; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
211 if (size > below_row - pum_row) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
212 pum_height = below_row - pum_row; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
213 else |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
214 pum_height = size; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
215 if (p_ph > 0 && pum_height > p_ph) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
216 pum_height = p_ph; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
217 } |
1622 | 218 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
219 // don't display when we only have room for one line |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
220 if (pum_height < 1 || (pum_height == 1 && size > 1)) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
221 return; |
800 | 222 |
12477
68d7bc045dbe
patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
11127
diff
changeset
|
223 #if defined(FEAT_QUICKFIX) |
15087
6a74cde86252
patch 8.1.0554: popup menu overlaps with preview window
Bram Moolenaar <Bram@vim.org>
parents:
14952
diff
changeset
|
224 // If there is a preview window above avoid drawing over it. |
6a74cde86252
patch 8.1.0554: popup menu overlaps with preview window
Bram Moolenaar <Bram@vim.org>
parents:
14952
diff
changeset
|
225 if (pvwin != NULL && pum_row < above_row && pum_height > above_row) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
226 { |
15087
6a74cde86252
patch 8.1.0554: popup menu overlaps with preview window
Bram Moolenaar <Bram@vim.org>
parents:
14952
diff
changeset
|
227 pum_row = above_row; |
6a74cde86252
patch 8.1.0554: popup menu overlaps with preview window
Bram Moolenaar <Bram@vim.org>
parents:
14952
diff
changeset
|
228 pum_height = pum_win_row - above_row; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
229 } |
8220
ad9edad64d22
commit https://github.com/vim/vim/commit/0106e3d0bf8a38351af45331cbf3b9172a6bb90b
Christian Brabandt <cb@256bit.org>
parents:
7833
diff
changeset
|
230 #endif |
800 | 231 |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
232 pum_array = array; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
233 pum_size = size; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
234 pum_compute_size(); |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
235 max_width = pum_base_width; |
800 | 236 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
237 // Calculate column |
28773
d770568e6c98
patch 8.2.4911: the mode #defines are not clearly named
Bram Moolenaar <Bram@vim.org>
parents:
28457
diff
changeset
|
238 if (State == MODE_CMDLINE) |
27626
95d6e3c9aa1e
patch 8.2.4339: CTRL-A does not work properly with the cmdline popup menu
Bram Moolenaar <Bram@vim.org>
parents:
27597
diff
changeset
|
239 // cmdline completion popup menu |
27597
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
26887
diff
changeset
|
240 cursor_col = cmdline_compl_startcol(); |
4eb2bf8b2f27
patch 8.2.4325: 'wildmenu' only shows few matches
Bram Moolenaar <Bram@vim.org>
parents:
26887
diff
changeset
|
241 else |
32202
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
242 { |
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
243 // w_wcol includes virtual text "above" |
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
244 int wcol = curwin->w_wcol % curwin->w_width; |
1344 | 245 #ifdef FEAT_RIGHTLEFT |
32202
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
246 if (right_left) |
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
247 cursor_col = curwin->w_wincol + curwin->w_width - wcol - 1; |
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
248 else |
1344 | 249 #endif |
32202
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
250 cursor_col = curwin->w_wincol + wcol; |
eae369cd4dcf
patch 9.0.1432: completion popup in wrong position with virtual text "above"
Bram Moolenaar <Bram@vim.org>
parents:
32146
diff
changeset
|
251 } |
1344 | 252 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
253 // if there are more items than room we need a scrollbar |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
254 if (pum_height < size) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
255 { |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
256 pum_scrollbar = 1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
257 ++max_width; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
258 } |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
259 else |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
260 pum_scrollbar = 0; |
800 | 261 |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
262 if (def_width < max_width) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
263 def_width = max_width; |
800 | 264 |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
265 if (((cursor_col < Columns - p_pw || cursor_col < Columns - max_width) |
1344 | 266 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
267 && !right_left) |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
268 || (right_left && (cursor_col > p_pw || cursor_col > max_width) |
1344 | 269 #endif |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
270 )) |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
271 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
272 // align pum with "cursor_col" |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
273 pum_col = cursor_col; |
1344 | 274 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
275 // start with the maximum space available |
1344 | 276 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
277 if (right_left) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
278 pum_width = pum_col - pum_scrollbar + 1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
279 else |
1344 | 280 #endif |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
281 pum_width = Columns - pum_col - pum_scrollbar; |
1344 | 282 |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
283 if (pum_width > max_width + pum_kind_width + pum_extra_width + 1 |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
284 && pum_width > p_pw) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
285 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
286 // the width is more than needed for the items, make it |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
287 // narrower |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
288 pum_width = max_width + pum_kind_width + pum_extra_width + 1; |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
289 if (pum_width < p_pw) |
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
290 pum_width = p_pw; |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
291 } |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
292 else if (((cursor_col > p_pw || cursor_col > max_width) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
293 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
294 && !right_left) |
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
295 || (right_left && (cursor_col < Columns - p_pw |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
296 || cursor_col < Columns - max_width) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
297 #endif |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
298 )) |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
299 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
300 // align pum edge with "cursor_col" |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
301 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
302 if (right_left |
13328
2c639a9a4def
patch 8.0.1538: popupmenu is too far left when completion is long
Christian Brabandt <cb@256bit.org>
parents:
13296
diff
changeset
|
303 && W_ENDCOL(curwin) < max_width + pum_scrollbar + 1) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
304 { |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
305 pum_col = cursor_col + max_width + pum_scrollbar + 1; |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
306 if (pum_col >= Columns) |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
307 pum_col = Columns - 1; |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
308 } |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
309 else if (!right_left) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
310 #endif |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
311 { |
13331
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
312 if (curwin->w_wincol > Columns - max_width - pum_scrollbar |
1ba4f926247c
patch 8.0.1540: popup menu positioning fails with longer string
Christian Brabandt <cb@256bit.org>
parents:
13328
diff
changeset
|
313 && max_width <= p_pw) |
13296
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
314 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
315 // use full width to end of the screen |
13296
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
316 pum_col = Columns - max_width - pum_scrollbar; |
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
317 if (pum_col < 0) |
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
318 pum_col = 0; |
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
319 } |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
320 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
321 |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
322 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
323 if (right_left) |
13296
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
324 pum_width = pum_col - pum_scrollbar + 1; |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
325 else |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
326 #endif |
13296
67345bc7fe31
patch 8.0.1522: popup menu is positioned in the wrong place
Christian Brabandt <cb@256bit.org>
parents:
13244
diff
changeset
|
327 pum_width = Columns - pum_col - pum_scrollbar; |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
328 |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
329 if (pum_width < p_pw) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
330 { |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
331 pum_width = p_pw; |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
332 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
333 if (right_left) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
334 { |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
335 if (pum_width > pum_col) |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
336 pum_width = pum_col; |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
337 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
338 else |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
339 #endif |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
340 { |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
341 if (pum_width >= Columns - pum_col) |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
342 pum_width = Columns - pum_col - 1; |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
343 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
344 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
345 else if (pum_width > max_width + pum_kind_width |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
346 + pum_extra_width + 1 |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
347 && pum_width > p_pw) |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
348 { |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
349 pum_width = max_width + pum_kind_width |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
350 + pum_extra_width + 1; |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
351 if (pum_width < p_pw) |
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
352 pum_width = p_pw; |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
353 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
354 } |
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
355 |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
356 } |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
357 else if (Columns < def_width) |
800 | 358 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
359 // not enough room, will use what we have |
1344 | 360 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
361 if (right_left) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
362 pum_col = Columns - 1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
363 else |
1344 | 364 #endif |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
365 pum_col = 0; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
366 pum_width = Columns - 1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
367 } |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
368 else |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
369 { |
13242
5b0faf628a55
patch 8.0.1495: having 'pumwidth' default to zero has no merit
Christian Brabandt <cb@256bit.org>
parents:
13234
diff
changeset
|
370 if (max_width > p_pw) |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
371 max_width = p_pw; // truncate |
1344 | 372 #ifdef FEAT_RIGHTLEFT |
28259
0f1a0bef2c02
patch 8.2.4655: cmdline completion popup menu positioned wrong
Bram Moolenaar <Bram@vim.org>
parents:
27626
diff
changeset
|
373 if (right_left) |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
374 pum_col = max_width - 1; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
375 else |
1344 | 376 #endif |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
377 pum_col = Columns - max_width; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
378 pum_width = max_width - pum_scrollbar; |
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
379 } |
800 | 380 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
381 // Set selected item and redraw. If the window size changed need to |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
382 // redo the positioning. Limit this to two times, when there is not |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
383 // much room the window size will keep changing. |
12566
33a900199c25
patch 8.0.1161: popup menu drawing problem when resizing terminal
Christian Brabandt <cb@256bit.org>
parents:
12515
diff
changeset
|
384 } while (pum_set_selected(selected, redo_count) && ++redo_count <= 2); |
22896
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
385 |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
386 pum_redraw(); |
800 | 387 } |
388 | |
389 /* | |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
390 * Set a flag that when pum_redraw() is called it first calls update_screen(). |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
391 * This will avoid clearing and redrawing the popup menu, prevent flicker. |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
392 */ |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
393 void |
32009
4545f58c8490
patch 9.0.1336: functions without arguments are not always declared properly
Bram Moolenaar <Bram@vim.org>
parents:
31778
diff
changeset
|
394 pum_call_update_screen(void) |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
395 { |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
396 call_update_screen = TRUE; |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
397 |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
398 // Update the cursor position to be able to compute the popup menu |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
399 // position. The cursor line length may have changed because of the |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
400 // inserted completion. |
15683
adc6442118b8
patch 8.1.0849: cursorline highlight is not always updated
Bram Moolenaar <Bram@vim.org>
parents:
15521
diff
changeset
|
401 curwin->w_valid &= ~(VALID_CROW|VALID_CHEIGHT); |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
402 validate_cursor(); |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
403 } |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
404 |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
405 /* |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
406 * Return TRUE if we are going to redraw the popup menu and the screen position |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
407 * "row"/"col" is under the popup menu. |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
408 */ |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
409 int |
26165
7b07f361b1d4
patch 8.2.3614: zindex of popup windows not used when redrawing popup menu
Bram Moolenaar <Bram@vim.org>
parents:
24551
diff
changeset
|
410 pum_under_menu(int row, int col, int only_redrawing) |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
411 { |
26165
7b07f361b1d4
patch 8.2.3614: zindex of popup windows not used when redrawing popup menu
Bram Moolenaar <Bram@vim.org>
parents:
24551
diff
changeset
|
412 return (!only_redrawing || pum_will_redraw) |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
413 && row >= pum_row |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
414 && row < pum_row + pum_height |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
415 && col >= pum_col - 1 |
24527
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
416 && col < pum_col + pum_width + pum_scrollbar; |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
417 } |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
418 |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
419 /* |
800 | 420 * Redraw the popup menu, using "pum_first" and "pum_selected". |
421 */ | |
422 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
423 pum_redraw(void) |
800 | 424 { |
425 int row = pum_row; | |
426 int col; | |
427 int attr_scroll = highlight_attr[HLF_PSB]; | |
428 int attr_thumb = highlight_attr[HLF_PST]; | |
429 int attr; | |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
430 int *attrs; // array used for highlights |
800 | 431 int i; |
432 int idx; | |
433 char_u *s; | |
434 char_u *p = NULL; | |
435 int totwidth, width, w; | |
436 int thumb_pos = 0; | |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
437 int thumb_height = 1; |
800 | 438 int round; |
439 int n; | |
440 | |
32146
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
441 int attrsNorm[3]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
442 int attrsSel[3]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
443 // "word" |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
444 attrsNorm[0] = highlight_attr[HLF_PNI]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
445 attrsSel[0] = highlight_attr[HLF_PSI]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
446 // "kind" |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
447 attrsNorm[1] = highlight_attr[HLF_PNK]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
448 attrsSel[1] = highlight_attr[HLF_PSK]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
449 // "extra text" |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
450 attrsNorm[2] = highlight_attr[HLF_PNX]; |
c21872825f23
patch 9.0.1404: compilation error with some compilers
Bram Moolenaar <Bram@vim.org>
parents:
32132
diff
changeset
|
451 attrsSel[2] = highlight_attr[HLF_PSX]; |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
452 |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
453 if (call_update_screen) |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
454 { |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
455 call_update_screen = FALSE; |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
456 // Do not redraw in pum_may_redraw() and don't draw in the area where |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
457 // the popup menu will be. |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
458 pum_will_redraw = TRUE; |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
459 update_screen(0); |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
460 pum_will_redraw = FALSE; |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
461 } |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
462 |
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
463 // never display more than we have |
5444 | 464 if (pum_first > pum_size - pum_height) |
465 pum_first = pum_size - pum_height; | |
466 | |
800 | 467 if (pum_scrollbar) |
468 { | |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
469 thumb_height = pum_height * pum_height / pum_size; |
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
470 if (thumb_height == 0) |
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
471 thumb_height = 1; |
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
472 thumb_pos = (pum_first * (pum_height - thumb_height) |
800 | 473 + (pum_size - pum_height) / 2) |
474 / (pum_size - pum_height); | |
475 } | |
476 | |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
477 #ifdef FEAT_PROP_POPUP |
16986
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
478 // The popup menu is drawn over popup menus with zindex under |
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
479 // POPUPMENU_ZINDEX. |
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
480 screen_zindex = POPUPMENU_ZINDEX; |
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
481 #endif |
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
482 |
800 | 483 for (i = 0; i < pum_height; ++i) |
484 { | |
485 idx = i + pum_first; | |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
486 attrs = (idx == pum_selected) ? attrsSel : attrsNorm; |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
487 attr = attrs[0]; // start with "word" highlight |
800 | 488 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
489 // prepend a space if there is room |
1344 | 490 #ifdef FEAT_RIGHTLEFT |
491 if (curwin->w_p_rl) | |
492 { | |
12515
972ea22c946f
patch 8.0.1136: W_WIDTH() is always the same
Christian Brabandt <cb@256bit.org>
parents:
12513
diff
changeset
|
493 if (pum_col < curwin->w_wincol + curwin->w_width - 1) |
1344 | 494 screen_putchar(' ', row, pum_col + 1, attr); |
495 } | |
496 else | |
497 #endif | |
498 if (pum_col > 0) | |
499 screen_putchar(' ', row, pum_col - 1, attr); | |
800 | 500 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
501 // Display each entry, use two spaces for a Tab. |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
502 // Do this 3 times: |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
503 // 0 - main text |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
504 // 1 - kind |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
505 // 2 - extra info |
800 | 506 col = pum_col; |
507 totwidth = 0; | |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
508 for (round = 0; round < 3; ++round) |
800 | 509 { |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
510 attr = attrs[round]; |
800 | 511 width = 0; |
512 s = NULL; | |
513 switch (round) | |
514 { | |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
515 case 0: p = pum_array[idx].pum_text; break; |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
516 case 1: p = pum_array[idx].pum_kind; break; |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
517 case 2: p = pum_array[idx].pum_extra; break; |
800 | 518 } |
519 if (p != NULL) | |
11127
506f5d8b7d8b
patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
11121
diff
changeset
|
520 for ( ; ; MB_PTR_ADV(p)) |
800 | 521 { |
522 if (s == NULL) | |
523 s = p; | |
524 w = ptr2cells(p); | |
525 if (*p == NUL || *p == TAB || totwidth + w > pum_width) | |
526 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
527 // Display the text that fits or comes before a Tab. |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
528 // First convert it to printable characters. |
1344 | 529 char_u *st; |
530 int saved = *p; | |
1097 | 531 |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
532 if (saved != NUL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
533 *p = NUL; |
1097 | 534 st = transstr(s); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
535 if (saved != NUL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
536 *p = saved; |
1344 | 537 #ifdef FEAT_RIGHTLEFT |
538 if (curwin->w_p_rl) | |
1097 | 539 { |
1344 | 540 if (st != NULL) |
541 { | |
542 char_u *rt = reverse_text(st); | |
543 | |
544 if (rt != NULL) | |
545 { | |
2056
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
546 char_u *rt_start = rt; |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
547 int size; |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
548 |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
549 size = vim_strsize(rt); |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
550 if (size > pum_width) |
1344 | 551 { |
2056
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
552 do |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
553 { |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
554 size -= has_mbyte |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
555 ? (*mb_ptr2cells)(rt) : 1; |
11127
506f5d8b7d8b
patch 8.0.0451: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
11121
diff
changeset
|
556 MB_PTR_ADV(rt); |
2056
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
557 } while (size > pum_width); |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
558 |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
559 if (size < pum_width) |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
560 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
561 // Most left character requires |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
562 // 2-cells but only 1 cell is |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
563 // available on screen. Put a |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
564 // '<' on the left of the pum |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
565 // item |
2056
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
566 *(--rt) = '<'; |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
567 size++; |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
568 } |
1344 | 569 } |
2056
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
570 screen_puts_len(rt, (int)STRLEN(rt), |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
571 row, col - size + 1, attr); |
e9e3355861ba
updated for version 7.2.342
Bram Moolenaar <bram@zimbu.org>
parents:
1743
diff
changeset
|
572 vim_free(rt_start); |
1344 | 573 } |
574 vim_free(st); | |
575 } | |
576 col -= width; | |
577 } | |
578 else | |
579 #endif | |
580 { | |
581 if (st != NULL) | |
582 { | |
22896
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
583 int size = (int)STRLEN(st); |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
584 int cells = (*mb_string2cells)(st, size); |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
585 |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
586 // only draw the text that fits |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
587 while (size > 0 |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
588 && col + cells > pum_width + pum_col) |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
589 { |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
590 --size; |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
591 if (has_mbyte) |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
592 { |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
593 size -= (*mb_head_off)(st, st + size); |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
594 cells -= (*mb_ptr2cells)(st + size); |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
595 } |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
596 else |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
597 --cells; |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
598 } |
6145a1232c3a
patch 8.2.1995: the popup menu can cause too much redrawing
Bram Moolenaar <Bram@vim.org>
parents:
22884
diff
changeset
|
599 screen_puts_len(st, size, row, col, attr); |
1344 | 600 vim_free(st); |
601 } | |
602 col += width; | |
1097 | 603 } |
800 | 604 |
605 if (*p != TAB) | |
606 break; | |
607 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
608 // Display two spaces for a Tab. |
1344 | 609 #ifdef FEAT_RIGHTLEFT |
610 if (curwin->w_p_rl) | |
611 { | |
612 screen_puts_len((char_u *)" ", 2, row, col - 1, | |
613 attr); | |
614 col -= 2; | |
615 } | |
616 else | |
617 #endif | |
618 { | |
619 screen_puts_len((char_u *)" ", 2, row, col, attr); | |
620 col += 2; | |
621 } | |
800 | 622 totwidth += 2; |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
623 s = NULL; // start text at next char |
800 | 624 width = 0; |
625 } | |
626 else | |
627 width += w; | |
628 } | |
629 | |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
630 if (round > 0) |
800 | 631 n = pum_kind_width + 1; |
632 else | |
633 n = 1; | |
634 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
635 // Stop when there is nothing more to display. |
32132
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
636 if (round == 2 |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
637 || (round == 1 && pum_array[idx].pum_extra == NULL) |
059e89bf9316
patch 9.0.1397: highlight for popupmenu kind and extra cannot be set
Bram Moolenaar <Bram@vim.org>
parents:
32009
diff
changeset
|
638 || (round == 0 && pum_array[idx].pum_kind == NULL |
800 | 639 && pum_array[idx].pum_extra == NULL) |
640 || pum_base_width + n >= pum_width) | |
641 break; | |
1344 | 642 #ifdef FEAT_RIGHTLEFT |
643 if (curwin->w_p_rl) | |
644 { | |
645 screen_fill(row, row + 1, pum_col - pum_base_width - n + 1, | |
646 col + 1, ' ', ' ', attr); | |
647 col = pum_col - pum_base_width - n + 1; | |
648 } | |
649 else | |
650 #endif | |
651 { | |
652 screen_fill(row, row + 1, col, pum_col + pum_base_width + n, | |
800 | 653 ' ', ' ', attr); |
1344 | 654 col = pum_col + pum_base_width + n; |
655 } | |
800 | 656 totwidth = pum_base_width + n; |
657 } | |
658 | |
1344 | 659 #ifdef FEAT_RIGHTLEFT |
660 if (curwin->w_p_rl) | |
661 screen_fill(row, row + 1, pum_col - pum_width + 1, col + 1, ' ', | |
662 ' ', attr); | |
663 else | |
664 #endif | |
665 screen_fill(row, row + 1, col, pum_col + pum_width, ' ', ' ', | |
666 attr); | |
800 | 667 if (pum_scrollbar > 0) |
1344 | 668 { |
669 #ifdef FEAT_RIGHTLEFT | |
670 if (curwin->w_p_rl) | |
671 screen_putchar(' ', row, pum_col - pum_width, | |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
672 i >= thumb_pos && i < thumb_pos + thumb_height |
800 | 673 ? attr_thumb : attr_scroll); |
1344 | 674 else |
675 #endif | |
676 screen_putchar(' ', row, pum_col + pum_width, | |
15967
ddd82b1c9e9d
patch 8.1.0989: various small code ugliness
Bram Moolenaar <Bram@vim.org>
parents:
15683
diff
changeset
|
677 i >= thumb_pos && i < thumb_pos + thumb_height |
1344 | 678 ? attr_thumb : attr_scroll); |
679 } | |
800 | 680 |
681 ++row; | |
682 } | |
16986
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
683 |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
684 #ifdef FEAT_PROP_POPUP |
16986
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
685 screen_zindex = 0; |
03f3a9ca2770
patch 8.1.1493: redrawing with popups is slow and causes flicker
Bram Moolenaar <Bram@vim.org>
parents:
16845
diff
changeset
|
686 #endif |
800 | 687 } |
688 | |
18767
068337e86133
patch 8.1.2373: cannot build with +popupwin but without +quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
689 #if (defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX)) || defined(PROTO) |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
690 /* |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
691 * Position the info popup relative to the popup menu item. |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
692 */ |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
693 void |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
694 pum_position_info_popup(win_T *wp) |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
695 { |
18665
7369756d05de
patch 8.1.2324: with of scrollbar in popup menu not taken into account
Bram Moolenaar <Bram@vim.org>
parents:
18560
diff
changeset
|
696 int col = pum_col + pum_width + pum_scrollbar + 1; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
697 int row = pum_row; |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
698 int botpos = POPPOS_BOTLEFT; |
21377
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
699 int used_maxwidth_opt = FALSE; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
700 |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
701 wp->w_popup_pos = POPPOS_TOPLEFT; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
702 if (Columns - col < 20 && Columns - col < pum_col) |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
703 { |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
704 col = pum_col - 1; |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
705 wp->w_popup_pos = POPPOS_TOPRIGHT; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
706 botpos = POPPOS_BOTRIGHT; |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
707 wp->w_maxwidth = pum_col - 1; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
708 } |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
709 else |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
710 wp->w_maxwidth = Columns - col + 1; |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
711 wp->w_maxwidth -= popup_extra_width(wp); |
21377
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
712 if (wp->w_maxwidth_opt > 0 && wp->w_maxwidth > wp->w_maxwidth_opt) |
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
713 { |
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
714 // option value overrules computed value |
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
715 wp->w_maxwidth = wp->w_maxwidth_opt; |
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
716 used_maxwidth_opt = TRUE; |
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
717 } |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
718 |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
719 row -= popup_top_extra(wp); |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
720 if (wp->w_popup_flags & POPF_INFO_MENU) |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
721 { |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
722 if (pum_row < pum_win_row) |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
723 { |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
724 // menu above cursor line, align with bottom |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
725 row += pum_height; |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
726 wp->w_popup_pos = botpos; |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
727 } |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
728 else |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
729 // menu below cursor line, align with top |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
730 row += 1; |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
731 } |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
732 else |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
733 // align with the selected item |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
734 row += pum_selected - pum_first + 1; |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
735 |
18823
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
736 wp->w_popup_flags &= ~POPF_HIDDEN; |
21377
47f25a0c5a42
patch 8.2.1239: "maxwidth" in 'completepopup' not obeyed
Bram Moolenaar <Bram@vim.org>
parents:
20599
diff
changeset
|
737 if (wp->w_maxwidth < 10 && !used_maxwidth_opt) |
18823
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
738 // The popup is not going to fit or will overlap with the cursor |
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
739 // position, hide the popup. |
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
740 wp->w_popup_flags |= POPF_HIDDEN; |
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
741 else |
ae2bd5ec98d0
patch 8.1.2399: info popup on top of cursor if it doesn't fit
Bram Moolenaar <Bram@vim.org>
parents:
18812
diff
changeset
|
742 popup_set_wantpos_rowcol(wp, row, col); |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
743 } |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
744 #endif |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
745 |
800 | 746 /* |
747 * Set the index of the currently selected item. The menu will scroll when | |
748 * necessary. When "n" is out of range don't scroll. | |
838 | 749 * This may be repeated when the preview window is used: |
750 * "repeat" == 0: open preview window normally | |
751 * "repeat" == 1: open preview window but don't set the size | |
752 * "repeat" == 2: don't open preview window | |
800 | 753 * Returns TRUE when the window was resized and the location of the popup menu |
754 * must be recomputed. | |
755 */ | |
756 static int | |
17813
8ca20b0a3dc3
patch 8.1.1903: cannot build without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
17811
diff
changeset
|
757 pum_set_selected(int n, int repeat UNUSED) |
800 | 758 { |
759 int resized = FALSE; | |
760 int context = pum_height / 2; | |
17799
87c5c07a4cac
patch 8.1.1896: compiler warning for unused variable
Bram Moolenaar <Bram@vim.org>
parents:
17775
diff
changeset
|
761 #ifdef FEAT_QUICKFIX |
17775
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
762 int prev_selected = pum_selected; |
17799
87c5c07a4cac
patch 8.1.1896: compiler warning for unused variable
Bram Moolenaar <Bram@vim.org>
parents:
17775
diff
changeset
|
763 #endif |
18767
068337e86133
patch 8.1.2373: cannot build with +popupwin but without +quickfix
Bram Moolenaar <Bram@vim.org>
parents:
18763
diff
changeset
|
764 #if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
765 int has_info = FALSE; |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
766 #endif |
800 | 767 |
768 pum_selected = n; | |
769 | |
770 if (pum_selected >= 0 && pum_selected < pum_size) | |
771 { | |
772 if (pum_first > pum_selected - 4) | |
773 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
774 // scroll down; when we did a jump it's probably a PageUp then |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
775 // scroll a whole page |
800 | 776 if (pum_first > pum_selected - 2) |
777 { | |
778 pum_first -= pum_height - 2; | |
779 if (pum_first < 0) | |
780 pum_first = 0; | |
781 else if (pum_first > pum_selected) | |
782 pum_first = pum_selected; | |
783 } | |
784 else | |
785 pum_first = pum_selected; | |
786 } | |
787 else if (pum_first < pum_selected - pum_height + 5) | |
788 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
789 // scroll up; when we did a jump it's probably a PageDown then |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
790 // scroll a whole page |
800 | 791 if (pum_first < pum_selected - pum_height + 1 + 2) |
792 { | |
793 pum_first += pum_height - 2; | |
794 if (pum_first < pum_selected - pum_height + 1) | |
795 pum_first = pum_selected - pum_height + 1; | |
796 } | |
797 else | |
798 pum_first = pum_selected - pum_height + 1; | |
799 } | |
800 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
801 // Give a few lines of context when possible. |
800 | 802 if (context > 3) |
803 context = 3; | |
804 if (pum_height > 2) | |
805 { | |
806 if (pum_first > pum_selected - context) | |
807 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
808 // scroll down |
800 | 809 pum_first = pum_selected - context; |
810 if (pum_first < 0) | |
811 pum_first = 0; | |
812 } | |
813 else if (pum_first < pum_selected + context - pum_height + 1) | |
814 { | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
815 // scroll up |
800 | 816 pum_first = pum_selected + context - pum_height + 1; |
817 } | |
818 } | |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
819 // adjust for the number of lines displayed |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
820 if (pum_first > pum_size - pum_height) |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
821 pum_first = pum_size - pum_height; |
800 | 822 |
12477
68d7bc045dbe
patch 8.0.1118: FEAT_WINDOWS adds a lot of #ifdefs
Christian Brabandt <cb@256bit.org>
parents:
11127
diff
changeset
|
823 #if defined(FEAT_QUICKFIX) |
816 | 824 /* |
825 * Show extra info in the preview window if there is something and | |
18665
7369756d05de
patch 8.1.2324: with of scrollbar in popup menu not taken into account
Bram Moolenaar <Bram@vim.org>
parents:
18560
diff
changeset
|
826 * 'completeopt' contains "preview" or "popup" or "popuphidden". |
838 | 827 * Skip this when tried twice already. |
828 * Skip this also when there is not much room. | |
816 | 829 * NOTE: Be very careful not to sync undo! |
830 */ | |
800 | 831 if (pum_array[pum_selected].pum_info != NULL |
838 | 832 && Rows > 10 |
833 && repeat <= 1 | |
834 && vim_strchr(p_cot, 'p') != NULL) | |
800 | 835 { |
836 win_T *curwin_save = curwin; | |
12690
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
837 tabpage_T *curtab_save = curtab; |
800 | 838 int res = OK; |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
839 # ifdef FEAT_PROP_POPUP |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
840 use_popup_T use_popup; |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
841 # else |
18759
592c7b56db69
patch 8.1.2369: cannot build with quickfix and without text properties
Bram Moolenaar <Bram@vim.org>
parents:
18667
diff
changeset
|
842 # define use_popup USEPOPUP_NONE |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
843 # endif |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
844 # ifdef FEAT_PROP_POPUP |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
845 has_info = TRUE; |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
846 if (strstr((char *)p_cot, "popuphidden") != NULL) |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
847 use_popup = USEPOPUP_HIDDEN; |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
848 else if (strstr((char *)p_cot, "popup") != NULL) |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
849 use_popup = USEPOPUP_NORMAL; |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
850 else |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
851 use_popup = USEPOPUP_NONE; |
22884
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
852 if (use_popup != USEPOPUP_NONE) |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
853 // don't use WinEnter or WinLeave autocommands for the info |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
854 // popup |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
855 block_autocmds(); |
17950
bb0e25a8b5d7
patch 8.1.1971: manually enabling features causes build errors
Bram Moolenaar <Bram@vim.org>
parents:
17819
diff
changeset
|
856 # endif |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
857 // Open a preview window and set "curwin" to it. |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
858 // 3 lines by default, prefer 'previewheight' if set and smaller. |
800 | 859 g_do_tagpreview = 3; |
2622 | 860 if (p_pvh > 0 && p_pvh < g_do_tagpreview) |
861 g_do_tagpreview = p_pvh; | |
6043 | 862 ++RedrawingDisabled; |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
863 // Prevent undo sync here, if an autocommand syncs undo weird |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
864 // things can happen to the undo tree. |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
865 ++no_u_sync; |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
866 resized = prepare_tagpreview(FALSE, FALSE, use_popup); |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
867 --no_u_sync; |
6043 | 868 --RedrawingDisabled; |
800 | 869 g_do_tagpreview = 0; |
870 | |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
871 if (curwin->w_p_pvw |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
872 # ifdef FEAT_PROP_POPUP |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
873 || (curwin->w_popup_flags & POPF_INFO) |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
874 # endif |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
875 ) |
800 | 876 { |
10302
210af8588e8a
commit https://github.com/vim/vim/commit/50e5376926dc2ec4a26a7a16f8f0f3213c4afdf0
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
877 if (!resized |
210af8588e8a
commit https://github.com/vim/vim/commit/50e5376926dc2ec4a26a7a16f8f0f3213c4afdf0
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
878 && curbuf->b_nwindows == 1 |
210af8588e8a
commit https://github.com/vim/vim/commit/50e5376926dc2ec4a26a7a16f8f0f3213c4afdf0
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
879 && curbuf->b_fname == NULL |
17095
10e0d7d96cb0
patch 8.1.1547: functionality of bt_nofile() is confusing
Bram Moolenaar <Bram@vim.org>
parents:
16986
diff
changeset
|
880 && bt_nofile(curbuf) |
800 | 881 && curbuf->b_p_bh[0] == 'w') |
882 { | |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
883 // Already a "wipeout" buffer, make it empty. |
11121
778c10516955
patch 8.0.0448: some macros are in lower case
Christian Brabandt <cb@256bit.org>
parents:
10410
diff
changeset
|
884 while (!BUFEMPTY()) |
20599
d571231175b4
patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents:
20392
diff
changeset
|
885 ml_delete((linenr_T)1); |
800 | 886 } |
825 | 887 else |
800 | 888 { |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
889 // Don't want to sync undo in the current buffer. |
825 | 890 ++no_u_sync; |
1743 | 891 res = do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, 0, NULL); |
825 | 892 --no_u_sync; |
893 if (res == OK) | |
894 { | |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
895 // Edit a new, empty buffer. Set options for a "wipeout" |
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
896 // buffer. |
28457
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
897 set_option_value_give_err((char_u *)"swf", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
898 0L, NULL, OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
899 set_option_value_give_err((char_u *)"bl", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
900 0L, NULL, OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
901 set_option_value_give_err((char_u *)"bt", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
902 0L, (char_u *)"nofile", OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
903 set_option_value_give_err((char_u *)"bh", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
904 0L, (char_u *)"wipe", OPT_LOCAL); |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
905 set_option_value_give_err((char_u *)"diff", |
4dcccb2673fe
patch 8.2.4753: error from setting an option is silently ignored
Bram Moolenaar <Bram@vim.org>
parents:
28259
diff
changeset
|
906 0L, NULL, OPT_LOCAL); |
825 | 907 } |
800 | 908 } |
909 if (res == OK) | |
910 { | |
911 char_u *p, *e; | |
912 linenr_T lnum = 0; | |
913 | |
914 for (p = pum_array[pum_selected].pum_info; *p != NUL; ) | |
915 { | |
916 e = vim_strchr(p, '\n'); | |
917 if (e == NULL) | |
918 { | |
919 ml_append(lnum++, p, 0, FALSE); | |
920 break; | |
921 } | |
922 else | |
923 { | |
924 *e = NUL; | |
835 | 925 ml_append(lnum++, p, (int)(e - p + 1), FALSE); |
800 | 926 *e = '\n'; |
927 p = e + 1; | |
928 } | |
929 } | |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
930 // delete the empty last line |
20599
d571231175b4
patch 8.2.0853: ml_delete() often called with FALSE argument
Bram Moolenaar <Bram@vim.org>
parents:
20392
diff
changeset
|
931 ml_delete(curbuf->b_ml.ml_line_count); |
800 | 932 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
933 // Increase the height of the preview window to show the |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
934 // text, but no more than 'previewheight' lines. |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
935 if (repeat == 0 && use_popup == USEPOPUP_NONE) |
800 | 936 { |
838 | 937 if (lnum > p_pvh) |
938 lnum = p_pvh; | |
939 if (curwin->w_height < lnum) | |
940 { | |
941 win_setheight((int)lnum); | |
942 resized = TRUE; | |
943 } | |
800 | 944 } |
945 | |
946 curbuf->b_changed = 0; | |
947 curbuf->b_p_ma = FALSE; | |
17775
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
948 if (pum_selected != prev_selected) |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
949 { |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
950 # ifdef FEAT_PROP_POPUP |
17775
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
951 curwin->w_firstline = 1; |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
952 # endif |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
953 curwin->w_topline = 1; |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
954 } |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
955 else if (curwin->w_topline > curbuf->b_ml.ml_line_count) |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
956 curwin->w_topline = curbuf->b_ml.ml_line_count; |
b423bd231f33
patch 8.1.1884: cannot use mouse scroll wheel in popup in Insert mode
Bram Moolenaar <Bram@vim.org>
parents:
17767
diff
changeset
|
957 curwin->w_cursor.lnum = curwin->w_topline; |
800 | 958 curwin->w_cursor.col = 0; |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
959 # ifdef FEAT_PROP_POPUP |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
960 if (use_popup != USEPOPUP_NONE) |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
961 { |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
962 pum_position_info_popup(curwin); |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
963 if (win_valid(curwin_save)) |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29469
diff
changeset
|
964 redraw_win_later(curwin_save, UPD_SOME_VALID); |
17819
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
965 } |
1f74a3c600a3
patch 8.1.1906: info popup size is sometimes incorrect
Bram Moolenaar <Bram@vim.org>
parents:
17817
diff
changeset
|
966 # endif |
12690
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
967 if ((curwin != curwin_save && win_valid(curwin_save)) |
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
968 || (curtab != curtab_save |
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
969 && valid_tabpage(curtab_save))) |
800 | 970 { |
24551
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
971 int save_redr_status; |
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
972 |
12690
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
973 if (curtab != curtab_save && valid_tabpage(curtab_save)) |
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
974 goto_tabpage_tp(curtab_save, FALSE, FALSE); |
fad36581f788
patch 8.0.1223: crash when using autocomplete and tab pages
Christian Brabandt <cb@256bit.org>
parents:
12566
diff
changeset
|
975 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
976 // When the first completion is done and the preview |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
977 // window is not resized, skip the preview window's |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
978 // status line redrawing. |
6089 | 979 if (ins_compl_active() && !resized) |
980 curwin->w_redr_status = FALSE; | |
981 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
982 // Return cursor to where we were |
800 | 983 validate_cursor(); |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29469
diff
changeset
|
984 redraw_later(UPD_SOME_VALID); |
800 | 985 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
986 // When the preview window was resized we need to |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
987 // update the view on the buffer. Only go back to |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
988 // the window when needed, otherwise it will always be |
18900
a9c47c623f4a
patch 8.2.0011: screen updating wrong when opeing preview window
Bram Moolenaar <Bram@vim.org>
parents:
18892
diff
changeset
|
989 // redrawn. |
17706
431d52b7f7d3
patch 8.1.1850: focus may remain in popup window
Bram Moolenaar <Bram@vim.org>
parents:
17292
diff
changeset
|
990 if (resized && win_valid(curwin_save)) |
800 | 991 { |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
992 ++no_u_sync; |
800 | 993 win_enter(curwin_save, TRUE); |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
994 --no_u_sync; |
800 | 995 update_topline(); |
996 } | |
997 | |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
998 // Update the screen before drawing the popup menu. |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
999 // Enable updating the status lines. |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1000 pum_pretend_not_visible = TRUE; |
24551
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1001 |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1002 // But don't draw text at the new popup menu position, |
18900
a9c47c623f4a
patch 8.2.0011: screen updating wrong when opeing preview window
Bram Moolenaar <Bram@vim.org>
parents:
18892
diff
changeset
|
1003 // it causes flicker. When resizing we need to draw |
a9c47c623f4a
patch 8.2.0011: screen updating wrong when opeing preview window
Bram Moolenaar <Bram@vim.org>
parents:
18892
diff
changeset
|
1004 // anyway, the position may change later. |
24551
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1005 // Also do not redraw the status line of the original |
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1006 // current window here, to avoid it gets drawn with |
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1007 // StatusLineNC for a moment and cause flicker. |
18900
a9c47c623f4a
patch 8.2.0011: screen updating wrong when opeing preview window
Bram Moolenaar <Bram@vim.org>
parents:
18892
diff
changeset
|
1008 pum_will_redraw = !resized; |
24551
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1009 save_redr_status = curwin_save->w_redr_status; |
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1010 curwin_save->w_redr_status = FALSE; |
800 | 1011 update_screen(0); |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1012 pum_pretend_not_visible = FALSE; |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1013 pum_will_redraw = FALSE; |
24551
aa04faf1590d
patch 8.2.2815: status line flickers when redrawing popup menu info
Bram Moolenaar <Bram@vim.org>
parents:
24527
diff
changeset
|
1014 curwin_save->w_redr_status = save_redr_status; |
800 | 1015 |
816 | 1016 if (!resized && win_valid(curwin_save)) |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
1017 { |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
1018 # ifdef FEAT_PROP_POPUP |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
1019 win_T *wp = curwin; |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
1020 # endif |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
1021 ++no_u_sync; |
800 | 1022 win_enter(curwin_save, TRUE); |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
1023 --no_u_sync; |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
1024 # ifdef FEAT_PROP_POPUP |
18396
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
1025 if (use_popup == USEPOPUP_HIDDEN && win_valid(wp)) |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
1026 popup_hide(wp); |
ba5d8c5d77d7
patch 8.1.2192: cannot easily fill the info popup asynchronously
Bram Moolenaar <Bram@vim.org>
parents:
18251
diff
changeset
|
1027 # endif |
7181
ce8b286e89ef
commit https://github.com/vim/vim/commit/e7d1376b636e6c758196c3542bd2c1053f9edb75
Christian Brabandt <cb@256bit.org>
parents:
6089
diff
changeset
|
1028 } |
800 | 1029 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1030 // May need to update the screen again when there are |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1031 // autocommands involved. |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1032 pum_pretend_not_visible = TRUE; |
18900
a9c47c623f4a
patch 8.2.0011: screen updating wrong when opeing preview window
Bram Moolenaar <Bram@vim.org>
parents:
18892
diff
changeset
|
1033 pum_will_redraw = !resized; |
800 | 1034 update_screen(0); |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1035 pum_pretend_not_visible = FALSE; |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1036 pum_will_redraw = FALSE; |
15521
6d949e552e99
patch 8.1.0768: updating completions may cause the popup menu to flicker
Bram Moolenaar <Bram@vim.org>
parents:
15470
diff
changeset
|
1037 call_update_screen = FALSE; |
800 | 1038 } |
1039 } | |
1040 } | |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
1041 # if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) |
17706
431d52b7f7d3
patch 8.1.1850: focus may remain in popup window
Bram Moolenaar <Bram@vim.org>
parents:
17292
diff
changeset
|
1042 if (WIN_IS_POPUP(curwin)) |
431d52b7f7d3
patch 8.1.1850: focus may remain in popup window
Bram Moolenaar <Bram@vim.org>
parents:
17292
diff
changeset
|
1043 // can't keep focus in a popup window |
431d52b7f7d3
patch 8.1.1850: focus may remain in popup window
Bram Moolenaar <Bram@vim.org>
parents:
17292
diff
changeset
|
1044 win_enter(firstwin, TRUE); |
431d52b7f7d3
patch 8.1.1850: focus may remain in popup window
Bram Moolenaar <Bram@vim.org>
parents:
17292
diff
changeset
|
1045 # endif |
22884
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
1046 # ifdef FEAT_PROP_POPUP |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
1047 if (use_popup != USEPOPUP_NONE) |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
1048 unblock_autocmds(); |
68dc849715b5
patch 8.2.1989: info popup triggers WinEnter and WinLeave autocommands
Bram Moolenaar <Bram@vim.org>
parents:
21377
diff
changeset
|
1049 # endif |
800 | 1050 } |
1051 #endif | |
1052 } | |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
1053 #if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
1054 if (!has_info) |
17817
e8a7029efa40
patch 8.1.1905: cannot set all properties of the info popup
Bram Moolenaar <Bram@vim.org>
parents:
17815
diff
changeset
|
1055 // hide any popup info window |
e8a7029efa40
patch 8.1.1905: cannot set all properties of the info popup
Bram Moolenaar <Bram@vim.org>
parents:
17815
diff
changeset
|
1056 popup_hide_info(); |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1057 #endif |
800 | 1058 |
1059 return resized; | |
1060 } | |
1061 | |
1062 /* | |
1063 * Undisplay the popup menu (later). | |
1064 */ | |
1065 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1066 pum_undisplay(void) |
800 | 1067 { |
1068 pum_array = NULL; | |
29732
89e1d67814a9
patch 9.0.0206: redraw flags are not named specifically
Bram Moolenaar <Bram@vim.org>
parents:
29469
diff
changeset
|
1069 redraw_all_later(UPD_NOT_VALID); |
940 | 1070 redraw_tabline = TRUE; |
32297
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1071 if (pum_in_cmdline) |
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1072 { |
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1073 clear_cmdline = TRUE; |
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1074 pum_in_cmdline = FALSE; |
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1075 } |
800 | 1076 status_redraw_all(); |
18763
49b78d6465e5
patch 8.1.2371: FEAT_TEXT_PROP is a confusing name
Bram Moolenaar <Bram@vim.org>
parents:
18759
diff
changeset
|
1077 #if defined(FEAT_PROP_POPUP) && defined(FEAT_QUICKFIX) |
17817
e8a7029efa40
patch 8.1.1905: cannot set all properties of the info popup
Bram Moolenaar <Bram@vim.org>
parents:
17815
diff
changeset
|
1078 // hide any popup info window |
e8a7029efa40
patch 8.1.1905: cannot set all properties of the info popup
Bram Moolenaar <Bram@vim.org>
parents:
17815
diff
changeset
|
1079 popup_hide_info(); |
17767
c75da1064e33
patch 8.1.1880: cannot show extra info for completion in a popup window
Bram Moolenaar <Bram@vim.org>
parents:
17706
diff
changeset
|
1080 #endif |
800 | 1081 } |
1082 | |
1083 /* | |
1084 * Clear the popup menu. Currently only resets the offset to the first | |
1085 * displayed item. | |
1086 */ | |
1087 void | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1088 pum_clear(void) |
800 | 1089 { |
1090 pum_first = 0; | |
1091 } | |
1092 | |
1093 /* | |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1094 * Return TRUE if the popup menu is displayed. Used to avoid some redrawing |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1095 * that could overwrite it. Overruled when "pum_pretend_not_visible" is set, |
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1096 * used to redraw the status lines. |
800 | 1097 */ |
1098 int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1099 pum_visible(void) |
800 | 1100 { |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1101 return !pum_pretend_not_visible && pum_array != NULL; |
800 | 1102 } |
1103 | |
1104 /* | |
24527
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1105 * Return TRUE if the popup can be redrawn in the same position. |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1106 */ |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1107 static int |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1108 pum_in_same_position(void) |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1109 { |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1110 return pum_window != curwin |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1111 || (pum_win_row == curwin->w_wrow + W_WINROW(curwin) |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1112 && pum_win_height == curwin->w_height |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1113 && pum_win_col == curwin->w_wincol |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1114 && pum_win_width == curwin->w_width); |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1115 } |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1116 |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1117 /* |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1118 * Return TRUE when pum_may_redraw() will call pum_redraw(). |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1119 * This means that the pum area should not be overwritten to avoid flicker. |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1120 */ |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1121 int |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1122 pum_redraw_in_same_position(void) |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1123 { |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1124 if (!pum_visible() || pum_will_redraw) |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1125 return FALSE; // nothing to do |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1126 |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1127 return pum_in_same_position(); |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1128 } |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1129 |
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1130 /* |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1131 * Reposition the popup menu to adjust for window layout changes. |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1132 */ |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1133 void |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1134 pum_may_redraw(void) |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1135 { |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1136 pumitem_T *array = pum_array; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1137 int len = pum_size; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1138 int selected = pum_selected; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1139 |
18858
539c05ea2d3a
patch 8.1.2415: popup menu flickers if an info popup is used
Bram Moolenaar <Bram@vim.org>
parents:
18823
diff
changeset
|
1140 if (!pum_visible() || pum_will_redraw) |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1141 return; // nothing to do |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1142 |
24527
a878e5e892cf
patch 8.2.2803: flicker when the popup menu has an info popup
Bram Moolenaar <Bram@vim.org>
parents:
23328
diff
changeset
|
1143 if (pum_in_same_position()) |
14089
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1144 { |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1145 // window position didn't change, redraw in the same position |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1146 pum_redraw(); |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1147 } |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1148 else |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1149 { |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1150 int wcol = curwin->w_wcol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1151 |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1152 // Window layout changed, recompute the position. |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1153 // Use the remembered w_wcol value, the cursor may have moved when a |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1154 // completion was inserted, but we want the menu in the same position. |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1155 pum_undisplay(); |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1156 curwin->w_wcol = pum_win_wcol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1157 curwin->w_valid |= VALID_WCOL; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1158 pum_display(array, len, selected); |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1159 curwin->w_wcol = wcol; |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1160 } |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1161 } |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1162 |
ae53a9274f50
patch 8.1.0062: popup menu broken if a callback changes the window layout
Christian Brabandt <cb@256bit.org>
parents:
13944
diff
changeset
|
1163 /* |
800 | 1164 * Return the height of the popup menu, the number of entries visible. |
1165 * Only valid when pum_visible() returns TRUE! | |
1166 */ | |
1167 int | |
7833
c079097365f3
commit https://github.com/vim/vim/commit/055409764ca5f7978d4c399d2c440af0ce971c4f
Christian Brabandt <cb@256bit.org>
parents:
7805
diff
changeset
|
1168 pum_get_height(void) |
800 | 1169 { |
1170 return pum_height; | |
1171 } | |
1172 | |
17813
8ca20b0a3dc3
patch 8.1.1903: cannot build without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
17811
diff
changeset
|
1173 #if defined(FEAT_EVAL) || defined(PROTO) |
16268
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1174 /* |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1175 * Add size information about the pum to "dict". |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1176 */ |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1177 void |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1178 pum_set_event_info(dict_T *dict) |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1179 { |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1180 if (!pum_visible()) |
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1181 return; |
19673
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1182 (void)dict_add_number(dict, "height", pum_height); |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1183 (void)dict_add_number(dict, "width", pum_width); |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1184 (void)dict_add_number(dict, "row", pum_row); |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1185 (void)dict_add_number(dict, "col", pum_col); |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1186 (void)dict_add_number(dict, "size", pum_size); |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1187 (void)dict_add_bool(dict, "scrollbar", |
62ea983a9cb4
patch 8.2.0393: Coverity warns for not using return value
Bram Moolenaar <Bram@vim.org>
parents:
19201
diff
changeset
|
1188 pum_scrollbar ? VVAL_TRUE : VVAL_FALSE); |
16268
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1189 } |
17813
8ca20b0a3dc3
patch 8.1.1903: cannot build without the +eval feature
Bram Moolenaar <Bram@vim.org>
parents:
17811
diff
changeset
|
1190 #endif |
16268
0f65f2808470
patch 8.1.1138: plugins don't get notified when the popup menu changes
Bram Moolenaar <Bram@vim.org>
parents:
15967
diff
changeset
|
1191 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1192 #if defined(FEAT_BEVAL_TERM) || defined(FEAT_TERM_POPUP_MENU) || defined(PROTO) |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1193 static void |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1194 pum_position_at_mouse(int min_width) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1195 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1196 if (Rows - mouse_row > pum_size) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1197 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1198 // Enough space below the mouse row. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1199 pum_row = mouse_row + 1; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1200 if (pum_height > Rows - pum_row) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1201 pum_height = Rows - pum_row; |
32297
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1202 if (pum_row + pum_height > cmdline_row) |
64e6e523d32d
patch 9.0.1480: using popup menu may leave text in the command line
Bram Moolenaar <Bram@vim.org>
parents:
32202
diff
changeset
|
1203 pum_in_cmdline = TRUE; |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1204 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1205 else |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1206 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1207 // Show above the mouse row, reduce height if it does not fit. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1208 pum_row = mouse_row - pum_size; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1209 if (pum_row < 0) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1210 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1211 pum_height += pum_row; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1212 pum_row = 0; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1213 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1214 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1215 if (Columns - mouse_col >= pum_base_width |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1216 || Columns - mouse_col > min_width) |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1217 // Enough space to show at mouse column. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1218 pum_col = mouse_col; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1219 else |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1220 // Not enough space, right align with window. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1221 pum_col = Columns - (pum_base_width > min_width |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1222 ? min_width : pum_base_width); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1223 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1224 pum_width = Columns - pum_col; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1225 if (pum_width > pum_base_width + 1) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1226 pum_width = pum_base_width + 1; |
14095
f452c4aeb837
patch 8.1.0065: balloon displayed at the wrong position
Christian Brabandt <cb@256bit.org>
parents:
14089
diff
changeset
|
1227 |
f452c4aeb837
patch 8.1.0065: balloon displayed at the wrong position
Christian Brabandt <cb@256bit.org>
parents:
14089
diff
changeset
|
1228 // Do not redraw at cursor position. |
f452c4aeb837
patch 8.1.0065: balloon displayed at the wrong position
Christian Brabandt <cb@256bit.org>
parents:
14089
diff
changeset
|
1229 pum_window = NULL; |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1230 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1231 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1232 #endif |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1233 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1234 #if defined(FEAT_BEVAL_TERM) || defined(PROTO) |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1235 static pumitem_T *balloon_array = NULL; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1236 static int balloon_arraysize; |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1237 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1238 # define BALLOON_MIN_WIDTH 50 |
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1239 # define BALLOON_MIN_HEIGHT 10 |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1240 |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1241 typedef struct { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1242 char_u *start; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1243 int bytelen; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1244 int cells; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1245 int indent; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1246 } balpart_T; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1247 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1248 /* |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1249 * Split a string into parts to display in the balloon. |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1250 * Aimed at output from gdb. Attempts to split at white space, preserve quoted |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1251 * strings and make a struct look good. |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1252 * Resulting array is stored in "array" and returns the size of the array. |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1253 */ |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1254 int |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1255 split_message(char_u *mesg, pumitem_T **array) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1256 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1257 garray_T ga; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1258 char_u *p; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1259 balpart_T *item; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1260 int quoted = FALSE; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1261 int height; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1262 int line; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1263 int item_idx; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1264 int indent = 0; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1265 int max_cells = 0; |
18560
81272918c0ea
patch 8.1.2274: newlines in 'balloonexpr' result only work in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
18396
diff
changeset
|
1266 int max_height = Rows / 2 - 1; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1267 int long_item_count = 0; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1268 int split_long_items = FALSE; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1269 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1270 ga_init2(&ga, sizeof(balpart_T), 20); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1271 p = mesg; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1272 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1273 while (*p != NUL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1274 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1275 if (ga_grow(&ga, 1) == FAIL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1276 goto failed; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1277 item = ((balpart_T *)ga.ga_data) + ga.ga_len; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1278 item->start = p; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1279 item->indent = indent; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1280 item->cells = indent * 2; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1281 ++ga.ga_len; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1282 while (*p != NUL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1283 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1284 if (*p == '"') |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1285 quoted = !quoted; |
18560
81272918c0ea
patch 8.1.2274: newlines in 'balloonexpr' result only work in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
18396
diff
changeset
|
1286 else if (*p == '\n') |
81272918c0ea
patch 8.1.2274: newlines in 'balloonexpr' result only work in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
18396
diff
changeset
|
1287 break; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1288 else if (*p == '\\' && p[1] != NUL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1289 ++p; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1290 else if (!quoted) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1291 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1292 if ((*p == ',' && p[1] == ' ') || *p == '{' || *p == '}') |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1293 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1294 // Looks like a good point to break. |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1295 if (*p == '{') |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1296 ++indent; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1297 else if (*p == '}' && indent > 0) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1298 --indent; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1299 ++item->cells; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1300 p = skipwhite(p + 1); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1301 break; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1302 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1303 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1304 item->cells += ptr2cells(p); |
18251
c8a53c0daeed
patch 8.1.2120: some MB_ macros are more complicated than necessary
Bram Moolenaar <Bram@vim.org>
parents:
18174
diff
changeset
|
1305 p += mb_ptr2len(p); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1306 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1307 item->bytelen = p - item->start; |
18560
81272918c0ea
patch 8.1.2274: newlines in 'balloonexpr' result only work in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
18396
diff
changeset
|
1308 if (*p == '\n') |
81272918c0ea
patch 8.1.2274: newlines in 'balloonexpr' result only work in the GUI
Bram Moolenaar <Bram@vim.org>
parents:
18396
diff
changeset
|
1309 ++p; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1310 if (item->cells > max_cells) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1311 max_cells = item->cells; |
12940
5045d3076db0
patch 8.0.1346: crash when passing 50 char string to balloon_split()
Christian Brabandt <cb@256bit.org>
parents:
12883
diff
changeset
|
1312 long_item_count += (item->cells - 1) / BALLOON_MIN_WIDTH; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1313 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1314 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1315 height = 2 + ga.ga_len; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1316 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1317 // If there are long items and the height is below the limit: split lines |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1318 if (long_item_count > 0 && height + long_item_count <= max_height) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1319 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1320 split_long_items = TRUE; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1321 height += long_item_count; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1322 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1323 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1324 // Limit to half the window height, it has to fit above or below the mouse |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1325 // position. |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1326 if (height > max_height) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1327 height = max_height; |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16768
diff
changeset
|
1328 *array = ALLOC_CLEAR_MULT(pumitem_T, height); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1329 if (*array == NULL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1330 goto failed; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1331 |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1332 // Add an empty line above and below, looks better. |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1333 (*array)->pum_text = vim_strsave((char_u *)""); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1334 (*array + height - 1)->pum_text = vim_strsave((char_u *)""); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1335 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1336 for (line = 1, item_idx = 0; line < height - 1; ++item_idx) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1337 { |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1338 int skip; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1339 int thislen; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1340 int copylen; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1341 int ind; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1342 int cells; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1343 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1344 item = ((balpart_T *)ga.ga_data) + item_idx; |
18667
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1345 if (item->bytelen == 0) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1346 (*array)[line++].pum_text = vim_strsave((char_u *)""); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1347 else |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1348 for (skip = 0; skip < item->bytelen; skip += thislen) |
16429
a1229400434a
patch 8.1.1219: not checking for NULL return from alloc()
Bram Moolenaar <Bram@vim.org>
parents:
16268
diff
changeset
|
1349 { |
18667
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1350 if (split_long_items && item->cells >= BALLOON_MIN_WIDTH) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1351 { |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1352 cells = item->indent * 2; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1353 for (p = item->start + skip; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1354 p < item->start + item->bytelen; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1355 p += mb_ptr2len(p)) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1356 if ((cells += ptr2cells(p)) > BALLOON_MIN_WIDTH) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1357 break; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1358 thislen = p - (item->start + skip); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1359 } |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1360 else |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1361 thislen = item->bytelen; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1362 |
18667
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1363 // put indent at the start |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1364 p = alloc(thislen + item->indent * 2 + 1); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1365 if (p == NULL) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1366 { |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1367 for (line = 0; line <= height - 1; ++line) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1368 vim_free((*array)[line].pum_text); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1369 vim_free(*array); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1370 goto failed; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1371 } |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1372 for (ind = 0; ind < item->indent * 2; ++ind) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1373 p[ind] = ' '; |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1374 |
18667
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1375 // exclude spaces at the end of the string |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1376 for (copylen = thislen; copylen > 0; --copylen) |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1377 if (item->start[skip + copylen - 1] != ' ') |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1378 break; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1379 |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1380 vim_strncpy(p + ind, item->start + skip, copylen); |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1381 (*array)[line].pum_text = p; |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1382 item->indent = 0; // wrapped line has no indent |
18667
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1383 ++line; |
de350001150c
patch 8.1.2325: crash when using balloon with empty line
Bram Moolenaar <Bram@vim.org>
parents:
18665
diff
changeset
|
1384 } |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1385 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1386 ga_clear(&ga); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1387 return height; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1388 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1389 failed: |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1390 ga_clear(&ga); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1391 return 0; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1392 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1393 |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1394 void |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1395 ui_remove_balloon(void) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1396 { |
31778
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1397 if (balloon_array == NULL) |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1398 return; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1399 |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1400 pum_undisplay(); |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1401 while (balloon_arraysize > 0) |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1402 vim_free(balloon_array[--balloon_arraysize].pum_text); |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1403 VIM_CLEAR(balloon_array); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1404 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1405 |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1406 /* |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1407 * Terminal version of a balloon, uses the popup menu code. |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1408 */ |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1409 void |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1410 ui_post_balloon(char_u *mesg, list_T *list) |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1411 { |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1412 ui_remove_balloon(); |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1413 |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1414 if (mesg == NULL && list == NULL) |
16600
ff3c99bd1038
patch 8.1.1303: not possible to hide a balloon
Bram Moolenaar <Bram@vim.org>
parents:
16429
diff
changeset
|
1415 { |
ff3c99bd1038
patch 8.1.1303: not possible to hide a balloon
Bram Moolenaar <Bram@vim.org>
parents:
16429
diff
changeset
|
1416 pum_undisplay(); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1417 return; |
16600
ff3c99bd1038
patch 8.1.1303: not possible to hide a balloon
Bram Moolenaar <Bram@vim.org>
parents:
16429
diff
changeset
|
1418 } |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1419 if (list != NULL) |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1420 { |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1421 listitem_T *li; |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1422 int idx; |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1423 |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1424 balloon_arraysize = list->lv_len; |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16768
diff
changeset
|
1425 balloon_array = ALLOC_CLEAR_MULT(pumitem_T, list->lv_len); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1426 if (balloon_array == NULL) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1427 return; |
20392
4c317d8c1051
patch 8.2.0751: Vim9: performance can be improved
Bram Moolenaar <Bram@vim.org>
parents:
20245
diff
changeset
|
1428 CHECK_LIST_MATERIALIZE(list); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1429 for (idx = 0, li = list->lv_first; li != NULL; li = li->li_next, ++idx) |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1430 { |
15211
de63593896b3
patch 8.1.0615: get_tv function names are not consistent
Bram Moolenaar <Bram@vim.org>
parents:
15087
diff
changeset
|
1431 char_u *text = tv_get_string_chk(&li->li_tv); |
12883
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1432 |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1433 balloon_array[idx].pum_text = vim_strsave( |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1434 text == NULL ? (char_u *)"" : text); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1435 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1436 } |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1437 else |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1438 balloon_arraysize = split_message(mesg, &balloon_array); |
058e93aee621
patch 8.0.1318: terminal balloon only shows one line
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
1439 |
31778
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1440 if (balloon_arraysize <= 0) |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1441 return; |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1442 |
31778
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1443 pum_array = balloon_array; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1444 pum_size = balloon_arraysize; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1445 pum_compute_size(); |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1446 pum_scrollbar = 0; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1447 pum_height = balloon_arraysize; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1448 |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1449 pum_position_at_mouse(BALLOON_MIN_WIDTH); |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1450 pum_selected = -1; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1451 pum_first = 0; |
579c846086eb
patch 9.0.1221: code is indented more than necessary
Bram Moolenaar <Bram@vim.org>
parents:
29881
diff
changeset
|
1452 pum_redraw(); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1453 } |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1454 |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1455 /* |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1456 * Called when the mouse moved, may remove any displayed balloon. |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1457 */ |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1458 void |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1459 ui_may_remove_balloon(void) |
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1460 { |
17292
8a095d343c59
patch 8.1.1645: cannot use a popup window for a balloon
Bram Moolenaar <Bram@vim.org>
parents:
17095
diff
changeset
|
1461 // For now: remove the balloon whenever the mouse moves to another screen |
8a095d343c59
patch 8.1.1645: cannot use a popup window for a balloon
Bram Moolenaar <Bram@vim.org>
parents:
17095
diff
changeset
|
1462 // cell. |
8a095d343c59
patch 8.1.1645: cannot use a popup window for a balloon
Bram Moolenaar <Bram@vim.org>
parents:
17095
diff
changeset
|
1463 ui_remove_balloon(); |
12865
ebb4f6c93598
patch 8.0.1309: cannot use 'balloonexpr' in a terminal
Christian Brabandt <cb@256bit.org>
parents:
12690
diff
changeset
|
1464 } |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1465 #endif |
13234
6e972d830e13
patch 8.0.1491: the minimum width of the popup menu is hard coded
Christian Brabandt <cb@256bit.org>
parents:
12940
diff
changeset
|
1466 |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1467 #if defined(FEAT_TERM_POPUP_MENU) || defined(PROTO) |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1468 /* |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1469 * Select the pum entry at the mouse position. |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1470 */ |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1471 static void |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1472 pum_select_mouse_pos(void) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1473 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1474 int idx = mouse_row - pum_row; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1475 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1476 if (idx < 0 || idx >= pum_size) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1477 pum_selected = -1; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1478 else if (*pum_array[idx].pum_text != NUL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1479 pum_selected = idx; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1480 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1481 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1482 /* |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1483 * Execute the currently selected popup menu item. |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1484 */ |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1485 static void |
13400
c415cdd49ea4
patch 8.0.1574: show cursor in wrong place when using popup menu
Christian Brabandt <cb@256bit.org>
parents:
13392
diff
changeset
|
1486 pum_execute_menu(vimmenu_T *menu, int mode) |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1487 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1488 vimmenu_T *mp; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1489 int idx = 0; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1490 exarg_T ea; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1491 |
19934
3ff714d765ba
patch 8.2.0523: loops are repeated
Bram Moolenaar <Bram@vim.org>
parents:
19673
diff
changeset
|
1492 FOR_ALL_CHILD_MENUS(menu, mp) |
13400
c415cdd49ea4
patch 8.0.1574: show cursor in wrong place when using popup menu
Christian Brabandt <cb@256bit.org>
parents:
13392
diff
changeset
|
1493 if ((mp->modes & mp->enabled & mode) && idx++ == pum_selected) |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1494 { |
20007
aadd1cae2ff5
patch 8.2.0559: clearing a struct is verbose
Bram Moolenaar <Bram@vim.org>
parents:
19934
diff
changeset
|
1495 CLEAR_FIELD(ea); |
14952
405309f9dd13
patch 8.1.0487: no menus specifically for the terminal window
Bram Moolenaar <Bram@vim.org>
parents:
14685
diff
changeset
|
1496 execute_menu(&ea, mp, -1); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1497 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1498 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1499 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1500 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1501 /* |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1502 * Open the terminal version of the popup menu and don't return until it is |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1503 * closed. |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1504 */ |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1505 void |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1506 pum_show_popupmenu(vimmenu_T *menu) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1507 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1508 vimmenu_T *mp; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1509 int idx = 0; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1510 pumitem_T *array; |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1511 # ifdef FEAT_BEVAL_TERM |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1512 int save_bevalterm = p_bevalterm; |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1513 # endif |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1514 int mode; |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1515 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1516 pum_undisplay(); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1517 pum_size = 0; |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1518 mode = get_menu_mode_flag(); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1519 |
19934
3ff714d765ba
patch 8.2.0523: loops are repeated
Bram Moolenaar <Bram@vim.org>
parents:
19673
diff
changeset
|
1520 FOR_ALL_CHILD_MENUS(menu, mp) |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1521 if (menu_is_separator(mp->dname) |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1522 || (mp->modes & mp->enabled & mode)) |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1523 ++pum_size; |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1524 |
15375
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1525 // When there are only Terminal mode menus, using "popup Edit" results in |
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1526 // pum_size being zero. |
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1527 if (pum_size <= 0) |
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1528 { |
32383
b8e9ea3c1ed0
patch 9.0.1523: some error messages are not marked for translation
Bram Moolenaar <Bram@vim.org>
parents:
32323
diff
changeset
|
1529 emsg(_(e_menu_only_exists_in_another_mode)); |
15375
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1530 return; |
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1531 } |
6012cc6936f7
patch 8.1.0695: internal error when using :popup
Bram Moolenaar <Bram@vim.org>
parents:
15324
diff
changeset
|
1532 |
16825
ce04ebdf26b8
patch 8.1.1414: alloc() returning "char_u *" causes a lot of type casts
Bram Moolenaar <Bram@vim.org>
parents:
16768
diff
changeset
|
1533 array = ALLOC_CLEAR_MULT(pumitem_T, pum_size); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1534 if (array == NULL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1535 return; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1536 |
19934
3ff714d765ba
patch 8.2.0523: loops are repeated
Bram Moolenaar <Bram@vim.org>
parents:
19673
diff
changeset
|
1537 FOR_ALL_CHILD_MENUS(menu, mp) |
23328
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1538 { |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1539 char_u *s = NULL; |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1540 |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1541 // Make a copy of the text, the menu may be redefined in a callback. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1542 if (menu_is_separator(mp->dname)) |
23328
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1543 s = (char_u *)""; |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1544 else if (mp->modes & mp->enabled & mode) |
23328
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1545 s = mp->dname; |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1546 if (s != NULL) |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1547 { |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1548 s = vim_strsave(s); |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1549 if (s != NULL) |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1550 array[idx++].pum_text = s; |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1551 } |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1552 } |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1553 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1554 pum_array = array; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1555 pum_compute_size(); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1556 pum_scrollbar = 0; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1557 pum_height = pum_size; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1558 pum_position_at_mouse(20); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1559 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1560 pum_selected = -1; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1561 pum_first = 0; |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1562 # ifdef FEAT_BEVAL_TERM |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1563 p_bevalterm = TRUE; // track mouse movement |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1564 mch_setmouse(TRUE); |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1565 # endif |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1566 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1567 for (;;) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1568 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1569 int c; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1570 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1571 pum_redraw(); |
13400
c415cdd49ea4
patch 8.0.1574: show cursor in wrong place when using popup menu
Christian Brabandt <cb@256bit.org>
parents:
13392
diff
changeset
|
1572 setcursor_mayforce(TRUE); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1573 out_flush(); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1574 |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1575 c = vgetc(); |
16845
d4c50bca8dbc
patch 8.1.1424: crash when popup menu is deleted while waiting for char
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
1576 |
29469
86eac190ec42
patch 9.0.0076: no test for what patch 8.1.1424 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
1577 // Bail out when typing Esc, CTRL-C or some callback or <expr> mapping |
86eac190ec42
patch 9.0.0076: no test for what patch 8.1.1424 fixes
Bram Moolenaar <Bram@vim.org>
parents:
28773
diff
changeset
|
1578 // closed the popup menu. |
16845
d4c50bca8dbc
patch 8.1.1424: crash when popup menu is deleted while waiting for char
Bram Moolenaar <Bram@vim.org>
parents:
16825
diff
changeset
|
1579 if (c == ESC || c == Ctrl_C || pum_array == NULL) |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1580 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1581 else if (c == CAR || c == NL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1582 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1583 // enter: select current item, if any, and close |
13400
c415cdd49ea4
patch 8.0.1574: show cursor in wrong place when using popup menu
Christian Brabandt <cb@256bit.org>
parents:
13392
diff
changeset
|
1584 pum_execute_menu(menu, mode); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1585 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1586 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1587 else if (c == 'k' || c == K_UP || c == K_MOUSEUP) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1588 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1589 // cursor up: select previous item |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1590 while (pum_selected > 0) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1591 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1592 --pum_selected; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1593 if (*array[pum_selected].pum_text != NUL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1594 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1595 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1596 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1597 else if (c == 'j' || c == K_DOWN || c == K_MOUSEDOWN) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1598 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1599 // cursor down: select next item |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1600 while (pum_selected < pum_size - 1) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1601 { |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1602 ++pum_selected; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1603 if (*array[pum_selected].pum_text != NUL) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1604 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1605 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1606 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1607 else if (c == K_RIGHTMOUSE) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1608 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1609 // Right mouse down: reposition the menu. |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1610 vungetc(c); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1611 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1612 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1613 else if (c == K_LEFTDRAG || c == K_RIGHTDRAG || c == K_MOUSEMOVE) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1614 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1615 // mouse moved: select item in the mouse row |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1616 pum_select_mouse_pos(); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1617 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1618 else if (c == K_LEFTMOUSE || c == K_LEFTMOUSE_NM || c == K_RIGHTRELEASE) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1619 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1620 // left mouse click: select clicked item, if any, and close; |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1621 // right mouse release: select clicked item, close if any |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1622 pum_select_mouse_pos(); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1623 if (pum_selected >= 0) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1624 { |
13400
c415cdd49ea4
patch 8.0.1574: show cursor in wrong place when using popup menu
Christian Brabandt <cb@256bit.org>
parents:
13392
diff
changeset
|
1625 pum_execute_menu(menu, mode); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1626 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1627 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1628 if (c == K_LEFTMOUSE || c == K_LEFTMOUSE_NM) |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1629 break; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1630 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1631 } |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1632 |
23328
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1633 for (idx = 0; idx < pum_size; ++idx) |
8e0ec52cad85
patch 8.2.2207: illegal memory access if popup menu items are changed
Bram Moolenaar <Bram@vim.org>
parents:
23154
diff
changeset
|
1634 vim_free(array[idx].pum_text); |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1635 vim_free(array); |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1636 pum_undisplay(); |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1637 # ifdef FEAT_BEVAL_TERM |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1638 p_bevalterm = save_bevalterm; |
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1639 mch_setmouse(TRUE); |
17809
59f8948b7590
patch 8.1.1901: the +insert_expand feature is not always available
Bram Moolenaar <Bram@vim.org>
parents:
17799
diff
changeset
|
1640 # endif |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1641 } |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1642 |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1643 void |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1644 pum_make_popup(char_u *path_name, int use_mouse_pos) |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1645 { |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1646 vimmenu_T *menu; |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1647 |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1648 if (!use_mouse_pos) |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1649 { |
18812
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1650 // Hack: set mouse position at the cursor so that the menu pops up |
d34ec6fe207d
patch 8.1.2394: using old C style comments
Bram Moolenaar <Bram@vim.org>
parents:
18767
diff
changeset
|
1651 // around there. |
32323
29631532eceb
patch 9.0.1493: popup menu position wrong in window with toolbar
Bram Moolenaar <Bram@vim.org>
parents:
32297
diff
changeset
|
1652 mouse_row = W_WINROW(curwin) + curwin->w_wrow; |
13392
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1653 mouse_col = curwin->w_wincol + curwin->w_wcol; |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1654 } |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1655 |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1656 menu = gui_find_menu(path_name); |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1657 if (menu != NULL) |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1658 pum_show_popupmenu(menu); |
d5347779fb20
patch 8.0.1570: can't use :popup for a menu in the terminal
Christian Brabandt <cb@256bit.org>
parents:
13369
diff
changeset
|
1659 } |
13369
244ff1b6d2ad
patch 8.0.1558: no right-click menu in a terminal
Christian Brabandt <cb@256bit.org>
parents:
13331
diff
changeset
|
1660 #endif |