2010/12/13

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 件のコメント: