bowbow99 / xyzzy.ansify

Common Lisp の xyzzy にないもの詰め合わせ予定地
MIT License
6 stars 0 forks source link

再起動を princ 出力時は report-function を使う #30

Closed bowbow99 closed 12 years ago

bowbow99 commented 12 years ago

condition-restart 時代の issue が生き残ってたのでコピペ復活。


princ というか *print-escape*nil だったら REPORT-FUNCTION を使う。

CLHS: Macro RESTART-BIND

:report-function
Value is evaluated in the current lexical environment and should return a function of one argument, a stream, which prints on the stream a summary of the action that this restart takes. This function is called whenever the restart is reported (printed while print-escape is nil). If no :report-function option is provided, the manner in which the restart is reported is implementation-dependent.

;; on SBCL
CL-USER> (restart-case
             (princ (find-restart 'example))
           (example ()
             :report "I'm example."
             t))
I'm example.
#<RESTART EXAMPLE {BC6FAA9}>
bowbow99 commented 12 years ago

コメントもコピペ


xyzzy は出力時に printer control variables を設定してないみたい。

元々 xyzzy で出力時に lisp コードが走るのは structure を princ 出力した時だけのはずなので困ることはないんだろうけど、手元では structure を出力するのに常に print-function を使うようにしてて、printer control variables が設定されてないと print-function 内部からは判断付かなくなってしまう。