diff .elisp/settings/50.localfuncs.el @ 180:cd4e645d1207

emacs localfuncs: add advice for ido to avoid blocking in flex matching
author Augie Fackler <durin42@gmail.com>
date Wed, 13 Jan 2010 10:29:36 -0600
parents 36a4e4b0f9c3
children e77c01b7b0f4
line wrap: on
line diff
--- a/.elisp/settings/50.localfuncs.el
+++ b/.elisp/settings/50.localfuncs.el
@@ -1,3 +1,22 @@
+;; advice to prevent ido from using flex matches on huge lists of files
+;; with enough characters typed and blocking for an absurd amount of time
+;; after a stupid typo
+;; The value af-ido-flex-fuzzy-limit is the maximum value of the product
+;; of the number of characters the user has entered and the number of
+;; options in the ido list.
+;; The default value was determined experimentally and seemed to be
+;; the boundary of sane wait times when this was written.
+(defvar af-ido-flex-fuzzy-limit (* 2000 5))
+(defadvice ido-set-matches-1 (around my-ido-set-matches-1 activate)
+  "Conditionally disable flex matching if the list is huge.
+
+This is useful because when the ido list is huge, ido flex matching
+spends an eternity in a regex if you make a typo."
+  (let ((ido-enable-flex-matching (< (* (length (ad-get-arg 0)) (length ido-text))
+                                     af-ido-flex-fuzzy-limit)))
+    ad-do-it))
+
+;; Generic repository differ. Requires textmate.el and mercurial.el.
 (defun af-generic-diff-repo ()
   (interactive)
   (let ((root (textmate-project-root)))