* bug#70577: [PATCH] New command other-project-prefix
[not found] ` <e2d31f31-c6e2-4f1a-81fb-0e222096878e@gutov.dev>
@ 2024-04-28 12:13 ` Sean Whitton via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-28 15:56 ` Dmitry Gutov
2024-04-28 16:46 ` Juri Linkov
0 siblings, 2 replies; 3+ messages in thread
From: Sean Whitton via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2024-04-28 12:13 UTC (permalink / raw)
To: Dmitry Gutov, Juri Linkov, emacs-devel; +Cc: 70577
Hello,
On Fri 26 Apr 2024 at 07:20pm +03, Dmitry Gutov wrote:
> +;;;###autoload
> +(defun other-project-prefix ()
> + "\"Switch\" to another project before running an Emacs command.
> +Makes sure the next command invoked asks for the project to run it in."
> + (interactive)
> + (prefix-command-preserve-state)
> + (letrec ((depth (minibuffer-depth))
> + (echofun (lambda () "[switch-project]"))
> + (around-fun
> + (lambda (command &rest _args)
> + (advice-remove this-command around-fun)
> + (unless (or (eq this-command 'other-project-prefix)
> + (eq last-command-event help-char))
> + (let ((root (funcall project-prompter)))
> + (if (or (string-prefix-p "project-"
> + (symbol-name this-command))
> + (get this-command 'project-aware))
> + (let ((project-current-directory-override root))
> + (call-interactively command))
> + (let ((default-directory root))
> + (call-interactively command)))))))
> + (prefun
> + (lambda ()
> + (unless (> (minibuffer-depth) depth)
> + (remove-hook 'pre-command-hook prefun)
> + (remove-hook 'prefix-command-echo-keystrokes-functions echofun)
> + (when (and this-command (symbolp this-command))
> + (advice-add this-command :around around-fun))))))
> + (add-hook 'pre-command-hook prefun)
> + (add-hook 'prefix-command-echo-keystrokes-functions echofun)
> + (let ((map (make-sparse-keymap)))
> + (set-keymap-parent map project-prefix-map)
> + ;; Doesn't work ;-(
> + ;; (define-key map (vector help-char)
> + ;; (lambda () (interactive) (help-form-show)))
> + (set-transient-map map))
> + (message (concat "Type " (project--keymap-prompt) " or any global key"))))
In passing, this pattern where you letrec a hook that removes itself,
and also consider minibuffer-depth, is now in several places.
The one I am thinking of is vc-edit-next-command but I based that on
some code of Juri's somewhere.
It would be good to factor out a macro for this pattern, I think.
--
Sean Whitton
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: bug#70577: [PATCH] New command other-project-prefix
2024-04-28 12:13 ` bug#70577: [PATCH] New command other-project-prefix Sean Whitton via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2024-04-28 15:56 ` Dmitry Gutov
2024-04-28 16:46 ` Juri Linkov
1 sibling, 0 replies; 3+ messages in thread
From: Dmitry Gutov @ 2024-04-28 15:56 UTC (permalink / raw)
To: Sean Whitton, Juri Linkov, emacs-devel; +Cc: 70577
On 28/04/2024 15:13, Sean Whitton wrote:
> In passing, this pattern where you letrec a hook that removes itself,
> and also consider minibuffer-depth, is now in several places.
> The one I am thinking of is vc-edit-next-command but I based that on
> some code of Juri's somewhere.
>
> It would be good to factor out a macro for this pattern, I think.
Makes sense. Maybe a helper function, not necessarily a macro.
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: bug#70577: [PATCH] New command other-project-prefix
2024-04-28 12:13 ` bug#70577: [PATCH] New command other-project-prefix Sean Whitton via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-28 15:56 ` Dmitry Gutov
@ 2024-04-28 16:46 ` Juri Linkov
1 sibling, 0 replies; 3+ messages in thread
From: Juri Linkov @ 2024-04-28 16:46 UTC (permalink / raw)
To: Sean Whitton; +Cc: Dmitry Gutov, emacs-devel
>> +(defun other-project-prefix ()
>> + "\"Switch\" to another project before running an Emacs command.
>> +Makes sure the next command invoked asks for the project to run it in."
>> + (interactive)
>> + (prefix-command-preserve-state)
>> + (letrec ((depth (minibuffer-depth))
>
> In passing, this pattern where you letrec a hook that removes itself,
> and also consider minibuffer-depth, is now in several places.
> The one I am thinking of is vc-edit-next-command but I based that on
> some code of Juri's somewhere.
>
> It would be good to factor out a macro for this pattern, I think.
'display-buffer-override-next-command' doesn't contain 'letrec', but
uses the same pattern, so it could benefit from the new macro indeed.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-04-28 16:46 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <d29607f5-11e3-4a3a-a29b-d74967234a35@gutov.dev>
[not found] ` <86le501ykg.fsf@mail.linkov.net>
[not found] ` <a8483157-e2dd-409f-8a6c-08f5e339defc@gutov.dev>
[not found] ` <e2d31f31-c6e2-4f1a-81fb-0e222096878e@gutov.dev>
2024-04-28 12:13 ` bug#70577: [PATCH] New command other-project-prefix Sean Whitton via Bug reports for GNU Emacs, the Swiss army knife of text editors
2024-04-28 15:56 ` Dmitry Gutov
2024-04-28 16:46 ` Juri Linkov
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).