Hatena::ブログ(Diary)

gan2 の Ruby 勉強日記 このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数 PV/ 870427 Subscribe with livedoor Reader 役立つリンク集

2008-07-26

windows.el 再び

windows.elよりもelscreen.elの方が使いやすい - gan2 の Ruby 勉強日記から

ずっと elscreen を愛用し続けてきたのだけど、

タブを使える elscreen よりも

ウィンドウの分割情報も保存してくれるという windows の方が

便利なんじゃないかと思えてきたのでちょっと乗り換えてみることにする。

毎回同じファイルを開いて同じように分割する、という作業が

いい加減面倒になってきたのがきっかけだ。


.emacs に書いてあるコード

;;; windows.el
;; 分割されたウィンドウを切り替えることができる。
;; さらに、分割形態を保存することもできる。
;;
;; キーバインド C-z にを変更。デフォルトは C-c C-w。
;; 変更しない場合は,以下の 3 行を削除する。
;; C-z n   前のウィンドウ
;; C-z p   後のウィンドウ
;; C-z !   現在のウィンドウを破棄
;; C-z C-m メニューの表示
;; C-z ;   ウィンドウの一覧を表示
(setq win:switch-prefix "\C-z")
(define-key global-map win:switch-prefix nil)
(define-key global-map "\C-z1" 'win-switch-to-window)
;; 1-9 ではなく a-z でウィンドウを管理する
(setq win:base-key ?`) ;; ` は「直前の状態」
(setq win:max-configs 27) ;; ` 〜 z は 27 文字
(setq win:quick-selection nil) ;; C-c 英字 に割り当てない
(require 'windows)
;; 新規にフレームを作らない
(setq win:use-frame nil)
(win:startup-with-window)
;; C-x C-c で終了するとそのときのウィンドウの状態を保存する
;; C-x C なら保存しない
(define-key ctl-x-map "\C-c" 'see-you-again)
(define-key ctl-x-map "C" 'save-buffers-kill-emacs)
;; *migemo* のようなバッファも保存
(setq revive:ignore-buffer-pattern "^ \\*")
;; キーバインドの追加
(add-hook 'win:add-hook
    '(lambda ()
       (define-key win: "\C-c\C-g" 'clgrep)
       ))
(define-key win:switch-map "\C-m" 'win-menu)
(define-key win:switch-map ";" 'win-switch-menu)

基本的な設定は分割情報を保存 -- windowsで紹介されているものと同じ。

違うのは、終了時のキーバインドを変えてたり

通常時の操作に使うキーバインドを追加してたりすること。


終了時のキーバインド

;; C-x C-c で終了するとそのときのウィンドウの状態を保存する
;; C-x C なら保存しない
(define-key ctl-x-map "\C-c" 'see-you-again)
(define-key ctl-x-map "C" 'save-buffers-kill-emacs)

普通は「C-x C」したときにウィンドウの状態を保存させるみたい。

でもこれだと保存させるのが少し特別な操作のように思える。

僕は保存することを特に意識せずに自動的にやってもらいたいので

「C-x C-c」したときに自動的に保存されるように変更した。

で、逆に保存したくないときは「C-x C」。


通常時の操作に使うキーバインドの追加

;; キーバインドの追加
(add-hook 'win:add-hook
    '(lambda ()
       (define-key win: "\C-c\C-g" 'clgrep)
       ))
(define-key win:switch-map "\C-m" 'win-menu)
(define-key win:switch-map ";" 'win-switch-menu)

clmemo を使っているときに「C-c C-g」で clgrep という機能が呼び出せるのだけど

これのバインドを取られないようにするのが最初の設定。

実はこの設定はけっこう前に書いていて

しかもなんかよく分からない書き方をしているので

どうしてこれで大丈夫なのか今一分からない*1のだけど

そういうように動作してるのでたぶんそうなのだろう。。


下の2つは、デフォルトキーバインドだと

「C-z C-w」でメニューとか、「C-z =」でウィンドウの一覧を表示とかになっていて

これは分かりにくいしあまり押しやすくもないので、

それを「C-z C-m」と「C-z ;」に変更している。


できれば起動時に自動でウィンドウ情報を復元してほしい

保存は上にすでに書いたように「C-x C-c」で自動的に行えるようになったのだけど

復元は「C-z C-r r」をしなくちゃいけなくて

どうせだったらこれも自動でやりたいと思っている。

.emacs の一番下に

(resume-windows)

って書いておくと一応望んだ動作をしてくれるが

メッセージバッファによく分からないエラーが出るのでそれが気になる。


ドキュメントに自動で復元する方法の記述がないので

「C-z C-r r」とかで復元するしかないのかなぁ。自動化は難しいのだろうか。

*1win: ってなんだ…

ayu_standaloneayu_standalone 2009/08/18 16:16 .emacs 内で (resume-windows) すると、確かに *Messages* に変なエラーが記録されますね。
ちなみに、emacs -f resume-windows であれば、エラーは表示されません。

なので、私は emacs -f resume-windows を alias あるいはウインドウマネージャ(awesome)のショートカットに割り当てて使っています。ご参考までに。

gan2gan2 2009/10/24 12:13 レスが随分遅れてしまってごめんなさい。
起動時に -f オプションをつけてエラーを出さなくするのですね。
なるほどです!ありがとうございます。

TAKUMA_NTAKUMA_N 2011/05/03 15:49 はるか昔の記事に書きこんでしまってあれですけど、
(resume-windows 0)
にするとエラーが出なくなりませんかね。
うちのものだけか分からないですけど。

parmigianoparmigiano 2012/02/15 13:19 gan2さんとまったく同じことをしてて「エラーメッセージ消えないなぁ」と
思っていたんですが,TAKUMA_Nさんの方法でうまくいきました!
横からですが,ありがとうございます。

gan2gan2 2012/02/15 22:48 それはよかったです!
かくいう僕自身は windows は使わなくなってしまい、
elscreen を使っている日々です。

返信し忘れていて大変申し訳ないのですが、
TAKUMA_N さんありがとうございます!

虹 2012/02/27 18:10 最近elscreenを入れて便利だなと思っていたのですが、
再起動時に以前の状態を保持できないのが不便だと感じ
windows.elに乗り換えようかと情報集め中です。

gan2さんはどうしてwindowsからelscreenに乗り換えたんでしょうか?

gan2gan2 2012/03/09 22:51 こんな理由で納得してもらえるか少し不安ですが、
タブという形でバッファが目に見えているのが扱いやすいからです。
今どんなバッファを開いているのかを上部のタブ名から常に把握できるので、
個人的には elscreen の方が安心して使えます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証