• CLFSWM

Versión analizada

Código fuente descargado del repositorio Git . Los cambios más recientes datan del 12 de noviembre de 2016.

Página oficial

https://common-lisp.net/project/clfswm/
https://github.com/LdBeth/CLFSWM (desarrollo más reciente)

Estado actual

¿Abandonado, en proceso de estarlo? Cuando escribo esto han transcurrido ya tres años desde que el autor tocó el código por última vez. Existe una réplica en Github más actual, con cambios que datan de mayo de 2019. De todas formas CLFSWM venía languideciendo con un mantenimiento muy ocasional desde 2013.

No se halla ni de lejos entre los gestores de ventanas más conocidos, pero sí cuenta con un número reducido de usuarios. Debería conservarlos durante bastante tiempo porque se trata de un proyecto peculiar y con mucha personalidad.

Características resumidas

Esc. Virtuales Menús Iconos Temas Dockapps At. de teclado Barra de tareas
Parcial 1 No No No No

1 No existen escritorios virtuales propiamente dichos, mas CLFSWM imita su funcionalidad mediante los llamados «marcos».

Descripción


Captura de CLFSWM

Lo primero que vi de CLFSWM. Sólo hay una ventana activa, una terminal, incluida en su propio marco. Abajo, a la derecha, el gestor me ofrece ayuda; y desde luego la voy a necesitar.


CLFSWM es el Common Lisp FullScreen Window Manager, un trabajo que corrió a cargo de Philippe Brochard y media docena de colaboradores ocasionales. El archivo README asegura que está basado en Stumpwm y TinyWM. Y que mencionen esta última influencia resulta un tanto curioso, porque TinyWM es el gestor de ventanas más básico que existe, cincuenta humildes líneas de código C, mientras que CLFSWM se extiende a lo largo de cincuenta mil líneas escritas en Lisp . Se trata de proyectos que por su envergadura y enfoque no tienen nada en común. CLFSWM está basado en TinyWM del mismo modo en que una locomotora está basada en una carretilla —¡eh, ambos tienen ruedas, y ejes, y se desplazan por tierra!—.

Un árbol de marcos y ventanas

El autor explica lo siguiente en la página oficial :

«Una pantalla contiene un marco raíz y sus hijos. Un hijo puede ser una ventana u otro marco. El marco raíz o sus hijos pueden convertirse en la raíz actual. La raíz actual [se muestra] maximizada a pantalla completa (sin decoraciones, sin botones, sin menús: nada, ¡sólo la aplicación a pantalla completa!).

»CLFSWM es muy dinámico. En principio sólo existe un marco (el marco raíz). Otros marcos serán creados/eliminados sobre la marcha. Una ventana puede estar en más de un marco, así que puede haber vistas múltiples de las mismas ventanas.

»Usar CLFSWM es como caminar a través de un árbol de marcos y ventanas. Entra en un hijo para convertirlo en la raíz actual y mostrarlo a pantalla completa. Abandónalo para que la raíz actual sea su padre».

¿Entendéis algo? Yo, después de tres semanas usando este gestor de ventanas, sí, más o menos; pero la primera vez que leí el texto sólo pude sonreír de perplejidad. Estos párrafos parecen un experimento de escritura surrealista, y en el inglés original tampoco mejoran mucho. Así que voy a intentar una descripción de mi cosecha.

En efecto, en CLFSWM manejamos dos tipos de objetos: marcosframes— y ventanas. Las ventanas obviamente no necesitan presentación; los marcos, en cambio, suponen un concepto un poco más misterioso. Podrían considerarse equivalentes a escritorios virtuales, en concreto espacios de trabajo independientes... Con la salvedad de que un marco, además de ventanas, puede alojar a su vez a otros marcos con más ventanas; y así sucesivamente, en un ciclo recursivo en teoría sin fin. Se trata de una idea muy similar a los escritorios anidados —vamos, ventanas flotantes cuya misión era contener otras ventanas— de Treewm, y de hecho me sorprende un poco que el autor de CLFSWM no mencione a este proyecto entre sus influencias.

