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

28. バッファリストとバッファの切り替え (2010/07/17)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=buffer%20list"
"MeadowMemo/バッファリストとバッファの切り替え"へのコメント(無し)


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

C-x C-bで表示されるバッファリストとC-x b時にバッファを切り替えるための Elisp です.



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

28.1 バッファリスト ― バッファの一覧表示 (2007/11/10)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=about%20buffer-list"
"MeadowMemo/バッファリスト―バッファの一覧表示"へのコメント(無し)

デフォルトではC-x C-b(list-buffers) で以下のようなバッファリストが表示され ます.カーソルは移動しません.

 MR Buffer           Size  Mode         File
 -- ------           ----  ----         ----
.   *scratch*           0  Lisp Interaction
 *  *Messages*       4873  Fundamental
    *Compile-Log*       0  Fundamental

このバッファリストはシンプルでいいのですが,いちいち C-x o でカーソルを移動 する必要があったりと,使い勝手はあまりよくありません.

そこで,このバッファリストをカスタマイズする方法について紹介します.

28.1.1 項目追加の可能なバッファリスト― listbuf (2003/09/18)   
28.1.2 バッファの移動 ― electric-buffer-list (2004/09/26)   
28.1.3 カスタマイズ可能なバッファリスト ― bs (2004/09/26)   
28.1.4 さらに便利なバッファリスト― ibuffer (2007/11/10)   
28.1.5 バッファリストのリストを絞り込む (2003/09/18)   
28.1.6 一致したバッファを削除する (2003/09/18)   
28.1.7 ファイルによってバッファリストの表示を変える (2003/10/12)   
28.1.8 バッファリストをソート (2003/09/18)   



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

