Если вы используете функцию select_tag(name, option_tags = nil, options = {})
, правильным вариантом будет :prompt => "Some text"
, а не установка строкового значения для select
Я не думаю, что ido-mode
еще готов для этого. В частности, ido-complete-read
в настоящее время работает только со строками, в то время как завершение-чтение
также поддерживает списки. Это очень важно, если вы хотите иметь другое описание на уровне пользователя элементов, над которыми вы хотите завершить.
Поэтому я не удивлен, что это пока не работает из коробки. За исключением самостоятельного изменения кода, лучше всего, вероятно, просто отправить отчет об ошибке / запрос функции.
В Ido есть функция, которая должна это делать, поэтому просто вызовите ее в своем файле .emacs:
(ido-везде t)
Just a thought: have you tried editing ido-completing-read
to call original-completing-read
instead of completing-read
, defining original-completing-read
to be the current completing-read
and then doing your defalias or setf thing?
Редактировать: Теперь это пакет Emacs , доступный из MELPA . Он был расширен до полноценного второстепенного режима. Разработка происходит на GitHub .
Вот мое уточнение ответа Якобо. Кредит ему за оригинальную магию. Я добавил переменную переопределения, которую вы можете использовать для предотвращения использования ido-complete-read
в определенных функциях. Я также добавил проверку, которая использует исходное завершение-чтение, если нет завершений (это случается иногда, например, в org-Remember-apply-template
из org-mode, который прерывается с Jacobo ' s оригинальный совет).
(defvar ido-enable-replace-completing-read t
"If t, use ido-completing-read instead of completing-read if possible.
Set it to nil using let in around-advice for functions where the
original completing-read is required. For example, if a function
foo absolutely must use the original completing-read, define some
advice like this:
(defadvice foo (around original-completing-read-only activate)
(let (ido-enable-replace-completing-read) ad-do-it))")
;; Replace completing-read wherever possible, unless directed otherwise
(defadvice completing-read
(around use-ido-when-possible activate)
(if (or (not ido-enable-replace-completing-read) ; Manual override disable ido
(boundp 'ido-cur-list)) ; Avoid infinite loop from ido calling this
ad-do-it
(let ((allcomp (all-completions "" collection predicate)))
(if allcomp
(setq ad-return-value
(ido-completing-read prompt
allcomp
nil require-match initial-input hist def))
ad-do-it))))
О, и для использования ido в Mx используйте smex
Hocus pocus, abracadabra, presto!
(defadvice completing-read
(around foo activate)
(if (boundp 'ido-cur-list)
ad-do-it
(setq ad-return-value
(ido-completing-read
prompt
(all-completions "" collection predicate)
nil require-match initial-input hist def))))
Это работает со всем, кроме subr, из которых имеет значение execute-extended-command (что связано с Mx). Но мы можем получить то, что хотим, от Mx
(global-set-key
"\M-x"
(lambda ()
(interactive)
(call-interactively
(intern
(ido-completing-read
"M-x "
(all-completions "" obarray 'commandp))))))