diff options
Diffstat (limited to 'data/vim/patches/8.1.1453')
-rw-r--r-- | data/vim/patches/8.1.1453 | 584 |
1 files changed, 0 insertions, 584 deletions
diff --git a/data/vim/patches/8.1.1453 b/data/vim/patches/8.1.1453 deleted file mode 100644 index 6bddda72b..000000000 --- a/data/vim/patches/8.1.1453 +++ /dev/null @@ -1,584 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.1453 -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.1453 -Problem: Popup window "moved" property not implemented yet. -Solution: Implement it. -Files: src/main.c, src/edit.c, src/gui.c, src/globals.h, src/structs.h, - src/screen.c, src/popupwin.c, src/proto/popupwin.pro, - src/testdir/test_popupwin.vim, runtime/doc/popup.txt - - -*** ../vim-8.1.1452/src/main.c 2019-05-24 18:48:36.762128482 +0200 ---- src/main.c 2019-06-02 17:03:56.230707184 +0200 -*************** -*** 1159,1164 **** ---- 1159,1167 ---- - /* Trigger CursorMoved if the cursor moved. */ - if (!finish_op && ( - has_cursormoved() -+ #ifdef FEAT_TEXT_PROP -+ || popup_visible -+ #endif - #ifdef FEAT_CONCEAL - || curwin->w_p_cole > 0 - #endif -*************** -*** 1168,1181 **** - if (has_cursormoved()) - apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, - FALSE, curbuf); -! # ifdef FEAT_CONCEAL - if (curwin->w_p_cole > 0) - { - conceal_old_cursor_line = last_cursormoved.lnum; - conceal_new_cursor_line = curwin->w_cursor.lnum; - conceal_update_lines = TRUE; - } -! # endif - last_cursormoved = curwin->w_cursor; - } - ---- 1171,1188 ---- - if (has_cursormoved()) - apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, - FALSE, curbuf); -! #ifdef FEAT_TEXT_PROP -! if (popup_visible) -! popup_check_cursor_pos(); -! #endif -! #ifdef FEAT_CONCEAL - if (curwin->w_p_cole > 0) - { - conceal_old_cursor_line = last_cursormoved.lnum; - conceal_new_cursor_line = curwin->w_cursor.lnum; - conceal_update_lines = TRUE; - } -! #endif - last_cursormoved = curwin->w_cursor; - } - -*** ../vim-8.1.1452/src/edit.c 2019-05-24 19:38:59.096545552 +0200 ---- src/edit.c 2019-06-02 18:12:32.244392562 +0200 -*************** -*** 1456,1463 **** - * inserting sequences of characters (e.g., for CTRL-R). - */ - void -! ins_redraw( -! int ready UNUSED) /* not busy with something */ - { - #ifdef FEAT_CONCEAL - linenr_T conceal_old_cursor_line = 0; ---- 1456,1462 ---- - * inserting sequences of characters (e.g., for CTRL-R). - */ - void -! ins_redraw(int ready) // not busy with something - { - #ifdef FEAT_CONCEAL - linenr_T conceal_old_cursor_line = 0; -*************** -*** 1468,1477 **** - if (char_avail()) - return; - -- #if defined(FEAT_CONCEAL) - /* Trigger CursorMoved if the cursor moved. Not when the popup menu is - * visible, the command might delete it. */ - if (ready && (has_cursormovedI() - # if defined(FEAT_CONCEAL) - || curwin->w_p_cole > 0 - # endif ---- 1467,1478 ---- - if (char_avail()) - return; - - /* Trigger CursorMoved if the cursor moved. Not when the popup menu is - * visible, the command might delete it. */ - if (ready && (has_cursormovedI() -+ # ifdef FEAT_TEXT_PROP -+ || popup_visible -+ # endif - # if defined(FEAT_CONCEAL) - || curwin->w_p_cole > 0 - # endif -*************** -*** 1497,1502 **** ---- 1498,1507 ---- - update_curswant(); - ins_apply_autocmds(EVENT_CURSORMOVEDI); - } -+ #ifdef FEAT_TEXT_PROP -+ if (popup_visible) -+ popup_check_cursor_pos(); -+ #endif - # ifdef FEAT_CONCEAL - if (curwin->w_p_cole > 0) - { -*************** -*** 1507,1513 **** - # endif - last_cursormoved = curwin->w_cursor; - } -- #endif - - /* Trigger TextChangedI if b_changedtick differs. */ - if (ready && has_textchangedI() ---- 1512,1517 ---- -*************** -*** 3859,3865 **** - if (replace_stack_len <= replace_stack_nr) - { - replace_stack_len += 50; -! p = alloc(sizeof(char_u) * replace_stack_len); - if (p == NULL) /* out of memory */ - { - replace_stack_len -= 50; ---- 3863,3869 ---- - if (replace_stack_len <= replace_stack_nr) - { - replace_stack_len += 50; -! p = ALLOC_MULT(char_u, replace_stack_len); - if (p == NULL) /* out of memory */ - { - replace_stack_len -= 50; -*** ../vim-8.1.1452/src/gui.c 2019-05-24 18:48:36.758128504 +0200 ---- src/gui.c 2019-06-02 17:03:51.394743342 +0200 -*************** -*** 5117,5122 **** ---- 5117,5125 ---- - - /* Trigger CursorMoved if the cursor moved. */ - if (!finish_op && (has_cursormoved() -+ # ifdef FEAT_TEXT_PROP -+ || popup_visible -+ # endif - # ifdef FEAT_CONCEAL - || curwin->w_p_cole > 0 - # endif -*************** -*** 5124,5129 **** ---- 5127,5136 ---- - { - if (has_cursormoved()) - apply_autocmds(EVENT_CURSORMOVED, NULL, NULL, FALSE, curbuf); -+ #ifdef FEAT_TEXT_PROP -+ if (popup_visible) -+ popup_check_cursor_pos(); -+ #endif - # ifdef FEAT_CONCEAL - if (curwin->w_p_cole > 0) - { -*** ../vim-8.1.1452/src/globals.h 2019-05-26 18:48:09.402542633 +0200 ---- src/globals.h 2019-06-02 17:04:22.518512240 +0200 -*************** -*** 558,581 **** - EXTERN win_T *firstwin; /* first window */ - EXTERN win_T *lastwin; /* last window */ - EXTERN win_T *prevwin INIT(= NULL); /* previous window */ -! # define ONE_WINDOW (firstwin == lastwin) -! # define W_NEXT(wp) ((wp)->w_next) -! # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) -! # define FOR_ALL_FRAMES(frp, first_frame) \ - for (frp = first_frame; frp != NULL; frp = frp->fr_next) -! # define FOR_ALL_TABPAGES(tp) for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) -! # define FOR_ALL_WINDOWS_IN_TAB(tp, wp) \ - for ((wp) = ((tp) == NULL || (tp) == curtab) \ - ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) - /* - * When using this macro "break" only breaks out of the inner loop. Use "goto" - * to break out of the tabpage loop. - */ -! # define FOR_ALL_TAB_WINDOWS(tp, wp) \ - for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ - for ((wp) = ((tp) == curtab) \ - ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) - - EXTERN win_T *curwin; /* currently active window */ - - EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ ---- 558,582 ---- - EXTERN win_T *firstwin; /* first window */ - EXTERN win_T *lastwin; /* last window */ - EXTERN win_T *prevwin INIT(= NULL); /* previous window */ -! #define ONE_WINDOW (firstwin == lastwin) -! #define W_NEXT(wp) ((wp)->w_next) -! #define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next) -! #define FOR_ALL_FRAMES(frp, first_frame) \ - for (frp = first_frame; frp != NULL; frp = frp->fr_next) -! #define FOR_ALL_TABPAGES(tp) for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) -! #define FOR_ALL_WINDOWS_IN_TAB(tp, wp) \ - for ((wp) = ((tp) == NULL || (tp) == curtab) \ - ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) - /* - * When using this macro "break" only breaks out of the inner loop. Use "goto" - * to break out of the tabpage loop. - */ -! #define FOR_ALL_TAB_WINDOWS(tp, wp) \ - for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \ - for ((wp) = ((tp) == curtab) \ - ? firstwin : (tp)->tp_firstwin; (wp); (wp) = (wp)->w_next) - -+ - EXTERN win_T *curwin; /* currently active window */ - - EXTERN win_T *aucmd_win; /* window used in aucmd_prepbuf() */ -*************** -*** 1663,1666 **** ---- 1664,1668 ---- - - #ifdef FEAT_TEXT_PROP - EXTERN int text_prop_frozen INIT(= 0); -+ EXTERN int popup_visible INIT(= FALSE); - #endif -*** ../vim-8.1.1452/src/structs.h 2019-06-02 14:49:52.372891128 +0200 ---- src/structs.h 2019-06-02 17:09:32.012375995 +0200 -*************** -*** 2897,2902 **** ---- 2897,2908 ---- - // computed - callback_T w_close_cb; // popup close callback - callback_T w_filter_cb; // popup filter callback -+ -+ win_T *w_popup_curwin; // close popup if curwin differs -+ linenr_T w_popup_lnum; // close popup if cursor not on this line -+ colnr_T w_popup_mincol; // close popup if cursor before this col -+ colnr_T w_popup_maxcol; // close popup if cursor after this col -+ - # if defined(FEAT_TIMERS) - timer_T *w_popup_timer; // timer for closing popup window - # endif -*** ../vim-8.1.1452/src/screen.c 2019-06-02 15:56:11.839730143 +0200 ---- src/screen.c 2019-06-02 17:05:40.501948236 +0200 -*************** -*** 1050,1055 **** ---- 1050,1056 ---- - // so that the window with a higher zindex is drawn later, thus goes on - // top. - // TODO: don't redraw every popup every time. -+ popup_visible = FALSE; - popup_reset_handled(); - while ((wp = find_next_popup(TRUE)) != NULL) - { -*************** -*** 1066,1071 **** ---- 1067,1073 ---- - - // Draw the popup text. - win_update(wp); -+ popup_visible = TRUE; - - wp->w_winrow -= top_off; - wp->w_wincol -= left_off; -*** ../vim-8.1.1452/src/popupwin.c 2019-06-02 16:51:18.011257964 +0200 ---- src/popupwin.c 2019-06-02 17:58:17.393963233 +0200 -*************** -*** 285,290 **** ---- 285,333 ---- - } - } - } -+ -+ di = dict_find(dict, (char_u *)"moved", -1); -+ if (di != NULL) -+ { -+ wp->w_popup_curwin = curwin; -+ wp->w_popup_lnum = curwin->w_cursor.lnum; -+ wp->w_popup_mincol = curwin->w_cursor.col; -+ wp->w_popup_maxcol = curwin->w_cursor.col; -+ if (di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL) -+ { -+ char_u *s = di->di_tv.vval.v_string; -+ int flags = 0; -+ -+ if (STRCMP(s, "word") == 0) -+ flags = FIND_IDENT | FIND_STRING; -+ else if (STRCMP(s, "WORD") == 0) -+ flags = FIND_STRING; -+ else if (STRCMP(s, "any") != 0) -+ semsg(_(e_invarg2), s); -+ if (flags != 0) -+ { -+ char_u *ptr; -+ int len = find_ident_under_cursor(&ptr, flags); -+ -+ if (len > 0) -+ { -+ wp->w_popup_mincol = (int)(ptr - ml_get_curline()); -+ wp->w_popup_maxcol = wp->w_popup_mincol + len - 1; -+ } -+ } -+ } -+ else if (di->di_tv.v_type == VAR_LIST -+ && di->di_tv.vval.v_list != NULL -+ && di->di_tv.vval.v_list->lv_len == 2) -+ { -+ list_T *l = di->di_tv.vval.v_list; -+ -+ wp->w_popup_mincol = tv_get_number(&l->lv_first->li_tv); -+ wp->w_popup_maxcol = tv_get_number(&l->lv_first->li_next->li_tv); -+ } -+ else -+ semsg(_(e_invarg2), tv_get_string(&di->di_tv)); -+ } - } - - /* -*************** -*** 708,713 **** ---- 751,771 ---- - } - - /* -+ * Close popup "wp" and invoke any close callback for it. -+ */ -+ static void -+ popup_close_and_callback(win_T *wp, typval_T *arg) -+ { -+ int id = wp->w_id; -+ -+ if (wp->w_close_cb.cb_name != NULL) -+ // Careful: This may make "wp" invalid. -+ invoke_popup_callback(wp, arg); -+ -+ popup_close(id); -+ } -+ -+ /* - * popup_close({id}) - */ - void -*************** -*** 717,729 **** - win_T *wp = find_popup_win(id); - - if (wp != NULL) -! { -! if (wp->w_close_cb.cb_name != NULL) -! // Careful: This may make "wp" invalid. -! invoke_popup_callback(wp, &argvars[1]); -! -! popup_close(id); -! } - } - - /* ---- 775,781 ---- - win_T *wp = find_popup_win(id); - - if (wp != NULL) -! popup_close_and_callback(wp, &argvars[1]); - } - - /* -*************** -*** 1066,1069 **** ---- 1118,1145 ---- - return res; - } - -+ /* -+ * Called when the cursor moved: check if any popup needs to be closed if the -+ * cursor moved far enough. -+ */ -+ void -+ popup_check_cursor_pos() -+ { -+ win_T *wp; -+ typval_T tv; -+ -+ popup_reset_handled(); -+ while ((wp = find_next_popup(TRUE)) != NULL) -+ if (wp->w_popup_curwin != NULL -+ && (curwin != wp->w_popup_curwin -+ || curwin->w_cursor.lnum != wp->w_popup_lnum -+ || curwin->w_cursor.col < wp->w_popup_mincol -+ || curwin->w_cursor.col > wp->w_popup_maxcol)) -+ { -+ tv.v_type = VAR_NUMBER; -+ tv.vval.v_number = -1; -+ popup_close_and_callback(wp, &tv); -+ } -+ } -+ - #endif // FEAT_TEXT_PROP -*** ../vim-8.1.1452/src/proto/popupwin.pro 2019-06-01 17:13:15.880517743 +0200 ---- src/proto/popupwin.pro 2019-06-02 17:15:02.082311611 +0200 -*************** -*** 17,20 **** ---- 17,21 ---- - void popup_reset_handled(void); - win_T *find_next_popup(int lowest); - int popup_do_filter(int c); -+ void popup_check_cursor_pos(void); - /* vim: set ft=c : */ -*** ../vim-8.1.1452/src/testdir/test_popupwin.vim 2019-06-02 16:51:18.011257964 +0200 ---- src/testdir/test_popupwin.vim 2019-06-02 18:37:10.534590921 +0200 -*************** -*** 909,915 **** - %bwipe! - endfunc - -! function Test_adjust_left_past_screen_width() - " width of screen - let X = join(map(range(&columns), {->'X'}), '') - ---- 909,915 ---- - %bwipe! - endfunc - -! func Test_adjust_left_past_screen_width() - " width of screen - let X = join(map(range(&columns), {->'X'}), '') - -*************** -*** 973,976 **** - - popupclear - %bwipe! -! endfunction ---- 973,1037 ---- - - popupclear - %bwipe! -! endfunc -! -! func Test_popup_moved() -! new -! call test_override('char_avail', 1) -! call setline(1, ['one word to move around', 'a WORD.and->some thing']) -! -! exe "normal gg0/word\<CR>" -! let winid = popup_atcursor('text', {'moved': 'any'}) -! redraw -! call assert_equal(1, popup_getpos(winid).visible) -! " trigger the check for last_cursormoved by going into insert mode -! call feedkeys("li\<Esc>", 'xt') -! call assert_equal({}, popup_getpos(winid)) -! popupclear -! -! exe "normal gg0/word\<CR>" -! let winid = popup_atcursor('text', {'moved': 'word'}) -! redraw -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("hi\<Esc>", 'xt') -! call assert_equal({}, popup_getpos(winid)) -! popupclear -! -! exe "normal gg0/word\<CR>" -! let winid = popup_atcursor('text', {'moved': 'word'}) -! redraw -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("li\<Esc>", 'xt') -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("ei\<Esc>", 'xt') -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("eli\<Esc>", 'xt') -! call assert_equal({}, popup_getpos(winid)) -! popupclear -! -! exe "normal gg0/WORD\<CR>" -! let winid = popup_atcursor('text', {'moved': 'WORD'}) -! redraw -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("eli\<Esc>", 'xt') -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("wi\<Esc>", 'xt') -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("Eli\<Esc>", 'xt') -! call assert_equal({}, popup_getpos(winid)) -! popupclear -! -! exe "normal gg0/word\<CR>" -! let winid = popup_atcursor('text', {'moved': [5, 10]}) -! redraw -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("eli\<Esc>", 'xt') -! call feedkeys("ei\<Esc>", 'xt') -! call assert_equal(1, popup_getpos(winid).visible) -! call feedkeys("eli\<Esc>", 'xt') -! call assert_equal({}, popup_getpos(winid)) -! popupclear -! -! bwipe! -! call test_override('ALL', 0) -! endfunc -*** ../vim-8.1.1452/runtime/doc/popup.txt 2019-06-02 14:49:52.368891150 +0200 ---- runtime/doc/popup.txt 2019-06-02 17:30:33.520955494 +0200 -*************** -*** 90,96 **** - - IMPLEMENTATION: - - Code is in popupwin.c -- - Fix positioning with border and padding. - - Why does 'nrformats' leak from the popup window buffer??? - - Make redrawing more efficient and avoid flicker. - First draw popups, creating a mask, use the mask in screen_line() when ---- 90,95 ---- -*************** -*** 410,422 **** - zindex Priority for the popup, default 50. - time Time in milliseconds after which the popup will close. - When omitted |popup_close()| must be used. -! moved "cell": close the popup if the cursor moved at least -! one screen cell. -! "word" allows for moving the cursor within |<cword>| -! "WORD" allows for moving the cursor within |<cWORD>| -! a list with two numbers specifies the start and end -! column outside of which the popup will close -! {not implemented yet} - filter A callback that can filter typed characters, see - |popup-filter|. - callback A callback that is called when the popup closes, e.g. ---- 409,422 ---- - zindex Priority for the popup, default 50. - time Time in milliseconds after which the popup will close. - When omitted |popup_close()| must be used. -! moved Specifies to close the popup if the cursor moved: -! - "any": if the cursor moved at all -! - "word": if the cursor moved outside |<cword>| -! - "WORD": if the cursor moved outside |<cWORD>| -! - [{start}, {end}]: if the cursor moved before column -! {start} or after {end} -! The popup also closes if the cursor moves to another -! line or to another window. - filter A callback that can filter typed characters, see - |popup-filter|. - callback A callback that is called when the popup closes, e.g. -*************** -*** 510,515 **** ---- 510,518 ---- - result, which could be an index in the popup lines, or whatever was passed as - the second argument of `popup_close()`. - -+ If the popup is closed because the cursor moved, the number -1 is passed to -+ the callback. -+ - ============================================================================== - 3. Examples *popup-examples* - -*** ../vim-8.1.1452/src/version.c 2019-06-02 16:51:18.011257964 +0200 ---- src/version.c 2019-06-02 18:37:36.630426619 +0200 -*************** -*** 769,770 **** ---- 769,772 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 1453, - /**/ - --- -From "know your smileys": -¯\_(ツ)_/¯ Shrug - - /// 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 /// |