Apéndice D Opciones y Recursos de X

Puede personalizar algunos aspectos del comportamiento de Emacs relacionados con X usando recursos X, como es habitual en los programas que usan X.

Cuando Emacs se compila con soporte GTK+, la apariencia de varios widgets gráficos, como la barra de menú, la barra de desplazamiento y los cuadros de diálogo, viene determinada por los recursos GTK+, que también describiremos. Cuando Emacs se construye sin soporte GTK+, la apariencia de estos widgets está determinada por recursos X adicionales.

En MS-Windows, puedes personalizar algunos de los mismos aspectos usando el registro del sistema (ver El registro del sistema MS-Windows).

D.1 Recursos X

Los programas que se ejecutan bajo el Sistema X Window organizan sus opciones de Usuario bajo una jerarquía de clases y recursos. Usted puede especificar valores por defecto para estas opciones en su archivo de recursos X, usualmente llamado ~/.Xdefaults o ~/.Xresources. Los cambios en este archivo no tienen efecto inmediato, porque el servidor X almacena su propia lista de recursos; para actualizarla, utilice el comando xrdb, por ejemplo, xrdb ~/.Xdefaults.

Las configuraciones especificadas a través de los recursos X en general anulan las configuraciones equivalentes en los archivos init de Emacs (véase 50.4. El Archivo de Inicialización de Emacs), en particular para los parámetros del marco inicial (véase 22.11 Parámetros de Marco).

(Los sistemas MS-Windows no soportan archivos de recursos X; en tales sistemas, Emacs busca recursos X en el Registro de Windows, primero bajo la clave HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs, que afecta sólo al Usuario actual y anula la configuración de todo el sistema, y luego bajo la clave HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs, que afecta a todos los Usuarios del sistema. El menú y las barras de desplazamiento son widgets nativos de MS-Windows, por lo que sólo se pueden personalizar a través de la configuración de todo el sistema en el Panel de Control de Pantalla. También puede configurar los recursos mediante la opción de línea de comandos -xrm, como se explica a continuación).

Cada línea del archivo de recursos X especifica un valor para una opción o para un conjunto de opciones relacionadas. El orden en que aparecen las líneas en el archivo no importa. Cada especificación de recurso consiste en un nombre de programa y un nombre de recurso. La distinción entre mayúsculas y minúsculas es importante en cada uno de estos nombres. He aquí un ejemplo:

emacs.cursorColor: dark green

El nombre del programa es el nombre del archivo ejecutable al que se aplica el recurso. Para Emacs, normalmente es emacs. Para especificar una definición que se aplique a todas las instancias de Emacs, independientemente del nombre del ejecutable de Emacs, utilice Emacs.

El nombre del recurso es el nombre de un ajuste del programa. Por ejemplo, Emacs reconoce un recurso cursorColor que controla el color del cursor de texto.

Los recursos se agrupan en clases con nombre. Por ejemplo, la clase Foreground contiene los recursos cursorColor, foreground y pointerColor (ver D.2 Tabla de Recursos X para Emacs). En lugar de utilizar un nombre de recurso, puede utilizar un nombre de clase para especificar el valor por defecto para todos los recursos de esa clase, de esta manera:

emacs.Foreground: dark green

Emacs no procesa los recursos X en absoluto si establece la variable inhibit-x-resources a un valor no nulo. Si invoca Emacs con la opción de línea de comandos -Q (o --quick), inhibit-x-resources se establece automáticamente a t (ver C.2 Opciones Iniciales).

Además, puede utilizar las siguientes opciones de línea de comandos para anular el archivo de recursos X:

-name nombre
--name=nombre

Esta opción establece el nombre del programa del marco inicial de Emacs a nombre. También establece el título del marco inicial a nombre. Esta opción no afecta a los marcos posteriores.

Si no se especifica esta opción, por defecto se utiliza el nombre del ejecutable de Emacs como nombre del programa.

