From 3a01885db43120b1ebf6448a74915503e6cd98b0 Mon Sep 17 00:00:00 2001 From: Miquel Sabaté Solà Date: Thu, 2 Mar 2017 09:54:19 +0100 Subject: emacs: improved web-mode with stuff for js and jsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miquel Sabaté Solà --- emacs/init.html | 127 +++++++++++++++++++++++++++++++++----------------------- emacs/init.org | 59 ++++++++++++++++++-------- 2 files changed, 116 insertions(+), 70 deletions(-) diff --git a/emacs/init.html b/emacs/init.html index eea094a..13b6432 100644 --- a/emacs/init.html +++ b/emacs/init.html @@ -4,7 +4,7 @@ mssola's GNU Emacs configuration - + @@ -543,6 +543,12 @@ Never kill the scratch buffer, bury it instead. (if (equal buffer-to-kill "*scratch*") (bury-buffer) ad-do-it))) + +(defadvice kill-this-buffer (around kill-buffer-around-advice activate) + (let ((buffer-to-kill (ad-get-arg 0))) + (if (equal buffer-to-kill "*scratch*") + (bury-buffer) + ad-do-it))) @@ -770,7 +776,7 @@ require it here on the very top.
-
(use-package diminish
+
(use-package diminish
   :ensure t)
 
@@ -788,7 +794,7 @@ Ayo silver!
-
(use-package ag
+
(use-package ag
   :ensure t
   :config
 
@@ -810,12 +816,12 @@ Then, for keeping up with my projects I use the Projectile + Helm combination.
 
 
-
(use-package projectile
+
(use-package projectile
   :ensure t
   :config
   (projectile-mode 1))
 
-(use-package helm
+(use-package helm
   :ensure t
   :config
   (setq projectile-completion-system 'helm)
@@ -847,10 +853,10 @@ Then, for keeping up with my projects I use the Projectile + Helm combination.
   (define-key helm-map (kbd "C-j") 'helm-next-line)
   (define-key helm-map (kbd "C-k") 'helm-previous-line)
 
-  (use-package helm-ag
+  (use-package helm-ag
     :ensure t))
 
-(use-package helm-projectile
+(use-package helm-projectile
   :ensure t
   :config
   (helm-projectile-on)
@@ -963,10 +969,10 @@ extension. This works with lots of languages with proper glue code.
 
 
-
(use-package let-alist
+
(use-package let-alist
   :ensure t)
 
-(use-package flycheck
+(use-package flycheck
   :ensure t
   :diminish
   :config
@@ -989,7 +995,7 @@ with your editor, you have to increase/decrease the fonts. I use the
 
 
-
(use-package default-text-scale
+
(use-package default-text-scale
   :ensure t
   :config
   (global-set-key (kbd "C-+") 'default-text-scale-increase)
@@ -1006,7 +1012,7 @@ supports it).
 
 
-
(use-package rainbow-delimiters
+
(use-package rainbow-delimiters
   :ensure t)
 
@@ -1017,7 +1023,7 @@ I never use the mouse.
-
(use-package disable-mouse
+
(use-package disable-mouse
   :ensure t
   :config
   (global-disable-mouse-mode)
@@ -1033,7 +1039,7 @@ commands for the current chord as a list.
 
 
-
(use-package which-key
+
(use-package which-key
   :ensure t)
 
@@ -1045,7 +1051,7 @@ this, we have wc-mode.
-
(use-package wc-mode
+
(use-package wc-mode
   :ensure t)
 
@@ -1057,7 +1063,7 @@ that often, but it's cool to have a distraction-free screen from time to time.
-
(use-package writeroom-mode
+
(use-package writeroom-mode
   :ensure t)
 
@@ -1070,7 +1076,7 @@ most of my uses, it's convenient to have this tool anyways.
-
(use-package expand-region
+
(use-package expand-region
   :ensure t
   :config
 
@@ -1104,7 +1110,7 @@ snippets in another buffer.
 
 
-
(use-package yasnippet
+
(use-package yasnippet
   :ensure t
   :diminish yas-minor-mode
   :init (yas-global-mode)
@@ -1264,7 +1270,7 @@ Now make sure that Evil is installed, and call the relevant configuration functi
 
 
-
(use-package evil
+
(use-package evil
   :ensure t
   :config
 
@@ -1294,7 +1300,7 @@ Vim into Evil.
 
 
-
(use-package evil-leader
+
(use-package evil-leader
   :ensure t
   :config
   (global-evil-leader-mode)
@@ -1321,7 +1327,7 @@ having double quotes with single quotes in a single command).
 
 
-
(use-package evil-surround
+
(use-package evil-surround
   :ensure t
   :config
   (global-evil-surround-mode 1))
@@ -1337,7 +1343,7 @@ the current line, regardless of the programming language.
 
 
-
(use-package evil-commentary
+
(use-package evil-commentary
   :ensure t
   :config
   (evil-commentary-mode t))
@@ -1353,7 +1359,7 @@ respectively.
 
 
-
(use-package evil-args
+
(use-package evil-args
   :ensure t
   :config
   ; Configuration taken from the documentation of evil-args.
@@ -1379,7 +1385,7 @@ into Evil: C-a for increasing a number, and
 
 
-
(use-package evil-numbers
+
(use-package evil-numbers
   :ensure t
   :config
   (define-key evil-normal-state-map (kbd "C-a") 'evil-numbers/inc-at-pt)
@@ -1399,7 +1405,7 @@ certainly useful for some common tasks (I guess that I still need some learning)
 
 
-
(use-package magit
+
(use-package magit
   :ensure t
   :config
 
@@ -1452,7 +1458,7 @@ And repair some key bindings from Evil mode.
(with-eval-after-load 'evil-leader
   (evil-leader/set-key "s" 'magit-status)
 
-  (use-package evil-magit
+  (use-package evil-magit
     :ensure t
     :config
 
@@ -1800,7 +1806,7 @@ I want desktop notifications when receiving email.
 
 
-
(use-package mu4e-alert
+
(use-package mu4e-alert
   :ensure t
   :config
 
@@ -1816,7 +1822,7 @@ I want desktop notifications when receiving email.
 
 ; Evil mode in mu4e
 (with-eval-after-load 'evil
-  (use-package evil-mu4e
+  (use-package evil-mu4e
     :ensure t
     :config
 
@@ -1960,7 +1966,7 @@ blocks to be converted into HTML as well, so we can properly colorize it).
 
 
-
(use-package htmlize
+
(use-package htmlize
   :ensure t)
 
@@ -2167,7 +2173,7 @@ I'm giving ERC a chance. First of all, I'm setting up basic stuff.
-
(use-package erc
+
(use-package erc
   :config
 
   (erc-track-mode t)
@@ -2210,7 +2216,7 @@ Use the erc-hl-nicks package, so highlight support for nicknames is
 
 
-
(use-package erc-hl-nicks
+
(use-package erc-hl-nicks
   :ensure t
   :init
   (with-eval-after-load 'erc
@@ -2412,18 +2418,18 @@ And now my Go configuration. This includes stuff like the usage of goimpor
   (flyspell-prog-mode)
 
   ; eldoc support
-  (use-package go-eldoc
+  (use-package go-eldoc
     :ensure t
     :config
     (require 'go-eldoc))
 
-  (use-package go-add-tags
+  (use-package go-add-tags
     :ensure t
     :config
     (evil-leader/set-key "t" 'go-add-tags)))
 
 ;; Go
-(use-package go-mode
+(use-package go-mode
   :ensure t
   :pin melpa-stable
   :config
@@ -2447,7 +2453,7 @@ usings tabs for indentation (C, C++ and Go).
 
 
-
(use-package smart-tabs-mode
+
(use-package smart-tabs-mode
   :ensure t
   :config
   (smart-tabs-add-language-support golang go-mode-hook
@@ -2465,7 +2471,7 @@ usings tabs for indentation (C, C++ and Go).
 
;; Markdown mode with preview mode in the browser.
-(use-package markdown-mode
+(use-package markdown-mode
   :ensure t
   :config
 
@@ -2475,14 +2481,14 @@ usings tabs for indentation (C, C++ and Go).
 
   ; Preview mode does its things through websockets, so it's a requirement.
   ; After that, we can safely require it.
-  (use-package websocket
+  (use-package websocket
     :ensure t
     :config
-    (use-package markdown-preview-mode
+    (use-package markdown-preview-mode
       :ensure t)))
 
 ; YAML
-(use-package yaml-mode
+(use-package yaml-mode
   :ensure t
   :config
 
@@ -2501,17 +2507,17 @@ Slim and SCSS.
 
 
-
(use-package slim-mode
+
(use-package slim-mode
   :ensure t)
 
-(use-package scss-mode
+(use-package scss-mode
   :ensure t
   :config
 
   (setq scss-compile-at-save nil)
   (add-hook 'yaml-mode-hook 'warnings-mode-hook))
 
-(use-package coffee-mode
+(use-package coffee-mode
   :ensure t)
 
@@ -2523,10 +2529,10 @@ bundle of features which are interesting for web-related stuff.
-
(use-package php-mode
+
(use-package php-mode
   :ensure t)
 
-(use-package web-mode
+(use-package web-mode
   :ensure t
   :config
 
@@ -2538,7 +2544,24 @@ bundle of features which are interesting for web-related stuff.
             (lambda ()
               (setq web-mode-markup-indent-offset 2)
               (setq web-mode-css-indent-offset 2)
-              (setq web-mode-code-indent-offset 2))))
+              (setq web-mode-code-indent-offset 2)))
+
+  (add-hook 'js-mode-hook
+            (lambda ()
+              (setq js-indent-level 2)
+              (rainbow-delimiters-mode 1)))
+
+  ; React: treat it as a derived mode. Idea taken from spacemacs.
+  (define-derived-mode react-mode web-mode "react")
+  (add-to-list 'auto-mode-alist '("\\.jsx\\'" . react-mode))
+  (add-to-list 'auto-mode-alist '("\\.react.js\\'" . react-mode))
+
+  (add-hook 'react-mode-hook
+            (lambda ()
+              (yas-activate-extra-mode 'js-mode)
+              (web-mode-set-content-type "jsx")
+              (setq-local web-mode-enable-auto-quoting nil)
+              (rainbow-delimiters 1))))
 
@@ -2550,7 +2573,7 @@ can be frustrating without proper formatting.
-
(use-package json-reformat
+
(use-package json-reformat
   :ensure t)
 
@@ -2566,7 +2589,7 @@ CMake for y'all.
-
(use-package cmake-mode
+
(use-package cmake-mode
   :ensure t
   :config
 
@@ -2576,7 +2599,7 @@ CMake for y'all.
          '(("\\.cmake\\'" . cmake-mode))
          auto-mode-alist))
 
-  (use-package cmake-font-lock
+  (use-package cmake-font-lock
     :ensure t
     :config
 
@@ -2592,19 +2615,19 @@ now because it's buggy, but I still have hope.
 
 
-
(use-package dockerfile-mode
+
(use-package dockerfile-mode
   :ensure t
   :config
 
   (add-to-list 'auto-mode-alist '("Dockerfile\\'" . dockerfile-mode)))
 
-(use-package terraform-mode
+(use-package terraform-mode
   :ensure t
   :config
 
   (terraform-format-on-save-mode))
 
-(use-package hcl-mode
+(use-package hcl-mode
   :ensure t)
 
 ;(use-package salt-mode
@@ -2678,7 +2701,7 @@ too many things into my leader and these shortcuts look sensible to me).
 
 
-
(use-package crux
+
(use-package crux
   :ensure t
   :config
 
@@ -2743,7 +2766,7 @@ along with this program.  If not, see <
 
diff --git a/emacs/init.org b/emacs/init.org index 424cdcd..56b105f 100644 --- a/emacs/init.org +++ b/emacs/init.org @@ -270,11 +270,17 @@ Remove the initial message from the scratch buffer. Never kill the scratch buffer, bury it instead. #+BEGIN_SRC elisp - (defadvice kill-buffer (around kill-buffer-around-advice activate) - (let ((buffer-to-kill (ad-get-arg 0))) - (if (equal buffer-to-kill "*scratch*") - (bury-buffer) - ad-do-it))) +(defadvice kill-buffer (around kill-buffer-around-advice activate) + (let ((buffer-to-kill (ad-get-arg 0))) + (if (equal buffer-to-kill "*scratch*") + (bury-buffer) + ad-do-it))) + +(defadvice kill-this-buffer (around kill-buffer-around-advice activate) + (let ((buffer-to-kill (ad-get-arg 0))) + (if (equal buffer-to-kill "*scratch*") + (bury-buffer) + ad-do-it))) #+END_SRC No backups @@ -1801,22 +1807,39 @@ Languages specific for backend code like PHP, and =web-mode=, which provides a bundle of features which are interesting for web-related stuff. #+BEGIN_SRC elisp - (use-package php-mode - :ensure t) +(use-package php-mode + :ensure t) - (use-package web-mode - :ensure t - :config +(use-package web-mode + :ensure t + :config - (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) - (add-to-list 'auto-mode-alist '("\\.jinja\\'" . web-mode)) - (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.erb\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.jinja\\'" . web-mode)) + (add-to-list 'auto-mode-alist '("\\.html?\\'" . web-mode)) - (add-hook 'web-mode-hook - (lambda () - (setq web-mode-markup-indent-offset 2) - (setq web-mode-css-indent-offset 2) - (setq web-mode-code-indent-offset 2)))) + (add-hook 'web-mode-hook + (lambda () + (setq web-mode-markup-indent-offset 2) + (setq web-mode-css-indent-offset 2) + (setq web-mode-code-indent-offset 2))) + + (add-hook 'js-mode-hook + (lambda () + (setq js-indent-level 2) + (rainbow-delimiters-mode 1))) + + ; React: treat it as a derived mode. Idea taken from spacemacs. + (define-derived-mode react-mode web-mode "react") + (add-to-list 'auto-mode-alist '("\\.jsx\\'" . react-mode)) + (add-to-list 'auto-mode-alist '("\\.react.js\\'" . react-mode)) + + (add-hook 'react-mode-hook + (lambda () + (yas-activate-extra-mode 'js-mode) + (web-mode-set-content-type "jsx") + (setq-local web-mode-enable-auto-quoting nil) + (rainbow-delimiters 1)))) #+END_SRC The =json-reformat= package provides functions for reformatting JSON strings. It -- cgit v1.2.3