Estoy usando algunas asignaciones de teclas en mi xmonad.hsarchivo de configuración:
...
, modMask = mod4Mask -- Rebind Mod to the Windows key
...
[ ((controlMask, xK_Print), spawn "sleep 0.2; scrot -s")
, ((0, xK_Print), spawn "scrot")
, ((controlMask, xK_f), spawn "firefox")
]
La tercera asignación se ejecuta firefoxal presionar ctrl+f. Me gustaría hacer algo más complejo:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
Y me gustaría cambiar ctrl+fa win+f. ¿Cómo puedo hacer eso?
keyboard-shortcuts
xmonad
xralf
fuente
fuente

Respuestas:
Mirando los paquetes contrib de XMonad , encontrará
XMonad.Actions.WindowGo, que exporta la siguiente función :que toma un argumento de cadena del programa para ejecutarse , por ejemplo, "firefox"; y una consulta booleana que se utiliza para averiguar si ya se está ejecutando , a través de las propiedades X11, por ejemplo
(className =? "Firefox")(consulte la parte superior de laXMonad.Actions.WindowGopágina para conocer las variantes).Por lo tanto, todo lo que necesita es vincularse
runOrRaiseMaster "firefox" (className =? "Firefox")a la clave que desea, como se explica enXMonad.Doc.Extending, a través decomo parte de las combinaciones
Data.Mapde teclas de su configuración (los detalles difieren con su forma de configuración, es decir, la totalidad de suxmonad.hs, consulte Agregar combinaciones de teclas ).Tenga en cuenta que no tiene sentido maximizar la ventana en XMonad. Cuando configure las cosas como se explica, tendrá Mod4+ factuar de la siguiente manera:
La maximización se puede emular eligiendo el
Fulldiseño después de llamarrunOrRaiseMaster, como se describe aquí :(tenga en cuenta que este ejemplo también demuestra que
XMonad.Util.EZConfigpermite definiciones de combinación de teclas más fáciles)Combinar estas dos cosas también es posible. Ambos son de tipo
X (), es decir, están en la X Mónada . Usando>>, que es de tipo (consulte con:t (>>)enghci)también tenemos
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")una combinación de dosX ()tipos de tiposX ()y, por lo tanto, puede vincularse a una clave.EDITAR Falta
)en la línea de código con>>Editar2
modm->modMask.Edit3 Esto con
xmonad.hssuerte funciona.( ¿Por qué no aprender un Haskell por un gran bien? )
fuente
>> (sendMessage $ JumptoLayout "Full")hay un error con el constructor. Tal vez sea algo fácil, que resolveré después de aprender Haskell.modmno funciona, todavía estoy usandocontrolMask.xmonad.hspara arreglar esto; mejor solo mire por aquí, el archivo de configuración y vea cómo otros lo hacen o usan lo mencionadoEZConfig.X ()para vincular a la clave debería ser(runOrRaiseMaster ...) >> (sendMessage ...), lo que resulta en,((...,...), (runOrR...) >> (send...) )(un(antesrun...)