From b1dcf4e5dbecb91b9c3726c0d85cda781a6faf60 Mon Sep 17 00:00:00 2001
From: Aryadev Chavali <aryadev@aryadevchavali.com>
Date: Sun, 11 Aug 2024 22:43:49 +0100
Subject: (Emacs/config)~changes that I cba to explain

---
 Emacs/.config/emacs/config.org | 55 +++++++++++++++++++++++++++++++-----------
 1 file changed, 41 insertions(+), 14 deletions(-)

(limited to 'Emacs/.config/emacs')

diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org
index 865cf62..220996d 100644
--- a/Emacs/.config/emacs/config.org
+++ b/Emacs/.config/emacs/config.org
@@ -204,7 +204,7 @@ which makes manual buffer switches obey the same constraints via
 (use-package window
   :demand t
   :init
-  (setq switch-to-buffer-obey-display-actions t)
+  (setq switch-to-buffer-obey-display-actions nil)
   (with-eval-after-load "use-package-core"
     (add-to-list 'use-package-keywords ':display)
     (defun use-package-normalize/:display (_name-symbol _keyword args)
@@ -423,13 +423,15 @@ the first character of the evil state capitalised"
 #+end_src
 ** Fringes
 Turning off borders in my window manager was a good idea, so turn off
-the borders for Emacs, so called fringes.
+the borders for Emacs, so called fringes.  However, some things like
+[[info:emacs#Compilation Mode][Compilation Mode]] do require fringes
+to provide arrows.  So I use the default-minimal fringe style (exactly
+1 pixel on either side of the window) to ensure I get those.
 #+begin_src emacs-lisp
 (use-package fringe
-  :load-path "elisp/"
   :defer t
   :config
-  (fringe-mode 0))
+  (set-fringe-style (cons 1 1)))
 #+end_src
 ** Mouse
 Who uses a mouse? This disables the use of GUI dialogues for stuff.
@@ -574,6 +576,7 @@ Some bindings that I couldn't fit elsewhere easily.
 
   (leader
     "SPC" '(execute-extended-command :which-key "M-x")
+    "R"   `(revert-buffer :which-key "Revert buffer")
     "p"   `(,project-prefix-map :which-key "Project")
     "'"   '(browse-url-emacs :which-key "Download URL to Emacs")
     ":"   `(,(proc (interactive) (switch-to-buffer "*scratch*"))
@@ -1628,7 +1631,7 @@ Here I setup dired with a few niceties
   (~+dired/insert-all-subdirectories~)
 #+begin_src emacs-lisp
 (use-package dired
-  :demand t
+  :defer t
   :commands (dired find-dired)
   :hook
   (dired-mode-hook . auto-revert-mode)
@@ -2461,16 +2464,16 @@ description I give won't do it justice.
   (global-aggressive-indent-mode))
 #+end_src
 ** Compilation
-Compilation mode, a super useful subsystem of Emacs which allows one
-to run arbitrary commands.  If those commands produce errors,
-particularly errors that have a filename, column and line,
-compilation-mode can colourise them and automatically help you
-navigate to them.  Very nifty.
+Compilation mode is an incredibly useful subsystem of Emacs which
+allows one to run arbitrary commands.  If those commands produce
+errors (particularly errors that have a filename, column and line)
+compilation-mode can colourise these errors and help you navigate to
+them.
 
 Here I add some bindings and a filter which colourises the output of
-compilation mode for ANSI escape sequences; eyecandy is certainly nice
-but it's just useful when dealing with tools that use those codes so
-you can actually read the text.
+compilation mode for ANSI escape sequences; the eyecandy is certainly
+nice but it's very useful when dealing with tools that use those codes
+so you can actually read the text.
 #+begin_src emacs-lisp
 (use-package compile
   :defer t
@@ -2493,7 +2496,9 @@ you can actually read the text.
    (reusable-frames . t)
    (window-height . 0.25))
   :init
-  (setq compilation-scroll-output 'first-error)
+  (setq compilation-scroll-output 'first-error
+        compilation-context-lines nil
+        next-error-highlight 'fringe-arrow)
   :config
   (add-hook 'compilation-filter-hook #'ansi-color-compilation-filter))
 #+end_src
@@ -3305,6 +3310,28 @@ it as an option in ~org-babel-load-languages~.
    'org-babel-load-languages
    '((C . t))))
 #+end_src
+*** cc compile fsan
+Sanitisers are a blessing for C/C++.  An additional runtime on top of
+the executable which catches stuff like undefined behaviour or memory
+leaks make it super easy to see where and how code is failing.
+However, by default, Emacs' compilation-mode doesn't understand the
+logs =fsanitize= makes so you usually have to manually deal with it
+yourself.
+
+Compilation mode uses regular expressions to figure out whether
+something is an error and how to navigate to the file where that error
+is located.  So adding support for =-fsanitize= is as simple as making
+a regular expression which captures file names and digits
+#+begin_src emacs-lisp
+(use-package compile
+  :after cc-mode
+  :config
+  (add-to-list 'compilation-error-regexp-alist-alist
+               '(fsan "^    #[[:digit:]] 0x[[:alnum:]]+ in .*? \\(.*.c\\(pp\\)?\\):\\([[:digit:]]+\\):\\([[:digit:]]+\\)"
+                      1 3 4))
+  (add-to-list 'compilation-error-regexp-alist
+               'fsan))
+#+end_src
 ** WAIT D
 :PROPERTIES:
 :header-args:emacs-lisp: :tangle no
-- 
cgit v1.2.3-13-gbd6f