(save-interprogram-paste-before-kill): New user option.

(kill-new): When `save-interprogram-paste-before-kill' is non-nil,
save the interprogram-paste into kill-ring before overriding it
with the Emacs kill.
This commit is contained in:
Sam Steingold 2009-08-26 20:55:39 +00:00
parent 5654bf6320
commit 4ed8c7aadb
2 changed files with 30 additions and 0 deletions

View file

@ -1,3 +1,10 @@
2009-08-26 Sam Steingold <sds@gnu.org>
* simple.el (save-interprogram-paste-before-kill): New user option.
(kill-new): When `save-interprogram-paste-before-kill' is non-nil,
save the interprogram-paste into kill-ring before overriding it
with the Emacs kill.
2009-08-26 Dan Nicolaescu <dann@ics.uci.edu>
* vc.el (vc-trunk-p): Rename to vc-rcs-trunk-p and move to vc-rcs.el.

View file

@ -2794,6 +2794,17 @@ ring directly.")
(defvar kill-ring-yank-pointer nil
"The tail of the kill ring whose car is the last thing yanked.")
(defcustom save-interprogram-paste-before-kill nil
"Save the paste strings into `kill-ring' before replacing it with emacs strings.
When one selects something in another program to paste it into Emacs,
but kills something in Emacs before actually pasting it,
this selection is gone unless this variable is non-nil,
in which case the other program's selection is saved in the `kill-ring'
before the Emacs kill and one can still paste it using \\[yank] \\[yank-pop]."
:type 'boolean
:group 'killing
:version "23.2")
(defun kill-new (string &optional replace yank-handler)
"Make STRING the latest kill in the kill ring.
Set `kill-ring-yank-pointer' to point to it.
@ -2806,6 +2817,10 @@ inserted into a buffer; see `insert-for-yank' for details.
When a yank handler is specified, STRING must be non-empty (the yank
handler, if non-nil, is stored as a `yank-handler' text property on STRING).
When `save-interprogram-paste-before-kill' and `interprogram-paste-function'
are non-nil, saves the interprogram paste string(s) into `kill-ring' before
STRING.
When the yank handler has a non-nil PARAM element, the original STRING
argument is not used by `insert-for-yank'. However, since Lisp code
may access and use elements from the kill ring directly, the STRING
@ -2819,6 +2834,14 @@ argument should still be a \"useful\" string for such uses."
(list string "yank-handler specified for empty string"))))
(if (fboundp 'menu-bar-update-yank-menu)
(menu-bar-update-yank-menu string (and replace (car kill-ring))))
(when save-interprogram-paste-before-kill
(let ((interprogram-paste (and interprogram-paste-function
(funcall interprogram-paste-function))))
(when interprogram-paste
(if (listp interprogram-paste)
(dolist (s (nreverse interprogram-paste))
(push s kill-ring))
(push interprogram-paste kill-ring)))))
(if (and replace kill-ring)
(setcar kill-ring string)
(push string kill-ring)