• Mdtwm

Versión analizada

Código fuente descargado de su repositorio en marzo de 2018, cuyos cambios más recientes datan de septiembre de 2017.

Página oficial

https://github.com/ziutek/mdtwm

Estado actual

En el momento en que escribo esto el autor ha hecho alguna modificación muy pequeña en fechas cercanas —agosto y septiembre de 2017—; sin embargo el trabajo relevante se detuvo en verano de 2013. De modo que, si bien el proyecto no se encuentra abandonado por completo, sí parece un tanto oxidado. Veo improbable que vaya a ganar funcionalidad nueva o evolucionar de alguna forma.

¿Usuarios? Bueno, el autor afirma utilizar Mdtwm como gestor de ventanas habitual. Aparte de él, probablemente ninguno.

Características resumidas

Esc. Virt. Menús Temas Flotantes Títulos B. de estado Manejo
No No No No 1 Híbrido

1 Mdtwm no incluye ninguna. Sí, en cambio, la funcionalidad necesaria para interactuar con Dzen , y sólo Dzen.

Descripción


Captura de Mdtwm

Mi primera sesión, dos ventanas ocupan una de las divisiones de la pantalla —aquí llamadas paneles—, mientras que las demás quedan libres y dejan ver el fondo del escritorio.


Escrito por un programador polaco, un tal Michał Derkacz (Ziutek) —gracias a él acabo de conocer ahora a la «L con barra» ; hola, encantado—. El nombre del gestor, Mdtwm, viene de las siglas de Mouse Driven Tiling Window Manager, que aclaran bastante su razón de ser. Ziutek lo describe así en la página oficial:

«Me gusta el manejo de ventanas en mosaico, pero todos los gestores de ventanas de mosaico que conozco obligan a emplear el teclado para docenas de cosas. Así que éste es mi intento de escribir uno de estos gestores, controlado mediante el ratón, en Go .

»Nunca he escrito antes un gestor de ventanas, así que este código seguramente no es un buen ejemplo de cómo escribirlo, pero quizás [sirva] de ejemplo de cómo escribir gestores de ventanas en Go».

De aquí deducimos que se trata de un proyecto experimental, concebido más para el aprendizaje del autor que para un uso serio por parte del resto del mundo.

Bien, este tipo de gestores encajan las ventanas abiertas en una cuadrícula, de modo que se repartan todo el espacio de la pantalla sin solaparse; para ello suele ser necesario ir ajustando su tamaño de forma automática a medida que se cierran o se abren otras nuevas. Además, pensando un poco en esas aplicaciones que no se adaptan bien a ser confinadas en rectángulos de dimensiones arbitrarias, muchos gestores de mosaico permiten también manejar ventanas flotantes, si bien se trata de una funcionalidad limitada y más indicada para casos excepcionales.

Mdtwm posee rasgos de los gestores dinámicos, y como en aquellos las ventanas se organizan en mosaicos siguiendo unas pautas preestablecidas. Ahora bien, permite durante su configuración especificar con mucha libertad esas pautas, una tarea eminentemente manual. Y descarta además la distinción entre un «área principal» para mostrar ventanas a gran tamaño y una «zona de pila» en la que amontonar las demás, tan querida en todo gestor dinámico; en lugar de ello uno puede definir a su antojo divisiones y subdivisiones de la pantalla, y decidir a grandes rasgos cómo se repartirán las ventanas el espacio disponible en ellas. Incluso cabe la opción de utilizar mosaicos con reglas diferentes para cada escritorio virtual.

La otra particularidad importante la menciona el autor en el texto de presentación: el control de las ventanas se lleva a cabo mediante el ratón. Y esto resulta atípico, porque los gestores de mosaico tienden a valerse más del teclado.

¿Mencioné la configuración? Bueno... No existe ningún mecanismo para aplicar diferentes preferencias a una copia dada del gestor, al menos ninguno documentado. De modo que para efectuar ajustes uno debe modificar, en el código fuente, el fichero config.go, a continuación compilar un nuevo ejecutable de Mdtwm —léanse los párrafos siguientes—, y probablemente reiniciar la sesión.

Instalación

