Plaster

common-lisp
(defpackage #:eclector-gateway (:use #:cl) (:export #:enable)) (in-package #:eclector-gateway) (defparameter *eclector-gateway* (copy-readtable nil)) ;;; See below for definition of *standard-characters*. (dolist (char *standard-characters*) (set-macro-character char 'read-with-eclector nil *eclector-gateway*)) (defmacro enable () `(eval-when (:compile-toplevel :load-toplevel :execute) (setf *readtable* *eclector-gateway*))) (defun read-with-eclector (stream char) (declare (ignore char)) (eclector.reader:read stream)) ;;; Testing (defmethod eclector.reader:interpret-symbol :before (client input-stream package-indicator symbol-name internp) (format t "~&Now interpreting ~S~%" symbol-name)) ;;; File "test-eclector.lisp" ;;; ;;; (in-package :cl-user) ;;; ;;; (eclector-gateway:enable) ;;; ;;; (defun foo () ;;; (print 'hello)) ;;; (load "test-eclector.lisp") ;;; ;;; ==> ;;; ;;; ;Loading #P"/home/peter/lisp/test-eclector.lisp"... ;;; Now interpreting "DEFUN" ;;; Now interpreting "FOO" ;;; Now interpreting "PRINT" ;;; Now interpreting "HELLO" ;;; Put this last because it breaks syntax highlighting at https://plaster.tymoon.eu (defparameter *standard-characters* '(#\Newline #\Space #\0 #\1 #\2 #\3 #\4 #\5 #\6 #\7 #\8 #\9 #\A #\B #\C #\D #\E #\F #\G #\H #\I #\J #\K #\L #\M #\N #\O #\P #\Q #\R #\S #\T #\U #\V #\W #\X #\Y #\Z #\a #\b #\c #\d #\e #\f #\g #\h #\i #\j #\k #\l #\m #\n #\o #\p #\q #\r #\s #\t #\u #\v #\w #\x #\y #\z #\! #\" #\# #\$ #\% #\& #\' #\( #\) #\* #\+ #\, #\- #\. #\/ #\: #\; #\< #\= #\> #\? #\@ #\[ #\\ #\] #\^ #\_ #\` #\{ #\| #\} #\~))