From Fedora Project Wiki

< FWN‎ | Beats

No edit summary
No edit summary
 
(4 intermediate revisions by the same user not shown)
Line 5: Line 5:
LATAM Fedora is a regular column of Spanish language contributions around open source software.  It is our first expansion into incorporating foreign language content into FWN.   
LATAM Fedora is a regular column of Spanish language contributions around open source software.  It is our first expansion into incorporating foreign language content into FWN.   


This week's contribution is from [[User:gomix|Guillermo Gómez]], a second installment primer on Ruby.  Enjoy!
This week's contribution is from [[User:gomix|Guillermo Gómez]], a review of the dwm window manager.  Enjoy!


===Ruby Capítulo 2 : Una clase algo más completa===
=== dwm ===


Siguiendo nuestra secuencia al estilo tutorial, en esta edición vamos a completar un poco más nuestras clases, introduciresmo los conceptos de métodos y variables de clase.
<code>
# yum install dwm
</code>


Una variable de clase es una variable compartida de la clase misma. Sólo existe una copia de una variable de clase en particular para una clase dada. Los nombres de las variables de clase comienzan con @@ tal como en @@reproducciones.
Cuando se intenta organizar ventanas en otros entornos de escritorio, la mayoría son una pesadilla, pruebe dwm, hiperligero, sólo para geeks. dwm consiste de un único binario de 54k (el distribuido por Fedora) que sólo se puede personalizar recompilando los fuentes. Ya veremos más adelante que en Fedora esto se puede hacer fácilmente.
 
Al comenzar ni sabrá cómo arrancar su primera aplicación, la documentación (man dwm) dice Mod4-Shift-Return para arrancar uxterm, eso se traduce usualmente a:
 
TeclaWin+Shift+Enter
 
    uxterm es un envoltorio para xterm, un emulador de terminal para X, ambos provistos por el paquete xterm.
 
A partir de ahí puede arrancar sus aplicaciones, si, desde un terminal, no olvide agregar el & para dejarla en el fondo, por ejemplo.


<code>
<code>
1 class Cancion
$ totem &
2  @@reproducciones = 0
3
4  def Cancion.reproducciones
5    @@reproducciones
6  end
7
8  def reproducir
9    @@reproducciones =+ 1
10  end
11 end
</code>
</code>
dwm-user¶


A diferencia de las variables de instancia y variables globales, las variables de clase deben se inicializadas antes de poder ser utilizadas, usualmente se hace con una declaración simple en el cuerpo de la definición de la clase. En el código anterior igualmente se ha introducido el concepto de método de clase. Un método de clase es un método que no necesita que se instancie la clase para ser invocado, es decir, "son métodos propios de la clase y no de sus objetos".
dwm-user incluye los fuentes de dwm y el guión de arranque dwm-start.
 
Su utilidad es obvia en el ejemplo, se quiere saber cuántas reproducciones se han hecho en total en nuestro reproductor de música. Esta información no es específica a una canción en particular, es decir, no es sujeto de las instancias sino de la clase misma. La diferencia al momento de declarar el método de clase es que debe anteponer el nombre de la clase al método, tiene dos opciones, o usar explícitamente Cancion, o self. El uso de *self" da mayor flexibilidad ya que permite cambiar el nombre de la clase sin mayores traumas.


<code>
<code>
1 class Cancion
# yum install dwm-user
2  @@reproducciones = 0
3
4  def self.reproducciones
5    @@reproducciones
6  end
7
8  def reproducir
9    @@reproducciones =+ 1
10  end
11 end
</code>
</code>


====Constantes vs variables====
==== Login ====
 
El paquete dwm provee una entrada /usr/share/xsessions/dwm.desktop y el paquete dwm-user incluye /usr/share/xsessions/dwm-user.desktop. La única diferencia es el modo de arranque.


Las variables y constantes en Ruby mantienen referencias a objetos. Las variables no poseen un tipo intrínseco, a cambio el tipo es únicamente definido por los mensajes a los que responde el objeto referenciado.
===== dwm.desktop =====


Una constante en Ruby también es una referencia a un objeto. Las constantes son creadas cuando son asignadas por primera vez, a diferencia de otros lenguajes Ruby le permite alterar el valor de las constantes si bien ello provocará un mensaje de alerta. En general usted no debe alterar una constante en tiempo de ejecución y debería evitarlo a toda costa.
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=dwm
GenericName=Window Manager
Comment=Dynamic window manager for X
Exec=dwm
Terminal=false
TryExec=dwm