Por coherencia, -name también especifica el nombre a utilizar para otros valores de recursos que no pertenecen a ningún marco en particular.

Los recursos que nombran invocaciones Emacs también pertenecen a una clase, llamada Emacs. Si escribe Emacs en lugar de emacs, el recurso se aplica a todos los marcos de todos los trabajos Emacs, independientemente de los títulos de los marcos y del nombre del fichero ejecutable.

-xrm recurso-valor
--xrm=recurso-valor

Esta opción especifica valores de recursos X para el trabajo Emacs actual.

resource-value debe tener el mismo formato que usaría dentro de un fichero de recursos X. Varias opciones -xrm son posibles para incluir múltiples especificaciones de recursos. También puede usar #include "nombre-de-archivo" como recurso-valor para incluir un archivo lleno de especificaciones de recursos. Los valores de recursos especificados con -xrm tienen prioridad sobre todas las demás especificaciones de recursos.

D.2 Tabla de Recursos X para Emacs

La siguiente tabla lista los nombres de recursos X que Emacs reconoce. Tenga en cuenta que algunos de los recursos no tienen efecto en Emacs compilado con varios kits de herramientas X (GTK+, Lucid, etc.) - indicamos más abajo cuando este es el caso.

alpha (class Alpha)

Establece el parámetro de marco alpha, determinando la transparencia del marco (ver Parámetros de Marco en el Manual de Referencia de Emacs Lisp).

alphaBackground (class AlphaBackground)

Establece el parámetro de marco alpha-background, determinando la transparencia del fondo (ver Parámetros de Marco en el Manual de Referencia de Emacs Lisp).

background (class Background)

Color de fondo (véase 15.9 Colores de las Caras).

bitmapIcon (class BitmapIcon)

Indica al gestor de ventanas que muestre el icono de Emacs si está on; que no lo muestre si está off. Ver C.11 Íconos, para una descripción del icono.

borderColor (class BorderColor)

Color del borde externo del marco. Esto no tiene efecto si Emacs está compilado con soporte GTK+.

borderWidth (class BorderWidth)

Ancho del borde externo del marco, en píxeles. Esto no tiene efecto si Emacs está compilado con soporte GTK

cursorBlink (class CursorBlink)

Si el valor de este recurso es off o false o 0 al inicio, Emacs desactiva el modo Cursor parpadeante (ver 15.21 Visualización del Cursor).

cursorColor (class Foreground)

Color del cursor de texto. Si este recurso se especifica cuando Emacs se inicia, Emacs establece su valor como el color de fondo de la cara del cursor (ver 15.8. Caras de Texto).

font (class Font)

Nombre de la fuente por defecto (ver 22.8 Fuentes). También puede especificar un nombre de conjunto de fuentes (véase 23.14 Conjunto de fuentes (fontsets)).

fontBackend (class FontBackend)

Lista delimitada por comas de backend(s) [1] a usar para dibujar fuentes, en orden de precedencia. Por ejemplo, el valor x, xft le dice a Emacs que dibuje las fuentes usando el controlador de fuentes del núcleo X, recurriendo al controlador de fuentes Xft si falla. Normalmente, deberías dejar este recurso sin configurar, en cuyo caso Emacs intenta usar todos los backends de fuentes disponibles.

foreground (class Foreground)

Color de primer plano por defecto para el texto.

fullscreen (class Fullscreen)

El tamaño de pantalla completa deseado. El valor puede ser fullboth, maximized, fullwidth o fullheight, que corresponden a las opciones de línea de comandos -fs, -mm, -fw, y -fh (ver C.8 Opciones para el Tamaño y la Posición de la Ventana). Tenga en cuenta que esto sólo se aplica al marco inicial.

geometry (class Geometry)

Tamaño y posición de la ventana. El valor debe ser una especificación de tamaño y posición, de la misma forma que en la opción de línea de comandos -g o --geometry (ver C.8 Opciones para el Tamaño y la Posición de la Ventana).

