Как я могу изменить поведение горячих клавиш в xmonad, если программа работает?

chvt позволяет Вам изменять свой виртуальный терминал.

От man chvt:

Команда chvt N делает/dev/ttyN приоритетным терминалом. (Соответствующий экран создается, если он еще не существовал. Для избавлений от неиспользованного VTs используйте deallocvt (1).) Сочетание клавиш (Ctrl-)LeftAlt-FN (с N в диапазоне 1-12) обычно имеет подобный эффект.

11
15.06.2014, 01:36
1 ответ

Смотря на contrib пакеты XMONAD, Вы найдете XMonad.Actions.WindowGo, который экспортирует следующую функцию:

runOrRaiseMaster :: String -> Query Bool -> X ()

который берет аргумент строки программы для выполнения, например, "Firefox"; и логический запрос, который используется, чтобы узнать, работает ли он уже через свойства X11, например. (className =? "Firefox") (см. вершину XMonad.Actions.WindowGo страница для вариантов).

Так, все, в чем Вы нуждаетесь, должно связать runOrRaiseMaster "firefox" (className =? "Firefox") к ключу Вы хотите, как объяснено в XMonad.Doc.Extending, через

((modMask, xK_f ), runOrRaiseMaster "firefox" (className =? "Firefox"))

как часть привязок клавиш Data.Map из Вашей конфигурации (детали не соглашаются с Вашим способом настроек это, т.е., весь Ваш xmonad.hs, посмотрите Добавляющие Привязки клавиш).

Обратите внимание, что нет никакого реального смысла в максимизации окна в XMonad. При установке вещей, как объяснено у Вас будет действие Mod4+f следующим образом:

  • если будет окно с соответствием имени класса "Firefox", то оно будет сфокусировано и установлено на ведущее устройство, т.е. в зависимости от Вашего недавнего расположения, будет большим окном
  • если никакое окно не будет соответствовать, то Firefox будет порожден и установлен на ведущее устройство.

Максимизация может быть эмулирована путем выбора Full расположение после вызова runOrRaiseMaster, как описан здесь:

("M-<F1>", sendMessage $ JumpToLayout "Full")

(обратите внимание, что этот пример также демонстрирует XMonad.Util.EZConfig разрешение более легких определений привязки клавиш)

Объединение этих двух вещей возможно, также. Оба имеют тип X (), т.е. они находятся в X Монадах. Используя >>, который имеет тип (свериться :t (>>) в ghci)

(>>) :: Monad m => m a -> m b -> m b

мы имеем (runOrRaiseMaster "firefox" (className =? "Firefox")) >> (sendMessage $ JumpToLayout "Full") как комбинация два X () типы типа X ()Также и это может таким образом быть связано с ключом.

Пропавшие без вести РЕДАКТИРОВАНИЯ ) в строке кода с >>

Edit2 modm -> modMask.

Edit3 это xmonad.hs надо надеяться, работы.

(Почему бы не изучить Вас Haskell для большой пользы?)

7
27.01.2020, 19:59
  • 1
    Спасибо за рабочий ответ и другую информацию и учебное руководство Haskell. Мне нравятся синтаксис Haskell и функциональная парадигма. Единственной вещью, которая не работает, является часть >> (sendMessage $ JumptoLayout "Full") существует некоторая ошибка с конструктором. Возможно, это - что-то легкое, которое я решу после изучения Haskell. –  xralf 24.11.2011, 15:08
  • 2
    я забыл: Все же modm не работает, я все еще использую controlMask. –  xralf 24.11.2011, 15:10
  • 3
    @xralf, (1) была недостающая скобка - она работает теперь? (2) мне было бы нужно Ваше целое xmonad.hs зафиксировать это; лучше просто взгляните здесь, архив конфигурации и посмотрите, как другие делают это или используют упомянутый EZConfig. –  sr_ 24.11.2011, 16:17
  • 4
    Скобка не сделала помог. Вот xmonad.hs файл, который я использую. –  xralf 24.11.2011, 18:13
  • 5
    результатов (1) скобки, все еще неправильно, действие типа X () связывать с ключом должно быть (runOrRaiseMaster ...) >> (sendMessage ...), получающийся в ,((...,...), (runOrR...) >> (send...) ) (a ( прежде run...) –  sr_ 24.11.2011, 18:44

Теги

Похожие вопросы