<code>
[Window Manager]
1 >> MI_CONSTANTE = 1
SessionManaged=true
2 => 1
 
3 >> MI_CONSTANTE = 2
===== dwm-user.desktop ======
4 (irb):23: warning: already initialized constant MI_CONSTANTE
 
5 => 2
[Desktop Entry]
Type=Application
Encoding=UTF-8
Name=dwm-user
GenericName=Window Manager
Comment=Dynamic window manager for X (user configuration)
Exec=dwm-start
Terminal=false
TryExec=dwm-start
 
[Window Manager]
SessionManaged=true
</code>
</code>


Note como las constantes pueden declararse dentro de la definición de clase lo que nos lleva a la definición de constante de clase y a la noción de espacios de nombres por la forma en que nos referimos a dichas constantes.
dwm-start es el método de arranque preferido para DWM en Fedora ya que entonces podrá personalizar su entorno, esto significa compilar su versión de DWM con su versión de las cabeceras en su directorio personal sin intervención manual, ¡cool!.
 
=== Keybindings ===
 
==== Layouts ====
 
* Mod4-t Poner la disposición tiled (cuadros).
 
* Mod4-f Poner la disposición a floating (flotante).


<code>
* Mod4-m Poner la disposición a monocle (monóxulo).
  1 class Cancion
 
  2  VERSION="1.0"
* Mod4-Shift-space Conmuta la disposición de estado de la ventana enfocada entre tiled y flotante.
3 end
 
</code>
==== Navegar entre ventanas ====
 
* Mod4-j Cambiar/enfocar la próxima ventana.
 
* Mod4-k Cambiar/enfocar la ventana previa.
 
* Mod4-Tab Cambia a los tags previamente seleccionados.
 
==== Area maestra ====
 
* Mod4-h Decrementa el tamaño del área maestra.
 
* Mod4-l Incrementa el tamaño del área maestra.
 
* Mod4-Return Cicla/aumenta la ventana enfocada desde/hacia el área maestra (sólo en disposición de cuadros).
 
 
==== Salir/cerrar ====
 
* Mod4-Shift-c Cerrar la ventana enfocada.
 
* Mod4-Shift-q Salir de dwm.
 
==== Poniendo los tags a las ventanas ====
 
* Mod4-Shift-[1..n] Aplica el tag n a la ventana enfocada.
 
* Mod4-Button1-tagicon Aplica el tag n a la ventana enfocada (haga clic en la barra con botón izquierdo)
 
* Mod4-Button2-tagicon Agrega el tag n a la ventana enfocada (haga clic en la barra con botón derecho)


<code>
* Mod4-Shift-0 Aplica todos los tags a la ventana enfocada.
1 >> Cancion::VERSION
2 => "1.0"
3 >> VERSION
4 => "1.8.7"
</code>


Note que VERSION no referencia ni colisiona con Cancion::VERSION.
==== Dos pantallas ====


====El poder de herencia====
* Para enviar una app de una pantalla a otra tiene las siguientes tres opciones:
  * En modo flotante, se puede simplemente arrastrar la ventana de una pantalla a otra.
  * Mod4-Shift-, envía la ventana con el foco a la pantalla previa, si hay alguna.
  * Mod4-Shift-. envía la ventana con el foco a la próxima pantalla, si hay alguna.


Tal vez el santo grial de la programación es el principio DRY, "Don Repeat Yourself". Una forma de evitar repetirse, es escribir código reusable, cada vez que estamos escribiendo nuevo código y tenemos esa sensación de deja-vu de que ya esto lo hicimos una vez en el pasado, es porque no estamos reusando nuestro código de forma inteligente. En POO la herencia es una excelente forma de mantener el código reusable sin mayores repeticiones.
==== dmenu: lanzador de aplicaciones ====


La herencia le permite crear clases que sean refinamientos o especializaciones de otra clase. Por ejemplo, y siguiendo el ejemplo de Cancion en nuestro reproductor de música ahora a alguien se le ocurrió que sería interesante que se incluyera el soporte para canciones de tipo Karaoke. La única diferencia con las otras canciones es que las canciones Karaoke tienen asociadas la letra de la canción en conjunto con infomación de sincronización para reproducir las letras del Karaoke en nuestro flamante reproductor ahora con una gran pantalla de video.
dmenu es un menú dinámico para X (lanzador de aplicaciones).


