[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 2c1e5b9: * lisp/progmodes/project.el (project-vc-dir, project-she

From: Juri Linkov
Subject: master 2c1e5b9: * lisp/progmodes/project.el (project-vc-dir, project-shell): New commands.
Date: Mon, 1 Jun 2020 19:01:35 -0400 (EDT)

branch: master
commit 2c1e5b9e77d5da26cfb01917c25546e776c67789
Author: Juri Linkov <juri@linkov.net>
Commit: Juri Linkov <juri@linkov.net>

    * lisp/progmodes/project.el (project-vc-dir, project-shell): New commands.
    (project-compile): Add args and interactive spec like in 'compile'.
    (project-switch-commands): Bind project-vc-dir to "v",
    project-shell to "s", and rebind project-find-regexp from "s" to "r".
    * doc/emacs/maintaining.texi (Project File Commands):
    Describe project-vc-dir and project-shell.
 doc/emacs/maintaining.texi | 11 +++++++++++
 etc/NEWS                   |  4 ++--
 lisp/progmodes/project.el  | 36 +++++++++++++++++++++++++++++++-----
 3 files changed, 44 insertions(+), 7 deletions(-)

diff --git a/doc/emacs/maintaining.texi b/doc/emacs/maintaining.texi
index 22b7639..cc7415e 100644
--- a/doc/emacs/maintaining.texi
+++ b/doc/emacs/maintaining.texi
@@ -1718,6 +1718,17 @@ continue with @w{@kbd{M-x fileloop-continue @key{RET}}}.
 (@pxref{Dired}) listing the files in the current project's root
+@findex project-vc-dir
+  The command @code{project-vc-dir} opens a VC Directory buffer
+(@pxref{VC Directory Mode}) listing the version control statuses of
+the files in a directory tree under the current project's
+root directory.
+@findex project-shell
+  The command @code{project-shell} starts a shell session
+(@pxref{Shell}) in a new buffer with the current project's root as the
+working directory.
 @findex project-eshell
   The command @code{project-eshell} starts an Eshell session in a new
 buffer with the current project's root as the working directory.
diff --git a/etc/NEWS b/etc/NEWS
index 3086ffa..36ef350 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -411,8 +411,8 @@ information, see the related entry about 'shr-browse-url' 
 all commands that prompt for a project directory.
-*** New commands 'project-dired' and 'project-eshell'.
-These commands run Dired and Eshell in a project's root directory,
+*** New commands 'project-dired', 'project-vc-dir', 'project-shell', 
+These commands run Dired/VC-Dir and Shell/Eshell in a project's root directory,
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index 2d0b6c4..1214980 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -672,6 +672,20 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in
   (dired (project-root (project-current t))))
+(defun project-vc-dir ()
+  "Open VC-Dir in the current project."
+  (interactive)
+  (vc-dir (project-root (project-current t))))
+(defun project-shell ()
+  "Open Shell in the current project."
+  (interactive)
+  (let ((default-directory (project-root (project-current t))))
+    ;; Use ‘create-file-buffer’ to uniquify shell buffer names.
+    (shell (create-file-buffer "*shell*"))))
 (defun project-eshell ()
   "Open Eshell in the current project."
@@ -705,13 +719,23 @@ loop using the command \\[fileloop-continue]."
    from to (project-files (project-current t)) 'default)
+(defvar compilation-read-command)
+(declare-function compilation-read-command "compile")
-(defun project-compile ()
-  "Run `compile' in the project root."
-  (interactive)
+(defun project-compile (command &optional comint)
+  "Run `compile' in the project root.
+Arguments the same as in `compile'."
+  (interactive
+   (list
+    (let ((command (eval compile-command)))
+      (if (or compilation-read-command current-prefix-arg)
+         (compilation-read-command command)
+       command))
+    (consp current-prefix-arg)))
   (let* ((pr (project-current t))
          (default-directory (project-root pr)))
-    (call-interactively 'compile)))
+    (compile command comint)))
 ;;; Project list
@@ -795,8 +819,10 @@ It's also possible to enter an arbitrary directory."
 (defvar project-switch-commands
   '(("f" "Find file" project-find-file)
-    ("s" "Find regexp" project-find-regexp)
+    ("r" "Find regexp" project-find-regexp)
     ("d" "Dired" project-dired)
+    ("v" "VC-Dir" project-vc-dir)
+    ("s" "Shell" project-shell)
     ("e" "Eshell" project-eshell))
   "Alist mapping keys to project switching menu entries.
 Used by `project-switch-project' to construct a dispatch menu of

reply via email to

[Prev in Thread] Current Thread [Next in Thread]