CygwinのEmacsをタスクバーからいい感じに起動


課題

WindowsでEmacsを動かす方法はいくつかありますが、Cygwinを使っている場合は親和性の観点から、CygwinのEmacsが使いたくなります。しかし、emacs-w32.exeはコンソールプログラム(コンソールアプリケーション)として作成されているので、単純にタスクバーにピン留めしてこれをクリックして起動すると、真っ黒のコンソールウィンドウが余分に表示され、いい感じじゃありません。

コンソールウィンドウの隠蔽

Cygwinはベースシステムにrun.exeというコマンドが用意されており、これに目的のプログラムを与えると、コンソールウィンドウを隠蔽してくれます。emacs-w32.exeのコンソールウィンドウを隠蔽するには、run.exeのショートカットを作成して適当な名前(run-emacsとか)に変え、プロパティの「リンク先」としてEmacsのコマンド名emacs-w32を引数として付け、C:\cygwin64\bin\run.exe emacs-w32のようにしておきます。あと、アイコンをemacs-w32.exeのものに変更し、作業フォルダをC:\cygwin64\home\%USERNAME%などとしておくとよいでしょう。

これをタスクバーにピン留めしておくと、起動しても、コンソールウィンドウが一瞬現れますが、すぐ消えるので、まあいい感じとしておきましょう。

ところがタスクバーをよく見ると、Emacsのアイコンがもう一つ表示されてしまいます。これはいい感じじゃありません。

タスクバーのグループ化制御

Windows 7以降では、プログラムはアプリケーションID(AppId)でグループ化されてタスクバーに表示されます。ところが、ショートカットにはデフォルトではAppIdが設定されていないため、起動されたプログラムそのものは別のグループとして扱われてしまうのです。

プログラムのAppIdは、7+ Taskbar Tweakerにより調べることができます。これをインストール・起動すると、ウィンドウ右下にある「Taskbar Inspector」ボタンにより、現在のタスクバーの各AppIdが表示されます。これによると、CygwinのEmacsのAppIDはGNU.Emacsです(GNU純正のMinGW32バイナリも同様のようです)。

次に、ショートカットのAppIdを設定するには、Win7AppIdが利用できます。Win7AppId1.1.exeをダウンロードして適当な場所に置き、次のように実行すると、それまでのAppIdが表示され、新しいAppIdが設定されます。(引数の先頭の/はスイッチとして扱われるので、Cygwinからはショートカットを絶対パスで指定でできないので注意)

$ Win7AppId1.1 run-emacs.lnk GNU.Emacs

完成

以上の作業の後、いったんタスクバーのピン留めをはずし、再度run-emacsをピン留めします。以降は、これをクリックすると、コンソールウィンドウは出ず、タスクバーのグループ化もうまくいき、いい感じです。

もちろん他のGUI付きコンソールアプリケーションにも応用できます。