<code>
<code>
1 class Karaoke < Cancion
# yum install dmenu
2  def initialize(nombre, artista, duracion, letra)
3    super(nombre, artista, duracion)
4    @letra = letra
5  end
6 end
</code>
</code>


El "< Cancion" en la definición de la clase le indica a Ruby que Karaoke es un subclase de Cancion, o en dirección opuesta, Cancion es la superclase de Karaoke. De esta forma la clase hija hereda todos los métodos y declaraciones de variables de su padre. Al invocar un método sobre un objeto o clase, Ruby defiere su ubicación hasta el momento de ejecución, en dicho momento Ruby primero mira en la clase para determinar si existe el método invocado, si no es así, intenta en el padre, y así atravesando todos los ancestros de la clase hasta ubicar el método invocado. Si se acaban los ancestros donde buscar, Ruby ejecuta una acción especial que puede ser interceptada si se desea Object#method_missing, si no, produce un error.
Para usarlo en dwm Fedora presione:


Cada clase especializada maneja sus detalles, para el resto se utiliza super, es decir, el método del padre o de su ancestro. De esta forma, por ejemplo, en nuestra definición de Karaoke#initialize dejamos que la inicialización de todo lo común a Cancion ocurra igual que antes por medio de la llamada a super con los respectivos parámetros necesarios, luego inicializamos los datos específicos a nuetras clase Karaoke.
TeclaWin+p


====Espacios de nombres====
Aparecerá un menú en la parte superior, en la medida que tipee se reducirán las opciones, termina tu selección, o navega con las teclas flecha, presiona enter y listo, su aplicación será iniciada, incluso puede utilizar tab para autocompletar.


En la medida que escriba programas Ruby cada vez más grandes, usted naturalmente se encontrará con código reusable, librerías de rutinas relacionadas entre sí por ejemplo. Usted deseará separar dicho código en distintos archivos separados de tal forma que el contenido pueda ser reusado entre diferentes programas Ruby. Frecuentemente este código será organizado en clases.
==== Hacks ====


Otras veces ello simplemente no es conveniente o no aplica, son un grupo de métodos que desea reusar, usted puede simplemente colocarlos en un archivo y cargar dicho archivo en su programa con load o require. Esto funciona pero tiene un problema, digamos que se crea una librería para cocinar con los métodos calentar , mezclar, amasar en un archivo cocina.rb y otra librería para atletas con los métodos calentar, correr, descansar en el archivo atleta.rb. Si carga ambos archivos uno después del otro, simplemente el método calentar colisiona y sólo el más recientemente cargado tendrá la definicón actual del método, el otro simplemente será olvidado, en resumen la colisión en los nombres es el problema.
===== stalonetray systray =====


La respuesta es el mecanismo de modulos. Los modulos definen un espacio de nombres en donde sus métodos y constantes pueden aplicar sin tener que preocuparse en colisionar con otros métodos y constantes:
stalonetray es un systray simple, punto.


<code>
<code>
  1 module Cocina
~/.dwm/config.h
  2  ESCUELA="Latinoamericana"
 
  3  def Cocina.calentar(x)
static Rule rules[] = {
  4    # Se espera que x sea un valor númerico para representar temperatura en ºC
/* class instance title tags mask isfloating */
  5    # ..
{ "stalonetray", NULL, "stalonetray", ~0, False },
  6  end
};
  7 ...
  8 end
  9
10 module Atleta
11  ESCUELA="Simón Bolívar"  
12  def Atleta.calentar(t)
13    # Se espera que t sea un valor numérico que represente tiempo en segundos
14    # ..
15  end
16 end
</code>
</code>
Esto asegura que stalonetray sea visible a lo largo de todos los tags.
===== terminator en vez de uxterm =====
Mod4-Shift-Return de caja arranca uxterm, deseo cambiar eso a terminator


<code>
<code>
1 >> Cocina::ESCUELA
~/.dwm/config.h
  2 => "Latinoamericana"  
 
  3 >> Atleta::ESCUELA
