kiwanami / emacs-window-manager

Customizable window manager for emacs
230 stars 28 forks source link

Added advice for quit-window for not loosing track #37

Closed tkf closed 12 years ago

tkf commented 12 years ago

This advice catches `quit-window' call, resets the buffer tracked by e2wm and removes the buried buffer from the history list.


q で help や info を抜けると、バッファがe2wmの管理から外れる不具合を修正するために、 quit-window にアドバイスを加えてみました。 history list からバッファを消すのとウィンドウの更新 (e2wm:pst-update-windows) が呼ばれるようになりました。

解決された不具合ですが、例えば two perspective の right window に help バッファをだして q で抜けたあと、 sub window を開くと right window に help バッファが戻ってくることで確認できます。

tkf commented 12 years ago

このパッチの実装だとバッファを管理下において履歴を操作するだけですが、 pst-class のメソッド化するとより良いのでは、と思います。 sub に居る場合は window を閉じる、みたいなメソッドを書けば popwin 的なこともできますし。 popwin とは違って main と sub すべてのバッファを監視する必要があるので、 e2wm 本体でこの機能をもつ必要があると思いますがどうでしょうか? あとは C-g を minor mode-map で上書きするかタイマーで監視するかすれば、 popwin の機能はすべてカバー出来ると思います。

kiwanami commented 12 years ago

パッチありがとうございます!! quit-window, bury-buffer の管理が甘いままで、今までごまかしていました。 window-normalize-buffer が 24 からみたいなので、フォールバックを追加してみます。

あとスマートなアイデアありがとうございます。pst-classのメソッド化するというのは、popwinのように「注目していたバッファが居なくなった、C-gが押された、ウインドウの配置が変わった、フォーカスが外れた」というイベントが起きた時に、パースペクティブとしてどうするかを記述できるメソッドを定義できるようにするという意味で合っていますか? これでpopwinの機能取り込みが一気に進みそうな気がしました。

tkf commented 12 years ago

他のPR、いっきに pull していただいて、ありがとうございます!

メソッド化のアイディアはそういう意味であってます。ただ、 popwin がタイマーで "bury" イベントを監視しているのに対してこのパッチのアプローチは e2wm の他のメソッドと同様、アドバイスで片っ端からハイジャックする方法です。 popwin の場合は監視バッファがひとつだったのでタイマーで書いたほうが綺麗だったのかもしれませんが、いくつも管理バッファ・ウィンドウがある e2wm だとそうもいかない気がします。 e2wm は既にグローバルマイナーモードなのでキーバインドの変更も可能ですし、他のメソッドがかなりアドバイスに依存してることを考えるとアドバイスとキーバインドの上書きで同様の機能を実装するのが自然では、と思いました。なので、このパッチの方針でいくとe2wmでpopwinが使えるようになるというよりは同様の機能の別実装という形になると思います。

kiwanami commented 12 years ago

遅くなってすいません。先月今月はいろいろと詰まっておりまして、なかなかこちらに時間ができてませんでした。 確かに、タイマーのように一網打尽に出来ると良かったのですが、乗っ取りまくりのこの方法もここまで徹底的にやれば、これもありかなと思うようになって来ました。 このパッチについてももうちょっと研究させていただいて、とり込もうと思っています。もう少々お待ちを。

kiwanami commented 12 years ago

大変遅くなりましたが、やっと取り込めました。 まとまった時間がなかなか取れず、Elscreenとの干渉を取り除くのに時間がかかってしまいました。 window-normalize-buffer のfallbackも入れたので、手元の Emacs23.4, Emacs24 で動いております。 数日使ってみて安定してそうであれば、ver bumpしようとおもいます。