to post messages and comments.

С управлением настройками планшетов wacom в kde всё немного грустно. В KDE4 есть более-менее нормальный модуль для этого, но 4е кеды вроде как уходят в прошлое. В Plasma 5 модуль есть, но недопортирован и хромает на обе ноги.
При этом ни тот, ни другой (и, насколько я знаю, гномовский тоже?) не умеют автоматом переключать профили настроек при переключении окон. И ещё они не умеют управлять режимами кольца на планшете (intuos pro).
А если у вас не кеды и не гном, а какой-нибудь lxde, то всё совсем грустно — остаётся только баш-скриптами xsetwacom запускать.
В итоге глюки кде-шного демона довели меня до того, что я сел и написал свой.
github.com
Тут есть несколько вещей:
* Пакет wacom-daemon содержит библиотеку, в которой реализована основная часть логики, и запускалки для этой библиотеки. hswcmcli — тестовая утилита, можно например с командной строки профили планшета переключать. hswcmd — демон, работающий на основе своего конфига (в yaml-формате), умеет автоматом переключать профили.
* Пакет xmonad-wacom содержит модули для автоматического переключения профилей настроек планшета при переключении текущего окна для XMonad. Там есть примеры конфигов xmonad. Поддерживается как интеграция с KDE-шным демоном через dbus, так и самостоятельная работа при помощи библиотеки wacom-daemon. Ещё показывает сообщения о перелкючении профилей через libnotify.
Всё это работает так: запускается демон (в случае xmonad — отдельный поток в рамках самого xmonad, в случае hswcmd — в нём), который помнит текущий профиль настроек, через udev отлавливает подключение планшета и при этом запускает xsetwacom с правильными параметрами. Этому демону через хаскельное API можно сказать "поменяй профиль", он запустит xsetwacom и запомнит новый профиль. Пользоваться этим API можно из XMonad (оконный менеджер сам знает, когда окна переключаются) или из hswcmd (он слушает иксовые события переключения окон). Ну или какие-нибудь ещё программы могут ту же библиотеку использовать, теоретически.
Т.е. если используется xmonad, то можно эту штуку интегрировать в xmonad, и больше ничего запускать не надо. Если используется какой-нибудь там опенбокс, то можно при старте иксов запускать hswcmd.
Всё это в процессе разработки и хреново документировано, но если сильно хочется можно пробовать.

Ебашим переключение инвертирования цветов по кибиндингу индивидуально для каждого окна: dump.bitcheese.net
github.com

# Compton goodness; doesn''t work with xsetroot
hsetroot -solid "#000000"
export DBUS_SESSION_BUS_ADDRESS=$(/usr/bin/dbus-launch --autolaunch `cat /var/lib/dbus/machine-id` --binary-syntax --close-stderr)
`ls -1 ~/.xmonad/xmonad-x* | sed q` &
compton -b --backend glx --vsync opengl --dbus

Продолжение #2789871.
Доделал ещё автоматическое переключение профилей планшета (привязок кнопок планшета к кнопкам клавиатуры или мыши, которые можно настроить в KDE-шном systemsettings) в зависимости от активного окна. Т.е. можно настроить отдельные профили для gimp, krita, mypaint, и они будут автоматически переключаться при переключении окошек. Сделал в двух вариантах — для XMonad и для KWin (на егоном js). Мне тут уже указали на некоторый бред в js-варианте, но оно как-то работает, а переделать пока руки не дошли.
И ещё сделал возможность привязывать режимы express ring к профилям планшета. Т.е. для каждого профиля можно иметь четыре набора настроек для кольца.
Код всё там же — github.com

