From 2884cf5c1375e4c3a614e7c2f69a2378da579b05 Mon Sep 17 00:00:00 2001 From: Sravan Balaji Date: Wed, 28 Apr 2021 22:16:04 -0400 Subject: [PATCH] Emacs From Scratch #8 - Build Your Own IDE with lsp-mode - Add language server protocol mode - Remove leader key "toggles" since comment was replaced with evil-nerd-commenter --- README.org | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- init.el | 44 +++++++++++++++++++++++++++++++++-- 2 files changed, 108 insertions(+), 4 deletions(-) diff --git a/README.org b/README.org index 4bac1d6..9f9b3f1 100644 --- a/README.org +++ b/README.org @@ -114,8 +114,8 @@ Setup FiraCode and Cantarell fonts with specified size. :global-prefix "C-SPC") (sb/leader-keys - "t" '(:ignore t :which-key "toggles") - "tc" '(comment-line :which-key "toggle comment") + ;; "t" '(:ignore t :which-key "toggles") + ;; "tc" '(comment-line :which-key "toggle comment") "s" '(:ignore s :which-key "settings"))) (general-define-key @@ -498,6 +498,70 @@ Automatically tangle code blocks in file everytime it is saved. * Development +** Commenting + +#+begin_src emacs-lisp + (use-package evil-nerd-commenter + :bind ("M-/" . evilnc-comment-or-uncomment-lines)) +#+end_src + +** Languages + +*** Language Servers + +#+begin_src emacs-lisp + (defun sb/lsp-mode-setup () + (setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols)) + (lsp-headerline-breadcrumb-mode)) + + (use-package lsp-mode + :commands (lsp lsp-deferred) + :hook (lsp-mode . sb/lsp-mode-setup) + :init + (setq lsp-keymap-prefix "C-c l") ;; Or 'C-l', 's-l' + :config + (lsp-enable-which-key-integration t)) + + (use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-position 'bottom)) + + (use-package lsp-treemacs + :after lsp) + + (use-package lsp-ivy) +#+end_src + +# *** TypeScript + +# #+begin_src emacs-lisp +# (use-package typescript-mode +# :mode "\\.tx\\'" +# :hook (typescript-mode .lsp-deferred) +# :config +# (setq typescript-indent-level 2)) +# #+end_src + +*** Company Mode + +#+begin_src emacs-lisp + (use-package company + :after lsp-mode + :hook (lsp-mode . company-mode) + :bind + (:map company-active-map + ("" . company-complete-selection)) + (:map lsp-mode-map + ("" . company-indent-or-complete-common)) + :custom + (company-minimum-prefix-length 1) + (company-idle-delay 0.0)) + + (use-package company-box + :hook (company-mode . company-box-mode)) +#+end_src + ** Projectile #+begin_src emacs-lisp ;; Projectile diff --git a/init.el b/init.el index ee80ccf..cc662a0 100644 --- a/init.el +++ b/init.el @@ -62,8 +62,8 @@ :global-prefix "C-SPC") (sb/leader-keys - "t" '(:ignore t :which-key "toggles") - "tc" '(comment-line :which-key "toggle comment") + ;; "t" '(:ignore t :which-key "toggles") + ;; "tc" '(comment-line :which-key "toggle comment") "s" '(:ignore s :which-key "settings"))) (general-define-key @@ -374,6 +374,46 @@ (add-hook 'org-mode-hook (lambda () (add-hook 'after-save-hook #'sb/org-babel-tangle-config))) +(use-package evil-nerd-commenter + :bind ("M-/" . evilnc-comment-or-uncomment-lines)) + +(defun sb/lsp-mode-setup () + (setq lsp-headerline-breadcrumb-segments '(path-up-to-project file symbols)) + (lsp-headerline-breadcrumb-mode)) + +(use-package lsp-mode + :commands (lsp lsp-deferred) + :hook (lsp-mode . sb/lsp-mode-setup) + :init + (setq lsp-keymap-prefix "C-c l") ;; Or 'C-l', 's-l' + :config + (lsp-enable-which-key-integration t)) + +(use-package lsp-ui + :hook (lsp-mode . lsp-ui-mode) + :custom + (lsp-ui-doc-position 'bottom)) + +(use-package lsp-treemacs + :after lsp) + +(use-package lsp-ivy) + +(use-package company + :after lsp-mode + :hook (lsp-mode . company-mode) + :bind + (:map company-active-map + ("" . company-complete-selection)) + (:map lsp-mode-map + ("" . company-indent-or-complete-common)) + :custom + (company-minimum-prefix-length 1) + (company-idle-delay 0.0)) + +(use-package company-box + :hook (company-mode . company-box-mode)) + ;; Projectile (use-package projectile :diminish projectile-mode