* bug#61535: 29.0.60; choose-completion erases in-region buffer @ 2023-02-15 18:32 Juri Linkov 2023-02-15 19:35 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: Juri Linkov @ 2023-02-15 18:32 UTC (permalink / raw) To: 61535 0. emacs-29 -Q 1. type: (with-c C-M-i 2. type: M-down ... M-RET 3. check that the whole buffer was deleted before a selected completion candidate was inserted to the buffer: C-h v buffer-undo-list RET Here is a possible fix for emacs-29: diff --git a/lisp/simple.el b/lisp/simple.el index c58acfe3adc..1924567cc3f 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -9882,7 +9882,8 @@ choose-completion (with-current-buffer buffer (choose-completion-string choice buffer - (or (and completion-use-base-affixes base-affixes) + (or (and (not completion-in-region-mode) + completion-use-base-affixes base-affixes) base-position ;; If all else fails, just guess. (list (choose-completion-guess-base-position choice))) ^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-15 18:32 bug#61535: 29.0.60; choose-completion erases in-region buffer Juri Linkov @ 2023-02-15 19:35 ` Eli Zaretskii 2023-02-16 17:51 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2023-02-15 19:35 UTC (permalink / raw) To: Juri Linkov; +Cc: 61535 > From: Juri Linkov <juri@linkov.net> > Date: Wed, 15 Feb 2023 20:32:18 +0200 > > 0. emacs-29 -Q > 1. type: (with-c C-M-i > 2. type: M-down ... M-RET > 3. check that the whole buffer was deleted before a selected > completion candidate was inserted to the buffer: > C-h v buffer-undo-list RET Which buffer was deleted? *scratch*? It isn't here. And what does "C-h v buffer-undo-list RET" mean? Bottom line: I don't understand what is the bug here and/or how to reproduce it. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-15 19:35 ` Eli Zaretskii @ 2023-02-16 17:51 ` Juri Linkov 2023-02-16 20:09 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: Juri Linkov @ 2023-02-16 17:51 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 61535 >> 1. type: (with-c C-M-i >> 2. type: M-down ... M-RET >> 3. check that the whole buffer was deleted before a selected >> completion candidate was inserted to the buffer: >> C-h v buffer-undo-list RET > > Which buffer was deleted? *scratch*? It isn't here. > > And what does "C-h v buffer-undo-list RET" mean? > > Bottom line: I don't understand what is the bug here and/or how to > reproduce it. The contents of the *scratch* buffer is erased and replaced with the same text. This fact can be confirmed by looking at the value of 'buffer-undo-list' that contains the text of the whole buffer as a string. Especially this is noticeable when using in-region completion in a large buffer. With the patch, only the completed string is inserted. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-16 17:51 ` Juri Linkov @ 2023-02-16 20:09 ` Eli Zaretskii 2023-02-17 7:50 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2023-02-16 20:09 UTC (permalink / raw) To: Juri Linkov; +Cc: 61535 > From: Juri Linkov <juri@linkov.net> > Cc: 61535@debbugs.gnu.org > Date: Thu, 16 Feb 2023 19:51:05 +0200 > > >> 1. type: (with-c C-M-i > >> 2. type: M-down ... M-RET > >> 3. check that the whole buffer was deleted before a selected > >> completion candidate was inserted to the buffer: > >> C-h v buffer-undo-list RET > > > > Which buffer was deleted? *scratch*? It isn't here. > > > > And what does "C-h v buffer-undo-list RET" mean? > > > > Bottom line: I don't understand what is the bug here and/or how to > > reproduce it. > > The contents of the *scratch* buffer is erased and replaced > with the same text. This fact can be confirmed by looking > at the value of 'buffer-undo-list' that contains the text > of the whole buffer as a string. Especially this is noticeable > when using in-region completion in a large buffer. > > With the patch, only the completed string is inserted. Thanks for the explanation. Then please install this on master, since AFAIU this is a very old problem, and it's just an aesthetic one. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-16 20:09 ` Eli Zaretskii @ 2023-02-17 7:50 ` Juri Linkov 2023-02-17 8:37 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: Juri Linkov @ 2023-02-17 7:50 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 61535 >> >> 1. type: (with-c C-M-i >> >> 2. type: M-down ... M-RET >> >> 3. check that the whole buffer was deleted before a selected >> >> completion candidate was inserted to the buffer: >> >> C-h v buffer-undo-list RET >> > >> > Which buffer was deleted? *scratch*? It isn't here. >> > >> > And what does "C-h v buffer-undo-list RET" mean? >> > >> > Bottom line: I don't understand what is the bug here and/or how to >> > reproduce it. >> >> The contents of the *scratch* buffer is erased and replaced >> with the same text. This fact can be confirmed by looking >> at the value of 'buffer-undo-list' that contains the text >> of the whole buffer as a string. Especially this is noticeable >> when using in-region completion in a large buffer. >> >> With the patch, only the completed string is inserted. > > Thanks for the explanation. Then please install this on master, since > AFAIU this is a very old problem, and it's just an aesthetic one. Actually, this is not an old problem. It's in a new feature added in 29.1. And this patch fixes the new feature. This is different from a similar problem fixed now in bug#61479 that is really an old problem. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-17 7:50 ` Juri Linkov @ 2023-02-17 8:37 ` Eli Zaretskii 2023-02-18 18:43 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2023-02-17 8:37 UTC (permalink / raw) To: Juri Linkov; +Cc: 61535 > From: Juri Linkov <juri@linkov.net> > Cc: 61535@debbugs.gnu.org > Date: Fri, 17 Feb 2023 09:50:40 +0200 > > >> >> 1. type: (with-c C-M-i > >> >> 2. type: M-down ... M-RET > >> >> 3. check that the whole buffer was deleted before a selected > >> >> completion candidate was inserted to the buffer: > >> >> C-h v buffer-undo-list RET > >> > > >> > Which buffer was deleted? *scratch*? It isn't here. > >> > > >> > And what does "C-h v buffer-undo-list RET" mean? > >> > > >> > Bottom line: I don't understand what is the bug here and/or how to > >> > reproduce it. > >> > >> The contents of the *scratch* buffer is erased and replaced > >> with the same text. This fact can be confirmed by looking > >> at the value of 'buffer-undo-list' that contains the text > >> of the whole buffer as a string. Especially this is noticeable > >> when using in-region completion in a large buffer. > >> > >> With the patch, only the completed string is inserted. > > > > Thanks for the explanation. Then please install this on master, since > > AFAIU this is a very old problem, and it's just an aesthetic one. > > Actually, this is not an old problem. It's in a new feature added in 29.1. Hmmm... I don't think I see that. Both completion-in-region-mode and the condition at that place haven't changed in a while. The addition of completion-use-base-affixes part is new, but since it's via 'and', it cannot have changed what the code before did, only cause it to do that in fewer cases. What am I missing? > And this patch fixes the new feature. This is different from a similar > problem fixed now in bug#61479 that is really an old problem. This is all undecipherable for me, sorry. What is that "new feature", and how is it fixed here? And how is bug#61479 relevant? ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-17 8:37 ` Eli Zaretskii @ 2023-02-18 18:43 ` Juri Linkov 2023-02-18 19:30 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: Juri Linkov @ 2023-02-18 18:43 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 61535 >> >> >> 1. type: (with-c C-M-i >> >> >> 2. type: M-down ... M-RET >> >> Actually, this is not an old problem. It's in a new feature added in 29.1. > > Hmmm... I don't think I see that. Both completion-in-region-mode and > the condition at that place haven't changed in a while. The addition > of completion-use-base-affixes part is new, but since it's via 'and', > it cannot have changed what the code before did, only cause it to do > that in fewer cases. What am I missing? 'M-RET' above is new. It's bound to the new function 'minibuffer-choose-completion' that let-binds 'completion-use-base-affixes' to t that works only in the minibuffer, not in 'completion-in-region-mode'. >> And this patch fixes the new feature. This is different from a similar >> problem fixed now in bug#61479 that is really an old problem. > > This is all undecipherable for me, sorry. What is that "new feature", > and how is it fixed here? New feature is 'M-RET', 'minibuffer-choose-completion', 'completion-use-base-affixes'. What is fixed here is their interaction. > And how is bug#61479 relevant? It's an example of a bug fixed in an old feature. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-18 18:43 ` Juri Linkov @ 2023-02-18 19:30 ` Eli Zaretskii 2023-02-19 17:31 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2023-02-18 19:30 UTC (permalink / raw) To: Juri Linkov; +Cc: 61535 > From: Juri Linkov <juri@linkov.net> > Cc: 61535@debbugs.gnu.org > Date: Sat, 18 Feb 2023 20:43:21 +0200 > > >> >> >> 1. type: (with-c C-M-i > >> >> >> 2. type: M-down ... M-RET > >> > >> Actually, this is not an old problem. It's in a new feature added in 29.1. > > > > Hmmm... I don't think I see that. Both completion-in-region-mode and > > the condition at that place haven't changed in a while. The addition > > of completion-use-base-affixes part is new, but since it's via 'and', > > it cannot have changed what the code before did, only cause it to do > > that in fewer cases. What am I missing? > > 'M-RET' above is new. It's bound to the new function > 'minibuffer-choose-completion' that let-binds > 'completion-use-base-affixes' to t that works > only in the minibuffer, not in 'completion-in-region-mode'. > > >> And this patch fixes the new feature. This is different from a similar > >> problem fixed now in bug#61479 that is really an old problem. > > > > This is all undecipherable for me, sorry. What is that "new feature", > > and how is it fixed here? > > New feature is 'M-RET', 'minibuffer-choose-completion', > 'completion-use-base-affixes'. What is fixed here > is their interaction. Sorry, I'm still confused. The patch you want to install is diff --git a/lisp/simple.el b/lisp/simple.el index c58acfe3adc..1924567cc3f 100644 --- a/lisp/simple.el +++ b/lisp/simple.el @@ -9882,7 +9882,8 @@ choose-completion (with-current-buffer buffer (choose-completion-string choice buffer - (or (and completion-use-base-affixes base-affixes) + (or (and (not completion-in-region-mode) + completion-use-base-affixes base-affixes) base-position ;; If all else fails, just guess. (list (choose-completion-guess-base-position choice))) But by default, completion-in-region-mode is t and completion-use-base-affixes is nil. So this code is never executed in the recipe you posted, right? Moreover, if I look at buffer-undo-list, I don't think I see there that the entire buffer text of *scratch* was deleted and recreated. So what am I missing, and what is the problem you are trying to fix? ^ permalink raw reply related [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-18 19:30 ` Eli Zaretskii @ 2023-02-19 17:31 ` Juri Linkov 2023-02-19 18:35 ` Eli Zaretskii 0 siblings, 1 reply; 11+ messages in thread From: Juri Linkov @ 2023-02-19 17:31 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 61535 >> >> >> >> 1. type: (with-c C-M-i >> >> >> >> 2. type: M-down ... M-RET >> >> 'M-RET' above is new. It's bound to the new function >> 'minibuffer-choose-completion' that let-binds >> 'completion-use-base-affixes' to t that works >> only in the minibuffer, not in 'completion-in-region-mode'. > > Sorry, I'm still confused. The patch you want to install is > > diff --git a/lisp/simple.el b/lisp/simple.el > index c58acfe3adc..1924567cc3f 100644 > --- a/lisp/simple.el > +++ b/lisp/simple.el > @@ -9882,7 +9882,8 @@ choose-completion > (with-current-buffer buffer > (choose-completion-string > choice buffer > - (or (and completion-use-base-affixes base-affixes) > + (or (and (not completion-in-region-mode) > + completion-use-base-affixes base-affixes) > base-position > ;; If all else fails, just guess. > (list (choose-completion-guess-base-position choice))) > > But by default, completion-in-region-mode is t and > completion-use-base-affixes is nil. So this code is never executed in > the recipe you posted, right? M-RET is bound to minibuffer-choose-completion in completion-in-region-mode-map. minibuffer-choose-completion let-binds completion-use-base-affixes to t before calling choose-completion. Therefore completion-use-base-affixes should be ignored in choose-completion for completion-in-region-mode. > Moreover, if I look at buffer-undo-list, I don't think I see there > that the entire buffer text of *scratch* was deleted and recreated. > > So what am I missing, and what is the problem you are trying to fix? Here is the output of 'C-h v buffer-undo-list' after typing M-RET in the *scratch* buffer: buffer-undo-list is a variable defined in ‘C source code’. Its value is shown below. Value: (nil (1 . 166) (#(";; This buffer is for text that is not saved, and for Lisp evaluation. ;; To create a file, visit it with C-x C-f and enter text in its buffer. (with-c" 0 3 ... ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-19 17:31 ` Juri Linkov @ 2023-02-19 18:35 ` Eli Zaretskii 2023-02-19 19:32 ` Juri Linkov 0 siblings, 1 reply; 11+ messages in thread From: Eli Zaretskii @ 2023-02-19 18:35 UTC (permalink / raw) To: Juri Linkov; +Cc: 61535 > From: Juri Linkov <juri@linkov.net> > Cc: 61535@debbugs.gnu.org > Date: Sun, 19 Feb 2023 19:31:27 +0200 > > > But by default, completion-in-region-mode is t and > > completion-use-base-affixes is nil. So this code is never executed in > > the recipe you posted, right? > > M-RET is bound to minibuffer-choose-completion in completion-in-region-mode-map. > minibuffer-choose-completion let-binds completion-use-base-affixes to t > before calling choose-completion. Therefore completion-use-base-affixes > should be ignored in choose-completion for completion-in-region-mode. OK, thanks for the explanations. I wonder if some of the above should be in comments to the code, though. Please install the patch on emacs-29. ^ permalink raw reply [flat|nested] 11+ messages in thread
* bug#61535: 29.0.60; choose-completion erases in-region buffer 2023-02-19 18:35 ` Eli Zaretskii @ 2023-02-19 19:32 ` Juri Linkov 0 siblings, 0 replies; 11+ messages in thread From: Juri Linkov @ 2023-02-19 19:32 UTC (permalink / raw) To: Eli Zaretskii; +Cc: 61535-done >> M-RET is bound to minibuffer-choose-completion in completion-in-region-mode-map. >> minibuffer-choose-completion let-binds completion-use-base-affixes to t >> before calling choose-completion. Therefore completion-use-base-affixes >> should be ignored in choose-completion for completion-in-region-mode. > > OK, thanks for the explanations. I wonder if some of the above should > be in comments to the code, though. Added to comments. > Please install the patch on emacs-29. Done. ^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2023-02-19 19:32 UTC | newest] Thread overview: 11+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-02-15 18:32 bug#61535: 29.0.60; choose-completion erases in-region buffer Juri Linkov 2023-02-15 19:35 ` Eli Zaretskii 2023-02-16 17:51 ` Juri Linkov 2023-02-16 20:09 ` Eli Zaretskii 2023-02-17 7:50 ` Juri Linkov 2023-02-17 8:37 ` Eli Zaretskii 2023-02-18 18:43 ` Juri Linkov 2023-02-18 19:30 ` Eli Zaretskii 2023-02-19 17:31 ` Juri Linkov 2023-02-19 18:35 ` Eli Zaretskii 2023-02-19 19:32 ` Juri Linkov
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).