From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Spencer Baugh Newsgroups: gmane.emacs.bugs Subject: bug#63648: 29.0.90; project.el: with switch-use-entire-map, switch-project errors on non-project commands Date: Tue, 29 Aug 2023 16:34:02 -0400 Message-ID: References: <86wn10e1wl.fsf@mail.linkov.net> <482a1ebc-165c-a0a4-98c0-5c404d1b1d0d@gutov.dev> <86jzwyxnxb.fsf@mail.linkov.net> <86o7m91z22.fsf@mail.linkov.net> <86pm6py6k4.fsf@mail.linkov.net> <86bki9y68h.fsf@mail.linkov.net> <86cz2f7bvo.fsf@mail.linkov.net> <86353axu48.fsf@mail.linkov.net> <87o7jfi00b.fsf@catern.com> <6480ead5-b89b-82bd-9e1e-66016ba4520c@gutov.dev> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="25986"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: sbaugh@catern.com, 63648@debbugs.gnu.org, Juri Linkov To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Tue Aug 29 22:39:50 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 1qb5V8-0006cK-7q for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 29 Aug 2023 22:39:50 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qb5Uw-0006le-0C; Tue, 29 Aug 2023 16:39:38 -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 1qb5QN-0005lJ-BM for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 16:34:55 -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 1qb5QN-0005L2-3I for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 16:34:55 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qb5QU-0007Jd-78 for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 16:35:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Spencer Baugh Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 29 Aug 2023 20:35:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63648 X-GNU-PR-Package: emacs Original-Received: via spool by 63648-submit@debbugs.gnu.org id=B63648.169334125728065 (code B ref 63648); Tue, 29 Aug 2023 20:35:02 +0000 Original-Received: (at 63648) by debbugs.gnu.org; 29 Aug 2023 20:34:17 +0000 Original-Received: from localhost ([127.0.0.1]:51677 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qb5Pl-0007Ia-1C for submit@debbugs.gnu.org; Tue, 29 Aug 2023 16:34:17 -0400 Original-Received: from mxout5.mail.janestreet.com ([64.215.233.18]:43351) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qb5Pj-0007IN-Dv for 63648@debbugs.gnu.org; Tue, 29 Aug 2023 16:34:16 -0400 In-Reply-To: <6480ead5-b89b-82bd-9e1e-66016ba4520c@gutov.dev> (Dmitry Gutov's message of "Tue, 29 Aug 2023 01:44:19 +0300") 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:268675 Archived-At: Dmitry Gutov writes: > On 23/08/2023 16:53, Spencer Baugh wrote: >> Oh, another thought (which maybe should be discussed on emacs-devel): >> maybe we don't need to make this specific next-default-directory var. >> Instead, maybe what we want is a way to bind a dynamic variable >> *without* changing the buffer-local value. It would shadow the existing >> binding, but if we explicitly switched buffer we'd get back to the old >> value. So we'd have: >> (special-let ((default-directory newval)) >> (assert default-directory newval)) >> and >> (special-let ((default-directory newval)) >> (set-buffer (current-buffer)) >> (assert default-directory oldval)) > > Where does the main logic run in this case? > > If we call set-buffer before the main logic is ran, the old value of > dd will be used. > > If we call set-buffer after the main logic is ran, we could as well > use plain 'let' because that's what it does: restores the previous > values at the end (and we know that it doesn't suit our purpose). Sorry, I was unclear - our logic wouldn't use set-buffer at all, it's just that things would work fine if user code used set-buffer. So this would work: (project-current) ;; -> (vc . oldval) (special-let ((default-directory newval)) (project-current) ;; -> (vc . newval) (with-current-buffer (current-buffer) (project-current))) ;; -> (vc . oldval) (project-current) ;; -> (vc . newval) The actual logic of project-switch-project would be: (defun project-switch-project (dir) (interactive (list (funcall project-prompter))) (let ((command (if (symbolp project-switch-commands) project-switch-commands (project--switch-project-command)))) (special-let ((default-directory dir)) (call-interactively command)))) (well, as long as (project--switch-project-command) could support reading arbitrary commands) > I was also considering rebinding the global value of dd instead, but > that turned out to be even sillier, since any new buffer inherits the > local value of this var from the previous buffer, the global one isn't > used anywhere (or doesn't seem to be). > > (cl-letf (((default-value 'default-directory) "~/Documents/")) > (with-temp-buffer > (message "dv %s" (default-value 'default-directory)) > (message "lv %s" default-directory))) > > So to make use of this, every relevant spot would have to look up the > global value of this var manually. Might as well use the special var > that we already have (...-override). Sad!