xyzzyをWindows 7 x64にインストールするの巻・その3
タイトルにはWindows 7 x64と銘打ってますが、これは単に私がWindows 7 Professionalの64ビット版に入れて使ってるというだけで64ビット版固有の問題がなにかあったとかそれを解決したとかではありません。32ビット版やWindows Vista(特にセッション関係の設定とか)でxyzzyを使うときも同様に設定できるはずです。
カスタマイズ3:xyzzyセッション・ファイル(.ssn)をダブルクリックでセッションとして開く
- セッションもまた、ないと使う気がしない私的超重要機能。xyzzyセッションは(xyzzyの)ウィンドウのタイリングと個々のウィンドウのバッファとのバインド状況などを保存したデータ。統合開発環境の「プロジェクト」みたいに複数のドキュメントを一括して読み込める。「ファイル」→「セッションの保存」でその時点の状況を記録した拡張子.ssnのセッション・ファイルを作成できる。
- xyzzyが作成する.ssnファイルは単なるテキスト・ファイルなんだけどxyzzy.exeに"-s"オプションを付けて開くとセッション・ファイルと解釈してくれる(ファイルをfind-fileではなくload-sessionで開く=保存時に開いていたファイルをすべて読み込み、ウィンドウのタイル配置やバッファとのバインドも復元してくれる)。
- Windows XPまではエクスプローラからファイルの関連付けで拡張子.ssnのopenアクションにxyzzy -sを指定するだけでOKでした。ところがWindows Vistaでオプション付きの関連付けを設定するインタフェースが廃止されてしまいました(Windows 7でも廃止されたまま)。Windows Vistaに移行したときに面食らって、あわてて対処法を探し、Xyzzy Wikiの「tips/ファイルを開く時にセッションファイルならば展開する」のスクリプトを.xyzzyに書いて対処していました。
- それでかれこれ1年半くらい使ってきたけれど、Windows 7への移行に当たって考え直してみたらレジストリいじるほうが作業自体簡単で、下にも書いた履歴の問題がないメリットもあり、レジストリ変更で対処することにしました。以下は悪い子向け手順なので、よい子は下の「カスタマイズ3の2」まで読み飛ばしてください。
カスタマイズ3の2:xyzzyセッション・ファイル(.ssn)をダブルクリックでセッションとして開く(よい子向け)
- よい子はもちろん上述のXyzzy Wikiにあるスクリプトを追加すればOK。このスクリプトを使う方法には、C-x C-fで開いても*.ssnなら自動的にload-sessionしてくれるメリットもある(デフォルトではload-sessionはC-x 6 fの3ストローク必要)。
- とはいえ、この方法には「ファイル」→「最近使ったファイル」の方にセッションの履歴が入り、「最近使ったセッション」には入らないという作用が伴う。それがいやなよい子向けに、レジストリをいじらないで済む手順も検討してみました。追記:以下の方法よりコメントにある.iniファイル使う方法のほうがよいかもです。
- 最も簡単なのは「start C:\xyzzy\xyzzy.exe -s %1」のような1行バッチファイルをxyzzy-s.cmdのような名前で作り、それを.ssnに関連付けること。ただし.cmdはコマンドプロンプト(cmd.exe)がホストするのでコマンドプロンプトの窓が一瞬だけ出てしまいます。
- そこで2番目に簡単そうなWindows Script Hostで書いたバージョンが以下。これをxyzzy-s.vbsのようなファイル名で保存し、.ssnを開くアプリケーションとして関連付ければOK。コマンドプロンプトは開きません(cscript.exeがホストするので当たり前ですが)。これを私的なよい子向け手順の決定版とします。
Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.Run "C:\xyzzy\xyzzy.exe -s " & WScript.Arguments(0) Set objWshShell = Nothing
WSH以外にも外部プロセスを起動できるプログラム処理系なら何でもできると思いますが、いずれにしてもエクスプローラ“ー”とxyzzy.exeの間に何らかのホストが一個はいるので釈然としない気持ちは残りますね。
カスタマイズ4(参考):S-SPC対策
- 以前使用していたWindows Vista環境(英語版Windows Vista UltimateにMUIで日本語設定したもの+ATOK2008)で(環境のせいかどうかは不明だが)S-SPCが半角スペース入力にならない不具合が出てた。それに付け焼き刃的に対処。lispよく知らないので変なコードかもしれないが動いたのでよしとした。siteinit.lに記述。
;ATOK2008とVistaの組み合わせでS-SPCが半角スペース入力にならないのに付け焼き刃的対処 (defun bind-F20-to-SPC () (interactive) (insert " ")) (global-set-key #\F20 'bind-F20-to-SPC)
積み残し作業
- テキスト・キーワードの色づけ設定