From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Michael Heerdegen Newsgroups: gmane.emacs.bugs Subject: bug#66187: read-file-name unexpected behavior when MUSTMATCH is a function Date: Mon, 25 Sep 2023 23:33:06 +0200 Message-ID: <87pm260wh9.fsf@web.de> References: <87r0mni6m1.fsf@breatheoutbreathe.in> <87bkdq3nw6.fsf@web.de> <875y3yx221.fsf@breatheoutbreathe.in> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10125"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: philipk@posteo.net, 66187@debbugs.gnu.org To: Joseph Turner Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Sep 25 23:34:24 2023 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1qktDk-0002Nt-RB for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 25 Sep 2023 23:34:24 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qktDE-0002Z0-JM; Mon, 25 Sep 2023 17:33:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qktDB-0002YT-Or for bug-gnu-emacs@gnu.org; Mon, 25 Sep 2023 17:33:49 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1qktDB-0007Od-Gq for bug-gnu-emacs@gnu.org; Mon, 25 Sep 2023 17:33:49 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qktDO-0000mX-1x for bug-gnu-emacs@gnu.org; Mon, 25 Sep 2023 17:34:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Michael Heerdegen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 25 Sep 2023 21:34:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 66187 X-GNU-PR-Package: emacs X-Debbugs-Original-Cc: Philip Kaludercic , "Joseph Turner via Bug reports for GNU Emacs, the Swiss army knife of text editors" , 66187@debbugs.gnu.org Original-Received: via spool by 66187-submit@debbugs.gnu.org id=B66187.16956776182948 (code B ref 66187); Mon, 25 Sep 2023 21:34:02 +0000 Original-Received: (at 66187) by debbugs.gnu.org; 25 Sep 2023 21:33:38 +0000 Original-Received: from localhost ([127.0.0.1]:46831 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qktD0-0000lT-AR for submit@debbugs.gnu.org; Mon, 25 Sep 2023 17:33:38 -0400 Original-Received: from mout.web.de ([212.227.17.12]:33983) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qktCv-0000l4-3H for 66187@debbugs.gnu.org; Mon, 25 Sep 2023 17:33:36 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=s29768273; t=1695677586; x=1696282386; i=michael_heerdegen@web.de; bh=wEVA881m+8MjEJSM8uFOgochWNhduSqHLIbqiGMkhc8=; h=X-UI-Sender-Class:From:To:Cc:Subject:In-Reply-To:References:Date; b=at0pRGWr5+2/iAbR24pfAoHQPU8tFCwlp1/uH61MoVA/v/JMXLGqp6XSZAXaNcxyHOOTSZQb9s4 S6offFhqWVri9rKINcSk0AJIYfUJm3flib2t0unwzq0DDfAxHALpyugRwu+Uhe88hXkweo9SAIV+l Z+3Gx50vKa+vLXvEHPqLHXoPbJq0Xxip2MpPBZbz+XO5uDfI8lg6xSOOjNbiF9MyFarPfow4Z+Nm2 +k1PGvZh00VtAx8cM9xCTkFwVSwWrgPm9YhPAs/dCwVVBEBluVfXGFNYVBahVL7q5r9OC9kxtnmug OOcQ7Y90VR4+VlT3p4EMI5vS4bWeXBQ5GmQA== X-UI-Sender-Class: 814a7b36-bfc1-4dae-8640-3722d8ec6cd6 Original-Received: from drachen.dragon ([88.66.201.191]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1N1d7i-1rmR5e2JmC-011tlh; Mon, 25 Sep 2023 23:33:06 +0200 In-Reply-To: <875y3yx221.fsf@breatheoutbreathe.in> (Joseph Turner's message of "Sun, 24 Sep 2023 22:12:18 -0700") X-Provags-ID: V03:K1:qLA5JiI6yrFvqrMNn+omak2nDTqz4SU6WIOFC4BdHBt31tIyLOn 5177JOu9l2KHnzCYG1mhK4c/+GPZRmv2ph8h8Cm8MAfxQGo6KxuJHJetfYEV6T7LU8jAuw9 D1KIPCZRSAqABPgOqpS0RBw0gYAZ5bgyvRsWOA3ad9DiD4fxuGfxVEIY1gn0KMTy1eMN7rc 0spw79TuYCTQrmn1AgoMA== UI-OutboundReport: notjunk:1;M01:P0:elVqmbkcJAs=;aGC3cZIWCldaf5Ag3uphhlf3Xxl Qw8jv6xj2akB6u58GazwNFh7xcyFL+60f6bNVFZ8k9ppJXFJm21TeVLp79MqktBXqta/LDqvg /XanQmI3SWNTE7CST26sW1bkrfC5Rp2LRezc16CPvfl8gpXOBC8pyjqBoVAZ8vZqgrQCQ4E0x beL/JRAYLJOwdOfCcCwOPEWATtfD9i61FVn5peq6MTsuyjUGwlShKoLgCjG65iYCWki6CxfEZ sq8ysebUcXUIsx+XUaQB0B55r852x0iEIeEWzwTDXGJ4L8NXrsAM8//wIb2f/2cwu+5CWEJe9 U+OWAbhw83aAmkJq8qCrifdUUbmUzcgLC+lb2F9EL9jFftLVpegD8CGKaWc+w/zJDnmg9jQWT AvrgxRGYZZDPZmiQNrxafw/UsIzFaDHOJ5QtNxIdGxSCxTpMAyhkHPNa1aIdNMYy0ZW7EP8yF ZT82kx8H/ia9OQ+1AmzCb96EAVLhgjzvE90eUduk27so6okYdx4laq6G04qLD7jbTk7ZxybL+ MmhRkC4xn+2fArKbwGqxGVp/XVpfCwf8ORwWyMf266tOOzsN3Y6tYMErV7ly+nmot9QxZirOl maI8rSk4bndwCMLaOnVHPkqKHl1TOcqxnAzCby+2OkEGZmJKghewYEjUK8vf6CLfXzGJ1inEr XT1vKlHR3d9DwbOGhj6FlgKtcPL48jkzERh0V/o5Ksvf4BAlvpGDDvS5W7KCH3e3S36x1hcy1 iZlPmMWyih2/50NZ2eTeEs11/uZ5QJp/GWZ6Qhq0nOskak5BW6Xyfqy+OH8fYI4wTaz3YznQ X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:271354 Archived-At: Joseph Turner writes: > (mkdir "/tmp/foo" t) > (with-temp-buffer > (write-file "/tmp/foo/bar")) > (setq default-directory "/tmp/foo/") > (read-file-name "Clone into new or empty directory: " nil nil > (lambda (filename) > (or (not (file-exists-p filename)) > (directory-empty-p filename))) > nil > (lambda (filename) > (file-directory-p filename))) > > The default prompt is "/tmp/foo/". In my Emacs (29.0.92), when I > immediately press RET, read-file-name (erroneously?) returns "/tmp/foo/" > (which exists and is not empty) instead of saying "[Match required]". > > Are you able to reproduce this on your machine? Yes, I see the same. But I think it's expected. AFAIU the algorithm works like this: first it's checked whether a completion is allowed (by checking whether it's the name of an existing file and consulting PREDICATE when specified). Only when it is not allowed we check whether MUSTMATCH declares it acceptable. This is not really explained in the docstring, however. In your example, the default-directory is the name of an existing file, so the MUSTMATCH argument is irrelevant, the specified PREDICATE is fulfilled, so it's accepted as input. If I guess correctly I think you want something like this: #+begin_src emacs-lisp (let ((acceptable-p (lambda (filename) (and (file-directory-p filename) (directory-empty-p filename))))) (read-file-name "Clone into new or empty directory: " nil nil (lambda (filename) (if (file-exists-p filename) (funcall acceptable-p filename) t)) nil acceptable-p)) #+end_src Does that come close? Michael.