El sistema de personalización es una característica incorporada de Emacs diseñada para resolver con precisión el problema que usted describe; la programación puede no ser la forma ideal para que el usuario promedio configure su editor.
El punto de entrada principal para la funcionalidad de personalización es M-x customize RET
(o Options > Customize Emacs > Top-level Customization Group
desde el menú). Desde allí, verá un sistema de menú interactivo para ajustar la configuración. Esta interfaz exige que todas las configuraciones sean del tipo correcto (número, cadena, color, etc.), evitando una fuente importante de error cuando los usuarios configuran Emacs mediante programación. Si el usuario elige persistir cualquier cambio que realice a través de la interfaz de usuario, la configuración se almacena en una sección especial en el archivo de inicialización del usuario (lea:) .emacs
.
defcustom
es un envoltorio alrededor de la funcionalidad de Emacs Lisp de nivel inferior, defvar
que declara la variable y la hace visible dentro de la interfaz de personalización. También permite al desarrollador proporcionar metadatos adicionales necesarios para mostrar un control interactivo apropiado, es decir, ¿qué tipo de valor se almacena en esta variable? ¿Una cadena arbitraria? ¿Un número? ¿Una elección de un conjunto fijo de opciones? etc. defgroup
es una construcción de agrupación para estas opciones personalizables para que puedan organizarse en una bonita jerarquía.
Esta funcionalidad debe usarse en cualquier momento en que un dato se considere una opción configurable para el usuario en lugar de un detalle interno de la biblioteca.
Aquí hay un ejemplo simple de una pequeña biblioteca mía:
(defgroup checkbox nil
"Quick manipulation of textual checkboxes."
:group 'convenience)
(defcustom checkbox-states '("[ ]" "[x]")
"Checkbox states to cycle between.
First item will be the state for new checkboxes."
:group 'checkbox
:type '(repeat string))
El defgroup
crea un nuevo grupo dentro de la interfaz de personalización bajo el nivel superior convenience
artículo. Luego necesitaba una variable para almacenar los posibles estados de casilla de verificación. Podría haberlo usado defvar
, pero como quiero que esto sea fácilmente personalizable, elegí usarlo defcustom
. La :group
porción indica que pertenece al grupo definido previamente, y :type
indica que es una secuencia de cadenas. También hay un valor predeterminado y una descripción. También hay facilidades adicionales (no mostradas aquí) para transformar los valores ingresados por el usuario.
Si ahora corro M-x customize RET
y navego Convenience > Checkbox
, veo lo siguiente:
No es la interfaz más bella del mundo, pero tenga en cuenta que tiene herramientas interactivas para personalizar el valor de "Estados de casilla de verificación" ( checkbox-states
internamente). Muestra los valores de cadena actuales junto con los botones INS
(insertar) y DEL
(eliminar), y nos permite editar los valores de cadena en cuadros de edición. Cuando hayamos terminado, podemos decidir si aplicamos nuestros cambios, revertirlos o aplicarlos y guardarlos para futuras sesiones.
customize
instalaciones y cuándo personalizarlas a mano? ¿O estás interesado en escribir un modo? La última es la situación en la que realmente podrías encontrarte usando cosas comodefcustom
y similares.