バッファリストをポップアップで表示
(defun popup-buffer () (interactive) (let ((menu (create-popup-menu nil))) (continue-pre-selection) (save-excursion (dolist (buffer (buffer-list)) (let ((item (buffer-name buffer))) (when (zerop (string/= item " ")) (add-menu-item menu nil item #'(lambda () (interactive) (switch-to-buffer item)) #'(lambda () (when (string= item (buffer-name (selected-buffer))) :check))))))) (track-popup-menu menu))) (define-key ctl-x-map #\b 'popup-buffer)
非表示バッファリストをポップアップで表示
(defun popup-hide-buffer () (interactive) (let ((menu (create-popup-menu nil))) (continue-pre-selection) (save-excursion (dolist (buffer (buffer-list)) (let ((item (buffer-name buffer))) (unless (or (zerop (string/= item " ")) (string= item " *Minibuf0*")) (add-menu-item menu nil item #'(lambda () (interactive) (switch-to-buffer item)) #'(lambda () (when (string= item (buffer-name (selected-buffer))) :check))))))) (track-popup-menu menu))) (define-key ctl-x-map '(#\h #\b) 'popup-hide-buffer)
ファイルを visit している場合はファイル名でリストを作成
(defun popup-buffer-fn () (interactive) (let ((menu (create-popup-menu nil))) (continue-pre-selection) (save-excursion (dolist (buffer (sort (buffer-list) #'string< :key #'get-buffer-file-name)) (let ((item (buffer-name buffer)) (fn (get-buffer-file-name buffer))) (when (zerop (string/= item " ")) (add-menu-item menu nil (or fn item) #'(lambda () (interactive) (switch-to-buffer item)) #'(lambda () (when (string= item (buffer-name (selected-buffer))) :check))))))) (track-popup-menu menu))) (define-key ctl-x-map #\v 'popup-buffer-fn)
フレーム版(つかわなさそう。。。)
(defun popup-frame () (interactive) (let ((menu (create-popup-menu nil))) (continue-pre-selection) (save-excursion (dolist (pfr ed::*pseudo-frame-list*) (let ((item (ed::pseudo-frame-name pfr))) (when (zerop (string/= item " ")) (add-menu-item menu nil item #'(lambda () (interactive) (switch-pseudo-frame item)) #'(lambda () (when (string= item (ed::pseudo-frame-name (selected-pseudo-frame))) :check))))))) (track-popup-menu menu))) (define-key ctl-x-map #\p 'popup-frame)