From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Drew Adams" Newsgroups: gmane.emacs.devel Subject: use of minibuffer in interactive spec code Date: Tue, 18 May 2010 10:11:14 -0700 Message-ID: <3E79AA18AD2A4001A33DE551781D3CB1@us.oracle.com> NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit X-Trace: dough.gmane.org 1274203084 24632 80.91.229.12 (18 May 2010 17:18:04 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 18 May 2010 17:18:04 +0000 (UTC) To: Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Tue May 18 19:18:04 2010 connect(): No such file or directory Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1OEQQd-0003h9-6h for ged-emacs-devel@m.gmane.org; Tue, 18 May 2010 19:18:03 +0200 Original-Received: from localhost ([127.0.0.1]:37981 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OEQQc-0006HE-GS for ged-emacs-devel@m.gmane.org; Tue, 18 May 2010 13:18:02 -0400 Original-Received: from [140.186.70.92] (port=38666 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1OEQQT-0005nA-8L for emacs-devel@gnu.org; Tue, 18 May 2010 13:17:54 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1OEQL0-0006Qd-8b for emacs-devel@gnu.org; Tue, 18 May 2010 13:12:15 -0400 Original-Received: from rcsinet10.oracle.com ([148.87.113.121]:47027) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1OEQKy-0006Q4-4E for emacs-devel@gnu.org; Tue, 18 May 2010 13:12:12 -0400 Original-Received: from rcsinet13.oracle.com (rcsinet13.oracle.com [148.87.113.125]) by rcsinet10.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id o4IHC7Lk016728 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 18 May 2010 17:12:09 GMT Original-Received: from acsmt353.oracle.com (acsmt353.oracle.com [141.146.40.153]) by rcsinet13.oracle.com (Switch-3.4.2/Switch-3.4.1) with ESMTP id o4IGeoVM013449 for ; Tue, 18 May 2010 17:12:06 GMT Original-Received: from abhmt002.oracle.com by acsmt354.oracle.com with ESMTP id 276586011274202673; Tue, 18 May 2010 10:11:13 -0700 Original-Received: from dradamslap1 (/141.144.80.23) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Tue, 18 May 2010 10:11:12 -0700 X-Mailer: Microsoft Office Outlook 11 Thread-Index: Acr2rR7bskL1oeMiT0+aDvPpAAILqA== X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5931 X-Auth-Type: Internal IP X-Source-IP: rcsinet13.oracle.com [148.87.113.125] X-CT-RefId: str=0001.0A090202.4BF2CA69.019C:SCFMA4539811,ss=1,fgs=0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 3) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:124901 Archived-At: I don't know if this is a bug or a bug fix. I would like to get some info about it, if possible, to understand better. The behavior in this respect is new in Emacs 23.2. It changed apparently sometime after this build: GNU Emacs 23.0.60.1 (i386-mingw-nt5.1.2600) of 2009-01-15 on LENNART-69DE564 I have this command, which is bound to a key during minibuffer completion in a couple of cases: (defun foo (dir) (interactive (list (read-directory-name "Dir: " nil nil (and (member cd-path '(nil ("./"))) (null (getenv "CDPATH")))))) (cd dir) (...)) The `...' part makes use of the current value of `minibuffer-completion-predicate'. It expects the value that that variable had before this command was entered. It turns out that I now need to bind `minibuffer-completion-predicate' in the interactive spec. Otherwise, it has the value that is used for `read-directory-name', which is `file-directory-p'. (defun foo (dir) (interactive (let ((minibuffer-completion-predicate ; PROTECT IT minibuffer-completion-predicate)) (list (read-directory-name "Dir: " default-directory default-directory (and (member cd-path '(nil ("./"))) (null (getenv "CDPATH"))))))) (cd dir) (...)) It took me a while to discover this. There was no change in the definition of `read-directory-name' between the two Emacs builds mentioned. There was apparently a change in how the `interactive' code is treated. Previously, any recursive minibuffer use in the `interactive' spec was apparently walled off from the body of the command, in the sense that `minibuffer-completion-predicate' was not changed by that recursive minibuffer read. That is no longer the case. Is the new behavior intended? Was it changed to fix some bug, as an enhancement somehow, or by mistake? Thx.