aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tom Willemse2026-09-03 00:18:15 -0700
committerGravatar Tom Willemse2026-09-03 00:18:15 -0700
commit9b68985dc87c203d4575a70b5ec1c7faaf0deea3 (patch)
treebbfed90bb57fad0155dd39e7788a6b951ab69eb3
parent69c188e35911f4f8ef294c1a3d1159c20eb4bebe (diff)
downloadnew-dotfiles-9b68985dc87c203d4575a70b5ec1c7faaf0deea3.tar.gz
new-dotfiles-9b68985dc87c203d4575a70b5ec1c7faaf0deea3.zip
sbcl: Make ‘C-d’ quit the REPL on an empty line
I'm quite used to typing in ‘C-d’ to quit any kind of REPL. Most accept that an EOF marker showing up means that it's time to quit. SBCL (with linedit) just reports that it's happened. This change makes it work the way I prefer again.
-rw-r--r--sbcl/sbclrc12
1 files changed, 10 insertions, 2 deletions
diff --git a/sbcl/sbclrc b/sbcl/sbclrc
index 228ae53..47baaef 100644
--- a/sbcl/sbclrc
+++ b/sbcl/sbclrc
@@ -7,12 +7,20 @@
(when (probe-file quicklisp-init)
(load quicklisp-init)))
+(require :linedit)
+
;;; Enable linedit, a readline-like module for SBCL. Install through
;;; (ql:quickload "linedit").
(if (member "--no-linedit" sb-ext:*posix-argv* :test 'equal)
(setf sb-ext:*posix-argv*
(remove "--no-linedit" sb-ext:*posix-argv* :test 'equal))
(when (interactive-stream-p *terminal-io*)
+ (require :asdf)
(require :sb-aclrepl)
- (require :linedit)
- (funcall (intern "INSTALL-REPL" :linedit) :wrap-current t)))
+ (funcall (intern "INSTALL-REPL" :linedit) :wrap-current t)
+
+ (defun delete-char-forwards-or-quit (chord editor)
+ (if (equal "" (linedit::get-string editor))
+ (sb-ext:quit)
+ (linedit::delete-char-forwards chord editor)))
+ (linedit::defcommand "C-D" 'delete-char-forwards-or-quit)))