Saya menggunakan beberapa pemetaan kunci dalam xmonad.hs
file konfigurasi saya :
...
, 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")
]
Pemetaan ketiga berjalan firefox
saat menekan ctrl+f. Saya ingin melakukan sesuatu yang lebih kompleks:
if (firefox is running):
focus and maximize firefox window:
else:
run firefox
Dan saya ingin mengubah ctrl+fke win+f. Bagaimana saya bisa melakukan itu?
keyboard-shortcuts
xmonad
xralf
sumber
sumber
Jawaban:
Melihat paket contrib XMonad , Anda akan menemukan
XMonad.Actions.WindowGo
, yang mengekspor fungsi berikut :yang membutuhkan argumen string dari program untuk dijalankan , misalnya "firefox"; dan permintaan boolean yang digunakan untuk mencari tahu apakah sudah berjalan , melalui properti X11, misalnya
(className =? "Firefox")
(lihat bagian atasXMonad.Actions.WindowGo
halaman untuk varian).Jadi, yang Anda butuhkan hanyalah mengikat
runOrRaiseMaster "firefox" (className =? "Firefox")
ke kunci yang Anda inginkan, seperti yang dijelaskan dalamXMonad.Doc.Extending
, viasebagai bagian dari ikatan utama
Data.Map
dari konfigurasi Anda (detail berbeda dengan cara Anda mengaturnya, yaitu keseluruhan Andaxmonad.hs
, lihat Menambah Gantungan Kunci ).Perhatikan bahwa tidak ada arti nyata dalam memaksimalkan jendela di XMonad. Ketika Anda mengatur semuanya seperti yang dijelaskan, Anda akan Mod4+ fbertindak sebagai berikut:
Memaksimalkan dapat ditiru dengan memilih
Full
tata letak setelah meneleponrunOrRaiseMaster
, seperti yang dijelaskan di sini :(perhatikan bahwa contoh ini juga menunjukkan
XMonad.Util.EZConfig
memungkinkan definisi pengikat kunci yang lebih mudah)Menggabungkan dua hal ini juga dimungkinkan. Keduanya bertipe
X ()
, yaitu, mereka berada di X Monad . Menggunakan>>
, yang merupakan tipe (cek dengan:t (>>)
dighci
)kami memiliki
(runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full")
kombinasi duaX ()
jenis tipeX ()
juga, dan dengan demikian dapat diikat ke kunci.EDIT Hilang
)
pada baris kode dengan>>
Edit2
modm
->modMask
.Sunting3 Semoga ini
xmonad.hs
berhasil.( Kenapa tidak belajar kamu Haskell untuk selamanya? )
sumber
>> (sendMessage $ JumptoLayout "Full")
ada beberapa kesalahan dengan konstruktor. Mungkin itu sesuatu yang mudah, yang akan saya pecahkan setelah mempelajari Haskell.modm
tidak berhasil, saya masih menggunakancontrolMask
.xmonad.hs
untuk memperbaikinya; lebih baik hanya melihat-lihat di sini, arsip konfigurasi dan melihat bagaimana orang lain melakukannya atau menggunakan yang disebutkanEZConfig
.X ()
untuk mengikat kunci seharusnya(runOrRaiseMaster ...) >> (sendMessage ...)
, menghasilkan,((...,...), (runOrR...) >> (send...) )
((
sebelumrun...
)