summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-06-18 19:10:21 +0200
committerMartin Polden <mpolden@mpolden.no>2022-06-18 19:17:48 +0200
commit246fe933519ed009fa01dd6bc8c8ae4f7e0ff3c6 (patch)
treef2cb13709651098d34e8df43e6505c1256620d04
parentcf6339e621cad581fdfc89e6fac6db2a5bff7780 (diff)
project: add vterm command
-rw-r--r--lisp/init-project.el27
1 files changed, 25 insertions, 2 deletions
diff --git a/lisp/init-project.el b/lisp/init-project.el
index a2932d9..6b2df3b 100644
--- a/lisp/init-project.el
+++ b/lisp/init-project.el
@@ -10,14 +10,37 @@
(when (and module-root (not is-vc-root))
(cons 'transient module-root))))
+(defun mpolden/project-vterm ()
+ "Start Vterm in the current project's root directory.
+If a buffer already exists for any directory in the current
+project, switch to it.
+
+With \\[universal-argument] prefix arg, always create a new
+buffer even if one already exists."
+ (interactive)
+ (let* ((default-directory (directory-file-name (project-root (project-current t))))
+ ;; find a vterm buffer which has its current directory in the project
+ ;; root or any sub-directory of the root
+ (vterm-buf (car (seq-filter (lambda (buf)
+ (let* ((buf-prefix "vterm: ")
+ (buf-name (buffer-name buf))
+ (buf-dir (string-remove-prefix buf-prefix buf-name)))
+ (and (string-prefix-p buf-prefix buf-name)
+ (string-prefix-p (file-truename default-directory)
+ (file-truename buf-dir)))))
+ (buffer-list)))))
+ (if (and vterm-buf (not current-prefix-arg))
+ (pop-to-buffer vterm-buf)
+ (vterm-other-window))))
+
(use-package project
:init
;; commands to show when switching projects
(setq project-switch-commands '((project-find-file "Find file" ?f)
(project-dired "Dired" ?d)
- (project-eshell "Eshell" ?e)
(mpolden/grep "Grep" ?g)
- (magit-project-status "Magit" ?m)))
+ (magit-project-status "Magit" ?m)
+ (mpolden/project-vterm "Vterm" ?v)))
;; configure how projects are detected
(setq project-find-functions '(mpolden/project-try-go project-try-vc))
:bind (;; C-x f finds file in project