Скажите ido игнорировать все звездные буферы, кроме некоторых
Обычно я хочу ido
игнорировать все не пользовательские буферы, т.е. все буферы, которые начинаются с *
, Я добился этого, используя следующие настройки:
(setq ido-ignore-buffers '("\\` " "^\*"))
Однако это создает проблему при работе с оболочкой или интерпретатором, например ielm
где буфер взаимодействия назван *ielm*
, Очевидно, что добавление всех буферов, которые должны игнорироваться вручную, на самом деле не вариант, потому что список может быть довольно длинным с множеством загруженных пакетов emacs. Я знаю о C-a
который отключил шаблон игнорирования изнутри ido
Однако я не хочу бить C-a
каждый раз, когда я переключаюсь на ielm
буфер.
Мой вопрос:
Существует ли какая-либо переменная, которая позволяет указывать буферы, которые ido не должен игнорировать (хотя они соответствуют обычному списку игнорирования)? Или есть другой подход для решения этой проблемы?
1 ответ
Список, который ido-ignore-buffers
переменные, на которые можно указывать, могут содержать не только регулярные выражения, но и функции (фактически, любое их сочетание). Легко предоставить функцию для фильтрации всех непользовательских буферов, кроме *ielm*
:
(defun ido-ignore-non-user-except-ielm (name)
"Ignore all non-user (a.k.a. *starred*) buffers except *ielm*."
(and (string-match "^\*" name)
(not (string= name "*ielm*"))))
(setq ido-ignore-buffers '("\\` " ido-ignore-non-user-except-ielm))
Вот пример наличия нескольких незарегистрированных имен буферов:
(setq my-unignored-buffers '("*ielm*" "*scratch*" "*foo*" "*bar*"))
(defun my-ido-ignore-func (name)
"Ignore all non-user (a.k.a. *starred*) buffers except those listed in `my-unignored-buffers'."
(and (string-match "^\*" name)
(not (member name my-unignored-buffers))))
(setq ido-ignore-buffers '("\\` " my-ido-ignore-func))
Интересный пример использования функций игнорирования можно найти среди комментариев в ido.el
исходный код (я удалил ;;
в начале каждой строки):
(defun ido-ignore-c-mode (name)
"Ignore all c mode buffers -- example function for ido."
(with-current-buffer name
(derived-mode-p 'c-mode)))
По сути, после того, как вы получили имя буфера, вы можете выполнять любую проверку / игнорирование по своему желанию.