Написал прибивалку SIGSTOP'ом firefox при переключении на другой воркспейс. Довольно криво, но работает. Очень актуально.
--{{{ Fuck firefox
myLogHook = do
wsname <- gets (currentTag . windowset)
case wsname of
"web" -> fuckFirefox False
_ -> fuckFirefox True
fuckFirefox ye = liftIO $ do
(rc, out, ) <- readProcessWithExitCode' "pgrep" ["firefox"] []
mapM fuckIt $ lines $ out
where fuckIt s = signalProcess (if ye then sigSTOP else sigCONT) (CPid $ read s)
readProcessWithExitCode'
:: FilePath -- ^ command to run
-> [String] -- ^ any arguments
-> String -- ^ standard input
-> IO (ExitCode,String,String) -- ^ exitcode, stdout, stderr
readProcessWithExitCode' cmd args input = do
(Just inh, Just outh, Just errh, pid) <-
createProcess (proc cmd args){ std_in = CreatePipe,
std_out = CreatePipe,
std_err = CreatePipe }
outMVar <- newEmptyMVar
-- fork off a thread to start consuming stdout
out <- hGetContents outh
forkIO $ C.evaluate (length out) >> putMVar outMVar ()
-- fork off a thread to start consuming stderr
err <- hGetContents errh
forkIO $ C.evaluate (length err) >> putMVar outMVar ()
-- now write and flush any input
when (not (null input)) $ do hPutStr inh input; hFlush inh
hClose inh -- done with stdin
-- wait on the output
takeMVar outMVar
takeMVar outMVar
hClose outh
-- wait on the process
ex <- C.catch (waitForProcess pid >>= return) (\e -> seq (e :: C.SomeException) $ return $ ExitSuccess)
return (ex, out, err)
--}}}
Короче, bsmpwm - отличный WM. После двух лет на xmonad полет нормальный.
Афтар - большой няша, запиливает фичи в течение пары часов после реквеста и консультирует в mailing-listах.
Downside: нет "родной панели", так что необходимо костылять-настраивать уже существующие. Короч, закостылял xmobar: https://github.com/4DA/dotfiles/blob/master/bspwm/panel_xmobar
У меня xmobar выглядит примерно так: http://i.imgur.com/D3AFMd7.png
Обосрите цвета, чтоли.
Сам bspwm (скрин не мой) выглядит вот так: http://fc09.deviantart.net/fs70/f/2013/218/b/e/_arch___bspwm__not_ever_going_back_to_xmonad_by_earspl1t-d6gy760.png
Хочу плагин для xmonad, суть такова: при переключении с/на воркспейс с прыщелисом или конки оный ловит SIGSTOP/SIGCONT.