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