Fix tramp eglot stuff

This commit is contained in:
Alexander Rosenberg 2025-02-22 00:41:04 -08:00
parent 89e010474f
commit b374fc57e2
Signed by: Zander671
GPG Key ID: 5FD0394ADBD72730

49
init.el
View File

@ -268,6 +268,12 @@ Interactively, force the recompile if called with a prefix."
(connection-local-set-profile-variables (connection-local-set-profile-variables
'error-only 'error-only
'((tramp-verbose . 1))) '((tramp-verbose . 1)))
(connection-local-set-profile-variables
'enable-dir-locals
'((enable-remote-dir-locals . t)))
(connection-local-set-profile-variables
'apheleia-remote-local
'((apheleia-remote-algorithm . local)))
(dolist (method '("podman" "docker" "ssh" "sshx" "sudo" "su" "doas" (dolist (method '("podman" "docker" "ssh" "sshx" "sudo" "su" "doas"
"sudoedit" "run0" "kubernetes" "dockercp" "podmancp" "sudoedit" "run0" "kubernetes" "dockercp" "podmancp"
"distrobox" "toolbox" "flatpak" "apptainer" "nspawn")) "distrobox" "toolbox" "flatpak" "apptainer" "nspawn"))
@ -276,7 +282,8 @@ Interactively, force the recompile if called with a prefix."
(tramp-enable-method (intern method))) (tramp-enable-method (intern method)))
(connection-local-set-profiles (connection-local-set-profiles
`(:method ,method) `(:method ,method)
'error-only 'direct-async))) 'error-only 'direct-async 'enable-dir-locals
'apheleia-remote-local)))
(use-package midnight (use-package midnight
:ensure nil :ensure nil
@ -727,8 +734,7 @@ With NO-EWW, don't update eww's state."
'evil-cp-insert-at-end-of-form) 'evil-cp-insert-at-end-of-form)
(keymap-unset evil-cleverparens-mode-map "<normal-state> M-o" t) (keymap-unset evil-cleverparens-mode-map "<normal-state> M-o" t)
(defun my/-enable-evil-cleverparens () (defun my/-enable-evil-cleverparens ()
(if (member major-mode '(lisp-mode emacs-lisp-mode (if (derived-mode-p 'lisp-data-mode)
lisp-interaction-mode))
(evil-cleverparens-mode 1) (evil-cleverparens-mode 1)
(electric-pair-local-mode 1))) (electric-pair-local-mode 1)))
(cl-defun my/range-inside-thing-p (thing beg end &optional no-edge) (cl-defun my/range-inside-thing-p (thing beg end &optional no-edge)
@ -781,7 +787,7 @@ With NO-EDGE, return nil if beg or end fall on the edge of the range."
;; better lisp editing ;; better lisp editing
(use-package adjust-parens (use-package adjust-parens
:hook (prog-mode . adjust-parens-mode) :hook (lisp-data-mode . adjust-parens-mode)
:config :config
(defun my/lisp-indent-adjust-parens () (defun my/lisp-indent-adjust-parens ()
"Like `lisp-indent-adjust-parens', but got to first char on line first. "Like `lisp-indent-adjust-parens', but got to first char on line first.
@ -1428,6 +1434,20 @@ With PROJECT, give diagnostics for all buffers in the current project."
(setq eglot-autoshutdown t (setq eglot-autoshutdown t
eglot-ignored-server-capabilities '(:documentOnTypeFormattingProvider)) eglot-ignored-server-capabilities '(:documentOnTypeFormattingProvider))
:config :config
;; Fix directory local variables in remote buffers
(defun my/-eglot-fix-dir-locals-in-remote-dirs (oldfun server &optional path)
(if (not (file-remote-p (or path default-directory)))
(funcall oldfun server path)
(cl-letf (((default-value 'enable-remote-dir-locals)
(let ((default-directory (if path (if (file-directory-p path)
(file-name-as-directory path)
(file-name-directory path))
default-directory)))
(connection-local-value enable-remote-dir-locals))))
(funcall oldfun server path))))
(advice-add 'eglot--workspace-configuration-plist :around
#'my/-eglot-fix-dir-locals-in-remote-dirs)
(add-to-list 'eglot-server-programs (add-to-list 'eglot-server-programs
(cons '(c-mode c-ts-mode c++-mode c++-ts-mode objc-mode) (cons '(c-mode c-ts-mode c++-mode c++-ts-mode objc-mode)
'("clangd" "--all-scopes-completion" "--background-index" '("clangd" "--all-scopes-completion" "--background-index"
@ -1449,6 +1469,8 @@ With PROJECT, give diagnostics for all buffers in the current project."
(use-package apheleia (use-package apheleia
:defer nil :defer nil
:bind ("C-c o" . apheleia-format-buffer) :bind ("C-c o" . apheleia-format-buffer)
:custom
(apheleia-formatters-respect-fill-column t)
:init :init
(add-to-list 'auto-mode-alist `(,(rx "/.clang-format" eos) . yaml-ts-mode)) (add-to-list 'auto-mode-alist `(,(rx "/.clang-format" eos) . yaml-ts-mode))
(defun my/apheleia-disable-in-current-buffer () (defun my/apheleia-disable-in-current-buffer ()
@ -1825,9 +1847,13 @@ otherwise, call `bibtex-find-text'."
:after eglot) :after eglot)
;; python-ts-mode ;; python-ts-mode
(use-package python-ts-mode (use-package python
:ensure nil :ensure nil
:hook (python-ts-mode . my/eglot-if-trusted)) :hook ((python-ts-mode . my/eglot-if-trusted)
(python-ts-mode . my/-setup-python-ts-mode))
:config
(defun my/-setup-python-ts-mode ()
(setq-local fill-column 79)))
;; python virtual environments ;; python virtual environments
(use-package pyvenv) (use-package pyvenv)
(use-package pyenv-mode) (use-package pyenv-mode)
@ -1965,6 +1991,7 @@ otherwise, call `bibtex-find-text'."
(require 'cmake-mode) (require 'cmake-mode)
(require 'cmake-ts-mode) (require 'cmake-ts-mode)
(with-eval-after-load 'cmake-mode (with-eval-after-load 'cmake-mode
(add-hook 'cmake-ts-mode-hook #'my/eglot-if-trusted)
(setq cmake-ts-mode-indent-offset tab-width)) (setq cmake-ts-mode-indent-offset tab-width))
;; kdl ;; kdl
@ -2498,12 +2525,20 @@ Actually, return the method name."
("M-o" . ace-window) ("M-o" . ace-window)
:map eat-eshell-semi-char-mode-map :map eat-eshell-semi-char-mode-map
("M-o" . ace-window)) ("M-o" . ace-window))
:hook
(eat-mode . my/-setup-eat-mode)
:init :init
(evil-define-key 'insert eat-semi-char-mode-map (evil-define-key 'insert eat-semi-char-mode-map
(kbd "<escape>") #'eat-self-input (kbd "<escape>") #'eat-self-input
(kbd "C-S-n") #'evil-normal-state (kbd "C-S-n") #'evil-normal-state
(kbd "C-y") #'eat-yank) (kbd "C-y") #'eat-yank
(kbd "C-u") #'universal-argument
(kbd "C-w") evil-window-map)
:config :config
(defun my/-setup-eat-mode ()
(visual-wrap-prefix-mode -1)
(visual-line-mode -1))
;; The below makes sure that the first time the ESC key is pressed, it does ;; The below makes sure that the first time the ESC key is pressed, it does
;; what it is supposed to ;; what it is supposed to
(add-hook 'eat--semi-char-mode-hook #'evil-normalize-keymaps) (add-hook 'eat--semi-char-mode-hook #'evil-normalize-keymaps)