Diff of UNIX/学生ツール/elisp/windows.el


TITLE:windows.el - Emacsのフレームをウィンドウマネージャのように管理
#navi(UNIX/学生ツール)
|~作者|広瀬雄二|
|~ダウンロード|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|
#contentsx

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

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

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

screenのemacs版と考えて頂くとよいと思う。

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

//本文
**.emacs.elの設定 [#wff81bb1]

前準備として .emacs.el または .emacs に以下のように記述します。

#pre
#pre{{
;; 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)

#pre(end)

}}
** key bind [#dd0a413e]
|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を省略できます。

**使い方 [#c4ced82c]
使い方の例を示します

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

***レジューム [#vb94fb87]
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が起動します)

***普通でないバッファの扱い [#wea26ad3]

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

#navi(UNIX/学生ツール,,footer)
xrea