From 246fe933519ed009fa01dd6bc8c8ae4f7e0ff3c6 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Sat, 18 Jun 2022 19:10:21 +0200 Subject: project: add vterm command --- lisp/init-project.el | 27 +++++++++++++++++++++++++-- 1 file 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 -- cgit v1.2.3