Esto significa que aquí las ventanas se organizan de forma jerárquica, por niveles. Uno podría encontrarse, por ejemplo, con una sesión de trabajo como ésta:

 Marco raíz:
 ├── Marco 1:
 │   │   Xterm.
 │   │   Xterm.
 │   │   Editor de textos.
 │   └── Marco 4:
 │           Reloj.
 │           Diagnóstico del sistema.
 ├── Marco 2:
 │       Navegador.
 └── Marco 3:
         Hoja de cálculo.
         Manual de ayuda sobre la hoja de cálculo.

Brochard habla de caminar a través de un árbol porque unos marcos serían ramificaciones de otros, y el usuario va saltando de marco en marco para acceder a sus respectivas ventanas. Resulta posible «avanzar», llevar la vista a un nivel «inferior» —en el ejemplo, pongamos pasar del marco raíz a la siguiente división, y mostrar así los marcos 1, 2 y 3 a pantalla completa—, o bien retroceder escalones hacia el marco raíz.


Captura de CLFSWM

A esto se llama «Expose», y permite comprobar de una ojeada cómo está distribuida la sesión —qué marcos hay abiertos y qué ventanas pertenecen a cada uno—, y saltar rápidamente al objeto deseado.


Dentro de un marco las ventanas pueden aparecer maximizadas —y si hay varias, uno va alternando de una a otra—, o bien dispuestas en varios tipos de mosaicos. Ahora, con los marcos mismos es diferente: los situados a nuestro nivel se amplían hasta ocupar toda el área del monitor, mientras que los que se hallen en ramificaciones inferiores y sean visibles pueden representarse como ventanas flotantes de dimensiones arbitrarias, o incluidos en el mosaico de su marco «padre».

Sí, lo sé, todo esto suena complicado.

Otros detalles de interés

Como ya he dicho, CLFSWM está escrito en Lisp, un lenguaje interpretado . Y eso en principio facilitaría la labor de aquellos usuarios inquietos que deseen modificarlo, añadirle características nuevas o hacer con él experimentos ingeniosos. Exacto, se trata de otro de esos gestores extensibles mediante algún lenguaje de programación, al estilo de Stumpwm, Awesome o Sawfish. Incluso incorpora una línea de comandos que hace accesibles sus funciones internas, y permite darle órdenes directas durante la sesión.

La configuración viene especificada en el archivo ~/.config/clfswm/clfswmrc. Se trata, claro, de otro bloque de código Lisp.

La decoración que dibuja CLFSWM para las ventanas es mínima: un borde para cada una de ancho variable —por defecto, un píxel—, al que se suma otro borde para el marco al que pertenecen. Y ya, nada más.

Pero ese minimalismo resulta muy engañoso, porque hablamos de un gestor de gran sofisticación. Cuenta con un sistema de menús muy completo que cubre casi cualquier necesidad que se le pueda presentar al usuario: hay un menú de ayuda, otro de aplicaciones, otro de operaciones con marcos y ventanas, y otro más de configuración —un submenú del anterior, en realidad—.

Y me quedaría comentar que en el subdirectorio contrib del código fuente se adjuntan módulos opcionales con cometidos diversos: un panel (toolbar.lisp) que puede contener indicadores sobre el estado del sistema, un menú dedicado a controlar el reproductor de música XMMS , otro para controlar la unidad de CD-ROM... Este tipo de cosas, funcionalidad extra que en teoría va un poco más allá de lo que suele hacer un gestor de ventanas.

Instalación


Captura de CLFSWM

¿Qué muestra la imagen? Una estética con colores diferentes —los bordes de marcos y ventanas son más gruesos, y de tonos azulados—, y en el extremo superior el lanzador de aplicaciones que incluye CLFSWM, mezcla de buscador y línea de comandos.


Usuarios de Debian, Ubuntu y derivados: existen paquetes de CLFSWM en los repositorios correspondientes. Creo que son la opción ideal, porque aunque puedan estar un poco anticuados el gestor no ha cambiado apenas en los últimos años.