что я более-менее часто использую в своём xmonad:
* переключение на нужное окно или запуск соответствующей программы по одной и той же кнопке. Кнопки вида Alt-X,<буква> показывают через gridselect список окон, сооветствующих букве (i — IM, w — web, y — почта, f — filemanagers etc). Если подходящее окно одно — сразу перебрасывает на него. И в gridselect сразу активен режим поиска, так что например Alt-X,i,xm,<Enter> меня сразу перебросит на окошко с чятом про xmonad. Для наиболее часто используемых групп окон также назначены мультимедийные кнопки на клавиатуре.
* переключение десктопов через win-tab (показывается опять же gridselect).
* для окошек, которым не назначено определённого воркспейса, автоматом создаётся новый воркспейс с именем по классу окна. Т.е. если я вдруг запускаю софтину, которую раньше не запускал (так что в конфиге она не отражена), то её окошко не будет мне путаться среди ныне видимых, а покажется на отдельном воркспейсе.
* окна pidgin автоматом раскидываются по воркспейсам в соответствии с группами в ростере. Один воркспейс для чятов по работе, один для болтовни, итд. Если чят/собеседника перетащить в ростере в другую группу, то в следующий раз его окошко откроется уже сразу на правильном воркспейсе.
* переключение десктопов на первом/втором мониторе по win-F1/F2.
* часть воркспейсов привязана к первому или второму монитору. Например, воркспейс с браузерами привязан к первому, поэтому Alt-X,w мне сейчас покажет браузер на первом мониторе. Но можно нажать win-F2, и сказать показывать браузер на втором, если мне вдруг захочется.
* по win-backspace переключение на предыдущее активное окно.
* Alt-j/k генерируют через xtest события скролла мышиного колеса вниз/вверх. Удобно что-нибудь скроллить в программах, которые не умеют скроллиться по j/k.
* Alt-e переключает на специальный воркспейс под названием "dashboard", на который по умолчанию никаких окон не назначено, т.е. он обычно пустой. Если вдруг зачем-то захочется увидеть обои. В домашней конфигурации у меня там ещё красивые часики (двое).

использую реже:
* по alt-w показывается через gridselect список всех открытых окон, и выбранное окно притаскивается на текущий воркспейс.
* по alt-/ показывается через gridselect список всех открытых окон, на выбранное окно переключаемся (и на тот воркспейс где оно находится).
* по win-m показывается список воркспейсов, на выбранный уносится текущее окно.
* по win-c через prompt спрашивается название воркспейса. Создаётся новый воркспейс и текущее окно уносится туда.

сделал, но использовал полтора раза, думал удобно будет, но пока ненужно:
* Alt-q показывает список групп окон, которые определены в специальном конфиге на yaml. Там что-нибудь типа {name: 'XMonad'; title: '[Xx][Mm]onad'}. При выборе группы из открытых окон выбираются те, которые подходят под условие, и все показываются на новом воркспейсе.
Сохранение/восстановление распределения окон по воркспейсам при перезапусках. Win-S сохраняет список окон на текущем воркспейсе в отдельный файлик ${workspacename}.workspace. Там для каждого окна сохраняется класс и ad-hoc выдуманный regexp для заголовка (первое-слово-заголовка.). Содержимое таких файликов интерпретируется как managehook, т.е. окна потом будут раскидываться с учётом сохранённого расположения.
* Alt-h генерирует событие мышиного клика.

Хочется после завершения запуска команды в эмуляторе-терминала получать какое-либо уведомление, что-то лучше

function n() {
[email protected]
notify-send "[email protected] — finished" -t 1
}

придумать можно. Кстати, если у кого есть опыт нормальной настройки urgency и xmonad с xmobar, то тоже приветствуется описание

свистоплясяка с ноутом продолжается: хотел было попробовать комбинацию @dmz из Lubuntu+xmonad вышла какая-то полная хрень: xmonad вроде втыкается, но клавиатура ведёт себя очень странным образом — работает только часть клавиш, например, Mod+Tab и Shift+Mod+Enter, но не Mod+L или Shift+Mod+C и без разницы Alt для Mod используется или Win, при этом выставление переключалки на CAPS через setxkbmap слетает, если нажать Mod+L, например, при этом в "чистом" LXDE ничего такого не наблюдается, да ещё и функ. клавиши не работают в xmonad хотя в LXDE громкость вполне себе регулируется, ни в каких логах никаких внятных строчек нет, куда тут копать — непонятно

Очень хочется awesome в мак ос, но чтото ничего внятного не нагуглилось. Зато нашелся Amethyst который обещает стать заменой xmonad-а, но по факту сильно меня напряг и я его снес ( И решил таки разобраться со slate thume.ca благо мануалов достаточно, да и возможностей масса, особенно приятна поддержка второго монитора. Главный минус всех этих тул, это то что они не умеют нормально работать с десктопами мак ос, раз ве что amethyst через хак умел перегонять окна в другие десктопы

Захотелось мне себе добавить еще один workspace и повесить его на mod-`. Вроде добавил, да теперь mod-1 и mod-` кидают на один и тот workspace. О_о. Вот кусок конфига: pastebin.com

Чят, помоги: где я в нем неправ?

Написал прибивалку 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)
--}}}

