Permalink
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
483 lines (388 sloc) 29.9 KB
- author: kusayuzayushko
website: http://www.blogger.com/profile/06596188182500269902
published: 2011-08-06 18:52:45.718000+00:00
content: |4
Мне понравилось, буду активно пользоваться. Не совсем понял, почему в
секции [HISTORY] такая короткая истоия (ограничена 20 символами?
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-06 20:48:18.857000+00:00
content: |4
Длина истории выставляется опцией `history_length`. По-умолчанию она
равна 20.
Почему не 100... Если пользователь регулярно использует (помнит их
сочетания клавиш) до 20 приложений, то скорее всего, клавиши всегда
будут постоянными для всех приложений. Но если он поставит,
предположим history_length=100, то будут гарантировано дублирующие
клавиши в истории. И тогда возможен такой сценарий... У пользователя
есть любимое приложение с постоянной клавишей A. Тут он решает
первым запустить другое приложение, которое имеет ту же клавишу, а
потом сразу своё любимое, в таком случае это приложение получит уже
другую клавишу.
При history_length=20, пользователь может запустить до 7 редко
используемых приложений, и сочетания других приложений не изменятся.
Если же пользователь регулярно использует около 25 окон (или
больше), то ему имеет смысл ставить длину истории как можно
максимальной. Но тут возможны случаи, когда клавиши будут прыгать
между приложениями.
Безусловно, было бы хорошо вести статистику по числу нажатых клавиш,
и определять, сочетания каких окон точно нельзя менять, но это пока
чуть в более долгосрочных планах.
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-07 18:50:21.133000+00:00
content: |4
громадное спасибо. Давно искал такое. Смущает толкьо возможное
перетирание, но посмотрю как будет на практике. Хотелось бы конечно чтоб
можно было гарантировано закрепить клавишы для определенных окон.
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-07 19:45:35.022000+00:00
content: |4
И вам спасибо. У меня сочетания клавиш остаются постоянными для всех
приложений, которые я часто использую, со дня использования xatk.
Кочевания клавиш возможны в некоторых довольно редких ситуациях:
* вы одновременно работаете, например, с 30 приложениями (у одного
приложения может быть много окон), и очерёдность запуска приложений
непредсказуема;
* вы не запускаете долго приложение (сочетания которого тем не менее
помните);
* выставлено слишком большое значение history_length, очерёдность запуска и
наборы приложений каждый раз меняются.
Но если вдруг такое горе случилось однажды и случайно (например,
запустили второй экземпляр xatk), то можно провести махинацию с ручным
редактированием истории в ~/.xatkrc.
Существенно уменьшить вероятность кочевания клавиш для относительно
часто используемых приложений можно попытаться за счёт введения
статистики, основанной на частоте использования определённых клавиш и
времени последнего раза их использования. Жёсткие привязки я вводить
пока не планирую, потому как, их надо вручную а) задавать, б) удалять.
В то время как это можно делать автоматически. (Но если мы в будущем
будем хранить статистику, то жёсткие привязки можно будет создавать
косвенно...)
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-08 10:08:21.366000+00:00
content: |4
@Slava,
В Арче замечательно работает на xfce. Оказалось даже в Убунту бегает, т.е.
получается зависимости от ДЕ нет.
Только в Убунту есть какая-то проблема с наутилосом. Может это вовсе с
наутилось проблема такая.
При открытие окна назначается второстепенная комбинация. Допустим если alt+n
должно поставиться, а ставиться alt+nm
Я так понимаю у наутилуса в бекграунде запущена первая копия, куда и уходит
первая комбинация. А при открытии обзора папок уже считается вторая.
Если вы еще сделаете назначение горячих клавиш, будет вовсе супер :) Чтоб
запускалось приложение, если оно еще не запущено. Или же переключалось если
уже запущено.
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-08 12:59:36.603000+00:00
content: |4
Можно еще небольшое пожелание, если такое возможно :)
Допустим у нас есть 3 запущенные окна к которым мы обращаемся по горячим
клавишам.
alt+g
alt+gh
alt+gj
Если мы работает с "alt+g" и часто на него переключаемся то удобно. А
теперь нам нужно активно работать с окном "alt+gh". Тут уже не так удобно
будет постоянно на него переключаться через 2 клавиши.
Как по мне, такую проблему можно решить, если реализовать следующее:
alt+g будет переключать на последнее активное окно с которым работал.
alt+gg будет принудительно на первое и т.д. по кругу как сейчас
Теперь получается если нам нужно окно "alt+gj" мы его так и вызываем
"alt+gj".
При следующем обращении "alt+g" переведет напрямую на "alt+gj".
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-08 18:20:58.226000+00:00
content: |4
Идея переключения на последнее активное окно в группе по простому
сочетанию мне нравится. Обобщу: при получении окном фокуса оно
перемещается на вершину стека для отдельной группы. Циклические
переключения происходят от вершины стека к началу. Так же
распределяются и сочетания клавиш. Хотя и теряется предсказуемость
прыжков на N-ое окно, я думаю, в большинстве случаев возможность
переключаться между недавними окнами группы важнее.
Жаль, свободного времени у меня сейчас немного. xatk находится в
альфа-стадии. Нереализованными остаются такие базовые вещи, как выход из
программы. Мне известен по крайней мере один непофиксенный баг. Так что,
рекомендую запастись терпением или же попробовать помочь проекту кодом.
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-09 08:34:45.014000+00:00
content: |4
У наутилуса, первую комбинацию кто украл я нашел. Было вот такое.
0x00c00025 -1 desktop_window.Nautilus vetala x-nautilus-desktop /h/
Решил через те самые правила, титулке "x-nautilus-desktop" присвоил
другое awn
спасибо.
Может там стоит добавить какой-то ignore list :)
Чтоб туда занести ручками ненужное, и оно не буде клавиши отбирать.
wmctrl -xl
У меня еще есть такие непонятные вещие:
0x03600001 0 N/A N/A /a/
Ворует "a". Но я пока что 'а' не использую. Но клавиша очень удобная. и что
плохо по классу или по title "N/A" переназначить не получается на другое awn
Запуск по горячим отдельных программ, я думаю тут ручками стоит позволить на
какие комбинации биндить. Было б удобно alt+t запустить. И переключиться. А
то сейчас приходится ставить ctrl+alt+t запустить. А там уже по alt
переключаться.
В остальном, знал бы я питон, с радостью пописал :) Ну придется посмотреть
что он из себя представляет, давно пора его тоже поучить.
//хотеть запуск программ по горячим
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-10 19:26:50.166000+00:00
content: |4
Игнор-лист хотел добавить, руки не дошли...
Что делать с окнами без хинтов, я пока не знаю. Если игнорировать/менять
awn, то это будет происходить для всех окон без классов и имён. Как-то можно
то окно идентифицировать по-другому?
Если сейчас даже добавить ручное назначение клавиш на команды, то они могут
здорово расходиться с историей. Окно, клавишу и команду надо хранить
вместе... с автоматическим определением команды и возможностью ручного
редактирования.
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-11 18:52:44.615000+00:00
content: |4
@Slava
Я так понял с тем окном 0x03600001 0 N/A N/A /a/
особо больших проблем не возникает. Оно только одно такое. У меня другому
приложению в хистори назначилось "а" а этому ушло уже l. В целом проблем не
создает :)
Мне кажется игнор лист был бы интересней на будущее, а то я вот пытаюсь
бороться с ненужными вещами:
title.(x-nautilus-desktop|launcher|panel|gnome-keyboard-properties|cairo-dock|gtk-window-decorator|synapse|synaptic) = jklmnbvcxxvcv
Не знаю или правильно, пытаюсь им дать awn, чтоб оно начинало брать буквы с
другой стороны клавиатуры :) Как-то помогает, но в хистори получается такой
бардак... страшно смотреть :)
jklmnbvcxxvcv /s/ /x/ /s/ /o/ /w/ /s/ /w/ /k/ = k
jklmnbvcxxvcv /s/ /x/ /s/ /o/ /w/ /s/ /w/ = k
jklmnbvcxxvcv /s/ /x/ /s/ /o/ /w/ /s/ = w
jklmnbvcxxvcv /it/ /m/ = u
и т.д.
Не смотря на эти вещи 2й день остальные мои любимые программы на нужных
клавишах. И в целом программка просто бомба в плане удобства. И я понял, что
запуск по горячим не особо и нужен, без проблем вызывается другой
комбинацией в паре в ctrl+alt. Особых неудобств нет тут.
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-11 19:38:43.113000+00:00
content: |4
@Александр
Думаю, вы неправильно задаёте правила. Правила задаются или по
заголовкам (title.*), или по классам (class.*). Класс — это то, что
выдает `xprop | grep WM_CLASS` после запятой или `wmctrl -xl` после
точки. Я так понял, вы задаете имена программ, это не то.
Присвоение всем окнам одного awn значит, что все они должны получить
одну и ту же клавишу. Так и задумано?.. Если нет, каждому окну в
отдельной строке нужно присваивать уникальное awn.
История действительно страшная. С удовольствием бы почитал лог на
выходных :)
replies:
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-11 21:01:06.280000+00:00
content: |4
таки да с правилом тем бардак. разберусь где там класс а где
титулка у кого. Пока что переименовал в class, а
x-nautilus-desktop вынес отдельно в правило тутулки, а то иначе
букву h ворует у наутилуса.
- author: Slava
website: http://vlevit.org
published: 2011-08-14 19:04:33.122000+00:00
content: |4
@Александр
Не могу воспроизвести эту проблему с историей. По идее такое не должно
происходить, какие бы правила не задавались. Если не затруднит, попробуйте
повторить эту проблему (предварительно удалив этот ужас из истории:)) и
вышлите мне лог (задается опцией --log-file) на levit.slava на гмэйл.ком.
(Предварительно убедитесь, что в логе не сохранилась конфиденциальная
информация). Спасибо.
replies:
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-08-18 07:50:18.815000+00:00
content: |4
@Slava,
Отправил логи на почту, хотя мне кажется не стоит тратить время, оно
появляется когда я делал выборку окон через неправильные правила.
replies:
- author: Slava
website: http://vlevit.org
published: 2011-08-19 18:27:38.720000+00:00
content: |4
Спасибо за лог.
Проблема проявлялась по двум причинам:
1. xatk не чистит за собой заголовки окон после выхода
(сделаю к выходу версии 0.1)
2. была ошибка при проверке правил на совпадение (уже
исправлено).
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-09-14 05:26:41.528000+00:00
content: |4
Эх Slava, беда. Я уже устал бороться с этими класами и титулками и
всегда объязательно что-то украдет и поменяет бинды, когда начинаешь
запускать еще какие окна-приложения, которые ранее не запускались. И при
этом хистори размер не особо помогает. Кажись оно уже все клавишы
поназначало.
Нужно что-то делать. Вижу у людей с этим тоже проблемы как и у меня. И
предлагали секцию, где можно указать клавиши, и чтоб их не меняло. Да и
черный список тоже нужен. Куча куча окон и каких-то panel и просто
непоянтно что, которые вовсе не нужны и на все оно биндит:(
replies:
- author: Slava
website: http://vlevit.org
published: 2011-09-14 16:44:56.274000+00:00
content: |4
Я предлагаю более тщательно следить за изменениями в xatk :)[^1]
Жёсткая привязка клавиш уже реализована[^2]
Список игнорирования определённых окон уже реализован[^3]
Блокировку кучи непонятных окон (панель, декстоп) планируется
сделать автоматической.[^4] Думаю, скоро.
Если все клавиши уже заняты, то значит, длина история 27 или больше,
а поэтому все клавиши без приоритетов и прыгание клавиш неминуемо.
Чтобы понять, как новые настройки задаются, достаточно посмотреть в
обновлённый стандартный конфиг: xatk --print-defaults
[^1]: Читая [эту
ленту](http://code.google.com/feeds/p/xatk/updates/basic) можно быть
в курсе всех обновлений в xatk (новые ревизии, комментарии и т.п.)
[^2]: <http://code.google.com/p/xatk/source/detail?r=cec16fc3cecb735b54104f58e7d4925b6f727cb9>
[^3]: <http://code.google.com/p/xatk/source/detail?r=1601da1ae9b9cf72154e117bc010ead9130c3433>
[^4]: Обсуждение здесь: <http://code.google.com/p/xatk/issues/detail?id=3>
replies:
- author: Александр
website: http://www.blogger.com/profile/07128218751602101317
published: 2011-09-14 20:57:42.988000+00:00
content: |4
Я смотрю то версия все та же, думал все так же грустно :) Но
оказывается там работа кипит.
Благодарю!
- author: Slava
website: http://vlevit.org
published: 2011-09-14 16:51:39.430000+00:00
content: |4
> Вижу у людей с этим тоже проблемы как и у меня.
Я был бы рад общаться с этими людьми
[тут](http://groups.google.com/group/xatk-discuss) , а о багах и
запросах [тут](http://code.google.com/p/xatk/issues/list)
- author: Anonymous
published: 2012-12-24 14:45:26.710000+00:00
content: |4
зарастите у меня возник оффтоповый вопрос в виндовс была задача сделать
модификатор стиля окон который делал прозрачным и проницаемым для событий
мышки выбранное окно плюс делал его поверх всех окон то есть события мышки
минуя модифицированное окно отправляются в пиксель окна лежащий за
модифицированным окном которая была решена при помощи аутоита (это такой
скриптовый язык на основе виндовс апи) отдельное спасибо участникам форума
<http://autoit-script.ru/> собственно сам скрипт
:::autoit
#include
#include
#include
#include
#include
;выбор окна для прозрачности и проницаемости мышкой
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("transform_to_ win", 489, 194, 428, 368)
$Label1 = GUICtrlCreateLabel("none", 8, 16, 473, 17)
$Input1 = GUICtrlCreateInput("150", 8, 48, 473, 21)
$Label2 = GUICtrlCreateLabel("Введите число от 0 до 255 чтобы задать прозрачность окна (по умолчанию 150) и нажмите", 11, 72, 466, 17)
$Label3 = GUICtrlCreateLabel("кнопку дальше , наведите на выбронное окно и выждете 10 секунд", 72, 96, 347, 17)
$Button1 = GUICtrlCreateButton("Дальше", 8, 120, 473, 49, $WS_GROUP)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
Sleep(5000)
$set00 = GUICtrlRead($Input1)
$txt0 = _WinAPI_GetMousePos()
$txt1 = _WinAPI_WindowFromPoint($txt0)
$txt2 = _WinAPI_GetWindowText($txt1)
Sleep(5000)
_WinStyles()
$Label1 = GUICtrlCreateLabel($txt2, 8, 16, 473, 17)
EndSwitch
WEnd
Func _WinStyles()
Dim $txt2
$hWnd = WinGetHandle($txt2)
$nStyle = _WinGetStyle($hWnd, 0)
$nExStyle = _WinGetStyle($hWnd, 1)
_WinSetStyle($hWnd, -1,BitOr($nExStyle, BitOr($WS_EX_TRANSPARENT, $WS_EX_TOPMOST)))
WinSetTrans($hWnd,"",$set00);заменил 150 на переменую
WinSetOnTop($hWnd,"",1)
EndFunc
Func _WinSetStyle($hWnd, $nStyle = -1, $nExStyle = 0)
Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
Local Const $SWP_NOMOVE = 0x2, $SWP_NOSIZE = 0x1, $SWP_SHOWWINDOW = 0x40, $SWP_NOZORDER = 0x4
Local $iFlags = BitOR($SWP_SHOWWINDOW, $SWP_NOSIZE, $SWP_NOZORDER)
If $nStyle = -1 Then
$nStyle = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)
EndIf
$Pos = WinGetpos($hWnd)
$x = $Pos[0]
$y = $Pos[1]
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_STYLE, "int", $nStyle)
DllCall("User32.dll", "int", "SetWindowLong", "hwnd", $hWnd, "int", $GWL_EXSTYLE, "int", $nExStyle)
DllCall("User32.dll", "int", "SetWindowPos", "hwnd", $hWnd, "hwnd", 0, "int", $x + 1, "int", $y + 1 , "int", 0, "int", 0, "int", $iFlags)
EndFunc
Func _WinGetStyle($hWnd, $iIndex = 0)
Local Const $GWL_STYLE = -16, $GWL_EXSTYLE = -20
Local $iGWL_Index = $GWL_STYLE
If $iIndex > 0 Then
$iGWL_Index = $GWL_EXSTYLE
EndIf
Local $aStyles = DllCall('User32.dll', 'long', 'GetWindowLong', 'hwnd', $hWnd, 'int', $iGWL_Index)
Return $aStyles[0]
EndFunc
можно ли как то сделать аналогичное в линуксе на основе иксорг и питона
replies:
- author: Anonymous
published: 2012-12-24 14:51:31.815000+00:00
content: |4
поднимал такую тему на <http://forum.ubuntu.ru/index.php?topic=209467.0>
дальше советов не заморачиваться не идёт
- author: Vyacheslav Levit
website: http://vlevit.org
published: 2012-12-25 20:03:22.870000+00:00
content: |4
Задача сделать окно прозрачным по идее не должна вызвать
проблем, особенно, если воспользоваться готовыми инструментами
типа transset или transset-df.
Сделать окно поверх остальных, пожалуй, ещё проще: нужно
свойства окна _NET_WM_STATE установить в _NET_WM_STATE_ABOVE,
см.[^1]. Из командной строки это можно сделать с помощью xprop
или wmctrl:
wmctrl -r :SELECT: -b add,above
А вот простого способа, как сделать окно прозрачным для событий
клавиатуры и мыши я не вижу (хотя это не значит, что его нет,
так как я не гуру в иксах). По хорошему, я думаю, правильно это
реализовывать в композитном менеджере (например, в виде
плагина). Если всё же пытаться реализовывать данный функционал
на стороне клиента, то мне приходит одно решение в лоб:
захватить клавиатуру (XGrabKeyboard) и указатель (XGrabPointer)
эксклюзивно и ретранслировать все события с помощью XSendEvent
(или расширения XTest) в нужные окна. Но это хак. Намного легче
сделать непрозрачное окно под всеми, а все остальные —
полупрозрачными.
[^1]: <http://standards.freedesktop.org/wm-spec/wm-spec-latest.html#id2578152>
replies:
- author: Anonymous
published: 2012-12-27 12:20:05.992000+00:00
content: |-
спасибо за совет