summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.1402
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.1402')
-rw-r--r--data/vim/patches/8.1.1402304
1 files changed, 304 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.1402 b/data/vim/patches/8.1.1402
new file mode 100644
index 000000000..1c30e5c65
--- /dev/null
+++ b/data/vim/patches/8.1.1402
@@ -0,0 +1,304 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.1402
+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.1402
+Problem: "timer" option of popup windows not supported.
+Solution: Implement the "timer" option. (Yasuhiro Matsumoto, closes #4439)
+Files: src/structs.h, src/testdir/test_popupwin.vim, src/popupwin.c,
+ src/window.c, runtime/doc/popup.txt
+
+
+*** ../vim-8.1.1401/src/structs.h 2019-05-25 19:51:03.780408437 +0200
+--- src/structs.h 2019-05-26 19:36:12.090670162 +0200
+***************
+*** 1941,1946 ****
+--- 1941,1964 ----
+ } syn_time_T;
+ #endif
+
++ typedef struct timer_S timer_T;
++ struct timer_S
++ {
++ long tr_id;
++ #ifdef FEAT_TIMERS
++ timer_T *tr_next;
++ timer_T *tr_prev;
++ proftime_T tr_due; /* when the callback is to be invoked */
++ char tr_firing; /* when TRUE callback is being called */
++ char tr_paused; /* when TRUE callback is not invoked */
++ int tr_repeat; /* number of times to repeat, -1 forever */
++ long tr_interval; /* msec */
++ char_u *tr_callback; /* allocated */
++ partial_T *tr_partial;
++ int tr_emsg_count;
++ #endif
++ };
++
+ #ifdef FEAT_CRYPT
+ /*
+ * Structure to hold the type of encryption and the state of encryption or
+***************
+*** 2856,2861 ****
+--- 2874,2880 ----
+ int w_zindex;
+ int w_maxheight; // "maxheight" for popup window
+ int w_maxwidth; // "maxwidth" for popup window
++ timer_T *w_popup_timer; // timer for closing popup window
+ #endif
+
+
+***************
+*** 3434,3457 ****
+ };
+ typedef struct js_reader js_read_T;
+
+- typedef struct timer_S timer_T;
+- struct timer_S
+- {
+- long tr_id;
+- #ifdef FEAT_TIMERS
+- timer_T *tr_next;
+- timer_T *tr_prev;
+- proftime_T tr_due; /* when the callback is to be invoked */
+- char tr_firing; /* when TRUE callback is being called */
+- char tr_paused; /* when TRUE callback is not invoked */
+- int tr_repeat; /* number of times to repeat, -1 forever */
+- long tr_interval; /* msec */
+- char_u *tr_callback; /* allocated */
+- partial_T *tr_partial;
+- int tr_emsg_count;
+- #endif
+- };
+-
+ /* Maximum number of commands from + or -c arguments. */
+ #define MAX_ARG_CMDS 10
+
+--- 3453,3458 ----
+*** ../vim-8.1.1401/src/testdir/test_popupwin.vim 2019-05-26 14:10:59.909979018 +0200
+--- src/testdir/test_popupwin.vim 2019-05-26 20:07:58.804887372 +0200
+***************
+*** 37,39 ****
+--- 37,73 ----
+ call StopVimInTerminal(buf)
+ call delete('XtestPopup')
+ endfunc
++
++ func Test_popup_time()
++ topleft vnew
++ call setline(1, 'hello')
++
++ call popup_create('world', {
++ \ 'line': 1,
++ \ 'col': 1,
++ \ 'time': 500,
++ \})
++ redraw
++ let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
++ call assert_equal('world', line)
++
++ sleep 700m
++ let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
++ call assert_equal('hello', line)
++
++ call popup_create('on the command line', {
++ \ 'line': &lines,
++ \ 'col': 10,
++ \ 'time': 500,
++ \})
++ redraw
++ let line = join(map(range(1, 30), 'screenstring(&lines, v:val)'), '')
++ call assert_match('.*on the command line.*', line)
++
++ sleep 700m
++ redraw
++ let line = join(map(range(1, 30), 'screenstring(&lines, v:val)'), '')
++ call assert_notmatch('.*on the command line.*', line)
++
++ bwipe!
++ endfunc
+*** ../vim-8.1.1401/src/popupwin.c 2019-05-26 18:48:09.402542633 +0200
+--- src/popupwin.c 2019-05-26 20:05:06.193720441 +0200
+***************
+*** 22,32 ****
+--- 22,55 ----
+ static void
+ apply_options(win_T *wp, buf_T *buf UNUSED, dict_T *dict)
+ {
++ int nr;
++
+ wp->w_maxwidth = dict_get_number(dict, (char_u *)"maxwidth");
+ wp->w_maxheight = dict_get_number(dict, (char_u *)"maxheight");
+ wp->w_winrow = dict_get_number(dict, (char_u *)"line");
+ wp->w_wincol = dict_get_number(dict, (char_u *)"col");
+ wp->w_zindex = dict_get_number(dict, (char_u *)"zindex");
++
++ // Add timer to close the popup after some time.
++ nr = dict_get_number(dict, (char_u *)"time");
++ if (nr > 0)
++ {
++ char_u cbbuf[50];
++ char_u *ptr = cbbuf;
++ typval_T tv;
++
++ vim_snprintf((char *)cbbuf, sizeof(cbbuf),
++ "{_ -> popup_close(%d)}", wp->w_id);
++ if (get_lambda_tv(&ptr, &tv, TRUE) == OK)
++ {
++ wp->w_popup_timer = create_timer(nr, 0);
++ wp->w_popup_timer->tr_callback =
++ vim_strsave(partial_name(tv.vval.v_partial));
++ func_ref(wp->w_popup_timer->tr_callback);
++ wp->w_popup_timer->tr_partial = tv.vval.v_partial;
++ }
++ }
++
+ }
+
+ /*
+***************
+*** 177,182 ****
+--- 200,214 ----
+ popup_close(nr);
+ }
+
++ static void
++ popup_undisplay(win_T *wp)
++ {
++ if (wp->w_winrow + wp->w_height >= cmdline_row)
++ clear_cmdline = TRUE;
++ win_free_popup(wp);
++ redraw_all_later(NOT_VALID);
++ }
++
+ /*
+ * Close a popup window by Window-id.
+ */
+***************
+*** 195,202 ****
+ first_popupwin = wp->w_next;
+ else
+ prev->w_next = wp->w_next;
+! win_free_popup(wp);
+! redraw_all_later(NOT_VALID);
+ return;
+ }
+
+--- 227,233 ----
+ first_popupwin = wp->w_next;
+ else
+ prev->w_next = wp->w_next;
+! popup_undisplay(wp);
+ return;
+ }
+
+***************
+*** 222,229 ****
+ *root = wp->w_next;
+ else
+ prev->w_next = wp->w_next;
+! win_free_popup(wp);
+! redraw_all_later(NOT_VALID);
+ return;
+ }
+ }
+--- 253,259 ----
+ *root = wp->w_next;
+ else
+ prev->w_next = wp->w_next;
+! popup_undisplay(wp);
+ return;
+ }
+ }
+*** ../vim-8.1.1401/src/window.c 2019-05-26 18:48:09.406542616 +0200
+--- src/window.c 2019-05-26 19:49:35.494131709 +0200
+***************
+*** 3670,3681 ****
+ diff_clear(tp);
+ # endif
+ # ifdef FEAT_TEXT_PROP
+! {
+! win_T *wp;
+!
+! while (tp->tp_first_popupwin != NULL)
+! popup_close_tabpage(tp, tp->tp_first_popupwin->w_id);
+! }
+ #endif
+ for (idx = 0; idx < SNAP_COUNT; ++idx)
+ clear_snapshot(tp, idx);
+--- 3670,3677 ----
+ diff_clear(tp);
+ # endif
+ # ifdef FEAT_TEXT_PROP
+! while (tp->tp_first_popupwin != NULL)
+! popup_close_tabpage(tp, tp->tp_first_popupwin->w_id);
+ #endif
+ for (idx = 0; idx < SNAP_COUNT; ++idx)
+ clear_snapshot(tp, idx);
+***************
+*** 4871,4876 ****
+--- 4867,4874 ----
+ win_free_popup(win_T *win)
+ {
+ win_close_buffer(win, TRUE, FALSE);
++ if (win->w_popup_timer != NULL)
++ stop_timer(win->w_popup_timer);
+ vim_free(win->w_frame);
+ win_free(win, NULL);
+ }
+*** ../vim-8.1.1401/runtime/doc/popup.txt 2019-05-25 19:51:03.768408497 +0200
+--- runtime/doc/popup.txt 2019-05-26 19:37:51.574092763 +0200
+***************
+*** 142,148 ****
+ \ 'tab': -1,
+ \ 'zindex': 200,
+ \ 'highlight': 'WarningMsg',
+! \ 'border: [],
+ \ })
+ < Use {options} to change the properties.
+
+--- 142,148 ----
+ \ 'tab': -1,
+ \ 'zindex': 200,
+ \ 'highlight': 'WarningMsg',
+! \ 'border': [],
+ \ })
+ < Use {options} to change the properties.
+
+***************
+*** 339,345 ****
+ zindex priority for the popup, default 50
+ time time in milliseconds after which the popup will close;
+ when omitted |popup_close()| must be used.
+- {not implemented yet}
+ moved "cell": close the popup if the cursor moved at least
+ one screen cell; "word" allows for moving within
+ |<cword>|, "WORD" allows for moving within |<cWORD>|,
+--- 339,344 ----
+*** ../vim-8.1.1401/src/version.c 2019-05-26 19:20:33.024744457 +0200
+--- src/version.c 2019-05-26 20:09:05.008561819 +0200
+***************
+*** 769,770 ****
+--- 769,772 ----
+ { /* Add new patch number below this line */
++ /**/
++ 1402,
+ /**/
+
+--
+Q. What happens to programmers when they die?
+A: MS-Windows programmers are reinstalled. C++ programmers become undefined,
+ anyone who refers to them will die as well. Java programmers reincarnate
+ after being garbage collected, unless they are in permgen, in which case
+ they become zombies. Zimbu programmers leave a stack trace that tells us
+ exactly where they died and how they got there.
+
+ /// 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 ///