2010年1月7日木曜日

[xyzzy]分かったけど解決はしていない

xyzzyを初期化ファイルなし(xyzzy.exe -q)で起動するとメニューバーの [表示]->[ツールバー]部分が表示されない問題の原因が分かったのでメモ。

これはどうやらツールバーメニューの初期化を行う関数 (ed::load-command-bar-info) が *load-history-hook* から呼び出されていて、さらにこのフック変数を実行する関数 (load-history-file) が.xyzzyのロードと共に呼び出されている為に -q オプションを 指定して起動するとツールバーメニューが空になる現象が起こるらしい。

;; estartup.l:148:
(unless no-init-file
  (trap-errors
    (let ((*loading-user-initial-file* t))
      (load (namestring (if (file-system-supports-long-file-name-p "~/")
                            "~/.xyzzy" "~/_xyzzy"))
            :if-does-not-exist nil :verbose nil :print nil)))
  (unless *inhibit-history-load*
    (ignore-errors (load-history-file))))

[追記]

根本的な解決策ではないが、以下をsiteinit.lに入れてダンプファイル削除+再起動で直ったことにしておこう。

(defun load-command-bar-info-if-xyzzy-q ()
  (let ((cl (car si:*command-line-args*)))
    (when (or (equal cl "-q")
              (equal cl "-no-init-file"))
      (ed::load-command-bar-info))))
(add-hook '*pre-startup-hook* #'load-command-bar-info-if-xyzzy-q)

0 件のコメント:

コメントを投稿