28.1.1 項目追加の可能なバッファリスト― listbuf (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=custom%20list-buffers"
"MeadowMemo/項目追加の可能なバッファリスト―listbuf"へのコメント(無し)

何が問題なのか?

デフォルトのバッファリストは項目の追加や削除などを行うことは困難です.

そこで,カスタマイズが可能なバッファリストがあります.これなら,多少のカスタマイ ズは可能です.

インストール方法は?

まず,http://www.splode.com/~friedman/software/emacs-lisp/より, listbuf.el をダウンロードし,ロードパスの通ったところへ置きます.

設定方法は?

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

 
(autoload 'listbuf "listbuf" nil t)

詳しい使い方は?

これで,M-x listbufで新しいバッファリストを使うことができます.

デフォルトでは,以下のような画面になります.これは, listbuf-field-alist を変更 することでカスタマイズが可能です.また, listbuf-ignore-buffer-name-regexp-list でバッファリストに表示しないバッファも指定できます.

 MR Buffer               Rev     Proc Size  Mode        File
 -- ------               ---     ---- ----  ----        ----
.*  window.texi    CVS:1.2      19264 Texi        ~/www/soft/window.texi
    listbuf.el                29959 Elisp       ~/mylisp/listbuf.el
    test.el                     35    Elisp       ~/www/soft/test.el

多少は派手になりましたね.



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

28.1.2 バッファの移動 ― electric-buffer-list (2004/09/26)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=electric-buffer-list"
"MeadowMemo/バッファの移動―electric-buffer-list"へのコメント(無し)

Meadow には C-x C-b で利用できる list-buffers の他にも,バッファ リストを表示するコマンドが用意されています.

そこで,ここではバッファリストを表示するための標準コマンドを紹介します.

electric-buffer-list

まずは, electric-buffer-list です.これは,見た目は list-buffers と同 じですが,バッファの選択をRETだけでなく,SPCでも行うことが できます.たったこれだけのことですが,随分と使い勝手がいいです.

以下のように設定しておくと,C-x eで使うことができるようになりま す.

 
(global-set-key "\C-xe" 'electric-buffer-list)

C-x eは通常キーボードマクロの実行に割り当てられていますが,,,

buffer-menu

buffer-menu というのもあります.これも list-buffers とほぼ同じものです. ただ,バッファの一覧がカレントバッファになるため,毎回 C-x o で 移動する必要はありません.

 
(global-set-key "\C-x\C-b" 'buffer-menu)

好みに応じて選択するといいでしょう.



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

28.1.3 カスタマイズ可能なバッファリスト ― bs (2004/09/26)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=bs-show"
"MeadowMemo/カスタマイズ可能なバッファリスト―bs"へのコメント(無し)

要約

標準のバッファリストと同じような見た目でありながら,大幅にカスタマイズ 可能なバッファリストです.

何が問題なのか?

標準のバッファリストは使いにくいですし,あまりカスタマイズもできません.

何ができるのか?

MR Buffer                   Size         Mode  File
 -- ------                   ----         ----  ----
.   buf-list.texi     48710         Texi  d:/home/www/soft/buf-list.texi
    buffer.texi       14130         Texi  d:/home/www/soft/buffer.texi
    basic.texi        34381         Texi  d:/home/www/soft/basic.texi
    dired.texi        69476         Texi  d:/home/www/soft/dired.texi
    texi2html.pl     156629        CPerl  d:/home/www/soft/texi2html.pl

のようなバッファリストが表示できます.また,表示する項目などは自由にカ スタマイズできます.

インストール方法

標準で附属していますので,インストールは不要です.

設定方法

不要です.

必要なら以下のようにキーバインドを割り当てます.

 
(global-set-key [?\C-,] 'bs-cycle-next)
(global-set-key [?\C-.] 'bs-cycle-previous)
(global-set-key "\C-x\C-b" 'bs-show)

詳しい使い方

M-x bs-showでバッファリストを表示できます.また,M-x bs-cycle-nextM-x bs-cycle-previous で次/前のバッファに次々と 切り替えることができます.

また,M-x bs-show でバッファリストを表示し,C とすると,あ らかじめ設定されたカテゴリを選ぶことができます.デフォルトでは「 files 」などが登録されてます.例えば, files を選択すると,ファイルに関連し たバッファだけが表示されます.

Sでソート方法を変えることができます.

表示するバッファを制限する

bs ではバッファリストで C とすると,表示するバッファを制限するこ とができます.これは, bs-configurations という変数で設定されています.

この変数の設定例を以下に書いておきます.基本的には正規表現を設定するだ けでも,ある程度の設定は可能です.それ以上のことをしたければ,適当な関 数 (以下の例では,my-must-show-func と my-dont-show-func) を書く必要が あります.

関数は buffer を引数に取り,そのバッファが表示する必要があるかどうかを t/nil で返します.

以下の「 soft 」の例だと,関数でファイルバッファは表示しない (my-dont-show-func) が変更したバッファは表示 (my-must-show-func) する 設定になっています.

 
(setq bs-configurations
      '(;; 名前
        ;; 表示しなければならないバッファの正規表現
        ;; 表示しなければならないバッファの関数
        ;; (この関数の戻り値が t なら表示する)
        ;; 表示しないバッファの正規表現
        ;; 表示しないバッファの関数
        ;; (この関数の戻り値が t なら表示しない)
        ;; 整列関数 (引数は B1 B2)
        ("soft"
           "^\\*scratch\\*$" my-must-show-func nil my-dont-show-func nil)
        ("all" nil nil nil nil nil)
        ("files" nil nil nil bs-visits-non-file bs-sort-buffer-interns-are-last)
        ("files-and-scratch" "^\\*scratch\\*$" nil nil bs-visits-non-file
         bs-sort-buffer-interns-are-last)
        ("all-intern-last" nil nil nil nil bs-sort-buffer-interns-are-last)))

(defun my-must-show-func (buffer)
  (if (buffer-modified-p buffer)
      t
    nil))

(defun my-dont-show-func (buffer)
  (if (buffer-file-name buffer)
      t
    nil))

書式の指定

書式は bs-attributes-list で定義されています.表示したい情報 (例えば文 字コード) があれば,追加します.バッファリストでは上から順番に左詰めで 表示されますので,表示したい場所に追加します.

追加する項目は左から順番に, 1 行目の文字 (例では Coding) ,最小の長さ, 最長の長さ,文字の配置,関数名 (情報を返す) を指定します.

また,指定した名前の関数は別途用意する必要があります.

 
(setq bs-attributes-list
  '(
    ;; (HEADER MINIMUM-LENGTH MAXIMUM-LENGTH ALIGNMENT FUN-OR-STRING)
    (""       1            1          left  bs--get-marked-string)
    ("M"      1            1          left  bs--get-modified-string)
    ("R"      2            2          left  bs--get-readonly-string)
    ("Coding" 15          15          left  bs--get-coding-string)
    ("Buffer" bs--get-name-length 10 left  bs--get-name)
    (""       1            1          left  " ")
    ("Size"   8            8          right bs--get-size-string)
    (""       1            1          left  " ")
    ("Mode"   12          12          right bs--get-mode-name)
    (""       2            2          left  "  ")
    ("File"   12          12          left  bs--get-file-name)
    (""       2            2          left  "  ")))

(defun bs--get-coding-string (start-buffer all-buffers)
  (if (coding-system-get buffer-file-coding-system 'mime-charset)
      (format " %s" (coding-system-get buffer-file-coding-system 'mime-charset))
    " undefined"))

並び変えをカスタマイズ

S での並び替えもカスタマイズできます.デフォルトでは以下のように 定義されてます. bs--sort-by-size を参考にすれば,簡単に自分好みの並び 換え方法を追加できます.

 
(defun bs--sort-by-size (b1 b2)
  "Compare buffers B1 and B2 by buffer size."
  (save-excursion
    (< (progn (set-buffer b1) (buffer-size))
       (progn (set-buffer b2) (buffer-size)))))

(setq bs-sort-functions
  '(("by name"     bs--sort-by-name     "Buffer" region)
    ("by size"     bs--sort-by-size     "Size"   region)
    ("by mode"     bs--sort-by-mode     "Mode"   region)
    ("by filename" bs--sort-by-filename "File"   region)
    ("by nothing"  nil                  nil      nil)))



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

28.1.4 さらに便利なバッファリスト― ibuffer (2007/11/10)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ibuffer"
"MeadowMemo/さらに便利なバッファリスト―ibuffer"へのコメント(無し)

何が問題なのか?

e:/unix/Meadow2/site-lisp/emacs-goodies-el/ibuffer.el というファイルを開くと,バッ ファリストにはその情報が表示されます.しかし,ディレクトリ名が長いために,見にく いバッファリストになってしまいます.

何ができるのか?

基本的にはバッファリストと同じなのですが,様々なカスタマイズが可能で非常に便利で す.

カスタマイズだけでなく,バッファリストでC-x dC-x C-fとすると,その 行のファイルがあるフォルダがデフォルトになり,使い勝手もいいです.

インストール方法は?

インストールは,ibuffer.elをダ ウンロードし (これは,作者のページよ り辿って探したものです) ,ロードパスの通ったところへ置きます.

設定方法は?

.emacs に以下を追加します

 
(require 'ibuffer)

詳しい使い方は?

M-x ibufferとすると使うことができます.

カスタマイズしよう

このバッファリストは様々にカスタマイズが可能です.

主要なオプションを説明します.

User Option: ibuffer-default-sorting-mode

バッファリストの並び換えを変更できます.'recency なら最近,表示したものが上にな りますし,'alphabetic ならアルファベット順,'size ならサイズ順,'major-mode なら メジャーモード順になります.

User Option: ibuffer-formats
外観の変更が可能です.詳細はソース参照のこと

私は,以下のように設定しています.こうしておくと,デフォルトのように縦のラインが 揃わないということがなくなります.

 
(setq ibuffer-formats
      '((mark modified read-only " " (name 30 30)
              " " (size 6 -1) " " (mode 16 16) " " filename)
        (mark " " (name 30 -1) " " filename)))

User Option: ibuffer-never-show-regexps
バッファリストに表示しないものを指定する.

 
(setq ibuffer-never-show-regexps '("\\.el" "messages"))

これで,拡張子が「 el 」のファイルと「 messages 」という文字を含むバッファ (*Messages*など) を表示しないようにできる.

User Option: ibuffer-always-show-regexps
常に表示するものを正規表現で指定する. ibuffer-never-show-regexps と同じように指 定する.

User Option: ibuffer-directory-abbrev-alist

 
(setq ibuffer-directory-abbrev-alist
      '(("e:/unix/Meadow2/site-lisp/" . "meadow")))

のように設定しておくと, e:/unix/Meadow2/site-lisp/emacs-goodies-el/ibuffer.el と表示されるところが, meadow/emacs-goodies-el/ibuffer.el と短くなります.

その他の機能

コメント

その他にも,バッファリストに表示されるバッファを制限したりもできます.メニューも 表示されますので,いろいろと試してみましょう.

28.1.4.1 ibuffer に情報を追加する (2007/11/03)   
28.1.4.2 ibuffer でバッファを表示させたい (2007/11/10)   
28.1.4.3 ibuffer で文字コードを指定して保存 (2007/11/06)   



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

28.1.4.1 ibuffer に情報を追加する (2007/11/03)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ibuffer%20add"
"MeadowMemo/ibufferに情報を追加する"へのコメント(無し)
要約

ibuffer のバッファリストに文字コードの情報を追加します.

何が問題なのか?

ibuffer はカスタマイズを自由に行うことができます.例えば,バッファリストに自分で 定義した情報を追加することもできます.

しかし,設定方法は少し分かりにくいので,ここでは簡単に説明します.

この設定で以下のように文字コードの欄を追加することができます.

MR coding         Name                   Size    Mode   Filename
 -- ------         ----                  ----   ----   --------
    euc-jisx0213   abbrev.texi     30301  Texi   ~/www/soft/abbrev.texi
    euc-jisx0213   admini.texi     22671  Texi   ~/www/soft/admini.texi
    euc-jisx0213   apel.texi       5534   Texi   ~/www/soft/apel.texi
    euc-jisx0213   basic.texi      29697  Texi   ~/www/soft/basic.texi

追加方法

上で出したバッファリストを見ると,追加すべき部分は 2 つあることが分かります.一つ は,一行目の「 coding 」の部分で,もう一つは実際に文字コードが入る部分です.

さて, ibuffer ではこのバッファリストの書式は「 ibuffer-formats 」という変数で定義さ れています.これに

 
(setq ibuffer-formats '((mark modified read-only (coding 15 15) " " (name 30 30)
                              " " (size 6 -1) " " (mode 16 16) " " filename)
                        (mark (coding 15 15) " " (name 30 -1) " " filename)))

のように追加できれば,文字コードを追加できそうです.しかし,これでは「 coding 」が何を 表示していいのか分かりません.そこで,この「 coding 」と定義します.

関数さえ書くことができれば,後は簡単でしょう.

 
(define-ibuffer-column
 ;; ibuffer-formats に追加した文字
 coding
 ;; 一行目の文字
 (:name " coding ")
 ;; 以下に文字コードを返す関数を書く
 (if (coding-system-get buffer-file-coding-system 'mime-charset)
     (format " %s" (coding-system-get buffer-file-coding-system 'mime-charset))
   " undefined"
   ))



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

28.1.4.2 ibuffer でバッファを表示させたい (2007/11/10)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ibuffer-scroll"
"MeadowMemo/ibufferでバッファを表示させたい"へのコメント(無し)

何が問題なのか?

バッファの数が多くなってくると,バッファリストから,ファイルの内容を表示できると 便利です.もちろん,表示は,C-oでできます.

しかし,スクロールはできませんので,結局C-x oしてウィンドウを移動し,スク ロールさせる必要があります.

何ができるのか?

ibuffer でSPCを押すと,その行のバッファを別ウィンドウに表示できます.さら に,SPCでスクロールできます.bで逆方向にスクロールできます.

設定方法は?

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

 
(defun ibuffer-visit-buffer-other-window-scroll (&optional down)
  (interactive)
  (let ((buf (ibuffer-current-buffer)))
    (when (and buf (buffer-live-p buf))
      (if (string=
           (buffer-name (window-buffer (next-window)))
           (buffer-name buf))
          (if down
              (scroll-other-window-down nil)
            (scroll-other-window))
        (ibuffer-visit-buffer-other-window-noselect))
      (if (eq major-mode 'ibuffer-mode)
          ()
        (setq buf (current-buffer))
        (switch-to-buffer (get-buffer "*Ibuffer*"))
        ))))

(defun ibuffer-visit-buffer-other-window-scroll-down ()
  (interactive)
  (ibuffer-visit-buffer-other-window-scroll t))

(define-key ibuffer-mode-map " " 'ibuffer-visit-buffer-other-window-scroll)
(define-key ibuffer-mode-map "b" 'ibuffer-visit-buffer-other-window-scroll-down)

;; n, p で次 (前) のバッファの内容を表示する
(defadvice ibuffer-forward-line
  (after ibuffer-scroll-page activate)
  (ibuffer-visit-buffer-other-window-scroll))
(defadvice ibuffer-backward-line
  (after ibuffer-scroll-page-down activate)
  (ibuffer-visit-buffer-other-window-scroll-down))



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

28.1.4.3 ibuffer で文字コードを指定して保存 (2007/11/06)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=ibuffer-save"
"MeadowMemo/ibufferで文字コードを指定して保存"へのコメント(無し)
要約

ibuffer でマークをしたバッファをすべて指定した文字コードで保存できます.

何が問題なのか?

時々文字コードを指定してファイルを保存したい時があります.バッファが 1 つや 2 つなら 問題ないですが,多くなると 1 個 1 個文字コードを指定するのも大変です.

何ができるのか?

ibuffer でmによりマークをつけたバッファを指定した文字コードで保存できます.

設定方法

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

 
(require 'ibuffer)
(define-key ibuffer-mode-map
  "T" 'ibuffer-do-convert-coding-system)
(defun ibuffer-do-convert-coding-system
  (coding-system &optional arg)
  "Convert file (s) in specified coding system."
  (interactive
   (list
    (let ((default (or
                    (and (boundp 'dired-default-file-coding-system)
                         dired-default-file-coding-system)
                    buffer-file-coding-system)))
      (read-coding-system
       (format
        "Coding system for converting file (s) (default, %s): "
        default)
       default))
    current-prefix-arg))
  (if (= (ibuffer-count-marked-lines) 0)
      (message
       "No buffers marked; use 'm' to mark a buffer")
    (let ((ibuffer-do-bufs nil))
      (ibuffer-map-marked-lines
       #'(lambda (buf mark)
           (push buf ibuffer-do-bufs)))
      (ibuffer-unmark-all 62)
      (while ibuffer-do-bufs
        (set-buffer (car ibuffer-do-bufs))
        (set-buffer-file-coding-system coding-system arg)
        (if (buffer-file-name)
            (let ((coding-system-for-write coding-system))
              (save-buffer arg)))
        (setq ibuffer-do-bufs (cdr ibuffer-do-bufs))))))

詳しい使い方

ibuffer でmによりマークをつけます.その後,T を入力すると文字コードを 聞かれますので,入力します.

すると,入力した文字コードでマークをつけたバッファを保存してくれます.ファイルバッ ファでない場合は文字コードの変換だけを行います.

コメント

ファイルを保存する時,なぜか文字コードをうまく判別できずに文字コードの入力を求め られることがあります.このページはたまに 60 ページを一度に保存する必要があるので, でっちあげました.



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

28.1.5 バッファリストのリストを絞り込む (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=buffer-menu-grep"
"MeadowMemo/バッファリストのリストを絞り込む"へのコメント(無し)

ネタ元:2 ちゃんねる

何が問題なのか?

多くのファイルを開いた状態でバッファリストを出しても,バッファが多くて非常に不便 です.

何ができるのか?

バッファリストを表示した後で,バッファ名を対象に検索することができます.そして, 一致したバッファのみが,新たなバッファリストに表示されます.

このため,バッファリストが絞り込まれ,非常に便利です.

動作する環境は?

buffer-menu や ibuffer では動作します.使用するバッファリストによっては動かない こともあります.

設定方法は?

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

 
(defun Buffer-menu-grep (str)
  (interactive "sregexp:")
  (goto-char (point-min))
  (let (lines)
    (forward-line 2)
    (setq lines (buffer-substring (point-min) (point)))
    (while (re-search-forward str nil t)
      (let ((bol (progn (beginning-of-line) (point)))
            (eol (progn (forward-line) (point))))
        (setq lines (concat lines (buffer-substring bol eol)))))
    (let ((buffer-read-only nil))
      (erase-buffer)
      (insert lines))))
(define-key Buffer-menu-mode-map "G" 'Buffer-menu-grep)

詳しい使い方は?

まず,バッファリストを表示します.そして,G とすると,バッファリストを検索 し,一致したバッファ名のみが,表示されます.

指定した拡張子のみやファイル名のみを表示したりすることができ,非常に便利です.元 に戻すのは g でできます.



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

28.1.6 一致したバッファを削除する (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=buffermenu%20delete"
"MeadowMemo/一致したバッファを削除する"へのコメント(無し)

何が問題なのか?

grep などで,たくさんのファイルが開かれることがあります.しかし,これを一個一個 kill-buffer するのも大変です.

かといって,バッファリストでマークを付けていくのも面倒です.

何ができるのか?

バッファリストで検索を行い,一致したバッファに削除マークをつけることができます. これにより,多くのバッファを簡単に削除できます.

buffer-menu での設定方法は?

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

 
(defun Buffer-menu-grep-delete (str)
  (interactive "sregexp:")
  (save-excursion
    (goto-char (point-min))
    (forward-line 2)
    (while (re-search-forward str nil t)
      (Buffer-menu-delete))))
(define-key Buffer-menu-mode-map "R" 'Buffer-menu-grep-delete)

ibuffer での設定方法は?

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

 
(defun Buffer-menu-grep-delete (str)
  (interactive "sregexp:")
  (save-excursion
    (goto-char (point-min))
    (forward-line 2)
    (while (re-search-forward str nil t)
      (save-excursion
        (ibuffer-mark-for-delete nil)
        )
      (end-of-line))))

(define-key ibuffer-mode-map "R" 'Buffer-menu-grep-delete)

詳しい使い方は?

バッファリスト表示後にRとし,検索します.すると,一致したバッファに削除マー クが付きます.

ここで, x を押すと,そのバッファは削除されます. dired や grep の結果を表 示していて,バッファが多くなってしまった時に便利です.



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

28.1.7 ファイルによってバッファリストの表示を変える (2003/10/12)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=my-buffer-list"
"MeadowMemo/ファイルによってバッファリストの表示を変える"へのコメント(無し)

何が問題なのか?

あるファイルを編集している時,バッファリストで出て欲しいのはある拡張子をのファイ ルだけということがあります.

例えば, C のプログラムを書いている時のバッファリストで Elisp が候補に出てきても,あ まり意味はないでしょう.それよりは寧ろ, C に関連したもののみが表示されて欲しいと いう時もあるのではないでしょうか.

特に,多数ファイルを開いた状態では,バッファリストを表示しても,大量のリストとなっ てしまい,肝心のファイルが埋もれてしまいます.

何ができるのか?

編集中のバッファによってバッファリストを変更できます.

例えば,拡張子が「 el 」のファイルを編集しているなら,バッファリストも拡張子が 「 el 」のファイルだけにする,といったことができます.

設定方法は?

簡単な設定サンプルは mode-buflist.el (ibuffer 用は mode-ibuffer.el) です..emacs に追加して使ってください.

この例のように「 my-buffer-menu-list 」で対象にしたいモード名と実行したい関数名 を指定します.この例では,「 Buffer-menu-grep-texi 」や「 Buffer-menu-grep-2ch 」のように検索により絞り込むものと,「 Buffer-menu-grep-default 」のように指定し た文字に一致する行を除外する設定を行っています.

この例のように設定すると,カレントバッファの名前によって以下のようにバッファリス トが変化します.

このようにモードによってバッファの絞り込みが行われるので,多数のバッファを開いて いてもバッファリストが多すぎて選びにくいということはなく,便利です.また, C-u C-x C-b とすると,通常のバッファリストになります.

バッファメニューでカテゴリを切り替える

ibuffer を表示した後で,cとするとあらかじめ設定しておいた条件で再表示をして くれます.

方法は,上記の ibuffer 用の設定に続けて,以下を参考に.emacs に追加します.

この例だと,aで全バッファを表示,s2eであらかじめ設定 しておいた条件で絞り込んで表示,mで指定した語で絞り込んで表示できます.

 
(defun Buffer-menu-grep-ext ()
  (let ((str (format "%s" (read-minibuffer "Input ext: "))))
    (Buffer-menu-grep-match str)))

(defun ibuffer-category ()
  (interactive)
  (message "S) oft 2) ch A) ll E) lisp M) atch ...")
  (let ((c (downcase (char-to-string (read-char)))) (co))
    (cond
     ((string-match "s" c)
      (Buffer-menu-grep-texi))
     ((string-match "2" c)
      (Buffer-menu-grep-2ch))
     ((string-match "a" c)
      (ibuffer))
     ((string-match "e" c)
      (Buffer-menu-grep-el))
     ((string-match "m" c)
      (Buffer-menu-grep-ext))
     (t
      (ibuffer-category)))))

(define-key ibuffer-mode-map "c" 'ibuffer-category)



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

28.1.8 バッファリストをソート (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=my-sort-buffer"
"MeadowMemo/バッファリストをソート"へのコメント(無し)

ネタ元: Petit emacs lisp tips

バッファを切り替えていると,いつのまにやらバッファリストの順番が無茶苦茶になりま す.これを名前で並び換えることができます.

 
(defun my-sort-buffer-by (cbuf slst)
  ;; bury-buffer を使って、カレントバッファが先頭に来るようにソートする
  (cond ((eq slst '()) '())
        ((eq cbuf (car slst)) (my-sort-buffer-by cbuf (reverse (cdr slst))))
        (t (bury-buffer (car slst))
           (my-sort-buffer-by cbuf (cdr slst)))))

(defun my-sort-buffer-by-name (x y)
  (if (or (buffer-file-name y) (buffer-file-name x))
      ;; どちらか特殊バッファならば buffer-name でソートする
      (string< (buffer-file-name y) (buffer-file-name x))
    (string< (buffer-name y) (buffer-name x))))

(defun my-sort-buffer ()
  "Sort buffer list by name"
  (interactive)
  (let* ((cbuf (current-buffer))
         (blst (copy-sequence (buffer-list)))
         (slst (sort blst 'my-sort-buffer-by-name)))
    (my-sort-buffer-by cbuf slst)))



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

28.2 バッファの切換えをもっと楽にしたい (2010/07/17)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=switch%20buffer"
"MeadowMemo/バッファの切換えをもっと楽にしたい"へのコメント(無し)

デフォルトではC-x bでバッファの切り替えができますが,これをもっと便利にす る方法を紹介します.

28.2.1 バッファの切換えをもっと楽にしたい − iswitchb (2008/03/24)   
28.2.2 バッファを連続的に切り替える (2005/03/28)   
28.2.3 直前のバッファと現在のバッファを切り替える (2003/09/23)   
28.2.4 メニューからバッファを切り替える ― msb (2003/09/18)   
28.2.5 タブでバッファを切り替える (2004/02/28)   
28.2.6 バッファ内の文字でバッファを切り替え − contentswitch (2008/08/21)   
28.2.7 補完候補をリアルタイムで表示してバッファ切り替え − lusty-explorer (2008/09/07)   
28.2.8 カーソルのあるバッファを明確にする (2010/07/17)   



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

28.2.1 バッファの切換えをもっと楽にしたい − iswitchb (2008/03/24)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=iswitchb"
"MeadowMemo/バッファの切換えをもっと楽にしたい−iswitchb"へのコメント(無し)

何が問題なのか?

上で紹介したように C-x b でバッファを切り替えることができます.しかし,こ れは最初の文字から順番にすべて入力していく必要があり,かなり使いにくいです.そこ で, iswitchb がお勧めです.

何ができるのか?

iswitchb では,以下のようにバッファの一覧がミニバッファに出ます.

iswitch {occur.texi,*scratch*,grep.texi,*Messages*,screen.texi}

これにより,バッファを次の*scratch*, grep.texi と順番に切り替えていくことができます.

さらに,ここで例えば「 sc 」と入力します.すると,

iswitch sc{*scratch*,screen.texi}

のように,「 sc が含まれるバッファ」のみに絞られます.このため,少ないキー入力で目 的のバッファの切り替えることができます.

インストール方法は?

標準で附属してますので,特に作業は不要です.

設定方法は?

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

 
(iswitchb-mode 1)

詳しい使い方は?

これで, C-x b とすると,バッファの一覧がミニバッファに表示されるようにな ります.

C-sC-r でバッファの選択を切り替えていくことができます.

さらに,そのまま文字を入力すると isearch になりますので,適当に含まれている文字 を入れるだけでも選択できます.検索候補がないようなら,C-x C-f で find-file へ移行できます.

キーバインドを追加したい

私はさらに,下のような設定を入れてキーバインドを変更しています.こうしておくと, 左右のカーソルキーやSPC でもバッファを切り替えることができます.

 
(add-hook 'iswitchb-define-mode-map-hook
          'iswitchb-my-keys)

(defun iswitchb-my-keys ()
  "Add my keybindings for iswitchb."
  (define-key iswitchb-mode-map [right] 'iswitchb-next-match)
  (define-key iswitchb-mode-map [left] 'iswitchb-prev-match)
  (define-key iswitchb-mode-map "\C-f" 'iswitchb-next-match)
  (define-key iswitchb-mode-map " " 'iswitchb-next-match)
  (define-key iswitchb-mode-map "\C-b" 'iswitchb-prev-match)
  )

カスタマイズ

私はさらに,以下のようにして一部の関数を変更しました.これで, iswitchb に候補が なければ find-file になります.さらに,C-u C-x b で通常の C-x b と同 じ動作になります.

 
(defun iswitchb-possible-new-buffer (buf)
  "Possibly create and visit a new buffer called BUF."
  (interactive)
  (message (format
            "No buffer matching `%s', "
            buf))
  (sit-for 1)
  (call-interactively 'find-file buf))

(defun iswitchb-buffer (arg)
  "Switch to another buffer.

The buffer name is selected interactively by typing a substring.  The
buffer is displayed according to `iswitchb-default-method' -- the
default is to show it in the same window, unless it is already visible
in another frame.
For details of keybindings, do `\\[describe-function] iswitchb'."
  (interactive "P")
  (if arg
      (call-interactively 'switch-to-buffer)
    (setq iswitchb-method iswitchb-default-method)
    (iswitchb)))

ユーザに確認を求めるタイプもあります.作りはしたものの,いちいち答えるのが面倒な ので,上のように,問答無用で find-file になるようにしてしまいました.どうせキャ ンセルは C-g でやるし,バッファを作る機会なんてそうはないし...

 
(defun iswitchb-possible-new-buffer (buf)
  "Possibly create and visit a new buffer called BUF."
  (interactive)
  (message (format
            "No buffer matching `%s', [C]reate? [F]ind file? [N]o?"
            buf))
  (let ((newbufcreated)
        (c (char-to-string (read-char))))
    (if iswitchb-newbuffer
        (cond
         ((string-match "c" c)
          ;; then create a new buffer
          (progn
            (setq newbufcreated (get-buffer-create buf))
            (if (fboundp 'set-buffer-major-mode)
                (set-buffer-major-mode newbufcreated))
            (iswitchb-visit-buffer newbufcreated)))
         ((string-match "f" c)
          (call-interactively 'find-file buf)
          )
         ((string-match "n" c)
          (message (format "no buffer matching `%s'" buf)))
         )
      ;; else wont create new buffer
      (message (format "no buffer matching `%s'" buf)))))

28.2.1.1 iswitchb で選択中の内容を表示 (2004/06/27)   
28.2.1.2 iswitchb でバッファの情報を表示 (2003/09/18)   
28.2.1.3 iswitchb で migemo を使う (2005/03/01)   



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

28.2.1.1 iswitchb で選択中の内容を表示 (2004/06/27)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=iswitchb-exhibit"
"MeadowMemo/iswitchbで選択中の内容を表示"へのコメント(無し)

ネタ元:2ch

何ができるのか?

iswitchb は非常に便利ですが,バッファ名だけでは少し分かりにくいです.

そこで,バッファ選択時にウィンドウに選択中のバッファの内容を表示させる設定を紹介します.

これにより,名前だけでは分かりにくファイルでも,バッファにファイルの内容が表示さ れるので,簡単に識別できます.

設定方法は?

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

 
(defadvice iswitchb-exhibit
  (after
   iswitchb-exhibit-with-display-buffer
   activate)
  "選択している buffer を window に表示してみる。"
  (when (and
         (eq iswitchb-method iswitchb-default-method)
         iswitchb-matches)
    (select-window
     (get-buffer-window (cadr (buffer-list))))
    (let ((iswitchb-method 'samewindow))
      (iswitchb-visit-buffer
       (get-buffer (car iswitchb-matches))))
    (select-window (minibuffer-window))))

詳しい使い方は?

普通にC-x bとするだけです.



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

28.2.1.2 iswitchb でバッファの情報を表示 (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=iswitchb%20info"
"MeadowMemo/iswitchbでバッファの情報を表示"へのコメント(無し)

何ができるのか?

バッファを切り替えていくと,ミニバッファにバッファのモードなどが表示されます.

設定方法は?

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

dired-directory 関連のエラーが出るようなら,最初の方のコメントをはずしてください.

 
;;iswitchb を便利にしてみる。
;; うざいだけかもしれんが。
;;(defvar dired-directory nil)
(defadvice iswitchb-completions (after
                                 iswitchb-completions-with-file-name
                                 activate)
  "選択してるときにファイル名とかを出してみる。"
  (when iswitchb-matches
    (save-excursion
      (set-buffer (car iswitchb-matches))
      (setq ad-return-value
            (concat ad-return-value
                    "\n"
                    (cond ((buffer-file-name)
                           (concat "file: "
                                   (expand-file-name (buffer-file-name))))
                          ((eq major-mode 'dired-mode)
                           (concat "directory: "
                                   (expand-file-name dired-directory)))
                          (t
                           (concat "mode: " mode-name " Mode"))))))))

詳しい使い方は?

C-x bをするだけです.



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

28.2.1.3 iswitchb で migemo を使う (2005/03/01)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=iswitchb-migemo"
"MeadowMemo/iswitchbでmigemoを使う"へのコメント(無し)
要約

iswitchb で migemo を利用し,日本語のバッファ名もローマ字入力のままで切り替える ことができる.

情報源

【叩かれて】Emacs Lisp道場【強くなれ】

何が問題なのか?

iswitchb でバッファ切り替えはとても簡単になりますが,それでも日本語のバッファ名 があると面倒です.

何ができるのか?

migemo を利用して,ローマ字入力のままで日本語のバッファに切り替えることができま す.

設定済みMeadowでは

cmigemo で設定してあります.

インストール方法

migemo のインストールが必要です.

設定方法

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

 
(setq iswitchb-regexp t)
(setq iswitchb-use-migemo-p t)
(defadvice iswitchb-get-matched-buffers
  (before iswitchb-use-migemo activate)
  "iswitchb で migemo を使ってみる。"
  (when iswitchb-use-migemo-p
    (ad-set-arg
     0 (migemo-get-pattern
        (ad-get-arg 0)))))

詳しい使い方

C-x b でそのままローマ字入力してみてください。日本語のバッファ名にも一致す るようになります。



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

28.2.2 バッファを連続的に切り替える (2005/03/28)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=cycle%20buffers"
"MeadowMemo/バッファを連続的に切り替える"へのコメント(無し)

たくさんバッファができた状態で次々と切り替えていく方法を紹介します.

最新の Meadow では標準で同等の機能が付けられました.C-x right (M-x next-buffer) と C-x left (M-x prev-buffer) です.

28.2.2.1 バッファを次々と切り替える (2003/09/18)   
28.2.2.2 バッファ間を簡単に移動 (2003/09/18)   
28.2.2.3 バッファを巡回 ― cyclebuffer (2003/11/18)   
28.2.2.4 Windows のようにバッファを切り替える ― pc-bufsw.el (2003/11/18)   
28.2.2.5 バッファの特定箇所へ切り換える ― mtorus (2003/09/18)   



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

28.2.2.1 バッファを次々と切り替える (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=my-grub-buffer"
"MeadowMemo/バッファを次々と切り替える"へのコメント(無し)

ネタ元: Petit emacs lisp tips

以下を.emacs に追加します. そうすると, C-,, C-.でバッファをどんどん 切り替えていくことができます.

 
(defun my-select-visible (blst n)
  (let ((buf (nth n blst)))
    (cond ((= n (- (length blst) 1)) (other-buffer))
          ((not (= (aref (buffer-name buf) 0) ? )) buf)
          (t (my-select-visible blst (+ n 1))))))
(defun my-grub-buffer ()
  (interactive)
  (switch-to-buffer (my-select-visible
                     (reverse (cdr (assq 'buffer-list (frame-parameters)))) 0)))
(global-set-key [?\C-,] 'my-grub-buffer)
(global-set-key [?\C-.] 'bury-buffer)



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

28.2.2.2 バッファ間を簡単に移動 (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=my-bury-buffer"
"MeadowMemo/バッファ間を簡単に移動"へのコメント(無し)

ネタ元: Petit emacs lisp tips

前記のものの改良版.移動しないバッファを指定できる.

 
(setq my-ignore-buffer-list
      '("*Help*" "*Compile-Log*" "*Mew completions*" "*Completions*"
        "*Shell Command Output*" "*Apropos*" "*Buffer List*"))

(defun my-visible-buffer (blst)
  (let ((bufn (buffer-name (car blst))))
    (if (or (= (aref bufn 0) ? ) (member bufn my-ignore-buffer-list))
        (my-visible-buffer (cdr blst)) (car blst))))

(defun my-grub-buffer ()
  (interactive)
  (switch-to-buffer (my-visible-buffer (reverse (buffer-list)))))

(defun my-bury-buffer ()
  (interactive)
  (bury-buffer)
  (switch-to-buffer (my-visible-buffer (buffer-list))))

(global-set-key [?\C-,] 'my-grub-buffer)
(global-set-key [?\C-.] 'my-bury-buffer)



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

28.2.2.3 バッファを巡回 ― cyclebuffer (2003/11/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=cyclebuf"
"MeadowMemo/バッファを巡回―cyclebuffer"へのコメント(無し)

バッファを巡回する方法です.

cyclebuffer.elをダウン ロードし,ロードパスの通ったところへ置きます.

そして,以下を.emacs に追加します.

 
(autoload `cyclebuffer-forward "cyclebuffer" "cycle forward" t)
(autoload `cyclebuffer-backward "cyclebuffer" "cycle backward" t)
(global-set-key [?\C-,] 'cyclebuffer-forward)
(global-set-key [?\C-.] 'cyclebuffer-backward)

これで,C-,C-.でバッファの巡回ができます.

ほぼ同じようなものとして, cycle-buffer.elがあります.

使い方は同じでcycle-buffer.el をダウンロードしてロードパスの通ったところへ置き,以下を.emacs に追加します.

 
(autoload 'cycle-buffer "cycle-buffer" "Cycle forward." t)
(autoload 'cycle-buffer-backward
  "cycle-buffer" "Cycle backward." t)
(autoload 'cycle-buffer-permissive
  "cycle-buffer" "Cycle forward allowing *buffers*." t)
(autoload 'cycle-buffer-backward-permissive
  "cycle-buffer" "Cycle backward allowing *buffers*." t)
(autoload 'cycle-buffer-toggle-interesting
  "cycle-buffer" "Toggle if this buffer will be considered." t)
(global-set-key [(f9)]        'cycle-buffer-backward)
(global-set-key [(f10)]       'cycle-buffer)
(global-set-key [(shift f9)]  'cycle-buffer-backward-permissive)
(global-set-key [(shift f10)] 'cycle-buffer-permissive)



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

28.2.2.4 Windows のようにバッファを切り替える ― pc-bufsw.el (2003/11/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=pc-bufsw"
"MeadowMemo/Windowsのようにバッファを切り替える―pc-bufsw.el"へのコメント(無し)

Windows ではソフトの切り替えがAlt-TABで可能です. これと同じような操作を実 現するのが pc-bufsw.el で す. http://www.fi.uib.no/~boukanov/emacs/index.htmlからダウンロードできま す. ダウンロードしたら, ロードパスの通ったところに置き, 以下を.emacs に追加しま す

 
(require 'pc-bufsw)
(pc-bufsw::bind-keys (quote [C-tab]) (quote [C-S-tab]))

あるいは

 
(global-set-key [?\C-,] 'pc-bufsw::lru)
(global-set-key [?\C-.] 'pc-bufsw::previous)

といった風に設定してもいい.

これでC-TabC-Shift-Tabでバッファの一覧がミニバッファに表示され, C-Tabを何度も押すと任意のバッファが選択できるようになります.

使い勝手は上で紹介したものと同じです.違いは,

pc-bufsw.el   buf-list.texi  >  admini.texi

という風に,現在選択しているバッファと前後のバッファがミニバッファに表示される点 です.

同様の機能を持つ swbuff

ほぼ同じことをするものに, swbuff というものがあります.違いは,ミニバッファではな く,新しいバッファができ,そこに次以降に移動するバッファがずらっと表示されること です.

swbuff のインストール方法

http://sourceforge.net/projects/emhacks/からダウンロードし,解凍します. そして,ファイルをロードパスの通ったところへ置きます.

swbuff の設定方法

以下を.emacs に追加します

 
(require 'swbuff)

swbuff の使い方

Ctrl+F6Shift+Ctrl+F6で前後のバッファへ移動できます.



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

28.2.2.5 バッファの特定箇所へ切り換える ― mtorus (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=mtorus"
"MeadowMemo/バッファの特定箇所へ切り換える―mtorus"へのコメント(無し)

要約

バッファを次々と切り換える機能に加えて,カーソル位置を各グループ別に記憶させるこ とができる

ただし,いちいち登録する必要があります.

何が問題なのか?

他で紹介した設定により,バッファを次々と切り替えることができます.しかし,この方 法は以下の点で不便です.

何ができるのか?

これを使うと,バッファの切り替えだけではなく,カーソル位置の記憶と記憶されたカー ソル位置を巡回することができます.

また,カーソル位置は好きな名前でグループ化できます.そのため,あるプロジェクトの ファイルは「 myproject 」として,カーソル位置を記憶させていけば,そのプロジェクト のファイルのみを巡回できます.

インストール方法は?

XEmacs: Lisp Code - MTorusからダウロードして,ロードパスの通ったところへ移動します.

設定方法は?

以下を.emacs に追加します

 
(require 'mtorus)
;; 終了時に mtorus の情報をファイルに保存する時は t にする
(setq mtorus-save-on-exit t)
;; mtorus のファイルを保存する場所
(setq mtorus-dirname "~/")
(defalias 'mtorus-make-extent 'make-overlay)
(defalias 'mtorus-set-extent-property 'overlay-put)
(defalias 'mtorus-delete-extent 'delete-overlay)
(defun display-message (label message &optional frame stdout-p)
  (message message))
(defun mtorus-default-directory ()
  ;; mtorus のファイルを保存する場所
  mtorus-dirname)
(mtorus-init)
(mtorus-install-suggested-bindings)
;; 起動時に mtorus のファイルを読み込む
;; 不要ならコメントにすること
(mtorus-read-torus)

詳しい使い方は?

デフォルトでは「 all-buffers 」というグループになっています.ここで,Shift-右カー ソルShift-左カーソルでバッファを切り替えることができます.

これだけなら,普通のバッファ切り替えです.

そこで,f11とし,適当な名前を入れます.ここでは,「 elisp 」とでもしておきま す.これで,「 elisp 」というグループが作成されました.作成時に現在のカーソル位置 が登録されているはずなので,適当なバッファに移動し,Shift-右カーソルとして みてください.

グループ作成時の場所にカーソルが移動したはずです.

主なキーは以下の通りです.

コメント

いちいちカーソル位置を設定しないといけないのが不便ですが,そこそこ使えます.

カーソル位置が保存できますが,ファイルを開いていないと意味がありません.というか, 開いておいても駄目なの? カーソル位置の保存と読み込み関連がうまく動いていないよう に思います.



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

28.2.3 直前のバッファと現在のバッファを切り替える (2003/09/23)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=toggle-buffer"
"MeadowMemo/直前のバッファと現在のバッファを切り替える"へのコメント(無し)

何が問題なのか?

2 つのバッファを比較したり,参照したりしながら文章を書いていると, 2 つのバッファを 頻繁に切り替える必要があります.

しかし,そのたびに C-x bで切り替えるのも面倒です.

何ができるのか?

1 コマンドで直前のバッファに切り替えることができます.

インストール方法

toggle-buffer.elをダウンロー ドし,ロードパスの通ったところへ置きます.

設定方法

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

 
(require 'toggle-buffer)

詳しい使い方

M-x joc-toggle-buffer で直前のバッファに切り替わります.



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

28.2.4 メニューからバッファを切り替える ― msb (2003/09/18)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=msb"
"MeadowMemo/メニューからバッファを切り替える―msb"へのコメント(無し)

何が問題なのか?

Meadow には Buffers というメニューがあります.ここには,バッファの一覧が表示されま す.

バッファのメニューmsb-mode

左がデフォルトの Buffers メニューです. 50 個ぐらいファイルを開いている状態ですが, 表示されるのは,最近表示した 10 個程度のみになります.

そこで, msb.el を使います.これを使うと,右側のようにメニューが各階層に分かれ,分 かりやすくなります,

インストール方法は?

Meadow に附属しています.

設定方法は?

不要です.

詳しい使い方は?

使い方は簡単で,M-x msb-mode とするだけです.そうすると, Buffers メニューが 変化し,モード別に分けてくれるようになります (ただし,設定されているモードのみで す) .

また,*Files by directory*というメニューを選択すると,モードではなく,ディレクト リ別にバッファリストを作ってくれるので,従来のものよりもずっと選択しやすくなりま す.

これを常に使いたい場合には,.emacs に以下を追加します.

 
(msb-mode 1)

他の設定は msb.el を参照してください.



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

28.2.5 タブでバッファを切り替える (2004/02/28)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=tabbar"
"MeadowMemo/タブでバッファを切り替える"へのコメント(2007/12/28)

同様のものの機能などは https://bookshelf.jp/pukiwiki/pukiwiki.php?%A5%BF%A5%D6%A4%C7%A5%D0%A5%C3%A5%D5%A5%A1%A4%F2%C0%DA%A4%EA%C2%D8%A4%A8%A4%EB Wiki にまとめられています.

何ができるのか?

のようなタブでバッファを切り替えることができます.

インストール方法

http://sourceforge.net/projects/emhacks/から, tabbar をダウンロードし,解 凍します.

そして,できたファイルをロードパスの通ったところへ置きます.

設定方法

以下を.emacs に追加します

 
(require 'tabbar)

詳しい使い方

M-x tabbar-modeでタブが表示されます.また,M-x tabbar-forwardM-x tabbar-backwardで前後のバッファへ移動できます.



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

28.2.6 バッファ内の文字でバッファを切り替え − contentswitch (2008/08/21)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=contentswitch"
"MeadowMemo/バッファ内の文字でバッファを切り替え−contentswitch"へのコメント(無し)
要約

入力した文字を含むバッファの一覧を表示し,そのバッファに切り替えることができる.

情報源

Elisp ML

何が問題なのか?

普通はバッファの名前でバッファを切り替えますが,ある語を含むバッファに切り替えた い時もあるかもしれません.

何ができるのか?

入力した語を含むバッファを一覧表示し,そのバッファに切り替えることができます.

設定済みMeadowでは

インストールしてません.

インストール方法

contentswitch.el からダウンロードしてロードパスの通ったところに置きます.

設定方法

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

 
(require 'contentswitch)

詳しい使い方

M-x contentswitch と入力します.すると,バッファの一覧が表示され,ミニバッ ファには

string: 

と表示されます.ここで,文字を入力します.すると,バッファの一覧画面が下の画像の ように表示されます.

バッファの一覧表示例

ここで,上下キーを使って,カーソルを移動させて RET を入力すると,そのバッ ファに切り替わります.

今開いているバッファだけでなく,過去に開いたファイルも検索してくれます.

コメント

必要か? と言われるといらないかなぁとも思うけど,機能としては面白いです.



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

28.2.7 補完候補をリアルタイムで表示してバッファ切り替え − lusty-explorer (2008/09/07)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=lusty-explorer"
"MeadowMemo/補完候補をリアルタイムで表示してバッファ切り替え−lusty-explorer"へのコメント(無し)
要約

バッファの切り替えやファイルを開く時に,入力した文字に対応する候補をリアルタイム で表示してくれます

情報源

EmacsWiki

何が問題なのか?

普通,バッファを切り替える時やファイルを開く時には,TAB を押すと補完候補が 表示されますが,TAB を入力しないと表示してくれず,後どれくらい入力すればい いのか分かりません.

何ができるのか?

入力した文字に対応するバッファやファイルの一覧をリアルタイムで表示してくれます. 文字を追加すると,どんどん絞り込まれていきます.

設定済みMeadowでは

インストールしていません.

インストール方法

EmacsWiki(lusty-explorer.el) からダウンロードしてロードパスの通ったところへ置きます.

設定方法

以下を .emacsに追加します

 
(require 'lusty-explorer)

詳しい使い方

M-x lusty-file-explorer と入力します.すると,ミニバッファに普通のファイル を開くのと同じような入力と,別バッファには現在入力した文字に一致するファイルの一 覧が表示されます.文字を入力すると,どんどん絞られていきます.

M-x lusty-buffer-explorer でバッファ切り替えが利用できます.



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

28.2.8 カーソルのあるバッファを明確にする (2010/07/17)

URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=meadow&node=hiwin-mode"
"MeadowMemo/カーソルのあるバッファを明確にする"へのコメント(無し)

要約

現在,カーソルがあるバッファ以外のバッファの背景色を変えることで,今,どのバッファ にカーソルがあるかを明確にします

情報源

アクティブな window を可視化する hiwin-mode。CommentsAdd Star

何が問題なのか?

一つのバッファだけで作業しているなら問題ありませんが,ウィンドウを3つや4つに分割 していると,今どこにカーソルがあるかがぱっと見て分からなくなります

何ができるのか?

今,カーソルがあるバッファ以外のバッファの背景色を変えます.

これにより,今,どこにカーソルがあるのかが明確になります.

設定済みMeadowでは

設定済みですが,デフォルトではオフとしています.

以下を .emacs に追加することで,有効になります

 
(setq meadow-use-hiwin-mode t)

インストール方法

本家のファイルは http://ksugita.blog62.fc2.com/blog-entry-8.html にありま すが,マイナーモード化した http://github.com/tomoya/hiwin-mode/blob/master/hiwin.el の方が使いやすい と思います.

サイトからコピーして,hiwin.el として,ロードパスの通ったところに保存します.

設定方法

下記を.emacsに追加します

 
(require 'hiwin)
(hiwin-mode)

詳しい使い方

特に使い方はなく,ウィンドウを分割すると,自動的に動きます.下図のようにカーソル が無いバッファの色が変わります.

カーソルが無いバッファの背景がかわる

うまく動かない

現在,使っている背景色によっては,カーソルのないバッファの背景色がいまいちかもし れません.

その場合は,下記の変数を変更することで,背景色を変更できます.

 
(setq hiwin-color "gray30")


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