X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/profile/blobdiff_plain/1865da1722c24e56e89f4ea5f7e442798198e87c..0630988acc7864483d8f6ed96f0ff1971ddb4db6:/dot/lisp-init.lisp diff --git a/dot/lisp-init.lisp b/dot/lisp-init.lisp index 9795a03..da50a6f 100644 --- a/dot/lisp-init.lisp +++ b/dot/lisp-init.lisp @@ -10,11 +10,16 @@ (setf *load-verbose* nil *compile-verbose* nil) #+cmu -(setf *gc-verbose* nil) +(setf ext:*gc-verbose* nil + ext:*require-verbose* nil) ;; Obtain ASDF from somewhere. (require "asdf") +;; Get CMU CL to quit on EOF. +#+cmu +(setf ext:*batch-mode* t) + ;; Tell SBCL where to find its source source. #+sbcl (sb-ext:set-sbcl-source-location #p"/usr/share/sbcl-source/") @@ -36,6 +41,31 @@ (let* ((homestring (or #+sbcl (sb-ext:posix-getenv "HOME") #+clisp (setf custom:*parse-namestring-ansi* t) +;; CLisp history. +#+(and clisp readline) +(progn + (export '(*history-file* *history-size*)) + (defvar *history-file* (format nil "~A/.clisp-history" (ext:getenv "HOME")) + "File to preserve the REPL history.") + (defvar *history-size* 1000) + (unless (and (probe-file *history-file*) nil) + (let (old-umask stream) + ;; Ugh. There's no proper open(2) veneer. Play with umask(2) to avoid + ;; a window in which an adversary can open the file. + (unwind-protect + (setf old-umask (os:umask #o077) + stream (open *history-file* + :direction :output + :if-exists :overwrite + :if-does-not-exist :create)) + (when stream (close stream)) + (when old-umask (os:umask old-umask))))) + (readline:read-history *history-file*) + (if *history-size* (readline:stifle-history *history-size*) + (readline:unstifle-history)) + (push (lambda () (readline:write-history *history-file*)) + custom:*fini-hooks*)) + ;; Shebang. (set-dispatch-macro-character #\# #\!