2

xmonad.hs でマウス ジェスチャを設定していますが、modMask 修飾子を使用してキーボードを使用しないジェスチャを取得したくありません。問題は、カーソルの下にあるアプリケーションにマウスイベントを通過させたい場合 (たとえば、空のジェスチャー、単純なクリックなど) があることですが、XMonad でそれを行う方法が見つかりませんでした。それがなければ、 を追加する((0, button3), mouseGesture gestures)と、 の「アプリケーション固有の」機能が完全に失われますbutton3

イベントを簡単に転送できない場合は、新しいイベントを作成してディスパッチできるのではないかと考えていました。使おうと思ったのspawn "xdotool click 3"ですが、うまくいかないようです。誰かが似たようなことを試したことがありますか?それ以外の場合は、ほとんどのアプリが積極的に 3 つのボタンを使用するため、少なくとも 4 つのボタンを備えたマウスが必要です...

4

1 に答える 1

0

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

NB: これにボタン 1 を使用することはお勧めできません。これは、ボタン 1 で通常使用されるテキストの選択やその他のマウスドラッグ機能に干渉するためです。

于 2016-04-07T04:06:50.770 に答える