# HG changeset patch # User Juri Linkov # Date 1275676691 -10800 # Node ID e7c6230ab85dcd02a9689c60389843457eecb688 # Parent c2ac5cece5ea352c925648fc8f5100c959ba4572 * 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 diff -r c2ac5cece5ea -r e7c6230ab85d lisp/ChangeLog --- a/lisp/ChangeLog Fri Jun 04 16:13:35 2010 +0200 +++ b/lisp/ChangeLog Fri Jun 04 21:38:11 2010 +0300 @@ -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 -r c2ac5cece5ea -r e7c6230ab85d lisp/simple.el --- a/lisp/simple.el Fri Jun 04 16:13:35 2010 +0200 +++ b/lisp/simple.el Fri Jun 04 21:38:11 2010 +0300 @@ -2905,24 +2905,27 @@ (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))))