unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: Leo <sdl.web@gmail.com>
To: Christian Dietrich <stettberger@dokucode.de>
Cc: 5724 <5724@debbugs.gnu.org>
Subject: bug#5724: 23.1.94; ido bug in next match
Date: Sat, 27 Mar 2010 10:43:16 +0000	[thread overview]
Message-ID: <xbailjde2gfv.fsf@cam.ac.uk> (raw)
In-Reply-To: <1269596170-sup-9737@peer.zerties.org> (Christian Dietrich's message of "Fri, 26 Mar 2010 10:40:08 +0100")

[-- Attachment #1: Type: text/plain, Size: 860 bytes --]

On 2010-03-26 09:40 +0000, Christian Dietrich wrote:
> Hi,
> i can reproduce your bug here with emacs 23.1, and i tried to track
> down the problem. But as far as i can see the reordering of the
> match results isn't done by ido-set-matches-1. The position of the
> matches items in ido-cur-list and in the result of ido-set-matches-1
> is the same. Think of 
>
> (remove-if '(lambda (x) (not (member x after-match)) before-match)
>
> So i assume that the Problem isn't at that place.
>
> greetz didi

I think I have located the problem.

ido-set-matches is called with different args when C-s so it returns
different matches. I couldn't understand why it is designed this way. I
am surprised no one has been annoyed by this bug. It has caused me to
choose the wrong match quite often. I have attempted a fix by simply
rotating the ido-matches when rotating.


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: ido.diff --]
[-- Type: text/x-patch, Size: 2250 bytes --]

diff --git a/lisp/ido.el b/lisp/ido.el
index e414408..803fa74 100644
--- a/lisp/ido.el
+++ b/lisp/ido.el
@@ -3145,20 +3145,18 @@ If repeated, insert text from buffer instead."
 (defun ido-next-match ()
   "Put first element of `ido-matches' at the end of the list."
   (interactive)
-  (if ido-matches
-      (let ((next (cadr ido-matches)))
-	(setq ido-cur-list (ido-chop ido-cur-list next))
-	(setq ido-rescan t)
-	(setq ido-rotate t))))
+  (when ido-matches
+    (setq ido-matches
+          (ido-chop ido-matches (cadr ido-matches)))
+    (setq ido-rotate t)))
 
 (defun ido-prev-match ()
   "Put last element of `ido-matches' at the front of the list."
   (interactive)
-  (if ido-matches
-      (let ((prev (car (last ido-matches))))
-	(setq ido-cur-list (ido-chop ido-cur-list prev))
-	(setq ido-rescan t)
-	(setq ido-rotate t))))
+  (when ido-matches
+    (setq ido-matches
+          (ido-chop ido-matches (car (last ido-matches))))
+    (setq ido-rotate t)))
 
 (defun ido-next-match-dir ()
   "Find next directory in match list.
@@ -3177,7 +3175,8 @@ first matching file."
       (while (and (< i cnt) (not (ido-final-slash (nth i ido-matches))))
 	(setq i (1+ i)))
       (if (< i cnt)
-	  (setq ido-cur-list (ido-chop ido-cur-list (nth i ido-matches)))))))
+	  (setq ido-matches (ido-chop ido-matches (nth i ido-matches))
+                ido-rotate t)))))
 
 (defun ido-prev-match-dir ()
   "Find previous directory in match list.
@@ -3196,7 +3195,8 @@ for first matching file."
       (while (and (> i 0) (not (ido-final-slash (nth i ido-matches))))
 	(setq i (1- i)))
       (if (> i 0)
-	  (setq ido-cur-list (ido-chop ido-cur-list (nth i ido-matches)))))))
+	  (setq ido-matches (ido-chop ido-matches (nth i ido-matches))
+                ido-rotate t)))))
 
 (defun ido-restrict-to-matches ()
   "Set current item list to the currently matched items."
@@ -4494,8 +4494,10 @@ For details of keybindings, see `ido-find-file'."
 
 	;; Update the list of matches
 	(setq ido-text contents)
-	(ido-set-matches)
-	(ido-trace "new    " ido-matches)
+	(if ido-rotate
+            (setq ido-rotate nil)
+          (ido-set-matches)
+          (ido-trace "new    " ido-matches))
 
 	(when (and ido-enter-matching-directory
 		   ido-matches

[-- Attachment #3: Type: text/plain, Size: 14 bytes --]


Cheers,

Leo

  reply	other threads:[~2010-03-27 10:43 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-15 16:48 bug#5724: 23.1.94; ido bug in next match Leo
2010-03-26  9:40 ` Christian Dietrich
2010-03-27 10:43   ` Leo [this message]
2011-02-03 17:16 ` Leo

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=xbailjde2gfv.fsf@cam.ac.uk \
    --to=sdl.web@gmail.com \
    --cc=5724@debbugs.gnu.org \
    --cc=stettberger@dokucode.de \
    /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).