2019-05-18 23:41:18 -04:00
|
|
|
;;; term/vterm/autoload.el -*- lexical-binding: t; -*-
|
2019-01-27 03:45:29 +08:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-06-11 07:51:16 +02:00
|
|
|
(defun +vterm/toggle (arg)
|
|
|
|
"Toggles a terminal popup window at project root.
|
|
|
|
|
|
|
|
If prefix ARG is non-nil, recreate vterm buffer in the current project's root."
|
2019-01-27 03:45:29 +08:00
|
|
|
(interactive "P")
|
2019-03-13 20:20:19 -04:00
|
|
|
(unless (fboundp 'module-load)
|
|
|
|
(user-error "Your build of Emacs lacks dynamic modules support and cannot load vterm"))
|
2019-06-17 19:18:51 +02:00
|
|
|
(let ((buffer-name
|
|
|
|
(format "*doom:vterm-popup:%s*"
|
|
|
|
(if (bound-and-true-p persp-mode)
|
|
|
|
(safe-persp-name (get-current-persp))
|
|
|
|
"main")))
|
2019-06-11 07:51:16 +02:00
|
|
|
confirm-kill-processes
|
|
|
|
current-prefix-arg)
|
|
|
|
(when arg
|
|
|
|
(let ((buffer (get-buffer buffer-name))
|
|
|
|
(window (get-buffer-window buffer-name)))
|
|
|
|
(when (buffer-live-p buffer)
|
|
|
|
(kill-buffer buffer))
|
|
|
|
(when (window-live-p window)
|
|
|
|
(delete-window window))))
|
|
|
|
(if-let (win (get-buffer-window buffer-name))
|
|
|
|
(if (eq (selected-window) win)
|
|
|
|
(delete-window win)
|
2019-06-12 17:10:10 +02:00
|
|
|
(select-window win)
|
|
|
|
(when (bound-and-true-p evil-local-mode)
|
|
|
|
(evil-change-to-initial-state))
|
|
|
|
(goto-char (point-max)))
|
2019-06-17 19:18:51 +02:00
|
|
|
(setenv "PROOT" (or (doom-project-root) default-directory))
|
2020-03-03 15:40:50 -05:00
|
|
|
(vterm-other-window buffer-name))))
|
2019-01-27 03:45:29 +08:00
|
|
|
|
|
|
|
;;;###autoload
|
2019-06-11 07:51:16 +02:00
|
|
|
(defun +vterm/here (arg)
|
|
|
|
"Open a terminal buffer in the current window at project root.
|
|
|
|
|
|
|
|
If prefix ARG is non-nil, cd into `default-directory' instead of project root."
|
2019-01-27 03:45:29 +08:00
|
|
|
(interactive "P")
|
2019-03-13 20:20:19 -04:00
|
|
|
(unless (fboundp 'module-load)
|
|
|
|
(user-error "Your build of Emacs lacks dynamic modules support and cannot load vterm"))
|
2019-06-12 17:10:10 +02:00
|
|
|
(require 'vterm)
|
2019-06-11 07:51:16 +02:00
|
|
|
;; This hack forces vterm to redraw, fixing strange artefacting in the tty.
|
|
|
|
(save-window-excursion
|
|
|
|
(pop-to-buffer "*scratch*"))
|
2019-01-27 03:45:29 +08:00
|
|
|
(let ((default-directory
|
|
|
|
(if arg
|
2019-06-11 07:51:16 +02:00
|
|
|
default-directory
|
2020-03-03 15:40:50 -05:00
|
|
|
(or (doom-project-root) default-directory)))
|
|
|
|
display-buffer-alist)
|
2019-06-11 07:51:16 +02:00
|
|
|
(vterm)))
|
2020-02-22 18:46:08 -05:00
|
|
|
|
2020-02-22 21:42:04 -05:00
|
|
|
|
|
|
|
(defvar +vterm--insert-point nil)
|
|
|
|
|
2020-02-22 18:46:08 -05:00
|
|
|
;;;###autoload
|
|
|
|
(defun +vterm-remember-insert-point-h ()
|
|
|
|
"Remember point when leaving insert mode."
|
2020-02-22 21:42:04 -05:00
|
|
|
(setq-local +vterm--insert-point (point)))
|
2020-02-22 18:46:08 -05:00
|
|
|
|
|
|
|
;;;###autoload
|
|
|
|
(defun +vterm-goto-insert-point-h ()
|
|
|
|
"Go to the point we were at when we left insert mode."
|
2020-02-22 21:42:04 -05:00
|
|
|
(when +vterm--insert-point
|
|
|
|
(goto-char +vterm--insert-point)
|
|
|
|
(setq-local +vterm--insert-point nil)))
|