No es realmente complicada. Tiene como prerrequisito, claro, el compilador de Go y todo el material que lo acompaña, pero esto debería estar disponible en los repositorios de paquetes de cualquier distribución de Linux o variante moderna de Unix. Después basta con escribir en la terminal:

$ go get -v github.com/ziutek/mdtwm

Este comando descarga el código fuente de Mdtwm, lo compila, y luego deja el ejecutable correspondiente en un subdirectorio dentro de la ruta especificada en la variable de entorno $GO_PATH. Para entendernos, si en mi sistema dicha variable posee el valor de "/home/yo/programas/go", la copia compilada de Mdtwm se guardará en /home/yo/programas/go/bin. De ahí uno puede copiarla a un lugar más accesible, /usr/bin o /usr/local/bin.

Primeras impresiones


Captura de Mdtwm

El navegador Links a la derecha, resaltado con un borde azul por poseer el foco; y varias terminales amontonadas a la izquierda. El espacio inferior continúa vacío.


(Quería probar un gestor de mosaico, y había pensado en alguno de los relativamente populares que aún me quedan por descubrir; qué sé yo, Ratpoison o i3. En vez de eso me decanté en un impulso repentino por Mdtwm, que no conoce nadie).

Un tanto desconcertantes. Por alguna razón esperaba algo similar a Dwm o Xmonad, y resulta que Mdtwm no funciona igual.

Veamos, en mi sesión inaugural abro mi primera ventana, una terminal. En otros gestores dinámicos, como no hay nada más en marcha, esta aplicación reclamaría para ella toda el área del pantalla. Sin embargo compruebo con curiosidad que aquí queda relegada a una franja que abarca sólo el tercio izquierdo, y el resto del escritorio sigue vacío; puedo entretenerme pues contemplando ese fondo vagamente futurista que he elegido... Y llega una segunda ventana —Vim—, que pasa a instalarse en la mitad inferior de la columna ya ocupada por la terminal, mientras todo el espacio que queda a la derecha continúa libre. Eh, ¿qué ocurre?

Pues vaya, parece que los mosaicos no cubren necesariamente toda la pantalla. Tras unos minutos de pruebas empiezo a entender que ésta en realidad se divide en varias partes independientes, que las ventanas ocuparán sólo cuando yo lo decida... Interesante. E inesperado, porque el autor no explica nada de esto en el texto de presentación del proyecto. Oh, qué digo: no explica apenas nada, punto.

Efectivamente, el manejo de las ventanas se realiza mediante el ratón. Muy simple, se basa en tres operaciones básicas: mover una ventana, anclarla o liberarla del mosaico, y cerrarla. Todas requieren de la tecla [Windows] y del botón derecho del ratón, una combinación un tanto atípica. Practico un poco, hay algún momento de perplejidad cuando cierro por error una ventana —[Windows] y triple clic con el ratón—: no se trata de unos controles difíciles, pero al principio confunden porque el gestor no le brinda al usuario ninguna pista visual de lo que está haciendo.

Por lo demás se me antoja más bien árido y rudimentario: no es exactamente Ion o Awesome, vaya..

Usando Mdtwm


Captura de Mdtwm

Un vídeo en una celda del mosaico quizás no resulte muy cómodo: para remediar eso puede convertirse en una ventana flotante. En el borde superior, Dzen.


Tiende a dividirse a los gestores de mosaico en dos categorías, dinámicos y manuales; mas no se trata de una distinción tan nítida como parece cuando uno lee las respectivas definiciones... Digo esto porque, claro, Mdtwm viene a situarse en un punto intermedio. Sí, ya hemos visto que las ventanas se reparten el espacio del escritorio siguiendo unas reglas determinadas —en el archivo config.go, para ser exactos—, sin que se requiera demasiada intervención manual. Sin embargo tampoco hablamos de algo equiparable a Dwm, el funcionamiento de los mosaicos no resulta tan automático. Por ejemplo, en este caso el usuario sí decide dónde aparecerá cada ventana nueva: su lugar será la celda independiente de la pantalla —o panel, en palabras de Ziutek— que contenga en ese momento el puntero del ratón. Y como ya he comentado tampoco existen en Mdtwm un área principal y otra de pila claramente diferenciadas, sino estos «paneles», divisiones libres del espacio del monitor capaces de alojar un número arbitrario de ventanas. Oh, en la configuración por defecto el primer escritorio virtual reparte el mosaico por tres «paneles», y esto ya garantiza una experiencia ligeramente distinta a la que ofrecen muchos gestores dinámicos.

