gudを使った後にwindowの状態を元に戻す

何ヶ月かに一回訪れる、PC欲しい病が発生しています。なんでこんな時期に。
まぁボーナスなんて出ない(多分)ので、みーてーるーだーけー、という感じではありますが、ITmedia+Dで見たこの記事<http://plusd.itmedia.co.jp/pcuser/articles/0906/05/news037.html>を見て、やべぇ欲しいとか思ってしまいました。

しかもつい最近、外部GPU付きで10万とかいうらしく、性能的には必要十分です。

・・・しかし手元にはすでにMacBook(2008 unibody)が。

確かに、MacBook買った当初はMacばっかり利用していましたが、現在デスクトップに完全なLinux環境(GentooLinux & ratpoison & mlterm)を構築したところ、あまりに快適すぎて、Macが快適じゃなくなってしまったというなんじゃそりゃ的な状態に。

いまやMacでうらやましいのは、通知領域(多分ratpoisonでも工夫すればできるような)くらいです。いや本当。Dockなんていらんですよ。あれよりだったらWindows 7のタスクバーの方が高性能になっちゃいましたし。(Windows 7は実際かなりよかですよ。でも今の環境と比べちゃねぇ・・・)

まぁ、Macに馴染めなかったのは、中身がBSD/Unixだったからという説も。Gentooディレクトリ構成とか作法が違いすぎて覚えれんですたい。

で、一度このMacbookUbuntuとか(これ挫折)Gentooとか(これは出来た)入れてみたんですが、こんどは発熱とバッテリーのもたなさに辟易。そしてなにより、MacBookの独特なハード構成のせいで、普通は動くようなものが動かないという素敵な事態が。

色々工夫することで、(多少は)逃れられるようですが、やはり発熱はいかんともしがたく。パームレストにまで熱が普通に来ます。
Mac上になんとかして環境を構築しようとしても、なんか色々な面で面倒が起きてしまい、なんかグダグダに。
というわけで頭に戻って、つまりは持ち運べるLinux環境が欲しいってことですね。

気付いたらタイトルとなんも関係の無い話でした。脱線にも程がある。
さて、最近私はC++でこそこそと物を作っていて、当然の如くEmacs上で開発してます。
で、C++で作ったものをテストして、原因がよくわからん時にはgdbの力を借りますよね。M-x gdb は心強い友人ですよ。

このM-x gdb をやる時、.emacs.elとかに

(setq gdb-many-windows t)

とかやっておくと、gdbが、gudというものと一緒に立ち上がるようになります。
これやると、ウィンドウが上下左右分割されて、さながらGUIクライアントみたいになります。

これはこれで便利?なんですが(バッファ移動が以外と面倒&それぞれキーバインドがあって覚えにくい)、これを終了(DebuggerバッファをC-x k)したとき、前の状態に戻ってくれりゃいいのに、なぜか戻ってくれません。

自分的には、常に終了時にはウィンドウの分割状態を戻しておいて欲しいので、こんなん書いてみました。

(when gdb-many-windows
  (defvar my-gud-window-configuration nil)
  (add-hook 'gud-mode-hook '(lambda ()
                              (setq my-gud-window-configuration (current-window-configuration))))

  (add-hook 'kill-buffer-hook (lambda ()
                                (when (string-match " \*gud-.+" (buffer-name (current-buffer)))
                                  ;; gud-関係の場合
                                  (when (window-configuration-p my-gud-window-configuration)
                                       (set-window-configuration my-gud-window-configuration)
                                       (setq my-gud-window-configuration nil)))))

やってることは単純で、gdb-many-windowsがtなら、gudが起動する時に、
windowの分割状態を保存して、kill-buffer時、バッファ名が *gud-*だっ
たら、ウィンドウの分割状態をもとに戻す、ということをやっているだけ
です。

これだけでも大分使いやすくなります。後はspeedbarがなんとかならない
かなぁ。