Динамическое расширение в минибуфере больше не работает при совершенствовании от Emacs 21.2

StackOverflow https://stackoverflow.com/questions/3495520

Вопрос

Продолжая свой процесс миграции последних и самых больших Emacs 23.2, я ударил еще один неприятный сюрприз: динамическое расширение в минибуфере больше не работает!

«Динамическое расширение в минибуфере» я имею в виду эту функцию, которая позволяет слепо наступить на пробел для полных файлов, переменных и т. Д.

Я также вызвал «Emacs -q» (исключить любые артефакты .emacs), и проблема существует не только с Emacs 23.2 на Windows XP, но даже с Emacs 22.1 на Ubuntu.

Что-то изменилось в поведении по умолчанию Emacs, но что это?

Это было полезно?

Решение

Из (22.1) новостной файл:

** Когда EMACS подсказывает имена файлов, SPC больше не завершает имя файла. Это так, чтобы имена имена встроенных пространств могут быть введены без необходимости процитировать пространство с помощью CQ. Основные изменения в Ke'maps, которые активны в минибуфере, описаны ниже в разделе «Новые keymaps для печати имен файлов». Если вы хотите, чтобы старое поведение обратно добавьте эти два ключевых привязки в файл in ~ / .emacs init: (определить-ключ minibuffer-local-filename-map-map "" Minibuffer - Complete-Word) (минибуфер Local-Must-Match-filename - карта "" "Minibuffer-complete-word)

Другие советы

Прикрепленное решение работает, но сломается, как только мы доберемся до Emacs V24, а затем. Я бы порекомендовал вместо этого, связывая define-key Призывает к наличию новых карт, как так:

(if (boundp 'minibuffer-local-filename-completion-map) 
   (define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word))

(if (boundp 'minibuffer-local-must-match-filename-map)
   (define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word))

Это должно правильно работать для всех версий Emacs.

Отвечая на мой 2-й вопрос (в комментарии):

(defmacro GNUEmacs23 (&rest body)
  (list 'if (string-match "GNU Emacs 23" (version))
        (cons 'progn body)))

(defmacro GNUEmacs22 (&rest body)
  (list 'if (string-match "GNU Emacs 22" (version))
        (cons 'progn body)))

(GNUEmacs22
  (define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word)
  (define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word)
)

(GNUEmacs23
  (define-key minibuffer-local-filename-completion-map " " 'minibuffer-complete-word)
  (define-key minibuffer-local-must-match-filename-map " " 'minibuffer-complete-word)
)

Если вы придумаете более элегантное решение, это было бы здорово, но вышеперечисленное работает для меня (на данный момент).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top