]> git.eshelyaron.com Git - emacs.git/commitdiff
Change the default of eglot-move-to-column-function
authorFelicián Németh <felician.nemeth@gmail.com>
Tue, 10 Sep 2019 13:31:16 +0000 (15:31 +0200)
committerFelician Nemeth <Felicián Németh>
Tue, 10 Sep 2019 13:47:00 +0000 (15:47 +0200)
Previous default (move-to-column) works on visual columns, the LSP
specification and the new default (eglot-move-to-column) use "real"
columns.  Fixes https://github.com/joaotavora/eglot/issues/293 and https://github.com/joaotavora/eglot/issues/297.

* eglot.el (eglot-move-to-column): New function.
(eglot-move-to-column-function): Use it as default.

lisp/progmodes/eglot.el

index 23d53edc2b2b07e8d60a142c87ff6af54c293cf1..b87d5bb7c39f991607a2ba5bcc50b8815b871499 100644 (file)
@@ -988,7 +988,7 @@ for all others.")
          :character (progn (when pos (goto-char pos))
                            (funcall eglot-current-column-function)))))
 
-(defvar eglot-move-to-column-function #'move-to-column
+(defvar eglot-move-to-column-function #'eglot-move-to-column
   "Function to move to a column reported by the LSP server.
 
 According to the standard, LSP column/character offsets are based
@@ -999,7 +999,16 @@ where X is a multi-byte character, it actually means `b', not
 
 For buffers managed by fully LSP-compliant servers, this should
 be set to `eglot-move-to-lsp-abiding-column', and
-`move-to-column' (the default) for all others.")
+`eglot-move-to-column' (the default) for all others.")
+
+(defun eglot-move-to-column (column)
+  "Move to COLUMN without closely following the LSP spec."
+  ;; We cannot use `move-to-column' here, because it moves to *visual*
+  ;; columns, which can be different from LSP columns in case of
+  ;; `whitespace-mode', `prettify-symbols-mode', etc.  (github#296,
+  ;; github#297)
+  (goto-char (min (+ (line-beginning-position) column)
+                  (line-end-position))))
 
 (defun eglot-move-to-lsp-abiding-column (column)
   "Move to COLUMN abiding by the LSP spec."