;;; slime-scratch.el (require 'slime) (require 'cl-lib) (define-slime-contrib slime-scratch "Imitate Emacs' *scratch* buffer" (:authors "Helmut Eller ") (:license "GPL") (:on-load (def-slime-selector-method ?s "*slime-scratch* buffer." (slime-scratch-buffer)))) ;;; Code (defvar slime-scratch-mode-map (let ((map (make-sparse-keymap))) (set-keymap-parent map lisp-mode-map) map)) (defun slime-scratch () (interactive) (slime-switch-to-scratch-buffer)) (defun slime-switch-to-scratch-buffer () (set-buffer (slime-scratch-buffer)) (unless (eq (current-buffer) (window-buffer)) (pop-to-buffer (current-buffer) t))) (defvar slime-scratch-file nil) (defun slime-scratch-buffer () "Return the scratch buffer, create it if necessary." (or (get-buffer (slime-buffer-name :scratch)) (with-current-buffer (if slime-scratch-file (find-file slime-scratch-file) (get-buffer-create (slime-buffer-name :scratch))) (rename-buffer (slime-buffer-name :scratch)) (lisp-mode) (use-local-map slime-scratch-mode-map) (slime-mode t) (current-buffer)))) (slime-define-keys slime-scratch-mode-map ("\C-j" 'slime-eval-print-last-expression)) (provide 'slime-scratch)