2013-12-10 1 views
3

Обычно я хочу ido игнорировать все непользовательские буферов, т.е. все буферы, которые начинаются с *. Я достиг этого, используя следующие настройки:Скажите IDO игнорировать все звезды буферов за исключением некоторых

(setq ido-ignore-buffers '("\\` " "^\*")) 

Тем не менее, это создает проблемы при работе с оболочкой или переводчиком, например, ielm, где буфер взаимодействия называется *ielm*. Очевидно, что добавление всех буферов, которые нужно игнорировать вручную, на самом деле не является вариантом, потому что список может занять довольно много времени с большим количеством различных пакетов emacs. Я знаю о C-a, который отключил шаблон игнорирования в пределах ido, однако я не хочу удалять C-a каждый раз, когда я переключаюсь на буфер ielm.

Мой вопрос:

Есть ли какая-то переменная, которая позволяет указать буферы, которые должны Идо не игнорировать (хотя они соответствуют нормальный список игнорирования)? Или есть другой подход к решению этого?

+0

Вы можете создать регулярное выражение, чтобы не игнорировать \ * ielm \ * для ido-ignore-buffers. – aartist

ответ

4

Список, в котором переменные point 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)) 

Вот пример наличия нескольких unignored имен буферов:

(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))) 

В принципе, как только у вас есть имя буфера, вы можете выполнить любую проверку/игнорирование, которое вы хотите.

+0

Отлично! Именно то, что я хотел! – elemakil

+0

Можете ли вы добавить пример со списком исключений? –

+0

Я обновил свой ответ. Это то, что вы имели в виду? – shakurov