El tamaño se aplica a todos los marcos de la sesión Emacs, pero la posición se aplica sólo al marco Emacs inicial (o, en el caso de un recurso para un nombre de marco específico, sólo a ese marco).

Tenga cuidado de no especificar este recurso como emacs*geometryf, ya que podría afectar a menús individuales así como al marco principal de Emacs.

horizontalScrollBars (class ScrollBars)

Si el valor de este recurso es off o false o 0, Emacs desactiva el modo Barra de desplazamiento horizontal al inicio (ver 22.12. Barras de Desplazamiento).

iconName (class Title)

Nombre a mostrar en el icono.

internalBorder (class BorderWidth)

Ancho del borde interno del marco, en píxeles.

lineSpacing (class LineSpacing)

Espacio adicional entre líneas, en píxeles.

menuBackground (class Background)

Color de fondo de los menús en versiones no toolkit de Emacs. (Para las versiones con toolkit, véase D.3 Menú Lucid y Recursos X de Diálogo, también véase D.4 Recursos X del Menú Motif, y D.5 Recursos GTK).

menuBar (class MenuBar)

Si el valor de este recurso es off o false o 0, Emacs desactiva el modo Barra de Menú al inicio (ver 22.15 Barras de Menús).

minibuffer (class Minibuffer)

Si es “none”, Emacs no hará un minibuffer en este marco; en su lugar usará un marco de minibuffer separado.

paneFont (class Font)

Nombre de fuente para los títulos de los paneles de menú, en versiones de Emacs que no sean toolkit. (Para las versiones con toolkit, véase D.3 Menú Lucid y Recursos X de Diálogo, también véase D.4 Recursos X del Menú Motif, y D.5 Recursos GTK).

paneForeground (class Foreground)

Color de primer plano para los títulos de los paneles de menú, en versiones de Emacs sin toolkit. (Para las versiones con toolkit, véase D.3 Menú Lucid y Recursos X de Diálogo, también véase D.4 Recursos X del Menú Motif, y D.5 Recursos GTK).

pointerColor (class Foreground)

Color del cursor del ratón. Esto no tiene efecto en muchos entornos gráficos de escritorio, ya que no permiten a Emacs cambiar el cursor del ratón de esta manera.

privateColormap (class PrivateColormap)

Si on, usa un mapa de color privado, en el caso de que el visual por defecto de la clase PseudoColor y Emacs lo esté usando.

reverseVideo (class ReverseVideo)

Cambia los colores de primer plano y fondo por defecto si está on, usa los colores especificados si está off.

screenGamma (class ScreenGamma)

Corrección gamma de los colores, equivalente al parámetro de trama screen-gamma.

scrollBar (class ScrollBar)

Si el valor de este recurso es off o false o 0, Emacs desactiva el modo Barra de desplazamiento al inicio (ver 22.12. Barras de Desplazamiento).

scrollBarWidth (class ScrollBarWidth)

El ancho de la barra de desplazamiento en píxeles, equivalente al parámetro de marco scroll-bar-width. No establezca este recurso si Emacs está compilado con soporte GTK+.

selectionFont (class SelectionFont)

Nombre de fuente para los elementos del menú emergente, en versiones de Emacs que no sean toolkit. (Para versiones con toolkit, véase D.3 Menú Lucid y Recursos X de Diálogo, también véase D.4 Recursos X del Menú Motif, y D.5 Recursos GTK).

selectionForeground (class SelectionForeground)

Color de primer plano para los elementos del menú emergente, en versiones de Emacs sin toolkit. (Para las versiones con toolkit,véase D.3 Menú Lucid y Recursos X de Diálogo, también véase D.4 Recursos X del Menú Motif, y D.5 Recursos GTK).

selectionTimeout (class SelectionTimeout)

Número de milisegundos que hay que esperar para recibir una respuesta de la selección. Si el propietario de la selección no responde en este tiempo, nos damos por vencidos. Un valor de 0 significa esperar tanto como sea necesario.

synchronous (class Synchronous)

