[Emacs] Add packages, reorganize headings
Add LSP mode and LSP-related packages Add CMake-related packages Add C/C++ configuration Add Common Lisp configuration Remove smartparens-mode for EmacsLisp Add Lua configuration Add Rust configuration Add Web programming config, including: - Javascript - web-mode - Css - Scss
This commit is contained in:
parent
de3f34e988
commit
ff624ab8da
@ -3510,6 +3510,173 @@ icons!
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages6et5fl6184j0
|
||||
:END:
|
||||
*** Tools
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-Tools-w3q5rsg0k4j0
|
||||
:END:
|
||||
**** Flycheck
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-Flycheckb446fl6184j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package flycheck
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:init
|
||||
(global-flycheck-mode)
|
||||
:config
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
|
||||
;; Rerunning checks on every newline is a mote excessive.
|
||||
(delq 'new-line flycheck-check-syntax-automatically)
|
||||
;; And don’t recheck on idle as often
|
||||
(setq flycheck-idle-change-delay 2.0)
|
||||
|
||||
;; For the above functionality, check syntax in a buffer that you
|
||||
;; switched to on briefly. This allows “refreshing” the syntax check
|
||||
;; state for several buffers quickly after e.g. changing a config
|
||||
;; file.
|
||||
(setq flycheck-buffer-switch-check-intermediate-buffers t)
|
||||
|
||||
;; Display errors a little quicker (default is 0.9s)
|
||||
(setq flycheck-display-errors-delay 0.2))
|
||||
|
||||
(use-package flycheck-popup-tip
|
||||
:straight (:build t)
|
||||
:after flycheck
|
||||
:hook (flycheck-mode . flycheck-popup-tip-mode)
|
||||
:config
|
||||
(setq flycheck-popup-tip-error-prefix "X ")
|
||||
(after! evil
|
||||
(add-hook 'evil-insert-state-entry-hook
|
||||
#'flycheck-popup-tip-delete-popup)
|
||||
(add-hook 'evil-replace-state-entry-hook
|
||||
#'flycheck-popup-tip-delete-popup)))
|
||||
|
||||
(use-package flycheck-posframe
|
||||
:straight (:build t)
|
||||
:hook (flycheck-mode . flycheck-posframe-mode)
|
||||
:config
|
||||
(setq flycheck-posframe-warning-prefix "! "
|
||||
flycheck-posframe-info-prefix "··· "
|
||||
flycheck-posframe-error-prefix "X "))
|
||||
#+end_src
|
||||
|
||||
**** LSP-Mode
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-Tools-LSP-Mode-g4v5rsg0k4j0
|
||||
:END:
|
||||
[[https://emacs-lsp.github.io/lsp-mode/][~lsp-mode~]] is a mode for Emacs which implements the [[https://github.com/Microsoft/language-server-protocol/][Language Server
|
||||
Protocol]] and offers Emacs an IDE-like experience. In short, it’s
|
||||
awesome!
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-mode
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:init
|
||||
(setq lsp-keymap-prefix "C-c l")
|
||||
;; (dolist (hook '(rust-mode-hook
|
||||
;; c-mode-hook
|
||||
;; c++-mode-hook
|
||||
;; css-mode-hook
|
||||
;; html-mode-hook
|
||||
;; lua-mode-hook
|
||||
;; rust-mode-hook
|
||||
;; dockerfile-mode-hook))
|
||||
;; (add-hook hook #'lsp-deferred))
|
||||
|
||||
;; (dolist (mode '(#'lsp-enable-which-key-integration
|
||||
;; #'lsp-ui-mode))
|
||||
;; (add-hook 'lsp-mode-hook mode))
|
||||
:hook ((rust-mode . lsp-deferred)
|
||||
(c-mode . lsp-deferred)
|
||||
(c++-mode . lsp-deferred)
|
||||
(css-mode . lsp-deferred)
|
||||
(html-mode . lsp-deferred)
|
||||
(lua-mode . lsp-deferred)
|
||||
(rust-mode . lsp-deferred)
|
||||
(dockerfile-mode . lsp-deferred)
|
||||
(lsp-mode . lsp-enable-which-key-integration)
|
||||
(lsp-mode . lsp-ui-mode))
|
||||
:commands (lsp lsp-deferred)
|
||||
:custom
|
||||
(lsp-rust-analyzer-cargo-watch-command "clippy")
|
||||
(lsp-eldoc-render-all t)
|
||||
(lsp-idle-delay 0.6)
|
||||
(lsp-rust-analyzer-server-display-inlay-hints t))
|
||||
#+end_src
|
||||
|
||||
I also want all the visual enhancements LSP can provide.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-ui
|
||||
:after lsp
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:commands lsp-ui-mode
|
||||
:custom
|
||||
(lsp-ui-peek-always-show t)
|
||||
(lsp-ui-sideline-show-hover t)
|
||||
(lsp-ui-doc-enable t)
|
||||
:config
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
:keymaps 'lsp-ui-peek-mode-map
|
||||
:prefix ","
|
||||
"c" #'lsp-ui-pook--select-prev-file
|
||||
"t" #'lsp-ui-pook--select-next
|
||||
"s" #'lsp-ui-pook--select-prev
|
||||
"r" #'lsp-ui-pook--select-next-file))
|
||||
#+end_src
|
||||
|
||||
And let’s enable some intergration with ~ivy~.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-ivy
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:after lsp
|
||||
:commands lsp-ivy-workspace-symbol)
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-treemacs
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:requires treemacs)
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package exec-path-from-shell
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:init (exec-path-from-shell-initialize))
|
||||
#+end_src
|
||||
|
||||
~dap-mode~ is an advanced debugging mode that works through lsp.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package dap-mode
|
||||
:after lsp
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:config
|
||||
(dap-ui-mode)
|
||||
(dap-ui-controls-mode 1)
|
||||
|
||||
(require 'dap-lldb)
|
||||
(require 'dap-gdb-lldb)
|
||||
|
||||
(dap-gdb-lldb-setup)
|
||||
(dap-register-debug-template
|
||||
"Rust::LLDB Run Configuration"
|
||||
(list :type "lldb"
|
||||
:request "launch"
|
||||
:name "LLDB::Run"
|
||||
:gdbpath "rust-lldb"
|
||||
:target nil
|
||||
:cwd nil)))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
|
||||
*** DSLs
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-DSLsbwu5fl6184j0
|
||||
@ -3537,6 +3704,49 @@ Caddy files natively, so let’s install ~caddyfile-mode~:
|
||||
("caddy\\.conf\\'" . caddyfile-mode)))
|
||||
#+end_src
|
||||
|
||||
**** CMake
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-DSLs-CMake-vpqkiyp0m5j0
|
||||
:END:
|
||||
CMake is one of the standard tools for indicating how a project should
|
||||
be built. It is not as standard as some other tools such as automake,
|
||||
autoconfig, and the likes, but still pretty standard. CMake however
|
||||
doesn’t have a major mode available by default, so let’s provide one.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package cmake-mode
|
||||
:defer t
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
|
||||
Let’s enable first some autocompletion for it.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package company-cmake
|
||||
:straight (company-cmake :build t
|
||||
:type git
|
||||
:host github
|
||||
:repo "purcell/company-cmake")
|
||||
:after cmake-mode
|
||||
:defer t)
|
||||
#+end_src
|
||||
|
||||
And let’s also enable a more advanced CMake fontlock.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package cmake-font-lock
|
||||
:defer t
|
||||
:after cmake-mode
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
And finally, let’s enable some Eldoc integration for CMake.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package eldoc-cmake
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:after cmake-mode)
|
||||
#+end_src
|
||||
|
||||
**** Gnuplot
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-DSLs-Gnuplot8zx5fl6184j0
|
||||
@ -3609,58 +3819,71 @@ config]]), therefore I need a mode for it.
|
||||
:mode "\\.yaml\\'")
|
||||
#+end_src
|
||||
|
||||
*** Flycheck
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-Flycheckb446fl6184j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package flycheck
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:init
|
||||
(global-flycheck-mode)
|
||||
:config
|
||||
(setq flycheck-emacs-lisp-load-path 'inherit)
|
||||
|
||||
;; Rerunning checks on every newline is a mote excessive.
|
||||
(delq 'new-line flycheck-check-syntax-automatically)
|
||||
;; And don’t recheck on idle as often
|
||||
(setq flycheck-idle-change-delay 2.0)
|
||||
|
||||
;; For the above functionality, check syntax in a buffer that you
|
||||
;; switched to on briefly. This allows “refreshing” the syntax check
|
||||
;; state for several buffers quickly after e.g. changing a config
|
||||
;; file.
|
||||
(setq flycheck-buffer-switch-check-intermediate-buffers t)
|
||||
|
||||
;; Display errors a little quicker (default is 0.9s)
|
||||
(setq flycheck-display-errors-delay 0.2))
|
||||
|
||||
(use-package flycheck-popup-tip
|
||||
:straight (:build t)
|
||||
:after flycheck
|
||||
:hook (flycheck-mode . flycheck-popup-tip-mode)
|
||||
:config
|
||||
(setq flycheck-popup-tip-error-prefix "X ")
|
||||
(after! evil
|
||||
(add-hook 'evil-insert-state-entry-hook
|
||||
#'flycheck-popup-tip-delete-popup)
|
||||
(add-hook 'evil-replace-state-entry-hook
|
||||
#'flycheck-popup-tip-delete-popup)))
|
||||
|
||||
(use-package flycheck-posframe
|
||||
:straight (:build t)
|
||||
:hook (flycheck-mode . flycheck-posframe-mode)
|
||||
:config
|
||||
(setq flycheck-posframe-warning-prefix "! "
|
||||
flycheck-posframe-info-prefix "··· "
|
||||
flycheck-posframe-error-prefix "X "))
|
||||
#+end_src
|
||||
|
||||
*** General Programming Languages
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languageszn56fl6184j0
|
||||
:END:
|
||||
**** C/C++
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-C-C-2nfcmoz0i5j0
|
||||
:END:
|
||||
I know, I know, C and C++ no longer are closely related languages,
|
||||
each one of them went their own way and learning C won’t make you a
|
||||
good C++ programmer, neither will the other way around. But, They are
|
||||
still somewhat related, and Emacs thinks so too.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package cc-mode
|
||||
:straight (:type built-in)
|
||||
:defer t
|
||||
:init
|
||||
(put 'c-c++-backend 'safe-local-variable 'symbolp)
|
||||
:config
|
||||
(progn
|
||||
(require 'compile)
|
||||
(general-define-key
|
||||
:keymaps '(c-mode-map c++-mode-map)
|
||||
"," nil
|
||||
";" nil)
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
:keymaps '(c-mode-map c++-mode-map)
|
||||
:prefix ","
|
||||
"l" '(:keymap lsp-command-map :which-key "lsp" :package lsp-mode))
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
:keymaps '(c-mode-map c++-mode-map)
|
||||
"ga" #'projectile-find-other-file
|
||||
"gA" #'projectile-find-other-file-other-window)))
|
||||
#+end_src
|
||||
|
||||
Something that is also important when working with these languages is
|
||||
respecting the ~.clang-format~ file that may be provided by a project.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package clang-format+
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:init
|
||||
(add-hook 'c-mode-common-hook #'clang-format+-mode))
|
||||
#+end_src
|
||||
|
||||
However, Emacs’ notion of C++ is somewhat outdated, so we need to
|
||||
update its fontlock.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package modern-cpp-font-lock
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:hook (c++-mode . modern-c++-font-lock-mode))
|
||||
#+end_src
|
||||
|
||||
**** CommonLisp
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-CommonLisp-gc2a7s31q5j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(add-hook 'lisp-mode-hook #'parinfer-rust-mode)
|
||||
(add-hook 'lisp-mode-hook (lambda () (smartparens-mode -1)))
|
||||
#+end_src
|
||||
|
||||
**** EmacsLisp
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-EmacsLispo876fl6184j0
|
||||
@ -3678,6 +3901,10 @@ in the echo area at the bottom of the frame. Quite useful indeed.
|
||||
'company-abort))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(add-hook 'emacs-lisp-mode-hook (lambda () (smartparens-mode -1)))
|
||||
#+end_src
|
||||
|
||||
Let’s also declare some Elisp-dedicated keybindings, prefixed by a
|
||||
comma.
|
||||
#+begin_src emacs-lisp
|
||||
@ -3705,6 +3932,237 @@ comma.
|
||||
"tPp" #'parinfer-rust-toggle-paren-mode)
|
||||
#+end_src
|
||||
|
||||
**** Lua
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-Lua-p2odc7p0t4j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lua-mode
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:mode "\\.lua$"
|
||||
:interpreter "lua"
|
||||
:init
|
||||
(setq lua-indent-level 2
|
||||
lua-indent-string-contents t))
|
||||
;; (general-define-key
|
||||
;; :keymaps lua-mode-map
|
||||
;; :states 'normal
|
||||
;; :prefix ","
|
||||
;; "'" #'lua-show-process-buffer
|
||||
;; "h" '(:ignore :wk "help")
|
||||
;; "hd" #'lua-search-documentation
|
||||
;; "s" '(:ignore :wk "REPL")
|
||||
;; "sb" #'lua-send-buffer
|
||||
;; "sf" #'lua-send-defun
|
||||
;; "sl" #'lua-send-current-line
|
||||
;; "sr" #'lua-send-region))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package lsp-lua-emmy
|
||||
:defer t
|
||||
:after (lua-mode lsp-mode)
|
||||
:straight (lsp-lua-emmy :build t
|
||||
:type git
|
||||
:host github
|
||||
:repo "EmmyLua/EmmyLua-LanguageServer")
|
||||
:hook (lua-mode . lsp-deferred)
|
||||
:config
|
||||
(setq lsp-lua-emmy-jar-path (expand-file-name "EmmyLua-LS-all.jar" user-emacs-directory)))
|
||||
|
||||
#+end_src
|
||||
|
||||
**** Rust
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-Rust-n3jhh5h0k4j0
|
||||
:END:
|
||||
Rust is a general programming language, akin to C++ in some ways, but
|
||||
much more oriented towards safe code, and much better suited for web
|
||||
development. First, let’s install the most important package,
|
||||
~rustic~.
|
||||
#+begin_src emacs-lisp
|
||||
(use-package rustic
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:mode ("\\.rs$" . rustic-mode)
|
||||
:init
|
||||
(after! org-src
|
||||
(defalias 'org-babel-execute:rust #'org-babel-execute:rustic)
|
||||
(add-to-list 'org-src-lang-modes '("rust" . rustic)))
|
||||
:general
|
||||
(:keymaps 'rustic-mode-map
|
||||
"M-t" #'lsp-ui-imenu
|
||||
"M-?" #'lsp-find-references)
|
||||
(:keymaps 'rustic-mode-map
|
||||
:states 'normal
|
||||
:prefix ","
|
||||
"b" '(:ignore :which-key "build")
|
||||
"bb" #'rustic-cargo-build
|
||||
"bB" #'rustic-cargo-bench
|
||||
"bc" #'rustic-cargo-check
|
||||
"bC" #'rustic-cargo-clippy
|
||||
"bd" #'rustic-cargo-doc
|
||||
"bf" #'rustic-cargo-fmt
|
||||
"bn" #'rustic-cargo-new
|
||||
"bo" #'rustic-cargo-outdated
|
||||
"br" #'rustic-cargo-run
|
||||
"l" '(:ignore :which-key "lsp")
|
||||
"la" #'lsp-execute-code-action
|
||||
"lr" #'lsp-rename
|
||||
"lq" #'lsp-workspace-restart
|
||||
"lQ" #'lsp-workspace-shutdown
|
||||
"ls" #'lsp-rust-analyzer-status
|
||||
"t" '(:ignore :which-key "cargo test")
|
||||
"ta" #'rustic-cargo-test
|
||||
"tt" #'rustic-cargo-current-test)
|
||||
:config
|
||||
(setq rustic-indent-method-chain t
|
||||
rustic-babel-format-src-block nil
|
||||
rustic-format-trigger nil)
|
||||
(remove-hook 'rustic-mode-hook #'flycheck-mode)
|
||||
(remove-hook 'rustic-mode-hook #'flymake-mode-off)
|
||||
(remove-hook 'rustic-mode-hook #'rustic-setup-lsp)
|
||||
(add-hook 'rustic-mode-local-vars-hook #'rustic-setup-lsp)
|
||||
(setq rustic-lsp-client 'lsp-mode))
|
||||
#+end_src
|
||||
|
||||
#+RESULTS:
|
||||
|
||||
**** Web programming
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-Web-programming-7ca40po085j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package company-web
|
||||
:defer t
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package emmet-mode
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:hook ((css-mode . emmet-mode)
|
||||
(html-mode . emmet-mode)
|
||||
(web-mode . emmet-mode)
|
||||
(sass-mode . emmet-mode)
|
||||
(scss-mode . emmet-mode)
|
||||
(web-mode . emmet-mode))
|
||||
:config
|
||||
(general-define-key
|
||||
:keymaps 'emmet-mode-keymap
|
||||
"C-RET" #'emmet-expand-yas))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package impatient-mode
|
||||
:straight (:build t)
|
||||
:defer t)
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package slim-mode
|
||||
:defer t
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package web-mode
|
||||
:defer t
|
||||
:straight (:build t)
|
||||
:hook ((html-mode . web-mode))
|
||||
:mode (("\\.phtml\\'" . web-mode)
|
||||
("\\.tpl\\.php\\'" . web-mode)
|
||||
("\\.twig\\'" . web-mode)
|
||||
("\\.xml\\'" . web-mode)
|
||||
("\\.html\\'" . web-mode)
|
||||
("\\.htm\\'" . web-mode)
|
||||
("\\.[gj]sp\\'" . web-mode)
|
||||
("\\.as[cp]x?\\'" . web-mode)
|
||||
("\\.eex\\'" . web-mode)
|
||||
("\\.erb\\'" . web-mode)
|
||||
("\\.mustache\\'" . web-mode)
|
||||
("\\.handlebars\\'" . web-mode)
|
||||
("\\.hbs\\'" . web-mode)
|
||||
("\\.eco\\'" . web-mode)
|
||||
("\\.ejs\\'" . web-mode)
|
||||
("\\.svelte\\'" . web-mode)
|
||||
("\\.ctp\\'" . web-mode)
|
||||
("\\.djhtml\\'" . web-mode))
|
||||
:config
|
||||
(general-define-key
|
||||
:states 'normal
|
||||
:prefix ","
|
||||
:keymaps 'web-mode-map
|
||||
"=" '(nil :which-key "format")
|
||||
"E" '(nil :which-key "errors")
|
||||
"El" #'web-mode-dom-errors-show
|
||||
"gb" #'web-mode-element-beginning
|
||||
"g" '(nil :which-key "goto")
|
||||
"gc" #'web-mode-element-child
|
||||
"gp" #'web-mode-element-parent
|
||||
"gs" #'web-mode-element-sibling-next
|
||||
"h" '(nil :which-key "dom")
|
||||
"hp" #'web-mode-dom-xpath
|
||||
"r" '(nil :which-key "refactor")
|
||||
"rc" #'web-mode-element-clone
|
||||
"rd" #'web-mode-element-vanish
|
||||
"rk" #'web-mode-element-kill
|
||||
"rr" #'web-mode-element-rename
|
||||
"rw" #'web-mode-element-wrap
|
||||
"z" #'web-mode-fold-or-unfold))
|
||||
#+end_src
|
||||
|
||||
***** Javascript
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-Web-programming-Javascript-8k5arup085j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(use-package prettier-js
|
||||
:defer t
|
||||
:straight (:build t))
|
||||
#+end_src
|
||||
|
||||
***** CSS
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Programming-languages-General-Programming-Languages-Web-programming-CSS-que40po085j0
|
||||
:END:
|
||||
#+begin_src emacs-lisp
|
||||
(add-hook 'css-mode-hook #'smartparens-mode)
|
||||
(put 'css-indent-offset 'safe-local-variable #'integerp)
|
||||
(after! css-mode
|
||||
(general-define-key
|
||||
:keymaps '(css-mode-map)
|
||||
:states 'normal
|
||||
:prefix ","
|
||||
"=" '(:ignore :wk "format")
|
||||
"g" '(:ignore :wk "goto")))
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package scss-mode
|
||||
:straight (:build t)
|
||||
:hook (scss-mode . smartparens-mode)
|
||||
:defer t
|
||||
:mode "\\.scss\\'")
|
||||
#+end_src
|
||||
|
||||
#+begin_src emacs-lisp
|
||||
(use-package counsel-css
|
||||
:straight (:build t)
|
||||
:defer t
|
||||
:init
|
||||
(cl-loop for (mode-map . mode-hook) in '((css-mode-map . css-mode-hook)
|
||||
(scss-mode-map . scss-mode-hook))
|
||||
do (add-hook mode-hook #'counsel-css-imenu-setup)
|
||||
(general-define-key
|
||||
:keymaps mode-map
|
||||
:states 'normal
|
||||
:prefix ","
|
||||
"gh" #'counsel-css)))
|
||||
#+end_src
|
||||
|
||||
** Visual Configuration
|
||||
:PROPERTIES:
|
||||
:CUSTOM_ID: Packages-Configuration-Visual-Configurationxr86fl6184j0
|
||||
|
Loading…
Reference in New Issue
Block a user