aboutsummaryrefslogtreecommitdiff
path: root/Emacs/.config/emacs
diff options
context:
space:
mode:
authorAryadev Chavali <aryadev@aryadevchavali.com>2025-02-15 22:04:57 +0000
committerAryadev Chavali <aryadev@aryadevchavali.com>2025-02-15 22:04:57 +0000
commitb4b9cfc4507d7e1448fe39ef249711ac548968c4 (patch)
treeb032f2643a8763bbc225f3bc828e5cbd933a2a5d /Emacs/.config/emacs
parenta21a7454d76251f0db1f039de2a93ca63411a6f1 (diff)
downloaddotfiles-b4b9cfc4507d7e1448fe39ef249711ac548968c4.tar.gz
dotfiles-b4b9cfc4507d7e1448fe39ef249711ac548968c4.tar.bz2
dotfiles-b4b9cfc4507d7e1448fe39ef249711ac548968c4.zip
Small code changes and some changes to text
Diffstat (limited to 'Emacs/.config/emacs')
-rw-r--r--Emacs/.config/emacs/config.org92
1 files changed, 51 insertions, 41 deletions
diff --git a/Emacs/.config/emacs/config.org b/Emacs/.config/emacs/config.org
index 453e9dc..5b23b1e 100644
--- a/Emacs/.config/emacs/config.org
+++ b/Emacs/.config/emacs/config.org
@@ -71,6 +71,8 @@ Let's setup a few absolute essentials:
+ Yes or no questions are less painful (~y-or-n-p~)
+ Make the "kill ring" work seamlessly with the clipboard
+ Deleting files or directories "trashes" them instead
+ + ... but when using ~tramp~ on remote machines, don't try to trash
+ the file to the local machine trash!!!
+ Font size based on the machine
+ Disable mouse usage where possible
+ Ensure when compiling the Emacs configuration, we only get messages
@@ -90,6 +92,7 @@ Let's setup a few absolute essentials:
auto-revert-use-notify nil
select-enable-clipboard t
delete-by-moving-to-trash t
+ remote-file-name-inhibit-delete-by-moving-to-trash t
use-file-dialog nil
use-dialog-box nil
warning-minimum-level :error)
@@ -98,13 +101,13 @@ Let's setup a few absolute essentials:
(global-auto-revert-mode)
(set-face-attribute 'default nil :height
(pcase (system-name)
- ("ravenmaiden" 130)
+ ("rhmaiden" 130)
(_ 120))))
#+end_src
* Custom functionality and libraries
-This is custom Lisp that I or someone else has written to help me out
-throughout the configuration. Note that because it's setup so early I
-can use it throughout the file.
+This is custom Lisp that I or someone else has written which I really
+need to setup as early as possible as it's necessary throughout the
+rest of the configuration.
** dash
Dash is an external library that provides a ton of Emacs Lisp
functions that make it a bit nicer to use.
@@ -126,7 +129,10 @@ lambda."
`(function (lambda nil ,@BODY)))
#+end_src
** Clean buffer list
-Clean all buffers except for those in ~clean-buffers-keep~.
+If you've got a particularly long running Emacs instance, as I usually
+do, sometimes you just want to clean all those scratch and temporary
+buffers up. Here I define a function which kills all buffers except
+for those which have a name in ~clean-buffers-keep~.
#+begin_src emacs-lisp
(defconst clean-buffers-keep
@@ -142,22 +148,21 @@ Clean all buffers except for those in ~clean-buffers-keep~.
#'(lambda (buf)
(member (buffer-name buf)
clean-buffers-keep))))
- (-->
- (buffer-list)
- (cl-remove-if should-not-kill it)
- (mapc #'kill-buffer it))))
+ (->> (buffer-list)
+ (cl-remove-if should-not-kill)
+ (mapc #'kill-buffer))))
#+end_src
** Custom window management
-Generally speaking, applications that have some windowing features do
-not have a lot of options for how those windows are placed. Emacs has
-a window management system unlike any other piece of software I have
-ever used with some incredible capabilities. Unfortunately, as a
-result, it is quite complex to use.
+Emacs has a window management system unlike any other piece of
+software I have ever used, with an ability to be incredibly precise on
+how/where you want buffers to be presented in your Emacs instance.
+Unfortunately, as a result, it is quite complex to use.
+*** How does window management work?
The big idea is this table, ~display-buffer-alist~, which associates
regular expressions with "actions". The regular expressions are for
the name of buffers, and the actions are how the buffer should be
-displayed. And there are a *lot* of ways to display buffers.
+displayed.
Here's an example record:
#+begin_src lisp
@@ -166,12 +171,14 @@ Here's an example record:
(side . bottom))
#+end_src
-This matches any buffer named =config.org=, displaying the buffer in a
-side window to the bottom.
-
-What I configure here is a ~use-package~ keyword, ~:display~, which
-will allow me to write associations in ~display-buffer-alist~ really
-easily.
+This states that for any buffer named =config.org=, display the buffer
+in a side window (the bottom to be precise). And there are a *lot*
+more ways to display buffers. We'd just need to ~add-to-list~ this to
+~display-buffer-alist~ and that record will take first precedence.
+*** ~:display~ keyword for use-package
+What I want to do is make the process of adding records to
+~display-buffer-alist~ a bit smooter by integrating it into Emacs'
+use-package.
2024-04-23: Found this option ~switch-to-buffer-obey-display-actions~
which makes manual buffer switches obey the same constraints via
@@ -198,7 +205,7 @@ Don't do anything to the args here."
',arg))
args)))))
#+end_src
-
+*** Some ~:display~ records
Here's some ~:display~ records for buffers that don't really have
configuration anywhere else in the file. These serve as good examples
on how to use the keyword.
@@ -220,10 +227,9 @@ expression. Here's a macro to do that for me.
#+begin_src emacs-lisp
(defmacro add-multiple-to-list (listvar &rest elements)
- (cons
- 'progn
- (cl-loop for element in elements
- collect `(cl-pushnew ,element ,listvar))))
+ (->> elements
+ (mapcar (lambda (el) (list 'cl-pushnew el listvar)))
+ (cons 'progn)))
#+end_src
** Setting number of native jobs
Emacs has a native compilation capability to make things /even
@@ -367,8 +373,8 @@ set of examples on how to use general.
#+begin_src emacs-lisp
(use-package emacs
:init
- ;; this is for `duplicate-dwim'
- (setq duplicate-line-final-position -1)
+ (setq duplicate-line-final-position -1
+ async-shell-command-buffer 'new-buffer)
:general
("C-x d" #'delete-frame)
@@ -689,7 +695,7 @@ From https://jmthornton.net/blog/p/consult-line-isearch-history, taken
(substring pattern 2)
pattern)))
(add-to-history 'regexp-search-ring regexp)
- (setq evil-ex-search-pattern (evil-ex-pattern regexp t nil nil))
+ (setq evil-ex-search-pattern (evil-ex-make-pattern regexp t nil))
(setq evil-ex-search-direction 'forward))))
(advice-add #'consult-line :after #'consult-line-isearch-history))
@@ -717,7 +723,7 @@ setup some evil binds for company.
:hook
((prog-mode-hook eshell-mode-hook) . company-mode)
:init
- (setq company-idle-delay 0.2
+ (setq company-idle-delay 0.25
company-minimum-prefix-length 3
company-require-match nil)
:general
@@ -2130,20 +2136,20 @@ Tons of stuff, namely:
(use-package cc-mode
:defer t
:hook
- (c-mode-hook . auto-fill-mode)
- (c++-mode-hook . auto-fill-mode)
+ ((c-mode-hook c++-mode-hook) . auto-fill-mode)
:general
- (:keymaps '(c-mode-map
- c++-mode-map)
+ (:keymaps '(c-mode-map c++-mode-map)
:states '(normal motion visual)
"(" #'c-beginning-of-statement
")" #'c-end-of-statement
"{" #'c-beginning-of-defun
"}" #'c-end-of-defun)
:init
- (setq-default c-basic-offset 2)
- (setq-default c-auto-newline nil)
- (setq-default c-default-style '((other . "user")))
+ (setq c-basic-offset 2
+ c-auto-newline nil
+ c-default-style '((other . "user")))
+ (add-hook 'c-mode-hook (proc (c-toggle-comment-style -1)))
+ (add-hook 'c++-mode-hook (proc (c-toggle-comment-style -1)))
(defun +cc/copyright-notice ()
(let* ((lines (split-string (+license/copyright-notice) "\n"))
(copyright-line (car lines))
@@ -2356,10 +2362,10 @@ book so it's useful to have some Emacs binds for it.
:header-args:emacs-lisp: :tangle no :results none
:END:
Haskell is a static lazy functional programming language (what a
-mouthful). It's quite a beautiful language and really learning it will
-change the way you think about programming. However, my preferred
-functional language is still unfortunately Lisp so no extra brownie
-points there.
+mouthful). It's quite a beautiful language and really learning it
+will change the way you think about programming. However, my
+preferred functional language is still unfortunately Lisp so no extra
+brownie points there.
Here I configure the REPL for Haskell via the
~haskell-interactive-mode~. I also load my custom package
@@ -3418,6 +3424,10 @@ before launching it.
(use-package eshell-additions
:demand t
:load-path "elisp/"
+ :config
+ ;; FIXME: Why do I need to double load this? Otherwise +eshell/open doesn't
+ ;; work as intended when using universal argument.
+ (load-file (concat user-emacs-directory "elisp/eshell-additions.el"))
:general
(shell-leader
"t" #'+eshell/open)