Это интересная идея! На данный момент предположим, что вы хотите отобразить только клавишу «f». Подход, который приходит мне на ум, состоит в том, чтобы сопоставить ключ с функцией, которая проверяет, открыты ли какие-либо окна. Если открытых окон нет, он запускает dmenu, предварительно заполняя его символом, который вы только что набрали (т. Е. «F»). Если открываются другие окна, он делает то, что обычно требуется для этого ключа.
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
Примечания:
- я не знаю, как узнать, если окно уже открыто, но я подозреваю, вы найдете функцию для этого в пакете xmonad или xmonad-вно ,
- Я не знаю, как запустить dmenu с уже введенным символом. Может быть, в XMonad.Util.Dmenu есть что-то, что поможет.
- Я думаю, вам нужно будет иметь отдельную запись в
additionalKeys
за каждый ключ, который вы хотите отобразить. Возможно, достаточно отобразить 26 алфавитных ключей.
Для получения дополнительной информации о внутренностях Xmonad, я рекомендую видео jekor в: part 1part 2
@closevoter xmonad является (письменный и), выполненный в подлинном Haskell. Вы буквально программируете систему окон. Вы не можете настроить xmonad без написания haskell. Это программирование. – AndrewC