[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#12796: Optimize `ido-completing-read' for larger lists with flex mat
From: |
Dmitry Gutov |
Subject: |
bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled |
Date: |
Wed, 07 Nov 2012 09:41:00 +0400 |
User-agent: |
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20121026 Thunderbird/16.0.2 |
On 06.11.2012 15:03, Kim Storm wrote:
On 2012-11-06 02:45, Stefan Monnier wrote:
[ Hi Kim, can you give me your opinion on this? ]
To try it, I just wrapped in it the "busy" part of `ido-set-matches-1' -
and indeed, no more waiting a several seconds after button
mashing. It's a bit buggy so far, but that's to be expected.
To eliminate the buggy behavior, it should probably be put elsewhere,
maybe directly in ido-exhibit (the post-command-hook).
Sounds right, but I a bit worried that some of the state information
may get corrupted if arbitrarily interrupted by user input.
If someone proposes a patch, I'll look at it.
How does this look to you?
I added a new var because ido-rescan is unconditionally set to nil in
many places.
By the way, is there a place where ido-rotate is set to anything but
nil? Does this variable actually do anything?
=== modified file 'lisp/ido.el'
--- lisp/ido.el 2012-10-05 07:38:05 +0000
+++ lisp/ido.el 2012-11-07 05:34:53 +0000
@@ -1020,6 +1020,9 @@
(defvar ido-rotate nil
"Non-nil means we are rotating list of matches.")
+(defvar ido-interrupted nil
+ "Non-nil means calculation of matches was interrupted by keyboard
input.")
+
(defvar ido-text nil
"Stores the users string as it is typed in.")
@@ -3778,9 +3781,14 @@
(defun ido-set-matches ()
;; Set `ido-matches' to the list of items matching prompt
- (when ido-rescan
- (setq ido-matches (ido-set-matches-1 (reverse ido-cur-list) (not
ido-rotate))
- ido-rotate nil)))
+ (when (or ido-rescan ido-interrupted)
+ (setq ido-interrupted t)
+ (while-no-input
+ (setq ido-matches (ido-set-matches-1 (reverse ido-cur-list)
+ (not ido-rotate))
+ ido-interrupted nil
+ ido-rotate nil))
+ (when ido-interrupted (setq ido-matches nil))))
(defun ido-ignore-item-p (name re-list &optional ignore-ext)
;; Return t if the buffer or file NAME should be ignored.
@@ -4513,11 +4521,12 @@
(exit-minibuffer)))
;; Insert the match-status information:
- (ido-set-common-completion)
- (let ((inf (ido-completions contents)))
- (setq ido-show-confirm-message nil)
- (ido-trace "inf" inf)
- (insert inf))
+ (unless ido-interrupted
+ (ido-set-common-completion)
+ (let ((inf (ido-completions contents)))
+ (setq ido-show-confirm-message nil)
+ (ido-trace "inf" inf)
+ (insert inf)))
))))
(defun ido-completions (name)
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/04
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/04
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/04
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/04
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/05
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/05
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Kim Storm, 2012/11/06
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/06
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Kim Storm, 2012/11/06
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled,
Dmitry Gutov <=
bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/05
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/06
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/06
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/07
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Leo, 2012/11/08
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Stefan Monnier, 2012/11/08
- bug#12796: Optimize `ido-completing-read' for larger lists with flex matching enabled, Dmitry Gutov, 2012/11/10