unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Dmitry Gutov <dgutov@yandex.ru>
To: "Basil L. Contovounesios" <contovob@tcd.ie>
Cc: "Simen Heggestøyl" <simenheg@runbox.com>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: New feature in project.el: Remembering the previously used projects
Date: Fri, 29 May 2020 02:29:35 +0300	[thread overview]
Message-ID: <8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru> (raw)
In-Reply-To: <87pnan8xuf.fsf@tcd.ie>

[-- Attachment #1: Type: text/plain, Size: 1257 bytes --]

On 29.05.2020 02:05, Basil L. Contovounesios wrote:

>> Please let us know how you like the change, and if you see any new problems.
> 
> Only one feature request and some minor questions from me.
> 
> Can the project-list file name please be customisable?

Of course. Just an omission.

> Could the contents of the project-list file comprise easily readable,
> printable, and even extensible sexps?
> 
> Could project-switch-project reuse read-multiple-choice or similar?

I'm attaching a patch that makes it use read-multiple-choice, check it 
out. But I'm not sure the result looks better than what we have now.

Suggestions on "similar" welcome.

> Isn't there a race here?
> 
>    (defun project--ensure-file-exists (filename)
>      "Create an empty file FILENAME if it doesn't exist."
>      (unless (file-exists-p filename)
>        (with-temp-buffer
>          (write-file filename))))
> 
> Why not use something like the following instead?
> 
>    (ignore-error file-already-exists
>      (write-region "" nil filename nil 0 nil 'excl))

Looks good to me. Let's see what Simen says.

> In fact, couldn't project--ensure-file-exists be eliminated altogether?
> If the file doesn't exist, just don't set project--list, or set it to
> nil.

Or that.

[-- Attachment #2: project-switch-read-multiple.diff --]
[-- Type: text/x-patch, Size: 1736 bytes --]

diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 92293d0e2d..54bacc598e 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -805,15 +805,11 @@ project-switch-commands
 command to run when KEY is pressed.  LABEL is used to distinguish
 the choice in the dispatch menu.")
 
-(defun project--keymap-prompt ()
-  "Return a prompt for the project swithing dispatch menu."
-  (mapconcat
+(defun project--switch-choices ()
+  (mapcar
    (pcase-lambda (`(,key ,label))
-     (format "[%s] %s"
-             (propertize (key-description `(,key)) 'face 'bold)
-             label))
-   project-switch-commands
-   "  "))
+     (list (aref key 0) label))
+   project-switch-commands))
 
 ;;;###autoload
 (defun project-switch-project ()
@@ -822,17 +818,12 @@ project-switch-project
 and presented in a dispatch menu."
   (interactive)
   (let ((dir (project-prompt-project-dir))
-        (choice nil))
-    (while (not (and choice
-                     (or (equal choice (kbd "C-g"))
-                         (assoc choice project-switch-commands))))
-      (setq choice (read-key-sequence (project--keymap-prompt))))
-    (if (equal choice (kbd "C-g"))
-        (message "Quit")
-      (let ((default-directory dir)
-            (project-current-inhibit-prompt t))
-        (call-interactively
-         (nth 2 (assoc choice project-switch-commands)))))))
+        (choice (read-multiple-choice "Action:"
+                                      (project--switch-choices))))
+    (let ((default-directory dir)
+          (project-current-inhibit-prompt t))
+      (call-interactively
+       (nth 2 (assoc (string choice) project-switch-commands))))))
 
 (provide 'project)
 ;;; project.el ends here

  reply	other threads:[~2020-05-28 23:29 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-28 20:06 New feature in project.el: Remembering the previously used projects Dmitry Gutov
2020-05-28 23:05 ` Basil L. Contovounesios
2020-05-28 23:29   ` Dmitry Gutov [this message]
2020-05-29  7:31     ` Philip K.
2020-05-29 13:51       ` Dmitry Gutov
2020-05-29 15:54         ` Simen Heggestøyl
     [not found]         ` <871rn2ivne.fsf@simenheg@gmail.com>
2020-05-30 10:29           ` Philip K.
2020-06-02 17:04             ` Simen Heggestøyl
     [not found]             ` <5ed68784.1c69fb81.61518.35eeSMTPIN_ADDED_BROKEN@mx.google.com>
2020-06-03 11:28               ` Basil L. Contovounesios
2020-05-30 12:38           ` Dmitry Gutov
2020-06-02 17:14             ` Simen Heggestøyl
2020-05-30 21:57           ` Juri Linkov
2020-05-30 23:39             ` Dmitry Gutov
2020-06-01 23:01               ` Juri Linkov
2020-06-02 21:34                 ` Dmitry Gutov
2020-06-03 20:13                   ` Dmitry Gutov
2020-06-03 22:40                     ` Juri Linkov
2020-06-03 23:13                       ` Dmitry Gutov
2020-06-04 21:55                         ` Juri Linkov
2020-06-04 22:37                           ` Dmitry Gutov
2020-06-05  8:33                           ` Philip K.
2020-06-05  8:42                             ` Simen Heggestøyl
2020-06-05 11:44                             ` Dmitry Gutov
2020-06-05 11:59                               ` Philip K.
2020-06-05 13:59                                 ` Philip K.
2020-06-05 17:20                                   ` Dmitry Gutov
2020-06-06  1:24                                   ` Jamie Beardslee
2020-12-19 22:18                                     ` Dmitry Gutov
2020-06-06 23:46                             ` Juri Linkov
2020-06-07  0:40                               ` Dmitry Gutov
2020-06-07 22:38                                 ` Juri Linkov
2020-06-02 17:43             ` Simen Heggestøyl
     [not found]             ` <5ed68fe1.1c69fb81.45e50.0c7cSMTPIN_ADDED_BROKEN@mx.google.com>
2020-06-03 11:28               ` Basil L. Contovounesios
     [not found]             ` <87a71l2wjf.fsf@simenheg@gmail.com>
2020-06-02 17:57               ` Dmitry Gutov
2020-06-03 22:34               ` Juri Linkov
2020-06-03 23:17                 ` Dmitry Gutov
2020-06-04 18:33                   ` Simen Heggestøyl
2020-06-04 21:58                   ` Juri Linkov
2020-05-31 13:00           ` Dmitry Gutov
2020-06-02 17:51             ` Simen Heggestøyl
     [not found]             ` <87k10picej.fsf@simenheg@gmail.com>
2020-06-02 21:33               ` Dmitry Gutov
     [not found]         ` <5ed13064.1c69fb81.4bf5e.dc8eSMTPIN_ADDED_BROKEN@mx.google.com>
2020-06-03 11:28           ` Basil L. Contovounesios
2020-06-03 11:27     ` Basil L. Contovounesios
2020-06-03 11:47       ` Dmitry Gutov
2020-06-03 13:38         ` Basil L. Contovounesios
2020-06-03 19:15           ` Simen Heggestøyl
     [not found]           ` <87lfl4x8p0.fsf@simenheg@gmail.com>
2020-06-03 20:11             ` Dmitry Gutov
2020-06-04 18:19               ` Simen Heggestøyl
2020-05-29 22:55 ` Kévin Le Gouguec
2020-05-29 23:22   ` Dmitry Gutov
2020-05-29 23:31     ` Dmitry Gutov
2020-05-30  0:42     ` Dmitry Gutov
2020-05-30  6:05       ` Simen Heggestøyl
     [not found]       ` <5ed1f7ae.1c69fb81.9b99b.4ce7SMTPIN_ADDED_BROKEN@mx.google.com>
2020-05-30 12:42         ` Kévin Le Gouguec
2020-05-30 13:17           ` Dmitry Gutov
2020-05-30 17:05             ` Dmitry Gutov
2020-05-30 18:29               ` Kévin Le Gouguec
2020-06-02 17:29           ` Simen Heggestøyl
     [not found]       ` <877dwuc5zu.fsf@simenheg@gmail.com>
2020-05-30 13:21         ` Dmitry Gutov

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=8834c5e9-90c7-a8ad-3dcd-b8fb95f99df5@yandex.ru \
    --to=dgutov@yandex.ru \
    --cc=contovob@tcd.ie \
    --cc=emacs-devel@gnu.org \
    --cc=simenheg@runbox.com \
    /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).