我正在xmonad.hs中设置鼠标手势,并且我希望避免使用modMask修饰符来获得无键盘手势。问题是,在某些情况下(例如,空手势,只是简单的点击),我想让鼠标事件通过光标下的应用程序,但我还没有找到在XMonad中做到这一点的方法。否则,如果我添加了((0, button3), mouseGesture gestures),我将完全失去button3的“特定于应用程序”的功能。
我在想,如果事件不能很容易地转发,也许可以创建一个新的事件并进行调度。我考虑过使用spawn "xdotool click 3",但它似乎不起作用。有没有人尝试过类似的东西?否则,我需要一个至少有4个按钮的鼠标,因为大多数应用程序都会使用3个按钮……
发布于 2016-04-07 12:06:51
要让xdotool转发鼠标单击,需要使用--window参数确保它指向正确的窗口。例如,如果你的窗口id是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一样)绝对是正确的想法。
https://stackoverflow.com/questions/18304191
复制相似问题