Buffer List を現在のウィンドウで開く
常にウィンドウを分割して表示していると、buffer list を表示するたびに次のウィンドウへカーソルが移動してしまい不便だ。そこで xyzzy に添付されている lisp/buf-menu.l で定義されている関数 list-buffer を改造したものを用意した。
追加の設定も載せておく。
(in-package "editor") ; ウィンドウを分割しない buffer-menu (defun list-buffers-sw (&optional file-only) (interactive "p") (let ((selected (selected-buffer))) (with-output-to-temp-buffer ("*Buffer List*" nil) (switch-to-buffer "*Buffer List*") (let ((tmp (selected-buffer))) (princ " MR Buffer Size Line Mode File\n") (princ " -- ------ ---- ---- ---- ----\n") (dolist (buffer (buffer-list)) (when (not (eq buffer tmp)) (let ((bufname (buffer-name buffer)) (filename (get-buffer-file-name buffer))) (unless (or (string= bufname " " :end1 1) (and (null filename) file-only)) (let ((size (buffer-size buffer)) (lines (buffer-lines buffer))) (format t "~:[ ~;.~]~:[ ~;*~]~:[ ~;%~] ~A~VT ~D~VT ~D~35T ~A~:[~;~49T ~:*~A~]~%" (eq buffer selected) (buffer-modified-p buffer) (buffer-local-value buffer 'buffer-read-only) bufname (- 24 (if (zerop size) 0 (floor (log size 10)))) size (- 32 (if (zerop lines) 0 (floor (log lines 10)))) lines (buffer-local-value buffer 'mode-name) filename))))))) (goto-line 3) (buffer-menu-mode)))) (in-package "user") (define-key ctl-x-map #\C-b 'ed::list-buffers-sw) ; q で閉じる (define-key ed::*buffer-menu-mode-map* #\q 'kill-selected-buffer) ; Enter で開く (define-key ed::*buffer-menu-mode-map* #\RET 'ed::buffer-menu-this-window)