From: Spencer Baugh <sbaugh@janestreet.com>
To: Juri Linkov <juri@linkov.net>
Cc: 63469@debbugs.gnu.org
Subject: bug#63469: 29.0.90; project.el doesn't add menu-bar entries
Date: Thu, 29 Jun 2023 11:30:06 -0400 [thread overview]
Message-ID: <iery1k2p9q9.fsf@janestreet.com> (raw)
In-Reply-To: <86zg4kt6iu.fsf@mail.linkov.net> (Juri Linkov's message of "Wed, 28 Jun 2023 09:52:15 +0300")
[-- Attachment #1: Type: text/plain, Size: 741 bytes --]
Juri Linkov <juri@linkov.net> writes:
>> At this point, does anyone object to my patch adding menu-bar items for
>> project.el, spread throughout the appropriate menus? We could also add
>> a project-minor-mode at some point, but I think these global menu-bar
>> items can be added regardless of that.
>
> My suggestion was to have a submenu with all project commands somewhere,
> and this will be implemented with a new option vc-mode-line-format.
>
> So maybe your patch could be pushed to master now with both parts:
> where project menu items are scattered throughout all menus,
> and also where they are in one submenu that will be used later
> on the mode-line and in the context menus of project buffers.
OK, here is such a patch:
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Add-project-command-entries-to-the-menu-bar.patch --]
[-- Type: text/x-patch, Size: 9558 bytes --]
From e26f5bbf57575321cda7e7633e8960ab543cf69d Mon Sep 17 00:00:00 2001
From: Spencer Baugh <sbaugh@janestreet.com>
Date: Mon, 15 May 2023 14:01:32 -0400
Subject: [PATCH] Add project command entries to the menu-bar
This will make it easier for new users to learn these increasingly
important and useful commands. (Bug#63469)
* lisp/menu-bar.el (menu-bar-file-menu): Add project-dired and
project-find-file entries.
(menu-bar-search-menu): Add project-find-regexp entry.
(menu-bar-replace-menu): Add project-query-replace regexp entry.
(menu-bar-shell-commands-menu): Add project-shell entry.
(menu-bar-buffers-menu-command-entries): Add project-switch-to-buffer
and project-list-buffer entries.
(menu-bar-project-menu): Add.
(menu-bar-tools-menu): Add "Project" submenu, and also project-compile
entry and change text for compile entry.
---
| 66 +++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 63 insertions(+), 3 deletions(-)
--git a/lisp/menu-bar.el b/lisp/menu-bar.el
index d020cf6e90a..bf3548bcf47 100644
--- a/lisp/menu-bar.el
+++ b/lisp/menu-bar.el
@@ -219,10 +219,18 @@ menu-bar-file-menu
'(menu-item "Insert File..." insert-file
:enable (menu-bar-non-minibuffer-window-p)
:help "Insert another file into current buffer"))
+ (bindings--define-key menu [project-dired]
+ '(menu-item "Open Root Directory Of Project..." project-dired
+ :enable (menu-bar-non-minibuffer-window-p)
+ :help "Read the root directory of the current project, to operate on its files"))
(bindings--define-key menu [dired]
'(menu-item "Open Directory..." dired
:enable (menu-bar-non-minibuffer-window-p)
:help "Read a directory, to operate on its files"))
+ (bindings--define-key menu [project-open-file]
+ '(menu-item "Open File In Project..." project-find-file
+ :enable (menu-bar-non-minibuffer-window-p)
+ :help "Read an existing file in the current project into an Emacs buffer"))
(bindings--define-key menu [open-file]
'(menu-item "Open File..." menu-find-file-existing
:enable (menu-bar-non-minibuffer-window-p)
@@ -347,6 +355,9 @@ menu-bar-search-menu
(bindings--define-key menu [tags-srch]
'(menu-item "Search Tagged Files..." tags-search
:help "Search for a regexp in all tagged files"))
+ (bindings--define-key menu [project-search]
+ '(menu-item "Search in Project Files..." project-find-regexp
+ :help "Search for a regexp in files of the current project"))
(bindings--define-key menu [separator-tag-search] menu-bar-separator)
(bindings--define-key menu [repeat-search-back]
@@ -398,6 +409,9 @@ menu-bar-replace-menu
(bindings--define-key menu [tags-repl]
'(menu-item "Replace in Tagged Files..." tags-query-replace
:help "Interactively replace a regexp in all tagged files"))
+ (bindings--define-key menu [project-replace]
+ '(menu-item "Replace in Project Files..." project-query-replace-regexp
+ :help "Interactively replace a regexp in files of the current project"))
(bindings--define-key menu [separator-replace-tags]
menu-bar-separator)
@@ -1746,6 +1760,10 @@ menu-bar-encryption-decryption-menu
(defvar menu-bar-shell-commands-menu
(let ((menu (make-sparse-keymap "Shell Commands")))
+ (bindings--define-key menu [project-interactive-shell]
+ '(menu-item "Run Shell Interactively In Project Root" project-shell
+ :help "Run a subshell interactively, in the current project"))
+
(bindings--define-key menu [interactive-shell]
'(menu-item "Run Shell Interactively" shell
:help "Run a subshell interactively"))
@@ -1765,6 +1783,31 @@ menu-bar-shell-commands-menu
menu))
+(defvar menu-bar-project-menu
+ (let ((menu (make-sparse-keymap "Project")))
+ (bindings--define-key menu [project-execute-extended-command] '(menu-item "Execute Extended Command..." project-execute-extended-command :help "Execute an extended command in project root"))
+ (bindings--define-key menu [project-query-replace-regexp] '(menu-item "Query Replace Regexp..." project-query-replace-regexp :help "Interactively replace a regexp in files of the current project"))
+ (bindings--define-key menu [project-or-external-find-regexp] '(menu-item "Find Regexp Including External Roots..." project-or-external-find-regexp :help "Search for a regexp in files of the current project or external files"))
+ (bindings--define-key menu [project-find-regexp] '(menu-item "Find Regexp..." project-find-regexp :help "Search for a regexp in files of the current project"))
+ (bindings--define-key menu [separator-project-search] menu-bar-separator)
+ (bindings--define-key menu [project-kill-buffers] '(menu-item "Kill Buffers..." project-kill-buffers :help "Kill the buffers belonging to the current project"))
+ (bindings--define-key menu [project-list-buffers] '(menu-item "List Buffers..." project-list-buffers :help "Pop up a window listing all Emacs buffers in the current project"))
+ (bindings--define-key menu [project-switch-to-buffer] '(menu-item "Switch To Buffer..." project-switch-to-buffer :help "Prompt for a buffer in the current project, and switch to it"))
+ (bindings--define-key menu [separator-project-buffers] menu-bar-separator)
+ (bindings--define-key menu [project-async-shell-command] '(menu-item "Async Shell Command..." project-async-shell-command :help "Invoke a shell command in project root asynchronously in background"))
+ (bindings--define-key menu [project-shell-command] '(menu-item "Shell Command..." project-shell-command :help "Invoke a shell command in project root and catch its output"))
+ (bindings--define-key menu [project-eshell] '(menu-item "Run Eshell In Project Root..." project-eshell :help "Run eshell for the current project"))
+ (bindings--define-key menu [project-shell] '(menu-item "Run Shell Interactively In Project Root" project-shell :help "Run a subshell interactively, in the current project"))
+ (bindings--define-key menu [project-compile] '(menu-item "Compile..." project-compile :help "Invoke compiler or Make for current project, view errors"))
+ (bindings--define-key menu [separator-project-programs] menu-bar-separator)
+ (bindings--define-key menu [project-switch-project] '(menu-item "Switch Project..." project-switch-project :help "Switch to another project and then run a command"))
+ (bindings--define-key menu [project-vc-dir] '(menu-item "VC Dir..." project-vc-dir :help "Show the VC status of the project repository"))
+ (bindings--define-key menu [project-dired] '(menu-item "Open Root Directory Of Project..." project-dired :help "Read the root directory of the current project, to operate on its files"))
+ (bindings--define-key menu [project-find-dir] '(menu-item "Open Directory..." project-find-dir :help "Open an existing directory in the current project"))
+ (bindings--define-key menu [project-or-external-find-file] '(menu-item "Open File Including External Roots..." project-or-external-find-file :help "Open an existing file in the current project or its external roots"))
+ (bindings--define-key menu [project-open-file] '(menu-item "Open File..." project-find-file :help "Open an existing file in the current project"))
+ menu))
+
(defun menu-bar-read-mail ()
"Read mail using `read-mail-command'."
(interactive)
@@ -1851,6 +1894,9 @@ menu-bar-tools-menu
'(menu-item "Language Server Support (Eglot)" eglot
:help "Start language server suitable for this buffer's major-mode"))
+ (bindings--define-key menu [project]
+ `(menu-item "Project" ,menu-bar-project-menu))
+
(bindings--define-key menu [ede]
'(menu-item "Project Support (EDE)"
global-ede-mode
@@ -1860,9 +1906,13 @@ menu-bar-tools-menu
(bindings--define-key menu [gdb]
'(menu-item "Debugger (GDB)..." gdb
:help "Debug a program from within Emacs with GDB"))
+ (bindings--define-key menu [project-compile]
+ '(menu-item "Compile Project..." project-compile
+ :help "Invoke compiler or Make for current project, view errors"))
+
(bindings--define-key menu [compile]
- '(menu-item "Compile..." compile
- :help "Invoke compiler or Make, view compilation errors"))
+ '(menu-item "Compile Buffer Directory..." compile
+ :help "Invoke compiler or Make in current buffer's directory, view errors"))
(bindings--define-key menu [shell-commands]
`(menu-item "Shell Commands"
@@ -2347,7 +2397,17 @@ menu-bar-buffers-menu-command-entries
'menu-item
"List All Buffers"
'list-buffers
- :help "Pop up a window listing all Emacs buffers"))
+ :help "Pop up a window listing all Emacs buffers")
+ (list 'select-buffer-in-project
+ 'menu-item
+ "Select Buffer In Project..."
+ 'project-switch-to-buffer
+ :help "Prompt for a buffer in the current project, and switch to it")
+ (list 'list-buffers-in-project
+ 'menu-item
+ "List Buffers In Project..."
+ 'project-list-buffers
+ :help "Pop up a window listing all Emacs buffers in the current project"))
"Entries to be included at the end of the \"Buffers\" menu.")
(defvar menu-bar-select-buffer-function 'switch-to-buffer
--
2.39.3
next prev parent reply other threads:[~2023-06-29 15:30 UTC|newest]
Thread overview: 70+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-12 17:48 bug#63469: 29.0.90; project.el doesn't add menu-bar entries Spencer Baugh
2023-05-12 19:09 ` Eli Zaretskii
2023-05-12 19:25 ` Dmitry Gutov
2023-05-15 16:49 ` Juri Linkov
2023-05-15 18:15 ` Spencer Baugh
2023-05-15 18:19 ` Eli Zaretskii
2023-05-15 18:11 ` Spencer Baugh
2023-05-15 18:37 ` Eli Zaretskii
2023-05-15 18:46 ` Spencer Baugh
2023-05-16 16:09 ` Eli Zaretskii
2023-05-16 17:09 ` Spencer Baugh
2023-05-17 11:30 ` Eli Zaretskii
2023-05-17 14:50 ` Spencer Baugh
2023-05-18 6:53 ` Dmitry Gutov
2023-05-18 7:01 ` Eli Zaretskii
2023-05-18 9:49 ` Dmitry Gutov
2023-05-18 10:23 ` Eli Zaretskii
2023-05-18 14:30 ` Spencer Baugh
2023-05-18 15:15 ` Eli Zaretskii
2023-05-18 15:57 ` Juri Linkov
2023-05-18 16:06 ` Eli Zaretskii
2023-05-18 19:34 ` Dmitry Gutov
2023-05-19 6:56 ` Juri Linkov
2023-05-19 10:44 ` Eli Zaretskii
2023-05-19 17:46 ` Juri Linkov
2023-05-19 18:28 ` Eli Zaretskii
2023-05-22 17:48 ` Juri Linkov
2023-05-22 18:20 ` Eli Zaretskii
2023-05-22 19:49 ` Spencer Baugh
2023-05-22 19:54 ` Dmitry Gutov
2023-05-22 21:20 ` Spencer Baugh
2023-05-22 21:30 ` Dmitry Gutov
2023-05-23 13:57 ` Michael Albinus
2023-05-24 1:07 ` Dmitry Gutov
2023-05-24 8:38 ` Michael Albinus
2023-05-23 6:52 ` Juri Linkov
2023-05-23 11:17 ` Eli Zaretskii
2023-05-23 18:08 ` Juri Linkov
2023-05-24 1:10 ` Dmitry Gutov
2023-05-24 6:25 ` Juri Linkov
2023-05-25 1:15 ` Dmitry Gutov
2023-05-25 6:35 ` Juri Linkov
2023-05-25 16:17 ` Dmitry Gutov
2023-05-23 6:49 ` Juri Linkov
2023-05-22 19:59 ` Dmitry Gutov
2023-05-23 6:46 ` Juri Linkov
2023-05-23 18:11 ` Juri Linkov
2023-05-24 1:03 ` Dmitry Gutov
2023-05-24 6:29 ` Juri Linkov
2023-05-25 1:14 ` Dmitry Gutov
2023-05-25 6:29 ` Juri Linkov
2023-05-25 16:14 ` Dmitry Gutov
2023-05-25 18:41 ` Juri Linkov
2023-05-25 22:19 ` Dmitry Gutov
2023-05-30 17:51 ` Juri Linkov
2023-06-02 2:11 ` Dmitry Gutov
2023-06-02 6:37 ` Juri Linkov
2023-06-03 1:36 ` Dmitry Gutov
2023-05-24 1:00 ` Dmitry Gutov
2023-05-19 14:42 ` Spencer Baugh
2023-05-19 17:41 ` Juri Linkov
2023-06-28 0:54 ` Spencer Baugh
2023-06-28 6:52 ` Juri Linkov
2023-06-29 15:30 ` Spencer Baugh [this message]
2023-06-29 17:31 ` Juri Linkov
2023-06-29 18:03 ` Eli Zaretskii
2023-06-29 19:22 ` Spencer Baugh
2023-06-30 5:32 ` Eli Zaretskii
2023-06-30 15:55 ` Spencer Baugh
2023-07-01 9:44 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=iery1k2p9q9.fsf@janestreet.com \
--to=sbaugh@janestreet.com \
--cc=63469@debbugs.gnu.org \
--cc=juri@linkov.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).