Estoy usando algunas asignaciones de teclas en mi xmonad.hs
archivo 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 firefox
al 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.WindowGo
pá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.Map
de 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
Full
diseño después de llamarrunOrRaiseMaster
, como se describe aquí :(tenga en cuenta que este ejemplo también demuestra que
XMonad.Util.EZConfig
permite 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.hs
suerte 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.modm
no funciona, todavía estoy usandocontrolMask
.xmonad.hs
para 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...
)