#emacs #elisp
#emacs #elisp
Вопрос:
Что ж. Когда я набираю несколько первых ключей серии ключей, emacs записывает эти ключи в минибуфер через некоторый интервал времени. Вот так: ввод C-x 4
текста станет C-x 4-
видимым в минибуфере.
Вопрос в том, можно ли это изменить? Я думал о том, чтобы сделать что-то вроде объединения части key-help (генерируемой C-h
при вводе некоторых ключей) с этой строкой. Может ли интервал ожидания этого сообщения также быть сокращен? Является ли это подпрограммой?
Отредактировано, новый вопрос
Когда я завершаю работу с emacs C-x C-c
и изменяю буферы, появляется сообщение с вопросом, хочу ли я их сохранить. Как я могу узнать, что это сообщение здесь?Я попытался заглянуть (minibuffer-prompt) (minibuffer-contents) (buffer-substring (point-min) (point-max))
, выбрав (select-window (minibuffer-window))
. Ничто не дает мне результатов.
Ответ №1:
Да, пользовательский параметр echo-keystrokes
определяет, сколько времени пройдет до отображения префиксного ключа в минибуфере. Из (emacs) Echo Area Customization
:
Пользовательский параметр: повторные нажатия клавиш Эта переменная определяет, сколько времени должно пройти до эха символов команды. Его значением должно быть целое число или число с плавающей запятой, которое определяет количество секунд ожидания перед повторением. Если пользователь вводит префиксный ключ (например, `C-x'), а затем задерживается на столько секунд, прежде чем продолжить, префиксный ключ повторяется в области эха. (Как только в последовательности клавиш начинается эхо, все последующие символы в той же последовательности клавиш немедленно повторяются.) Если значение равно нулю, то ввод команды не повторяется.
Комментарии:
1. Ну, я тоже нашел это. Его нельзя использовать для определения эха, но в любом случае неплохо настроить на меньшее значение. Голосую за вас.
2. Нарисовал как у Дрю Адамса? Спасибо, чувак, этот ответ сработал для меня, проголосовав.
Ответ №2:
Вы можете управлять временем этого справочного сообщения, задав suggest-key-bindings
большее / меньшее число.
(setq suggest-key-bindings 5) ; wait 5 seconds
Простого способа настроить поведение не существует, вам придется отредактировать код C execute-extended-command
или использовать его замену, которая также предоставляет справку. Одной из возможностей для замены является anything-complete
библиотека, в которой есть замена для execute-extended-command
(примечание: я ее не пробовал). Он создается поверх пакета anything
, что отличается от стандартного Emacs.
Комментарии:
1.
suggest-key-bindings
это не совсем то, о чем я спрашиваю. Пример: у нас включена какая-то функцияC-c C-k
, и мы просто вводимC-c
. Через короткое время мы видимC-c-
в минибуфере. Это не предложение , которое говорит оM-x forward-char
том, к чему оно привязаноC-f
. Было бы неплохо узнать, какая функция создает текст, который я хочу. Я попробую поиграть с fset, сохранив subr в другом символе.2. @desudesudesu Понял, я неправильно понял. К сожалению, командный цикл для чтения во входных событиях еще менее доступен, чем
suggest-key-bindings
, поэтому ответ заключается в том, что на самом деле невозможно делать то, что вы хотите, без изменения кода C.3. Жаль. Тем не менее, я написал нужные функции даже без него, используя таймеры . Как я могу увидеть, что кто-то использует минибуфер в
keylist-function
? Вы можете видеть, что закомментированные вещи не работают (кроме последних двух строк, они работают).4. FWIW, wrt
execute-extended-command
и предлагающие привязки клавиш (которые, как я понимаю, на самом деле не то, что вам было нужно), см. Кодicicle-execute-extended-command-1
.
Ответ №3:
Я написал рабочую версию того, что я хотел реализовать.
Чтобы использовать (require 'keylist)
, скопируйте одну или две последние строки в .emacs и раскомментируйте их.
Как вы можете видеть в этом коде, я использовал это
(not cursor-in-echo-area)
(not (minibufferp))
(not (= 13 (aref (this-command-keys-vector) 0)))
чтобы узнать, используется ли мой минибуфер или область эхо.
Разница между ними в том, что минибуфер используется для чтения, а область эха используется для сообщения чего-либо.
При вводе C-x C-c
курсор помещается в область эхо-сигнала, и значение cursor-in-echo-area
изменяется.
Последняя строка (= 13 (aref (this-command-keys-vector) 0))
самая забавная. Он используется для перехвата таких вещей, как query-replace
. При выполнении замен (this-command-keys-vector)
показывает, что RET
нажата первая клавиша, затем клавиши по вашему выбору (y, n). Поскольку у меня нет последовательностей ключей, начинающихся с RET
, я согласен с этим.
Комментарии:
1. Это звучит как хорошая идея, но когда я ее запускаю, она ничего не делает, кроме как скрывает все обновления минибуфера при нажатии команды с несколькими нажатиями клавиш.
2. @MichaelHoffman обновил мою вставку everfall до последней отредактированной версии. Я отказался от его использования, поскольку он работает медленно, из-за чего мой процессор скачет на 30-50% при выполнении. Я запускаю его только при запуске нового режима. Убедитесь, что вы вызываете
M-x keylist
с любым аргументом. Без него оно отключается. Итак,C-u M-x keylist