Sí es cierto que el manejo mediante el ratón hace a Mdtwm más fácil de aprender que otros gestores de mosaico: ya no hay que memorizar una decena de atajos de teclado antes de empezar a trabajar con cierta soltura... Con la tecla [Windows] y el botón derecho del ratón basta para —casi— cualquier operación. El único inconveniente que veo aquí es que con esto se pierde la agilidad y la inmediatez del teclado, pero en fin, en la vida no se puede tener todo.

Algunos programas no están concebidos para encajar a las bravas en la celda de un mosaico, y suponen por ello un problema para este tipo de gestores. Videojuegos, editores de imágenes o navegadores gráficos requieren a menudo ventanas de unas dimensiones concretas, o como mínimo resultan más cómodos en ellas: siempre cito como ejemplo a GIMP, y ya puestos podría mencionar también emuladores como QEMU o Basilisk... Mdtwm resulve esto del mismo modo que la mayoría de gestores de mosaico: incluye un mínimo de funcionalidad para el manejo de ventanas flotantes, y permite al usuario enumerar una serie de aplicaciones que serán tratadas siempre de tal forma. Véase esta línea de mi fichero config.go:

Float:  TextList{"MPlayer", "QEMU", "qemu", "xine", "gimp", "Gimp", "edge.linux", "ffplay", "prboom"},

El asunto es un poco más peliagudo de lo que podría pensarse al leer esto. Mdtwm distingue entre mayúsculas y minúsculas. Oh, y para reconocer qué ventanas deben abrirse libres, fuera del mosaico, compara las palabras de la lista con el valor de su propiedad WM_CLASS. Claro, WM_CLASS no resulta inmediatamente visible para el usuario, para conocerla hay que utilizar desde una terminal utilidades como xprop o xlsclients.

Por supuesto Mdtwm no es un gestor de pila y ofrece un control muy limitado sobre estas ventanas flotantes: uno puede moverlas por la pantalla —presionar [Windows] y arrastrar con el botón derecho del ratón— o alterar sus dimensiones —la misma operación, pero con el puntero situado en el borde de la ventana en cuestión: hace falta precisión—. Y eso viene a ser todo... Se trata pues de una característica pensada para un uso ocasional.

Muchos gestores de mosaico —Awesome, Larswm, etc— cuentan con una barra de estado que muestra algo de información general sobre la sesión: como mínimo fecha y hora, número de escritorios virtuales activos y el título de la ventana enfocada... Mdtwm, en cambio, no. Sólo incluye cierto soporte para Dzen , un accesorio creado por terceras personas que, usado del modo que sugiere aquí Ziutek, se asemeja considerablemente al panel de Dwm; aunque sólo posee un valor informativo y no permite controlar ningún aspecto del gestor. Dzen es, por lo demás, muy versátil, uno de esos programas que bajo una simplicidad aparente esconden un sinfín de posibilidades para personas ingeniosas.


Captura de Mdtwm

Dzen da un poco de información general —fecha y hora, ventana y escritorio virtual seleccionados—, pero no sirve para el manejo de la sesión.


No obstante, Mdtwm parece implementar el estándar EWMH, los llamados Extended Window Manager Hints , y eso garantiza una buena interoperabilidad con las aplicaciones del usuario. Por ejemplo, las ventanas temporales —diálogos de confirmación, cuadros de seleccionar ficheros y similares— son reconocidas correctamente y se manejarán como flotantes sobre todas las demás. Y pueden utilizarse además paneles como Xmobar , que también se comportarán del modo esperado: quedarán siempre visibles en su lugar de la pantalla y la geometría del mosaico cambiará para reservarles el espacio requerido. Eh, bueno..., este último detalle falla ocasionalmente por motivos que desconozco, y entonces uno obtiene mosaicos con huecos en los bordes superior o inferior.