1 /*static const char *termcmd[] = { "uxterm", NULL };*/
4 => "Simon Bolivar"  
2 static const char *termcmd[] = { "terminator", NULL };
5 >> include Atleta
6 => Object
7 >> Atleta.calentar(1000)
8 calentando 1000 segundos
9 => nil
10 >> include Cocina
11 => Object
12 >> Cocina.calentar(10)
13 => 10
</code>
</code>


Ahora entonces tiene mucho menos probabilidades de provocar colisiones, note que debe cargar el código, y luego include para usar las funcionalidades del módulo.
===== tags con nombres =====
Herencia múltiples vs Mixins¶
 
Tener los tags simplemente numerados es conveniente, pero tal vez sienta la necesidad de ponerles un nombre.
 
<code>
~/.dwm/config.h


Algunos lenguajes orientados a objetos, tales como C++, soportan herencia múltiple en donde una clase puede tener más de una superclase heredando funcionalidad de cada una de ellas. Si bien potente, esta técnica puede ser peligrosa ya que la jerarquía puede tener ambigüedades. Otros lenguajes como java y C# soportan sólo herencia simple. Si bien más limpia y simple, la herencia simple también tiene sus desventajas, en la realidad los objetos heredan atributos de múltiples fuentes en el mundo real.
/* tagging */
static const char *tags[] = { "term", "web", "email", "chat", "fm", "mmx", "7", "8", "9" };
</code>


Ruby ofrece una alternativa interesante y poderosa que le ofrece la simplicidad de la herencia simple y el poder la herencia múltiple. Una clase Ruby tiene una única clase padre, en consecuencia Ruby es un lenguaje con herencia simple, sin embargo, las clases Ruby pueden incluir la funcionalidad de cualquier cantidad de mixins (un mixin es una especie de definición parcial de clase). Nuevamente dejemos que Ruby hable, creemos nuestro archivo con la definición de módulo y un par de clases tontas que lo usen como mixin:
==== Foco sigue al ratón, deshabilitar ====


=====mixin_module.rb=====
No me gusta la idea de que el movimiento del ratón defina el foco de las ventanas, suele provocarme problemas por la sensibilidad de los touchpad y de los ratones ópticos que "se mueven solos" entonces cambian el foco de la ventana a una ventana que nada que ver con lo que estoy trabajando. En este caso debe comentar una declaración en el código fuente.


<code>
<code>
  1 module Debug
/usr/src/dwm-user-5.8.2-9.fc15/dwm.c
  2  def quien_soy?
 
  3    "#{self.class.name} (\##{self.objet_id}): #{self.to_s}"
1      [DestroyNotify] = destroynotify,
  4  end
2 /*      [EnterNotify] = enternotify, */
  5 end
3      [Expose] = expose,
  6
  7 class Cocina
  8  include Debug
  9  def estilo
10    puts "Italiana"
11  end
12 end
13
14 class Nevera
15  include Debug
16  def capacidad
17    puts "150 pies cúbicos"
18  end
19 end
</code>
</code>


Si ahora cargamos dichas definiciones de módulo y clases en irb, podemos evidenciar y experimentar con el uso de los mixins (note que le voy a pasar la forma de hacerlo):
Y forzar una compilación, yo resolví ajustando ficticiamente por ejemplo un nombre de un tag y luego devolviendo el cambio (no estoy seguro que el sistema de construcción de dwm en Fedora note mis cambios en dwm.c).
 
==== Dos monitores al vuelo ====
 
Si iniciamos sesión DWM con los dos monitores encendidos en Fedora no hay problemas todo funciona al pelo, sin embargo, puede que necesite conectar y encender el segundo monitor una vez ya iniciada la sesión, por supuesto no queremos reiniciar nuestra sesión DWM. Casualmente me tropecé con esta circunstancia y reusé un pequeño script xrandr, la sorpresa es que no tuve que hacer nada con DWM, simplemente apareció el segundo monitor con sus nueve tags listo para trabajar. En resumidas, sólo debe configurar para detectar el segundo monitor, el script abajo es la forma que usé en mi laptop:


<code>
<code>
1 $ irb
~/xrandr
2 >> load 'mixin_module.rb'
 
3 => true
xrandr --output VGA1 --mode 1280x1024
4 >> nevera = Nevera.new
xrandr --output LVDS1 --mode 1280x800
5 => #<Nevera:0xb7587b38>
xrandr --output VGA1 --left-of LVDS1
6 >> cocina = Cocina.new
 
