Удивительные события wm keyup и keydown

Я использую Awesome Window Manager. Я хочу показать свою верхнюю панель, нажав mod4, а затем скрыть ее, когда я отпущу. Я устал передавать "keyup Mod4" в ужасно.ключ, но это не работает. Как я могу сказать, что хочу вызвать событие при нажатии клавиши?


person SteveDeFacto    schedule 12.08.2013    source источник


Ответы (4)


Пытаться

`awful.key({ modkey }, "", nil, function () staff here end)`

3-й параметр является обработчиком события «выпуск» при передаче.

person Victor Karamzin    schedule 14.09.2013

Я хотел того же! После некоторых исследований я придумал:

  • Используйте внешнюю программу для выполнения 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)
person Hahi    schedule 17.02.2014

Вы можете подключить сигнал к ключевому объекту:

key.connect_signal("press", function(k)
    -- Analyze k and act accordingly
end)

Подробнее о сигналах здесь: http://awesome.naquadah.org/wiki/Signals

person miniml    schedule 09.09.2013

Используя первое предложение из 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.

person grandchild    schedule 23.04.2015