X-Git-Url: https://git.distorted.org.uk/~mdw/profile/blobdiff_plain/0630988acc7864483d8f6ed96f0ff1971ddb4db6..807c317e99426f8379fc55fc4d4bc98e67ec0f41:/dot/lisp-init.lisp diff --git a/dot/lisp-init.lisp b/dot/lisp-init.lisp index da50a6f..64faf2b 100644 --- a/dot/lisp-init.lisp +++ b/dot/lisp-init.lisp @@ -13,29 +13,79 @@ (setf ext:*gc-verbose* nil ext:*require-verbose* nil) +#+ecl +(let ((old-output *standard-output*) + (old-prompt si:*tpl-prompt-hook*)) + ;; There doesn't seem to be a good way to do this, so we do it the bad + ;; way. Since the herald is printed to `*standard-outout*', we set (not + ;; bind!) that to a bit bucket, and then arrange to restore it just before + ;; the first REPL prompt is written. + ;; + ;; One more awful part is that, having intercepted the prompt hook, I need + ;; to restore and invoke the old version, and there isn't a clean way to do + ;; this. + (when (<= (ext:argc) 1) + (setf *standard-output* (make-broadcast-stream) + si:*tpl-prompt-hook* (lambda () + (setf *standard-output* old-output + si:*tpl-prompt-hook* old-prompt) + (si::tpl-prompt))))) + +#+ccl +(setf ccl::*inhibit-greeting* t) + +#+abcl +(setf ext:*warn-on-redefinition* nil) + ;; Obtain ASDF from somewhere. (require "asdf") -;; Get CMU CL to quit on EOF. +;; Get CMU CL and CCL to quit on EOF. #+cmu (setf ext:*batch-mode* t) +#+ccl +(setf ccl:*quit-on-eof* t) ;; Tell SBCL where to find its source source. #+sbcl (sb-ext:set-sbcl-source-location #p"/usr/share/sbcl-source/") -;; Tell some Lisps about my home directory. -#+(and unix (or sbcl clisp)) +;; Get SBCL to shut up about package variance. This is a standard result of +;; my approach to symbol exports, and I don't care. +#+sbcl +(progn + (unless (fboundp 'real-note-package-variance) + (setf (symbol-function 'real-note-package-variance) + (symbol-function 'sb-impl::note-package-variance))) + (handler-bind ((sb-ext:package-lock-violation #'continue) + (sb-kernel:redefinition-warning #'muffle-warning)) + (defun sb-impl::note-package-variance + (&rest args &key package &allow-other-keys) + (let ((ignore (getf sb-ext:*on-package-variance* :ignore))) + (unless (or (eq ignore t) + (and (listp ignore) + (member (package-name package) ignore))) + (apply #'real-note-package-variance args))))) + (setf sb-ext:*on-package-variance* '(:ignore t))) + +;; Tell some Lisps about my home directory. CMU CL already has a search list +;; which does the same job, and CCL sets up a logical-pathname host. +#+(and unix (or sbcl clisp ecl abcl)) (let* ((homestring (or #+sbcl (sb-ext:posix-getenv "HOME") - #+clisp (ext:getenv "HOME") - #+cmu (unix:unix-getenv "HOME") + #+(or clisp ecl abcl) (ext:getenv "HOME") + #+abcl (java:jstatic "getProperty" + "java.lang.System" + "user.home") "/home/mdw")) (home (pathname (concatenate 'string homestring "/")))) (setf (logical-pathname-translations "HOME") - `(("HOME:**;*.*.*" ,(merge-pathnames "**/*.*" home nil))) - (logical-pathname-translations "CL") - '(("CL:SOURCE;**;*.*.*" #p"/usr/share/common-lisp/source/**/*.*") - ("CL:SYSTEMS;**;*.*.*" #p"/usr/share/common-lisp/systems/**/*.*")))) + `(("HOME:**;*.*.*" ,(merge-pathnames "**/*.*" home nil))))) +(when (#.(car '(#+clisp ext:probe-directory + probe-file)) + #p"/usr/share/common-lisp/") + (setf (logical-pathname-translations "CL") + '(("CL:SOURCE;**;*.*.*" #p"/usr/share/common-lisp/source/**/*.*") + ("CL:SYSTEMS;**;*.*.*" #p"/usr/share/common-lisp/systems/**/*.*")))) ;; Various fixings. #+clisp @@ -66,14 +116,20 @@ (push (lambda () (readline:write-history *history-file*)) custom:*fini-hooks*)) -;; Shebang. +;; Don't choke on shebang lines. This isn't here so that we can run Lisp +;; scripts like proper Unix programs: `cl-launch' or `runlisp' do that. It's +;; here so that we can `load' a script into a running Lisp without it choking +;; on the shebang. (set-dispatch-macro-character #\# #\! (lambda (stream char arg) (declare (ignore char arg)) (values (read-line stream)))) -;; Start up swank. +;; Use double-precision by default. +(setf *read-default-float-format* 'double-float) + +;; Start up Swank. (export 'crank-swank) (defun crank-swank (&rest args) (let ((swank (find-package "SWANK")))