XMonad, как я могу сосредоточиться на конкретном окне по имени / имени класса? - PullRequest
0 голосов
/ 19 мая 2018

Как я могу сосредоточиться на конкретном типе приложения, например, на Firefox?

Я хочу связать это с привязкой ключа - чтобы это не было сделано в интерактивном режиме.

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Вы обязательно должны взглянуть на XMonad-Actions-WindowGo , особенно на raiseNextMaybe / raiseNext / runOrRaise

Что-то вроде

((modMask x .|. mod1Mask, xK_BackSpace), raiseNextMaybe (spawn "google-chrome --profile-directory='Default' --app='https://www.evernote.com/Home.action'") (appName =? "www.evernote.com__Home.action"))

Также обратите внимание на приложение xprop (оно позволяет получить класс окна и другие атрибуты)

0 голосов
/ 19 мая 2018
module WindowFinder where

import XMonad
import qualified XMonad.StackSet as W
import Control.Monad
import Data.Bool  (bool)

findWindows :: String -> X [Window]
findWindows name = do
  withWindowSet $ (\ws -> do
    forM (W.allWindows ws)
      (\w -> do
            s <- withDisplay $ \d -> fmap resClass . liftIO $ getClassHint d w
            return $ bool [] [w] (s == name) :: X [Window]
      ) >>= return . join
    )

И в контексте X ():

        win' <- findWindows "Chromium"
        when (length win' > 0)
          (windows $ W.focusWindow $ head win')

Вышеупомянутое, кажется, ведет себя весьма полезным образом, когда имеется несколько окон.Поведение выглядит так: первое возвращаемое окно - это либо окно, открытое в данный момент в рабочей области, либо последнее взаимодействующее окно этого типа приложения.

...