GNU bug report logs - #7138
24.0.50; Markers lost with minibuffer completion

Previous Next

Package: emacs;

Reported by: "Aaron S. Hawley" <aaron.s.hawley <at> gmail.com>

Date: Thu, 30 Sep 2010 15:40:04 UTC

Severity: normal

Found in version 24.0.50

Done: Stefan Monnier <monnier <at> iro.umontreal.ca>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 7138 in the body.
You can then email your comments to 7138 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to owner <at> debbugs.gnu.org, bug-gnu-emacs <at> gnu.org:
bug#7138; Package emacs. (Thu, 30 Sep 2010 15:40:05 GMT) Full text and rfc822 format available.

Acknowledgement sent to "Aaron S. Hawley" <aaron.s.hawley <at> gmail.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 30 Sep 2010 15:40:05 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: "Aaron S. Hawley" <aaron.s.hawley <at> gmail.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 24.0.50; Markers lost with minibuffer completion
Date: Thu, 30 Sep 2010 11:42:24 -0400
[Message part 1 (text/plain, inline)]
In GNU Emacs 24.0.50.1 (i386-mingw-nt6.1.7600)
 of 2010-09-20 on 3249CTO
Windowing system distributor `Microsoft Corp.', version 6.1.7600
configured using `configure --with-gcc (4.4) --no-opt --cflags
-Ic:/imagesupport/include'

I've found that setting markers with C-SPC in the minibuffer for C-x
C-f and then completing some file name with TAB, the markers will be
deleted and so C-u C-SPC won't work.  This is a corner case of
completion and markers, but seems like it should be done right.  I
have proposed a patch.  The comment in the function I changed suggests
that marks should be preserved.  That doesn't seem to be the case at
all.

2010-09-30  Aaron S. Hawley  <aaron.s.hawley <at> gmail.com>

	* minibuffer.el (completion--replace): Try to preserve markers by
	only replacing the changed text.

--- minibuffer.el	2010-09-21 14:10:35.139030100 -0400
+++ minibuffer.el	2010-09-30 08:48:11.327387800 -0400
@@ -490,6 +490,13 @@
   ;; to keep markers "at the right place" and be robust in the face of
   ;; after-change-functions that may themselves modify the buffer.
   (goto-char beg)
-  (insert newtext)
-  (delete-region (point) (+ (point) (- end beg))))
+  (let ((pos (compare-strings (buffer-substring-no-properties beg end)
+                              0 (- end beg)
+                              newtext 0 (length newtext))))
+    (if (numberp pos)
+        (setq pos (1- (abs pos)))
+      (setq pos 0))
+    (forward-char pos)
+    (delete-region (point) end)
+    (insert (substring newtext pos))))


-- 
In general, we reserve the right to have a poor
memory--the computer, however, is supposed to
remember!  Poor computer.  -- Guy Lewis Steele Jr.
[minibuffer-complete-replace-marks.diff (application/octet-stream, attachment)]

Reply sent to Stefan Monnier <monnier <at> iro.umontreal.ca>:
You have taken responsibility. (Thu, 30 Sep 2010 23:12:02 GMT) Full text and rfc822 format available.

Notification sent to "Aaron S. Hawley" <aaron.s.hawley <at> gmail.com>:
bug acknowledged by developer. (Thu, 30 Sep 2010 23:12:02 GMT) Full text and rfc822 format available.

Message #10 received at 7138-done <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: "Aaron S. Hawley" <aaron.s.hawley <at> gmail.com>
Subject: Re: bug#7138: 24.0.50; Markers lost with minibuffer completion
Date: Fri, 01 Oct 2010 01:13:21 +0200
> I've found that setting markers with C-SPC in the minibuffer for C-x
> C-f and then completing some file name with TAB, the markers will be
> deleted and so C-u C-SPC won't work.  This is a corner case of
> completion and markers, but seems like it should be done right.  I
> have proposed a patch.

Looks pretty good, thank you.

> The comment in the function I changed suggests that marks should be
> preserved.  That doesn't seem to be the case at all.

It is talking about surrounding markers, not markers within the
replaced text.  Your patch changes the code to "delete first and insert
afterwards", which is not as good w.r.t preserving surrounding markers
(because after the delete, the markers that were after and before the
deleted text end up together and the subsequent insert can't tell which
to push to which side).

> +    (if (numberp pos)
> +        (setq pos (1- (abs pos)))
> +      (setq pos 0))

Aka  (setq pos (if (numberp pos) (1- (abs pos)) 0))

In any case, I've installed in the emacs-23 branch a slightly different
change, which additionally tries to find a common suffix.
Thanks,


        Stefan




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Fri, 29 Oct 2010 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 14 years and 297 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.