Нарисовал пару плюшек для xmonad-contrib:
paste.in.ua
paste.in.ua
(Если патчи примут, то скоро будет в апстриме).
Одно позволяет запускать лэйаут в ограниченном прямоугольнике — например, чтобы оставить поля вокруг браузера, если у вас слишком широкий монитор, а больше ничего на этот десктоп совать не хочется.
Второе позволяет использовать один из двух лэйаутов в зависимости от количества окон: если окон <= N, то используем один лэйаут, иначе второй.

Короче, bsmpwm — отличный WM. После двух лет на xmonad полет нормальный.
Афтар — большой няша, запиливает фичи в течение пары часов после реквеста и консультирует в mailing-listах.

Downside: нет "родной панели", так что необходимо костылять-настраивать уже существующие. Короч, закостылял xmobar: github.com

У меня xmobar выглядит примерно так: i.imgur.com
Обосрите цвета, чтоли.

Сам bspwm (скрин не мой) выглядит вот так: fc09.deviantart.net

Прибежал апдейт на MATE 1.6. Слететли настройки, в т.ч. настройки какой windowmanager использовать (у меня стоял xmonad). В новом релизе разработчики перепесочили систему хранения настроек (MateConf -> DConf), потому старые гайды не работают. Вернуть xmonad можно вот такой командой:
gsettings set org.mate.session.required-components windowmanager xmonad
и перелогинится. Может кому пригодится.

Наконец-то дошли руки сделать сохранение списка групп чатов из pidgin. А то если pidgin запускался и сразу открывал чаты, то xmonad не успевал к нему подключиться по dbus, чтобы узнать, куда какое окно кидать, и всё кидалось на один воркспейс — некузяво. Теперь если соединения с pidgin нет, то пользуемся данными из файлика, и сохраняем данные в этот файлик, как только получится подключиться.
Текущее состояние: paste.in.ua

Довёл до частично рабочего состояния поддержку XInput в XMonad. В идеале, это должно позволить, например, различать устройства ввода. Например, у меня пульт посылает сочетания клавиш типа «ctrl-p», «ctrl-shift-b» итп — хочется на эти клавиши повесить управление например mpd, но только для случаев когда они нажаты на пульте, а когда на клавиатуре — чтобы выполняли свои обычные функции.
Сейчас заморочка в том, что в X11 есть отдельные grab-ы устройств ввода для «core protocol» и для XInput. Обычно XMonad захватывает сочетания клавиш, которые собирается обрабатывать (используя core protocol), так что эти сочетания не передаются активному окну. В моей версии, XMonad захватывает эти сочетания, используя XInput. Тогда окнам не попадают события XInput, но попадают обычные события из core protocol. Так что, если забиндить клавишу паузы на пульте (посылает ctrl-p) на mpc pause, то при активном окне lowriter при нажатии этой кнопки mpd встанет на паузу И writer пошлёт документ на печать. Для того, чтобы сочетания клавиш не попадали активному окну, можно эти сочетания за-grab-ить через core protocol. Но core protocol не различает устройств ввода, так что, если, например, захватить ctrl-p через core protocol, то при нажатии паузы на пульте сделается mpd pause, writer ничего не сделает (это правильно); но при нажатии ctrl-p на клавиатуре writer тоже ничего не сделает. Т.е. можно или захватывать сочетание клавиш, чтобы оно никогда не попадало окнам, либо не захватывать, чтобы оно всегда попадало окнам. Решить, передавать ли сочетание в окно, в момент нажатия, в зависимости от чего-то — невозможно.
Так вот, вопрос. To grab or not to grab? Захватывать или не захватывать?

Собрал под Sid версию 0.11 xmonad'а. Попутно пришлось обновить libghc-x11-dev и libghc-x11-xft-dev. Так что если чтот другое сломается — репорты велькам.

Брать, как обычно, на packages.gnolltech.org Если есть заинтересованые в сборке под другие версии деба и/или убунту — пишите, буду собирать по мере возможности.

haskell.orgUnity 2D is different from Unity 3D in a few significant ways: Unity 2D comprises a set of programs (panel, launcher, etc) and allows you to choose which window manager you want to use. On the other hand, Unity 3D is a Compiz plugin, so it can be seen as a window manager (like Gnome Shell).

Говорят всем про code cohesion and coupling, и снова по всё тем же граблям забег... "А чо, охуенные грабли!"©

Из-за всякой хрени, которая норовит создать отдельное окошко, вроде youtube и vimeo и прочее, браузер удобно держать в tabbed layout. (http://xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Layout-Tabbed.html)