windows.el - Emacsのフレームをウィンドウマネージャのように管理
作者 | 広瀬雄二 |
---|---|
ダウンロード | http://www.gentei.org/~yuuji/software/windows.el![]() ![]() |
関連サイト | http://www.gentei.org/~yuuji/software/![]() |
バージョン | windows.el:2.40 revive.el:2.18 |
学内パス | /home/student/s1138001/lib/emacs/lisp/windows.el /home/student/s1138001/lib/emacs/lisp/revive.el |
学内管理者 | s1138001 |
Table of Contents |
解説 
windows.el(及びrevive.el)はEmacsのフレームを ウィンドウマネージャのように管理し 編集状態を完璧に保存&復元する
具体的にはEmacs上で動作するメーラやニュースリーダ等の各画面に 番号(番号以外にも変更可能)が割り当てられ、その番号を指定することで、 各画面を切り替えて管理できるようになる。 また、作業途中でその状態を保存し、復元することができる。
似たようなプログラムにelscreen, escreen, winring等がある。 しかし、保存&復元機能があるのはwindows.elだけである。
詳しくは、windows.elの本体中に書かれています。
.emacs.elの設定 
前準備として .emacs.el または .emacs に以下のように記述します。
;; Lisp ライブラリの load path に "~s1138001/lib/emacs/lisp" を追加します。 (setq load-path (cons (expand-file-name "~s1138001/lib/emacs/lisp") load-path)) ;; windows.el (require 'windows) (win:startup-with-window) (define-key ctl-x-map "C" 'see-you-again) ;; revive.el (autoload 'save-current-configuration "revive" "Save status" t) (autoload 'resume "revive" "Resume Emacs" t) (autoload 'wipe "revive" "Wipe emacs" t)
key bind 
C-c C-w 1 | 分割状態 1 へ (Q) |
C-c C-w 2 | 分割状態 2 へ (Q) |
: | : |
C-c C-w 9 | 分割状態 9 へ (Q) |
C-c C-w 0 | 直前の分割状態へ(バッファ0と交換) (Q) |
C-c C-w SPC | 分割状態1~nのうち、直前用いたものへ (Q) |
C-c C-w n | 次の分割状態へ(C-c SPC) |
C-c C-w p | 前の分割状態へ |
C-c C-w ! | 現在のウィンドウを破棄 (Q) |
C-c C-w - | ちょっと前のウィンドウ状態を復活(Q) |
C-c C-w C-w | ウィンドウ操作メニュー |
C-c C-w C-r | リジュームメニュー |
C-c C-w C-l | ローカルリジュームメニュー |
C-c C-w C-s | タスク切替え |
C-c C-w = | 分割状態保存バッファ一覧表示 (Q) |
デフォルトの設定ではQマークの付いているkey bindはC-wを省略できます。
使い方 
使い方の例を示します
emacsでプログラムを編集していたとして、 そのときにメールを読みたくなったとします。 メールは2番のウィンドウに割り当てることにします。 C-c C-w 2 と入力すると、
C)reate D)uplicate P)reserve F)indfile B)uff X)M-x N)o:
と表示されます。 メールを読むために Create の c を入力して新規ウィンドウを作成します。 そこでメールリーダを起動すると、ウィンドウの分割状態がメール専用になります。 読み終わったら C-c C-w 1 を入力すると、1番のバッファに保存されている 最初のプログラム編集状態に切り替わります。 これでプログラム作成に直ちに戻れます。
次にニュースを読みたくなりました。 ニュースリーダを起動して ... 読み終わりました。 またプログラムの編集を再開しようと思います。 ここで1番のウィンドウでニュースを読みましたので C-c C-w 3 を入力し Preserve の p を続けて入力します。 これで1番のバッファの内容は更新せずに、 現状のウィンドウ状態を3番のバッファに保存します。 つまり3番のウィンドウにニュースが移り、 1番のウィンドウにプログラム編集状態が戻りました。 C-c C-w 1 を入力してプログラムの編集を再開します。
メールが到着したら C-c C-w 2 を、ニュースを読むなら C-c C-w 3 を入力します。 メールとニュースだけを読み続ける場合のように 二つの状態を行ったり来たりする場合は C-c C-w SPC が便利です。
レジューム 
revive.el と組み合わせて使うことにより、リジューム機能を利用できます。 C-c C-w C-r を入力すると、
A)save-all R)estore-all S)ave-this L)oad-this N)Load# ~)read-~
と表示されます。 ここで a を入力すると現在の全てのウィンドウの情報を ファイルにセーブすることができます。 r を入力するとファイルにセーブしたものをロードすることができます。 s,l を入力すると現在選択しているウィンドウ状態をそれぞれ セーブ/ロード します。 n を入力するとファイルから数字で指定したウィンドウ状態をロードします。
また、 C-x C と入力するとセーブ後に Emacs を終了します。 そして、次回 Emacs を起動した直後に resume-windows (C-c C-w C-r r)を起動することで 直ちに以前の状態に戻ることができます。 (emacs -f resume-windows として起動すると以前の状態でemacsが起動します)
普通でないバッファの扱い 
revive.elの説明文には、
mh-rmail ではカレントバッファが mh-folder-mode, gnus ではカレントバッファが gnus-Group-mode になります。 この対応関係は、変数 revive:major-mode-command-alist-default に書かれています。 この変数に登録されている以外のものを定義したい場合は、
(setq revive:major-mode-command-alist-private '((hogehoge-mode . hoge) (herohero-mode . herohero) ("タイプ&メニュー" . trr)))
のように revive:major-mode-command-alist-private の値を設定すると 次回 resume した時に自動的に対応するコマンドが起動されます。 また上の例にあるように、major-mode(シンボル)の代わりに buffer-name(文字列)を指定することもできます。
と記述があります。
さらに詳しい使い方を知りたいならばwindows.el本体中に書かれているので それを読んでください。