課題
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付きコンソールアプリケーションにも応用できます。