Есть ли библиотеки для полей ввода в Emacs?

10

Многие режимы Emacs используют (что-то вроде) формы: интерфейс настройки является одним из них, режим сообщений (читай: его часть заголовка) является другим; их больше, к сожалению, не всегда очень похожих. Под «формой» я подразумеваю здесь буфер с частями только для чтения и местами, предназначенными для ввода текста; он может содержать или не содержать кнопки (его, вероятно, следует принять C-c C-cв качестве ключа подтверждения / подтверждения, независимо от наличия кнопки OK ).

Меня особенно интересует автозаполнение полей (и, в частности, включение полей со списками значений из некоторого определенного набора, скажем, через запятую). Мой вопрос: есть ли какая-либо библиотека Emacs, позволяющая легко (под словом «легкий», я имею в виду не изобретать колесо) создание таких форм, или я должен сам все кодировать?

(Я полагаю , что то , что я должен делать в последнем случае будет (1) установить некоторые части буфера только для чтения, (2) подготовить специальный основной режим, так что , например , TABи S-TABпереключаться между «полей», и (3) возможно используйте что-то вроде Сосульки или Хелма для автозаполнения.)

mbork
источник
1
Изменил свой заголовок, чтобы сказать поля ввода. Формы имеют особое значение в elisp, что может привести к путанице.
Малабарба
2
И да, есть встроенная библиотека виджетов. Но я ничего не знаю об этом.
Малабарба
@Malabarba: спасибо, это, вероятно, лучшая формулировка.
mbork
(Даже если сам Emacs использует слово «форма» в этом смысле - см. Руководство по виджетам, упомянутое в ответе Дрю!)
mbork,

Ответы:

8

Смотрите библиотеки cus-edit.elи wid-edit.el(и их библиотеки верхнего уровня custom.elи widget.el, и библиотеки связанных компонентов), которые включены в GNU Emacs. Первый использует второй. Последний определяет базовые (и не очень базовые) вещи в форме ввода, называемые « виджетами », в иерархии. Вы можете использовать эти предопределенные виджеты и функции в библиотеке для создания собственных виджетов и типов виджетов.

Однако следует помнить, что код этих библиотек, особенно код wid-edit.el, не очень прост для подражания. Лучше всего начать с повторного использования существующих виджетов или использования существующего кода определения виджета в качестве руководства.

(Две библиотеки расширения второстепенный для этого cus-edit+.elи wid-edit+.el. Они также приведены некоторые примеры использования.)

Существует справочное руководство для виджетов, распространяемое вместе с GNU Emacs, под названием « Библиотека виджетов Emacs ».

Есть также библиотека forms.el, включенная в GNU Emacs, но я не знаком с ней. Возможно, кому-то еще есть что сказать об этом. Существует руководство для форм, распространяемое с GNU Emacs, под названием « Режим форм ».

Нарисовалась
источник
2
Чуть больше forms.el: stackoverflow.com/questions/10166600/...
Филс
1
@Drew: спасибо за ваш ответ! Не могли бы вы прояснить связь между \(custom\|widget\).elи \(cus\|wid\)-edit.elнемного? Я считаю , особенно эта часть от виджетов вручную непостижимо: (require 'widget) (eval-when-compile (require 'wid-edit)).
mbork
1
Во-первых, я не эксперт в этом. Времена, когда мне нужно было что-то изменить в настройке, я окунулся в cus-edit.elи wid-edit.el. Другие файлы, которые вы упоминаете, являются файлами верхнего уровня; эти *-edit.elфайлы имеют код , который я был заинтересован в Незнайке гораздо больше , чем это. Извините. Настоящая трудность заключается в самом коде, который использует особый стиль полу-ООП, который не подходит ни для самодокументирования Emacs (мягко говоря), ни для отладчика Emacs. Вы можете провести расследование самостоятельно или, возможно, попытаться связаться с автором (удачи в этом!). Может быть, другие здесь помогут.
Дрю