diff src/normal.c @ 23021:d10a37eb91ee v8.2.2057

patch 8.2.2057: getting the selection may trigger TextYankPost autocmd Commit: https://github.com/vim/vim/commit/fccbf068f8c85474db8d8dead1530321d1f3e5b8 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Nov 26 20:34:00 2020 +0100 patch 8.2.2057: getting the selection may trigger TextYankPost autocmd Problem: Getting the selection may trigger TextYankPost autocmd. Solution: Only trigger the autocommand when yanking in Vim, not for getting the selection. (closes #7367)
author Bram Moolenaar <Bram@vim.org>
date Thu, 26 Nov 2020 20:45:03 +0100
parents 6d50182e7e24
children 5fbac68bda23
line wrap: on
line diff
--- a/src/normal.c
+++ b/src/normal.c
@@ -1325,6 +1325,26 @@ check_visual_highlight(void)
     }
 }
 
+#if defined(FEAT_CLIPBOARD) && defined(FEAT_EVAL)
+/*
+ * Call yank_do_autocmd() for "regname".
+ */
+    static void
+call_yank_do_autocmd(int regname)
+{
+    oparg_T	oa;
+    yankreg_T	*reg;
+
+    clear_oparg(&oa);
+    oa.regname = regname;
+    oa.op_type = OP_YANK;
+    oa.is_VIsual = TRUE;
+    reg = get_register(regname, TRUE);
+    yank_do_autocmd(&oa, reg);
+    free_register(reg);
+}
+#endif
+
 /*
  * End Visual mode.
  * This function should ALWAYS be called to end Visual mode, except from
@@ -1342,6 +1362,18 @@ end_visual_mode(void)
      */
     if (clip_star.available && clip_star.owned)
 	clip_auto_select();
+
+# if defined(FEAT_EVAL)
+    // Emit a TextYankPost for the automatic copy of the selection into the
+    // star and/or plus register.
+    if (has_textyankpost())
+    {
+	if (clip_isautosel_star())
+	    call_yank_do_autocmd('*');
+	if (clip_isautosel_plus())
+	    call_yank_do_autocmd('+');
+    }
+# endif
 #endif
 
     VIsual_active = FALSE;