-.Índice.-
- Consideraciones iniciales
- Añadir botones en la barra de título
- Afinando un poco más con funciones
- Atajos de teclado
-.Consideraciones iniciales.-
Este capítulo va a ser bastante más complejo y pesado que el primero, el cual use a modo de presentación para que veais como va a ir esto de configurar fvwm. Así, el que no se sienta valiente se puede retirar a tiempo. En este capítulo aprenderemos a poner botones en nuestras barras de título y a asignarles acciones sencillas o mediante funciones. También aprenderemos como definir atajos de teclado para las acciones preferidas o para iniciar aplicaciones. La idea es tener algo medianamente usable tras terminar este capítulo. No debería llevarnos más de unos pocos minutos.
En esta capítulo NO trataré sobre decoraciones ni estética de las ventanas. Eso lo haré más adelante, cuando lo estime oportuno. El tema de las decoraciones es bastante complejo, y creo que conseguir un nivel alto de funcionalidad es más importante que la estética. Pero que no se preocupen los que piensen de otra forma. No voy a descuidar ese apartado en absoluto, tan solo lo pospondré un poco, tampoco demasiado, lo prometo.
-.Añadir botones en la barra de título.-
Si has mirado las barras de título de fvwm, en comparación con las de otros wm's más modernos pueden resultar un poco limitadas. Nada más lejos de la realidad. El problema es que, por defecto, fvwm no trae dichas funcionalidades configuradas, y por eso puede dar la impresión de ser más limitado. Una ventana con la configuración estándar de fvwm tiene este aspecto:

¿Cómo añadimos los botones en la barra de título? Pues símplemente, asociándoles una acción. Si definimos una acción que vaya atada a un botón, entonces el botón aparecerá, y al pulsarlo, se ejecutará la acción asociada sobre la ventana en cuestión. Las acciones se definen según el siguiente esquema:
Mouse Botón Contexto Modificadores Acción
Y sin más, pongo unos ejemplos y lo vemos sobre la marcha. Voy a añadir tres acciones de ratón al final de la config del primer capítulo:
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec fvwm-root --retain-pixmap ~/wallpapers/mywallpaper.png
Mouse 1 2 N Close
Mouse 1 4 N Maximize
Mouse 1 6 N Iconify
Como ves, las acciones asociadas al ratón empiezan siempre por la palabra clave "Mouse". En los tres ejemplo, el "1" que hay tras dicha palabra quiere decir que la acción irá asociada al primer botón del ratón (el izquierdo). El tercer campo es el contexto. El contexto es la zona a la que va referido el comando. Hay muchos contexto en fvwm. Los que van marcados del 0 al 9 se refieren a los botones de la barra de títulos. Eso quiere decir que podemos definir hasta 10 botones distintos en la barra de títulos de nuestras ventanas. Y se sitúan en el siguiente orden:
1 3 5 7 9 Título 0 8 6 4 2
Por tanto, en las tres líneas Mouse de arriba, hemos definido las acciones para los tres botones más a la derecha en la barra de títulos: el 2, el 4 y el 6.
El cuarto campo es la tecla modificadora que escogeremos, se usa 'M' para meta (Alt en un PC), 'S' para shift (mayúsculas) y 'C' para control. En nuestro caso, hemos usado N, del inglés "none" (ninguna). Porque no queremos tener que pulsar tecla alguna para activar esos botones, tan solo el ratón nos basta.
El quinto y último campo es el que define la acción a realizar si se realiza la combinación especificada en el contexto que hemos definido. Puede ser un comando de fvwm, una función o cualquier otra cosa que fvwm pueda interpretar. En este caso hemos usado tres comandos de fvwm: Close para el botón 2 (el que está más a la derecha de todos), Maximize para el 4 (justo a la izquierda del 2) e Iconify para el botón 6, justo a la izquierda del dos. Si ya has añadido las tres acciones mencionadas, guarda el archivo config otra vez, y reinicia fvwm escogiendo la opción correspondiente del menú raíz. Ahora las ventanas deberían aparecer como en la foto siguiente, con tres botones en la parte derecha de la barra de título.

