Lot of optimisation, replace eglot with lsp-mode
This commit is contained in:
1
.lsp-session-v1
Normal file
1
.lsp-session-v1
Normal file
@@ -0,0 +1 @@
|
||||
#s(lsp-session ("/Users/zelongk/.emacs.d" "/Users/zelongk/programming/ocaml" "/Users/zelongk/uni/undergrad/26s1") nil #s(hash-table test equal) #s(hash-table test equal) #s(hash-table test equal))
|
||||
@@ -1,13 +1,12 @@
|
||||
;; -*- lexical-binding: t -*-
|
||||
|
||||
(setq gc-cons-threshold most-positive-fixnum
|
||||
gc-cons-percentage 0.6)
|
||||
(if noninteractive ; in CLI sessions
|
||||
(setq gc-cons-threshold #x8000000 ; 128MB
|
||||
;; Backport from 29 (see emacs-mirror/emacs@73a384a98698)
|
||||
gc-cons-percentage 1.0)
|
||||
(setq gc-cons-threshold most-positive-fixnum))
|
||||
|
||||
;; After init, use gcmh
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(setq gc-cons-threshold #x6400000
|
||||
gc-cons-percentage 0.1)))
|
||||
(setq read-process-output-max (* 1024 1024))
|
||||
|
||||
(setq package-enable-at-startup nil)
|
||||
|
||||
@@ -18,23 +17,23 @@
|
||||
(setq use-package-enable-imenu-support t)
|
||||
(setq load-prefer-newer noninteractive)
|
||||
|
||||
(setenv "LSP_USE_PLISTS" "true")
|
||||
|
||||
;; PERF: Many elisp file API calls consult `file-name-handler-alist'.
|
||||
;; Setting it to nil speeds up startup significantly.
|
||||
;; We restore it in init.el after startup.
|
||||
(setq file-name-handler-alist nil)
|
||||
|
||||
;; PERF: Reduce file-name operations on `load-path'.
|
||||
;; No dynamic modules are loaded this early, so we skip .so/.dll search.
|
||||
;; Also skip .gz to avoid decompression checks.
|
||||
(setq load-suffixes '(".elc" ".el")
|
||||
load-file-rep-suffixes '(""))
|
||||
|
||||
(prefer-coding-system 'utf-8)
|
||||
;; Inhibit resizing frame
|
||||
(setq frame-inhibit-implied-resize t)
|
||||
|
||||
;; Optimize `auto-mode-alist`
|
||||
(setq auto-mode-case-fold nil)
|
||||
(unless (or (daemonp) noninteractive init-file-debug)
|
||||
;; Temporarily suppress file-handler processing to speed up startup
|
||||
(let ((default-handlers file-name-handler-alist))
|
||||
(setq file-name-handler-alist nil)
|
||||
;; Recover handlers after startup
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(setq file-name-handler-alist
|
||||
(delete-dups (append file-name-handler-alist default-handlers))))
|
||||
101)))
|
||||
|
||||
;; Faster to disable these here (before they've been initialized)
|
||||
(push '(menu-bar-lines . 0) default-frame-alist)
|
||||
(push '(tool-bar-lines . 0) default-frame-alist)
|
||||
|
||||
50
init.el
50
init.el
@@ -2,39 +2,53 @@
|
||||
;;; Commentary:
|
||||
;;; blablabla
|
||||
|
||||
;; Optimize `auto-mode-alist`
|
||||
(setq auto-mode-case-fold nil)
|
||||
|
||||
;; Restore file-name-handler-alist after startup.
|
||||
(unless (or (daemonp) noninteractive init-file-debug)
|
||||
;; Temporarily suppress file-handler processing to speed up startup
|
||||
(let ((default-handlers file-name-handler-alist))
|
||||
(setq file-name-handler-alist nil)
|
||||
;; Recover handlers after startup
|
||||
(add-hook 'emacs-startup-hook
|
||||
(lambda ()
|
||||
(setq file-name-handler-alist
|
||||
(delete-dups (append file-name-handler-alist default-handlers))))
|
||||
101)))
|
||||
|
||||
;; (require 'init-elpaca)
|
||||
(require 'init-straight)
|
||||
(require 'init-gc)
|
||||
(require 'init-better-default)
|
||||
(require 'init-hydra)
|
||||
|
||||
(require 'init-ui)
|
||||
(require 'init-edit)
|
||||
(require 'init-completion)
|
||||
(require 'init-snippet)
|
||||
|
||||
(require 'init-bindings)
|
||||
(require 'init-dired)
|
||||
;; (require 'init-dashboard) ;; not working
|
||||
(require 'init-window)
|
||||
(require 'init-shell)
|
||||
;; (require 'init-treemacs) ;; not working
|
||||
(require 'init-workspace)
|
||||
|
||||
;; (require 'init-god)
|
||||
;; (require 'init-meow)
|
||||
|
||||
(require 'init-hydra)
|
||||
|
||||
(require 'init-utils)
|
||||
(require 'init-completion)
|
||||
(require 'init-input)
|
||||
(require 'init-edit)
|
||||
(require 'init-window)
|
||||
(require 'init-utils)
|
||||
|
||||
(require 'init-bindings)
|
||||
|
||||
(require 'init-dired)
|
||||
|
||||
(require 'init-llm)
|
||||
|
||||
(require 'init-snippet)
|
||||
(require 'init-coding)
|
||||
(require 'init-vcs)
|
||||
(require 'init-shell)
|
||||
(require 'init-llm)
|
||||
(require 'init-check)
|
||||
;; (require 'init-treemacs) ;; not working
|
||||
|
||||
(require 'init-eglot)
|
||||
;; (require 'init-lsp) ;; not working
|
||||
;; (require 'init-eglot)
|
||||
(require 'init-lsp)
|
||||
|
||||
(require 'init-org)
|
||||
(require 'init-tex)
|
||||
@@ -46,8 +60,6 @@
|
||||
(require 'init-rust)
|
||||
(require 'init-ocaml)
|
||||
|
||||
(require 'init-workspace)
|
||||
|
||||
(provide 'init)
|
||||
;;; Code:
|
||||
;;; alskdjasd
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
;; -*- lexical-binding: t -*-
|
||||
|
||||
(use-package benchmark-init
|
||||
:demand t
|
||||
:config
|
||||
;; To disable collection of benchmark data after init is done.
|
||||
;; (add-hook 'emacs-startup-hook 'benchmark-init/deactivate)
|
||||
)
|
||||
|
||||
;; Load some component of large package (org, magit etc.) before complete mount
|
||||
(defvar elemacs-incremental-packages '(t)
|
||||
"A list of packages to load incrementally after startup. Any large packages
|
||||
@@ -77,27 +84,28 @@ If this is a daemon session, load them all immediately instead."
|
||||
|
||||
(add-hook 'emacs-startup-hook #'elemacs-load-packages-incrementally-h)
|
||||
|
||||
|
||||
(use-package benchmark-init
|
||||
:demand t
|
||||
:config
|
||||
;; To disable collection of benchmark data after init is done.
|
||||
(add-hook 'after-init-hook 'benchmark-init/deactivate))
|
||||
|
||||
(when (memq window-system '(mac ns x))
|
||||
(use-package exec-path-from-shell
|
||||
:commands exec-path-from-shell-initialize
|
||||
:init
|
||||
(setq exec-path-from-shell-arguments '("-l"))
|
||||
(exec-path-from-shell-initialize)))
|
||||
|
||||
(setq custom-file (expand-file-name "~/.emacs.d/custom.el"))
|
||||
(add-hook 'after-init-hook (lambda () (load custom-file 'no-error 'no-message)))
|
||||
|
||||
;; Start server
|
||||
(use-package server
|
||||
:ensure nil
|
||||
:hook (after-init . server-mode))
|
||||
:hook (emacs-startup . (lambda ()
|
||||
(unless server-mode
|
||||
(server-mode 1)))))
|
||||
|
||||
;; Save place
|
||||
(use-package saveplace
|
||||
:hook (after-init . save-place-mode))
|
||||
|
||||
(use-package display-line-numbers
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (text-mode . display-line-numbers-mode)
|
||||
:hook (prog-mode . display-line-numbers-mode)
|
||||
:config
|
||||
@@ -111,42 +119,48 @@ If this is a daemon session, load them all immediately instead."
|
||||
(add-hook mode (lambda () (display-line-numbers-mode -1))))
|
||||
(setq display-line-numbers-type 'relative)
|
||||
)
|
||||
|
||||
(add-hook 'prog-mode #'delete-trailing-whitespace-mode)
|
||||
(add-hook 'text-mode #'delete-trailing-whitespace-mode)
|
||||
(use-package del-trailing-white
|
||||
:straight nil
|
||||
:hook ((prog-mode markdown-mode conf-mode) . enable-trailing-whitespace)
|
||||
:init
|
||||
(setq-default show-trailing-whitespace nil)
|
||||
(defun enable-trailing-whitespace ()
|
||||
"Show trailing spaces and delete on saving."
|
||||
(setq show-trailing-whitespace t)
|
||||
(add-hook 'before-save-hook #'delete-trailing-whitespace nil t))
|
||||
)
|
||||
|
||||
(use-package subword
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:diminish
|
||||
:hook (prog-mode minibuffer-setup))
|
||||
|
||||
(use-package paren
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (after-init . show-paren-mode))
|
||||
|
||||
;; Show trailing whitespace only in prog-mode and text-mode
|
||||
(add-hook 'prog-mode-hook (lambda () (setq show-trailing-whitespace t)))
|
||||
(add-hook 'text-mode-hook (lambda () (setq show-trailing-whitespace t)))
|
||||
;; ;; Show trailing whitespace only in prog-mode and text-mode
|
||||
;; (add-hook 'prog-mode-hook (lambda () (setq show-trailing-whitespace t)))
|
||||
;; (add-hook 'text-mode-hook (lambda () (setq show-trailing-whitespace t)))
|
||||
|
||||
(use-package recentf
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (after-init . recentf-mode)
|
||||
:custom
|
||||
(recentf-max-saved-items 500)
|
||||
(recentf-exclude
|
||||
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
|
||||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||||
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
|
||||
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/"
|
||||
(lambda (file) (file-in-directory-p file package-user-dir))))
|
||||
:init
|
||||
(setq recentf-max-saved-items 500
|
||||
recentf-exclude
|
||||
'("\\.?cache" ".cask" "url" "COMMIT_EDITMSG\\'" "bookmarks"
|
||||
"\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
|
||||
"\\.?ido\\.last$" "\\.revive$" "/G?TAGS$" "/.elfeed/"
|
||||
"^/tmp/" "^/var/folders/.+$" "^/ssh:" "/persp-confs/"
|
||||
(lambda (file) (file-in-directory-p file package-user-dir))))
|
||||
:config
|
||||
(elemacs-load-packages-incrementally '(easymenu tree-widget timer))
|
||||
(push (expand-file-name recentf-save-file) recentf-exclude)
|
||||
(add-to-list 'recentf-filename-handlers #'abbreviate-file-name)
|
||||
)
|
||||
|
||||
(use-package savehist
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (after-init . savehist-mode)
|
||||
:init (setq enable-recursive-minibuffers t ; Allow commands in minibuffers
|
||||
history-length 1000
|
||||
@@ -158,6 +172,7 @@ If this is a daemon session, load them all immediately instead."
|
||||
savehist-autosave-interval 300))
|
||||
|
||||
(setq-default cursor-type 'bar)
|
||||
(setq kill-whole-line t)
|
||||
(setq make-backup-files nil)
|
||||
(setq use-short-answers t)
|
||||
;; (setq frame-title-format "\n")
|
||||
@@ -239,6 +254,10 @@ If this is a daemon session, load them all immediately instead."
|
||||
(lambda (button)
|
||||
(helpful-variable (button-get button 'apropos-symbol))))))))
|
||||
|
||||
(setq delete-by-moving-to-trash t
|
||||
inhibit-compacting-font-caches t
|
||||
make-backup-files nil)
|
||||
|
||||
(setq-default auto-save-default nil)
|
||||
(setq create-lockfiles nil)
|
||||
;; (setq auto-save-file-name-transforms
|
||||
|
||||
@@ -15,4 +15,23 @@
|
||||
|
||||
(global-set-key (kbd "C-c C-c") #'compile)
|
||||
|
||||
(defun delete-this-file ()
|
||||
"Delete the current file, and kill the buffer."
|
||||
(interactive)
|
||||
(unless (buffer-file-name)
|
||||
(error "No file is currently being edited"))
|
||||
(when (yes-or-no-p (format "Really delete '%s'?"
|
||||
(file-name-nondirectory buffer-file-name)))
|
||||
(delete-file (buffer-file-name))
|
||||
(kill-this-buffer)))
|
||||
|
||||
(defun reload-init-file ()
|
||||
"Reload Emacs configurations."
|
||||
(interactive)
|
||||
(load user-init-file))
|
||||
|
||||
(bind-keys ("s-r" . revert-buffer-quick)
|
||||
("C-x K" . delete-this-file)
|
||||
("C-c C-l" . reload-init-file))
|
||||
|
||||
(provide 'init-bindings)
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
;; -*- lexical-binding: t; -*-
|
||||
|
||||
(use-package cc-mode
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:init (setq-default c-basic-offset 2))
|
||||
|
||||
|
||||
(when (treesit-available-p)
|
||||
(use-package c-ts-mode
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:functions treesit-available-p
|
||||
:init
|
||||
(setq c-ts-mode-indent-offset 2)
|
||||
@@ -19,10 +19,10 @@
|
||||
(add-to-list 'major-mode-remap-alist
|
||||
'(c-or-c++-mode . c-or-c++-ts-mode)))))
|
||||
|
||||
(with-eval-after-load 'eglot
|
||||
(add-hook 'c-ts-mode-hook #'eglot-ensure)
|
||||
(add-hook 'c++-ts-mode-hook #'eglot-ensure)
|
||||
(add-to-list 'eglot-server-programs '((c++-mode c-mode) "clangd")))
|
||||
|
||||
;; (with-eval-after-load 'eglot
|
||||
;; (add-hook 'c-ts-mode-hook #'eglot-ensure)
|
||||
;; (add-hook 'c++-ts-mode-hook #'eglot-ensure)
|
||||
;; (add-to-list 'eglot-server-programs '((c++-mode c-mode) "clangd")))
|
||||
|
||||
|
||||
(provide 'init-cc)
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
;; :hook (vertico-mode . vertico-posframe-mode))
|
||||
|
||||
(use-package vertico-multiform
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (vertico-mode . vertico-multiform-mode)
|
||||
:config
|
||||
(defvar +vertico-transform-functions nil)
|
||||
@@ -258,7 +258,7 @@
|
||||
|
||||
;; A few more useful configurations...
|
||||
(use-package emacs
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:custom
|
||||
;; TAB cycle if there are only few candidates
|
||||
;; (completion-cycle-threshold 3)
|
||||
@@ -290,8 +290,8 @@
|
||||
(advice-add 'lsp-completion-at-point :around #'cape-wrap-noninterruptible)
|
||||
(advice-add 'lsp-completion-at-point :around #'cape-wrap-nonexclusive)
|
||||
(advice-add 'comint-completion-at-point :around #'cape-wrap-nonexclusive)
|
||||
(advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)
|
||||
(advice-add 'eglot-completion-at-point :around #'cape-wrap-nonexclusive)
|
||||
;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-buster)
|
||||
;; (advice-add 'eglot-completion-at-point :around #'cape-wrap-nonexclusive)
|
||||
(advice-add 'pcomplete-completions-at-point :around #'cape-wrap-nonexclusive))
|
||||
|
||||
;; (use-package yasnippet-capf
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
;; -*- lexical-binding: t -*-
|
||||
|
||||
(use-package dired
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:bind (:map dired-mode-map
|
||||
("C-c C-p" . wdired-change-to-wdired-mode)
|
||||
("b" . dired-up-directory))
|
||||
|
||||
@@ -30,33 +30,31 @@
|
||||
|
||||
;; Don't do square-bracket space-expansion where it doesn't make sense to
|
||||
(sp-local-pair '(emacs-lisp-mode org-mode markdown-mode markdown-ts-mode gfm-mode)
|
||||
"[" nil :post-handlers '(:rem ("| " "SPC")))
|
||||
"[" nil :post-handlers '(:rem ("| " "SPC"))))
|
||||
|
||||
;; resolve conflict with hungry-delete
|
||||
(defadvice hungry-delete-backward (before sp-delete-pair-advice activate) (save-match-data (sp-delete-pair (ad-get-arg 0)))))
|
||||
|
||||
;; Hungry deletion
|
||||
(use-package hungry-delete
|
||||
:diminish
|
||||
:hook (after-init . global-hungry-delete-mode)
|
||||
:init (setq hungry-delete-chars-to-skip " \t\f\v"
|
||||
hungry-delete-except-modes
|
||||
'(help-mode minibuffer-mode minibuffer-inactive-mode calc-mode)))
|
||||
;; ;; Hungry deletion
|
||||
;; (use-package hungry-delete
|
||||
;; :diminish
|
||||
;; :hook (after-init . global-hungry-delete-mode)
|
||||
;; :init (setq hungry-delete-chars-to-skip " \t\f\v"
|
||||
;; hungry-delete-except-modes
|
||||
;; '(help-mode minibuffer-mode minibuffer-inactive-mode calc-mode)))
|
||||
|
||||
(use-package abbrev
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:diminish
|
||||
:config
|
||||
(setq-default abbrev-mode t)
|
||||
(setq abbrev-file-name (expand-file-name "abbrev.el" user-emacs-directory)))
|
||||
|
||||
(use-package autorevert
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:diminish
|
||||
:hook (after-init . global-auto-revert-mode))
|
||||
|
||||
(use-package goto-addr
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook ((text-mode . goto-address-mode)
|
||||
(prog-mode . goto-address-prog-mode)))
|
||||
|
||||
@@ -123,7 +121,7 @@
|
||||
|
||||
;; Process
|
||||
(use-package proced
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:init
|
||||
(setq-default proced-format 'verbose)
|
||||
(setq proced-auto-update-flag t
|
||||
|
||||
@@ -25,10 +25,12 @@
|
||||
:config (eglot-booster-mode))
|
||||
|
||||
(use-package flycheck-eglot
|
||||
:after eglot
|
||||
:hook (eglot-managed-mode . flycheck-eglot-mode))
|
||||
|
||||
(use-package consult-eglot
|
||||
:after consult eglot
|
||||
:after consult
|
||||
:after eglot
|
||||
:bind (:map eglot-mode-map
|
||||
([remap xref-find-apropos] . consult-eglot-symbols))
|
||||
:config
|
||||
@@ -38,10 +40,12 @@
|
||||
;; :hook (eglot-managed-mode . eldoc-box-hover-at-point-mode))
|
||||
|
||||
(use-package eldoc
|
||||
:ensure nil
|
||||
:after eglot
|
||||
:straight nil
|
||||
:diminish)
|
||||
|
||||
(use-package eldoc-mouse
|
||||
:after eldoc
|
||||
:diminish
|
||||
:hook eldoc-mode)
|
||||
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
|
||||
(use-package gcmh
|
||||
:diminish
|
||||
:straight (:wait t) ;; what does this do in elpaca
|
||||
:init
|
||||
(gcmh-mode 1)
|
||||
:hook (emacs-startup . gcmh-mode)
|
||||
:config
|
||||
(setq gcmh-high-cons-threshold #x6400000))
|
||||
(setq gcmh-high-cons-threshold #x4000000
|
||||
gcmh-idle-delay 'auto
|
||||
gcmh-auto-idle-delay-factor 10))
|
||||
|
||||
(provide 'init-gc)
|
||||
|
||||
@@ -12,8 +12,7 @@
|
||||
:config
|
||||
(setq haskell-process-suggest-remove-import-lines t
|
||||
haskell-process-auto-import-loaded-modules t)
|
||||
(add-to-list 'completion-ignored-extensions ".hi")
|
||||
(add-hook 'haskell-mode-hook #'eglot-ensure))
|
||||
(add-to-list 'completion-ignored-extensions ".hi"))
|
||||
|
||||
|
||||
(provide 'init-haskell)
|
||||
|
||||
103
lisp/init-lsp.el
103
lisp/init-lsp.el
@@ -1,8 +1,14 @@
|
||||
;; -*- lexical-binding: t; -*-
|
||||
|
||||
;; LSP booster
|
||||
|
||||
|
||||
|
||||
(use-package lsp-mode
|
||||
:diminish
|
||||
:defines (lsp-diagnostics-disabled-modes lsp-clients-python-library-directories)
|
||||
:autoload lsp-enable-which-key-integration
|
||||
:commands (lsp-format-buffer lsp-organize-imports lsp lsp-deferred)
|
||||
:hook ((prog-mode . (lambda ()
|
||||
(unless (derived-mode-p
|
||||
'emacs-lisp-mode 'lisp-mode
|
||||
@@ -12,7 +18,9 @@
|
||||
((markdown-mode yaml-mode yaml-ts-mode) . lsp-deferred)
|
||||
(lsp-mode . (lambda ()
|
||||
;; Integrate `which-key'
|
||||
(lsp-enable-which-key-integration))))
|
||||
(lsp-enable-which-key-integration)
|
||||
(add-hook 'before-save-hook #'lsp-format-buffer t t)
|
||||
(add-hook 'before-save-hook #'lsp-organize-imports t t))))
|
||||
:bind (:map lsp-mode-map
|
||||
("C-c c d" . lsp-describe-thing-at-point)
|
||||
([remap xref-find-definitions] . lsp-find-definition)
|
||||
@@ -20,6 +28,9 @@
|
||||
:init (setq lsp-use-plists t
|
||||
lsp-log-io nil
|
||||
|
||||
lsp-enable-suggest-server-download t
|
||||
;; lsp-auto-configure t
|
||||
|
||||
lsp-keymap-prefix "C-c c"
|
||||
lsp-keep-workspace-alive nil
|
||||
lsp-signature-auto-activate nil
|
||||
@@ -27,6 +38,12 @@
|
||||
lsp-modeline-diagnostics-enable nil
|
||||
lsp-modeline-workspace-status-enable nil
|
||||
|
||||
lsp-completion-enable t
|
||||
lsp-completion-provider :none ;; using corfu
|
||||
lsp-completion-enable-additional-text-edit t
|
||||
lsp-enable-snippet t
|
||||
lsp-completion-show-kind t
|
||||
|
||||
lsp-semantic-tokens-enable t
|
||||
lsp-progress-spinner-type 'progress-bar-filled
|
||||
|
||||
@@ -34,15 +51,33 @@
|
||||
lsp-enable-folding nil
|
||||
lsp-enable-symbol-highlighting nil
|
||||
lsp-enable-text-document-color nil
|
||||
lsp-enable-imenu t
|
||||
|
||||
lsp-enable-indentation nil
|
||||
lsp-enable-on-type-formatting nil)
|
||||
lsp-enable-on-type-formatting nil
|
||||
|
||||
;; For diagnostics
|
||||
lsp-diagnostics-disabled-modes '(markdown-mode gfm-mode))
|
||||
|
||||
:config
|
||||
(use-package consult-lsp
|
||||
:bind (:map lsp-mode-map
|
||||
("C-M-." . consult-lsp-symbols)))
|
||||
|
||||
(with-no-warnings
|
||||
;; Disable `lsp-mode' in `git-timemachine-mode'
|
||||
(defun my/lsp--init-if-visible (fn &rest args)
|
||||
(unless (bound-and-true-p git-timemachine-mode)
|
||||
(apply fn args)))
|
||||
(advice-add #'lsp--init-if-visible :around #'my/lsp--init-if-visible))
|
||||
|
||||
;; Enable `lsp-mode' in sh/bash/zsh
|
||||
(defun my/lsp-bash-check-sh-shell (&rest _)
|
||||
(and (memq major-mode '(sh-mode bash-ts-mode))
|
||||
(memq sh-shell '(sh bash zsh))))
|
||||
(advice-add #'lsp-bash-check-sh-shell :override #'my/lsp-bash-check-sh-shell)
|
||||
(add-to-list 'lsp-language-id-configuration '(bash-ts-mode . "shellscript"))
|
||||
|
||||
(use-package lsp-ui
|
||||
:custom-face
|
||||
(lsp-ui-sideline-code-action ((t (:inherit warning))))
|
||||
@@ -114,34 +149,40 @@
|
||||
,(face-foreground 'font-lock-string-face)
|
||||
,(face-foreground 'font-lock-constant-face)
|
||||
,(face-foreground 'font-lock-variable-name-face))))
|
||||
|
||||
(use-package lsp-pyright
|
||||
:functions lsp-pyright-format-buffer
|
||||
:hook (((python-mode python-ts-mode) . (lambda ()
|
||||
(require 'lsp-pyright)
|
||||
(add-hook 'after-save-hook #'lsp-pyright-format-buffer t t))))
|
||||
:init
|
||||
;; (when (executable-find "python3")
|
||||
;; (setq lsp-pyright-python-executable-cmd "python3"))
|
||||
|
||||
(defun lsp-pyright-format-buffer ()
|
||||
"Use `yapf' to format the buffer."
|
||||
(interactive)
|
||||
(when (and (executable-find "yapf") buffer-file-name)
|
||||
(call-process "yapf" nil nil nil "-i" buffer-file-name))))
|
||||
|
||||
(use-package ccls
|
||||
:hook ((c-mode c++-mode objc-mode cuda-mode) . (lambda () (require 'ccls)))
|
||||
:config
|
||||
(with-no-warnings
|
||||
;; FIXME: fail to call ccls.xref
|
||||
;; @see https://github.com/emacs-lsp/emacs-ccls/issues/109
|
||||
(cl-defmethod my-lsp-execute-command
|
||||
((_server (eql ccls)) (command (eql ccls.xref)) arguments)
|
||||
(when-let* ((xrefs (lsp--locations-to-xref-items
|
||||
(lsp--send-execute-command (symbol-name command) arguments))))
|
||||
(xref--show-xrefs xrefs nil)))
|
||||
(advice-add #'lsp-execute-command :override #'my-lsp-execute-command))))
|
||||
|
||||
|
||||
:preface
|
||||
(defun lsp-booster--advice-json-parse (old-fn &rest args)
|
||||
"Try to parse bytecode instead of json."
|
||||
(or
|
||||
(when (equal (following-char) ?#)
|
||||
(let ((bytecode (read (current-buffer))))
|
||||
(when (byte-code-function-p bytecode)
|
||||
(funcall bytecode))))
|
||||
(apply old-fn args)))
|
||||
(advice-add (if (progn (require 'json)
|
||||
(fboundp 'json-parse-buffer))
|
||||
'json-parse-buffer
|
||||
'json-read)
|
||||
:around
|
||||
#'lsp-booster--advice-json-parse)
|
||||
|
||||
(defun lsp-booster--advice-final-command (old-fn cmd &optional test?)
|
||||
"Prepend emacs-lsp-booster command to lsp CMD."
|
||||
(let ((orig-result (funcall old-fn cmd test?)))
|
||||
(if (and (not test?) ;; for check lsp-server-present?
|
||||
(not (file-remote-p default-directory)) ;; see lsp-resolve-final-command, it would add extra shell wrapper
|
||||
lsp-use-plists
|
||||
(not (functionp 'json-rpc-connection)) ;; native json-rpc
|
||||
(executable-find "emacs-lsp-booster"))
|
||||
(progn
|
||||
(when-let ((command-from-exec-path (executable-find (car orig-result)))) ;; resolve command from exec-path (in case not found in $PATH)
|
||||
(setcar orig-result command-from-exec-path))
|
||||
(message "Using emacs-lsp-booster for %s!" orig-result)
|
||||
(cons "emacs-lsp-booster" orig-result))
|
||||
orig-result)))
|
||||
(advice-add 'lsp-resolve-final-command :around #'lsp-booster--advice-final-command)
|
||||
|
||||
)
|
||||
|
||||
|
||||
(provide 'init-lsp)
|
||||
|
||||
@@ -8,15 +8,6 @@
|
||||
(setq tuareg-prettify-symbols-full t)
|
||||
(add-hook 'tuareg-mode-hook (lambda () )))
|
||||
|
||||
|
||||
(use-package ocaml-eglot
|
||||
:straight t
|
||||
:after tuareg
|
||||
:hook (tuareg-mode . ocaml-eglot)
|
||||
:hook (ocaml-eglot . eglot-ensure)
|
||||
:config
|
||||
(setq ocaml-eglot-syntax-checker 'flycheck))
|
||||
|
||||
(use-package dune)
|
||||
|
||||
(use-package opam-switch-mode
|
||||
@@ -25,10 +16,19 @@
|
||||
(setq tuareg-opam-insinuate t))
|
||||
|
||||
(use-package ocp-indent
|
||||
:hook (ocaml-eglot . ocp-setup-indent))
|
||||
:hook (tuareg-mode . ocp-setup-indent))
|
||||
|
||||
(use-package utop)
|
||||
|
||||
;; (use-package ocaml-eglot
|
||||
;; :straight t
|
||||
;; :after tuareg
|
||||
;; :hook (tuareg-mode . ocaml-eglot)
|
||||
;; :hook (ocaml-eglot . eglot-ensure)
|
||||
;; :config
|
||||
;; (setq ocaml-eglot-syntax-checker 'flycheck))
|
||||
|
||||
|
||||
;; (use-package merlin
|
||||
;; :hook (tuareg-mode . +ocaml-init-merlin)
|
||||
;; :init
|
||||
@@ -41,7 +41,7 @@
|
||||
;; (use-package merlin-eldoc
|
||||
;; :hook (merlin-mode . merlin-eldoc-setup))
|
||||
|
||||
;; (use-package flycheck-ocaml)
|
||||
(use-package flycheck-ocaml)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ the element after the #+HEADER: tag."
|
||||
(yas-activate-extra-mode 'LaTeX-mode)))
|
||||
|
||||
(use-package org-latex-preview
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook (org-mode . org-latex-preview-mode)
|
||||
:hook (org-latex-preview-mode . org-latex-preview-center-mode)
|
||||
:config
|
||||
@@ -327,4 +327,40 @@ the element after the #+HEADER: tag."
|
||||
:config
|
||||
(use-package djvu))
|
||||
|
||||
|
||||
;; Enable lsp in org-babel
|
||||
(cl-defmacro lsp-org-babel-enable (lang)
|
||||
"Support LANG in org source code block."
|
||||
(cl-check-type lang string)
|
||||
(let* ((edit-pre (intern (format "org-babel-edit-prep:%s" lang)))
|
||||
(intern-pre (intern (format "lsp--%s" (symbol-name edit-pre)))))
|
||||
`(progn
|
||||
(defun ,intern-pre (info)
|
||||
(setq buffer-file-name (or (->> info caddr (alist-get :file))
|
||||
"org-src-babel.tmp"))
|
||||
(when (fboundp 'lsp-deferred)
|
||||
;; Avoid headerline conflicts
|
||||
(setq-local lsp-headerline-breadcrumb-enable nil)
|
||||
(lsp-deferred)
|
||||
(_
|
||||
(user-error "LSP:: invalid type"))))
|
||||
(put ',intern-pre 'function-documentation
|
||||
(format "Enable lsp-mode in the buffer of org source block (%s)."
|
||||
(upcase ,lang)))
|
||||
|
||||
(if (fboundp ',edit-pre)
|
||||
(advice-add ',edit-pre :after ',intern-pre)
|
||||
(progn
|
||||
(defun ,edit-pre (info)
|
||||
(,intern-pre info))
|
||||
(put ',edit-pre 'function-documentation
|
||||
(format "Prepare local buffer environment for org source block (%s)."
|
||||
(upcase ,lang))))))))
|
||||
|
||||
(defconst org-babel-lang-list
|
||||
'("go" "python" "ipython" "ruby" "js" "css" "sass" "c" "rust" "java" "cpp" "c++" "shell")
|
||||
"The supported programming languages for interactive Babel.")
|
||||
(dolist (lang org-babel-lang-list)
|
||||
(eval `(lsp-org-babel-enable ,lang)))
|
||||
|
||||
(provide 'init-org)
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
;; Python Mode
|
||||
;; Install: pip install pyflakes autopep8
|
||||
(use-package python
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:functions exec-path-from-shell-copy-env
|
||||
:hook (inferior-python-mode . (lambda ()
|
||||
(process-query-on-exit-flag
|
||||
@@ -23,9 +23,9 @@
|
||||
(with-eval-after-load 'exec-path-from-shell
|
||||
(exec-path-from-shell-copy-env "PYTHONPATH")))
|
||||
|
||||
(with-eval-after-load 'eglot
|
||||
(add-hook 'python-ts-mode-hook #'eglot-ensure)
|
||||
(add-to-list 'eglot-server-programs '((python-mode python-ts-mode) . ("pyright-langserver" "--stdio"))))
|
||||
;; (with-eval-after-load 'eglot
|
||||
;; (add-hook 'python-ts-mode-hook #'eglot-ensure)
|
||||
;; (add-to-list 'eglot-server-programs '((python-mode python-ts-mode) . ("pyright-langserver" "--stdio"))))
|
||||
|
||||
|
||||
(provide 'init-python)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
;; -*- lexical-binding: t; -*-
|
||||
|
||||
(use-package shell
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:hook ((shell-mode . my/shell-mode-hook)
|
||||
(comint-output-filter-functions . comint-strip-ctrl-m))
|
||||
:init
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
:config
|
||||
(elemacs-load-packages-incrementally '(eldoc easymenu help-mode))
|
||||
(use-package warnings
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:config
|
||||
(cl-pushnew '(yasnippet backquote-change)
|
||||
warning-suppress-types
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
:hook (LaTeX-mode . prettify-symbols-mode)
|
||||
:hook (LaTeX-mode . visual-line-mode)
|
||||
:hook (LaTeX-mode . turn-on-reftex)
|
||||
:hook (LaTeX-mode . lsp-deferred)
|
||||
:bind (:map LaTeX-mode-map
|
||||
("C-S-e" . latex-math-from-calc)
|
||||
("C-c x" . TeX-clean)
|
||||
@@ -26,13 +27,16 @@
|
||||
(TeX-show-compilation nil)
|
||||
(TeX-command-extra-options "-shell-escape")
|
||||
(TeX-view-program-selection '((output-pdf "displayline")))
|
||||
(LaTeX-indent-level 0)
|
||||
(LaTeX-item-indent 0)
|
||||
(TeX-newline-function 'newline)
|
||||
:config
|
||||
(add-hook 'LaTeX-mode-hook '(lambda ()
|
||||
(setq TeX-command-default "LaTeXMk")))
|
||||
|
||||
|
||||
;; Format math as a Latex string with Calc
|
||||
(add-hook 'LaTeX-mode-hook #'eglot-ensure)
|
||||
;; (add-hook 'LaTeX-mode-hook #'eglot-ensure)
|
||||
|
||||
(setq-default LaTeX-indent-environment-list nil)
|
||||
|
||||
@@ -56,11 +60,10 @@
|
||||
;; (setq TeX-view-program-selection '((output-pdf "PDF Tools")))
|
||||
;; (add-hook 'TeX-after-compilation-finished-functions #'TeX-revert-document-buffer)
|
||||
|
||||
(setq reftex-plug-into-AUCTeX t)
|
||||
|
||||
(with-eval-after-load 'eglot
|
||||
(add-to-list 'eglot-server-programs '((LaTeX-mode latex-mode) "texlab"))))
|
||||
;; (with-eval-after-load 'eglot
|
||||
;; (add-to-list 'eglot-server-programs '((LaTeX-mode latex-mode) "texlab")))
|
||||
|
||||
(setq reftex-plug-into-AUCTeX t))
|
||||
|
||||
(use-package cdlatex
|
||||
:diminish
|
||||
|
||||
@@ -3,20 +3,19 @@
|
||||
|
||||
(use-package typst-ts-mode
|
||||
:straight (:type git :host codeberg :repo "meow_king/typst-ts-mode")
|
||||
:hook (typst-ts-mode . eglot-ensure)
|
||||
:custom
|
||||
;; (typst-ts-watch-options "--open")
|
||||
(typst-ts-mode-grammar-location (expand-file-name "tree-sitter/libtree-sitter-typst.so" user-emacs-directory))
|
||||
(typst-ts-mode-enable-raw-blocks-highlight t)
|
||||
:config
|
||||
(keymap-set typst-ts-mode-map "C-c C-c" #'typst-ts-tmenu)
|
||||
(with-eval-after-load 'eglot
|
||||
(with-eval-after-load 'typst-ts-mode
|
||||
(add-to-list 'eglot-server-programs
|
||||
`((typst-ts-mode) .
|
||||
,(eglot-alternatives `(,typst-ts-lsp-download-path
|
||||
"tinymist"
|
||||
"typst-lsp"))))))
|
||||
;; (with-eval-after-load 'eglot
|
||||
;; (with-eval-after-load 'typst-ts-mode
|
||||
;; (add-to-list 'eglot-server-programs
|
||||
;; `((typst-ts-mode) .
|
||||
;; ,(eglot-alternatives `(,typst-ts-lsp-download-path
|
||||
;; "tinymist"
|
||||
;; "typst-lsp"))))))
|
||||
(setq typst-ts-preview-function 'find-file-other-window))
|
||||
|
||||
(use-package typst-preview
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
(add-to-list 'default-frame-alist '(undecorated-round . t))
|
||||
|
||||
(use-package solaire-mode
|
||||
:ensure nil
|
||||
:hook (after-init . solaire-global-mode))
|
||||
|
||||
(use-package modus-themes
|
||||
@@ -105,17 +104,20 @@
|
||||
:hook text-mode
|
||||
:hook prog-mode)
|
||||
|
||||
(use-package doom-modeline
|
||||
:hook (after-init . doom-modeline-mode)
|
||||
:config
|
||||
(setq doom-modeline-support-imenu t
|
||||
doom-modeline-height 30
|
||||
doom-modeline-buffer-file-name-style 'relative-from-project
|
||||
doom-modeline-enable-word-count t
|
||||
;; doom-modeline-project-name t
|
||||
doom-modeline-check 'simple
|
||||
doom-modeline-buffer-encoding nil
|
||||
doom-modeline-major-mode-icon nil))
|
||||
(use-package mood-line
|
||||
:hook emacs-startup)
|
||||
|
||||
;; (use-package doom-modeline
|
||||
;; :hook (after-init . doom-modeline-mode)
|
||||
;; :config
|
||||
;; (setq doom-modeline-support-imenu t
|
||||
;; doom-modeline-height 30
|
||||
;; doom-modeline-buffer-file-name-style 'relative-from-project
|
||||
;; doom-modeline-enable-word-count t
|
||||
;; ;; doom-modeline-project-name t
|
||||
;; doom-modeline-check 'simple
|
||||
;; doom-modeline-buffer-encoding nil
|
||||
;; doom-modeline-major-mode-icon nil))
|
||||
|
||||
(use-package hide-mode-line
|
||||
:autoload turn-off-hide-mode-line-mode
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
(which-key-add-key-based-replacements "C-x v" "version control"))
|
||||
|
||||
(use-package grep
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:autoload grep-apply-setting
|
||||
:init
|
||||
(when (executable-find "rg")
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
(user-error "Cannot revert the timemachine buffer"))))))
|
||||
|
||||
(use-package smerge-mode
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:diminish
|
||||
:pretty-hydra
|
||||
((:title (pretty-hydra-title "Smerge" 'octicon "nf-oct-diff")
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
;; Restore old window configurations
|
||||
|
||||
(use-package winner
|
||||
:ensure nil
|
||||
:straight nil
|
||||
:commands (winner-undo winner-redo)
|
||||
:hook after-init
|
||||
:init (setq winner-boring-buffers '("*Completions*"
|
||||
|
||||
Reference in New Issue
Block a user