Ejecuta Emacs en modo síncrono si está on. El modo síncrono es útil para depurar problemas de X.

title (class Title)

Nombre a mostrar en la barra de título del marco inicial de Emacs.

toolBar (class ToolBar)

Si el valor de este recurso es off o false o 0, Emacs desactiva el modo Barra de herramientas al inicio (ver 22.12. Barras de Desplazamiento).

tabBar (class TabBar)

Si el valor de este recurso es on' o ``yes o 1, Emacs activa el modo Barra de Tabuladores al inicio (ver 22.16. Barras de Herramientas).

useXIM (class UseXIM)

Desactiva el uso de métodos de entrada X (XIM) si es false o off. Esto sólo es relevante si tu Emacs está construido con soporte XIM. Puede ser útil desactivar XIM en enlaces cliente/servidor X lentos.

inputStyle (class InputStyle)

Este recurso controla cómo se muestra el texto de previsualización generado por los métodos de entrada X. Su valor puede ser uno de los siguientes:

callback

Muestra el contenido del texto de previsualización en el búfer actual.

offthespot

Muestra el texto de previsualización dentro de un área separada de la pantalla proporcionada por Emacs.

overthespot

Muestra el texto de previsualización dentro de una ventana emergente en la ubicación del punto en la ventana actual.

none

Deja que el método de entrada decida cómo mostrarse. Esto suele ser equivalente a overthespot, pero podría funcionar con más métodos de entrada.

native

Utiliza el kit de herramientas para manejar métodos de entrada. Actualmente esto sólo está implementado en GTK.

root

Utiliza alguna ubicación en pantalla específica del método de entrada para mostrar el texto de previsualización.

synchronizeResize (class SynchronizeResize)

Si está off o false, Emacs no intentará decirle al gestor de ventanas cuándo ha terminado de redibujar la pantalla en respuesta al redimensionamiento de un marco. En caso contrario, el gestor de ventanas pospondrá el dibujo de un marco que acaba de ser redimensionado hasta que se actualice su contenido, lo que evita que se muestren áreas en blanco de un marco que aún no han sido pintadas. Si se establece a extended, habilitará el uso de un protocolo alternativo de sincronización de marcos, que podría ser soportado por algunos gestores de ventanas de composición que no soportan el protocolo que Emacs usa por defecto, y hace que el Editor sincronice la visualización con la tasa de refresco del monitor cuando se está usando un gestor de ventanas de composición compatible.

verticalScrollBars (class ScrollBars)

Da a los marcos barras de desplazamiento a la izquierda si es left, a la derecha: si es right; no tener barras de desplazamiento si es off (desactivado) (ver 22.12. Barras de Desplazamiento).

visualClass (class VisualClass)

La clase visual para la visualización en color X. Si se especifica, el valor debe empezar por uno de los siguientes: TrueColor, PseudoColor, DirectColor, StaticColor, GrayScale y StaticGray, seguido de -depth (profundidad, hace referencia a las capas o planos de oclor), donde depth es el número de planos de color.

También puedes usar recursos X para personalizar caras Emacs individuales (ver 15.8. Caras de Texto). Por ejemplo, establecer el recurso face.attributeForeground equivale a personalizar el atributo foreground de la cara. Sin embargo, recomendamos personalizar las caras desde dentro de Emacs, en lugar de usar recursos X. Véase 50.1.5. Personalización de Caras.

D.4 Recursos X del Menú Motif

Si Emacs está compilado con el soporte del toolkit X usando widgets Motif o LessTif, puede usar recursos X para personalizar la apariencia de la barra de menús (ver 1.4 La Barra de Menús), menús emergentes y cuadros de diálogo (ver 22.18 Uso de Cuadros de Diálogo). Sin embargo, los recursos están organizados de forma diferente a los widgets (herramientas, aplicaciones muy chiquitas) Lucid.

Los nombres de los recursos para la barra de menú están en la clase pane.menubar, y deben especificarse de esta forma:

