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 17:47:18 -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> <86msyhwrrg.fsf@mail.linkov.net> Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="34299"; 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 23:52:31 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 1qb6dS-0008m1-UA for geb-bug-gnu-emacs@m.gmane-mx.org; Tue, 29 Aug 2023 23:52:30 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qb6dD-0007kG-I0; Tue, 29 Aug 2023 17:52:15 -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 1qb6Z1-00073q-MZ for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 17:47:59 -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 1qb6Z1-0001jQ-0a for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 17:47:55 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qb6Z7-0000vz-K1 for bug-gnu-emacs@gnu.org; Tue, 29 Aug 2023 17:48:01 -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 21:48:01 +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.16933456613461 (code B ref 63648); Tue, 29 Aug 2023 21:48:01 +0000 Original-Received: (at 63648) by debbugs.gnu.org; 29 Aug 2023 21:47:41 +0000 Original-Received: from localhost ([127.0.0.1]:51742 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qb6Yi-0000tL-VV for submit@debbugs.gnu.org; Tue, 29 Aug 2023 17:47:40 -0400 Original-Received: from mxout5.mail.janestreet.com ([64.215.233.18]:51841) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qb6Yd-0000t0-PQ for 63648@debbugs.gnu.org; Tue, 29 Aug 2023 17:47:35 -0400 In-Reply-To: (Dmitry Gutov's message of "Tue, 29 Aug 2023 23:40: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:268679 Archived-At: Dmitry Gutov writes: > Sorry for the possible duplicate, but it seems this message didn't > reach the bug tracker, or other recipients. Resending contents below. > > On 23/08/2023 20:54, Juri Linkov wrote: >> There is no code where to bind a dynamic variable, because its value >> should be available for the next command in the command loop. >> If you agree there is no other way to implement this than next-default-directory, >> then I could bring up the discussion on emacs-devel. > > Before we dive into all that, why not try advice on 'command-execute'? > For the PoC code at least. It's in Lisp since 2013. > > The comment in its body does say "Called directly from the C code", > but I'm not sure if that has any direct implications for us. > > This attached piece of code implements the project-switch-project as > you outlined. Does it work well for you/others? Careful when testing > or modifying: a typo can break the command loop (and thus the > session). > > To me it seems a little too bare-bones, lacking the instructive hints > project-switch-project currently has. Nice! One thing at least to make it not quite so bare-bones is: (defun project-switch-project (dir) (interactive (list (funcall project-prompter))) (setq project--next-dd dir) (advice-add 'command-execute :around #'project--with-next-dd) (message "Run next command in project %s..." (project-name (project-current nil dir)))) which matches other-window-prefix. Will try running with this for a while and see how it goes. (I'm already missing the short form of project-find-files, but maybe I'll get used to it... or maybe we should remap C-x C-f to project-find-files while in this prefix, or something wacky like that) > (defvar project--next-dd nil) > > (defun project--with-next-dd (fun &rest args) > (advice-remove 'command-execute #'project--with-next-dd) > (let ((default-directory project--next-dd)) > (apply fun args))) > > (defun project-switch-project (dir) > (interactive (list (funcall project-prompter))) > (setq project--next-dd dir) > (advice-add 'command-execute :around #'project--with-next-dd))