7 => #<Cocina:0xb7585c5c>
~/xrandr-alreves
8 >> nevera.quien_soy?
 
9 => "Nevera (#-609469028): #<Nevera:0xb7587b38>"
xrandr --output VGA1 --mode 1024x768
10 >> cocina.quien_soy?
xrandr --output LVDS1 --mode 1280x800
11 => "Cocina (#-609472978): #<Cocina:0xb7585c5c>"
xrandr --output VGA1 --right-of LVDS1
</code>
</code>


Bien, es todo por hoy, nos recontraremos en un tercer capítulo dedicado a métodos en una próxima edición de esta serie dedicada a aprender Ruby.
La primera forma es para que el segundo monitor quede al lado izquierdo del primero, la segunda, al revés.
 
==== Aplicaciones systray ====
 
Ya sea con stalonetray o cualquier otro panel que incorpore un systray para el sistema, seguro deseará usar algunas de las siguientes aplicaciones:
 
* nm-applet : applet para systray de Network Manager, le facilitará conectarse a redes.
* PNMixer : mezclador de audio para el systray, le permitirá ajustar el volumen.
* Empathy , cliente chat.
* Pidgin , cliente chat.
* batti, monitor de batería, suspender, hibernar.
 
==== Mi configuración feliz ====
 
Esta sección es para poner "mi configuración", mis ajustes, mis aplicaciones preferidas que se ajustan a mi manera de trabajar en dwm.
 
* fbpanel configurado a lo mínimo, no toma foco y se esconde solo, lo veo cuando quiero :).
* dmenu como lanzador de aplicaciones.
* terminator como emulador de terminales.
* tmux multiplexor de terminales.
* pidgin cliente multiprotocolo para chat (irc, gtalk, identica, twitter, fb ).
* pcmanfm es mi gestor de archivos gui preferido, seguido de nautilus.
* totem y/o xine para ver películas y videos en general.
* listen como reproductor de audio.
* radiotray como reproductor de radio.
* nm-applet para conectarme a redes.
* batti para vigilar la batería de mi laptop, suspender e hibernar.
 
* Pendiente bloqueo de pantalla.
 
Un pantallazo, por supuesto.
 
==== Referencias ====
 
* http://en.gentoo-wiki.com/wiki/Dwm
* http://www.linuxjournal.com/content/going-fast-dwm
* http://www.linuxgoodies.com/review_dwm.html
 
==== Pendientes ====
 
* Al usar tint2 este es sujeto de foco de ventana, quiero evitar ello ya que no deseo pasar por tint2 para llegar a otra aplicación, es en realidad el primer punto fastidioso para mi en el uso de dwm. Si tint2 aparece en todos los tags (algo deseable), entonces es sujeto de tener el foco, es una "ventana más flotante" (stalonetray sufre igual).
 
* Con dos pantallas, en mi Fedora funciona perfecto, incluso mover las apps de una pantalla a otra, BUT, cómo etiqueto una app para que esté en la "otra" pantalla. En las dos pantallas tengo el panel con los 9 tags individuales del 1 al 9.


Este artículo se mantiene en línea en gomix.fedora-ve.org para posibles mejoras y erratas.
* dmenu no se muestra correctamente, en mi laptop cuando arranco con dos monitores, dmenu no se muestra correctamente, el reconectar físicamente el segundo monitor repara la falla, es algo con el X o el propio dwm.


Guillermo Gómez
Gomix"

Latest revision as of 01:48, 18 August 2011

LATAM Fedora!

LATAM Fedora is a regular column of Spanish language contributions around open source software. It is our first expansion into incorporating foreign language content into FWN.

This week's contribution is from Guillermo Gómez, a review of the dwm window manager. Enjoy!

dwm

  1. yum install dwm

Cuando se intenta organizar ventanas en otros entornos de escritorio, la mayoría son una pesadilla, pruebe dwm, hiperligero, sólo para geeks. dwm consiste de un único binario de 54k (el distribuido por Fedora) que sólo se puede personalizar recompilando los fuentes. Ya veremos más adelante que en Fedora esto se puede hacer fácilmente.

Al comenzar ni sabrá cómo arrancar su primera aplicación, la documentación (man dwm) dice Mod4-Shift-Return para arrancar uxterm, eso se traduce usualmente a:

TeclaWin+Shift+Enter

   uxterm es un envoltorio para xterm, un emulador de terminal para X, ambos provistos por el paquete xterm.

