bufmenu.l

Last modified: "2008/01/01 01:37:39"
buffer-list

Download ...

■概要

  ・非表示バッファも含め,バッファの一覧をポップアップ表示します。
  ・KaMail とか www-mode を使用しているときに一覧からバッファの選択を行うと,
    「Frame 1」に移動して開きます。
  ・非表示バッファを選択した場合は,現在のフレームで開きます。
  ・バッファの一覧は,バッファ名,もしくは参照しているファイル名で表示し,それ
    ぞれ名前順にソートされます。
  ・必要に応じ,フレームの一覧も表示します。
  ・バッファバーコンテキストメニューに,バッファをまとめて閉じたり,実行したり
    名前をコピーしたりするメニューを追加します。
    
buffer-bar-context-menu
■製作理由

  何故こんなものをつくったかというと…,
  
  ・常日頃,KaMail などの独自フレームを使用する拡張ものを常時使用している
    のですが,[Frame 1 に移動] → [バッファ選択] という処理がメンドーであ
    る。
  ・www-mode などのバッファを非表示にして使っているのですが,よくよく他の
    バッファを開いてしまい戻せなくなってしまう。
  ・バッファバーに収まりきらない程多くのバッファを開いている中からバッファ
    を選択する場合に,select-buffer でも良いのですが,毎回ソートし直す必要
    があったり,私には必要ない情報があって見にくかったりする。
  ・場合によって,バッファリストをバッファ名で表示したり,ファイル名で表示
    したりしたかった。
  ・必要ないけどフレームをリストから選択してみたかった。
  ・xyzzy Note に書いていたバッファバーコンテキストメニュー用の Lisp に,
    目に余る部分が多々あった…。
  ・ふかえさんの Tips(タブブラウザっぽいメニュー)に少しばかり手を加えて
    使いたかった。(閉じて欲しくないバッファを指定したり)
  ・なんとなくつくってみたかった。
  
  から。
    
■インストール

  1. bufmenu.l を site-lisp にコピーする。

  2. 必要に応じ,バイトコンパイルする。

       M-x byte-compile-file

  3. .xyzzy か siteinit.l に以下の記述を追加する。

      (require "bufmenu")

  4. xyzzy を再起動し,設定を反映させる。
     siteinit.l に記述した場合は再ダンプもする。
    
■ツールバー設定

  ツールバーを使う場合は,[表示]-[ツールバー]-[bufmenu] にチェックを入れます。
    
■アンインストール

  1. ツールバー情報を削除する。
     ESC キーを2回押した後,ミニバッファに
       (bufmenu-uninstall-tool-bar)
    と入力し,Enter する。

  2. 初期化ファイルから設定を削除する。
     siteinit.l に記述していた場合は再ダンプする。

  3. このファイル bufmenu.l(および bufmenu.lc)を削除する。
    
■設定例

    ;;; バッファ選択ポップアップリスト表示 [C-Apps C-Apps]
    (global-set-key '(#\C-Apps #\C-Apps) 'bufmenu-popup)
    
    ;;; バッファバーコンテクストメニューを表示 [C-Apps Apps]
    (global-set-key '(#\C-Apps #\Apps) 'bufmenu-popup-buffer-bar-context-menu)

  とか。
    
■カスタマイズ

  山本さんの favorites.l で,特定のフレームの場合は既定のフレームに移動し
  て開く。

  (defun open-favorites-func (f)
    "お気に入りを開く"
    (if (string= (pathname-type f) "lnk")
        (setq f (resolve-shortcut f)))
    (cond ((not (file-exist-p f))
           (message "~A はリンク切れです" (file-namestring f)))
          (*favorites-open-with-shell*
           (shell-execute (map-slash-to-backslash f)))
          (t
           (bufmenu-select-default-frame)
           (find-file f)
           (add-history f '*minibuffer-file-name-history*))))

  bufmenu 最近使ったファイル一覧を特定のフレームの場合は既定のフレームに
  移動して開く。元ネタは,xyzzy Part6 332 さんの list-recents。

    (defun bufmenu-list-recents ()
      "bufmenu 最近使ったファイル一覧"
      (interactive)
      (let (hlist filename)
        (setq hlist (mapcar #'(lambda (x)
                                (list (abbreviate-display-string x 60 t) x))
                            *minibuffer-file-name-history*))
        (multiple-value-bind (result data)
            (dialog-box
             '(dialog 0 0 286 162
               (:caption "bufmenu : 最近使ったファイル")
               (:font 9 "MS Pゴシック")
               (:control
                (:listbox flist nil #x50b10111 7 7 216 148)
                (:button IDOK "OK" #x50010001 229 7 50 14)
                (:button IDCANCEL "キャンセル" #x50010000 229 24 50 14)))
             (list (cons 'flist hlist))
             `((flist :must-match t :enable (IDOK))))
          (when result
            (setq filename (car (cddr (assoc 'flist data))))
            (bufmenu-select-default-frame)
            (find-file filename)
            (add-history filename '*minibuffer-file-name-history*)))))

  バッファバーコンテキストメニューに,OHKUBOさんの browserex を追加する場
  合は,こんな感じで。

  (add-hook '*bufmenu-add-context-menu-middle-hook*
            #'(lambda ()
                (let (menu)
                  (setq menu *buffer-bar-context-menu*)
                  (flet ((buf () *buffer-bar-context-menu-buffer*))
                    (add-menu-separator menu)
                    (add-menu-item menu nil "ブラウザで表示(&B)"
                                   #'(lambda () (interactive)
                                       (set-buffer (buffer-name (buf)))
                                       (bx:navigate-current-buffer)))))))
    
■更新履歴

  [Version 1.05] 2007-12-31 (月)
  ・ライセンス条項(MITライセンス)を記載。

  [Version 1.04] いつ?
  ・メニューを全角カタカナに。

  [Version 1.03] 2004/10/31(日)
  ・「これ以外を閉じる」が正しく動作していなかったのを修正した。
    xyzzyの使い方が分からぬやし 励ましあえ その5 の 215 さん,216 さん
    ありがとうございます。m(_ _)m

  [Version 1.02] 2004/06/20(日)
  ・設置場所を site-lisp/bufmenu/bufmenu.l から,site-lisp/bufmenu.l
    に戻した。
  ・非表示バッファを選択したときは,フレームを移動しないようにした。
  ・既定のフレーム以外のフレームが存在しても「すべてのバッファを閉じる」
    が動作するようにした。
  ・バッファバーコンテクストメニューに余計なモノを追加するようにした。
  ・その他不具合修正とかいろいろ。

  [Version 1.01] 2003/05/30(金)
  ・「表示設定」変更後は,メニューを再表示するようにした。
  ・非表示バッファの表示方法を変更した。

  [Version 1.00 (2003.05.22)]
  ・つくった。
    
■ライセンス

  bufmenu.l はMITライセンスに基づいて利用可能です。
  

Copyright (c) 2003-2007 HIE Masahiro

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.