LINUX.ORG.RU

Как в awesomeWM запретить мышке переползать с монитора на монитор?

 , ,


2

2

Здравствуйте.

Есть awesome и два монитора. В ~/.xinitrc прописаны xrandr-строчки, расписывающие их разрешение и взаимное расположение.

При перемещении мыши она по дефолту имеет возможность переползать с монитора на монитор. Я хочу заблокировать эту возможность, чтобы, сравнявшись с переходом, курсор не проваливался бы дальше на другой моник, а «классически» стопорился бы на границе экрана.

Чтоб перепрыгнуть/переместить что-то с моника на моник, вполне хватит дефолтных хоткеев осома, мышка мне тут только мешается.

Прошу идей и советов, спасибо за внимание.

★★★★★

Последнее исправление: piyavking (всего исправлений: 3)

Если есть желание покувыркаться с Lua, то примерно следующим образом:

  1. Где-нибудь в начале файла rc.lua добавить local is_mouse_locked = false

  2. Следующий фрагмент поместить внутрь блока client.connect_signal("manage", function (c, startup):

-- in this example
-- signal connected to every window and make action if 'is_mouse_locked' switcher active
-- however much better would be connect and disconnect signal to certain window by hotkey
c:connect_signal("mouse::leave",
    function(c)
        if is_mouse_locked then
            local cg = c:geometry() -- get window size
            local mg = mouse.coords() -- get current mouse position

            -- quick and dirty calculate for mouse position correction
            local newx = mg.x <= cg.x and cg.x + 5 or mg.x >= (cg.x + cg.width) and cg.x + cg.width - 5 or mg.x
            local newy = mg.y <= cg.y and cg.y + 5 or mg.y >= (cg.y + cg.height) and cg.y + cg.height - 5 or mg.y

            -- set mouse to new position
            mouse.coords({ x = newx, y = newy })
        end
    end
)
  1. И в завершение добавить кейбиндинг:

awful.key({ modkey, }, "v", function () is_mouse_locked = not is_mouse_locked end),

циклически переключающий состояние «заблокировано | свободно».

src

tt
()
Ответ на: комментарий от tt

У меня нечто подобное сделано на границы окошек.

P.S. оттуда же и скопировал.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 1)
Ответ на: комментарий от tt

поковыряю, спасибо.

но это обработка перемещения клиента, насколько я понял на первый взгляд, а простое перемещение курсора в этом фрагменте обрабатывается?

piyavking ★★★★★
() автор топика

Насколько я понимаю, за переползание указателя с монитора на монитор отвечают иксы, а awesome может разве что устроить для него «ловушку».

xenith
()

Можно поиграть с условным положением мониторов относительно друг друга, чтобы уехать на вспомогательный можно было только через один пиксель в нижнем левом углу, например…

Elyas ★★★★★
()
Ответ на: комментарий от Elyas

от изящества и простоты даже прибалдел слегка, респект.

я что-то подобное читал в гугле, там вообще рекомендовали отрывать друг от друга, чтоб даже угловым пикселом не соприкасались.

в среду до компа доберусь, буду пробовать, спасибо!

piyavking ★★★★★
() автор топика
Ответ на: комментарий от xenith

ну да, понятно, что в этой связке хорг - паровоз)

piyavking ★★★★★
() автор топика
Ответ на: комментарий от Elyas

О, вот это изобретательность, классное решение средствами только иксов.

xenith
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.