首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XMonad的无键盘鼠标手势

XMonad的无键盘鼠标手势
EN

Stack Overflow用户
提问于 2013-08-19 06:16:51
回答 1查看 887关注 0票数 2

我正在xmonad.hs中设置鼠标手势,并且我希望避免使用modMask修饰符来获得无键盘手势。问题是,在某些情况下(例如,空手势,只是简单的点击),我想让鼠标事件通过光标下的应用程序,但我还没有找到在XMonad中做到这一点的方法。否则,如果我添加了((0, button3), mouseGesture gestures),我将完全失去button3的“特定于应用程序”的功能。

我在想,如果事件不能很容易地转发,也许可以创建一个新的事件并进行调度。我考虑过使用spawn "xdotool click 3",但它似乎不起作用。有没有人尝试过类似的东西?否则,我需要一个至少有4个按钮的鼠标,因为大多数应用程序都会使用3个按钮……

EN

回答 1

Stack Overflow用户

发布于 2016-04-07 12:06:51

要让xdotool转发鼠标单击,需要使用--window参数确保它指向正确的窗口。例如,如果你的窗口id是79693135,那么xdotool click --window 79693135 3就会做你想做的事情。

下面的基本xmonad.hs说明了如何执行此操作以使无键盘鼠标手势正常工作:

代码语言:javascript
复制
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一样)绝对是正确的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18304191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档