Estou usando alguns mapeamentos principais no meu xmonad.hs
arquivo de configuração:
...
, 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")
]
O terceiro mapeamento é executado firefox
ao pressionar ctrl+f. Eu gostaria de fazer algo mais complexo:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
E eu gostaria de mudar ctrl+fpara win+f. Como eu posso fazer isso?
keyboard-shortcuts
xmonad
xralf
fonte
fonte
Respostas:
Olhando para os pacotes contrib do XMonad , você encontrará
XMonad.Actions.WindowGo
, que exporta a seguinte função :que utiliza um argumento de string do programa para executar , por exemplo, "firefox"; e uma consulta booleana que é usada para descobrir se já está sendo executada , através das propriedades do X11, por exemplo
(className =? "Firefox")
(consulte o topo daXMonad.Actions.WindowGo
página para variantes).Portanto, tudo que você precisa é vincular
runOrRaiseMaster "firefox" (className =? "Firefox")
à chave desejada, conforme explicado emXMonad.Doc.Extending
, viacomo parte das combinações
Data.Map
de teclas da sua configuração (os detalhes diferem com a maneira como você define as configurações, ou seja, com toda a sua configuraçãoxmonad.hs
, consulte Adicionando combinações de teclas ).Observe que não há sentido real em maximizar uma janela no XMonad. Ao configurar as coisas conforme explicado, você terá Mod4+ a fseguinte ação:
A maximização pode ser emulada escolhendo o
Full
layout após a chamadarunOrRaiseMaster
, conforme descrito aqui :(observe que este exemplo também demonstra
XMonad.Util.EZConfig
permitir definições mais fáceis de vinculação de teclas)Combinar essas duas coisas também é possível. Ambos são do tipo
X ()
, ou seja, estão na X Mônada . Usando>>
, que é do tipo (verifique com:t (>>)
emghci
)também temos
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
uma combinação de doisX ()
tipos de tiposX ()
e, portanto, pode ser vinculado a uma chave.EDIT ausente
)
na linha de código com>>
Editar2
modm
->modMask
.Edit3 Esta
xmonad.hs
espero funciona.( Por que não aprender um Haskell para o bem? )
fonte
>> (sendMessage $ JumptoLayout "Full")
há algum erro com o construtor. Talvez seja algo fácil, que eu resolva depois de aprender Haskell.modm
assim não funciona, ainda estou usandocontrolMask
.xmonad.hs
para consertar isso; melhor, basta dar uma olhada por aqui, no arquivo de configuração e ver como os outros o fazem ou usam o mencionadoEZConfig
.X ()
para vincular à chave deve ser(runOrRaiseMaster ...) >> (sendMessage ...)
, resultando em,((...,...), (runOrR...) >> (send...) )
(a(
antesrun...
)