]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/progmodes/project.el (project-vc-dir, project-shell): New commands.
authorJuri Linkov <juri@linkov.net>
Mon, 1 Jun 2020 23:01:25 +0000 (02:01 +0300)
committerJuri Linkov <juri@linkov.net>
Mon, 1 Jun 2020 23:01:25 +0000 (02:01 +0300)
(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
etc/NEWS
lisp/progmodes/project.el

index 22b7639d349f33423e79a530daa4538c9b3e6620..cc7415e7ad531d5e134249715d70cdd4c5e12072 100644 (file)
@@ -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
 directory.
 
+@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.
index 3086ffaf91b40ee6b60473148ec5e935ede75534..36ef3509b230833b8ef6b6ed2a4c4d17ba55226c 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -411,8 +411,8 @@ information, see the related entry about 'shr-browse-url' above.
 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', 'project-eshell'.
+These commands run Dired/VC-Dir and Shell/Eshell in a project's root directory,
 respectively.
 
 +++
index 2d0b6c4a21b86edde8cfab563945f254725d5621..12149806891370143d45906580ee809828c9aa30 100644 (file)
@@ -671,6 +671,20 @@ PREDICATE, HIST, and DEFAULT have the same meaning as in
   (interactive)
   (dired (project-root (project-current t))))
 
+;;;###autoload
+(defun project-vc-dir ()
+  "Open VC-Dir in the current project."
+  (interactive)
+  (vc-dir (project-root (project-current t))))
+
+;;;###autoload
+(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*"))))
+
 ;;;###autoload
 (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)
   (fileloop-continue))
 
+(defvar compilation-read-command)
+(declare-function compilation-read-command "compile")
+
 ;;;###autoload
-(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)))
 
 \f
 ;;; Project list
@@ -795,8 +819,10 @@ It's also possible to enter an arbitrary directory."
 ;;;###autoload
 (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