[emacs] assimilate highlight-indent-guides
[~bandali/configs] / init.org
index 81c652e..206b6be 100644 (file)
--- a/init.org
+++ b/init.org
@@ -444,6 +444,15 @@ compilation."
                `(after! (:all ,@features) ,@body)))))
 #+end_src
 
+Convenience macro for =setq='ing multiple variables to the same value:
+
+#+begin_src emacs-lisp
+(defmacro setq-every! (value &rest vars)
+  "Set all the variables from VARS to value VALUE."
+  (declare (indent defun) (debug t))
+  `(progn ,@(mapcar (lambda (x) (list 'setq x value)) vars)))
+#+end_src
+
 * Core
 :PROPERTIES:
 :CUSTOM_ID: core
@@ -577,7 +586,8 @@ variable.
 
 #+begin_src emacs-lisp
 (setq backup-by-copying t
-      version-control t)
+      version-control t
+      delete-old-versions t)
 #+end_src
 
 *** Auto revert
@@ -607,6 +617,20 @@ Enable =winner-mode=.
 (winner-mode 1)
 #+end_src
 
+*** Close =*compilation*= on success
+
+#+begin_src emacs-lisp
+(setq compilation-exit-message-function
+      (lambda (status code msg)
+        "Close the compilation window if successful."
+        ;; if M-x compile exits with 0
+         (when (and (eq status 'exit) (zerop code))
+           (bury-buffer)
+           (delete-window (get-buffer-window (get-buffer "*compilation*"))))
+         ;; return the result of compilation-exit-message-function
+         (cons msg code)))
+#+end_src
+
 ** Bindings
 
 #+begin_src emacs-lisp
@@ -679,6 +703,9 @@ file.
   (defvar amin-show-async-tangle-time nil
     "Show the time spent tangling the file.")
 
+  (defvar amin-async-tangle-post-compile "make ti"
+    "If non-nil, pass to `compile' after successful tangle.")
+
   (defun amin/async-babel-tangle ()
     "Tangle org file asynchronously."
     (interactive)
@@ -693,13 +720,16 @@ file.
        (unless amin-show-async-tangle-results
          `(lambda (result)
             (if result
-                (message "Tangled %s%s"
-                         ,file-nodir
-                         (if amin-show-async-tangle-time
-                             (format " (%.3fs)"
-                                     (float-time (time-subtract (current-time)
-                                                                ',file-tangle-start-time)))
-                           ""))
+                (progn
+                  (message "Tangled %s%s"
+                           ,file-nodir
+                           (if amin-show-async-tangle-time
+                               (format " (%.3fs)"
+                                       (float-time (time-subtract (current-time)
+                                                                  ',file-tangle-start-time)))
+                             ""))
+                  (when amin-async-tangle-post-compile
+                    (compile amin-async-tangle-post-compile)))
               (message "Tangling %s failed" ,file-nodir))))))))
 
 (add-to-list
@@ -1146,6 +1176,48 @@ instead.
   :bind (:map haskell-mode-map
               ("C-c l l" . hs-lint)))
 #+end_src
+
+** Web dev
+
+*** SGML and HTML
+
+#+begin_src emacs-lisp
+(use-package sgml-mode
+  :config
+  (setq sgml-basic-offset 2))
+#+end_src
+
+*** CSS and SCSS
+
+#+begin_src emacs-lisp
+(use-package css-mode
+  :config
+  (setq css-indent-offset 2))
+#+end_src
+
+*** Web mode
+
+#+begin_src emacs-lisp
+(use-package web-mode
+  :mode "\\.html\\'"
+  :config
+  (setq-every! 2
+    web-mode-code-indent-offset
+    web-mode-css-indent-offset
+    web-mode-markup-indent-offset))
+#+end_src
+
+*** Emmet mode
+
+#+begin_src emacs-lisp
+(use-package emmet-mode
+  :bind* (("C-)" . emmet-next-edit-point)
+          ("C-(" . emmet-prev-edit-point))
+  :init
+  (setq emmet-move-cursor-between-quotes t)
+  :hook (web-mode css-mode html-mode sgml-mode))
+#+end_src
+
 * Emacs Enhancements
 
 ** [[https://github.com/justbur/emacs-which-key][which-key]]
@@ -1228,25 +1300,6 @@ Emacs package that displays available keybindings in popup
                    :after #'my-projectile-invalidate-cache))))
 #+end_src
 
-** [[https://github.com/wasamasa/shackle][shackle]]
-
-#+begin_src emacs-lisp
-(use-package shackle
-  :demand t
-  :commands shackle-mode
-  :config
-  (shackle-mode 1)
-  (setq shackle-rules
-        '(("*Help*" :align right :select t :size 0.5)
-          ("\\`\\*helm.*?\\*\\'" :regexp t :align t)
-          ((compilation-mode "\\`\\*magit-diff: .*?\\'") :regexp t :noselect t)
-          ("*magit-dispatch-popup*" :align bottom)
-          ((inferior-scheme-mode "*shell*" "*eshell*") :popup t))
-        shackle-default-rule '(:select t)
-        shackle-default-size 0.4
-        shackle-inhibit-window-quit-on-same-windows t))
-#+end_src
-
 ** [[https://github.com/Wilfred/helpful][helpful]]
 
 #+begin_src emacs-lisp
@@ -1264,13 +1317,76 @@ Emacs package that displays available keybindings in popup
 
 #+begin_src emacs-lisp
 (use-package shell-pop
-  :config
-  (add-to-list 'shackle-rules '("\\*eshell\\*" :regexp t :same t))
   :custom
   (shell-pop-universal-key "C-c e")
   (shell-pop-shell-type '("eshell" "*eshell*" (lambda nil (eshell)))))
 #+end_src
 
+** [[https://github.com/EricCrosson/unkillable-scratch][unkillable-scratch]]
+
+Make =*scratch*= and =*Messages*= unkillable.
+
+#+begin_src emacs-lisp
+(use-package unkillable-scratch
+  :config
+  (unkillable-scratch 1)
+  :custom
+  (unkillable-buffers '("^\\*scratch\\*$" "^\\*Messages\\*$")))
+#+end_src
+
+** [[https://github.com/davep/boxquote.el][boxquote.el]]
+
+#+begin_example
+,----
+| make pretty boxed quotes like this
+`----
+#+end_example
+
+#+begin_src emacs-lisp
+(use-package boxquote
+  :bind
+  (:prefix-map amin--boxquote-prefix-map
+   :prefix "C-c q"
+   ("b"   . boxquote-buffer)
+   ("B"   . boxquote-insert-buffer)
+   ("d"   . boxquote-defun)
+   ("F"   . boxquote-insert-file)
+   ("hf"  . boxquote-describe-function)
+   ("hk"  . boxquote-describe-key)
+   ("hv"  . boxquote-describe-variable)
+   ("hw"  . boxquote-where-is)
+   ("k"   . boxquote-kill)
+   ("p"   . boxquote-paragraph)
+   ("q"   . boxquote-boxquote)
+   ("r"   . boxquote-region)
+   ("s"   . boxquote-shell-command)
+   ("t"   . boxquote-text)
+   ("T"   . boxquote-title)
+   ("u"   . boxquote-unbox)
+   ("U"   . boxquote-unbox-region)
+   ("y"   . boxquote-yank)
+   ("M-q" . boxquote-fill-paragraph)
+   ("M-w" . boxquote-kill-ring-save)))
+#+end_src
+
+Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
+
+** [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]]
+
+#+begin_src emacs-lisp
+(use-package highlight-indent-guides
+  :demand t
+  :hook ((prog-mode . highlight-indent-guides-mode)
+         (org-mode  . highlight-indent-guides-mode))
+  :config
+  (setq highlight-indent-guides-character ?\|)
+  (setq highlight-indent-guides-auto-enabled nil)
+  (setq highlight-indent-guides-method 'character)
+  (setq highlight-indent-guides-responsive 'top)
+  (set-face-foreground 'highlight-indent-guides-character-face "gainsboro")
+  (set-face-foreground 'highlight-indent-guides-top-character-face "grey40")) ; grey13 is nice too
+#+end_src
+
 * Email
 ** [[https://notmuchmail.org][notmuch]]