aboutsummaryrefslogtreecommitdiffstats
path: root/oni-project.el
diff options
context:
space:
mode:
authorGravatar Tom Willemse2024-07-01 15:06:43 -0700
committerGravatar Tom Willemse2024-07-01 15:06:43 -0700
commitf4b587f5500765996a1153b7eaf87d13b46c1ca1 (patch)
treebdcd88d678ff57ac8082f70849482ca5c8c0896d /oni-project.el
parente917daef5aa436911bac7e16886bedaf12c0d235 (diff)
downloademacs-config-f4b587f5500765996a1153b7eaf87d13b46c1ca1.tar.gz
emacs-config-f4b587f5500765996a1153b7eaf87d13b46c1ca1.zip
[oni-vterm] Add function to open vterm in a project
Diffstat (limited to 'oni-project.el')
-rw-r--r--oni-project.el27
1 files changed, 26 insertions, 1 deletions
diff --git a/oni-project.el b/oni-project.el
index 2443485..b66fba9 100644
--- a/oni-project.el
+++ b/oni-project.el
@@ -4,7 +4,7 @@
;; Author: Tom Willemse <tom@ryuslash.org>
;; Keywords: local
-;; Version: 2023.0722.222800
+;; Version: 2024.0701.150636
;; This program is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
@@ -28,6 +28,7 @@
(require 'project)
(declare-function magit-status-setup-buffer "magit-status.el")
+(declare-function vterm "vterm.el")
(defun oni-project-magit ()
"Start Magit in the current project's root directory."
@@ -38,5 +39,29 @@
(define-key project-prefix-map (kbd "m") #'oni-project-magit)
(add-to-list 'project-switch-commands '(oni-project-magit "Magit status")))
+(defun oni-project-vterm ()
+ "Start Vterm in the current project's root directory.
+If a buffer already exists for running Vterm in the project's root,
+switch to it. Otherwise, create a new Vterm buffer. With
+\\[universal-argument] prefix arg, create a new Vterm buffer even if one
+already exists."
+ (interactive)
+ (defvar vterm-buffer-name-string)
+ (let* ((project-root (project-root (project-current t)))
+ (vterm-buffer (seq-find (lambda (b)
+ (with-current-buffer b
+ (and (eq 'vterm-mode major-mode)
+ (string-prefix-p project-root default-directory))))
+ (buffer-list)))
+ (default-directory project-root)
+ (vterm-buffer-name-string (project-prefixed-buffer-name "vterm")))
+ (if (and vterm-buffer (not current-prefix-arg))
+ (pop-to-buffer vterm-buffer (bound-and-true-p display-comint-buffer-action))
+ (vterm))))
+
+(when (locate-library "vterm")
+ (define-key project-prefix-map (kbd "t") #'oni-project-vterm)
+ (add-to-list 'project-switch-commands '(oni-project-vterm "Terminal")))
+
(provide 'oni-project)
;;; oni-project.el ends here