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で開く=保存時に開いていたファイルをすべて読み込み、ウィンドウのタイル配置やバッファとのバインドも復元してくれる)。
  • それでかれこれ1年半くらい使ってきたけれど、Windows 7への移行に当たって考え直してみたらレジストリいじるほうが作業自体簡単で、下にも書いた履歴の問題がないメリットもあり、レジストリ変更で対処することにしました。以下は悪い子向け手順なので、よい子は下の「カスタマイズ3の2」まで読み飛ばしてください。
  • 悪い子向け手順1:.ssnを開くアプリケーションとしてxyzzyを指定(xyzzy.exeでもxyzzycli.exeでもお好みで)。.ssnファイルをダブルクリックしてダイアログで関連付けてもいいし、コントロールパネルの「プログラム」→「既定のプログラム」→「あるファイルの種類を特定のプログラムでオープン」を使ってもいい(この状態ではまだ.ssnはただのテキストとしてfind-fileで開く)。
  • 悪い子向け手順2:手順1の後、レジストリ・エディタでHKEY_CURRENT_USER\Software\Classesを開き、.ssn関係を見て、値が「〜xyzzy.exe" "%1"」(あるいはxyzzycli.exeかも)となっているエントリを「〜xyzzy.exe" "-s" "%1"」(同)に変更。以上でセッション・ファイルがセッションとして解釈されるようになる。超簡単。

カスタマイズ3の2:xyzzyセッション・ファイル(.ssn)をダブルクリックでセッションとして開く(よい子向け)

  • よい子はもちろん上述のXyzzy Wikiにあるスクリプトを追加すればOK。このスクリプトを使う方法には、C-x C-fで開いても*.ssnなら自動的にload-sessionしてくれるメリットもある(デフォルトではload-sessionはC-x 6 fの3ストローク必要)。
  • とはいえ、この方法には「ファイル」→「最近使ったファイル」の方にセッションの履歴が入り、「最近使ったセッション」には入らないという作用が伴う。それがいやなよい子向けに、レジストリをいじらないで済む手順も検討してみました。追記:以下の方法よりコメントにある.iniファイル使う方法のほうがよいかもです。
  • そこで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)
  • 購入したWindows 7は日本語版で、ATOKもまだ入れていないので現環境で必要になるかどうかは不明。必要性が生じたときに備えてここに記す。

積み残し作業

  • テキスト・キーワードの色づけ設定