Emacs.pane.menubar.subwidget.resource: value

Para los menús emergentes, los recursos están en la clase menu*, en lugar de pane.menubar. Para los cuadros de diálogo, están en dialog. En cada caso, cada cadena de menú individual es un subwidget; el nombre del subwidget es el mismo que el de la cadena del elemento de menú. Por ejemplo, el menú File de la barra de menús es un subwidget llamado emacs.pane.menubar.File.

Normalmente, querrá especificar los mismos recursos para toda la barra de menús. Para ello, utilice * en lugar de un nombre específico de subwidget. Por ejemplo, para especificar la fuente 8x16 para todos los elementos de la barra de menús, incluidos los submenús, escriba esto:

Emacs.pane.menubar.*.fontList: 8x16

Cada elemento de un submenú también tiene su propio nombre para los recursos X; por ejemplo, el submenú File (Archivo) tiene un elemento llamado Save (current buffer) (Guardar búfer actual)». Una especificación de recursos para un elemento de submenú tiene este aspecto:

Emacs.pane.menubar.popup_*.menu.item.resource: value

Por ejemplo, así es como se especifica el tipo de letra para el elemento Save (current buffer):

Emacs.pane.menubar.popup_*.File.Save (current buffer).fontList: 8x16

Para un elemento de un submenú de segundo nivel, como Complete Word (Completar Palabra) en Spell Checking (Corrección ortográfica) dentro de Tools (Herramientas), el recurso se ajusta a esta plantilla:

Emacs.pane.menubar.popup_*.popup_*.menu.resource: value

Por ejemplo:

Emacs.pane.menubar.popup_*.popup_*.Spell Checking.Complete Word: value

(Esto debería ser una línea larga).

Si desea que los elementos del submenú tengan un aspecto diferente al de la propia barra de menús, primero debe especificar el recurso para todos ellos y, a continuación, anular el valor sólo para los submenús. He aquí un ejemplo:

Emacs.pane.menubar.*.fontList: 9x18
Emacs.pane.menubar.popup_*.fontList: 8x16

Para especificar recursos para el cuadro de selección de archivos LessTif, utilice fsb*, de la siguiente manera:

Emacs.fsb*.fontList: 8x16

He aquí una lista de recursos para las barras de menú y los menús emergentes de LessTif:

armColor

El color a mostrar en un botón activo.

fontlist

El tipo de letra a utilizar.

marginBottom
marginHeight
marginLeft
marginRight
marginTop
marginWidth

Cantidad de espacio a dejar alrededor del elemento, dentro del borde.

borderWidth

El ancho del borde alrededor del elemento de menú, en todos los lados.

shadowThickness

El ancho de la sombra del borde.

bottomShadowColor

El color para la sombra del borde, en la parte inferior y la derecha.

topShadowColor

El color para la sombra del borde, arriba y a la izquierda.

D.5 Recursos GTK

Si Emacs está compilado con soporte para el toolkit (caja de herramientas) GTK+, la forma más sencilla de personalizar sus widgets (miniaplicaciones) GTK+ (por ejemplo, menús, diálogos, barras de herramientas y barras de desplazamiento) es elegir un tema GTK+ apropiado, por ejemplo con el selector de temas de GNOME.

En la versión 2 de GTK+, también puede usar recursos GTK+ para personalizar la apariencia de los widgets GTK+ usados por Emacs. Estos recursos se especifican en el archivo ~/.emacs.d/gtkrc (para recursos GTK+ específicos de Emacs), o ~/.gtkrc-2.0 (para recursos GTK+ generales). Recomendamos usar ~/.emacs.d/gtkrc, ya que GTK+ parece ignorar ~/.gtkrc-2.0 cuando se ejecuta GConf con GNOME. Tenga en cuenta, sin embargo, que algunos temas GTK+ pueden anular las personalizaciones en ~/.emacs.d/gtkrc; no hay nada que podamos hacer al respecto. Los recursos GTK+ no afectan a los aspectos de Emacs no relacionados con los widgets GTK+, como las fuentes y los colores en la ventana principal de Emacs; estos se rigen por los recursos X normales (ver D.1 Recursos X).

