Commit 5a37ee0ba9b6

Vincent Demeester <vincent@sbr.pm>
2025-04-01 15:24:20
tools/emacs: add a vde/project-eat function…
… and move some function to `project-func.el` 😇 Signed-off-by: Vincent Demeester <vincent@sbr.pm>
1 parent 4d37999
Changed files (2)
tools/emacs/config/config-projects.el
@@ -6,7 +6,7 @@
 (require 'json)
 
 (use-package project
-  :commands (project-find-file project-find-regexp vde-project-vterm vde-project-run-in-vterm)
+  :commands (project-find-file project-find-regexp vde/project-vterm vde/project-run-in-vterm)
   :custom ((project-switch-commands '((?f "File" project-find-file)
 				      (?g "Grep" project-find-regexp)
 				      (?d "Dired" project-dired)
@@ -14,13 +14,14 @@
 				      (?q "Query replace" project-query-replace-regexp)
 				      (?m "Magit" vde-project-magit-status)
 				      (?e "Eshell" project-eshell)
-				      (?s "Vterm" vde-project-vterm)
+				      (?E "Eat" vde/project-eat)
+				      (?s "Vterm" vde/project-vterm)
 				      (?R "README" vde/open-readme)
 				      (?g "Checkout GitHub PR" checkout-github-pr)))
 	   (project-mode-line t))
   :bind (("C-x p v" . vde-project-magit-status)
-         ("C-x p s" . vde-project-vterm)
-         ("C-x p X" . vde-project-run-in-vterm)
+         ("C-x p s" . vde/project-vterm)
+         ("C-x p X" . vde/project-run-in-vterm)
 	 ("C-x p G" . checkout-github-pr))
   :init
   (require project-rootfile)
@@ -44,24 +45,6 @@
     (interactive)
     (magit-status (vde-project--project-current)))
 
-  (defun vde-project-vterm (&optional command)
-    "Run `vterm' on project.
-If a buffer already exists for running a vterm shell in the project's root,
-switch to it. Otherwise, create a new vterm shell."
-    (interactive)
-    (let* ((default-directory (vde-project--project-current))
-           (default-project-vterm-name (project-prefixed-buffer-name "vterm"))
-           (vterm-buffer (get-buffer default-project-vterm-name)))
-      (if (and vterm-buffer (not current-prefix-arg))
-          (pop-to-buffer-same-window vterm-buffer)
-        (let* ((cd-cmd (concat " cd " (shell-quote-argument default-directory))))
-          (vterm default-project-vterm-name)
-          (with-current-buffer vterm-buffer
-            (vterm-send-string cd-cmd)
-            (vterm-send-return))))
-      (when command
-        (vterm-send-string command)
-        (vterm-send-return))))
   (general-leader
     "p"  '(:ignore :which-key "Project")
     "pp"  #'(project-switch-project :which-key "Switch to Project")
@@ -71,8 +54,10 @@ switch to it. Otherwise, create a new vterm shell."
     "pc"  #'(project-compile :which-key "Compile in Project")
     "pb"  #'(project-switch-to-buffer :which-key "Switch to Project Buffer")
     "pk"  #'(project-kill-buffers :which-key "Kill Project Buffers")
-    "ps"  #'(vde-project-vterm :which-key "Start a vterm in Project")
-    "px"  #'(vde-project-run-in-vterm :which-key "Execute command in vterm in Project")))
+    "ps"  #'(vde/project-vterm :which-key "Start a vterm in Project")
+    "pe"  #'(project-eshell :which-key "Start a eshell in Project")
+    "pE"  #'(vde/project-eat :which-key "Start a eat term in Project")
+    "px"  #'(vde/project-run-in-vterm :which-key "Execute command in vterm in Project")))
 
 (use-package conner
   :bind (("C-x p C" . conner-run-project-command))
tools/emacs/lisp/project-func.el
@@ -44,7 +44,7 @@
            (candidates (format-pr-candidates prs))
            (selected (if candidates
                          (cdr (assoc (completing-read "Checkout PR: " candidates)
-                                    candidates))
+                                     candidates))
                        nil)))
       (if selected
           (shell-command (format "gh pr checkout %d" selected))
@@ -66,7 +66,7 @@
    (t default-directory)))
 
 ;;;##autoload
-(defun vde-project-run-in-vterm (command &optional directory)
+(defun vde/project-run-in-vterm (command &optional directory)
   "Run the given `COMMAND' in a new vterm buffer in `project-root' or the
 given `DIRECTORY'.
 
@@ -101,13 +101,49 @@ It will search for README.org, README.md or README in that order"
 
 ;;;###autoload
 (defun vde/project-try-local (dir)
-    "Determine if DIR is a non-VC project."
-    (if-let ((root (if (listp vde/project-local-identifier)
-                       (seq-some (lambda (n)
-                                   (locate-dominating-file dir n))
-                                 vde/project-local-identifier)
-                     (locate-dominating-file dir vde/project-local-identifier))))
-        (cons 'local root)))
+  "Determine if DIR is a non-VC project."
+  (if-let ((root (if (listp vde/project-local-identifier)
+                     (seq-some (lambda (n)
+                                 (locate-dominating-file dir n))
+                               vde/project-local-identifier)
+                   (locate-dominating-file dir vde/project-local-identifier))))
+      (cons 'local root)))
+
+;;;###autoload
+(defun vde/project-vterm (&optional command)
+  "Run `vterm' on project.
+If a buffer already exists for running a vterm shell in the project's root,
+switch to it. Otherwise, create a new vterm shell."
+  (interactive)
+  (let* ((default-directory (vde-project--project-current))
+         (default-project-vterm-name (project-prefixed-buffer-name "vterm"))
+         (vterm-buffer (get-buffer default-project-vterm-name)))
+    (if (and vterm-buffer (not current-prefix-arg))
+        (pop-to-buffer-same-window vterm-buffer)
+      (let* ((cd-cmd (concat " cd " (shell-quote-argument default-directory))))
+        (vterm default-project-vterm-name)
+        (with-current-buffer vterm-buffer
+          (vterm-send-string cd-cmd)
+          (vterm-send-return))))
+    (when command
+      (vterm-send-string command)
+      (vterm-send-return))))
+
+;;;###autoload
+(defun vde/project-eat ()
+  "Run Eat term in the current project's root directory.
+If a buffer already exists for running Eshell in the project's root,
+switch to it.  Otherwise, create a new Eshell buffer.
+With \\[universal-argument] prefix arg, create a new Eshell buffer even
+if one already exists."
+  (interactive)
+  (defvar eat-buffer-name)
+  (let* ((default-directory (project-root (project-current t)))
+	 (eat-buffer-name (project-prefixed-buffer-name "eat"))
+	 (eat-buffer (get-buffer eat-buffer-name)))
+    (if (and eat-buffer (not current-prefix-arg))
+	(pop-to-buffer eat-buffer (bound-and-true-p display-comint-buffer-action))
+      (eat shell-file-name))))
 
 (provide 'project-func)
 ;;; project-func.el ends here