diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index 85f8b22fc..78cd2f82e 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -55,3 +55,15 @@ If prefix ARG is non-nil, cd into `default-directory' instead of project root." default-directory (or (doom-project-root) default-directory)))) (vterm))) + +;;;###autoload +(defun +vterm-remember-insert-point-h () + "Remember point when leaving insert mode." + (setq-local +vterm-insert-point (point))) + +;;;###autoload +(defun +vterm-goto-insert-point-h () + "Go to the point we were at when we left insert mode." + (when +vterm-insert-point + (goto-char +vterm-insert-point) + (setq-local +vterm-insert-point nil))) diff --git a/modules/term/vterm/config.el b/modules/term/vterm/config.el index 097e9d597..2ec2ef996 100644 --- a/modules/term/vterm/config.el +++ b/modules/term/vterm/config.el @@ -15,6 +15,13 @@ (setq vterm-kill-buffer-on-exit t) + (when (featurep! :editor evil) + (defvar +vterm-insert-point nil) + (add-hook 'vterm-mode-hook + (lambda () + (add-hook 'evil-insert-state-exit-hook '+vterm-remember-insert-point-h nil t) + (add-hook 'evil-insert-state-entry-hook '+vterm-goto-insert-point-h nil t)))) + (add-hook 'vterm-mode-hook #'doom-mark-buffer-as-real-h) ;; Modeline serves no purpose in vterm (add-hook 'vterm-mode-hook #'hide-mode-line-mode))