Sin embargo, el resto del mundo...

Para disfrutar de CLFSWM hace falta instalar alguna implementación de Lisp en el sistema. Debería servir cualquiera —ECL, Clozure, etc—. Sí, debería... Yo probé en un primer momento con SBCL, que me dio muy buenos resultados con Stumpwm; y fracasé, sólo conseguí una copia disfuncional del gestor que se interrumpía al realizar cualquier operación. Luego, en el archivo README, vi que el autor menciona también CLISP .

Y puedo asegurar que esa alternativa funciona. En mi caso, la combinación ganadora fue el código de CLFSWM descargado de su repositorio en Gitlab y CLISP 2.49.

Primeras impresiones

Reconozco que contemplaba a CLFSWM con respeto, porque... Lisp. Aunque estos artículos quizás sugieran lo contrario, yo no paso de ser un simple aficionado. Puedo llegar a entender muy superficialmente C, pero un fichero de código Lisp me parece igual de inaccesible que un texto escrito en armenio. Y para configurar el gestor esperaba, con cierta aprensión, tener que pasar ese mal trago de escribir Lisp.

Bien, arranco por fin... Mis sesiones siempre comienzan con una terminal abierta, lo encuentro imprescindible. En este caso dicha terminal abarcaba un gran recuadro en el centro de la pantalla. Porque CLFSWM, si no se especifica otra cosa, otorga a cada nuevo marco el 80% aproximadamente del área ocupada en la pantalla por su marco padre.

¿Qué hacer a partir de aquí? Cargo una segunda terminal, que oculta por completo a la primera. Eh, ¿por qué?

Pulse [Alt] + [F1] para ayuda, me sugiere una ventanita diminuta en la esquina inferior derecha de la pantalla. ¡Oye, CLFSWM es hospitalario! O lo intenta... En efecto, presionar ambas teclas despliega el menú de ayuda, y en él resulta posible consultar los atajos de teclado para trabajar con ventanas. Esto resulta fundamental para desenvolverse durante las primeras sesiones con el gestor, aunque no voy a engañar a nadie: al principio también intimida y desmoraliza. El menú informa, por un lado, de los comandos de teclado de primeros auxilios —los más imprescindibles, así mal contados unos quince—, y por otro ofrece una lista exhaustiva con todos ellos. Y esa lista no deja lugar a dudas sobre la complejidad de CLFSWM, porque consta de más —¡bastantes más!— de cien entradas; es en cierta forma una visión impresionante, temible. Y yo me recuerdo recorriéndola con incredulidad, mi cerebro gritando algo como «¿queeeeé?».

El caso es que gracias a la ayuda aprendo a alternar entre mis dos terminales —[Alt] y [Tab], mas sólo porque pertenecen al mismo marco—, a ejecutar otros programas gracias a un lanzador similar a Dmenu que incorpora el gestor —[Ctrl] y [<], seguido de [!]—, y alguna otra función muy básica. Siento, de todos modos, que apenas estoy rascando la superficie.

Ojear la escasa documentación que viene con el código fuente no me sirve de mucho. Expresé mi frustración en mis notas:

«Eh, esto parece complicado. El archivo README trata de explicarlo y dice cosas confusas sobre "ventanas", "marcos" e "hijos que contienen hijos". Ufff... Me va a costar aprender a manejar CLFSWM».

Y apagué el ordenador para irme a dormir. Suficiente desorientación por el momento, vaya.

Usando CLFSWM

Nótese que tanto Brochard como yo hemos recurrido a metáforas de movimiento en nuestras descripciones: «caminar», «avanzar», «retroceder»... A la hora de manejar los marcos CLFSWM se siente realmente así, crea en el usuario la curiosa ilusión de estar explorando un lugar abstracto. Porque qué ventanas y marcos aparecen en pantalla depende de nuestra posición actual —sí, otro concepto relacionado con el espacio físico— en el árbol jerárquico que los organiza. Este desplazamiento imaginario resulta más convincente al tratar con marcos anidados: uno cuando los elige como nuevo punto de referencia se siente «entrando» en ellos —puesto que se amplían a pantalla completa—, y viceversa.


