{"id":70,"date":"2009-11-30T21:56:14","date_gmt":"2009-11-30T19:56:14","guid":{"rendered":"http:\/\/www.blackhats.es\/wordpress\/?p=70"},"modified":"2022-08-20T18:26:02","modified_gmt":"2022-08-20T16:26:02","slug":"stumpwm","status":"publish","type":"post","link":"https:\/\/www.blackhats.es\/wordpress\/?p=70","title":{"rendered":"Stumpwm"},"content":{"rendered":"<p style=\"text-align: justify;\"><strong>Stumpwm<\/strong> es un window manager minimalista, probablemente el mas minimalista de todos debido a que intenta ser lo mas configurable posible (incluyendo en tiempo real) manteniendo una apariencia visual minima. En <strong>Stumpwm<\/strong> no existen decoraciones de ventanas, tampoco iconos ni botones, y ningun fondo por defecto o degradado, simplemente la misma percepcion que se tiene de las X lanzadas &#8216;a pelo&#8217;. Simplemente se configura de forma personal mediante <strong>hooks<\/strong> y modificando algunos<strong> valores de variables<\/strong>.<\/p>\n<p style=\"text-align: justify;\">Por cierto <strong>Stumpwm<\/strong> esta intimamente relacionado con <strong>emacs<\/strong>; primero porque esta integramente escrito en <strong>lisp<\/strong> y es configurable en tiempo real, evaluando las expresiones de algo que esta ejecutandose en dicho momento y modificando por tanto su codigo y datos. Y segunda porque tiene ciertos keybindings asociados directamente y por defecto a nuestro entorno favorito, <strong>emacs<\/strong>.<\/p>\n<p style=\"text-align: justify;\"><strong>Stumpwm<\/strong> se puede interpretar de dos formas, o bien haciendo uso de <strong>clisp<\/strong> (Common Lisp) o <strong>sbcl<\/strong> (Steal Bank Common Lisp, dialecto de Lisp y variante de CL). Por defecto si usamos el <strong>apt<\/strong> de debian empleara <strong>clisp<\/strong>, aunque yo recomiendo encarecidamente usar <strong>sbcl<\/strong>, requerido por ejemplo para el uso de <strong>xinerama<\/strong> con pantalla extendida para doble monitor, como es mi caso (recordad que el uso de 2 pantallas aumenta la productividad de manera significativa, asi que esto es importante).<\/p>\n<p style=\"text-align: justify;\">Si habeis tenido el error de meter<strong> clisp<\/strong> mediante<strong> apt-get <\/strong>y ahora quereis meter <strong>sbcl<\/strong>, debemos limpiar ciertos directorios que <strong>apt-get install &#8211;remove &#8211;purge<\/strong> no habra realizado. Como por ejemplo eliminar el contenido del directorio <strong>\/var\/cache\/common-lisp-controller\/<\/strong>.<\/p>\n<p># <strong>rm -Rf \/var\/cache\/common-lisp-controler\/*<\/strong><\/p>\n<p style=\"text-align: justify;\">Ademas desde hace un par de semanas hasta ahora, existe un conflicto (no confundir con bug) desde que estan siendo retirados algunos <strong>scripts lisp<\/strong> en <strong>debian<\/strong>, y deberemos substituir el script<strong> asdf<\/strong> que se encuentre en el source de <strong>stumpwm<\/strong> (en caso de que instalemos stumpwm desde git). Asi que primero nos disponemos a bajar la ultima version de <strong>stumpwm<\/strong> en desarrollo:<\/p>\n<p>$ <strong>git clone git:\/\/git.savannah.nongnu.org\/stumpwm.git<\/strong><\/p>\n<p>Una vez hecho esto entramos en el directorio creado que por defecto es <strong>stumpwm<\/strong>:<\/p>\n<p>$<strong> cd stumpwm<\/strong><\/p>\n<p style=\"text-align: justify;\">Este es un paso adicional requerido solo en caso de que persista el conflicto de<strong> asdf.el<\/strong> que trae <strong>stumpwm<\/strong> (eso solo se puede saber intentando instalar el <strong>asdf original<\/strong> que trae stumpwm mediante <strong>sbcl<\/strong>, en caso de dar error de compilacion en los pasos siguientes), en ese caso substituimos el script<strong> asdf.el<\/strong> que incluye nuestro paquete <strong>stumpwm<\/strong> por el <strong>asdf<\/strong> de la version de desarrollo, para ello primero renombramos el original:<\/p>\n<p>$<strong> mv asdf.el asdf.el.old<\/strong><\/p>\n<p>Y luego realizamos descarga de <strong>asdf<\/strong> (Another System Definition Format) en su version en desarrollo:<\/p>\n<p>$ <strong>git clone http:\/\/common-lisp.net\/project\/asdf\/asdf.git<\/strong><\/p>\n<div style=\"text-align: justify;\">Una vez hecho esto necesitamos instalar <strong>asdf<\/strong>, asi como otros scripts en nuestro sistema <strong>sbcl<\/strong>, para ello primero entramos en <strong>sbcl <\/strong>(Hacedlo desde el directorio stumpwm para no tener que jugar con rutas):<\/div>\n<div>$ <strong>sbcl<\/strong><\/div>\n<div style=\"text-align: justify;\">Y luego realizamos la instalacion de<strong> asdf<\/strong>, <strong>clx<\/strong> y <strong>cl-ppcre <\/strong>(requeridos por <strong>stumpwm<\/strong>), notese que los \u00ab<strong>:\u00bb <\/strong>son parte del prompt de <strong>sbcl<\/strong>:<\/div>\n<div style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\">: (require :asdf)<\/span><\/div>\n<div style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\">: (require :asdf-install)<\/span><\/div>\n<div style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\">: (asdf-install:install :clx)<\/span><\/div>\n<div style=\"padding-left: 30px;\"><span style=\"color: #0000ff;\">: (asdf-install:install :cl-ppcre)<\/span><\/div>\n<p>Ahora ya podemos lanzar el configure para <strong>compilar<\/strong><\/p>\n<div><strong>stumpwm<\/strong> usando <strong>sbcl<\/strong>:<\/div>\n<p>$<strong> .\/configure &#8211;with-lisp=sbcl<\/strong><\/p>\n<p style=\"text-align: justify;\">Y Luego obviamente compilamos <strong>stumpwm (<\/strong>para ello se usara el compilador<strong> sbcl <\/strong>especificado anteriormente<strong>)<\/strong>:<\/p>\n<p>$<strong> make<\/strong><\/p>\n<p>Para finalmente instalarlo en nuestro sistema:<\/p>\n<div>$<strong> make install<\/strong><\/div>\n<p>En caso de haber tenido exito, ya podemos modificar nuestro <strong>.xinitrc<\/strong> y anadir una linea tal que asi:<\/p>\n<p>$ <strong>exec stumpwm &amp;<\/strong><\/p>\n<p style=\"text-align: justify;\">Si todo ha ido bien, ya podremos disfrutar de nuestro flamante <strong>stumpwm<\/strong>, del cual explicare los keystrokes fundamentales para poder moverse con un minimo de soltura (todos ellos vendran precedidos por el prefijo <strong>C-t<\/strong>):<\/p>\n<p style=\"padding-left: 30px;\"><strong>C-t ! <\/strong>Evalua una expresion<br \/>\n<strong> C-t e<\/strong> Lanza emacs<br \/>\n<strong> C-t ?<\/strong> Lanza la Ayuda<br \/>\n<strong> C-t :<\/strong> Muestra el prompt de Stumpwm<br \/>\n<strong> C-t ;<\/strong> Muestra el prompt de CL<br \/>\n<strong> C-t : quit<\/strong> Llama a la funcion quit de stumpwm<br \/>\n<strong> C-t ; (ext:quit)<\/strong> Evalua la funcion quit de clisp (dependiendo de como se haya compilado puede funcionar o no existir)<br \/>\n<strong> C-t ; (sb-ext:quit)<\/strong> Evalua la funcion quit de sbcl (dependiendo de como se haya compilado puede funcionar o no existir)<br \/>\n<strong> C-t TAB<\/strong> Mueve el foco al siguiente frame<br \/>\n<strong> C-t r<\/strong> <strong>&lt;arriba\/abajo\/izq\/der&gt;<\/strong> Redimensiona un frame acortado por arriba\/abajo\/izq\/der (requiere al menos 2 frames)<\/p>\n<p style=\"padding-left: 30px;\"><strong> C-t &lt;arriba\/abajo\/izq\/der&gt;<\/strong> Mueve el foco arriba\/abajo\/izq\/der.<br \/>\n<strong> C-t t<\/strong> Iguala dimensiones de los frames<br \/>\n<strong> C-t<\/strong> Desplaza el foco a un n-frame determinado<br \/>\n<strong> C-t q<\/strong> Libera frames muertos<br \/>\n<strong> C-t C-t<\/strong> Cambia a otro frame (switch)<br \/>\n<strong> C-t M-&lt;arriba\/abajo\/izq\/der&gt;<\/strong> Desplaza el frame a arriba\/abajo\/izq\/der<\/p>\n<p style=\"padding-left: 30px; text-align: justify;\"><strong> C-t s<\/strong> Divide la aplicacion de forma horizontal<br \/>\n<strong> C-t S<\/strong> Divide la aplicacion de forma vertical<br \/>\n<strong>C-t Q<\/strong> Hace que la aplicacion ocupe toda la pantalla (<strong>C-t r<\/strong> de resize solo permitira hasta cierto margen debido a que cada vez que se ejecuto <strong>C-t s<\/strong> o<strong> C-t S<\/strong> se creo un nuevo frame por eso es necesario usar <strong>C-t Q<\/strong>).<\/p>\n<p style=\"text-align: justify;\">Recordad que en <strong>emacs<\/strong> y <strong>e<\/strong><strong>lisp<\/strong>, un <strong>frame<\/strong> es lo que a lo en la actualidad nos referimos a <strong>ventana<\/strong>, y un a <strong>ventana<\/strong> es lo que en la actualidad nos referimos a <strong>frame<\/strong>, debido a razones historicas.<\/p>\n<p style=\"text-align: justify;\">Para un listado completo de todos los <strong>keybindings<\/strong> asi como el resto de componentes y como se manejan en <strong>stumpwm<\/strong> buscad en <a href=\"http:\/\/www.nongnu.org\/stumpwm\/manual\/stumpwm.html\" target=\"_blank\" rel=\"noopener\">el manual oficial de stumpwm<\/a>.<\/p>\n<p style=\"text-align: justify;\">Si quereis meter un fondo de pantalla al iniciar <strong>stump<\/strong>, podeis crear el fichero <strong>.stumpwmrc<\/strong> con el contenido:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">(set-bg-color \u00abblack\u00bb)<\/span><\/p>\n<p>O bien:<\/p>\n<p style=\"padding-left: 30px;\"><span style=\"color: #ff6600;\">(run-shell-command \u00abxsetbg ~\/fondos\/fichero.png\u00bb)<\/span><\/p>\n<p>Con Xinerama activado para los dos monitores, en mi caso este es el resultado:<\/p>\n<p>stumpwm al iniciar\u00a0(captura reducida, haced click para ampliar a 3360&#215;1050)<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/img522.imageshack.us\/img522\/6190\/32177800.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"http:\/\/img522.imageshack.us\/img522\/6190\/32177800.th.png\" border=\"0\" alt=\"Free Image Hosting at www.ImageShack.us\" \/><\/a><\/p>\n<p style=\"text-align: left;\">stumpwm mostrando la ayuda (captura reducida, haced click para ampliar a 3360&#215;1050)<\/p>\n<p style=\"text-align: left;\"><a href=\"http:\/\/img4.imageshack.us\/img4\/3817\/st2v.png\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" src=\"http:\/\/img4.imageshack.us\/img4\/3817\/st2v.th.png\" border=\"0\" alt=\"Free Image Hosting at www.ImageShack.us\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Tambien si quereis experimentar eso que decia de &#8216;programar y evaluar vuestro codigo en tiempo real&#8217; sin miedo de perder las X y por tanto vuestro trabajo, con dos monitores es posible, es decir en el <strong>primero<\/strong> lanzariais <strong>stumpwm<\/strong> y alli abririais vuestro <strong>emacs<\/strong>. Independientemente lanzais <strong>Xnest<\/strong> y un nuevo servidor en <strong>:1<\/strong> que muestre en una pantalla del servidor en <strong>:0,<\/strong> desde <strong>emacs<\/strong> lanzais <strong>stumpwm<\/strong> y lo conectais a <strong>:1<\/strong>, asi tendriais en una pantalla <strong>emacs<\/strong> y en la otra el <strong>windowmanager<\/strong>. Ahora aqui en emacs podeis ir modificando y evaluando codigo de <strong>stumpwm<\/strong> y viendo en tiempo real dichos cambios.<\/p>\n<p>Por acabar una demo de stumpwm (aunque algo antigua [2007] pero de las pocas que he encontrado):<\/p>\n<p style=\"text-align: center;\"><object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" width=\"425\" height=\"350\" codebase=\"http:\/\/download.macromedia.com\/pub\/shockwave\/cabs\/flash\/swflash.cab#version=6,0,40,0\"><param name=\"src\" value=\"http:\/\/www.youtube.com\/v\/tKt_rVO960Q\" \/><embed type=\"application\/x-shockwave-flash\" width=\"425\" height=\"350\" src=\"http:\/\/www.youtube.com\/v\/tKt_rVO960Q\"><\/embed><\/object><\/p>\n<p style=\"text-align: justify;\"><span style=\"color: #000000;\"><strong><span style=\"text-decoration: underline;\">Troubleshooting<\/span><\/strong><\/span><\/p>\n<p style=\"text-align: justify;\">Solucion de algunos problemas que me han surgido con stumpwm:<\/p>\n<p style=\"text-align: justify;\">En latex-mode y AucTeX combinandolo con stumpwm surge un conflicto entre keybindings, ya que <strong>C-t C-t<\/strong> en stumpwm hace toggle entre frames mientras que <strong>C-c C-t C-p<\/strong> en latex-mode con AucTeX sirve para invocar pdfLatex para especificar si la salida sera dvi o pdf. La forma de solucionarlo es empleando el comando de stumpwm <strong>C-t t<\/strong>, el cual generara un <strong>C-t<\/strong> que nos servira para poder usar el comando <strong>C-c C-t C-p<\/strong> en cualquier otro WM, pero que en este se realizara mediante <strong>C-c C-t t C-p<\/strong>.<\/p>\n<p style=\"text-align: center;\">\n","protected":false},"excerpt":{"rendered":"<p>Stumpwm es un window manager minimalista, probablemente el mas minimalista de todos debido a que intenta ser lo mas configurable posible (incluyendo en tiempo real) manteniendo una apariencia visual minima. En Stumpwm no existen decoraciones de ventanas, tampoco iconos ni botones, y ningun fondo por defecto o degradado, simplemente la misma percepcion que se tiene [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[139,8,70,136,137,138,141,140],"class_list":["post-70","post","type-post","status-publish","format-standard","hentry","category-basic","tag-clisp","tag-emacs","tag-sbcl","tag-stump","tag-stumpwm","tag-stumpwmrc","tag-windowmanager","tag-wm"],"_links":{"self":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/70"}],"collection":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=70"}],"version-history":[{"count":4,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":773,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/70\/revisions\/773"}],"wp:attachment":[{"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blackhats.es\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}