summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0228
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0228')
-rw-r--r--data/vim/patches/8.1.0228569
1 files changed, 0 insertions, 569 deletions
diff --git a/data/vim/patches/8.1.0228 b/data/vim/patches/8.1.0228
deleted file mode 100644
index 6c1ab54c7..000000000
--- a/data/vim/patches/8.1.0228
+++ /dev/null
@@ -1,569 +0,0 @@
-To: vim_dev@googlegroups.com
-Subject: Patch 8.1.0228
-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.0228
-Problem: Dropping files is ignored while Vim is busy.
-Solution: Postpone the effect of dropping files until it's safe.
-Files: src/ex_docmd.c, src/proto/ex_docmd.pro, src/gui.c, src/gui.h,
- src/screen.c, src/main.c, src/gui_mac.c
-
-
-*** ../vim-8.1.0227/src/ex_docmd.c 2018-07-28 17:07:48.608154066 +0200
---- src/ex_docmd.c 2018-07-29 17:22:20.940320176 +0200
-***************
-*** 7859,7915 ****
- do_shell(NULL, 0);
- }
-
-! #if defined(HAVE_DROP_FILE) \
-! || (defined(FEAT_GUI_GTK) && defined(FEAT_DND)) \
-! || defined(FEAT_GUI_MSWIN) \
-! || defined(FEAT_GUI_MAC) \
-! || defined(PROTO)
-
-! /*
-! * Handle a file drop. The code is here because a drop is *nearly* like an
-! * :args command, but not quite (we have a list of exact filenames, so we
-! * don't want to (a) parse a command line, or (b) expand wildcards. So the
-! * code is very similar to :args and hence needs access to a lot of the static
-! * functions in this file.
-! *
-! * The list should be allocated using alloc(), as should each item in the
-! * list. This function takes over responsibility for freeing the list.
-! *
-! * XXX The list is made into the argument list. This is freed using
-! * FreeWild(), which does a series of vim_free() calls.
-! */
-! void
-! handle_drop(
-! int filec, /* the number of files dropped */
-! char_u **filev, /* the list of files dropped */
-! int split) /* force splitting the window */
- {
- exarg_T ea;
- int save_msg_scroll = msg_scroll;
-
-! /* Postpone this while editing the command line. */
-! if (text_locked())
-! return;
-! if (curbuf_locked())
-! return;
-!
-! /* When the screen is being updated we should not change buffers and
-! * windows structures, it may cause freed memory to be used. */
-! if (updating_screen)
-! return;
-
- /* Check whether the current buffer is changed. If so, we will need
- * to split the current window or data could be lost.
- * We don't need to check if the 'hidden' option is set, as in this
- * case the buffer won't be lost.
- */
-! if (!buf_hide(curbuf) && !split)
- {
- ++emsg_off;
-! split = check_changed(curbuf, CCGD_AW);
- --emsg_off;
- }
-! if (split)
- {
- if (win_split(0, 0) == FAIL)
- return;
---- 7859,7895 ----
- do_shell(NULL, 0);
- }
-
-! #if defined(HAVE_DROP_FILE) || defined(PROTO)
-
-! static int drop_busy = FALSE;
-! static int drop_filec;
-! static char_u **drop_filev = NULL;
-! static int drop_split;
-! static void (*drop_callback)(void *);
-! static void *drop_cookie;
-!
-! static void
-! handle_drop_internal(void)
- {
- exarg_T ea;
- int save_msg_scroll = msg_scroll;
-
-! // Setting the argument list may cause screen updates and being called
-! // recursively. Avoid that by setting drop_busy.
-! drop_busy = TRUE;
-
- /* Check whether the current buffer is changed. If so, we will need
- * to split the current window or data could be lost.
- * We don't need to check if the 'hidden' option is set, as in this
- * case the buffer won't be lost.
- */
-! if (!buf_hide(curbuf) && !drop_split)
- {
- ++emsg_off;
-! drop_split = check_changed(curbuf, CCGD_AW);
- --emsg_off;
- }
-! if (drop_split)
- {
- if (win_split(0, 0) == FAIL)
- return;
-***************
-*** 7924,7930 ****
- /*
- * Set up the new argument list.
- */
-! alist_set(ALIST(curwin), filec, filev, FALSE, NULL, 0);
-
- /*
- * Move to the first file.
---- 7904,7910 ----
- /*
- * Set up the new argument list.
- */
-! alist_set(ALIST(curwin), drop_filec, drop_filev, FALSE, NULL, 0);
-
- /*
- * Move to the first file.
-***************
-*** 7942,7947 ****
---- 7922,7999 ----
- * unexpectedly. The screen will be redrawn by the caller, thus
- * msg_scroll being set by displaying a message is irrelevant. */
- msg_scroll = save_msg_scroll;
-+
-+ if (drop_callback != NULL)
-+ drop_callback(drop_cookie);
-+
-+ drop_filev = NULL;
-+ drop_busy = FALSE;
-+ }
-+
-+ /*
-+ * Handle a file drop. The code is here because a drop is *nearly* like an
-+ * :args command, but not quite (we have a list of exact filenames, so we
-+ * don't want to (a) parse a command line, or (b) expand wildcards. So the
-+ * code is very similar to :args and hence needs access to a lot of the static
-+ * functions in this file.
-+ *
-+ * The "filev" list must have been allocated using alloc(), as should each item
-+ * in the list. This function takes over responsibility for freeing the "filev"
-+ * list.
-+ */
-+ void
-+ handle_drop(
-+ int filec, // the number of files dropped
-+ char_u **filev, // the list of files dropped
-+ int split, // force splitting the window
-+ void (*callback)(void *), // to be called after setting the argument
-+ // list
-+ void *cookie) // argument for "callback" (allocated)
-+ {
-+ // Cannot handle recursive drops, finish the pending one.
-+ if (drop_busy)
-+ {
-+ FreeWild(filec, filev);
-+ vim_free(cookie);
-+ return;
-+ }
-+
-+ // When calling handle_drop() more than once in a row we only use the last
-+ // one.
-+ if (drop_filev != NULL)
-+ {
-+ FreeWild(drop_filec, drop_filev);
-+ vim_free(drop_cookie);
-+ }
-+
-+ drop_filec = filec;
-+ drop_filev = filev;
-+ drop_split = split;
-+ drop_callback = callback;
-+ drop_cookie = cookie;
-+
-+ // Postpone this when:
-+ // - editing the command line
-+ // - not possible to change the current buffer
-+ // - updating the screen
-+ // As it may change buffers and window structures that are in use and cause
-+ // freed memory to be used.
-+ if (text_locked() || curbuf_locked() || updating_screen)
-+ return;
-+
-+ handle_drop_internal();
-+ }
-+
-+ /*
-+ * To be called when text is unlocked, curbuf is unlocked or updating_screen is
-+ * reset: Handle a postponed drop.
-+ */
-+ void
-+ handle_any_postponed_drop(void)
-+ {
-+ if (!drop_busy && drop_filev != NULL
-+ && !text_locked() && !curbuf_locked() && !updating_screen)
-+ handle_drop_internal();
- }
- #endif
-
-*** ../vim-8.1.0227/src/proto/ex_docmd.pro 2018-05-17 13:52:34.000000000 +0200
---- src/proto/ex_docmd.pro 2018-07-29 16:58:19.612440949 +0200
-***************
-*** 31,37 ****
- void tabpage_close(int forceit);
- void tabpage_close_other(tabpage_T *tp, int forceit);
- void ex_all(exarg_T *eap);
-! void handle_drop(int filec, char_u **filev, int split);
- void alist_clear(alist_T *al);
- void alist_init(alist_T *al);
- void alist_unlink(alist_T *al);
---- 31,38 ----
- void tabpage_close(int forceit);
- void tabpage_close_other(tabpage_T *tp, int forceit);
- void ex_all(exarg_T *eap);
-! void handle_drop(int filec, char_u **filev, int split, void (*callback)(void *), void *cookie);
-! void handle_any_postponed_drop(void);
- void alist_clear(alist_T *al);
- void alist_init(alist_T *al);
- void alist_unlink(alist_T *al);
-*** ../vim-8.1.0227/src/gui.c 2018-07-29 16:09:14.636945607 +0200
---- src/gui.c 2018-07-29 16:52:45.218249227 +0200
-***************
-*** 5383,5392 ****
-
- #endif
-
-! #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
-! || defined(FEAT_GUI_MSWIN) \
-! || defined(FEAT_GUI_MAC) \
-! || defined(PROTO)
-
- static void gui_wingoto_xy(int x, int y);
-
---- 5383,5389 ----
-
- #endif
-
-! #if defined(HAVE_DROP_FILE) || defined(PROTO)
-
- static void gui_wingoto_xy(int x, int y);
-
-***************
-*** 5409,5414 ****
---- 5406,5447 ----
- }
-
- /*
-+ * Function passed to handle_drop() for the actions to be done after the
-+ * argument list has been updated.
-+ */
-+ static void
-+ drop_callback(void *cookie)
-+ {
-+ char_u *p = cookie;
-+
-+ /* If Shift held down, change to first file's directory. If the first
-+ * item is a directory, change to that directory (and let the explorer
-+ * plugin show the contents). */
-+ if (p != NULL)
-+ {
-+ if (mch_isdir(p))
-+ {
-+ if (mch_chdir((char *)p) == 0)
-+ shorten_fnames(TRUE);
-+ }
-+ else if (vim_chdirfile(p, "drop") == OK)
-+ shorten_fnames(TRUE);
-+ vim_free(p);
-+ }
-+
-+ /* Update the screen display */
-+ update_screen(NOT_VALID);
-+ # ifdef FEAT_MENU
-+ gui_update_menus(0);
-+ # endif
-+ #ifdef FEAT_TITLE
-+ maketitle();
-+ #endif
-+ setcursor();
-+ out_flush_cursor(FALSE, FALSE);
-+ }
-+
-+ /*
- * Process file drop. Mouse cursor position, key modifiers, name of files
- * and count of files are given. Argument "fnames[count]" has full pathnames
- * of dropped files, they will be freed in this function, and caller can't use
-***************
-*** 5488,5520 ****
- vim_free(fnames);
- }
- else
-! handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0);
-!
-! /* If Shift held down, change to first file's directory. If the first
-! * item is a directory, change to that directory (and let the explorer
-! * plugin show the contents). */
-! if (p != NULL)
-! {
-! if (mch_isdir(p))
-! {
-! if (mch_chdir((char *)p) == 0)
-! shorten_fnames(TRUE);
-! }
-! else if (vim_chdirfile(p, "drop") == OK)
-! shorten_fnames(TRUE);
-! vim_free(p);
-! }
-!
-! /* Update the screen display */
-! update_screen(NOT_VALID);
-! # ifdef FEAT_MENU
-! gui_update_menus(0);
-! # endif
-! #ifdef FEAT_TITLE
-! maketitle();
-! #endif
-! setcursor();
-! out_flush_cursor(FALSE, FALSE);
- }
-
- entered = FALSE;
---- 5521,5528 ----
- vim_free(fnames);
- }
- else
-! handle_drop(count, fnames, (modifiers & MOUSE_CTRL) != 0,
-! drop_callback, (void *)p);
- }
-
- entered = FALSE;
-*** ../vim-8.1.0227/src/gui.h 2018-05-05 18:42:37.000000000 +0200
---- src/gui.h 2018-07-29 16:52:19.418385701 +0200
-***************
-*** 65,72 ****
- /*
- * GUIs that support dropping files on a running Vim.
- */
-! #if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MAC) \
-! || defined(FEAT_GUI_GTK)
- # define HAVE_DROP_FILE
- #endif
-
---- 65,73 ----
- /*
- * GUIs that support dropping files on a running Vim.
- */
-! #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \
-! || defined(FEAT_GUI_MSWIN) \
-! || defined(FEAT_GUI_MAC)
- # define HAVE_DROP_FILE
- #endif
-
-*** ../vim-8.1.0227/src/screen.c 2018-07-29 16:09:14.644945560 +0200
---- src/screen.c 2018-07-29 16:51:41.606584708 +0200
-***************
-*** 526,531 ****
---- 526,537 ----
- #ifdef FEAT_TERMINAL
- term_check_channel_closed_recently();
- #endif
-+
-+ #ifdef HAVE_DROP_FILE
-+ // If handle_drop() was called while updating_screen was TRUE need to
-+ // handle the drop now.
-+ handle_any_postponed_drop();
-+ #endif
- }
-
- /*
-*** ../vim-8.1.0227/src/main.c 2018-06-23 16:12:15.784258242 +0200
---- src/main.c 2018-07-29 17:02:36.091020303 +0200
-***************
-*** 911,917 ****
-
- /*
- * Call the main command loop. This never returns.
-! */
- main_loop(FALSE, FALSE);
-
- #endif /* NO_VIM_MAIN */
---- 911,917 ----
-
- /*
- * Call the main command loop. This never returns.
-! */
- main_loop(FALSE, FALSE);
-
- #endif /* NO_VIM_MAIN */
-***************
-*** 1155,1163 ****
- else if (do_redraw || stuff_empty())
- {
- #ifdef FEAT_GUI
-! /* If ui_breakcheck() was used a resize may have been postponed. */
- gui_may_resize_shell();
- #endif
- /* Trigger CursorMoved if the cursor moved. */
- if (!finish_op && (
- has_cursormoved()
---- 1155,1169 ----
- else if (do_redraw || stuff_empty())
- {
- #ifdef FEAT_GUI
-! // If ui_breakcheck() was used a resize may have been postponed.
- gui_may_resize_shell();
- #endif
-+ #ifdef HAVE_DROP_FILE
-+ // If files were dropped while text was locked or the curbuf was
-+ // locked, this would be a good time to handle the drop.
-+ handle_any_postponed_drop();
-+ #endif
-+
- /* Trigger CursorMoved if the cursor moved. */
- if (!finish_op && (
- has_cursormoved()
-*** ../vim-8.1.0227/src/gui_mac.c 2018-03-06 18:53:06.000000000 +0100
---- src/gui_mac.c 2018-07-29 17:33:07.670760672 +0200
-***************
-*** 1007,1012 ****
---- 1007,1061 ----
- long theDate; // modification date/time
- };
-
-+ static long drop_numFiles;
-+ static short drop_gotPosition;
-+ static SelectionRange drop_thePosition;
-+
-+ static void
-+ drop_callback(void *cookie UNUSED)
-+ {
-+ /* TODO: Handle the goto/select line more cleanly */
-+ if ((drop_numFiles == 1) & (drop_gotPosition))
-+ {
-+ if (drop_thePosition.lineNum >= 0)
-+ {
-+ lnum = drop_thePosition.lineNum + 1;
-+ /* oap->motion_type = MLINE;
-+ setpcmark();*/
-+ if (lnum < 1L)
-+ lnum = 1L;
-+ else if (lnum > curbuf->b_ml.ml_line_count)
-+ lnum = curbuf->b_ml.ml_line_count;
-+ curwin->w_cursor.lnum = lnum;
-+ curwin->w_cursor.col = 0;
-+ /* beginline(BL_SOL | BL_FIX);*/
-+ }
-+ else
-+ goto_byte(drop_thePosition.startRange + 1);
-+ }
-+
-+ /* Update the screen display */
-+ update_screen(NOT_VALID);
-+
-+ /* Select the text if possible */
-+ if (drop_gotPosition)
-+ {
-+ VIsual_active = TRUE;
-+ VIsual_select = FALSE;
-+ VIsual = curwin->w_cursor;
-+ if (drop_thePosition.lineNum < 0)
-+ {
-+ VIsual_mode = 'v';
-+ goto_byte(drop_thePosition.endRange);
-+ }
-+ else
-+ {
-+ VIsual_mode = 'V';
-+ VIsual.col = 0;
-+ }
-+ }
-+ }
-+
- /* The IDE uses the optional keyAEPosition parameter to tell the ed-
- itor the selection range. If lineNum is zero or greater, scroll the text
- to the specified line. If lineNum is less than zero, use the values in
-***************
-*** 1113,1160 ****
- }
-
- /* Handle the drop, :edit to get to the file */
-! handle_drop(numFiles, fnames, FALSE);
-!
-! /* TODO: Handle the goto/select line more cleanly */
-! if ((numFiles == 1) & (gotPosition))
-! {
-! if (thePosition.lineNum >= 0)
-! {
-! lnum = thePosition.lineNum + 1;
-! /* oap->motion_type = MLINE;
-! setpcmark();*/
-! if (lnum < 1L)
-! lnum = 1L;
-! else if (lnum > curbuf->b_ml.ml_line_count)
-! lnum = curbuf->b_ml.ml_line_count;
-! curwin->w_cursor.lnum = lnum;
-! curwin->w_cursor.col = 0;
-! /* beginline(BL_SOL | BL_FIX);*/
-! }
-! else
-! goto_byte(thePosition.startRange + 1);
-! }
-!
-! /* Update the screen display */
-! update_screen(NOT_VALID);
-!
-! /* Select the text if possible */
-! if (gotPosition)
-! {
-! VIsual_active = TRUE;
-! VIsual_select = FALSE;
-! VIsual = curwin->w_cursor;
-! if (thePosition.lineNum < 0)
-! {
-! VIsual_mode = 'v';
-! goto_byte(thePosition.endRange);
-! }
-! else
-! {
-! VIsual_mode = 'V';
-! VIsual.col = 0;
-! }
-! }
-
- setcursor();
- out_flush();
---- 1162,1171 ----
- }
-
- /* Handle the drop, :edit to get to the file */
-! drop_numFiles = numFiles;
-! drop_gotPosition = gotPosition;
-! drop_thePosition = thePosition;
-! handle_drop(numFiles, fnames, FALSE, drop_callback, NULL);
-
- setcursor();
- out_flush();
-*** ../vim-8.1.0227/src/version.c 2018-07-29 16:13:13.431551849 +0200
---- src/version.c 2018-07-29 16:44:55.344870301 +0200
-***************
-*** 796,797 ****
---- 796,799 ----
- { /* Add new patch number below this line */
-+ /**/
-+ 228,
- /**/
-
-
---
-We do not stumble over mountains, but over molehills.
- Confucius
-
- /// 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 ///