;;; -*- lexical-binding: t -*- ;; ;; install quicklisp and cl-sdl2: ;; $ sudo apt-get --install-suggests install \*sbcl\* libsdl2-\* libglut-dev ;; $ mkdir -p ~/common-lisp ;; $ cd ~/common-lisp ;; $ wget 'https://beta.quicklisp.org/quicklisp.lisp' ;; ;; $ cd common-lisp ;; $ sbcl --load quicklisp.lisp ;; * (quicklisp-quickstart:install) ;; * (ql:add-to-init-file) ;; * (ql:quickload 'swank) ;; * (swank-loader:dump-image "sbcl.core-swank") ;; * (mapc 'require '(sb-bsd-sockets sb-posix sb-introspect sb-cltl2 asdf)) ;; * (save-lisp-and-die "sbcl.core-swank-more") ;; ;; M-x slime RET ;; CL-USER> (load "~/quicklisp/setup.lisp") ;; CL-USER> (ql:quickload "quicklisp-slime-helper") ;; CL-USER> (ql:update-dist "quicklisp") ;; CL-USER> (ql:update-client) ;; ;; M-x slime RET ;; CL-USER> (ql:quickload "cl-glut") ;; CL-USER> (ql:quickload "cl-opengl") ;; CL-USER> (ql:quickload "sdl2") ;; ;; -------------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; -------------------------------------------------------------------------------- (cl-pushnew (file-name-concat package-user-dir "slime-2.31") load-path :test #'string=) ;; ----------------------------------------------------------------------------- (-> 'abbrev) (-> 'slime) (-> 'slime-banner) ;; -------------------------------------------------------------------------------- ;; quicklisp slime helper (when-let* ((helper (expand-file-name "~/quicklisp/slime-helper.el")) (file (& (file-exists-p helper) helper))) (load file)) ;; -------------------------------------------------------------------------------- ;; slime fanfare (setq slime-startup-animation nil) (setq slime-words-of-encouragement nil) ;; -------------------------------------------------------------------------------- ;; sbcl (setq inferior-lisp-program "/bin/sbcl") (setq slime-enable-evaluate-in-emacs t) (setq slime-protocol-version 'ignore) ;; (setq slime-lisp-implementations ;; '((sbcl ("sbcl" "--core" "/home/efti/common-lisp/sbcl.core-swank")))) (let ((sbcl "sbcl") (opt "--core") (swank (expand-file-name "/home/efti/common-lisp/sbcl.core-swank-more"))) (setq slime-lisp-implementations (list `(sbcl ,(list sbcl opt swank) :init (lambda (port-file _) (format "(swank:start-server %S)\n" port-file)))))) ;; -------------------------------------------------------------------------------- ;; below: keys and hooks ;; -------------------------------------------------------------------------------- ;; sldb (defun sldb-mode-hook-f () (keymap-set sldb-mode-map "1" (L () ($ "music is the key to fall in love")))) (add-hook 'sldb-mode-hook #'sldb-mode-hook-f) ;; -------------------------------------------------------------------------------- ;; slime (defun slime-mode-set-keys () (let ((kmap slime-mode-indirect-map)) (keymap-unset kmap "M-p") (keymap-set kmap "C-M-n" #'slime-eval-buffer) (keymap-set kmap "C-h f" #'slime-describe-function) (keymap-set kmap "M-9" #'slime-eval-last-expression) (keymap-set kmap "M-n" #'slime-compile-file))) (defun slime-mode-hook-f () (abbrev-mode) (slime-mode-set-keys)) (add-hook 'slime-mode-hook #'slime-mode-hook-f) ;; -------------------------------------------------------------------------------- ;; slime repl (defun slime-repl-mode-set-keys () (let ((kmap slime-repl-mode-map)) (keymap-set kmap "C-n" #'slime-repl-next-input) (keymap-set kmap "C-p" #'slime-repl-previous-input))) (defun slime-repl-mode-hook-f () (slime-repl-mode-set-keys)) (add-hook 'slime-repl-mode-hook #'slime-repl-mode-hook-f) ;; -------------------------------------------------------------------------------- (<- 'll-slime) ;; -----------------------------------------------------------------------------