Las siguientes secciones describen cómo personalizar los recursos GTK+ para Emacs. Para más detalles sobre los recursos GTK+, consulta el documento de la API GTK+ en https://developer-old.gnome.org/gtk2/stable/gtk2-Resource-Files.html.

En la versión 3 de GTK+, los recursos GTK+ han sido reemplazados por un sistema completamente diferente. La apariencia de los widgets GTK+ viene ahora determinada por archivos de estilo tipo CSS: gtk-3.0/gtk.css en el directorio de instalación de GTK+, y ~/.themes/theme/gtk-3.0/gtk.css para la configuración de estilo local (donde theme es el nombre del tema GTK+ actual). Por lo tanto, la descripción de los recursos GTK+ en esta sección no se aplica a GTK+ 3. Para obtener más información sobre el sistema de estilos de GTK+ 3, consulte https://developer-old.gnome.org/gtk3/3.0/GtkCssProvider.html.

D.5.1 Conceptos Básicos de los Recursos GTK

En un archivo de recursos GTK+ 2 (normalmente ~/.emacs.d/gtkrc), el tipo más simple de configuración de recursos simplemente asigna un valor a una variable. Por ejemplo, poner la siguiente línea en el archivo de recursos cambia la fuente en todos los widgets GTK+ a courier-12:

gtk-font-name = "courier 12"

Tenga en cuenta que en este caso el nombre de la fuente debe suministrarse como un patrón de fuente GTK (también llamado nombre de fuente Pango), no como un nombre de fuente estilo Fontconfig o XLFD. Véase 22.8 Fuentes.

