Subject: Re: bug#51138: Increase the value of kill-ring-max

From: Stefan Kangas <[email-masked]>
Date: Tue, 12 Oct 2021 16:21:59 -0700

tags 51138 + patch
thanks

Lars Ingebrigtsen <[email-masked]> writes:

> Me neither.  There may be repercussions for packages like undo-tree and
> the like (that display undo stuff), so perhaps just doubling it in Emacs
> 29 is the right thing, and then we'll see whether there's any fallout.

Makes sense.  How does the attached patch look?

It should also fix the issue indicated by Juri by adding a new user
option for the number of entries in the "Paste from Kill Ring" menu.
I set it to 60 by default, as that was the previous max number of
entries, and it feels like it should have the least amount of impact to
just change nothing, but I'm open to alternative suggestions.
From b4e36e9628758c637181252051a3fa6992f67ebd Mon Sep 17 00:00:00 2001
From: Stefan Kangas <[email-masked]>
Date: Tue, 12 Oct 2021 18:23:46 +0200
Subject: [PATCH] Double the default value of kill-ring-max

* lisp/simple.el (kill-ring-max): Double the default to 120.
* lisp/menu-bar.el (yank-menu-length): Doc fix.
(yank-menu-max-items): New variable.
(menu-bar-update-yank-menu): Don't display more than
'yank-menu-max-items' in the yank menu.

* doc/emacs/custom.texi (Changing a Variable):
* doc/emacs/killing.texi (Kill Ring):
* doc/lispintro/emacs-lisp-intro.texi (kill-new function):
* doc/lispref/text.texi (Internals of Kill Ring): Doc fix to use
the new value.
---
 doc/emacs/custom.texi               |  2 +-
 doc/emacs/killing.texi              |  2 +-
 doc/lispintro/emacs-lisp-intro.texi |  2 +-
 doc/lispref/text.texi               |  2 +-
 etc/NEWS                            |  8 ++++++++
 lisp/menu-bar.el                    | 13 ++++++++++---
 lisp/simple.el                      |  5 +++--
 7 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/doc/emacs/custom.texi b/doc/emacs/custom.texi
index 73dfe03898..eb30a6acc5 100644
--- a/doc/emacs/custom.texi
+++ b/doc/emacs/custom.texi
@@ -195,7 +195,7 @@ Changing a Variable
 
   The first line shows that the variable is named
 @code{kill-ring-max}, formatted as @samp{Kill Ring Max} for easier
-viewing.  Its value is @samp{60}.  The button labeled @samp{[Hide]},
+viewing.  Its value is @samp{120}.  The button labeled @samp{[Hide]},
 if activated, hides the variable's value and state; this is useful to
 avoid cluttering up the customization buffer with very long values
 (for this reason, variables that have very long values may start out
diff --git a/doc/emacs/killing.texi b/doc/emacs/killing.texi
index 6e4fd77e8b..76fccdbdfe 100644
--- a/doc/emacs/killing.texi
+++ b/doc/emacs/killing.texi
@@ -353,7 +353,7 @@ Kill Ring
 
 @vindex kill-ring-max
   The maximum number of entries in the kill ring is controlled by the
-variable @code{kill-ring-max}.  The default is 60.  If you make a new
+variable @code{kill-ring-max}.  The default is 120.  If you make a new
 kill when this limit has been reached, Emacs makes room by deleting
 the oldest entry in the kill ring.
 
diff --git a/doc/lispintro/emacs-lisp-intro.texi b/doc/lispintro/emacs-lisp-intro.texi
index 6ecd552ebb..81ae253633 100644
--- a/doc/lispintro/emacs-lisp-intro.texi
+++ b/doc/lispintro/emacs-lisp-intro.texi
@@ -8767,7 +8767,7 @@ kill-new function
 
 The code checks whether the length of the kill ring is greater than
 the maximum permitted length.  This is the value of
-@code{kill-ring-max} (which is 60, by default).  If the length of the
+@code{kill-ring-max} (which is 120, by default).  If the length of the
 kill ring is too long, then this code sets the last element of the
 kill ring to @code{nil}.  It does this by using two functions,
 @code{nthcdr} and @code{setcdr}.
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi
index 1e062be2c6..163ac9038b 100644
--- a/doc/lispref/text.texi
+++ b/doc/lispref/text.texi
@@ -1342,7 +1342,7 @@ Internals of Kill Ring
 @defopt kill-ring-max
 The value of this variable is the maximum length to which the kill
 ring can grow, before elements are thrown away at the end.  The default
-value for @code{kill-ring-max} is 60.
+value for @code{kill-ring-max} is 120.
 @end defopt
 
 @node Undo
diff --git a/etc/NEWS b/etc/NEWS
index 9daf958b07..82847cf9b9 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -78,6 +78,14 @@ the point is now moved only when releasing the mouse button.  This no
 longer results in a bogus selection, unless the mouse has been
 effectively dragged.
 
++++
+** 'kill-ring-max' now defaults to 120.
+
+---
+** New user option 'yank-menu-max-items'.
+Customize this option to limit the amount of entries in the menu
+"Edit->Paste from Kill Menu".  The default is 60.
+
 
 * Changes in Specialized Modes and Packages in Emacs 29.1
 
diff --git a/lisp/menu-bar.el b/lisp/menu-bar.el
index 7c9fc1aeba..923b0c6060 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -2169,10 +2169,16 @@ delete-frame-enabled-p
     (> count 1)))
 
 (defcustom yank-menu-length 20
-  "Maximum length to display in the `yank-menu'."
+  "Maximum length of entries in the `yank-menu'."
   :type 'integer
   :group 'menu)
 
+(defcustom yank-menu-max-items 60
+  "Maximum number of entries to display in the `yank-menu'."
+  :type 'integer
+  :group 'menu
+  :version "29.1")
+
 (defun menu-bar-update-yank-menu (string old)
   (let ((front (car (cdr yank-menu)))
 	(menu-string (if (<= (length string) yank-menu-length)
@@ -2196,8 +2202,9 @@ menu-bar-update-yank-menu
 	      (cons
 	       (cons string (cons menu-string 'menu-bar-select-yank))
 	       (cdr yank-menu)))))
-  (if (> (length (cdr yank-menu)) kill-ring-max)
-      (setcdr (nthcdr kill-ring-max yank-menu) nil)))
+  (let ((max-items (min yank-menu-max-items kill-ring-max)))
+    (if (> (length (cdr yank-menu)) max-items)
+        (setcdr (nthcdr max-items yank-menu) nil))))
 
 (put 'menu-bar-select-yank 'apropos-inhibit t)
 (defun menu-bar-select-yank ()
diff --git a/lisp/simple.el b/lisp/simple.el
index 841983a3b6..d9cc382775 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5076,10 +5076,11 @@ kill-ring
 interaction; you may want to use them instead of manipulating the kill
 ring directly.")
 
-(defcustom kill-ring-max 60
+(defcustom kill-ring-max 120
   "Maximum length of kill ring before oldest elements are thrown away."
   :type 'integer
-  :group 'killing)
+  :group 'killing
+  :version "29.1")
 
 (defvar kill-ring-yank-pointer nil
   "The tail of the kill ring whose car is the last thing yanked.")
-- 
2.30.2