windows.el - Emacsのフレームをウィンドウマネージャのように管理

Top > UNIX > 学生ツール > elisp > windows.el

作者広瀬雄二
ダウンロードhttp://www.gentei.org/~yuuji/software/windows.el http://www.gentei.org/~yuuji/software/revive.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

解説 Edit

windows.el(及びrevive.el)はEmacsのフレームを ウィンドウマネージャのように管理し 編集状態を完璧に保存&復元する

具体的にはEmacs上で動作するメーラやニュースリーダ等の各画面に 番号(番号以外にも変更可能)が割り当てられ、その番号を指定することで、 各画面を切り替えて管理できるようになる。 また、作業途中でその状態を保存し、復元することができる。

似たようなプログラムにelscreen, escreen, winring等がある。 しかし、保存&復元機能があるのはwindows.elだけである。

screenemacs版と考えて頂くとよいと思う。

詳しくは、windows.elの本体中に書かれています。

.emacs.elの設定 Edit

前準備として .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 Edit

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を省略できます。

使い方 Edit

使い方の例を示します

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 が便利です。

レジューム Edit

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が起動します)

普通でないバッファの扱い Edit

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本体中に書かれているので それを読んでください。


xrea