From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Juri Linkov Newsgroups: gmane.emacs.bugs Subject: bug#63469: 29.0.90; project.el doesn't add menu-bar entries Date: Mon, 22 May 2023 20:48:08 +0300 Organization: LINKOV.NET Message-ID: <86o7mccl5z.fsf@mail.linkov.net> References: <834jod1lvc.fsf@gnu.org> <83o7mkz2ap.fsf@gnu.org> <83sfbvxkj3.fsf@gnu.org> <3d97111e-794d-eeef-73b0-ee3f6f5f15d5@gutov.dev> <83jzx6w2bg.fsf@gnu.org> <6a3eed52-3248-74f9-bcaf-bf12660ae0ed@gutov.dev> <83h6savsz4.fsf@gnu.org> <83mt21vfgl.fsf@gnu.org> <86mt211vk3.fsf@mail.linkov.net> <0ce4532f-03aa-6afe-bd8f-8ef1df6615de@gutov.dev> <86ilco7qbs.fsf@mail.linkov.net> <83r0rctxbc.fsf@gnu.org> <867ct4b4ds.fsf@mail.linkov.net> <835y8otbub.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="18788"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/30.0.50 (x86_64-pc-linux-gnu) Cc: dmitry@gutov.dev, 63469@debbugs.gnu.org, sbaugh@janestreet.com To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon May 22 19:53:23 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 1q19il-0004kk-8q for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 22 May 2023 19:53:23 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q19if-0001Ox-9a; Mon, 22 May 2023 13:53:17 -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 1q19iU-0001NP-9o for bug-gnu-emacs@gnu.org; Mon, 22 May 2023 13:53: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 1q19iQ-0006OX-5U for bug-gnu-emacs@gnu.org; Mon, 22 May 2023 13:53:05 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q19iP-0003MX-T4 for bug-gnu-emacs@gnu.org; Mon, 22 May 2023 13:53:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Juri Linkov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 22 May 2023 17:53:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63469 X-GNU-PR-Package: emacs Original-Received: via spool by 63469-submit@debbugs.gnu.org id=B63469.168477797612897 (code B ref 63469); Mon, 22 May 2023 17:53:01 +0000 Original-Received: (at 63469) by debbugs.gnu.org; 22 May 2023 17:52:56 +0000 Original-Received: from localhost ([127.0.0.1]:36317 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q19iJ-0003Lv-GV for submit@debbugs.gnu.org; Mon, 22 May 2023 13:52:56 -0400 Original-Received: from relay2-d.mail.gandi.net ([217.70.183.194]:58365) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q19iG-0003Lg-Ic for 63469@debbugs.gnu.org; Mon, 22 May 2023 13:52:53 -0400 Original-Received: (Authenticated sender: juri@linkov.net) by mail.gandi.net (Postfix) with ESMTPSA id D126540005; Mon, 22 May 2023 17:52:43 +0000 (UTC) In-Reply-To: <835y8otbub.fsf@gnu.org> (Eli Zaretskii's message of "Fri, 19 May 2023 21:28:28 +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:262178 Archived-At: --=-=-= Content-Type: text/plain >> >> +(define-minor-mode project-mode >> >> + "Toggle display of project menu in the project-aware buffers." >> >> + :lighter " Pro" >> >> + :keymap (define-keymap "" project-mode-menu)) >> > >> > If this mode is only for showing the menu, then at least the mode's >> > name should reflect that. >> >> It can be used for anything. For example, to display the project name >> on the mode-line. (Then better to cache the project name in a new >> buffer-local variable.) > > I don't see anything but the menu in the patch you suggested. I > understand that in principle we could do many things there, but if you > are proposing a real patch, not just an initial idea, please show all > of the code you want to include in this mode. Actually I miss this feature very much. There is already the mode-line indication with the VC system name and the VC branch name, but no indication with a project name, so similar files in different projects all are showing the same "Git-master". Now here is the implementation of 'project-mode' based on 'vc-mode', and 'project-menu-entry' based on 'vc-menu-entry' that shows a project name alongside of vc info, and the mouse click opens the project menu using 'menu-bar-project-menu' implemented by Spencer. --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=project-mode-line.patch diff --git a/lisp/bindings.el b/lisp/bindings.el index c77b64c05da..ba9f44b920c 100644 --- a/lisp/bindings.el +++ b/lisp/bindings.el @@ -616,6 +616,7 @@ mode-line-end-spaces " " 'mode-line-position '(vc-mode vc-mode) + '(project-mode project-name) " " 'mode-line-modes 'mode-line-misc-info diff --git a/lisp/desktop.el b/lisp/desktop.el index 6aacb85c12c..6198441d788 100644 --- a/lisp/desktop.el +++ b/lisp/desktop.el @@ -547,6 +547,7 @@ desktop-minor-mode-table '((defining-kbd-macro nil) (isearch-mode nil) (vc-mode nil) + (project-mode nil) (vc-dir-mode nil) (erc-track-minor-mode nil) (savehist-mode nil)) diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el index 7c51778d5d4..06bd0d09b8e 100644 --- a/lisp/progmodes/project.el +++ b/lisp/progmodes/project.el @@ -1883,5 +1908,47 @@ project-switch-project (let ((project-current-directory-override dir)) (call-interactively command)))) +;;; Project mode + +;; Tell Emacs about this new kind of minor mode +(add-to-list 'minor-mode-alist '(project-mode project-name)) + +(defvar project-name nil + "The project name of the current buffer when it belongs to a project.") + +;;;###autoload +(put 'project-name 'risky-local-variable t) +(put 'project-name 'permanent-local t) + +(defvar project-menu-entry + `(menu-item ,(purecopy "Project") ,menu-bar-project-menu)) + +(defconst project-mode-line-map + (let ((map (make-sparse-keymap))) + (define-key map [mode-line down-mouse-1] project-menu-entry) + map)) + +;;;###autoload +(define-minor-mode project-mode + "Toggle display of project menu in the project-aware buffers." + (if project-mode + (setq-local project-name (concat + " " + (propertize + (project-name (project-current)) + 'mouse-face 'mode-line-highlight + 'local-map project-mode-line-map))))) + +(defun project-mode--turn-on () + "Turn on `project-mode' in all pertinent buffers." + (when (project-current) + (project-mode 1))) + +;;;###autoload +(define-globalized-minor-mode global-project-mode + project-mode project-mode--turn-on + :group 'project + :version "30.1") + (provide 'project) ;;; project.el ends here --=-=-=--