From 50bf06a57ae3b89a42b2e86a0a80fcdf827a511d Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Sat, 9 May 2020 00:23:56 -0500 Subject: [PATCH 1/3] Allow +vterm/toggle to open remotely When `default-directory` is remote, prepare the toggled vterm at remote location. --- modules/term/vterm/autoload.el | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index 92666272c..4e4d66609 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -33,7 +33,20 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root." (let ((buffer (get-buffer-create buffer-name))) (with-current-buffer buffer (unless (eq major-mode 'vterm-mode) - (vterm-mode))) + (vterm-mode)) + (when (and (featurep 'tramp) + (tramp-tramp-file-p default-directory)) + (message "default-directory is %s" default-directory) + (with-parsed-tramp-file-name default-directory path + (let ((method (cadr (assoc `tramp-login-program + (assoc path-method tramp-methods))))) + (vterm-send-string + (concat method " " + (when path-user (concat path-user "@")) path-host)) + (vterm-send-return) + (vterm-send-string + (concat "cd " path-localname)) + (vterm-send-return))))) (pop-to-buffer buffer))))) ;;;###autoload From 39ce0c844b77910483680eec6a618a592d73d9f0 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Sat, 9 May 2020 00:53:10 -0500 Subject: [PATCH 2/3] Extract implementation to a separate function --- modules/term/vterm/autoload.el | 17 +++-------------- modules/term/vterm/config.el | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index 4e4d66609..d059ae8d3 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -34,19 +34,7 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root." (with-current-buffer buffer (unless (eq major-mode 'vterm-mode) (vterm-mode)) - (when (and (featurep 'tramp) - (tramp-tramp-file-p default-directory)) - (message "default-directory is %s" default-directory) - (with-parsed-tramp-file-name default-directory path - (let ((method (cadr (assoc `tramp-login-program - (assoc path-method tramp-methods))))) - (vterm-send-string - (concat method " " - (when path-user (concat path-user "@")) path-host)) - (vterm-send-return) - (vterm-send-string - (concat "cd " path-localname)) - (vterm-send-return))))) + (+vterm-open-remote-maybe)) (pop-to-buffer buffer))))) ;;;###autoload @@ -68,7 +56,8 @@ If prefix ARG is non-nil, cd into `default-directory' instead of project root." project-root)) display-buffer-alist) (setenv "PROOT" project-root) - (vterm))) + (vterm) + (+vterm-open-remote-maybe))) (defvar +vterm--insert-point nil) diff --git a/modules/term/vterm/config.el b/modules/term/vterm/config.el index e21b7a60a..48c78d262 100644 --- a/modules/term/vterm/config.el +++ b/modules/term/vterm/config.el @@ -19,6 +19,23 @@ ;; Prevent premature horizontal scrolling hscroll-margin 0) + (defun +vterm-open-remote-maybe () + "When `default-directory` is remote, use the corresponding +method to prepare vterm at the corresponding remote directory." + (when (and (featurep 'tramp) + (tramp-tramp-file-p default-directory)) + (message "default-directory is %s" default-directory) + (with-parsed-tramp-file-name default-directory path + (let ((method (cadr (assoc `tramp-login-program + (assoc path-method tramp-methods))))) + (vterm-send-string + (concat method " " + (when path-user (concat path-user "@")) path-host)) + (vterm-send-return) + (vterm-send-string + (concat "cd " path-localname)) + (vterm-send-return))))) + ;; Restore the point's location when leaving and re-entering insert mode. (when (featurep! :editor evil) (add-hook! 'vterm-mode-hook From 6c4e2d08d4fee140c624b09baf8ec8c13a59a0f6 Mon Sep 17 00:00:00 2001 From: Sheng Yang Date: Sat, 9 May 2020 01:06:19 -0500 Subject: [PATCH 3/3] Move the function back and rename --- modules/term/vterm/autoload.el | 21 +++++++++++++++++++-- modules/term/vterm/config.el | 17 ----------------- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/modules/term/vterm/autoload.el b/modules/term/vterm/autoload.el index d059ae8d3..8932b8c68 100644 --- a/modules/term/vterm/autoload.el +++ b/modules/term/vterm/autoload.el @@ -34,7 +34,7 @@ If prefix ARG is non-nil, recreate vterm buffer in the current project's root." (with-current-buffer buffer (unless (eq major-mode 'vterm-mode) (vterm-mode)) - (+vterm-open-remote-maybe)) + (+vterm--change-directory-if-remote)) (pop-to-buffer buffer))))) ;;;###autoload @@ -57,7 +57,24 @@ If prefix ARG is non-nil, cd into `default-directory' instead of project root." display-buffer-alist) (setenv "PROOT" project-root) (vterm) - (+vterm-open-remote-maybe))) + (+vterm--change-directory-if-remote))) + +(defun +vterm--change-directory-if-remote () + "When `default-directory` is remote, use the corresponding +method to prepare vterm at the corresponding remote directory." + (when (and (featurep 'tramp) + (tramp-tramp-file-p default-directory)) + (message "default-directory is %s" default-directory) + (with-parsed-tramp-file-name default-directory path + (let ((method (cadr (assoc `tramp-login-program + (assoc path-method tramp-methods))))) + (vterm-send-string + (concat method " " + (when path-user (concat path-user "@")) path-host)) + (vterm-send-return) + (vterm-send-string + (concat "cd " path-localname)) + (vterm-send-return))))) (defvar +vterm--insert-point nil) diff --git a/modules/term/vterm/config.el b/modules/term/vterm/config.el index 48c78d262..e21b7a60a 100644 --- a/modules/term/vterm/config.el +++ b/modules/term/vterm/config.el @@ -19,23 +19,6 @@ ;; Prevent premature horizontal scrolling hscroll-margin 0) - (defun +vterm-open-remote-maybe () - "When `default-directory` is remote, use the corresponding -method to prepare vterm at the corresponding remote directory." - (when (and (featurep 'tramp) - (tramp-tramp-file-p default-directory)) - (message "default-directory is %s" default-directory) - (with-parsed-tramp-file-name default-directory path - (let ((method (cadr (assoc `tramp-login-program - (assoc path-method tramp-methods))))) - (vterm-send-string - (concat method " " - (when path-user (concat path-user "@")) path-host)) - (vterm-send-return) - (vterm-send-string - (concat "cd " path-localname)) - (vterm-send-return))))) - ;; Restore the point's location when leaving and re-entering insert mode. (when (featurep! :editor evil) (add-hook! 'vterm-mode-hook