From 0665f66133e1991559c58ab57112becf1c9fb70e Mon Sep 17 00:00:00 2001 From: Juri Linkov Date: Fri, 4 Jun 2010 21:38:11 +0300 Subject: [PATCH] * lisp/simple.el (kill-new): Fix logic of kill-do-not-save-duplicates. Instead of setting `replace' to t and replacing the same string with itself, don't do certain actions when kill-do-not-save-duplicates is non-nil and string is equal to car of kill-ring: don't call menu-bar-update-yank-menu, don't push interprogram-paste strings to kill-ring, and don't push the input argument `string' to kill-ring. http://lists.gnu.org/archive/html/emacs-devel/2010-06/msg00072.html --- lisp/ChangeLog | 11 +++++++++++ lisp/simple.el | 31 +++++++++++++++++-------------- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c90df7c810a..707bb8ff4c1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,14 @@ +2010-06-04 Juri Linkov + + * simple.el (kill-new): Fix logic of kill-do-not-save-duplicates. + Instead of setting `replace' to t and replacing the same string + with itself, don't do certain actions when + kill-do-not-save-duplicates is non-nil and string is equal to car + of kill-ring: don't call menu-bar-update-yank-menu, don't push + interprogram-paste strings to kill-ring, and don't push the input + argument `string' to kill-ring. + http://lists.gnu.org/archive/html/emacs-devel/2010-06/msg00072.html + 2010-06-04 Juanma Barranquero * subr.el (directory-sep-char): Move from fileio.c and make a defconst. diff --git a/lisp/simple.el b/lisp/simple.el index 608151e5dd2..08ed329a9b8 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -2905,24 +2905,27 @@ argument should still be a \"useful\" string for such uses." (if yank-handler (signal 'args-out-of-range (list string "yank-handler specified for empty string")))) - (when (and kill-do-not-save-duplicates - (equal string (car kill-ring))) - (setq replace t)) - (if (fboundp 'menu-bar-update-yank-menu) - (menu-bar-update-yank-menu string (and replace (car kill-ring)))) + (unless (and kill-do-not-save-duplicates + (equal string (car kill-ring))) + (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) - (if (> (length kill-ring) kill-ring-max) - (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil))) + (dolist (s (if (listp interprogram-paste) + (nreverse interprogram-paste) + (list interprogram-paste))) + (unless (and kill-do-not-save-duplicates + (equal s (car kill-ring))) + (push s kill-ring)))))) + (unless (and kill-do-not-save-duplicates + (equal string (car kill-ring))) + (if (and replace kill-ring) + (setcar kill-ring string) + (push string kill-ring) + (if (> (length kill-ring) kill-ring-max) + (setcdr (nthcdr (1- kill-ring-max) kill-ring) nil)))) (setq kill-ring-yank-pointer kill-ring) (if interprogram-cut-function (funcall interprogram-cut-function string (not replace)))) -- 2.39.2