Я использую Awesome Window Manager. Я хочу показать свою верхнюю панель, нажав mod4, а затем скрыть ее, когда я отпущу. Я устал передавать "keyup Mod4" в ужасно.ключ, но это не работает. Как я могу сказать, что хочу вызвать событие при нажатии клавиши?
Удивительные события wm keyup и keydown
Ответы (4)
Пытаться
`awful.key({ modkey }, "", nil, function () staff here end)`
3-й параметр является обработчиком события «выпуск» при передаче.
Я хотел того же! После некоторых исследований я придумал:
- Используйте внешнюю программу для выполнения
echo 'mywibox[1].visible = true' | awesome-client
при нажатии mod4 иecho 'mywibox[1].visible = false' | awesome-client
при отпускании. - Используйте другую клавишу, а не модификатор, например Меню (рядом с правым Ctrl), потому что по какой-то причине вы не можете подключить событие нажатия и отпускания к mod4 (или это просто не работает).
Вот мое решение (требуется таймер, потому что нажатая клавиша отправляет события, пока она нажата):
-- Put it somewhere at the beginning
presswait = { started = false }
-- Put it in key bindings section (globalkeys = within awful.table.join)
awful.key({ }, "Menu", function()
if presswait.started then
presswait:stop()
else
-- One second to tell if key is released
presswait = timer({ timeout = 1 })
presswait:connect_signal("timeout", function()
presswait:stop()
-- Key is released
for i = 1, screen.count() do
mywibox[i].visible = false
end
end)
-- Key is pressed
for i = 1, screen.count() do
mywibox[i].visible = true
end
end
presswait:start()
end)
Вы можете подключить сигнал к ключевому объекту:
key.connect_signal("press", function(k)
-- Analyze k and act accordingly
end)
Подробнее о сигналах здесь: http://awesome.naquadah.org/wiki/Signals
Используя первое предложение из https://stackoverflow.com/a/21837280/2656413, я написал этот скрипт Python: https://github.com/grandchild/autohidewibox
Что он делает, так это запускает xinput
в фоновом режиме и анализирует его вывод. Можно было бы и /dev/input/event1
парсить прямо в питоне, но мне было лень.
Затем он передает следующий код lua в awesome каждый раз, когда клавиша нажата или отпущена:
echo 'for i, box in pairs(mywibox) do box.visible = true end' | awesome-client
а также
echo 'for i, box in pairs(mywibox) do box.visible = false end' | awesome-client
соответственно.
Обновлять:
Для потрясающего использования 4+:
echo "for s in screen do s.mywibox.visible = false end" | awesome-client
or true
.