[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29. ウィンドウ/バッファの操作 (2007/12/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=related%20buffer"
"MeadowMemo/ウィンドウ/バッファの操作"へのコメント(無し)
検索全文Elisp


この章で紹介していること



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.1 フレームの作成 (2007/12/06)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=create%20window"
"MeadowMemo/フレームの作成"へのコメント(無し)
検索全文Elisp

C-x 5 2で SDI のように新しいフレームを作成できます.消す時は, C-x 5 0です.

キーバインドを見ると 1,2,3,5 と 4 が抜けてますね. 実は 4 にも機能があります. 4 は別バッファへ表示という機能があります. 例えば, C-x 4 C-fとすると, ウィン ドウが上下に分割され, 下のウィンドウでファイルを開きます. 同じように, C-x 4 dは dired ですし, C-x 4 C-oは表示 (カーソルが別バッファへ移動しない) にな ります.

ただ,これだけでは,*scratch* というバッファを分割しているだけなので,バッファを 切り替える必要があります.次では,バッファの切り替えについて紹介します.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.2 バッファの変更, 消去,読み取り専用 (2003/10/03)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=buffer%20opr"
"MeadowMemo/バッファの変更,消去,読み取り専用"へのコメント(無し)
検索全文Elisp

Meadow は 1 つのウィンドウで複数のファイルを開くことができます.ここでは,その開 いた複数のファイルを切り替える方法について説明します.

まず,開いたファイルを切り替えるのはメニューの Buffers から選ぶかキーボードで選 ぶことができます.

キーボードでの選択は,



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.3 現在バッファを関連付けで起動 (2003/07/11)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=exec%20buffer"
"MeadowMemo/現在バッファを関連付けで起動"へのコメント(無し)
検索全文Elisp

ネタ元:フォームからの投稿

何が問題なのか?

bat ファイルの編集など,編集後に Windows の関連付けで起動したいファイルがあります. しかし,その度に Explorer から起動するのも面倒です.

設定方法

以下を.emacs に追加します.キーバインドは好みでどうぞ.

 
;;; 現在のバッファを Windows に関連付けにそって起動する関数
(defun W32-exec-buffer ()
  "Type '\\[W32-exec-buffer]': win-start the current line's file."
  (interactive)
  (let ((fname (buffer-file-name)))
    (w32-shell-execute "open" fname)
    (message "win-started %s" fname)))
;;;; M-f2 に割り付け
(global-set-key [M-f2] 'W32-exec-buffer)

詳しい使い方

ファイルを編集後,M-x W32-exec-bufferM-F2とします.これで,現在の バッファを関連付けにより起動できます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.4 バッファを kill する/しない設定 (2003/10/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=kill%20-buffer"
"MeadowMemo/バッファをkillする/しない設定"へのコメント(無し)
検索全文Elisp

バッファを kill したり,あるいはさせないようにするための設定です.

29.4.1 特定のバッファを kill したくない ― protbuf (2003/10/02)  
29.4.2 *scratch*バッファを kill できないように (2003/04/09)  
29.4.3 不要なバッファを自動的に kill ― tempbuf (2003/10/02)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.4.1 特定のバッファを kill したくない ― protbuf (2003/10/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=protbuf"
"MeadowMemo/特定のバッファをkillしたくない―protbuf"へのコメント(無し)
検索全文Elisp

お勧め度:★★☆☆☆ (あれば使うが,なくても構わない) .普通, kill する時には確認も でるので,あまり使ってない.ただ,他の Elisp に消されるのを防ぎたい時に,たまに使う.

バッファをC-x kで消してしまうと,それまでの編集履歴は消えてしまいます.そ のため,C-x kで消した後で,再度開いて,編集の取り消しをしても,当然取り消 すことはできません.

そこで,任意のバッファを消すことができないようにするものが, protbuf.el です.

使うためには, protbuf.el を http://www.splode.com/~friedman/software/emacs-lisp/ からダウンロードし, ロードパスの通ったところへ置きます.そして,以下を.emacs に追加します.

 
(require 'protbuf)

使い方は, kill したくないバッファを選択して,M-x protect-buffer-from-kill-mode とします.これで,そのバッファを消すことができな くなります.

さらに,M-x protect-process-buffer-from-kill-modeというものもあります.こ れは, grep バッファなどに使用します.

grep バッファでは,検索結果がリアルタイムで追加されていきます. grep コマンドが動い ている時には,モードラインに「 grep:run 」と表示され,終了時には「 grep:exit 」と表 示されます.M-x protect-process-buffer-from-kill-modeは「 grep:run 」の時に は kill できないようにします.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.4.2 *scratch*バッファを kill できないように (2003/04/09)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=delete%20scratch"
"MeadowMemo/*scratch*バッファをkillできないように"へのコメント(無し)
検索全文Elisp

ネタ元: Petit emacs lisp tips

*scratch*バッファは簡単な処理に便利なバッファです.しかし,そのバッファの内容を 別名で保存したり, kill したりすると,*scratch*バッファが消えてしまい,また作らな いといけません.

面倒です.

そこで,以下のような設定が便利です.これを入れておくと,*scratch*バッファを C-x C-sで保存時には*scratch*バッファを作成してくれます.

また,C-x k で kill すると,*scratch*バッファの内容をすべて消してくれます. 非常に便利です.

 
(defun my-make-scratch (&optional arg)
  (interactive)
  (progn
    ;; "*scratch*" を作成して buffer-list に放り込む
    (set-buffer (get-buffer-create "*scratch*"))
    (funcall initial-major-mode)
    (erase-buffer)
    (when (and initial-scratch-message (not inhibit-startup-message))
      (insert initial-scratch-message))
    (or arg (progn (setq arg 0)
                   (switch-to-buffer "*scratch*")))
    (cond ((= arg 0) (message "*scratch* is cleared up."))
          ((= arg 1) (message "another *scratch* is created")))))

(defun my-buffer-name-list ()
  (mapcar (function buffer-name) (buffer-list)))

(add-hook 'kill-buffer-query-functions
    ;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
          (function (lambda ()
                      (if (string= "*scratch*" (buffer-name))
                          (progn (my-make-scratch 0) nil)
                        t))))

(add-hook 'after-save-hook
;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
          (function (lambda ()
                      (unless (member "*scratch*" (my-buffer-name-list))
                        (my-make-scratch 1)))))



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.4.3 不要なバッファを自動的に kill ― tempbuf (2003/10/02)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=tempbuf"
"MeadowMemo/不要なバッファを自動的にkill―tempbuf"へのコメント(無し)
検索全文Elisp

要約

不要なバッファを自動で削除してくれるマイナーモードです.

何が問題なのか?

dired を何度か実行すると,それだけバッファができてしまいます.他にもモードによっ ては不要なバッファがたくさんできてしまうことがあります.

何ができるのか?

マイナーモードとして実行すると,非表示の時に kill してくれます.

インストール方法

Emacs Wikiからダウン ロードし,ロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します

 
(require 'tempbuf)

詳しい使い方

不要時に消して欲しいバッファでM-x tempbuf-modeとします.これで,そのバッファ とは別のバッファを表示して,しばらくするとそのバッファを kill してくれます.

手動でするのも面倒なので,

 
(add-hook 'dired-mode-hook 'turn-on-tempbuf-mode)

のように,適当な hook に追加しておくといいでしょう.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.5 別のバッファをスクロール (2003/10/03)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=scroll%20window"
"MeadowMemo/別のバッファをスクロール"へのコメント(無し)
検索全文Elisp

参照用のバッファを別ウィンドウに表示させ,文章を書いたり,プログラムを書いたりす ることがあります.

しかし,このウィンドウをスクロールさせようとすると,C-x oしてから, C-vと面倒です.そこで,ここでは別ウィンドウを操作するためのものについて紹 介します.

非標準の master.el については 25.7.2 別のバッファを操作 ― master.el (2005/02/17) で紹介していますので,そちらを参照して ください.

29.5.1 別のバッファをスクロール ― 標準機能 (2003/03/13)  
29.5.2 別のバッファと連動してスクロール (2003/03/13)  
29.5.3 同一バッファを連動 ― 追従モード (2003/10/03)  



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.5.1 別のバッファをスクロール ― 標準機能 (2003/03/13)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=scroll-other-window"
"MeadowMemo/別のバッファをスクロール―標準機能"へのコメント(無し)
検索全文Elisp

Meadow には別のバッファをスクロールさせる機能が標準で付属しています.

C-M-v( M-x scroll-other-window ) と C-M-S-v (M-x scroll-other-window-down ) です.

それぞれを実行すると,別のバッファで C-vM-v したのと同じようにスクロー ルします.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.5.2 別のバッファと連動してスクロール (2003/03/13)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=scroll-all-mode"
"MeadowMemo/別のバッファと連動してスクロール"へのコメント(無し)
検索全文Elisp

scroll-other-window で別バッファをスクロールさせることはできますが,結局今のバッ ファは自分でスクロールさせないといけません. そこで, scroll-all-mode があります.

これは,標準で付属していますので,M-x scroll-all-mode とするだけで使うこと ができます.この状態で,ウィンドウを二つに分け,一方をカーソルの上下キーでスクロー ルさせると,別ウィンドウもスクロールします.

ただし,C-vM-vM-<M->などの移動方法には対応していま せん.また, 1 行スクロールなどを利用していると,同じ画面からスタートしても,上下 の画面は少しずれます.

また,この機能をオフにするには,再度 M-x scroll-all-mode とします.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.5.3 同一バッファを連動 ― 追従モード (2003/10/03)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=follow-mode"
"MeadowMemo/同一バッファを連動―追従モード"へのコメント(無し)
検索全文Elisp

あるバッファを C-x 2 などで分割した後で M-x follow-mode とすると,追 従モードになります.

これは,分割されたバッファを単一のバッファのように扱うモードです.もう一度, M-x follow-mode とするとオフになります.

「分割されたバッファを単一のバッファのように扱う」というのは,例えば,上のバッファ には 1 〜 10 行までを,下のバッファには 11 〜 21 行までを表示するということです.そして, スクロールさせると,両方のバッファがスクロールします.

また,上のバッファで M-> とすると,画面がスクロールし,カーソルは下のバッ ファへ移動します.

左右に分けておいて,画面全体を活用するなどの用途に利用できるでしょう.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.6 scratch バッファの内容を保存 (2003/10/27)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=save%20scratch"
"MeadowMemo/scratchバッファの内容を保存"へのコメント(無し)
検索全文Elisp
要約

Meadow の終了時に scratch バッファの内容を保存し,起動時に復元できる

何が問題なのか?

scratch で簡単な設定を評価することはよくあります.しかし,この内容は Meadow を終了 すると消えてしまいます.

ほとんどの場合消えてしまっても構わないのですが,たまに消えて欲しくない時がありま す.そんな時に限って,そのことを忘れ Meadow を終了して,消えてしまった,という経験 がある人も多いのではないでしょうか.

何ができるのか?

Meadow の終了時に scrach を保存し,起動時に復元します.これで明示的に消さない限り, scratch のデータが残ります.

ただし, Meadow のクラッシュなどで操作不能になった場合には消えてしまいますので,本 当に重要なものは最初からファイルを作成した方がいいです.

設定方法

以下を.emacs に追加します.

 
(defun save-scratch-data ()
  (let ((str (progn
               (set-buffer (get-buffer "*scratch*"))
               (buffer-substring-no-properties
                (point-min) (point-max))))
        (file "~/.scratch"))
    (if (get-file-buffer (expand-file-name file))
        (setq buf (get-file-buffer (expand-file-name file)))
      (setq buf (find-file-noselect file)))
    (set-buffer buf)
    (erase-buffer)
    (insert str)
    (save-buffer)))

(defadvice save-buffers-kill-emacs
  (before save-scratch-buffer activate)
  (save-scratch-data))

(defun read-scratch-data ()
  (let ((file "~/.scratch"))
    (when (file-exists-p file)
      (set-buffer (get-buffer "*scratch*"))
      (erase-buffer)
      (insert-file-contents file))
    ))

(read-scratch-data)

詳しい使い方

普通に Meadow を起動し,終了するだけで, scratch バッファを保存し復元してくれます.



[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [表紙] [目次] [索引] [検索] [上端 / 下端] [?]

29.7 バッファの複製 − 間接バッファ (2004/08/09)

URL="http://www.bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=clone%20buffer"
"MeadowMemo/バッファの複製−間接バッファ"へのコメント(無し)
検索全文Elisp

要約

現在バッファの複製を作成する.

何が問題なのか?

C-x 2 で別々の部分を表示できるように分割しても,一度 C-x 1 で分割を戻してしまうと,その情報は消えてしまいます.そのため,また C-x 2 で分割して,特定の場所を表示してという作業を繰り返す必要が あります.自分で消した時は仕方ないですが,何らかのメッセージなどで消え てしまった時にはやってられないものです.

とはいえ、普通のファイルであれば、C-x 2でも事足りるかもしれませ ん。しかし、 Info は通常 1 個しか起動できません。しかも、通常多くの部分が 隠されているため、複数の場所を表示することは面倒です。

何ができるのか?

バッファの複製を作成できます.

インストール方法

Meadow の標準機能です.

詳しい使い方

M-x clone-indirect-buffer で現在バッファの複製を作成できます.複 製されたバッファは「同じファイルを編集する別のバッファ」です.バッファ としては,通常のバッファと同じように利用できます.

別のバッファですので,当然カーソル位置なども別々の場所にすることができ ます.

この時,元となったバッファが主で,複製は従になります.従である複製を C-x k でキルしても複製が消えるだけです.しかし,主である元のバッ ファをキルすると,複製バッファもすべて消えます.

コメント

詳細については Emacs マニュアルの間接バッファ を参照ください。


[ << ] [ >> ]           [表紙] [目次] [索引] [検索] [上端 / 下端] [?]