Se me olvidaba: con [Windows] + [Return] se invoca una nueva terminal. Me vale, pero tampoco puedo vivir sin otro atajo de teclado reservado para Dmenu. Porque Dmenu permite ejecutar cualquier otra aplicación del sistema de un modo rápido que apenas interfiere con el ritmo de trabajo. Dmenu mola, Dmenu es genial.

«Este programa no es todavía un gestor de ventanas maduro, pero he empezado a usarlo para mi trabajo diario (ha sustituido a Xmonad)».

Sí, ya para terminar diré que en mis aventuras con Mdtwm encontré algunos obstáculos que lo harían poco aconsejable para el público general. El más importante, la falta de documentación. El autor escribió sólo un texto que explica concisamente los aspectos más básicos, con algunas omisiones. Sin embargo, ¿y si quiere alguien cambiar su configuración? Un poco más complicado. ¿Y establecer pautas diferentes para componer los mosaicos? Pues esto ya resulta un tanto oscuro, y para comprender sus sutilezas tuve que revisar un poco el código fuente de Mdtwm, concretamente el fichero panel.go. No se trata de una solución para todo el mundo.

De hecho, leyendo el código fuente también averigüé que Ziutek contemplaba que el gestor al iniciarse pudiera leer su configuración desde archivos externos, escritos en formato JSON . Cosa que naturalmente resultaría mucho más práctica que compilar de nuevo Mdtwm tras cada ajuste... Hay programada cierta funcionalidad en este sentido, mas parece incompleta y mis pruebas fueron negativas. El autor ni siquiera menciona esta característica en el texto de presentación, de modo que seguramente no la consideraba usable.

Opciones de personalización

No muchas, pero más de las que esperaba: atajos de teclado, el color y grosor del borde con que Mdtwm decora cada ventana, cuáles flotarán libres sobre los mosaicos...

Ah, los mosaicos: una posibilidad interesante es poder alterar su geometría básica. ¿Disponer ventanas en tres columnas? ¿Simular el modo de operar de Dwm? Hay mucha flexibilidad, vaya. Sólo que el modo de plasmar esto en código Go, en el fichero config.go, resulta un tanto confuso puesto que no hay una explicación clara de la sintaxis de la función NewPanel.

Ah, recompilar Mdtwm tras hacer cambios consiste en escribir, desde una terminal:

go build -v github.com/ziutek/mdtwm

Documentación


Captura de Mdtwm

En el borde inferior aparece Dmenu , configurado para lucir el mismo aspecto que Dzen arriba. El espacio vacío de abajo se debe a un error ocasional de Mdtwm al calcular las dimensiones del mosaico cuando se invocan paneles o similares.


El fichero README.md explica solamente lo más imprescindible. Llamarlo «documentación» se me antoja exagerar, es más bien una especie de presentación y resumen de uso.

Aciertos

Inconvenientes

Los esperables de un software aún poco pulido:


Captura de Mdtwm

Un mosaico concurrido... Aunque Htop en una ventana tan reducida no resulta muy útil.


Más en general:

Conclusión

Empecé a usarlo con muy, muy pocas expectativas, mas Mdtwm no resulta tan incómodo como me temía. De hecho creo que me he acostumbrado a él: ahora, con una configuración ya establecida, no me entusiasma pero se me antoja vagamente agradable. Oh, sigue tratándose de software experimental, con aspectos mejorables y alguna característica aún por implementar. Y por lo que veo así se va a quedar.

Puede atraer a personas interesadas en la programación en Go y en los entresijos del X Window System y las interfaces gráficas en Unix... No, siendo realista no se me ocurre otro público potencial: la gente que desee probar gestores de mosaico para un uso práctico tiene a su alcance opciones mejores y más populares.

 

Artículo escrito el 24 de marzo de 2018.


[Apta para cualquier navegador]  [Cumple con el estándar HTML]  [Cumple con el estándar CSS]

Podéis copiar libremente cualquier contenido de esta página.
Mandad opiniones, sugerencias o saludos a sovietskayarodina@gmail.com.