Ich verwende einige Schlüsselzuordnungen in meiner xmonad.hs
Konfigurationsdatei:
...
, 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")
]
Das dritte Mapping wird firefox
beim Drücken ausgeführt ctrl+f. Ich möchte etwas komplexeres machen:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
Und ich möchte ändern ctrl+fzu win+f. Wie kann ich das machen?
keyboard-shortcuts
xmonad
xralf
quelle
quelle
Antworten:
Wenn Sie sich die Contrib-Pakete von XMonad ansehen , werden Sie feststellen
XMonad.Actions.WindowGo
, welche die folgende Funktion exportieren :welches ein String-Argument des Programms benötigt, um ausgeführt zu werden , zB "Firefox"; und eine boolesche Abfrage , mit der über X11-Eigenschaften ermittelt wird, ob sie bereits ausgeführt wird, z. B.
(className =? "Firefox")
( Varianten siehe oben auf derXMonad.Actions.WindowGo
Seite für Varianten).Also alles , was Sie brauchen , ist zu binden ,
runOrRaiseMaster "firefox" (className =? "Firefox")
um den Schlüssel , den Sie möchten, wie erläutertXMonad.Doc.Extending
, überals Teil der Tastenkombinationen
Data.Map
Ihrer Konfiguration (Details unterscheiden sich je nach Art der Einstellungen, dh Ihrer gesamtenxmonad.hs
, siehe Hinzufügen von Tastenkombinationen ).Beachten Sie, dass es keinen Sinn macht, ein Fenster in XMonad zu maximieren . Wenn Sie die Dinge wie erklärt einrichten, müssen Sie Mod4+ fwie folgt vorgehen:
Die Maximierung kann durch Auswahl des
Full
Layouts nach dem Aufruf emuliert werdenrunOrRaiseMaster
, wie hier beschrieben :(Beachten Sie, dass dieses Beispiel auch zeigt,
XMonad.Util.EZConfig
dass einfachere Schlüsselbindungsdefinitionen möglich sind.)Die Kombination dieser beiden Dinge ist ebenfalls möglich. Beide sind vom Typ
X ()
, dh sie sind in der X-Monade . Verwenden>>
, was vom Typ ist (einchecken mit:t (>>)
inghci
)Wir haben
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
auch eine Kombination von zweiX ()
Arten von TypenX ()
, und es kann somit an einen Schlüssel gebunden werden.BEARBEITEN Fehlt
)
in der Codezeile mit>>
Edit2
modm
->modMask
.Edit3 Das
xmonad.hs
funktioniert hoffentlich.( Warum lernst du nicht ein Haskell für großes Wohl? )
quelle
>> (sendMessage $ JumptoLayout "Full")
bei dem ein Fehler beim Konstruktor vorliegt. Vielleicht ist es etwas Leichtes, das ich lösen werde, nachdem ich Haskell gelernt habe.modm
funktioniert nicht, ich benutze es immer nochcontrolMask
.xmonad.hs
, um das zu beheben; Schauen Sie sich besser hier im Konfigurationsarchiv um und sehen Sie, wie andere es tun oder verwenden Sie das erwähnteEZConfig
.X ()
zum Binden an den Schlüssel sollte sein(runOrRaiseMaster ...) >> (sendMessage ...)
, was zu,((...,...), (runOrR...) >> (send...) )
(a(
vorrun...
)