Captura de CLFSWM

Dentro de cada marco las ventanas pueden organizarse de diferentes maneras. En éste, visible ahora a pantalla completa, se hallan ordenadas en un mosaico; la que posee el foco aparece destacada con un borde amarillo.


Brochard lo resumió así: Ya no existe la necesidad de un paginador. ¡Tú estás en el paginador!.

Dominar CLFSWM es difícil. Lo es, de verdad. Hay gestores de ventanas a los que uno se acostumbra el primer día, mientras que otros quizás requieran varios; con este he convivido tres semanas y no dejo de encontrarme un tanto torpe. Manejar aquí marcos y ventanas sigue pareciéndome un poco como maniobrar con un remolque. Y eso que ahora creo que comprendo CLFSWM casi en su totalidad.

El ratón tiene un discreto papel: cambiar las dimensiones de los marcos que no se hallen ampliados, moverlos por el escritorio o seleccionar ventanas. Y poco más. El protagonista es el teclado. Uno se encuentra recurriendo a él para casi todo, sin tregua, castigando las teclas cual pianista; muchas operaciones sólo resultan accesibles con secuencias de varias pulsaciones. Por ejemplo, ¿mover la ventana del navegador del marco 2 al número 1? Pues la seleccionamos en el marco antiguo, pulsamos [Ctrl] + [<], y [Ctrl] + X para «cortar» esa selección, nos dirigimos al marco de destino —quizás con la suma [Ctrl] e [Izquierda] o [Derecha]—, y en él la «pegamos» presionando [Ctrl] y V. No resulta precisamente cómodo; en Dwm una operación análoga —mandar una ventana a otro escritorio virtual— se resuelve con un único atajo de teclado.

Estas combinaciones de teclas se reparten en dos conjuntos diferentes. Las que corresponden a las funciones más básicas —mover el foco de una ventana a otra, alternar entre marcos, etc— se incluyen en el «modo principal» —en inglés, main mode—. Mientras que para otras acciones más elaboradas o infrecuentes —matar una aplicación, ejecutar otra desde la línea de comandos de CLFSWM— hay que pasar al «segundo modo» o «modo de edición» —second mode—; esto se realiza pulsando [Alt] y [<], y hace accesible otro lote grande de atajos de teclado.

El concepto peculiar en que se basa CLFSWM hace difícil catalogarlo como gestor de pila o de mosaico. Podría emplearse como un rudimentario gestor de pila si limitamos cada marco a una ventana y los tratamos como objetos flotantes; sería de todas formas una solución muy forzada. Como gestor de mosaico quizás pueda operar de un modo un poco más natural. Se amplían uno o varios marcos situados a un mismo nivel, se abren en ellos las ventanas necesarias, y se activa su distribución en mosaicos... Existen varios esquemas predefinidos para ellos: división vertical, división horizontal, celdas del mismo tamaño, etc. No obstante tampoco me termina de convencer trabajar así, porque CLFSWM no da las mismas facilidades ni está tan refinado para ello como Dwm, Awesome o Ratpoison —vamos, gestores de mosaico propiamente dichos—.

Así que lo mejor es olvidar un poco otros gestores de ventanas y acercarse a CLFSWM sin ideas preconcebidas. Sigue su propia dinámica y hay que intentar fluir con ella. Teniendo en cuenta, además, que al principio no resulta muy comprensible y exige paciencia y horas de aprendizaje.

Una característica muy importante del gestor es el llamado «Expose», obviamente inspirado por el «Exposé» de Mac OS X: algo así como un mapa de la sesión de trabajo. Pulsando [Ctrl] y [F10] aparecen ordenados en pantalla todos los marcos y ventanas activas, de modo que basta un vistazo para comprobar su distribución y orden jerárquico. Y además es posible seleccionar cualquiera de estos elementos para enfocarlo y verlo a pantalla completa. Me encontré apoyándome con frecuencia en esto.


