Hatena::ブログ(Diary)

Functional Emacser RSSフィード

2011-09-14

移転します 05:16 移転しますを含むブックマーク

Markdown 厨の僕には、はてな記法はむずかしすぎました。記事を書くたびに、はてな記法がネックになっていたので、いい加減移転します。

http://cx4a.blogspot.com/

2011-07-09

[] popwin.el v0.3をリリースしました 00:04  popwin.el v0.3をリリースしましたを含むブックマーク

popwin.el v0.3をリリースしました。表示まわりの修正が主です。個人的には過去最高の安定度だと思います。

v0.3本体は次のURLから取得してください。

https://github.com/m2ym/popwin-el/tree/v0.3

install-elispあるいはauto-installを持っている人は次の式を評価することでインストールできます。

;; install-elisp
(install-elisp "https://raw.github.com/m2ym/popwin-el/v0.3/popwin.el")
;; auto-install
(auto-install-from-url "https://raw.github.com/m2ym/popwin-el/v0.3/popwin.el")

今後の目標としては、より積極的なUIの刷新を行いたいと考えています。具体的には以下の通り。

1. popwin:special-display-configのデフォルトをもっと充実させたい

2. diredをなんとかしたい。具体的にはTextMateのナビゲーションペイン(?)を実装したい

3. eshell使ってる人とかansi-term使ってる人を助けたい

4. 他の拡張ともっと協調したい

5. 願わくばGNU Emacsに取り込みたい

何か要望があればpopwin.elのIssuesに登録してください。

https://github.com/m2ym/popwin-el/issues?sort=created&direction=desc&state=open

v0.2からの主な変更点

以下、箇条書き。変更点の詳細についてはREADMEを参照してください。

新追加
  • 便利なキーマップであるpopwin:keymapを追加
  • w3mと協調するmisc/popwin-w3m.elを追加
  • YaTeXと協調するmisc/popwin-yatex.elを追加
バグ修正
  • ポップアップウィンドウを閉じたときに前回のウィンドウのフォーカスが失われる問題を修正
  • ウィンドウ構成が3カラムのときに表示がおかしくなる問題を修正
  • ウィンドウの幅/高さが整数指定のときにレイアウトがおかしくなる問題を修正

tuto0621tuto0621 2011/07/13 10:37 0.3嬉しいです、0.2から愛用していますが、ビフォアアフターでemacsの使い勝手が格段に上がりました。

開発頑張って下さい!!

2011-04-01

[] 主張しないスクロールバーモード、yascroll.elをリリースしました 09:33  主張しないスクロールバーモード、yascroll.elをリリースしましたを含むブックマーク

恥をしのんで告白しますが、実は僕は数カ月前まで標準のスクロールバーモードを有効にしていました。明確な目的があったわけではなく、単純に自分の編集箇所を視覚的に知りたかっただけです。

しかしながら、この標準のスクロールバーモードは、個別のウィンドウごとに出す出さないの選択ができず、しかもスクロールバーが不要な時でも常に表示されるため、編集領域を無駄にするという欠点があります。

そこでiPhoneのスクロールバーからインスピレーションを得て、主張しないスクロールバーモード、yascroll.elというのを作ってみました。yascroll.elはスクロール時にスクロールバーがウィンドウ右辺に現われるという単純なものです。

f:id:m2ym:20110401092547p:image

本体は次のURLから手に入ります。

https://github.com/m2ym/yascroll-el

install-elispauto-installがある場合は次の式を評価することでインストールできます。

;; install-elisp
(install-elisp "https://github.com/m2ym/yascroll-el/raw/master/yascroll.el")
;; auto-install
(auto-install-from-url "https://github.com/m2ym/yascroll-el/raw/master/yascroll.el")

後は.emacsに次の設定を書けばOKです。

