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 ;; 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