From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Stefan Monnier via "Bug reports for GNU Emacs, the Swiss army knife of text editors" 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: Mon, 05 Jun 2023 10:44:11 -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> <86jzwipf4z.fsf@mail.linkov.net> Reply-To: Stefan Monnier Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="17918"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Cc: Dmitry Gutov , 63648@debbugs.gnu.org, Spencer Baugh To: Juri Linkov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Jun 05 16:45:28 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 1q6BSZ-0004Qt-Tb for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 05 Jun 2023 16:45:28 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q6BSG-0004py-2O; Mon, 05 Jun 2023 10:45:08 -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 1q6BSC-0004pM-VZ for bug-gnu-emacs@gnu.org; Mon, 05 Jun 2023 10:45:06 -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 1q6BSA-0004qD-Gg for bug-gnu-emacs@gnu.org; Mon, 05 Jun 2023 10:45:04 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q6BSA-0001lX-72 for bug-gnu-emacs@gnu.org; Mon, 05 Jun 2023 10:45:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 05 Jun 2023 14:45: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.16859762676703 (code B ref 63648); Mon, 05 Jun 2023 14:45:02 +0000 Original-Received: (at 63648) by debbugs.gnu.org; 5 Jun 2023 14:44:27 +0000 Original-Received: from localhost ([127.0.0.1]:50062 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q6BRb-0001k2-1C for submit@debbugs.gnu.org; Mon, 05 Jun 2023 10:44:27 -0400 Original-Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:15352) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q6BRY-0001jp-VX for 63648@debbugs.gnu.org; Mon, 05 Jun 2023 10:44:25 -0400 Original-Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 3431B4426EB; Mon, 5 Jun 2023 10:44:19 -0400 (EDT) Original-Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id A8B354400B3; Mon, 5 Jun 2023 10:44:17 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1685976257; bh=oBh3mcHQWWDFx/JocR6hclcddhxpkxbKo7f5ATUfE4E=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=hhLagaZ9LV7sfhlrq0H7PIHiGmg8sK9uuI90IPdhdVM19CVEoy7hnJ/2bNCUQrDvp YeAnqSP3y3/8qawBF8OHw0RPTiGDqoaDaW/1eX2rtgWRh7G0Grn9AdqUCFO5PwrCwI XiSGGu3+2RY4xrDAV4wYGgmCbtpQD24h4cLjsHZ5n+DsoWHp08MpeOMn+9SX2sjh0J PUTkBk1BXQkSK7yA+wO/y4tJuURb4PpuSubuiD1A5C0LcSIAyaFKFuuP4tCEd5qsdl HdwH01v5DAQadtF+8D2M9geKBvK8gvI2DhL6KIGAhizNjnzBEqD55WpG/FIg+9cYiP wkDE4ttDPQaUA== Original-Received: from alfajor (unknown [45.44.229.252]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 88EC7120171; Mon, 5 Jun 2023 10:44:17 -0400 (EDT) In-Reply-To: <86jzwipf4z.fsf@mail.linkov.net> (Juri Linkov's message of "Mon, 05 Jun 2023 09:50:44 +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:263016 Archived-At: Juri Linkov [2023-06-05 09:50:44] wrote: >>> And indeed with the following patch replacing the current definition of >>> 'project-switch-project' with just: >>> >>> (defun project-switch-project (dir) >>> (interactive (list (funcall project-prompter))) >>> (setq next-default-directory dir)) >> >> This would be a new "prefix command", like the `universal-argument`, >> `C-x RET c`, the `ofw-other-window`, vc-edit-next-command, >> `ofw-other-frame` from the `other-frame-window` package, and a few more. >> >> In order for this new prefix to interact correctly with those other >> ones, it should probably use `prefix-command-preserve-state` and it >> would be good to make it show some visual feedback via >> `prefix-command-echo-keystrokes-functions`. > > Here is the same function turned into a prefix command, > so it supports both cases: > > 1. 'C-x p p d' -- keys from project-prefix-map > 2. 'C-x p p C-x d' -- global keybindings > > ``` > (defun project-switch-project (dir) > (interactive (list (funcall project-prompter))) > (if (symbolp project-switch-commands) > (let ((default-directory dir)) > (call-interactively project-switch-commands)) > (let* ((echofun (lambda () "[switch-project]")) > (postfun (lambda () (remove-hook > 'prefix-command-echo-keystrokes-functions > echofun)))) > (setq next-default-directory dir) > (add-hook 'prefix-command-echo-keystrokes-functions echofun) > (message (project--keymap-prompt)) > (prefix-command-update) > (set-transient-map project-prefix-map nil postfun)))) > ``` I think you need to call `prefix-command-preserve-state` as well, so that the order of prefix commands doesn't matter (e.g. user can do `C-u C-x p` instead of `C-x p C-u`). [ Note: I'm still not really happy with the way prefix commands work. I can't remember what problems are still lurking, but IIRC interaction with minibuffer is a source of problems (e.g. prefix commands from before we entered the minibuffer can affect operations within the minibuffer and prefix commands from within the minibuffer can affect the behavior after exiting the minibuffer). I think last time I looked at it, I concluded that maybe it should be reimplemented such that the state is kept in a single object to which prefix commands can add/remove properties, and the minibuffer code would automatically suspend and then reinstall that state (and could emit a warning when throwing away "unused state", such as when leaving a minibuffer). ] > If this is conceptually ok, then more customization could be ported > from project--switch-project-command such as project-switch-use-entire-map. Looks OK to me [ modulo the fact that I don't really understand what this is doing (I don't understand the `project-switch-commands` bit, nor do I understand why a prefix command which temporarily changes the `default-directory` would be called `project-switch-project`). ] Stefan