Не юзайте ghc-8, там спид.
При этом ни тот, ни другой (и, насколько я знаю, гномовский тоже?) не умеют автоматом переключать профили настроек при переключении окон. И ещё они не умеют управлять режимами кольца на планшете (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
Ебашим переключение инвертирования цветов по кибиндингу индивидуально для каждого окна: 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
Продолжение Доделал ещё автоматическое переключение профилей планшета (привязок кнопок планшета к кнопкам клавиатуры или мыши, которые можно настроить в KDE-шном systemsettings) в зависимости от активного окна. Т.е. можно настроить отдельные профили для gimp, krita, mypaint, и они будут автоматически переключаться при переключении окошек. Сделал в двух вариантах — для XMonad и для KWin (на егоном js). Мне тут уже указали на некоторый бред в js-варианте, но оно как-то работает, а переделать пока руки не дошли.
И ещё сделал возможность привязывать режимы express ring к профилям планшета. Т.е. для каждого профиля можно иметь четыре набора настроек для кольца.
Код всё там же — github.com
* переключение на нужное окно или запуск соответствующей программы по одной и той же кнопке. Кнопки вида 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() {
$@
notify-send "$@ — 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 громкость вполне себе регулируется, ни в каких логах никаких внятных строчек нет, куда тут копать — непонятно
свистоплясяка с ноутом продолжается: хотел было попробовать комбинацию
thume.ca благо мануалов достаточно, да и возможностей масса, особенно приятна поддержка второго монитора. Главный минус всех этих тул, это то что они не умеют нормально работать с десктопами мак ос, раз ве что amethyst через хак умел перегонять окна в другие десктопы
Очень хочется awesome в мак ос, но чтото ничего внятного не нагуглилось. Зато нашелся Amethyst который обещает стать заменой xmonad-а, но по факту сильно меня напряг и я его снес ( И решил таки разобраться со slate --{{{ 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)
--}}}
paste.in.ua
paste.in.ua
(Если патчи примут, то скоро будет в апстриме).
Одно позволяет запускать лэйаут в ограниченном прямоугольнике — например, чтобы оставить поля вокруг браузера, если у вас слишком широкий монитор, а больше ничего на этот десктоп совать не хочется.
Второе позволяет использовать один из двух лэйаутов в зависимости от количества окон: если окон <= N, то используем один лэйаут, иначе второй.
Афтар — большой няша, запиливает фичи в течение пары часов после реквеста и консультирует в mailing-listах.
Downside: нет "родной панели", так что необходимо костылять-настраивать уже существующие. Короч, закостылял xmobar: github.com
У меня xmobar выглядит примерно так: i.imgur.com
Обосрите цвета, чтоли.
Сам bspwm (скрин не мой) выглядит вот так: fc09.deviantart.net
gsettings set org.mate.session.required-components windowmanager xmonad
и перелогинится. Может кому пригодится.
Текущее состояние: paste.in.ua
gitorious.org . Полное описание: gitorious.org
Я наконец-то стал пользователем Xmonad на телефоне с сенсорным экраном. Скриншот: Сейчас заморочка в том, что в 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? Захватывать или не захватывать?
Брать, как обычно, на 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, и снова по всё тем же граблям забег... "А чо, охуенные грабли!"©
Конфиг:
import XMonad
import XMonad.Config.Gnome
main = xmonad gnomeConfig
#177 в xmonad пофиксили — теперь можно и жабку нормально пользовать
наконец-то пресловутый тикет