Respecto al cuarto campo, nótese que 'N' quiere decir "Ninguna tecla modificadora", de forma estricta. Es decir, la condición que activa el atajo no se cumplirá si se está pulsando algún modificador, y esto incluye a los modificadores de bloqueo. Por tanto, si tus botones no funcionan, comprueba el estado de los bloqueos de mayúsculas y el pad numérico. Se puede intentar contrarrestar este efecto usando el comando siguiente en nuestra configuración:
# Ignorar teclas modificadoras: scroll lock/num lock/caps lock
IgnoreModifiers L25
Una advertencia: yo nunca he tenido problema alguno con este comando, pero según el FAQ de fvwm y la página man, el comando IgnoreModifiers puede crear algunos problemas. La página de manual especifica que en máquinas lentas puede crear problemas de rendimiento importantes (aunque yo jamás he visto nada similar). Seguramente podamos asumir que dicha advertencia lleva ahí mucho años, y que quizás no sea aplicable al hardware de hoy día. Pero en cualquier caso, dejo aquí esta nota, para que si alguien experimenta algún problema con dicha opción sepa donde buscar más información. Y ahora vuelta al trabajo ;)
El significado de Close y Maximize es obvio, nos sirven para cerrar y maximizar la ventana, respectivamente. El significado de Iconify va algo más ligado a las peculiaridades de fvwm. En fvwm no existe el concepto de minimizado tal cual lo implementan otros wm. En fvwm, el equivalente es la iconificación. Cuando iconificamos una ventana, la ventana desaparece de nuestra vista, y se convierte en un icono en nuestro escritorio. Por ejemplo, abrimos un xterm, y desde él lanzamos seamonkey, luego pulsamos sobre el botón 6 de la barra de título de seamonkey, nuestro escritorio querará así:
![]()
Arriba a la izquierda podemos apreciar el icono de seamonkey, que representa a la ventana minimizada. Pero si hacemos click sobre él, no ocurre nada. Ya sea con el botón derecho o el izquierdo. Eso es porque el icono es otro contexto distinto, para el cual no hemos definido acción alguna. Así que lo haremos ahora, en este caso el contexto será I ("i" latina):
# Esta función se ejecuta al iniciar/reiniciar fvwm
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec fvwm-root --retain-pixmap ~/wallpapers/mywallpaper.png
# Acciones asociadas al ratón: botones barra de título
Mouse 1 2 N Close
Mouse 1 4 N Maximize
Mouse 1 6 N Iconify
Mouse 4 T N WindowShade true
Mouse 5 T N WindowShade false
# Acción asociada al ratón: ventanas iconificadas
Mouse 1 I N Iconify off
Aquí tenemos algunas cosas nuevas. La última acción tiene de contexto "I", que se refiere al Icono (la ventana iconificada). Pues bien, lo que hacemos en ese línea es asociar el click izquierdo del ratón sobre un icono con la acción "Iconify off", que viene a ser "des-iconificar". Con lo cual la ventana volverá a su estado normal al hacer un click izquierdo sobre su icono.
También he añadido dos líneas más, para los botones 4 y 5. Usualmente, dichos botones son los que conforman la rueda del ratón. El botón 4 se activa al mover la rueda hacia adelante, y el 5 al moverla hacia atrás. Estas dos nuevas líneas serán las que nos permitan enrollar y desenrollar la ventana moviendo la rueda sobre la barra de título, de ahí el contexto 'T', de "title".
También hemos añadido unos comentarios. Quien conozca bash, verá que los comentarios en fvwm se hacen de la misma forma. Son líneas que empiezan por '#'. Dichas líneas son obviadas por fvwm al leer el archivo de configuración, y se usan para poner aclaraciones, anotaciones y similares. Y ahora, como siempre, guarda el archivo, reinicia fvwm y prueba a hacer click sobre el icono de la ventana iconificada. Debería volver a su estado normal, si no es así, repasa esta sección.
-.Afinando un poco más con funciones.-
Hay un pequeño "fallo", por llamarlo así, que siempre me molesta mucho de fvwm. A veces, cuando pulsamos el botón 2 para cerrar la ventana, nos arrepentimos justo en el instante. En otro wm, lo que haríamos sería mover el ratón fuera del botón sin soltarlo, y luego soltarlo fuera. Como la acción normalmente se activa al completar el click, si estamos fuera del botón 2 al soltar el botón izquierdo del ratón, la acción no se completa. Si probamos con un xterm o cualquier otra ventana con nuestra config actual, veremos que esto no se cumple. Fvwm ejecutará la tarea asignada sobre el botón que iniciemos el click, aunque finalicemos el click fuera del botón. Ésto se debe a la forma en que fvwm interpreta los eventos, y no hay gran cosa que se pueda hacer, de forma directa. Pero en fvwm siempre existe una solución, de una forma u otra, y en éste caso, la solución es tan simple como "encapsular" los comandos que queramos asignar a un determinado evento del ratón en una función. Para ésto, vamos a definir cuatro funciones, que serán las siguientes:
# Esta función se ejecuta al iniciar/reiniciar fvwm
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec fvwm-root --retain-pixmap ~/wallpapers/mywallpaper.png
# Acciones asociadas al ratón: botones barra de título
Mouse 1 2 N FvwmClose
Mouse 1 4 N FvwmMaximize
Mouse 1 6 N FvwmIconify
Mouse 4 T N WindowShade true
Mouse 5 T N WindowShade false
# Acción asociada al ratón: ventanas iconificadas
Mouse 1 I N FvwmIconHandle
# Funciones básicas
DestroyFunc FvwmClose
AddToFunc FvwmClose
+ C Close
DestroyFunc FvwmMaximize
AddToFunc FvwmMaximize
+ C Maximize
DestroyFunc FvwmIconify
AddToFunc FvwmIconify
+ C Iconify
DestroyFunc FvwmIconHandle
AddToFunc FvwmIconHandle
+ C Iconify off
+ M Move
Verás que las funciones son muy similares en su forma a StartFunction. La única diferencia mayor (aparte del nombre) es que en el cuerpo de la función añadimos los comandos usando "+ C", en lugar de "+ I". En la función FvwmIconHandler, incluso usamos un "+ M". Pues bien, estos especificadores que aparecen al principio de cada línea, nos dicen cuando se ha de ejecutar una acción. "I" significa "Inmediatly", inmediatamente. Es decir, en cuanto se llame a la función. Si usáramos I, el efecto asociado a cada botón se produciría al pulsar el botón del ratón, de forma inmediata, sin esperar a que lo soltemos. "C" es de "click", y es lo que hace que el efecto se produzca al soltar el botón del ratón, pero tan solo se produce si el botón del ratón está sobre el contexto en que se inició la acción. Por eso con "C" obtenemos el efecto escogido. En efecto, si pulsamos sobre uno de los botones de la barra de título ahora, y nos arrepentimos a tiempo, podemos retirarnos del contexto sin soltar el botón, y la acción será anulada. Por último, "M" procede de "Move", mover, y entra en acción cuando se mueve el puntero tras haber activado la acción. En la función FvwmIconHandler, tenemos dos acciones. Si hacemos click, se produce la des-iconificación, restaurando la aplicación. Mientras que si arrastramos el icono, se activa el comando Move (que nos permite mover la ventana, aunque esté iconificada) si el puntero se mueve tras hacer click. En otras palabras, ahora puedes arrastrar las ventanas minimizadas por tu escritorio.
Por supuesto, todas las líneas Mouse han sido modificadas para usar nuestras funciones, en lugar de los comandos originales de fvwm :)
-.Atajos de teclado.-
Fvwm acepta atajos de teclado. En su forma son muy parecidos a los que se asocian al ratón:
Key Tecla Contexto Modificadores Acción
Y mejor lo vemos con ejemplos:
# Atajos de teclado de fvwm
Key F1 A M Menu MenuFvwmRoot
Key F4 W M Close
Key Z A CM Restart
Key M W 4 Maximize
Key I W 4 Iconify
# Atajos de teclado para aplicaciones
Key T A M Exec urxvtc
Key B A M Exec firefox
Aquí tenemos atajos para activar acciones de fvwm, y al final un par de atajos de teclado para lanzar urxvtc y firefox. Los explicaré brevemente:
El primero de todos abre el menú MenuFvwmRoot (el predeterminado de fvwm) usando Alt+F1, el contexto es 'A' de "any", cualquiera. Ésto nos permite acceder a dicho menu pulsando Alt+F1 sin importar el contexto en el cual nos encontremos. La tecla modificadora es 'M', de "meta", que en el mundo PC es "Alt".
El segundo atajo es Alt+F4, para cerrar la ventana actual. El contexto es 'W', lo cual significa que solo funcionará sobre una ventana (Window). El modificador es 'M' de nuevo, "meta" o "Alt".
El tercero usa Z como tecla base, y Any como contexto. La novedad es que usa dos teclas modificadoras, 'C' y 'M', que significa "meta+control"/"alt+control". La acción también es nueva: Restart. Este atajo de teclado reinicia fvwm pulsando control+alt+z, un atajo que usaremos mucho mientras estamos editando nuestra configuración, una forma rápida de recargarla.
Los atajos cuarto y quinto no tienen ya misterio alguno, excepto el modificador, que en este caso es '4', que se refiere a la tecla que existe en algunos teclados entre Control y Alt (usualmente llamada tecla Win). Si no dispones de dicha tecla, puedes cambiar el modificador por el que prefieras, tan solo he usado '4' a modo de ejemplo. Dichos atajos se pueden usar para maximizar/restaurar o iconificar una ventana.
Por último, los dos atajos de teclado para firefox y urxvtc, lanzan éstos programas al usar Alt+B y Alt+T respectivamente. Dejo éstos como ejemplos, a partir de éstos, puedes contruir los tuyos propios.
Al final de este capítulo, la configuración que llevamos es similar a ésta:
# Esta función se ejecuta al iniciar/reiniciar fvwm
DestroyFunc StartFunction
AddToFunc StartFunction
+ I Exec fvwm-root --retain-pixmap ~/wallpapers/mywallpaper.png
# Acciones asociadas al ratón: botones barra de título
Mouse 1 2 N FvwmClose
Mouse 1 4 N FvwmMaximize
Mouse 1 6 N FvwmIconify
Mouse 4 T N WindowShade true
Mouse 5 T N WindowShade false
# Acción asociada al ratón: ventanas iconificadas
Mouse 1 I N FvwmIconHandle
# Funciones básicas
DestroyFunc FvwmClose
AddToFunc FvwmClose
+ C Close
DestroyFunc FvwmMaximize
AddToFunc FvwmMaximize
+ C Maximize
DestroyFunc FvwmIconify
AddToFunc FvwmIconify
+ C Iconify
DestroyFunc FvwmIconHandle
AddToFunc FvwmIconHandle
+ C Iconify off
+ M Move
# Atajos de teclado de fvwm
Key F1 A M Menu MenuFvwmRoot
Key F4 W M Close
Key Z A CM Restart
Key M W 4 Maximize
Key I W 4 Iconify
# Atajos de teclado para aplicaciones
Key T A M Exec urxvtc
Key B A M Exec firefox
Puede que algunos ya lo hayais intuído: fvwm trae una serie de atajos y configuraciones por defecto. Por ejemplo, fvwm no trae ni la configuración necesaria para mover un icono, pero si para mover una ventana (Mouse 1 T A Move), o para cambiar de ventana (el típico Alt+TAB). Por supuesto, el menú básico también forma parte de esta configuración predeterminada. Todo esto se puede cambiar, simplemente redefiniéndolo en nuestra configuración. Ya hablaré más adelante sobre el tema.