Добавить содержимое в минибуфер 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 - более простая альтернатива, но стиль пользовательского интерфейса не совсем такой, как вы описали.

Другие вопросы по тегам