From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#58784: 28.2; project-buffers incorrect under let-bound default-directory Date: Sat, 29 Oct 2022 03:49:09 +0300 Message-ID: <0b56cc0a-b8d4-86dc-4b67-217387aeb1b2@yandex.ru> References: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------y5TN2bwgzuY6fIbzdxrLFfrk" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="23958"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 To: Sean Devlin , 58784@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Oct 29 02:50:16 2022 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 1ooa3E-000693-Ep for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 29 Oct 2022 02:50:16 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ooa34-0005yV-Jr; Fri, 28 Oct 2022 20:50:06 -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 1ooa30-0005y2-Nr for bug-gnu-emacs@gnu.org; Fri, 28 Oct 2022 20:50:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1ooa30-0000uP-GQ for bug-gnu-emacs@gnu.org; Fri, 28 Oct 2022 20:50:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1ooa30-0008PR-Ag for bug-gnu-emacs@gnu.org; Fri, 28 Oct 2022 20:50:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 29 Oct 2022 00:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58784 X-GNU-PR-Package: emacs Original-Received: via spool by 58784-submit@debbugs.gnu.org id=B58784.166700456032267 (code B ref 58784); Sat, 29 Oct 2022 00:50:02 +0000 Original-Received: (at 58784) by debbugs.gnu.org; 29 Oct 2022 00:49:20 +0000 Original-Received: from localhost ([127.0.0.1]:34557 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ooa2J-0008OM-MQ for submit@debbugs.gnu.org; Fri, 28 Oct 2022 20:49:20 -0400 Original-Received: from mail-wr1-f52.google.com ([209.85.221.52]:36768) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ooa2H-0008O8-Kk for 58784@debbugs.gnu.org; Fri, 28 Oct 2022 20:49:18 -0400 Original-Received: by mail-wr1-f52.google.com with SMTP id j15so8589936wrq.3 for <58784@debbugs.gnu.org>; Fri, 28 Oct 2022 17:49:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:sender:from:to:cc:subject:date :message-id:reply-to; bh=CgzQDahNmrZMBZq29AiHbgDZ50cWLeTrfWV3vBVU1bE=; b=jfSH0SNaeSH3gdJ76T9BKfnbkkHokTAhxUuUSZugZWjVhyxIrGYGQJxks3d3QzaM9I A9Tu//Y97/ms71e9vCscZP5ShuYLLG2SPRjHVjnCAe12PPLIpwXRSN5ryspbGHZLT1TO 3UXy46j7tihkFqK71eJG7MfyFngPz1JAYoErcICUX0pYGHCxpCMM7013giUsgHYj46SY ggCWFS5Qn0P+n3PRjPzFi/wSfXZ03gf3bq+s3FZm5pLoHo+spb6Gl2UmePOe2o9fAsdp 3YpfR6AAFbv4Cw9chb1tZJzUVrZBG6g51CzzDNn5kgyx3V4u1wE/9+F38vqxeUZYi7Kh csKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:to:content-language:subject:user-agent :mime-version:date:message-id:sender:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CgzQDahNmrZMBZq29AiHbgDZ50cWLeTrfWV3vBVU1bE=; b=It8ixJ5z+bq4xnVtky2ZcgnNiu53h2GhPhh9mHouHMuuEsNHtb0apY+n4DGO/ctf3a IRT2f7KcDjZ2PqXZPTFXFWH70uYK/BVr7PaoAwqusQKDxhgAsjDVlzQv7ibLmMEhMYdo pjflc4h+yP46hLvAxuHfGjf/p4UbdUUGfMS+CtNFkdH9mC1yUPqVeBsaYcpeKaG8du0z 4PDLCXMxgjCwyUD2Y3XIJh7oXfzbpz//deNzqR4omIFk8w6ocd4kzcKQ2p/sEeEMyfi+ KAZ2fT/GAKAKGOUem7zOqAFmLL8umTg+JCSzgWMXBiDGhOgMT5lNw3jtMO+SgZZs4hDd rmYw== X-Gm-Message-State: ACrzQf1tmaGQOewXqfGpGdqSRWZAbGY99X8oeG4F+iaK8SkGJaIIT4JO uSQ3MwfyzxoWMsuTkWAezoc= X-Google-Smtp-Source: AMsMyM581HOS0CUee0FvEw8fQ51pBfB35Wdc8SL3Wl71yF53KAKbhIL1z0g8YY02obgVBjT2UpohEg== X-Received: by 2002:a05:6000:100c:b0:235:6980:aa24 with SMTP id a12-20020a056000100c00b002356980aa24mr1016335wrx.238.1667004551519; Fri, 28 Oct 2022 17:49:11 -0700 (PDT) Original-Received: from [192.168.0.6] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id j17-20020a05600c191100b003b47b913901sm17686166wmq.1.2022.10.28.17.49.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 28 Oct 2022 17:49:10 -0700 (PDT) Content-Language: en-US In-Reply-To: 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: , Original-Sender: "bug-gnu-emacs" Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:246469 Archived-At: This is a multi-part message in MIME format. --------------y5TN2bwgzuY6fIbzdxrLFfrk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi! On 26.10.2022 03:13, Sean Devlin wrote: > The project.el function project-buffers can return incorrect results > when invoked while a let-binding for default-directory is in > effect. This is because project-buffers (both the default and vc-based > implementations) does its work by inspecting the local value of > default-directory in each buffer, and the let-binding temporarily > affects this value. > > To see this in action, start emacs with -Q and evaluate the following > forms in order: > > (require 'project) > > (find-file-noselect "/tmp/tmpfile") > (setq my-project '(transient . "/tmp/")) > > ;; just the tmpfile > (project-buffers my-project) > > ;; both tmpfile and scratch > (let ((default-directory "/tmp/")) > (project-buffers my-project)) Thanks for the report, I can see the problem. > In the last form, project-buffers includes the current buffer (i.e. the > scratch buffer in our example) with the results. (This is true even if > the current buffer is visiting a file in some unrelated directory.) > > This matters because the command project-switch-project let-binds > default-directory before calling project-switch-commands. This means > that if you set project-switch-commands to some function that calls > project-buffers, you will get incorrect results. > > For example, evaluate the following forms in order: > > (defun my-list-project-buffers () > "List the current project's buffers." > (interactive) > (let ((buffer-list (project-buffers (project-current t))) > (buffer-name (project-prefixed-buffer-name "my-project-buffer-list"))) > (with-current-buffer (get-buffer-create buffer-name) > (erase-buffer) > (save-excursion > (dolist (buffer buffer-list) > (insert (buffer-name buffer)) > (insert ?\n)))) > (switch-to-buffer buffer-name))) > > (setq project-switch-commands #'my-list-project-buffers) Looks like a reimplementation of projectile-ibuffer, seems useful. > ;; list tmpfile but also scratch > (project-switch-project "/tmp/") Not sure how to fix this, though. In bug#53626 we discussed a somewhat similar problem, and a let-binding seems impossible to "escape". What else can we do? One option is to change the signature of every compatible command to take the project object as its first argument. Might have been more realistic when the package was first written, too much breakage now, probably. Another would be to add a new var to help override the project choice without touch default-directory. Something like the attached. Please try it out. --------------y5TN2bwgzuY6fIbzdxrLFfrk Content-Type: text/x-patch; charset=UTF-8; name="project-current-directory-override.diff" Content-Disposition: attachment; filename="project-current-directory-override.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwgYi9saXNwL3Byb2dtb2Rl cy9wcm9qZWN0LmVsCmluZGV4IGFjMjc4ZWRkNDAuLjQ4ZWQwMzNmYTEgMTAwNjQ0Ci0tLSBh L2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvcHJvamVj dC5lbApAQCAtMTc1LDggKzE3NSwxNCBAQCBwcm9qZWN0LWZpbmQtZnVuY3Rpb25zCiBgY2wt ZGVmbWV0aG9kJyBjYW4gZGlzcGF0Y2ggb24sIGxpa2UgYSBjb25zIGNlbGwsIG9yIGEgbGlz dCwgb3IgYQogQ0wgc3RydWN0LiIpCiAKLShkZWZ2YXIgcHJvamVjdC1jdXJyZW50LWluaGli aXQtcHJvbXB0IG5pbAotICAiTm9uLW5pbCB0byBza2lwIHByb21wdGluZyB0aGUgdXNlciBp biBgcHJvamVjdC1jdXJyZW50Jy4iKQorKGRlZmluZS1vYnNvbGV0ZS12YXJpYWJsZS1hbGlh cworICAncHJvamVjdC1jdXJyZW50LWluaGliaXQtcHJvbXB0CisgICdwcm9qZWN0LWN1cnJl bnQtZGlyZWN0b3J5LW92ZXJyaWRlCisgICIyOS4xIikKKworKGRlZnZhciBwcm9qZWN0LWN1 cnJlbnQtZGlyZWN0b3J5LW92ZXJyaWRlIG5pbAorICAiVmFsdWUgdG8gdXNlIGluc3RlYWQg b2YgYGRlZmF1bHQtZGlyZWN0b3J5JyB3aGVuIGRldGVjdGluZyB0aGUgcHJvamVjdC4KK1do ZW4gaXQgaXMgbm9uLW5pbCwgYHByb2plY3QtY3VycmVudCcgd2lsbCBza2lwIGFsd2F5cyBz a2lwIHByb21wdGluZy4iKQogCiA7OzsjIyNhdXRvbG9hZAogKGRlZnVuIHByb2plY3QtY3Vy cmVudCAoJm9wdGlvbmFsIG1heWJlLXByb21wdCBkaXJlY3RvcnkpCkBAIC0xOTUsMTEgKzIw MSwxMiBAQCBwcm9qZWN0LWN1cnJlbnQKIAogU2VlIHRoZSBkb2Mgc3RyaW5nIG9mIGBwcm9q ZWN0LWZpbmQtZnVuY3Rpb25zJyBmb3IgdGhlIGdlbmVyYWwgZm9ybQogb2YgdGhlIHByb2pl Y3QgaW5zdGFuY2Ugb2JqZWN0LiIKLSAgKHVubGVzcyBkaXJlY3RvcnkgKHNldHEgZGlyZWN0 b3J5IGRlZmF1bHQtZGlyZWN0b3J5KSkKKyAgKHVubGVzcyBkaXJlY3RvcnkgKHNldHEgZGly ZWN0b3J5IChvciBwcm9qZWN0LWN1cnJlbnQtZGlyZWN0b3J5LW92ZXJyaWRlCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdC1kaXJlY3RvcnkpKSkK ICAgKGxldCAoKHByIChwcm9qZWN0LS1maW5kLWluLWRpcmVjdG9yeSBkaXJlY3RvcnkpKSkK ICAgICAoY29uZAogICAgICAocHIpCi0gICAgICgodW5sZXNzIHByb2plY3QtY3VycmVudC1p bmhpYml0LXByb21wdAorICAgICAoKHVubGVzcyBwcm9qZWN0LWN1cnJlbnQtZGlyZWN0b3J5 LW92ZXJyaWRlCiAgICAgICAgIG1heWJlLXByb21wdCkKICAgICAgIChzZXRxIGRpcmVjdG9y eSAocHJvamVjdC1wcm9tcHQtcHJvamVjdC1kaXIpCiAgICAgICAgICAgICBwciAocHJvamVj dC0tZmluZC1pbi1kaXJlY3RvcnkgZGlyZWN0b3J5KSkpKQpAQCAtMTY2Nyw4ICsxNjc0LDcg QEAgcHJvamVjdC1zd2l0Y2gtcHJvamVjdAogICAobGV0ICgoY29tbWFuZCAoaWYgKHN5bWJv bHAgcHJvamVjdC1zd2l0Y2gtY29tbWFuZHMpCiAgICAgICAgICAgICAgICAgICAgICBwcm9q ZWN0LXN3aXRjaC1jb21tYW5kcwogICAgICAgICAgICAgICAgICAgIChwcm9qZWN0LS1zd2l0 Y2gtcHJvamVjdC1jb21tYW5kKSkpKQotICAgIChsZXQgKChkZWZhdWx0LWRpcmVjdG9yeSBk aXIpCi0gICAgICAgICAgKHByb2plY3QtY3VycmVudC1pbmhpYml0LXByb21wdCB0KSkKKyAg ICAobGV0ICgocHJvamVjdC1jdXJyZW50LWRpcmVjdG9yeS1vdmVycmlkZSBkaXIpKQogICAg ICAgKGNhbGwtaW50ZXJhY3RpdmVseSBjb21tYW5kKSkpKQogCiAocHJvdmlkZSAncHJvamVj dCkK --------------y5TN2bwgzuY6fIbzdxrLFfrk--