Para personalizar los widgets (aplicaciones chiquitas) primero se define un estilo, y luego se aplica el estilo a los widgets. He aquí un ejemplo que establece el tipo de letra para los menús (los caracteres # indican comentarios):

# Define el estilo ‘mi_stilo’.
style "my_style"
{
  font_name = "helvetica bold 14"
}

# Especifica el tipo de widget ‘*emacs-menuitem*’ usa ‘mi_stilo’.
widget "*emacs-menuitem*" style "my_style"

El nombre del widget en este ejemplo contiene comodines, por lo que el estilo se aplica a todos los widgets que coincidan con *emacs-menuitem*. Los widgets se nombran por la forma en que están contenidos, desde el widget exterior al interior. Aquí hay otro ejemplo que aplica mi_estilo específicamente a la barra de menú de Emacs:

widget "Emacs.pane.menubar.*" style "mi_estilo"

He aquí un ejemplo más elaborado, que muestra cómo cambiar las partes de la barra de desplazamiento:

style "scroll"
{
  fg[NORMAL] = "red"     # Color de la flecha.
  bg[NORMAL] = "yellow"  # Margen y fondo alrededor de la flecha.
  bg[ACTIVE] = "blue"    # Color del Canal.
  bg[PRELIGHT] = "white" # Color del umbral cuando el ratón está sobre él.
}

widget "*verticalScrollBar*" style "scroll"

D.5.2 Nombres de widgets (miniaplicaciones) GTK

Un widget GTK+ se especifica mediante un nombre de widget y una clase de widget. El nombre del widget se refiere a un widget específico (por ejemplo, emacs-menuitem), mientras que la clase widget se refiere a una colección de widgets similares (por ejemplo, GtkMenuItem). Un widget siempre tiene una clase, pero no necesita tener un nombre.

Los nombres absolutos son secuencias de nombres de widgets o clases de widgets, que corresponden a jerarquías de widgets incrustados dentro de otros widgets. Por ejemplo, si una GtkWindow llamada top contiene una GtkVBox llamada box, que a su vez contiene una GtkMenuBar llamada menubar, el nombre absoluto de clase del widget de la barra de menú es GtkWindowx.GtkVBox.GtkMenuBar, y su nombre absoluto de widget es top.box.menubar.

Los archivos de recursos GTK+ pueden contener dos tipos de comandos para especificar la apariencia de los widgets:

widget

Especifica un estilo para los widgets basado en el nombre de la clase, o sólo en la clase.

widget_class

Especifica un estilo para los widgets basado en el nombre de la clase.

Consulte la subsección anterior para ver ejemplos de uso del comando widget; el comando widget_class se utiliza de forma similar. Tenga en cuenta que el nombre/clase del widget y el estilo deben ir entre comillas dobles, y que estos comandos deben estar en el nivel superior del archivo de recursos GTK+.

Como se ha indicado anteriormente, puede especificar un nombre o clase de widget con la sintaxis de comodín del shell: * coincide con cero o más caracteres y ? coincide con un carácter. Este ejemplo asigna un estilo a todos los widgets:

widget "*" style "mi_stilo"

D.5.3 Nombres de widgets GTK+ en Emacs

Los widgets GTK+ utilizados por un marco Emacs se listan a continuación:

Emacs (class GtkWindow)
    pane (class GtkVBox)
        menubar (class GtkMenuBar)
    [menu item widgets]
    [unnamed widget] (class GtkHandleBox)
        emacs-toolbar (class GtkToolbar)
            [tool bar item widgets]
    emacs (class GtkFixed)
        verticalScrollBar (class GtkVScrollbar)

El contenido de las ventanas Emacs se dibuja en el widget emacs. Tenga en cuenta que aunque haya varias ventanas Emacs, cada widget de barra de desplazamiento se llama verticalScrollBar.

Por ejemplo, aquí hay dos formas diferentes de establecer el estilo de la barra de menú:

widget "Emacs.pane.menubar.*" style "my_style"
widget_class "GtkWindow.GtkVBox.GtkMenuBar.*" style "my_style"

Para los diálogos GTK+, Emacs usa un widget llamado emacs-dialog, de la clase GtkDialog. Para la selección de ficheros, Emacs usa un widget llamado emacs-filedialog, de la clase GtkFileSelection.

Debido a que los widgets para menús emergentes y diálogos son ventanas independientes y no están contenidas en el widget Emacs, sus nombres absolutos GTK+ no empiezan por Emacs. Para personalizar estos widgets, utilice comodines como estos:

widget "*emacs-dialog*" style "mi_estilo_de_dialogo"
widget "*emacs-filedialog* style "mi_estilo_de_archivo"
widget "*emacs-menuitem* style "mi_estilo_de_menu"

Si quiere aplicar un estilo a todos los menús de Emacs, use esto:

widget_class "*Menu*" style "mi_estilo_de_menu"

D.5.4 Estilos GTK+

He aquí un ejemplo de dos declaraciones de estilo GTK+:

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"

style "default"
{
  font_name = "helvetica 12"

  bg[NORMAL] = { 0.83, 0.80, 0.73 }
  bg[SELECTED] = { 0.0, 0.55, 0.55 }
  bg[INSENSITIVE] = { 0.77, 0.77, 0.66 }
  bg[ACTIVE] = { 0.0, 0.55, 0.55 }
  bg[PRELIGHT] = { 0.0, 0.55, 0.55 }

  fg[NORMAL] = "black"
  fg[SELECTED] = { 0.9, 0.9, 0.9 }
  fg[ACTIVE] = "black"
  fg[PRELIGHT] = { 0.9, 0.9, 0.9 }

  base[INSENSITIVE] = "#777766"
  text[INSENSITIVE] = { 0.60, 0.65, 0.57 }

  bg_pixmap[NORMAL] = "background.xpm"
  bg_pixmap[INSENSITIVE] = "background.xpm"
  bg_pixmap[ACTIVE] = "background.xpm"
  bg_pixmap[PRELIGHT] = "<none>"

}

style "ruler" = "default"
{
  font_name = "helvetica 8"
}

El estilo ruler hereda de default. De este modo, puede basarse en estilos existentes. La sintaxis para fuentes y colores se describe a continuación.

Como muestra este ejemplo, es posible especificar varios valores para el primer plano y el fondo dependiendo del estado del widget. Los estados posibles son:

NORMAL

Este es el estado por defecto para los widgets.

ACTIVE (activo)

Este es el estado de un widget que está listo para hacer algo. También es para la barra de desplazamiento, por ejemplo, bg[ACTIVE] = "red" pone la barra de desplazamiento en rojo. Los botones que han sido armados (pulsados pero no soltados todavía) están en este estado.

PRELIGHT (campos seleccionados no clicados)

Este es el estado para un widget que puede ser manipulado, cuando el puntero del ratón está sobre él, por ejemplo cuando el ratón está sobre el pulgar en la barra de desplazamiento o sobre un elemento del menú. Cuando el ratón está sobre un botón que no está pulsado, el botón está en este estado.

SELECTED (seleccionado)

este es el estado de los datos que han sido seleccionados por el usuario. Puede ser texto seleccionado o elementos seleccionados en una lista. Este estado no se utiliza en Emacs.

INSENSITIVE (campos no activos)

Este es el estado de los widgets que son visibles, pero que no pueden manipularse de la forma habitual, por ejemplo, los botones que no pueden pulsarse y los elementos de menú desactivados. Para mostrar los elementos de menú desactivados en amarillo, utilice fg[INSENSITIVE] = "yellow".

Estas son las cosas que pueden ir en una declaración de estilo:

bg[state] = color

Especifica el color de fondo del widget. Tenga en cuenta que el texto editable no utiliza bg; en su lugar utiliza base.

base[state] = color

Especifica el color de fondo del texto editable. En Emacs, este color se utiliza para el fondo de los campos de texto en el diálogo de archivo.

bg_pixmap[state] = "pixmap"

Especifica un fondo de imagen (en lugar de un color de fondo). pixmap debe ser el nombre del archivo de imagen. GTK+ puede utilizar varios formatos de archivo de imagen, incluyendo XPM, XBM, GIF, JPEG y PNG. Si desea que un widget utilice la misma imagen que su padre, utilice <parent>. Si no desea ninguna imagen, utilice <none>.<none> es la forma de cancelar una imagen de fondo heredada de un estilo padre.

No puede especificar el archivo por su nombre absoluto. GTK+ busca el archivo pixmap en los directorios especificados en pixmap_path. Esta variable (pixmap_path) es una lista de directorios separada por dos puntos entre comillas dobles, especificada en el nivel superior de un archivo gtkrc (es decir, no dentro de una definición de estilo; véase el ejemplo anterior):

pixmap_path "/usr/share/pixmaps:/usr/include/X11/pixmaps"
fg[state] = color

Especifica el color de primer plano que utilizarán los widgets. Es el color del texto en menús y botones, y el color de las flechas en la barra de desplazamiento. Para texto editable, utilice texto.

text[state] = color

Este es el color para el texto editable. En Emacs, este color se utiliza para los campos de texto en el diálogo de archivo.

font_name = "font"

Especifica la fuente para el texto del widget. font es un nombre de fuente estilo GTK (o Pango), como Sans Italic 10. Ver 22.8 Fuentes. Los nombres no distinguen mayúsculas de minúsculas.

Existen tres formas de especificar un color: un nombre de color, un triplete RGB o un triplete RGB al estilo GTK. Para una descripción de los nombres de color y los tripletes RGB, véase 15.9 Colores de las Caras. Los nombres de colores deben escribirse entre comillas dobles, por ejemplo, "red" (rojo). Los tripletes RGB deben escribirse sin comillas dobles, por ejemplo, #ff0000. Las tripletas RGB al estilo GTK tienen la forma { r, g, b }, donde r, g y b son enteros en el rango 0-65535 o flotantes en el rango 0.0-1.0.