summaryrefslogtreecommitdiff
path: root/modules/prog-lisp.el
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
committerCraig Jennings <c@cjennings.net>2024-04-07 13:41:34 -0500
commit754bbf7a25a8dda49b5d08ef0d0443bbf5af0e36 (patch)
treef1190704f78f04a2b0b4c977d20fe96a828377f1 /modules/prog-lisp.el
new repository
Diffstat (limited to 'modules/prog-lisp.el')
-rw-r--r--modules/prog-lisp.el128
1 files changed, 128 insertions, 0 deletions
diff --git a/modules/prog-lisp.el b/modules/prog-lisp.el
new file mode 100644
index 00000000..618108bd
--- /dev/null
+++ b/modules/prog-lisp.el
@@ -0,0 +1,128 @@
+;;; prog-lisp --- Lisp Specific Settings and Functionality -*- lexical-binding: t; -*-
+;; author Craig Jennings <c@cjennings.net>
+
+;;; Commentary:
+
+;; ==== Setting up Quicklisp ====
+;; Quicklisp is a library manager for Common Lisp. It works with your existing Common Lisp
+;; implementation to download, install, and load any of over 1,500 libraries with a few
+;; simple commands.
+;; https://www.quicklisp.org/beta/
+
+;; mostly from: https://gist.github.com/jteneycke/7947353
+;; * Install SBCL
+;; sudo pacman -S sbcl # arch
+;; doas pkg install sbcl # bsd
+;; sudo apt-get install sbcl # debian
+
+;; * Install QuickLisp
+;; curl -O http://beta.quicklisp.org/quicklisp.lisp
+;; sbcl --load quicklisp.lisp --eval "(quicklisp-quickstart:install)" --quit
+;; sbcl --load ~/quicklisp/setup.lisp --eval "(ql:add-to-init-file)" --quit
+
+;; * Emacs Config
+;; (load (expand-file-name "~/quicklisp/slime-helper.el"))
+;; ;; Replace "sbcl" with the path to your implementation
+;; (setq inferior-lisp-program "/usr/bin/sbcl")
+
+;; to get readline support in SBCL's REPL, install rlwrap and run it
+;; before sbcl like so:
+
+;; $ rlwrap sbcl
+
+;;; Code:
+
+;; -------------------------------- Elisp Setup --------------------------------
+;; run this on editing an elisp file
+
+(defun cj/elisp-setup ()
+ "My default code preferences for emacs-lisp."
+ (setq-default tab-width 4) ;; set the tab width to 4 spaces
+ (setq-default indent-tabs-mode -1) ;; disable tab characters
+ (setq-default fill-column 80))
+(add-hook 'emacs-lisp-mode-hook 'cj/elisp-setup)
+
+;; ------------------------------ Emacs Lisp REPL ------------------------------
+
+(use-package ielm
+ :ensure nil ;; built-in
+ :hook (ielm-mode . eldoc-mode)
+ :config (setq ielm-prompt "elisp> "))
+
+;; ----------------------------------- Eldoc -----------------------------------
+
+(use-package eldoc
+ :ensure nil ;; built-in
+ :hook ((c-mode-common emacs-lisp-mode) . eldoc-mode)
+ :custom
+ (eldoc-echo-area-use-multiline-p 3)
+ (eldoc-echo-area-display-truncation-message nil))
+
+;; -------------------------- ERT + Testing Libraries --------------------------
+;; unit/regression testing framework
+;; basic introduction: https://nullprogram.com/blog/2012/08/15/
+;; https://www.gnu.org/software/emacs/manual/html_node/ert/
+;; or: [[info:ert#User Input]]
+
+(use-package ert
+ :ensure nil ;; built-into emacs
+ :defer 1)
+
+;; mocking/stub framework
+;; note: Find the documentation at M-x describe-function RET with-mock RET
+;; and M-x describe-function RET mocklet RET.testing
+(with-eval-after-load 'ert
+ (defun ert-all-tests ()
+ "Run all ert tests and display the results in a buffer."
+ (interactive)
+ (ert t))
+
+ (keymap-global-unset "C-r" t)
+ (define-key emacs-lisp-mode-map (kbd "C-r") 'ert-all-tests)
+ (define-key lisp-interaction-mode-map (kbd "C-r") 'ert-all-tests))
+
+(use-package el-mock) ;; mock/stub framework
+
+
+(defun cj/eval-and-run-all-tests-in-buffer ()
+ "Delete loaded tests, evaluate current buffer. and run all loaded ERT tests."
+ (interactive)
+ (ert-delete-all-tests)
+ (eval-buffer)
+ (ert 't))
+
+;; ------------------------------ Package Tooling ------------------------------
+
+(use-package package-lint
+ :defer 1)
+
+(use-package flycheck-package
+ :defer 1
+ :after (flycheck package-lint)
+ :config
+ (flycheck-package-setup))
+
+(use-package package-build
+ :defer 1)
+
+;; ----------------------------- Rainbow Delimiters ----------------------------
+
+(use-package rainbow-delimiters
+ :defer .5
+ :hook
+ (emacs-lisp-mode . rainbow-delimiters-mode)
+ (lisp-mode . rainbow-delimiters-mode)
+ :config
+ (set-face-foreground 'rainbow-delimiters-depth-1-face "#c66") ;; red
+ (set-face-foreground 'rainbow-delimiters-depth-2-face "#6c6") ;; green
+ (set-face-foreground 'rainbow-delimiters-depth-3-face "#69f") ;; blue
+ (set-face-foreground 'rainbow-delimiters-depth-4-face "#cc6") ;; yellow
+ (set-face-foreground 'rainbow-delimiters-depth-5-face "#6cc") ;; cyan
+ (set-face-foreground 'rainbow-delimiters-depth-6-face "#c6c") ;; magenta
+ (set-face-foreground 'rainbow-delimiters-depth-7-face "#ccc") ;; light gray
+ (set-face-foreground 'rainbow-delimiters-depth-8-face "#999") ;; medium gray
+ (set-face-foreground 'rainbow-delimiters-depth-9-face "#666")) ;; dark gray
+
+
+(provide 'prog-lisp)
+;;; prog-lisp.el ends here