Не показывать неинтересные файлы в окне завершения Emacs - PullRequest
24 голосов
/ 13 ноября 2009

Как запретить Emacs показывать мне все файлы, которые меня не интересуют (например, ~ файлы резервных копий, файлы .pyc или .orig), когда я: Cx Cf TAB ?

Это работает в одном отношении: если я знаю, что файл, который я хочу открыть, начинается с foo , и я набираю foo TAB , тогда мини-буфер правильно автоматически завершает работу вплоть до foo.py. Он правильно проигнорировал foo ~ и foo.pyc, потому что и ~, и .pyc находятся в extension-ignored-extensions . Это также правильно позволяет мне открыть любой игнорируемый файл, если я действительно этого хочу, набрав все буквы самостоятельно.

Однако, если я просто нажму TAB , чтобы вызвать буфер списка завершения, этот список включает файлы с расширениями в дополнения-игнорируемых-расширениях , что делает его очень трудным найди то, что я ищу.

Ясно, что код для игнорирования неинтересных файлов есть и работает. Как получить буфер списка завершения для соблюдения дополнения-игнорируемых расширений ?

(кстати, можно ли заставить dired вести себя аналогично?)

Ответы [ 4 ]

22 голосов
/ 14 ноября 2009

Этот совет отфильтровывает файлы с расширениями, перечисленными в 'completion-ignored-extensions:

(defadvice completion--file-name-table (after 
                                        ignoring-backups-f-n-completion 
                                        activate)
  "Filter out results when they match `completion-ignored-extensions'."
  (let ((res ad-return-value))
(if (and (listp res)
     (stringp (car res))
     (cdr res))                 ; length > 1, don't ignore sole match
    (setq ad-return-value
              (completion-pcm--filename-try-filter res)))))

Примечание: Это не влияет на dired.

Для проблемы dired добавьте это к вашему .emacs

(eval-after-load "dired"
  '(require 'dired-x))

(add-hook 'dired-mode-hook
          (lambda ()
            (dired-omit-mode 1)))

Прочтите документацию для dired-x , чтобы получить представление о том, что там доступно.

7 голосов
/ 04 января 2012

Я бы рекомендовал использовать ido-mode для игнорирования файлов; по умолчанию он поставляется с Emacs и добавляет множество других полезных улучшений, которые вы быстро научитесь любить. В разделе Невежество - это счастье от этого блога Mastering Emacs рассказывается, как игнорировать файлы, каталоги и буферы:

  • ido-ignore-buffers Принимает список буферов для игнорирования в C-x b
  • ido-ignore-directories Принимает список каталогов, которые следует игнорировать в C-x d и C-x C-f
  • ido-ignore-files Принимает список файлов, которые следует игнорировать в C-x C-f
3 голосов
/ 04 сентября 2011

Сосульки делает то, что вы ожидаете по умолчанию. Он всегда учитывает completion-ignored-extensions для завершения имени файла, в том числе для буфера *Completions*. И вы можете в любое время включить или выключить это игнорирование, нажав C -. в минибуфере.

Кроме того, если вы используете библиотеку completion-ignored-build.el Кевина Райда, тогда Сосульки автоматически использует динамическую настройку игнорируемых расширений файлов в этой библиотеке. (Просто загрузите completion-ignored-build.el - не включайте его второстепенный режим или совет.)

1 голос
/ 14 ноября 2009

Я не знаю ответа на вопрос, боюсь. Я думаю, что это из-за дизайна - когда вы знаете имя, которое вы ищете, вы, вероятно, не хотите, например, файл резервной копии. Но когда вы не знаете, вероятно, лучше иметь список всех файлов.

Однако для dired вы можете загрузить пакет 'dired-x' при запуске (в вашем .emacs), и это обеспечивает режим dired-omit-mode:

(load "dired-x")

Вы можете использовать 'M-x customize-variable dired-omit-files', чтобы установить фактические шаблоны для игнорирования. Затем, когда вы находитесь в режиме Dired, вы можете использовать M-O (буква, а не цифра) для включения и выключения «упущения».

...