From a9bfdff5b0f441afa1396885ea955246a08f41c3 Mon Sep 17 00:00:00 2001 From: Maciej Szlosarczyk Date: Thu, 2 Jul 2020 15:14:17 +0300 Subject: [PATCH] Replace ag with ripgrep Add haskell mode Make one of the themes to use light Replace ctags with uctags Do not force paredit in clojure mode --- 02ivy.el | 2 +- 03hydra.el | 4 +-- 08ctags.el | 2 +- init.el | 9 +++-- languages/clojure.el | 4 ++- languages/erlang.el | 2 +- languages/haskell.el | 3 ++ languages/javascript.el | 74 ++++++++++++++++++++++++++++++++++++++++- languages/ruby.el | 2 +- languages/web.el | 2 ++ themes/themes.el | 2 +- 11 files changed, 95 insertions(+), 11 deletions(-) create mode 100644 languages/haskell.el diff --git a/02ivy.el b/02ivy.el index 99379d0..24de38b 100644 --- a/02ivy.el +++ b/02ivy.el @@ -9,7 +9,7 @@ ivy-count-format "(%d of %d) " ;; Current candidate count style ivy-display-style 'fancy)) ;; Formatting style -(global-set-key (kbd "C-c a") 'counsel-ag) +(global-set-key (kbd "C-c a") 'counsel-rg) (global-set-key (kbd "C-c t") 'counsel-find-file) (global-set-key (kbd "C-c C-s") 'swiper) ;; Find things by regexp (global-set-key (kbd "M-x") 'counsel-M-x) ;; M-x on steroids diff --git a/03hydra.el b/03hydra.el index 779ae84..65cc2a2 100644 --- a/03hydra.el +++ b/03hydra.el @@ -15,13 +15,13 @@ _d_: Deft _c_: Invalidate cache " ("q" nil "cancel" :color blue) - ("a" counsel-ag) + ("a" counsel-rg) ("b" ibuffer) ("t" counsel-find-file) ("d" deft) ("s" counsel-projectile-switch-project) ("f" counsel-projectile-find-file) - ("g" counsel-projectile-ag) + ("g" counsel-projectile-rg) ("c" projectile-invalidate-cache) ("n" projectile-add-known-project) ("i" ielm) diff --git a/08ctags.el b/08ctags.el index 3b7407a..2a0c966 100644 --- a/08ctags.el +++ b/08ctags.el @@ -3,7 +3,7 @@ (setq tags-add-tables nil) (setq ctags/refresh-command - (format "ctags -e -R -f %sTAGS %s." + (format "uctags -e -R -f %sTAGS %s." default-directory default-directory)) ;; Sentinel function for capturing ctags diff --git a/init.el b/init.el index ae89200..9fdd9e8 100644 --- a/init.el +++ b/init.el @@ -79,6 +79,7 @@ (load "$HOME/.emacs.d/languages/kotlin.el" 'f 't) (load "$HOME/.emacs.d/languages/reason.el" 'f 't) (load "$HOME/.emacs.d/languages/markdown.el" 'f 't) +;; (load "$HOME/.emacs.d/languages/haskell.el" 'f 't) (custom-set-variables ;; custom-set-variables was added by Custom. @@ -87,10 +88,14 @@ ;; If there is more than one, they won't work right. '(custom-safe-themes (quote - ("60e09d2e58343186a59d9ed52a9b13d822a174b33f20bdc1d4abb86e6b17f45b" "85e6bb2425cbfeed2f2b367246ad11a62fb0f6d525c157038a0d0eaaabc1bfee" "3380a2766cf0590d50d6366c5a91e976bdc3c413df963a0ab9952314b4577299" "cea3ec09c821b7eaf235882e6555c3ffa2fd23de92459751e18f26ad035d2142" "8ffdc8c66ceeaf7921f4510a70d808f01b303e6b4d177c947b442e80d4228678" "b0c5c6cc59d530d3f6fbcfa67801993669ce062dda1435014f74cafac7d86246" "ad16a1bf1fd86bfbedae4b32c269b19f8d20d416bd52a87cd50e355bf13c2f23" "d9dab332207600e49400d798ed05f38372ec32132b3f7d2ba697e59088021555" "bc4c89a7b91cfbd3e28b2a8e9e6750079a985237b960384f158515d32c7f0490" "99c86852decaeb0c6f51ce8bd46e4906a4f28ab4c5b201bdc3fdf85b24f88518" "a85e40c7d2df4a5e993742929dfd903899b66a667547f740872797198778d7b5" default))) + ("1f38fb71e55e5ec5f14a39d03ca7d7a416123d3f0847745c7bade053ca58f043" "fec45178b55ad0258c5f68f61c9c8fd1a47d73b08fb7a51c15558d42c376083d" "60e09d2e58343186a59d9ed52a9b13d822a174b33f20bdc1d4abb86e6b17f45b" "85e6bb2425cbfeed2f2b367246ad11a62fb0f6d525c157038a0d0eaaabc1bfee" "3380a2766cf0590d50d6366c5a91e976bdc3c413df963a0ab9952314b4577299" "cea3ec09c821b7eaf235882e6555c3ffa2fd23de92459751e18f26ad035d2142" "8ffdc8c66ceeaf7921f4510a70d808f01b303e6b4d177c947b442e80d4228678" "b0c5c6cc59d530d3f6fbcfa67801993669ce062dda1435014f74cafac7d86246" "ad16a1bf1fd86bfbedae4b32c269b19f8d20d416bd52a87cd50e355bf13c2f23" "d9dab332207600e49400d798ed05f38372ec32132b3f7d2ba697e59088021555" "bc4c89a7b91cfbd3e28b2a8e9e6750079a985237b960384f158515d32c7f0490" "99c86852decaeb0c6f51ce8bd46e4906a4f28ab4c5b201bdc3fdf85b24f88518" "a85e40c7d2df4a5e993742929dfd903899b66a667547f740872797198778d7b5" default))) '(package-selected-packages (quote - (merlin reason-mode elm-mode deft buffer-move tide gradle-mode kotlin-mode clj-refactor planet-theme cider clojure-mode erlang rspec-mode dap-mode lsp-ui lsp-mode nginx-mode gitignore-mode js2-mode keyfreq visual-regexp enh-ruby-mode counsel-projectile counsel ivy flycheck-rust flycheck hydra solarized-theme company-ansible alchemist column-enforce-mode yaml-mode ansible dockerfile-mode ruby-end dash-at-point base16-theme exec-path-from-shell)))) + (slim-mode company-lsp lsp tuareg intero merlin reason-mode elm-mode deft buffer-move tide gradle-mode kotlin-mode clj-refactor planet-theme cider clojure-mode erlang rspec-mode dap-mode lsp-ui lsp-mode nginx-mode gitignore-mode js2-mode keyfreq visual-regexp enh-ruby-mode counsel-projectile counsel ivy flycheck-rust flycheck hydra solarized-theme company-ansible alchemist column-enforce-mode yaml-mode ansible dockerfile-mode ruby-end dash-at-point base16-theme exec-path-from-shell))) + '(safe-local-variable-values + (quote + ((haskell-process-use-ghci . t) + (haskell-indent-spaces . 4))))) ;; Improve font settings in Markdown code (custom-set-faces diff --git a/languages/clojure.el b/languages/clojure.el index 475d99a..352534e 100644 --- a/languages/clojure.el +++ b/languages/clojure.el @@ -26,7 +26,9 @@ (column-enforce-n 80) (clj-refactor-mode 1) (cider-mode 1) - (paredit-mode 1) + + ;; Do not enable paredit for clojure + ;; (paredit-mode 1) ;; Do not show separate error window when in REPL (setq cider-show-error-buffer 'except-in-repl)) diff --git a/languages/erlang.el b/languages/erlang.el index 6364f49..49aedeb 100644 --- a/languages/erlang.el +++ b/languages/erlang.el @@ -66,7 +66,7 @@ (setq-local ctags/refresh-command (format - "ctags -e -R --languages=erlang -f %sTAGS %ssrc %sdeps %sapps %s_build %stest %slib/stdlib-* %slib/kernel-*" + "uctags -e -R --languages=erlang -f %sTAGS %ssrc %sdeps %sapps %s_build %stest %slib/stdlib-* %slib/kernel-*" (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) (projectile-project-root) diff --git a/languages/haskell.el b/languages/haskell.el new file mode 100644 index 0000000..f408458 --- /dev/null +++ b/languages/haskell.el @@ -0,0 +1,3 @@ +(use-package intero + :defer t + :ensure t) diff --git a/languages/javascript.el b/languages/javascript.el index 6a5e681..ef96348 100644 --- a/languages/javascript.el +++ b/languages/javascript.el @@ -7,12 +7,19 @@ :after (company flycheck) :hook ((before-save . tide-format-before-save))) +(use-package lsp-mode + :ensure t + :defer t + :hook (typescript-mode . lsp)) + ;; Use js2-mode for javascript editing (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode)) +(add-to-list 'auto-mode-alist '("\\.jsx\\'" . js2-mode)) (add-to-list 'auto-mode-alist '("\\.json\\'" . js2-mode)) ;; Use js2-mode for typescript editing -(add-to-list 'auto-mode-alist '("\\.ts\\'" . js2-mode)) +(add-to-list 'auto-mode-alist '("\\.ts\\'" . typescript-mode)) +(add-to-list 'auto-mode-alist '("\\.tsx\\'" . typescript-mode)) (defun activate-js2-mode () "JS2 mode overrides." @@ -36,3 +43,68 @@ '(company-yasnippet company-tide))) (add-hook 'js2-mode-hook 'activate-js2-mode) + +(defun activate-typescript-mode () + (set-indent 2) + (column-enforce-n 80)) + +;; Magic for LSP mode +(with-eval-after-load 'lsp-mode + ;; enable log only for debug + (setq lsp-log-io nil) + + ;; use `evil-matchit' instead + (setq lsp-enable-folding nil) + + ;; no real time syntax check + (setq lsp-diagnostic-package :none) + + ;; handle yasnippet by myself + (setq lsp-enable-snippet nil) + + ;; use `company-ctags' only. + ;; Please note `company-lsp' is automatically enabled if installed + (setq lsp-enable-completion-at-point nil) + + ;; turn off for better performance + (setq lsp-enable-symbol-highlighting nil) + + ;; use ffip instead + (setq lsp-enable-links nil) + + ;; auto restart lsp + (setq lsp-restart 'auto-restart) + + ;; @see https://github.com/emacs-lsp/lsp-mode/pull/1498 and code related to auto configure. + ;; Require clients could be slow. + ;; I only load `lsp-clients' because it includes the js client which I'm interested + (setq lsp-client-packages '(lsp-clients)) + + ;; don't scan 3rd party javascript libraries + (push "[/\\\\][^/\\\\]*\\.\\(json\\|html\\|jade\\)$" lsp-file-watch-ignored) ; json + + ;; don't ping LSP lanaguage server too frequently + (defvar lsp-on-touch-time 0) + (defadvice lsp-on-change (around lsp-on-change-hack activate) + ;; don't run `lsp-on-change' too frequently + (when (> (- (float-time (current-time)) + lsp-on-touch-time) 30) ;; 30 seconds + (setq lsp-on-touch-time (float-time (current-time))) + ad-do-it))) + +(defun my-connect-lsp (&optional no-reconnect) + "Connect lsp server. If NO-RECONNECT is t, don't shutdown existing lsp connection." + (interactive "P") + (when (and (not no-reconnect) + (fboundp 'lsp-disconnect)) + (lsp-disconnect)) + (when (and buffer-file-name + (not (member (file-name-extension buffer-file-name) + '("json")))) + (unless (and (boundp 'lsp-mode) lsp-mode) + (if (derived-mode-p 'js2-mode) (setq-local lsp-enable-imenu nil)) + (lsp-deferred)))) + + +(add-hook 'typescript-mode 'activate-typescript-mode) +(add-hook 'typescript-mode 'my-connect-lsp) diff --git a/languages/ruby.el b/languages/ruby.el index eaa833f..9b89a22 100644 --- a/languages/ruby.el +++ b/languages/ruby.el @@ -29,7 +29,7 @@ ;; Set specific ctags command (setq-local ctags/refresh-command - (format "ctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" + (format "uctags -e -R --languages=ruby -f %sTAGS %s. $(bundle list --paths)" (projectile-project-root) (projectile-project-root)))) (add-hook 'ruby-mode-hook 'enh-ruby-mode) diff --git a/languages/web.el b/languages/web.el index 5636dd1..d432136 100644 --- a/languages/web.el +++ b/languages/web.el @@ -3,6 +3,7 @@ ;; Eex Web mode (add-to-list 'auto-mode-alist '("\\.eex\\'" . web-mode)) +(add-to-list 'auto-mode-alist '("\\.leex\\'" . web-mode)) ;; ERB mode (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) @@ -18,6 +19,7 @@ (setq web-mode-extra-auto-pairs '(("eex" . (("<%" "%>"))) + ("leex" . (("<%" "%>"))) ("erb" . (("<%" "%>") ("beg" "end"))))) diff --git a/themes/themes.el b/themes/themes.el index e33ef01..b5a8f98 100644 --- a/themes/themes.el +++ b/themes/themes.el @@ -30,7 +30,7 @@ (sml/apply-theme 'respectful) (enable-theme (nth (random 2) - '(base16-zenburn-modified base16-material-palenight)))) + '(base16-zenburn-modified base16-atelier-forest-light)))) (progn (enable-theme 'base16-mexico-light) (setq base16-theme-256-color-source "base16-shell")))