J'utilise quelques mappages de touches dans mon xmonad.hs
fichier de configuration:
...
, 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")
]
Le troisième mappage s'exécute firefox
lorsque vous appuyez sur ctrl+f. Je voudrais faire quelque chose de plus complexe:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
Et je voudrais changer ctrl+fpour win+f. Comment puis je faire ça?
Réponses:
En regardant les paquets de contributions de XMonad , vous trouverez
XMonad.Actions.WindowGo
, qui exporte la fonction suivante :qui prend un argument de chaîne du programme à exécuter , par exemple "firefox"; et une requête booléenne qui est utilisée pour savoir si elle est déjà en cours d'exécution , via les propriétés X11, par exemple
(className =? "Firefox")
(voir le haut de laXMonad.Actions.WindowGo
page pour les variantes).Donc, tout ce dont vous avez besoin est de lier
runOrRaiseMaster "firefox" (className =? "Firefox")
la clé que vous voulez, comme expliqué dansXMonad.Doc.Extending
, viadans le cadre des raccourcis clavier
Data.Map
de votre configuration (les détails diffèrent selon la façon dont vous les définissez, c'est-à-dire l'ensemble de votrexmonad.hs
, voir Ajout de raccourcis clavier ).Notez qu'il n'y a pas vraiment de sens à maximiser une fenêtre dans XMonad. Lorsque vous configurez les choses comme expliqué, vous aurez Mod4+ fagir comme suit:
La maximisation peut être émulée en choisissant la
Full
disposition après l'appelrunOrRaiseMaster
, comme décrit ici :(notez que cet exemple montre également
XMonad.Util.EZConfig
comment permettre des définitions de raccourcis clavier plus faciles)La combinaison de ces deux choses est également possible. Les deux sont de type
X ()
, c'est-à-dire qu'ils sont dans la X Monade . L' utilisation>>
, qui est de type (vérifier avec:t (>>)
enghci
)nous avons
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
aussi une combinaison de deuxX ()
types de typeX ()
, et il peut donc être lié à une clé.EDIT Manquant
)
dans la ligne de code avec>>
Edit2
modm
->modMask
.Edit3 Cela
xmonad.hs
fonctionne, espérons-le.( Pourquoi ne pas vous apprendre un Haskell pour le plus grand bien? )
la source
>> (sendMessage $ JumptoLayout "Full")
il y a une erreur avec le constructeur. C'est peut-être quelque chose de facile, que je vais résoudre après avoir appris Haskell.modm
ça ne marche pas, j'utilise toujourscontrolMask
.xmonad.hs
pour résoudre ce problème; il vaut mieux jeter un œil ici, l'archive de configuration et voir comment les autres le font ou utilisent ce qui est mentionnéEZConfig
.X ()
à lier à la clé devrait être(runOrRaiseMaster ...) >> (sendMessage ...)
, ce qui entraîne,((...,...), (runOrR...) >> (send...) )
(a(
avantrun...
)