Выполнить команду, когда мышь касается края экрана в Awesome-wm

Я новичок в создании пользовательского lua для rc.lua в Awesome, и у меня возникли некоторые проблемы с тем, как запустить что-то в зависимости от положения мыши. Это то, что у меня есть до сих пор, но это ничего не делает.

-- Open todo when mouse hits right screen edge.
todo_timer = timer({timeout = 0.1})
todo_timer:add_signal("todopopup", function()
    if mouse.coords.x >= 3198 then
        scratch.drop("urxvt -e vim /home/ryan/to-do", "center", "right", 0.33, 1, "true")
    end
end)
todo_timer:start()
--

person Ryan Hasse    schedule 17.08.2012    source источник
comment
Райан, ты сам можешь ответить на свой вопрос. (Просто нажмите кнопку «Ответить».) Ваш ответ НЕ потерян. Просто нажмите на отредактированную... ссылку и скопируйте свой пост. Отправьте это в качестве ответа.   -  person Apache    schedule 18.08.2012


Ответы (2)


Вместо использования таймера вы можете/должны использовать mousegrabber следующим образом:

mousegrabber.run(function(mouse)
    if mouse.x > 3196 then
        -- Do your stuff here
    end
    -- Return true, to continue grabbing the mouse
    return true
end)

Проблема с этим подходом в том, что вы можете зарегистрировать только один mousegrabber за раз. Так что это идеальное решение, если вам просто нужно немного послушать движения мыши. Если вам нужно больше времени, вы можете остановить захват, когда вам нужен граббер для чего-то другого (в основном изменение размера и перемещение клиента), и запустить его, когда это будет завершено.

person Tim Roes    schedule 18.09.2012

Это работает почти так, как задумано. По какой-то причине блокнот появляется на экране 1 в первый раз и не центрируется по вертикали должным образом (эта проблема возникает только с горизонтальным положением «справа», я предполагаю, что это проблема с блокнотом), для меня, но это должно работать для людей у которых нет настройки нескольких мониторов или для запуска других команд по вашему выбору.

-- Open todo when mouse hits right screen edge.
local function todopad()
    scratch.drop("urxvt -e vimpager /home/ryan/to-do", "center", "right", .20, 800, "true", 2)
end

todo_timer = timer({timeout = 1})
todo_timer:add_signal("timeout", function()
    if mouse.coords()["x"] >= 3196 then
        todopad()
    end
end)
todo_timer:start()
--
person Ryan Hasse    schedule 18.08.2012