[xyzzy:08283] 独自パッケージ内の設定をヒストリ変数で保存する方法について
- Subject: [xyzzy:08283] 独自パッケージ内の設定をヒストリ変数で保存する方法について
- From: OHKUBO Hiroshi <konata_o@xxxxxxxxxxx>
- X-mailer: EdMax Ver2.84.6F
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