Жесты мыши без клавиатуры для XMonad

Я настраиваю жесты мыши в своем xmonad.hs, и мне бы хотелось избежать использования модификатора modMask для получения жестов без клавиатуры. Проблема в том, что есть случаи (например, пустой жест, простой щелчок), когда я хотел бы, чтобы событие мыши передавалось приложению под курсором, но я не нашел способа сделать это в XMonad. Без этого, если я добавлю ((0, button3), mouseGesture gestures), я полностью потеряю "специфичные для приложения" функциональные возможности button3.

Я думал, что, если события не могут быть легко перенаправлены, возможно, можно будет создать и отправить новое. Я думал об использовании spawn "xdotool click 3", но похоже, что это не работает. Кто-нибудь пробовал что-нибудь подобное? В противном случае мне понадобится мышь как минимум с 4 кнопками, поскольку большинство приложений активно используют три ...


person BruceBerry    schedule 18.08.2013    source источник
comment
Добились ли вы дальнейшего прогресса в этом @BruceBerry?   -  person vincent    schedule 23.12.2016


Ответы (1)


Чтобы заставить xdotool пересылать ваши щелчки мыши, вам нужно убедиться, что он нацелен на правильное окно, используя параметр --window. Например, если ваш идентификатор окна 79693135, тогда xdotool click --window 79693135 3 сделает именно то, что вы хотите.

В следующем базовом xmonad.hs показано, как это сделать, чтобы жесты мыши без клавиатуры работали правильно:

import XMonad
import qualified XMonad.Actions.CycleWS as Workspace
import XMonad.Actions.MouseGestures ( mouseGesture, Direction2D(..) )
import qualified XMonad.Util.EZConfig as EZ
import XMonad.Util.Run ( safeSpawn )

import qualified Data.Map as Map

mouseGestureButton :: Button
mouseGestureButton = button3 -- right click

sendMouseClickToWindow :: Window -> X ()
sendMouseClickToWindow win = 
    safeSpawn 
        "xdotool" ["click", "--window", show win, show mouseGestureButton]

myMouseGestures :: [([Direction2D], Window -> X ())]
myMouseGestures =
    [ ([R], const Workspace.nextWS) -- move to the next workspace
    , ([L], const Workspace.prevWS) -- move to the previous workspace
    , ([], sendMouseClickToWindow)
    ]

addMouseGestures :: XConfig a -> XConfig a
addMouseGestures = 
    flip EZ.additionalMouseBindings 
      [((0, mouseGestureButton), mouseGesture $ Map.fromList myMouseGestures)]

main = xmonad $ addMouseGestures def

Примечание: использовать для этого кнопку 1 - не лучшая идея, потому что это будет мешать выделению текста и другим функциям перетаскивания мышью, обычно используемым с кнопкой 1. Поэтому использование кнопки 3 (как это сделал OP) определенно является правильной идеей.

person Matt_M    schedule 07.04.2016
comment
Обновление: оказывается, что некоторые приложения (например, апплеты на панели задач Eclipse и Xfce) не реагируют на щелчки мыши, отправленные через xdotool. Однако нажатие alt или shift при щелчке правой кнопкой мыши работает. - person Matt_M; 10.04.2016
comment
Достигли ли вы дальнейшего прогресса в этом @Matt_M? - person vincent; 23.12.2016
comment
Неа. Боюсь, это лучшее, что у меня есть. - person Matt_M; 24.03.2017