summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1429
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1429')
-rw-r--r--data/vim/patches/8.1.1429532
1 files changed, 532 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1429 b/data/vim/patches/8.1.1429
new file mode 100644
index 000000000..74d327851
--- /dev/null
+++ b/data/vim/patches/8.1.1429
@@ -0,0 +1,532 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1429
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.1429
+Problem: "pos" option of popup window not supported yet.
+Solution: Implement the option. Rename popup_getposition() to
+ popup_getpos().
+Files: src/structs.h, src/popupwin.c, src/proto/popupwin.pro,
+ runtime/doc/popup.txt
+
+
+*** ../vim-8.1.1428/src/structs.h 2019-05-30 00:11:48.704086357 +0200
+--- src/structs.h 2019-05-30 19:48:48.436658475 +0200
+***************
+*** 1982,1987 ****
+--- 1982,1996 ----
+ // # define CRYPT_NOT_INPLACE 1
+ #endif
+
++ #ifdef FEAT_TEXT_PROP
++ typedef enum {
++ POPPOS_BOTLEFT,
++ POPPOS_TOPLEFT,
++ POPPOS_BOTRIGHT,
++ POPPOS_TOPRIGHT,
++ POPPOS_CENTER
++ } poppos_T;
++ #endif
+
+ /*
+ * These are items normally related to a buffer. But when using ":ownsyntax"
+***************
+*** 2873,2879 ****
+ int w_vsep_width; /* Number of separator columns (0 or 1). */
+ pos_save_T w_save_cursor; /* backup of cursor pos and topline */
+ #ifdef FEAT_TEXT_PROP
+! int w_popup_flags; // PFL_ values
+ int w_zindex;
+ int w_minheight; // "minheight" for popup window
+ int w_minwidth; // "minwidth" for popup window
+--- 2882,2889 ----
+ int w_vsep_width; /* Number of separator columns (0 or 1). */
+ pos_save_T w_save_cursor; /* backup of cursor pos and topline */
+ #ifdef FEAT_TEXT_PROP
+! int w_popup_flags; // POPF_ values
+! poppos_T w_popup_pos;
+ int w_zindex;
+ int w_minheight; // "minheight" for popup window
+ int w_minwidth; // "minwidth" for popup window
+*** ../vim-8.1.1428/src/popupwin.c 2019-05-30 19:24:57.615269014 +0200
+--- src/popupwin.c 2019-05-30 21:18:23.603081264 +0200
+***************
+*** 15,26 ****
+
+ #ifdef FEAT_TEXT_PROP
+
+ /*
+ * Get option value for"key", which is "line" or "col".
+ * Handles "cursor+N" and "cursor-N".
+ */
+ static int
+! popup_options_pos(dict_T *dict, char_u *key)
+ {
+ dictitem_T *di;
+ char_u *val;
+--- 15,39 ----
+
+ #ifdef FEAT_TEXT_PROP
+
++ typedef struct {
++ char *pp_name;
++ poppos_T pp_val;
++ } poppos_entry_T;
++
++ static poppos_entry_T poppos_entries[] = {
++ {"botleft", POPPOS_BOTLEFT},
++ {"topleft", POPPOS_TOPLEFT},
++ {"botright", POPPOS_BOTRIGHT},
++ {"topright", POPPOS_TOPRIGHT},
++ {"center", POPPOS_CENTER}
++ };
++
+ /*
+ * Get option value for"key", which is "line" or "col".
+ * Handles "cursor+N" and "cursor-N".
+ */
+ static int
+! popup_options_one(dict_T *dict, char_u *key)
+ {
+ dictitem_T *di;
+ char_u *val;
+***************
+*** 58,63 ****
+--- 71,106 ----
+ return n;
+ }
+
++ static void
++ get_pos_options(win_T *wp, dict_T *dict)
++ {
++ char_u *str;
++ int nr;
++
++ nr = popup_options_one(dict, (char_u *)"line");
++ if (nr > 0)
++ wp->w_wantline = nr;
++ nr = popup_options_one(dict, (char_u *)"col");
++ if (nr > 0)
++ wp->w_wantcol = nr;
++
++ str = dict_get_string(dict, (char_u *)"pos", FALSE);
++ if (str != NULL)
++ {
++ for (nr = 0;
++ nr < (int)(sizeof(poppos_entries) / sizeof(poppos_entry_T));
++ ++nr)
++ if (STRCMP(str, poppos_entries[nr].pp_name) == 0)
++ {
++ wp->w_popup_pos = poppos_entries[nr].pp_val;
++ nr = -1;
++ break;
++ }
++ if (nr != -1)
++ semsg(_(e_invarg2), str);
++ }
++ }
++
+ /*
+ * Go through the options in "dict" and apply them to buffer "buf" displayed in
+ * popup window "wp".
+***************
+*** 66,72 ****
+--- 109,117 ----
+ static void
+ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict, int atcursor)
+ {
++ #if defined(FEAT_TIMERS)
+ int nr;
++ #endif
+ char_u *str;
+
+ wp->w_minwidth = dict_get_number(dict, (char_u *)"minwidth");
+***************
+*** 76,92 ****
+
+ if (atcursor)
+ {
+ setcursor_mayforce(TRUE);
+ wp->w_wantline = screen_screenrow();
+ wp->w_wantcol = screen_screencol() + 1;
+ }
+
+! nr = popup_options_pos(dict, (char_u *)"line");
+! if (nr > 0)
+! wp->w_wantline = nr;
+! nr = popup_options_pos(dict, (char_u *)"col");
+! if (nr > 0)
+! wp->w_wantcol = nr;
+
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
+
+--- 121,138 ----
+
+ if (atcursor)
+ {
++ wp->w_popup_pos = POPPOS_BOTLEFT;
+ setcursor_mayforce(TRUE);
+ wp->w_wantline = screen_screenrow();
++ if (wp->w_wantline == 0) // cursor in first line
++ {
++ wp->w_wantline = 2;
++ wp->w_popup_pos = POPPOS_TOPLEFT;
++ }
+ wp->w_wantcol = screen_screencol() + 1;
+ }
+
+! get_pos_options(wp, dict);
+
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
+
+***************
+*** 212,235 ****
+ linenr_T lnum;
+ int wrapped = 0;
+ int maxwidth;
+
+! // TODO: Compute the size and position properly.
+! if (wp->w_wantline > 0)
+! wp->w_winrow = wp->w_wantline - 1;
+ else
+! // TODO: better default
+! wp->w_winrow = Rows > 5 ? Rows / 2 - 2 : 0;
+! if (wp->w_winrow >= Rows)
+! wp->w_winrow = Rows - 1;
+
+! if (wp->w_wantcol > 0)
+! wp->w_wincol = wp->w_wantcol - 1;
+! else
+! // TODO: better default
+! wp->w_wincol = Columns > 20 ? Columns / 2 - 10 : 0;
+! if (wp->w_wincol >= Columns - 3)
+! wp->w_wincol = Columns - 3;
+
+ maxwidth = Columns - wp->w_wincol;
+ if (wp->w_maxwidth > 0 && maxwidth > wp->w_maxwidth)
+ maxwidth = wp->w_maxwidth;
+--- 258,299 ----
+ linenr_T lnum;
+ int wrapped = 0;
+ int maxwidth;
++ int center_vert = FALSE;
++ int center_hor = FALSE;
+
+! wp->w_winrow = 0;
+! wp->w_wincol = 0;
+! if (wp->w_popup_pos == POPPOS_CENTER)
+! {
+! // center after computing the size
+! center_vert = TRUE;
+! center_hor = TRUE;
+! }
+ else
+! {
+! if (wp->w_wantline == 0)
+! center_vert = TRUE;
+! else if (wp->w_popup_pos == POPPOS_TOPLEFT
+! || wp->w_popup_pos == POPPOS_TOPRIGHT)
+! {
+! wp->w_winrow = wp->w_wantline - 1;
+! if (wp->w_winrow >= Rows)
+! wp->w_winrow = Rows - 1;
+! }
+
+! if (wp->w_wantcol == 0)
+! center_hor = TRUE;
+! else if (wp->w_popup_pos == POPPOS_TOPLEFT
+! || wp->w_popup_pos == POPPOS_BOTLEFT)
+! {
+! wp->w_wincol = wp->w_wantcol - 1;
+! if (wp->w_wincol >= Columns - 3)
+! wp->w_wincol = Columns - 3;
+! }
+! }
+
++ // When centering or right aligned, use maximum width.
++ // When left aligned use the space available.
+ maxwidth = Columns - wp->w_wincol;
+ if (wp->w_maxwidth > 0 && maxwidth > wp->w_maxwidth)
+ maxwidth = wp->w_maxwidth;
+***************
+*** 255,260 ****
+--- 319,334 ----
+ wp->w_width = wp->w_minwidth;
+ if (wp->w_width > maxwidth)
+ wp->w_width = maxwidth;
++ if (center_hor)
++ wp->w_wincol = (Columns - wp->w_width) / 2;
++ else if (wp->w_popup_pos == POPPOS_BOTRIGHT
++ || wp->w_popup_pos == POPPOS_TOPRIGHT)
++ {
++ // Right aligned: move to the right if needed.
++ // No truncation, because that would change the height.
++ if (wp->w_width < wp->w_wantcol)
++ wp->w_wincol = wp->w_wantcol - wp->w_width;
++ }
+
+ if (wp->w_height <= 1)
+ wp->w_height = wp->w_buffer->b_ml.ml_line_count + wrapped;
+***************
+*** 265,270 ****
+--- 339,357 ----
+ if (wp->w_height > Rows - wp->w_winrow)
+ wp->w_height = Rows - wp->w_winrow;
+
++ if (center_vert)
++ wp->w_winrow = (Rows - wp->w_height) / 2;
++ else if (wp->w_popup_pos == POPPOS_BOTRIGHT
++ || wp->w_popup_pos == POPPOS_BOTLEFT)
++ {
++ if (wp->w_height <= wp->w_wantline)
++ // bottom aligned: may move down
++ wp->w_winrow = wp->w_wantline - wp->w_height;
++ else
++ // not enough space, make top aligned
++ wp->w_winrow = wp->w_wantline + 1;
++ }
++
+ wp->w_popup_last_changedtick = CHANGEDTICK(wp->w_buffer);
+ }
+
+***************
+*** 304,310 ****
+ if (wp == NULL)
+ return;
+ rettv->vval.v_number = wp->w_id;
+! wp->w_p_wrap = TRUE; // 'wrap' is default on
+
+ buf = buflist_new(NULL, NULL, (linenr_T)0, BLN_NEW|BLN_LISTED|BLN_DUMMY);
+ if (buf == NULL)
+--- 391,397 ----
+ if (wp == NULL)
+ return;
+ rettv->vval.v_number = wp->w_id;
+! wp->w_popup_pos = POPPOS_TOPLEFT;
+
+ buf = buflist_new(NULL, NULL, (linenr_T)0, BLN_NEW|BLN_LISTED|BLN_DUMMY);
+ if (buf == NULL)
+***************
+*** 322,327 ****
+--- 409,416 ----
+ buf->b_p_swf = FALSE; // no swap file
+ buf->b_p_bl = FALSE; // unlisted buffer
+ buf->b_locked = TRUE;
++ wp->w_p_wrap = TRUE; // 'wrap' is default on
++
+ // Avoid that 'buftype' is reset when this buffer is entered.
+ buf->b_p_initialized = TRUE;
+
+***************
+*** 578,588 ****
+ wp->w_maxwidth = nr;
+ if ((nr = dict_get_number(d, (char_u *)"maxheight")) > 0)
+ wp->w_maxheight = nr;
+! if ((nr = dict_get_number(d, (char_u *)"line")) > 0)
+! wp->w_wantline = nr;
+! if ((nr = dict_get_number(d, (char_u *)"col")) > 0)
+! wp->w_wantcol = nr;
+! // TODO: "pos"
+
+ if (wp->w_winrow + wp->w_height >= cmdline_row)
+ clear_cmdline = TRUE;
+--- 667,673 ----
+ wp->w_maxwidth = nr;
+ if ((nr = dict_get_number(d, (char_u *)"maxheight")) > 0)
+ wp->w_maxheight = nr;
+! get_pos_options(wp, d);
+
+ if (wp->w_winrow + wp->w_height >= cmdline_row)
+ clear_cmdline = TRUE;
+***************
+*** 591,600 ****
+ }
+
+ /*
+! * popup_getposition({id})
+ */
+ void
+! f_popup_getposition(typval_T *argvars, typval_T *rettv)
+ {
+ dict_T *dict;
+ int id = (int)tv_get_number(argvars);
+--- 676,685 ----
+ }
+
+ /*
+! * popup_getpos({id})
+ */
+ void
+! f_popup_getpos(typval_T *argvars, typval_T *rettv)
+ {
+ dict_T *dict;
+ int id = (int)tv_get_number(argvars);
+***************
+*** 623,628 ****
+--- 708,714 ----
+ dict_T *dict;
+ int id = (int)tv_get_number(argvars);
+ win_T *wp = find_popup_win(id);
++ int i;
+
+ if (rettv_dict_alloc(rettv) == OK)
+ {
+***************
+*** 637,642 ****
+--- 723,738 ----
+ dict_add_number(dict, "maxheight", wp->w_maxheight);
+ dict_add_number(dict, "maxwidth", wp->w_maxwidth);
+ dict_add_number(dict, "zindex", wp->w_zindex);
++
++ for (i = 0; i < (int)(sizeof(poppos_entries) / sizeof(poppos_entry_T));
++ ++i)
++ if (wp->w_popup_pos == poppos_entries[i].pp_val)
++ {
++ dict_add_string(dict, "pos",
++ (char_u *)poppos_entries[i].pp_name);
++ break;
++ }
++
+ # if defined(FEAT_TIMERS)
+ dict_add_number(dict, "time", wp->w_popup_timer != NULL
+ ? (long)wp->w_popup_timer->tr_interval : 0L);
+*** ../vim-8.1.1428/src/proto/popupwin.pro 2019-05-30 19:24:57.615269014 +0200
+--- src/proto/popupwin.pro 2019-05-30 21:19:20.050800869 +0200
+***************
+*** 1,16 ****
+ /* popupwin.c */
+! int popup_any_visible(void);
+! void close_all_popups(void);
+! void ex_popupclear(exarg_T *eap);
+ void f_popup_atcursor(typval_T *argvars, typval_T *rettv);
+ void f_popup_close(typval_T *argvars, typval_T *rettv);
+- void f_popup_create(typval_T *argvars, typval_T *rettv);
+- void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
+- void f_popup_getposition(typval_T *argvars, typval_T *rettv);
+ void f_popup_hide(typval_T *argvars, typval_T *rettv);
+- void f_popup_move(typval_T *argvars, typval_T *rettv);
+ void f_popup_show(typval_T *argvars, typval_T *rettv);
+- void popup_adjust_position(win_T *wp);
+ void popup_close(int id);
+ void popup_close_tabpage(tabpage_T *tp, int id);
+ /* vim: set ft=c : */
+--- 1,16 ----
+ /* popupwin.c */
+! void popup_adjust_position(win_T *wp);
+! void f_popup_create(typval_T *argvars, typval_T *rettv);
+ void f_popup_atcursor(typval_T *argvars, typval_T *rettv);
++ int popup_any_visible(void);
+ void f_popup_close(typval_T *argvars, typval_T *rettv);
+ void f_popup_hide(typval_T *argvars, typval_T *rettv);
+ void f_popup_show(typval_T *argvars, typval_T *rettv);
+ void popup_close(int id);
+ void popup_close_tabpage(tabpage_T *tp, int id);
++ void close_all_popups(void);
++ void ex_popupclear(exarg_T *eap);
++ void f_popup_move(typval_T *argvars, typval_T *rettv);
++ void f_popup_getpos(typval_T *argvars, typval_T *rettv);
++ void f_popup_getoptions(typval_T *argvars, typval_T *rettv);
+ /* vim: set ft=c : */
+*** ../vim-8.1.1428/runtime/doc/popup.txt 2019-05-30 19:24:57.615269014 +0200
+--- runtime/doc/popup.txt 2019-05-30 21:17:46.191262945 +0200
+***************
+*** 232,238 ****
+
+ popup_getoptions({id}) *popup_getoptions()*
+ Return the {options} for popup {id} in a Dict.
+! A zero value means the option was not set.
+
+ The "highlight" entry is omitted, use the 'wincolor' option
+ for that: >
+--- 232,239 ----
+
+ popup_getoptions({id}) *popup_getoptions()*
+ Return the {options} for popup {id} in a Dict.
+! A zero value means the option was not set. For "zindex" the
+! default value is returned, not zero.
+
+ The "highlight" entry is omitted, use the 'wincolor' option
+ for that: >
+***************
+*** 240,246 ****
+
+ < If popup window {id} is not found an empty Dict is returned.
+
+! popup_getposition({id}) *popup_getposition()*
+ Return the position and size of popup {id}. Returns a Dict
+ with these entries:
+ col screen column of the popup, one-based
+--- 241,247 ----
+
+ < If popup window {id} is not found an empty Dict is returned.
+
+! popup_getpos({id}) *popup_getpos()*
+ Return the position and size of popup {id}. Returns a Dict
+ with these entries:
+ col screen column of the popup, one-based
+***************
+*** 303,321 ****
+ |popup-props|.
+
+ The second argument of |popup_create()| is a dictionary with options:
+! line screen line where to position the popup; can use
+! "cursor", "cursor+1" or "cursor-1" to use the line of
+! the cursor and add or subtract a number of lines;
+! default is "cursor-1".
+! col screen column where to position the popup; can use
+! "cursor" to use the column of the cursor, "cursor+99"
+! and "cursor-99" to add or subtract a number of
+! columns; default is "cursor"
+ pos "topleft", "topright", "botleft" or "botright":
+ defines what corner of the popup "line" and "col" are
+ used for. When not set "topleft" is used.
+ Alternatively "center" can be used to position the
+! popup in the center of the Vim window.
+ {not implemented yet}
+ flip when TRUE (the default) and the position is relative
+ to the cursor, flip to below or above the cursor to
+--- 304,325 ----
+ |popup-props|.
+
+ The second argument of |popup_create()| is a dictionary with options:
+! line screen line where to position the popup; can use a
+! number or "cursor", "cursor+1" or "cursor-1" to use
+! the line of the cursor and add or subtract a number of
+! lines; if omitted the popup is vertically centered,
+! otherwise "pos" is used.
+! col screen column where to position the popup; can use a
+! number or "cursor" to use the column of the cursor,
+! "cursor+99" and "cursor-99" to add or subtract a
+! number of columns; if omitted the popup is
+! horizontally centered, otherwise "pos" is used
+ pos "topleft", "topright", "botleft" or "botright":
+ defines what corner of the popup "line" and "col" are
+ used for. When not set "topleft" is used.
+ Alternatively "center" can be used to position the
+! popup in the center of the Vim window, in which case
+! "line" and "col" are ignored.
+ {not implemented yet}
+ flip when TRUE (the default) and the position is relative
+ to the cursor, flip to below or above the cursor to
+*** ../vim-8.1.1428/src/version.c 2019-05-30 19:24:57.615269014 +0200
+--- src/version.c 2019-05-30 21:22:31.477803848 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1429,
+ /**/
+
+--
+ERROR 047: Keyboard not found. Press RETURN to continue.
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///