Haskell programming xmonad
Сегодня выдался довольно плодотворный день — в порыве настройки xmonad написал довольно убогий, но оригинальный eventHandlerHook и свой собственный layout.
Но давайте по-порядку. Когда просматриваешь картинки с помощью feh возникает следующая проблема — если окно изменяет размер (например при просмотре галлереи), то окно перемещается в (0,0), что очень неприятно. У этой проблемы есть решение — запускать feh для каждой картинки по-отдельности, но решение сверхресурсоёмко, к сожалению. Наверное был бы идеальным вариант в духе urxvtd, но на данный момент такого решения не существует, а патчить feh как-то не хочется. Я пошёл по другому пути — при запросе окна на изменения параметров смотреть не feh ли это, и если да, то размер изменять, но по прежнему центрировать. В итоге получился вот такой вот хук:
myHandleEventHook :: Event -> X All
myHandleEventHook e@(ConfigureRequestEvent {ev_window = w}) = withDisplay $ \dpy -> do
cname <- fmap resClass $ io $ getClassHint dpy w
ws <- gets windowset
wa <- io $ getWindowAttributes dpy w
bw <- asks (borderWidth . config)
let screenWidth = displayWidth dpy (defaultScreen dpy)
screenHeight = displayHeight dpy (defaultScreen dpy)
if (cname == "feh")
then do io $ configureWindow dpy w (ev_value_mask e) $ WindowChanges
{ wc_x = div (screenWidth — (ev_width e)) 2
, wc_y = div (screenHeight — (ev_height e)) 2
, wc_width = ev_width e
, wc_height = ev_height e
, wc_border_width = fromIntegral bw
, wc_sibling = ev_above e
, wc_stack_mode = ev_detail e }
when (member w ws) (float w)
io $ sync dpy False
(return (All False))
else (return (All True))
myHandleEventHook _ = return (All True)
Во-вторых я вспомнил о том, что давно хочу вертикальные табы для работы с браузером. Это наглядно, удобно и довольно экономно. Там есть что допилить (например прокрутку и древовидность), но оно и сейчас годно к употреблению:
goo.gl и
rghost.ru
Используется оно просто: vtabLayout = noBorders (vtabbed 200 LeftT myShrinkText myTheme)
P.S. Обещался ещё
@L29Ah сделать горизонтальные мультитабы. Это сложнее, но, надеюсь, что руки дойдут