¿Hay alguna biblioteca para los campos de entrada en Emacs?

10

Varios modos de Emacs usan formas (algo así como): la interfaz de personalización es una de ellas, el modo Mensaje (léase: su parte de encabezado) es otra; Hay más de ellos, desafortunadamente no siempre son muy similares. Por "formulario" quiero decir aquí un búfer con partes y lugares de solo lectura designados para ingresar texto; puede o no contener botones (probablemente debería aceptar C-c C-ccomo clave de confirmación / confirmación, independientemente de la presencia de un botón Aceptar ).

Estoy particularmente interesado en la finalización automática en los campos (y en particular, habilitar campos con listas de valores de algún conjunto designado, por ejemplo, separados por comas). Mi pregunta es: ¿hay alguna biblioteca de Emacs que permita la creación fácil (por "fácil", es decir, no reinventar la rueda) de tales formas, o debería codificar todo yo mismo?

(Me imagino que lo que debería hacer en este último caso sería (1) establecer algunas partes del búfer de solo lectura, (2) preparar un modo mayor especial, de modo que, por ejemplo, TABy S-TABcambiar entre "campos", y (3) tal vez use algo como Icicles o Helm para autocompletar).

mbork
fuente
1
Cambió su título para decir campos de entrada. Las formas tienen un significado muy especial en elisp, lo que podría generar confusión.
Malabarba
2
Y sí, hay una biblioteca de widgets incorporada. Pero no sé nada al respecto.
Malabarba
@Malabarba: gracias, esa es probablemente una mejor redacción.
mbork
(A pesar de que sí Emacs usa la palabra "forma" en este sentido - ver los widgets de Manual mencionado en la respuesta de Drew!)
mbork

Respuestas:

8

Ver las bibliotecas cus-edit.ely wid-edit.el(y sus bibliotecas de alto nivel custom.ely widget.el, bibliotecas y componentes asociados), que se incluyen con GNU Emacs. El primero hace uso del segundo. El último define cosas básicas (y no tan básicas) de entrada de forma, llamadas " widgets ", en una jerarquía. Puede usar estos widgets y funciones predefinidos en la biblioteca para crear sus propios widgets y tipos de widgets.

Sin embargo, tenga en cuenta que el código de estas bibliotecas, particularmente el de wid-edit.el, no es muy fácil de seguir. Su mejor opción es comenzar reutilizando los widgets existentes o utilizando el código de definición de widgets existente como guía.

(Dos bibliotecas de extensiones menores para esto son cus-edit+.ely wid-edit+.el. También presentan algunos ejemplos de uso).

Hay un manual de información para widgets, distribuido con GNU Emacs, titulado " The Emacs Widget Library ".

También hay una biblioteca forms.el, incluida con GNU Emacs, pero no estoy familiarizado con ella. Quizás alguien más tenga algo útil que decir al respecto. Hay un manual para formularios, distribuido con GNU Emacs, titulado " Modo de formularios ".

Dibujó
fuente
2
Un poco más en formularios.el: stackoverflow.com/questions/10166600/…
phils
1
@Drew: gracias por tu respuesta! ¿Podría aclarar la relación entre \(custom\|widget\).ely \(cus\|wid\)-edit.elun poco? Me parece especialmente esta parte del manual de Reproductores incomprensible: (require 'widget) (eval-when-compile (require 'wid-edit)).
mbork
1
Primero, no soy un experto en esto. Los momentos en que necesitaba cambiar algo wrt Personalizar me sumergí cus-edit.ely wid-edit.el. Los otros archivos que menciona son archivos de nivel superior; los *-edit.elarchivos tienen el código que me interesaba. No sé mucho más que eso; lo siento. La verdadera dificultad es el código en sí, que utiliza un estilo particular semi-OOP que no se presta bien ni a la autodocumentación de Emacs (por decirlo suavemente) ni al depurador de Emacs. Puede investigar por su cuenta, o tal vez tratar de contactar al autor (¡buena suerte con eso!). Quizás otros aquí sean de alguna ayuda.
Dibujó el