]> git.eshelyaron.com Git - emacs.git/commitdiff
Allow not putting pasted text onto the kill ring under xterm
authorLars Ingebrigtsen <larsi@gnus.org>
Fri, 3 Sep 2021 07:45:32 +0000 (09:45 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Fri, 3 Sep 2021 07:47:18 +0000 (09:47 +0200)
* lisp/term/xterm.el (xterm-paste): Don't put pasted text onto the
kill ring (bug#28868).
(xterm-store-paste-on-kill-ring): New user option.

etc/NEWS
lisp/term/xterm.el

index bf371a18e44712f9c0290bc90b3506341129b606..0fe988a19ce189f0f8ea09d3c5fe9e840378b2e7 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -3152,6 +3152,13 @@ It used to be mapped to 'print' but we couldn't find a terminal
 that uses this sequence for any kind of 'Print' key.
 This makes the Menu key (see https://en.wikipedia.org/wiki/Menu_key)
 work for `context-menu-mode` in Xterm.
+
+---
+** New user option 'xterm-store-paste-on-kill-ring'.
+If non-nil (the default), Emacs pushes pasted text onto the kill ring
+(if using an xterm-like terminal that supports bracketed paste).
+Setting this to nil inhibits that.
+
 \f
 * Incompatible Lisp Changes in Emacs 28.1
 
index 43a89ff31f71367f324c41ff4177befea1d899aa..de5f000089a311944a436a15b2eca1130a81ede6 100644 (file)
@@ -73,6 +73,13 @@ string bytes that can be copied is 3/4 of this value."
   :version "27.1"
   :type 'boolean)
 
+(defcustom xterm-store-paste-on-kill-ring t
+  "If non-nil, pasting text into Emacs will put the text onto the kill ring.
+This user option is only heeded when using a terminal using xterm
+capabilities, and only when that terminal understands bracketed paste."
+  :version "28.1"
+  :type 'boolean)
+
 (defconst xterm-paste-ending-sequence "\e[201~"
   "Characters sent by the terminal to end a bracketed paste.")
 
@@ -100,9 +107,15 @@ Return the pasted text as a string."
   (interactive "e")
   (unless (eq (car-safe event) 'xterm-paste)
     (error "xterm-paste must be found to xterm-paste event"))
-  (let* ((pasted-text (nth 1 event))
-         (interprogram-paste-function (lambda () pasted-text)))
-    (yank)))
+  (let ((pasted-text (nth 1 event)))
+    (if xterm-store-paste-on-kill-ring
+        ;; Put the text onto the kill ring and then insert it into the
+        ;; buffer.
+        (let ((interprogram-paste-function (lambda () pasted-text)))
+          (yank))
+      ;; Insert the text without putting it onto the kill ring.
+      (push-mark)
+      (insert-for-yank pasted-text))))
 
 ;; Put xterm-paste itself in global-map because, after translation,
 ;; it's just a normal input event.