Предпочитая определенные расширения файлов с завершением имени файла Emacs - PullRequest
4 голосов
/ 26 апреля 2009

У меня много каталогов, заполненных кучей документов TeX. Итак, есть много файлов с одинаковым базовым именем и разными расширениями. Однако только один из них доступен для редактирования. Я хотел бы убедить Emacs, что если я нахожусь в каталоге, где у меня есть

document.tex
document.log
document.pdf
document.bbl
document.aux
...

а я в минибуфере и делаю

~/Documents/.../doc<TAB>

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

Ответы [ 3 ]

6 голосов
/ 27 апреля 2009

Я написал некоторый код, который должен делать то, что вы хотите. Основная идея состоит в том, чтобы установить переменную 'completion-ignored-extensions в соответствии с расширениями, которые вы хотите пропустить, но только при наличии файлов .tex. Этот код делает это.

(defadvice find-file-read-args (around find-file-read-args-limit-choices activate)
  "set some stuff up for controlling extensions when tab completing"
  (let ((completion-ignored-extensions completion-ignored-extensions)
        (find-file-limit-choices t))
    ad-do-it))

(defadvice minibuffer-complete (around minibuffer-complete-limit-choices nil activate)
  "When in find-file, check for files of extension .tex, and if they're found, ignore .log .pdf .bbl .aux"
  (let ((add-or-remove
     (if (and (boundp 'find-file-limit-choices) find-file-limit-choices
          (save-excursion
        (let ((b (progn (beginning-of-line) (point)))
              (e (progn (end-of-line) (point))))
          (directory-files (file-name-directory (buffer-substring-no-properties b e)) nil "\\.tex$"))))
     'add-to-list
       'remove)))
(mapc (lambda (e) (setq completion-ignored-extensions
            (funcall add-or-remove 'completion-ignored-extensions e)))
      '(".log" ".pdf" ".bbl" ".aux")))
  ad-do-it)

Наслаждайтесь.

1 голос
/ 26 апреля 2009

Если вы открыты для установки библиотеки большого размера и читаете некоторую документацию, вы можете взглянуть на Сосульки и определить функцию сортировки , которая соответствует вашим потребностям. Альтернатива - ido , чья вики-страница имеет пример сортировки по mtime , которую легко изменить, чтобы отсортировать по функции расширения имени файла.

1 голос
/ 26 апреля 2009

Вероятно, самый простой способ сделать это в вашем случае - просто настроить переменную "complete-ignored-extensions".

Однако это будет означать, что emacs всегда игнорирует такие вещи, как «.log» и «.pdf», что может не соответствовать вашим ожиданиям. Если вы хотите, чтобы он был более избирательным, вам, возможно, придется заново реализовать функцию file-name-complete.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...