独自マクロを気兼ねなく使う
リーダマクロは他に与える影響が大きいので、エディタのスクリプトとして動いているxyzzy上では使いにくい。
しかし、使わないのではもったいないので、うまく使う方法を考える。
リーダは*readtable*に定義されているので、自分のコードを読み込むときだけ*readtable*を置き換えてやれば良い。
;;; 適当なファイルに書いて読み込む (in-package "editor") (defvar-local *local-readtable* *readtable*) (export '(*local-readtable*)) (unless (fboundp 'eval-region@old) (setf (symbol-function 'eval-region@old) #'eval-region)) (defun eval-region (from to &optional stream) (interactive "r") (let ((*readtable* *local-readtable*)) (funcall #'eval-region@old from to stream))) (in-package "user") ;;; ここまで (setf *my-readtable* (copy-readtable)) ;*my-readtable*を変更する(略) ;バッファ内で実行 (setq *local-readtable* *my-readtable*)
これで、バッファ内でC-x C-eなどを呼び出したときに独自のリーダが使える。リーダマクロはリード時に展開されてしまうので、コマンドなどには影響しないと思う。
loadやbyte-compile-fileするときは別の関数なので、それぞれ定義を上書きするなどして置き換えれば良いだろう。
実際の影響などは良く理解していないので、今日はメモ程度で。