From: Juri Linkov <juri@linkov.net>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 48478@debbugs.gnu.org
Subject: bug#48478: 28.0.50; yank-from-kill-ring and kill-ring-yank-pointer
Date: Tue, 18 May 2021 00:10:57 +0300 [thread overview]
Message-ID: <874kf1yq92.fsf@mail.linkov.net> (raw)
In-Reply-To: <83h7j1twym.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 17 May 2021 14:34:57 +0300")
[-- Attachment #1: Type: text/plain, Size: 1546 bytes --]
> If one uses "C-y M-y M-y ... C-y", the last C-y will yank the
> same kill-ring entry that the M-y before it. But if one uses
> "M-y M-y ... C-y", the last C-y will yank not the entry produced
> by the last M-y, but the one after it. Which means
> yank-from-kill-ring leaves the kill-ring-yank-pointer at a different
> entry than yank-pop does.
>
> Bug or feature? If the latter, what is the rationale for the
> different operation?
This is an unfinished feature, i.e. currently yank-from-kill-ring
simply has no special handling of kill-ring-yank-pointer.
When I tried to add it, I noticed that it has many possible
variants of implementation, so I stuck with analysis paralysis.
Perhaps we should have a new option with several choices:
1. Don't change kill-ring-yank-pointer (as it does now).
This is useful when the user wants to type a predictable
number of M-p in the minibuffer history to yank the same
previously-killed text from the kill-ring several times.
2. Adjust kill-ring-yank-pointer to point to the selected text.
3. Still unclear how to adjust kill-ring-yank-pointer
when the user selects a previous text
then edits it before yanking.
Regarding 7b82584c69, actually the description of 'M-y' in
(info "(emacs) Isearch Yank") was accurate. It correctly
described the behavior of isearch-yank-pop that activates
the minibuffer. The problem is that after recent controversy,
'M-y' was rebound to the backward-compatible command
isearch-yank-pop-only.
A FIXME from 7b82584c69 is implemented by this patch:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: read-from-kill-ring-prompt.patch --]
[-- Type: text/x-diff, Size: 2348 bytes --]
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 095f8ba145..c52718d94a 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2583,7 +2585,7 @@ isearch-yank-from-kill-ring
"Read a string from the `kill-ring' and append it to the search string."
(interactive)
(with-isearch-suspended
- (let ((string (read-from-kill-ring)))
+ (let ((string (read-from-kill-ring "Yank from kill-ring: ")))
(if (and isearch-case-fold-search
(eq 'not-yanks search-upper-case))
(setq string (downcase string)))
diff --git a/lisp/simple.el b/lisp/simple.el
index 90942df0da..08c7c903a8 100644
--- a/lisp/simple.el
+++ b/lisp/simple.el
@@ -5587,7 +5587,8 @@ yank-pop
property, in the way that `yank' does."
(interactive "p")
(if (not (eq last-command 'yank))
- (yank-from-kill-ring (read-from-kill-ring) current-prefix-arg)
+ (yank-from-kill-ring (read-from-kill-ring "Yank from kill-ring: ")
+ current-prefix-arg)
(setq this-command 'yank)
(unless arg (setq arg 1))
(let ((inhibit-read-only t)
@@ -5676,7 +5677,7 @@ rotate-yank-pointer
(current-kill arg))
(defvar read-from-kill-ring-history)
-(defun read-from-kill-ring ()
+(defun read-from-kill-ring (prompt)
"Read a `kill-ring' entry using completion and minibuffer history."
;; `current-kill' updates `kill-ring' with a possible interprogram-paste
(current-kill 0)
@@ -5721,11 +5722,7 @@ read-from-kill-ring
(define-key map "?" nil)
map)))
(completing-read
- ;; FIXME: This prompt is specific to using this function from
- ;; yank-related commands, but the function could be used in
- ;; other contexts. Should the prompt be passed via an
- ;; argument?
- "Yank from kill-ring: "
+ prompt
(lambda (string pred action)
(if (eq action 'metadata)
;; Keep sorted by recency
@@ -5755,7 +5752,8 @@ yank-from-kill-ring
beginning of the inserted text and mark at the end, like `yank' does.
When called from Lisp, insert STRING like `insert-for-yank' does."
- (interactive (list (read-from-kill-ring) current-prefix-arg))
+ (interactive (list (read-from-kill-ring "Yank from kill-ring: ")
+ current-prefix-arg))
(push-mark)
(insert-for-yank string)
(if (consp arg)
next prev parent reply other threads:[~2021-05-17 21:10 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-17 11:34 bug#48478: 28.0.50; yank-from-kill-ring and kill-ring-yank-pointer Eli Zaretskii
2021-05-17 14:35 ` Lars Ingebrigtsen
2021-05-17 21:10 ` Juri Linkov [this message]
2021-05-18 11:51 ` Eli Zaretskii
2021-05-18 20:24 ` Juri Linkov
2021-05-19 2:30 ` Eli Zaretskii
2021-05-19 16:31 ` Juri Linkov
2021-05-20 9:32 ` Eli Zaretskii
2021-05-20 18:02 ` Juri Linkov
2021-05-20 19:04 ` Eli Zaretskii
2021-05-20 19:56 ` Juri Linkov
2021-05-20 20:10 ` Eli Zaretskii
2021-05-20 20:44 ` Juri Linkov
2021-05-21 5:51 ` Eli Zaretskii
2021-05-21 18:18 ` Juri Linkov
2021-05-22 6:41 ` Eli Zaretskii
2021-05-22 20:59 ` Juri Linkov
2021-05-23 7:19 ` Eli Zaretskii
2021-05-25 20:35 ` Juri Linkov
2021-05-26 12:05 ` Eli Zaretskii
2021-05-26 22:09 ` Juri Linkov
2021-05-27 7:30 ` Eli Zaretskii
2021-05-30 22:32 ` Juri Linkov
2021-05-31 12:08 ` Eli Zaretskii
2021-05-31 20:20 ` Juri Linkov
2021-06-01 12:13 ` Eli Zaretskii
2021-06-01 20:32 ` Juri Linkov
2021-06-02 14:57 ` Eli Zaretskii
2021-06-02 21:10 ` Juri Linkov
2021-06-03 6:19 ` Eli Zaretskii
2021-06-03 20:55 ` Juri Linkov
2021-06-04 5:57 ` Eli Zaretskii
2021-06-04 16:46 ` Juri Linkov
2021-06-04 19:04 ` Eli Zaretskii
2021-06-05 21:35 ` Juri Linkov
2021-06-06 5:52 ` Eli Zaretskii
2021-06-06 20:52 ` Juri Linkov
2021-06-07 12:16 ` Eli Zaretskii
2021-06-08 16:55 ` Juri Linkov
2021-06-10 12:07 ` Eli Zaretskii
2021-06-11 17:10 ` Juri Linkov
2021-06-11 18:06 ` Eli Zaretskii
2021-06-11 18:33 ` Juri Linkov
2021-06-11 19:23 ` Eli Zaretskii
2021-06-11 19:16 ` Eli Zaretskii
2021-05-30 22:23 ` Juri Linkov
2021-05-31 12:04 ` Eli Zaretskii
2021-05-31 20:17 ` Juri Linkov
2021-06-01 12:12 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=874kf1yq92.fsf@mail.linkov.net \
--to=juri@linkov.net \
--cc=48478@debbugs.gnu.org \
--cc=eliz@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).