Captura de CLFSWM

A la izquierda, ocupando más de la mitad de la pantalla, un diálogo de ayuda con parte de la lista gigante de atajos de teclado que incluye CLFSWM. Obviamente no resulta necesario memorizarlos todos...


Ah, y los menús... Éste es otro de los puntos destacables de CLFSWM. El menú principal puede invocarse accediendo al modo de edición —[Ctrl] + [<]— y pulsando a continuación la tecla M. Contiene muchos submenús con cometidos diversos: ejecutar programas instalados en el sistema, mostrar ayuda e información variada, cerrar o reiniciar el gestor, y realizar un sinfín de acciones con marcos y ventanas. Sí, casi toda la funcionalidad del gestor resulta accesible desde ellos. Uno puede encontrar, de hecho, opciones tan exóticas y abstrusas como absorbe todos los sub-hijos del marco en el marco (explotar marco al revés) —creo al menos que puede traducirse así, ni siquiera estoy muy seguro—; y esto por ejemplo sirve para llevar al marco actual todas las ventanas pertenecientes a otros marcos que desciendan de él, algo que yo no he tenido necesidad de hacer nunca. Bucear por ese sistema de menús, grande e intrincado, me recuerda bastante a buscar opciones concretas en los diálogos de configuración de Windows: es fácil extraviarse, y frustrarse.

Y hablando de configuración, ¡el proceso es más simple de lo que me temía! Sí, porque el gestor cuenta con una serie de menús dedicados a ello, de modo que sólo hay que explorarlos, introducir nuevos valores a los parámetros deseados y guardar los cambios. Los usuarios que no deseen cambios sustanciales en el funcionamiento de CLFSWM quizás ni siquiera tengan que escribir una línea de código Lisp. Yo sólo lo hice para añadir un par de atajos de teclado.

A los módulos no les he sacado mucho partido. Experimenté un poco con el panel: podría ser moderadamente útil, mas para un novato como yo cuesta de configurar, y encontré que algunos accesorios —el indicador de actividad de la CPU, por ejemplo— daban datos erróneos en mi sistema. Ya puestos me hubiera gustado mostrar en él el nombre de la ventana activa, pero desconozco qué magia invocar para hacerlo... Seguramente herramientas de terceras partes resultarán de más utilidad. Y entre los demás módulos no descubrí nada que me interesara: no necesito manejar reproductores de música como XMMS o MPD mediante los menús del gestor, gracias.

En resumen... Creas marcos. Colocas en ellos ventanas. Y estas ventanas pueden mostrarse maximizadas en esos marcos, o repartirse el espacio disponible entre ellas formando mosaicos. Creas más marcos. Creas marcos dentro de otros marcos, si eso te complace. Y vas desplazando la vista de marco en marco. Necesitarás seguramente varios días para dominar todo esto.

Opciones de personalización

¡Muchas! Desde los menús de configuración es posible cambiar la estética de la interfaz —bordes de ventanas, marcos y diálogos, colores y fuente del texto, etc—, algunos parámetros que regulan la distribución de los mosaicos, el modelo de enfoque... Esto es relativamente sencillo porque no hay que escribir Lisp, sólo asignar a valores a las diferentes opciones. Supone todo un acierto.

Sin embargo, con los conocimientos necesarios de Lisp y la arquitectura interna de CLFSWM sería posible casi cualquier cosa. Añadir nuevos atajos de teclado resulta fácil y rápido, por ejemplo. ¿Hacer que ciertos programas se abran en marcos específicos, con una geometría propia? ¿Nuevos algoritmos para componer mosaicos? ¿Un reloj con alarma? Seguro que sí, con tiempo y estudio todo esto y más.

Documentación

Éste es uno de los puntos flacos de CLFSWM: un proyecto de su envergadura y complejidad necesitaría como mínimo un buen manual de uso. No hay tal cosa. En el subdirectorio doc del código fuente se incluyen una pequeña página de manual que explica cómo iniciar el gestor, y listas de los atajos de teclado y funciones del ratón. El fichero README, por otro lado, da unas instrucciones muy elementales.

