Subject: Re: Can't cancel dabbrev-expand (M-/) with C-g

From: Chong Yidong <[email-masked]>
Date: Thu, 21 Aug 2008 11:48:34 -0400

> If I have many buffers open (284 at the moment) and if I run
> dabbrev-expand (M-/) to expand the word under my buffers then it
> searches through every buffer and takes an understandably long
> time. If I mispelled the word fragment then it never has a hope of
> finding it and I'd like to cancel the operation. But C-g does not work
> for some reason and so I have to wait a good 5 to 10 seconds for it to
> finish scanning all my buffers. This gets very frustrating after the
> third or fourth time.

I don't see why C-g wouldn't work here.  Could you apply the following
patch and see if the problem persists?  (This is not a fix; it's an
attempt to diagnose the problem.  As far as I know, quitting should not
be inhibited here.)

*** emacs/lisp/dabbrev.el.~1.83.2.3.~	2008-01-06 21:44:58.000000000 -0500
--- emacs/lisp/dabbrev.el	2008-08-21 11:43:59.000000000 -0400
***************
*** 777,783 ****
  	     (setq dabbrev--friend-buffer-list
  		   (dabbrev--make-friend-buffer-list))))
         ;; Walk through the buffers till we find a match.
!        (let (expansion)
  	 (while (and (not expansion) dabbrev--friend-buffer-list)
  	   (setq dabbrev--last-buffer (pop dabbrev--friend-buffer-list))
  	   (set-buffer dabbrev--last-buffer)
--- 777,784 ----
  	     (setq dabbrev--friend-buffer-list
  		   (dabbrev--make-friend-buffer-list))))
         ;; Walk through the buffers till we find a match.
!        (let ((inhibit-quit nil)
! 	     expansion)
  	 (while (and (not expansion) dabbrev--friend-buffer-list)
  	   (setq dabbrev--last-buffer (pop dabbrev--friend-buffer-list))
  	   (set-buffer dabbrev--last-buffer)