diff --git a/.emacs.d/config.org b/.emacs.d/config.org index 1fb58f2..5bd886c 100644 --- a/.emacs.d/config.org +++ b/.emacs.d/config.org @@ -269,6 +269,8 @@ Project manager. Autocomplete packages (includes code completion and snippets). +**** Company + #+BEGIN_SRC emacs-lisp (use-package company :defer t @@ -283,27 +285,78 @@ Autocomplete packages (includes code completion and snippets). (add-hook 'org-mode-hook 'company-mode) (add-hook 'shell-mode-hook 'company-mode) (add-hook 'shell-script-mode-hook 'company-mode)) +#+END_SRC - (use-package company-irony - :after company - :config (add-to-list 'company-backends 'company-irony)) +**** Flycheck - (use-package company-c-headers - :after company - :config (add-to-list 'company-backends 'company-c-headers)) +On the fly syntax checking. + +#+BEGIN_SRC emacs-lisp + (use-package flycheck + :defer t + :hook + ((c-mode + c++-mode + org-mode + php-mode + shell-mode) + . flycheck-mode)) #+END_SRC -Irony requires M-x =irony-install-server=. +**** LSP #+BEGIN_SRC emacs-lisp -(use-package irony + (use-package lsp-mode :defer t - :init - (add-hook 'c++-mode-hook 'irony-mode) - (add-hook 'c-mode-hook 'irony-mode) - (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) - :config (push 'glsl-mode irony-supported-major-modes)) + :hook + ((c-mode ; clangd + c-or-c++-mode ; clangd + php-mode) ; nodejs-intelephense + . lsp-deferred) + :custom + (lsp-auto-guess-root t) + (lsp-clients-clangd-args '("-compile-commands-dir=build" "-j=2" "-background-index" "-log=error")) + (lsp-enable-xref t) + (lsp-keep-workspace-alive nil) + (lsp-prefer-flymake nil) + :commands lsp) + + (use-package company-lsp + :after company lsp-mode + :custom + (company-transformers nil) + (company-lsp-async t) + (company-lsp-cache-candidates nil) + (company-lsp-enable-snippet t) + :commands company-lsp + :config + (push 'company-lsp company-backends)) + + (use-package lsp-ui + :after flycheck lsp-mode + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-border (face-foreground 'default)) + (lsp-ui-doc-enable nil) + (lsp-ui-doc-header t) + (lsp-ui-doc-include-signature t) + (lsp-ui-doc-position 'top) + (lsp-ui-doc-use-childframe t) + (lsp-ui-sideline-enable nil) + (lsp-ui-sideline-ignore-duplicate t) + (lsp-ui-sideline-show-code-actions nil) + (lsp-ui-flycheck-enable t) + (lsp-ui-flycheck-list-position 'right) + (lsp-ui-flycheck-live-reporting t) + (lsp-ui-peek-enable nil) + (lsp-ui-peek-list-width 60) + (lsp-ui-peek-peek-height 25) + :commands lsp-ui-mode) +#+END_SRC + +**** YASnippet +#+BEGIN_SRC emacs-lisp (use-package yasnippet :defer t :init @@ -315,12 +368,27 @@ Irony requires M-x =irony-install-server=. :after yasnippet) #+END_SRC -*** Org +**** C/C++ + +Irony requires M-x =irony-install-server=. #+BEGIN_SRC emacs-lisp - (use-package htmlize) +(use-package irony + :defer t + :init + (add-hook 'c++-mode-hook 'irony-mode) + (add-hook 'c-mode-hook 'irony-mode) + (add-hook 'irony-mode-hook 'irony-cdb-autosetup-compile-options) + :config (push 'glsl-mode irony-supported-major-modes)) - (use-package ox-gfm) + (use-package company-irony + :after company irony + :config (add-to-list 'company-backends 'company-irony)) + + (use-package company-c-headers + :after company + :config (add-to-list 'company-backends 'company-c-headers)) + ;; company-irony-c-headers #+END_SRC *** Prettify @@ -621,6 +689,16 @@ Functions that use package functionality. (interactive) (funcall (local-key-binding "r"))) + (defun lsp-format-region-or-buffer () + "Format the selection (or buffer) with LSP." + (interactive) + (unless (bound-and-true-p lsp-mode) + (user-error "Not in an LSP buffer")) + (call-interactively + (if (use-region-p) + #'lsp-format-region + #'lsp-format-buffer))) + (defun neotree-toggle-in-project-root () "Toggle Neotree in project root." (interactive) @@ -846,6 +924,16 @@ General.el ~leader key binds. "c v" '(config-visit :which-key "Config visit") "c y" '(evilnc-comment-and-kill-ring-save :which-key "Comment and save") + ;; LSP + "d" '(:ignore t :which-key "lsp") + "d c" '(lsp-describe-thing-at-point :which-key "LSP Describe under cursor") + "d d" '(lsp-find-definition :which-key "LSP Find definition") + "d e" '(lsp-execute-code-action :which-key "LSP Execute code action") + "d f" '(lsp-format-region-or-buffer :which-key "LSP Format region/buffer") + "d r" '(lsp-find-references :which-key "LSP Find references") + "d R" '(lsp-rename :which-key "LSP Rename") + "d s" '(lsp :which-key "Start LSP") + ;; Find file "f" '(:ignore t :which-key "file") "f f" '(find-file-in-project-root :which-key "Find file")