From fe81bd7c0021929fb8f2fbcfa5078179632a08b1 Mon Sep 17 00:00:00 2001 From: Aaron Iba Date: Fri, 2 Nov 2018 09:29:05 -0400 Subject: [PATCH] add defcustom cider-infer-remote-nrepl-ports to address #1544 --- CHANGELOG.md | 1 + cider.el | 23 +++++++++++++++-------- doc/up_and_running.md | 19 +++++++++++++++++++ 3 files changed, 35 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18fe99897..9ebfddf4c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ ### Changes * [#2484](https://github.com/clojure-emacs/cider/pull/2484): REPL types are now symbols instead of strings. +* [#1544](https://github.com/clojure-emacs/cider/issues/1544): Add a new defcustom `cider-infer-remote-nrepl-ports` to control whether we use tramp/ssh to infer remote ports. Now defaulting to `nil` (previously it always tried to infer). ## 0.18.0 (2018-09-02) diff --git a/cider.el b/cider.el index 17e5f2d77..59bb7a0bc 100644 --- a/cider.el +++ b/cider.el @@ -1327,6 +1327,12 @@ Tramp version starting 26.1 is using a `cl-defstruct' rather than vanilla VEC." (make-tramp-file-name :method (elt vec 0) :host (elt vec 2))))) +(defcustom cider-infer-remote-nrepl-ports nil + "When true, cider will use ssh to try to infer nREPL ports on remote hosts." + :type 'boolean + :safe #'booleanp + :package-version '(cider . "0.19.0")) + (defun cider--infer-ports (host ssh-hosts) "Infer nREPL ports on HOST. Return a list of elements of the form (directory port). SSH-HOSTS is a list @@ -1338,14 +1344,15 @@ of remote SSH hosts." (let* ((change-dir-p (file-remote-p default-directory)) (default-directory (if change-dir-p "~/" default-directory))) (cider-locate-running-nrepl-ports (unless change-dir-p default-directory))) - (let ((vec (vector "sshx" nil host "" nil)) - ;; change dir: user might want to connect to a different remote - (dir (when (file-remote-p default-directory) - (with-parsed-tramp-file-name default-directory cur - (when (string= cur-host host) default-directory))))) - (tramp-maybe-open-connection (cider--tramp-file-name vec)) - (with-current-buffer (tramp-get-connection-buffer (cider--tramp-file-name vec)) - (cider-locate-running-nrepl-ports dir)))))) + (when cider-infer-remote-nrepl-ports + (let ((vec (vector "sshx" nil host "" nil)) + ;; change dir: user might want to connect to a different remote + (dir (when (file-remote-p default-directory) + (with-parsed-tramp-file-name default-directory cur + (when (string= cur-host host) default-directory))))) + (tramp-maybe-open-connection (cider--tramp-file-name vec)) + (with-current-buffer (tramp-get-connection-buffer (cider--tramp-file-name vec)) + (cider-locate-running-nrepl-ports dir))))))) (defun cider--completing-read-port (host ports) "Interactively select port for HOST from PORTS." diff --git a/doc/up_and_running.md b/doc/up_and_running.md index 07f6319ef..178fa7b15 100644 --- a/doc/up_and_running.md +++ b/doc/up_and_running.md @@ -111,3 +111,22 @@ helpful for identifying each host. '(("host-a" "10.10.10.1" "7888") ("host-b" "7888"))) ``` + +## SSH + +In some circumstances, cider can try to use SSH to either: + +* Tunnel a connection over SSH. +* Infer the remote nREPL port for a direct connection. + +This behavior is controlled by two options (both default `nil`): + +* `nrepl-use-ssh-fallback-for-remote-hosts`: When true, attempt to connect via ssh + to remote hosts when unable to connect directly. +* `cider-infer-remote-nrepl-ports`: When true, cider will use ssh to try to infer + nREPL ports on remote hosts (for a direct connection). + +Note that enabling either of these causes cider to use +[tramp](https://www.gnu.org/software/tramp/) for some SSH operations, which parses +config files such as `~/.ssh/config` and `~/.ssh/known_hosts`. This is known to +cause problems with complex or nonstandard ssh configs.