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