(require 'yascroll)
(global-yascroll-bar-mode 1)

なお、linum-modejaspace-modeとの共存で問題があることが分かっています。それらの問題は今後、解決したいと思います。

それでは。

To Heart同人誌To Heart同人誌 2011/04/01 15:02
同意しますが、何が基礎なのか正確に知らないと、やったつもりで終わると思います。

2011-02-28

[] popwin.el v0.2をリリースしました 13:52  popwin.el v0.2をリリースしましたを含むブックマーク

popwin.el v0.2をリリースしました。いくつかの対話コマンドの追加と雑多なバグ修正がメインです。v0.2は次のURLから取得できます。

https://github.com/m2ym/popwin-el/tree/v0.2

install-elispやauto-installでインストールする場合は次の式を評価してください。

;; install-elisp
(install-elisp "https://github.com/m2ym/popwin-el/raw/v0.2/popwin.el")
;; auto-install
(auto-install-from-url "https://github.com/m2ym/popwin-el/raw/v0.2/popwin.el")

追加されたコマンド

popwin:popup-buffer-tail

popwin:popup-bufferと同様ですが、表示されるバッファを末尾までスクロールする点が異なります。ログの表示などに便利です。

popwin:find-file

find-fileしたバッファポップアップウィンドウで表示します。ファイルをちら見するときに便利です。

popwin:find-file-tail

popwin:find-fileと同様ですが、表示されるバッファを末尾までスクロールする点が異なります。

popwin:messsages

Messagesバッファポップアップウィンドウで表示します。

popwin:stick-popup-window

現在のポップアップウィンドウをstickします。

popwin:close-popup-window

現在のポップアップウィンドウを閉じます。v0.2から対話コマンドになりました。

popwin:select-popup-window

現在のポップアップウィンドウを選択します。

popwin:popup-buffer

指定したバッファポップアップウィンドウで表示します。v0.2から機能を限定した対話コマンドになりました。

popwin:display-buffer

popwin:popup-bufferと同様ですが、popwin:special-display-configの設定を使ってポップアップウィンドウを表示します。v0.2から対話コマンドになりました。

popwin:display-last-buffer

popwin:display-bufferで表示したバッファを再度表示します。閉じてしまったポップアップウィンドウを再度確認するときに便利です。

追加された機能

stick

ポップアップウィンドウを自動的に閉じられないようにする機能です。コンパイラエラーメッセージを見ながら修正するときなどに使います。

popwin:stick-popup-windowで現在のポップアップウィンドウをstickします。

popwin:popup-buffer系の関数に:stick tを渡すとポップアップウィンドウをデフォルトstickします。

popwin:special-display-configの各設定に:stick tを追加すると、それによって表示されるバッファポップアップウィンドウをデフォルトstickします。

幅・高さのパーセント指定

popwin:popup-window-widthやpopwin:popup-window-heightなどにフレームサイズに対するパーセンテージを指定できるようになりました。

修正されたバグ

  • C-gした直後にポップアップウィンドウを表示するとすぐに閉じてしまう問題

yousukouwaniyousukouwani 2011/06/10 22:05 これを導入してからtwittering-mode.elなどを快適に仕様できるようになりました。とても感謝しています。ありがとうございます。

2011-01-20

[] ヘルプバッファや補完バッファポップアップで表示してくれるpopwin.elをリリースしました 21:02  ヘルプバッファや補完バッファをポップアップで表示してくれるpopwin.elをリリースしましたを含むブックマーク

ヘルプバッファや補完バッファポップアップで表示してくれるpopwin.elをリリースしました。popwin.elはEmacsポップアップウィンドウという概念を導入することにより、バッファを表示する(display-buffer)際のEmacsのトチ狂った仕様を矯正します。この「トチ狂った仕様」とは例えば、

  • M-x describe-functionしたらウィンドウが勝手に分割された
  • あるいはウィンドウのバッファを勝手に切り替えられた
  • ヘルプバッファ(*Help*)とか補完バッファ(*Completions*)がどのウィンドウに出現するか予測できない
  • しかも作業後にそれらのバッファが表示されたままになったりする

のようなものを指します。Emacsを触ったことがある人なら上記のいずれかは不満に思ったことがあるはずです。ちなみに僕は全てを不満に思っています。

余談になりますが、Wikipedia学習性無力感によると、長期間のストレスは、その対象にある種の無力感を与えるらしいです(犬に電気ショックを与える実験によりこの学習性無力感を実証した)。Emacsユーザーもこの実験の犬と同じなのではないでしょうか。つまり、この謎仕様に少なからずストレスを感じているのにもかかわらず、そのストレスがあまりに長期間であるため対抗する気概が失なわれているのではないかと。かくいう僕もその状態だったわけですが、重い腰をあげて全力で対抗してやりました。その結果生まれたのがpopwin.elなのです。不満に思いはじめてからおよそ4年が経過していました。

本題に戻って、popwin.elのポップアップウィンドウがどういうものかを説明しておきましょう。ポップアップウィンドウというと小さなウィンドウがポンと出てくるイメージがありますが、ここでのポップアップウィンドウは、あくまでEmacsにおける「ウィンドウ」であって、フレームの4辺からウィンドウを引き出すように表示されます。

ポップアップ

f:id:m2ym:20110120205245p:image

ポップアップ後(補完バッファを表示)

f:id:m2ym:20110120205246p:image

popwin.elはこのポップアップウィンドウをベースにして、上記の問題の解決するための優れたユーザーインターフェースを提供します。

インストール

popwin.elを下記からダウンロードしてロードパスの通ったディレクトリインストールしてください。

https://github.com/m2ym/popwin-el

install-elispやauto-installを持っている人は次のようにインストールすることも可能です。

;; install-elisp
(install-elisp "https://github.com/m2ym/popwin-el/raw/master/popwin.el")
;; auto-install
(auto-install-from-url "https://github.com/m2ym/popwin-el/raw/master/popwin.el")

最後に.emacsに次の初期化コードを書いてください。

(require 'popwin)
(setq display-buffer-function 'popwin:display-buffer)

display-buffer-functionを変更したくない人は次の初期化コードでも動作します。

(require 'popwin)
(setq special-display-function 'popwin:special-display-popup-window)

ただし、あらかじめspecial-display-buffer-namesあるいはspecial-display-regexpsにポップアップ表示したいバッファを設定しておく必要があります。

使い方

デフォルトでは*Help*, *Completions*, *compilatoin*, *Occur*バッファポップアップ表示されます。試しにM-x find-fileしてTABを数回押してみてください。フレーム下部に*Completions*バッファポップアップ表示されると思います。

補完バッファポップアップ表示

f:id:m2ym:20110120205534p:image

他のウィンドウを選択するか、C-gすることによりポップアップウィンドウを閉じることができます。もちろん元のウィンドウの状態は保持されます。

他の例のスクリーンショットも示します。

M-x occur

f:id:m2ym:20110120205535p:image

M-x compile

f:id:m2ym:20110120205537p:image

設定

ポップアップウィンドウの幅や高さはpopwin:popup-window-widthやpopwin:popup-window-heightで設定します。ポップアップウィンドウの表示される場所はpopwin:popup-window-positionで設定します。値はleft, top, right, bottomのいずれかです。

どのバッファポップアップ表示するかはpopwin:special-display-configで制御します。この変数には(pattern :regexp VAL :width VAL :height VAL :position VAL :noselect VAL)の形をした値のリストが入ります。patternには、ポップアップ表示するバッファ名を文字列を指定します。patternにシンボルを指定するとそのメジャーモードのバッファポップアップ表示されます。

例えば以下のコードは*scratch*バッファポップアップ表示します。

(setq popwin:special-display-config '(("*scratch*")))
(display-buffer "*scratch*")

:regexキーワードにtを指定するとpatternに正規表現を指定できます。:widthキーワードに値を設定するとpopwin:popup-window-widthの代わりにこの値が使用されます。:heightキーワードや:positionキーワードも同様です。:noselectキーワードにtを指定するとポップアップ表示時にポップアップウィンドウを選択しません。

popwin.elはあくまでdisplay-bufferを制御するものですので、バッファの切り替えなどはその対象外です。例えば先の*scratch*バッファの設定を行ったあとにswitch-to-bufferしてもポップアップ表示されません。これはバグでなく仕様です。

設定例:Anything

*anything*バッファポップアップ表示する設定です。

(setq anything-samewindow nil)
(push '("*anything*" :height 20) popwin:special-display-config)

*anything*バッファポップアップ表示

f:id:m2ym:20110120205538p:image

設定例: Dired

diredのバッファをフレームの上部にポップアップ表示する設定です。

(push '(dired-mode :position top) popwin:special-display-config)

(require 'dired-x)してからM-x dired-jump-other-windowするとdiredのバッファポップアップ表示できます。

diredのバッファポップアップ表示

f:id:m2ym:20110120205539p:image

API

基本的なAPIを紹介します。詳しくはソースコードは読んでください。

popwin:create-popup-window &optional size position adjust => (master-window popup-window)

popwin:create-popup-windowはポップアップウィンドウを作成して、マスタウィンドウと共に返します。マスタウィンドウとはポップアップウィンドウを作成するために分割されたウィンドウです。ポップアップウィンドウを閉じる作業は開発者の責任です。

popwin:popup-buffer buffer &key width height position noselect => popup-window

popwin:popup-bufferはバッファbufferをポップアップウィンドウで表示します。ポップアップウィンドウは自動的に閉じられます。キーワードで渡す引数の意味はpopwin:special-display-configのものと同じです。

popwin:display-buffer buffer flag => window

popwin:display-bufferはpopwin:special-display-configを参照することにより、バッファbufferをポップアップ表示すべきかどうか調べて、ポップアップ表示すべきならそのバッファ特有の設定でpopwin:popup-bufferを呼び出します。ポップアップ表示すべきでないなら、通常通りdisplay-bufferします。

まとめ

popwin.elは地味ですが、Emacsの根本的なユーザーインターフェースの問題を解決してくれます。まだ安定していないと思いますので、どんどん使ってバグ報告してください。メールならtomo@cx4a.orgに、twitterなら@m2ymにメッセージくれると嬉しいです。それでは。

hirose31hirose31 2011/03/02 19:16 使い始めました!超快適です!!

記事中のtypo: s/:regexキーワードにtを指定すると/:regexpキーワードにtを指定すると/

あと、ポップアップしたウィンドウでさらにポップアップしてC-gしたときに、最初にポップアップしたウィンドウが表示されたりするといいなーと思いましたー (今はポップアップウィンドウが全部消えちゃう)

hirose31hirose31 2011/03/02 19:25 kill-buffer でOKでしたー