[Date Prev] [Date Index] [Date Next]
[Thread Prev] [Thread Index] [Thread Next]

[xyzzy:08283] 独自パッケージ内の設定をヒストリ変数で保存する方法について



ML のみなさんこんにちは。OHKUBO Hiroshi です。

ここのところoutlineなんたらのダイアログを書いてみていたのですが、
一つのプロパティシート(共通設定みたいなの)で「デフォルト」と
「ローカル」の設定をしようとしているために破綻したのが出来上がってきて
います。
センスナッシン。

それはさておき。


本題なのですが、「独自パッケージを用いた機能の設定をヒストリ変数で保存
する場合、どのようにするのがよいか」でここの所悩んでいます。

例えば、lisp ファイル hoge.l の中で "hoge" パッケージ定義し、

----------------------------------------
(in-package "hoge")
(register-history-variable '(*foo* *bar*))
----------------------------------------

などとした場合、hoge::*foo* と hoge::*bar* の設定が xyzzy 終了時に 
..xyzzy.history に

----------------------------------------
(in-package "hoge")
(set-default '*foo* 'nil)
(set-default '*bar* 'nil)
----------------------------------------

と書き出されます。
..xyzzy や siteinit.l で "hoge" パッケージを定義している hoge.l を読み
こむようになっていれば問題ないのですが、hoge.l がくだらない lisp ファ
イルで、もう使う必要ねーやってなった場合に単に hoge.l を読みこむのをや
めてしまうと

・次回 xyzzy 起動時に .xyzzy.history 内の (in-package "hoge") を解釈で
  きなくてエラーになった影響でか、ツールバーが表示されなくなる
・ヒストリーファイルのロードが失敗しているので、ヒストリーファイルへの
  出力が抑制される。

といった問題が生じてしまいます。(初めは気がついていませんでした。)

なんとか解決できないものかなと、試しにヒストリーファイルへの出力を変え
てみようと、lisp/history.l を少し書き換えてみて
----------------------------------------
(when (find-package "hoge")
  (in-package "hoge")
  (set-default '*foo* 'nil)
  (set-default '*bar* 'nil)
)
----------------------------------------
と出力させるようにしてみたのですが、結局なぜかヒストリファイルの読み込
みがうまく行きませんでした。


このような現状を踏まえて、「独自パッケージを用いた機能の設定をヒストリ
変数で保存する場合、どのようにするのがよいか」なのです。

一つの解決策として、YAMAMOTO Taizo さんの JavaTinyConsole のように 
設定用ヒストリ変数を user パッケージに入れてしまうという手がありますが、
もしなんとかなるのならパッケージ内の機能の設定はパッケージ内の変数で行
いたいなとも思います。

この問題に対しての考え/対応としては

1. 独自パッケージ内の変数でもうまいことやる方法があるので、その方法で。
2. history.l ファイルの変更に失敗しているだけなので、もう少しうまく変更。
3. user パッケージに入れるのが普通。
4. .xyzzy.history のことはそれ程気にしない。で、放っておく。(^^;
5. その他。

ぐらいが思いつくのですが、どれが妥当でしょうか。
私はこの問題に気がついてからしばらく 4. でいてしまいました。

みなさんなら、独自パッケージを用いた機能の設定をヒストリ変数で保存する
場合どのようにしますか?
指針を頂けると幸いです。

---
OHKUBO Hiroshi
konata_o@xxxxxxxxxxx
http://members.tripod.co.jp/ohkubo/xyzzy/index.html

Index Home