Korzystam z kilku kluczowych mapowań w moim xmonad.hs
pliku konfiguracyjnym:
...
, 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")
]
Trzecie mapowanie uruchamia się firefox
po naciśnięciu ctrl+f. Chciałbym zrobić coś bardziej złożonego:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
I chciałbym się zmienić ctrl+fna win+f. Jak mogę to zrobić?
keyboard-shortcuts
xmonad
xralf
źródło
źródło
Odpowiedzi:
Patrząc na pakiety contrib XMonada , znajdziesz
XMonad.Actions.WindowGo
, który eksportuje następującą funkcję :który pobiera argument ciągu programu do uruchomienia , np. „firefox”; oraz zapytanie boolowskie, które służy do sprawdzenia, czy jest już uruchomione , za pośrednictwem właściwości X11, np.
(className =? "Firefox")
(patrz warianty na górzeXMonad.Actions.WindowGo
strony ).Wszystko, czego potrzebujesz, to powiązanie
runOrRaiseMaster "firefox" (className =? "Firefox")
z kluczem, który chcesz, jak wyjaśniono wXMonad.Doc.Extending
, za pośrednictwemjako część powiązań klawiszy
Data.Map
w konfiguracji (szczegóły różnią się w zależności od sposobu konfiguracji, tj. całośćxmonad.hs
, patrz Dodawanie skrótów klawiszowych ).Zauważ, że nie ma sensu maksymalizować okna w XMonad. Po skonfigurowaniu rzeczy zgodnie z objaśnieniem będziesz Mod4+ fdziałał w następujący sposób:
Maksymalizację można emulować, wybierając
Full
układ po wywołaniurunOrRaiseMaster
, jak opisano tutaj :(zwróć uwagę, że w tym przykładzie pokazano również
XMonad.Util.EZConfig
łatwiejsze definicje skrótów klawiszowych)Możliwe jest także połączenie tych dwóch rzeczy. Oba są typu
X ()
, tj. Są w X Monadzie . Korzystanie>>
, który jest typu (sprawdź:t (>>)
wghci
)mamy
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
też kombinację dwóchX ()
typów typówX ()
, dzięki czemu można go przypisać do klucza.EDYCJA Brakuje
)
w wierszu kodu za pomocą>>
Edycja2
modm
->modMask
.Edit3 To
xmonad.hs
miejmy nadzieję działa.( Dlaczego nie nauczyć się Haskella dla wielkiego dobra? )
źródło
>> (sendMessage $ JumptoLayout "Full")
błędu w konstruktorze. Może to coś łatwego, co rozwiążę po nauce Haskella.modm
to nie działa, wciąż używamcontrolMask
.xmonad.hs
aby to naprawić; lepiej po prostu zajrzyj tutaj, archiwum konfiguracji i zobacz, jak inni to robią lub używają wspomnianegoEZConfig
.X ()
bind” na klawiszu powinno być(runOrRaiseMaster ...) >> (sendMessage ...)
, w wyniku czego,((...,...), (runOrR...) >> (send...) )
(a(
wcześniejrun...
)