Emacs の SLIME から Climacs 関係の関数を呼ぶ時は
Emacs の SLIME から Climacs 関係の関数を呼ぼうとすると、スペシャル変数が nil になっていて動いてくれない。
次のように clim:*application-frame*
に Climacs のアプリケーションフレームをバインドし、 drei:with-bound-drei-special-variables
を使うとスペシャル変数がバインドされてうまく動いてくれる。
もちろん、Climacs は動かしておく必要がある。
(defmacro with-climacs (&body body)
`(let ((clim:*application-frame* (clim:find-application-frame 'climacs-gui:climacs)))
(drei:with-bound-drei-special-variables (clim:*application-frame*)
,@body)))
(with-climacs
(values
(esa:current-buffer)
(drei:drei-instance)
(clim:point)
(or (drei-buffer:end-of-buffer-p (clim:point))
(drei-buffer:object-after (clim:point)))))
;;=> #<CLIMACS-GUI:CLIMACS-BUFFER size:78 {1005426701}>
;; #<CLIMACS-GUI:CLIMACS-PANE TEXTUAL-DREI-SYNTAX-VIEW {1005190AD1}>
;; #<DREI-BUFFER:DELEGATING-RIGHT-STICKY-MARK 50 {1005426731}>
;; #\(
0 件のコメント:
コメントを投稿