From 1acbbc188a7c43063f9d6a4d25e3d854052cc956 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felici=C3=A1n=20N=C3=A9meth?= Date: Fri, 12 May 2023 01:50:05 +0100 Subject: [PATCH] Eglot: support window/showRequest (bug#62116) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: João Távora * lisp/progmodes/eglot.el (eglot-client-capabilities): Advertise window/showDocument. (eglot-handle-request window/showDocument): New handler. --- lisp/progmodes/eglot.el | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/lisp/progmodes/eglot.el b/lisp/progmodes/eglot.el index 66d893a14b5..291ae9b83d9 100644 --- a/lisp/progmodes/eglot.el +++ b/lisp/progmodes/eglot.el @@ -845,7 +845,8 @@ eglot-client-capabilities `(:valueSet [,@(mapcar #'car eglot--tag-faces)]))) - :window `(:workDoneProgress t) + :window `(:showDocument (:support t) + :workDoneProgress t) :general (list :positionEncodings ["utf-32" "utf-8" "utf-16"]) :experimental eglot--{}))) @@ -2366,6 +2367,27 @@ eglot-handle-request "Handle server request workspace/workspaceFolders." (eglot-workspace-folders server)) +(cl-defmethod eglot-handle-request + (_server (_method (eql window/showDocument)) &key + uri external takeFocus selection) + "Handle request window/showDocument." + (if (eq external t) (browse-url uri) + (let* (;; requests run with a let-bound `eglot--cached-server', + ;; but when finding files from handlers, this fools + ;; `eglot--maybe-activate-editing-mode'. + (eglot--cached-server nil)) + (with-current-buffer (find-file-noselect (eglot--uri-to-path uri)) + (cond (takeFocus + (pop-to-buffer (current-buffer)) + (select-frame-set-input-focus (selected-frame))) + ((display-buffer (current-buffer)))) + (when selection + (eglot--widening + (pcase-let ((`(,beg . ,end) (eglot--range-region selection))) + (goto-char beg) + (pulse-momentary-highlight-region beg end 'highlight))))))) + '(:success t)) + (defun eglot--TextDocumentIdentifier () "Compute TextDocumentIdentifier object for current buffer." `(:uri ,(eglot--path-to-uri (or buffer-file-name -- 2.39.2