A partir de ahí puede arrancar sus aplicaciones, si, desde un terminal, no olvide agregar el & para dejarla en el fondo, por ejemplo.

$ totem & dwm-user¶

dwm-user incluye los fuentes de dwm y el guión de arranque dwm-start.

  1. yum install dwm-user

Login

El paquete dwm provee una entrada /usr/share/xsessions/dwm.desktop y el paquete dwm-user incluye /usr/share/xsessions/dwm-user.desktop. La única diferencia es el modo de arranque.

dwm.desktop

[Desktop Entry] Type=Application Encoding=UTF-8 Name=dwm GenericName=Window Manager Comment=Dynamic window manager for X Exec=dwm Terminal=false TryExec=dwm

[Window Manager] SessionManaged=true

dwm-user.desktop =

[Desktop Entry] Type=Application Encoding=UTF-8 Name=dwm-user GenericName=Window Manager Comment=Dynamic window manager for X (user configuration) Exec=dwm-start Terminal=false TryExec=dwm-start

[Window Manager] SessionManaged=true

dwm-start es el método de arranque preferido para DWM en Fedora ya que entonces podrá personalizar su entorno, esto significa compilar su versión de DWM con su versión de las cabeceras en su directorio personal sin intervención manual, ¡cool!.

Keybindings

Layouts

  • Mod4-t Poner la disposición tiled (cuadros).
  • Mod4-f Poner la disposición a floating (flotante).
  • Mod4-m Poner la disposición a monocle (monóxulo).
  • Mod4-Shift-space Conmuta la disposición de estado de la ventana enfocada entre tiled y flotante.

Navegar entre ventanas

  • Mod4-j Cambiar/enfocar la próxima ventana.
  • Mod4-k Cambiar/enfocar la ventana previa.
  • Mod4-Tab Cambia a los tags previamente seleccionados.

Area maestra

  • Mod4-h Decrementa el tamaño del área maestra.
  • Mod4-l Incrementa el tamaño del área maestra.
  • Mod4-Return Cicla/aumenta la ventana enfocada desde/hacia el área maestra (sólo en disposición de cuadros).


Salir/cerrar

  • Mod4-Shift-c Cerrar la ventana enfocada.
  • Mod4-Shift-q Salir de dwm.

Poniendo los tags a las ventanas

  • Mod4-Shift-[1..n] Aplica el tag n a la ventana enfocada.
  • Mod4-Button1-tagicon Aplica el tag n a la ventana enfocada (haga clic en la barra con botón izquierdo)
  • Mod4-Button2-tagicon Agrega el tag n a la ventana enfocada (haga clic en la barra con botón derecho)
  • Mod4-Shift-0 Aplica todos los tags a la ventana enfocada.

Dos pantallas

  • Para enviar una app de una pantalla a otra tiene las siguientes tres opciones:
  * En modo flotante, se puede simplemente arrastrar la ventana de una pantalla a otra.
  * Mod4-Shift-, envía la ventana con el foco a la pantalla previa, si hay alguna.
  * Mod4-Shift-. envía la ventana con el foco a la próxima pantalla, si hay alguna.

dmenu: lanzador de aplicaciones

dmenu es un menú dinámico para X (lanzador de aplicaciones).

  1. yum install dmenu

Para usarlo en dwm Fedora presione:

TeclaWin+p

Aparecerá un menú en la parte superior, en la medida que tipee se reducirán las opciones, termina tu selección, o navega con las teclas flecha, presiona enter y listo, su aplicación será iniciada, incluso puede utilizar tab para autocompletar.

Hacks

stalonetray systray

stalonetray es un systray simple, punto.

~/.dwm/config.h

static Rule rules[] = { /* class instance title tags mask isfloating */ { "stalonetray", NULL, "stalonetray", ~0, False }, };

Esto asegura que stalonetray sea visible a lo largo de todos los tags.

terminator en vez de uxterm

Mod4-Shift-Return de caja arranca uxterm, deseo cambiar eso a terminator

~/.dwm/config.h

1 /*static const char *termcmd[] = { "uxterm", NULL };*/ 2 static const char *termcmd[] = { "terminator", NULL };

tags con nombres

Tener los tags simplemente numerados es conveniente, pero tal vez sienta la necesidad de ponerles un nombre.

