Add elisp autoformatter

Add README
This commit is contained in:
Emma Turner
2026-03-13 11:37:03 -06:00
parent a014d30451
commit 1fa1c1b89b
5 changed files with 116 additions and 92 deletions

0
.elisp-autofmt Normal file
View File

13
README.org Normal file
View File

@@ -0,0 +1,13 @@
* Prerequisites
- Git (Required on windows so Emacs can use the included Linux tools)
- hunspell
- ~en_US.aff~ and ~en_US.dic~ files from [[https://cgit.freedesktop.org/libreoffice/dictionaries/tree/en][LibreOffice Dictionaries]] (required for hunspell)
- Python 3.10 or newer (required for ~elisp-autofmt~)
#+begin_src powershell
winget install Git.Git FSFhu.Hunspell Python.Python.3.14
#+end_src
Additionally the personal dictionary file for hunspell must be created before it can be written to.
The default path is ~$HOME/.hunspell_en_US~

View File

@@ -45,7 +45,9 @@
;; If you use `org' and don't want your org files in the default location below, ;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads! ;; change `org-directory'. It must be set before org loads!
(setq! org-directory "C:/Users/EmmaTurner/OneDrive - Exponential Technology Group, Inc/Documents/Notes/") (setq!
org-directory
"C:/Users/EmmaTurner/OneDrive - Exponential Technology Group, Inc/Documents/Notes/")
;; Whenever you reconfigure a package, make sure to wrap your config in an ;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g. ;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
@@ -78,37 +80,31 @@
;; ;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how ;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented. ;; they are implemented.
(after! org (after!
(setq org-hide-emphasis-markers t) org (setq org-hide-emphasis-markers t) (setq org-log-done 'time)
(setq org-log-done 'time)
;; Collect all .org from my Org directory and subdirs ;; Collect all .org from my Org directory and subdirs
(defun load-org-agenda-files-recursively (dir) "Find all directories in DIR." (defun load-org-agenda-files-recursively (dir)
(unless (file-directory-p dir) (error "Not a directory '%s'" dir)) "Find all directories in DIR."
(unless (file-directory-p dir)
(error "Not a directory '%s'" dir))
(unless (equal (directory-files dir nil org-agenda-file-regexp t) nil) (unless (equal (directory-files dir nil org-agenda-file-regexp t) nil)
(add-to-list 'org-agenda-files dir) (add-to-list 'org-agenda-files dir))
)
(dolist (file (directory-files dir nil nil t)) (dolist (file (directory-files dir nil nil t))
(unless (member file '("." "..")) (unless (member file '("." ".."))
(let ((file (concat dir file "/"))) (let ((file (concat dir file "/")))
(when (file-directory-p file) (when (file-directory-p file)
(load-org-agenda-files-recursively file) (load-org-agenda-files-recursively file))))))
)
)
)
)
)
(load-org-agenda-files-recursively org-directory) ; trailing slash required (load-org-agenda-files-recursively org-directory) ; trailing slash required
(setq org-refile-targets (setq org-refile-targets
'((nil :maxlevel . 3) '((nil :maxlevel . 3) (org-agenda-files :maxlevel . 1))))
(org-agenda-files :maxlevel . 1)))
)
;; TODO: Find out what _actually_ needs to be set here ;; TODO: Find out what _actually_ needs to be set here
;; i.e. shouldn't need to set both ispell-dictionary and ispell-local-dictionary ;; i.e. shouldn't need to set both ispell-dictionary and ispell-local-dictionary
(after! ispell (after!
ispell
(setq ispell-dictionary "en_US") (setq ispell-dictionary "en_US")
(setq ispell-local-dictionary "en_US") (setq ispell-local-dictionary "en_US")
(setq ispell-extra-args '("-d" "en_US")) (setq ispell-extra-args '("-d" "en_US"))
@@ -118,11 +114,18 @@
'(("en_US" '(("en_US"
"C:/hunspell/en_US.aff" "C:/hunspell/en_US.aff"
"C:/hunspell/en_US.dic" "C:/hunspell/en_US.dic"
nil nil nil "utf-8"))) nil
nil
nil
"utf-8")))
;; This is the default hunspell personal dictionary ;; This is the default hunspell personal dictionary
;; Hunspell won't create it, and ispell needs this file specified to work ;; Hunspell won't create it, and ispell needs this file specified to work
(setq ispell-personal-dictionary "~/hunspell_en_US") (setq ispell-personal-dictionary "~/.hunspell_en_US"))
)
(use-package!
elisp-autofmt
:commands (elisp-autofmt-mode elisp-autofmt-buffer)
:hook (emacs-lisp-mode . elisp-autofmt-mode))
;; Windows path ;; Windows path
(when (eq system-type 'windows-nt) (when (eq system-type 'windows-nt)
@@ -135,9 +138,10 @@
(push "C:/Program Files/Git/usr/bin/" exec-path) (push "C:/Program Files/Git/usr/bin/" exec-path)
;; Update PATH from exec-path ;; Update PATH from exec-path
(let ((path (mapcar 'file-truename (let ((path
(append exec-path (mapcar
(split-string (getenv "PATH") path-separator t))))) 'file-truename
(append exec-path (split-string (getenv "PATH") path-separator t)))))
(setenv "PATH" (mapconcat 'identity (delete-dups path) path-separator)))) (setenv "PATH" (mapconcat 'identity (delete-dups path) path-separator))))
;; Based off https://github.com/alphapapa/unpackaged.el#ensure-blank-lines-between-headings-and-before-contents ;; Based off https://github.com/alphapapa/unpackaged.el#ensure-blank-lines-between-headings-and-before-contents
@@ -146,15 +150,19 @@
"Ensure blank lines exist after each org entry (before each heading). "Ensure blank lines exist after each org entry (before each heading).
With prefix, operate on whole buffer" With prefix, operate on whole buffer"
(interactive "P") (interactive "P")
(org-map-entries (lambda () (org-map-entries
(lambda ()
(let ((end (org-entry-end-position))) (let ((end (org-entry-end-position)))
(goto-char end) (goto-char end)
(unless (string-equal (string (char-before)) "\n") (unless (string-equal (string (char-before)) "\n")
;; Insert blank line after entry end ;; Insert blank line after entry end
(insert "\n")) (insert "\n"))))
) t
) (if prefix
t (if prefix
nil nil
'tree)) 'tree)))
)
;; For elisp-autofmt
;; Local variables:
;; elisp-autofmt-load-packages-local: ("use-package" "use-package-core")
;; end:

View File

@@ -13,6 +13,7 @@
;; ;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its ;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code). ;; directory (for easy access to its source code).
;; format: off
(doom! :input (doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh ;;bidi ; (tfel ot) thgir etirw uoy gnipleh
@@ -143,7 +144,7 @@
;;(haskell +lsp) ; a language that's lazier than I am ;;(haskell +lsp) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python ;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on ;;idris ; a language you can depend on
json ; At least it ain't XML (json +tree-sitter) ; At least it ain't XML
;;janet ; Fun fact: Janet is me! ;;janet ; Fun fact: Janet is me!
;;(java +lsp) ; the poster child for carpal tunnel syndrome ;;(java +lsp) ; the poster child for carpal tunnel syndrome
(javascript +tree-sitter) ; all(hope(abandon(ye(who(enter(here)))))) (javascript +tree-sitter) ; all(hope(abandon(ye(who(enter(here))))))

View File

@@ -52,3 +52,5 @@
;; (unpin! pinned-package another-pinned-package) ;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things) ;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t) ;; (unpin! t)
(package! elisp-autofmt)