Добавить содержимое в минибуфер Emacs, когда пользователь вводит в него?
Я, вероятно, иду по неправильному пути, поэтому дайте мне знать, если я. Я пытаюсь создать пользовательский интерфейс, аналогичный тому, который используют ctrlp и другие плагины Vim, в результате чего пользователю выдается приглашение, и по мере его ввода результаты отображаются над строкой приглашения минибуфера.
Я получил, что часть обработки команд минибуфера работает нормально с minibuffer-with-setup-hook
и местный post-command-hook
(легко) и может получить результаты, которые я хочу отобразить (проверено только (message)
пока их).
Если я хочу показать, скажем, 10 строк результатов над этой строкой приглашения минибуфера, должен ли я каким-то образом добавлять текст в минибуфер или использовать отдельный буфер, который я закрою после завершения команды? Любые указатели на части руководства, которые я должен читать, чтобы быть на правильном пути с этим?
2 ответа
"Минибуфер" - это обычный буфер, поэтому вы можете изменить его, вставив / удалив в него текст обычным способом. При этом добавление текста "до" означает в основном изменение подсказки, что может привести к проблемам в дальнейшем. Вам, вероятно, будет гораздо лучше делать что-то вроде
(let ((ol (make-overlay (point-min) (point-min))))
(overlay-put ol 'before-string (format "%s\n" myresults)))
Я начал писать это как комментарий, но это стало слишком длинным...
TBH, я чувствую, что есть место для облегченной версии шлема. Но реальность такова, что руль достаточно хорош, и кто-то другой уже написал это.
Ни я, ни кто-либо еще (пока) не достаточно мотивированы, чтобы переписать это. То, что вы описываете как "Божий" аспект этого, действительно непривлекательно. Но его можно загрузить (как ни крути, с современными компьютерами, это действительно не проблема) и изменить настройки, чтобы сделать его минималистичным.
ido - более простая альтернатива, но стиль пользовательского интерфейса не совсем такой, как вы описали.