To ciekawy pomysł! Na razie załóżmy, że chcesz zamapować tylko klawisz "f". Podejście, które przychodzi mi do głowy, polega na odwzorowaniu klucza na funkcję, która sprawdza, czy są otwarte jakieś okna. Jeśli nie ma otwartych okien, uruchamia dmenu, wstępnie wypełniając je wpisanym znakiem (np. "F"). Jeśli są otwarte inne okna, robi to, co normalnie chcesz zrobić.
main = xmonad $ blah blah blah
`additionalKeys`
[
((0, xK_f), multiMapKey f someAction)
-- other mappings
]
multiMapKey :: Char -> X() -> X()
multiMapKey c someAction =
if ?a window is open?
then launch dmenu with c already entered
else someAction
Uwagi:
- nie wiem w jaki sposób dowiedzieć się, czy okno jest już otwarty, ale podejrzewam, znajdziesz funkcję tę w pakiecie xmonad lub xmonad-contrib .
- Nie wiem, jak uruchomić dmenu z już wpisaną postacią. Może jest coś w XMonad.Util.Dmenu, które pomoże.
- Myślę, że musisz mieć oddzielny wpis w
additionalKeys
dla każdego klawisza, który chcesz zmapować. Być może wystarczy mapowanie 26 kluczy alfabetycznych.
Aby dowiedzieć się więcej o wnętrzności xmonad, polecam filmy jekor za: part 1part 2
@closevoter xmonad jest (pisemne i) skonfigurowany w prawdziwej Haskell. Dosłownie programujesz system okien. Nie można skonfigurować xmonad bez pisania haskell. To programowanie. – AndrewC