~/.dwm/config.h

/* tagging */ static const char *tags[] = { "term", "web", "email", "chat", "fm", "mmx", "7", "8", "9" };

Foco sigue al ratón, deshabilitar

No me gusta la idea de que el movimiento del ratón defina el foco de las ventanas, suele provocarme problemas por la sensibilidad de los touchpad y de los ratones ópticos que "se mueven solos" entonces cambian el foco de la ventana a una ventana que nada que ver con lo que estoy trabajando. En este caso debe comentar una declaración en el código fuente.

/usr/src/dwm-user-5.8.2-9.fc15/dwm.c

1 [DestroyNotify] = destroynotify, 2 /* [EnterNotify] = enternotify, */ 3 [Expose] = expose,

Y forzar una compilación, yo resolví ajustando ficticiamente por ejemplo un nombre de un tag y luego devolviendo el cambio (no estoy seguro que el sistema de construcción de dwm en Fedora note mis cambios en dwm.c).

Dos monitores al vuelo

Si iniciamos sesión DWM con los dos monitores encendidos en Fedora no hay problemas todo funciona al pelo, sin embargo, puede que necesite conectar y encender el segundo monitor una vez ya iniciada la sesión, por supuesto no queremos reiniciar nuestra sesión DWM. Casualmente me tropecé con esta circunstancia y reusé un pequeño script xrandr, la sorpresa es que no tuve que hacer nada con DWM, simplemente apareció el segundo monitor con sus nueve tags listo para trabajar. En resumidas, sólo debe configurar para detectar el segundo monitor, el script abajo es la forma que usé en mi laptop:

~/xrandr

xrandr --output VGA1 --mode 1280x1024 xrandr --output LVDS1 --mode 1280x800 xrandr --output VGA1 --left-of LVDS1

~/xrandr-alreves

xrandr --output VGA1 --mode 1024x768 xrandr --output LVDS1 --mode 1280x800 xrandr --output VGA1 --right-of LVDS1

La primera forma es para que el segundo monitor quede al lado izquierdo del primero, la segunda, al revés.

Aplicaciones systray

Ya sea con stalonetray o cualquier otro panel que incorpore un systray para el sistema, seguro deseará usar algunas de las siguientes aplicaciones:

  • nm-applet : applet para systray de Network Manager, le facilitará conectarse a redes.
  • PNMixer : mezclador de audio para el systray, le permitirá ajustar el volumen.
  • Empathy , cliente chat.
  • Pidgin , cliente chat.
  • batti, monitor de batería, suspender, hibernar.

Mi configuración feliz

Esta sección es para poner "mi configuración", mis ajustes, mis aplicaciones preferidas que se ajustan a mi manera de trabajar en dwm.

  • fbpanel configurado a lo mínimo, no toma foco y se esconde solo, lo veo cuando quiero :).
  • dmenu como lanzador de aplicaciones.
  • terminator como emulador de terminales.
  • tmux multiplexor de terminales.
  • pidgin cliente multiprotocolo para chat (irc, gtalk, identica, twitter, fb ).
  • pcmanfm es mi gestor de archivos gui preferido, seguido de nautilus.
  • totem y/o xine para ver películas y videos en general.
  • listen como reproductor de audio.
  • radiotray como reproductor de radio.
  • nm-applet para conectarme a redes.
  • batti para vigilar la batería de mi laptop, suspender e hibernar.
  • Pendiente bloqueo de pantalla.

Un pantallazo, por supuesto.

Referencias

Pendientes

  • Al usar tint2 este es sujeto de foco de ventana, quiero evitar ello ya que no deseo pasar por tint2 para llegar a otra aplicación, es en realidad el primer punto fastidioso para mi en el uso de dwm. Si tint2 aparece en todos los tags (algo deseable), entonces es sujeto de tener el foco, es una "ventana más flotante" (stalonetray sufre igual).
  • Con dos pantallas, en mi Fedora funciona perfecto, incluso mover las apps de una pantalla a otra, BUT, cómo etiqueto una app para que esté en la "otra" pantalla. En las dos pantallas tengo el panel con los 9 tags individuales del 1 al 9.
  • dmenu no se muestra correctamente, en mi laptop cuando arranco con dos monitores, dmenu no se muestra correctamente, el reconectar físicamente el segundo monitor repara la falla, es algo con el X o el propio dwm.

Gomix"