一汁三菜

インターネットのインフラよりな技術の話題、Web周りの技術的な話題、趣味のマラソン、旅行、その他日々の記録をしています。

minttyにジャンプリスト機能をつけるパッチを書いた

Cygwinで最近ターミナルエミュレータとして標準的に使われるようになっているminttyに、Windows 7で導入されたインターフェースであるジャンプリストの機能を追加するパッチを書いた。

こんな感じになります。

f:id:silphire:20140309223658p:plain

それぞれのカスタムタスクをクリックすると、縦長のターミナル、横長のターミナル、EUC-JPのターミナルが起動します。

この部分のカスタマイズは~/.minttyrcで出来るようになっていて、こんな感じに書いておきます (空行を入れないように気を付けて下さい)。すると、上のスクリーンショットのような形になります。

AppID=mintty
JumpListTitle0=Portrait
JumpListCmd0=--size 80,50 -
JumpListTitle1=Landscape
JumpListCmd1=--size 150,25 -
JumpListTitle2=EUC
JumpListCmd2=-o Charset=eucJP -

本当はこの設定の部分もGUIで設定出来るようになるといいのですが、とりあえずは最低限の機能だけという事で。

このパッチは本家に投げてみたのですが、採用されるかは微妙。COMを触っている部分のコードはお世辞にもきれいとは言えないし、issue trackerを見ると取り込まれずに放置されているパッチがいくつかあるので、あまり期待できないかなーと。

しかし、2014年になってC言語でCOMを叩くコードを書くことになるとは思いもよりませんでした。5年くらい前にC++でCOMを叩くコードを書いたことがあったので、そのおぼろげな記憶を頼りに書こうとしていたのですが、結構勝手が違いました。C++で参照を使っているところはポインタに書き換えたり、thisポインタを明示的に渡してあげないといけなかったり、メソッド呼び出しの際に必ず明示的にlpVtblを指定しないといけなかったりと、C++では隠ぺいされている部分を直に触らされるというのは面白い物でした。

今回作成したパッチはgistに貼り付けた物を以下に貼ってみます。