Eso es insuficiente. Puede completarse un poco con la información que proporciona el propio CLFSWM desde sus menús de ayuda —[Alt] + [F1]—. Tal vez sea posible desenvolverse así, experimentando y sin prisas.

En la página oficial hay disponibles varios tutoriales en vídeo, pero no me convencen: probablemente el manejo del gestor y sus conceptos básicos quedarían mejor explicados en un texto detallado. Existe también una wiki , de la que cabe sacar datos útiles pese a resultar más bien escuálida.

Aciertos

Inconvenientes


Captura de CLFSWM

Tres marcos diferentes situados al mismo nivel. Se comportan como ventanas flotantes, resulta posible escoger su lugar en el escritorio y sus dimensiones. Sin embargo, cuando «entremos» en uno de ellos se ampliará a pantalla completa. Dentro de estos marcos, las ventanas pueden mostrarse maximizadas —como en la imagen— o componiendo mosaicos.


Conclusión

Realmente un proyecto que no encaja en ningún molde: parte de un concepto atípico —ventanas distribuidas en marcos ordenados de forma jerárquica, como escritorios anidados—, y está escrito en un lenguaje también atípico —Common Lisp—. CLFSWM es extraño, y también difícil: por ello no cuenta con demasiados adeptos. Porque no, no va a gustar a todo el mundo... Ahora, aquellos amantes de los retos que consigan acostumbrarse a él descubrirán un gestor de ventanas muy elaborado y maduro.

¿Yo? Partes de él me gustan, he aprendido a desenvolverme con algo de soltura, pero a grandes rasgos CLFSWM me parece tan práctico como un martillo de dos cabezas. Aunque, sí, funcione.

Galería de imágenes

Más capturas del gestor en acción, porque aún quedan cosas que enseñar:

Captura de CLFSWM

Dos marcos, uno junto al otro. Existe también la opción de ocultar marcos, y pueden recuperarse desde el menú que aparece en la esquina superior izquierda. Abajo, Conky muestra información sobre el sistema.

Captura de CLFSWM

Como ya he dicho antes, dentro de un marco es posible disponer las ventanas en mosaico. CLFSWM incluye un tipo de mosaico pensado a propósito para GIMP. Relativamente cómodo.

Captura de CLFSWM

Entre los accesorios opcionales que vienen con CLFSWM —módulos— se encuentra el panel que aparece aquí. Aunque... No es muy útil, en realidad. Ya de paso diré que está activado el «modo de edición», y de ahí ese menú con opciones misteriosas referidas a los marcos.

Captura de CLFSWM

Marcos anidados. Mi «punto de partida» se encuentra en el que se muestra a pantalla completa —el texto que estoy escribiendo en Vim—, y los demás se hallan sucesivamente uno dentro de otro, como un juego de matrioskas. Sólo una demostración, en la práctica esto no sirve de mucho.

Captura de CLFSWM

Ese cuadro de diálogo que muestra información meteorológica —arriba, a la izquierda— fue un invento mío. Sí, CLFSWM deja mucho espacio para experimentos. En la esquina opuesta, un desfile militar soviético y una terminal con las características de mi ordenador antediluviano.

Captura de CLFSWM

Es posible hacer que el gestor esconda las ventanas y muestre únicamente los marcos desnudos. Otra combinación de teclas nos devuelve al modo de trabajo normal.

Captura de CLFSWM

Un acierto importante del autor fue incluir diálogos de ayuda. Es cierto que van dirigidos a aclarar detalles a los usuarios avanzados, pero aun así tienen su valor.

Captura de CLFSWM

De nuevo el modo el modo «Expose», todos los marcos y sus respectivas ventanas visibles y ordenados. Además, ¡aquí está activada la composición de escritorio! Por eso las etiquetas se ven translúcidas... (La captura no es mía, procede de la página oficial ).

 

Artículo escrito el 15 de febrero de 2020.


[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.