[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/eglot b69302c 060/139: Make M-x eglot's interactive spe
From: |
João Távora |
Subject: |
[elpa] externals/eglot b69302c 060/139: Make M-x eglot's interactive spec a separate function |
Date: |
Mon, 14 May 2018 09:54:54 -0400 (EDT) |
branch: externals/eglot
commit b69302c4795be8d783f853488824626a08241778
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>
Make M-x eglot's interactive spec a separate function
* eglot.el (eglot--interactive): New function.
(eglot): Rework a little.
---
eglot.el | 104 ++++++++++++++++++++++++++++++++-------------------------------
1 file changed, 53 insertions(+), 51 deletions(-)
diff --git a/eglot.el b/eglot.el
index 3d0c044..ec7f3e6 100644
--- a/eglot.el
+++ b/eglot.el
@@ -234,6 +234,39 @@ SUCCESS-FN with no args if all goes well."
(defvar eglot--command-history nil
"History of COMMAND arguments to `eglot'.")
+(defun eglot--interactive ()
+ "Helper for `eglot'."
+ (let* ((managed-major-mode
+ (cond
+ ((or current-prefix-arg
+ (not buffer-file-name))
+ (intern
+ (completing-read
+ "[eglot] Start a server to manage buffers of what major mode? "
+ (mapcar #'symbol-name
+ (eglot--all-major-modes)) nil t
+ (symbol-name major-mode) nil
+ (symbol-name major-mode) nil)))
+ (t major-mode)))
+ (guessed-command
+ (cdr (assoc managed-major-mode eglot-executables))))
+ (list
+ managed-major-mode
+ (let ((prompt
+ (cond (current-prefix-arg
+ "[eglot] Execute program (or connect to <host>:<port>) ")
+ ((null guessed-command)
+ (format "[eglot] Sorry, couldn't guess for `%s'!\n\
+Execute program (or connect to <host>:<port>) "
+ managed-major-mode)))))
+ (if prompt
+ (split-string-and-unquote
+ (read-shell-command prompt
+ (combine-and-quote-strings guessed-command)
+ 'eglot-command-history))
+ guessed-command))
+ t)))
+
(defun eglot (managed-major-mode command &optional interactive)
"Start a Language Server Protocol server.
Server is started with COMMAND and manages buffers of
@@ -251,64 +284,33 @@ With a prefix arg, prompt for MANAGED-MAJOR-MODE and
COMMAND,
else guess them from current context and `eglot-executables'.
INTERACTIVE is t if called interactively."
- (interactive
- (let* ((managed-major-mode
- (cond
- ((or current-prefix-arg
- (not buffer-file-name))
- (intern
- (completing-read
- "[eglot] Start a server to manage buffers of what major mode? "
- (mapcar #'symbol-name
- (eglot--all-major-modes)) nil t
- (symbol-name major-mode) nil
- (symbol-name major-mode) nil)))
- (t major-mode)))
- (guessed-command
- (cdr (assoc managed-major-mode eglot-executables))))
- (list
- managed-major-mode
- (let ((prompt
- (cond (current-prefix-arg
- "[eglot] Execute program (or connect to <host>:<port>) ")
- ((null guessed-command)
- (format "[eglot] Sorry, couldn't guess for `%s'!\n\
-Execute program (or connect to <host>:<port>) "
- managed-major-mode)))))
- (if prompt
- (split-string-and-unquote
- (read-shell-command prompt
- (combine-and-quote-strings guessed-command)
- 'eglot-command-history))
- guessed-command))
- t)))
+ (interactive (eglot--interactive))
(let* ((project (project-current))
(short-name (eglot--project-short-name project)))
(unless project (eglot--error "Cannot work without a current project!"))
(unless command (eglot--error "Don't know how to start EGLOT for %s
buffers"
major-mode))
(let ((current-process (eglot--current-process)))
- (cond ((and (process-live-p current-process)
- interactive
- (y-or-n-p "[eglot] Live process found, reconnect instead? "))
- (eglot-reconnect current-process interactive))
- (t
- (when (process-live-p current-process)
- (eglot-shutdown current-process 'sync))
- (eglot--connect
- project
- managed-major-mode
- short-name
- command
- (lambda (proc)
- (eglot--message "Connected! Process `%s' now managing `%s' \
+ (if (and (process-live-p current-process)
+ interactive
+ (y-or-n-p "[eglot] Live process found, reconnect instead? "))
+ (eglot-reconnect current-process interactive)
+ (when (process-live-p current-process)
+ (eglot-shutdown current-process 'sync))
+ (eglot--connect
+ project
+ managed-major-mode
+ short-name
+ command
+ (lambda (proc)
+ (eglot--message "Connected! Process `%s' now managing `%s' \
buffers in project %s."
- proc
- managed-major-mode
- short-name)
- (dolist (buffer (buffer-list))
- (with-current-buffer buffer
- (eglot--maybe-activate-editing-mode proc))))))))))
+ proc
+ managed-major-mode
+ short-name)
+ (dolist (buffer (buffer-list))
+ (with-current-buffer buffer
+ (eglot--maybe-activate-editing-mode proc)))))))))
(defun eglot-reconnect (process &optional interactive)
"Reconnect to PROCESS.
- [elpa] externals/eglot a3545fb 050/139: Rename RPC methods for clarity, (continued)
- [elpa] externals/eglot a3545fb 050/139: Rename RPC methods for clarity, João Távora, 2018/05/14
- [elpa] externals/eglot 9665a3e 051/139: Fix textDocument/didChange, João Távora, 2018/05/14
- [elpa] externals/eglot eebd32b 059/139: When user declines to reconnect, first quit existing server, João Távora, 2018/05/14
- [elpa] externals/eglot 17e0ca4 047/139: Fix Flymake diagnostic positions, João Távora, 2018/05/14
- [elpa] externals/eglot 9d404c9 054/139: Update README.md, João Távora, 2018/05/14
- [elpa] externals/eglot 29d4103 056/139: Fix mode-line mouse-clicks from outside selected window, João Távora, 2018/05/14
- [elpa] externals/eglot b1554fc 055/139: * eglot.el (eglot--process-receive): Skip null method notifs., João Távora, 2018/05/14
- [elpa] externals/eglot 51ff863 046/139: Must re-announce didOpen after reconnect, João Távora, 2018/05/14
- [elpa] externals/eglot c95a0a4 041/139: Multiple servers per project are possible, João Távora, 2018/05/14
- [elpa] externals/eglot f8bfb7e 064/139: Handle requests from server correctly, João Távora, 2018/05/14
- [elpa] externals/eglot b69302c 060/139: Make M-x eglot's interactive spec a separate function,
João Távora <=
- [elpa] externals/eglot b657b32 068/139: Use rootUri instead of rootPath, João Távora, 2018/05/14
- [elpa] externals/eglot 7d0bf64 062/139: Workaround RLS's regusal to treat nil as empty json object, João Távora, 2018/05/14
- [elpa] externals/eglot 75495dc 033/139: Slightly more user friendly start, João Távora, 2018/05/14
- [elpa] externals/eglot fdb4de1 039/139: Simplify flymake integration, João Távora, 2018/05/14
- [elpa] externals/eglot cc183a6 043/139: Fix assorted bugs, João Távora, 2018/05/14
- [elpa] externals/eglot df5d76d 065/139: Reply to client/registerCapability (don't handle it yet), João Távora, 2018/05/14
- [elpa] externals/eglot c2862f4 063/139: Don't auto-reconnect if last attempt lasted less than 3 seconds, João Távora, 2018/05/14
- [elpa] externals/eglot f1b6485 053/139: Trim some edges and add a bunch of boring RPC methods, João Távora, 2018/05/14
- [elpa] externals/eglot 0e95167 042/139: Watch for files opened under umbrella of existing process, João Távora, 2018/05/14
- [elpa] externals/eglot 4d4b85d 061/139: eglot-editing-mode becomes eglot--managed-mode, João Távora, 2018/05/14