ウィンドウをポインター恐怖症にする方法は?


15

つまり、ウィンドウ上のポインターを移動しようとするたびに、ウィンドウが移動するはずです。「アナログクロックスクリーンレット」と「ファイル進行ダイアログボックス」があり、CCSMを使用して他のウィンドウの「常に手前に表示」するように調整しましたが、時々邪魔になります。

それが不可能な場合、ポインターを移動すると非表示になり、すぐ下のアプリケーションをクリックできるようにする方法はありますか?

さらに、それが不可能な場合、ウィンドウが存在しないかのように動作させることができますか?つまり、ウィンドウが表示されますが、ポインターはウィンドウを認識せず、その下のアプリケーションで正常に動作するはずです。アプリケーションの透明度を変更し、それが可能であれば機能させますか?


2
常にいくつかのウィンドウを表示したいのですが、その下にある他のウィンドウとの対話も許可する必要がありますか?
アンワル

はい、私はそのウィンドウにポインターを移動するときに、そのウィンドウ(「常に上に」を有効にして「ダイアログボックスをコピーする」)ウィンドウ(そのウィンドウにフォーカスすらしません)とやり取りしたくありません。メインウィンドウ(一番上に残っているウィンドウ)は、ウォーターマークのように動作する(アイデアが得られますか?)か、ポインターをその方向に移動すると脇に移動します
Hemant Yadav

1
それは珍しい要求なので、誰もそれをやったとは思わない。しかし、これは間違いなく可能です。使用するWindow Managerの拡張機能を作成する必要があります(compiz、私は推測します)。または、これらのウィンドウを別のデスクトップに保持し、「Super + some_number」でデスクトップを切り替えることができるようにキーを設定することを検討しましたか。一度にたくさんのウィンドウを開いたままにしておくと非常に快適です。
ハイエンジェル

1
Gnome Shell拡張機能「Workspaces To Dock」には、ドックがウィンドウをかわすためのオプションがあります。これは正確に求められているものではありませんが、これを達成する方法については、github.com / passingthru67 / workspaces-to-dockを参照してください
サミュエル

一見持ってスーパーで同様の質問では。誰かが... 50%未満の不透明度クリックthroughableでオブジェクトを作るのcompizプラグイン「不透明度、明るさと彩度」の機能があります示唆
月Stavěl

回答:


2

Bashスクリプトとxdotool == cursophobia.sh

概要
私はあなたのために働く解決策があると思う。これは、ウィンドウを選択できるbashスクリプトです。ウィンドウが選択されると、スクリプトは事前に定義された間隔でウィンドウとカーソル位置を継続的にポーリングします。カーソルが近すぎる場合、ウィンドウは邪魔になりません。

依存関係
このスクリプトはに依存していxdotoolます。インストールするには、実行しますsudo apt-get install xdotool

スクリプト:cursophobia.sh
次の内容で新しいbashスクリプトを作成し、実行可能にします。

#!/bin/bash

windowSelectionDelay=5  # How long to wait for user to select a window?
buffer=10               # How close do we need to be to border to get scared?
jump=20                 # How far do we jump away from pointer when scared?
poll=.25                # How often in seconds should we poll window and mouse?
                        # locations. Increasing poll should lighten CPU load.

# ask user which window to make phobic
for s in $(seq 0 $((windowSelectionDelay - 1)))
do
    clear
    echo "Activate the window that you want to be cursophobic: $((windowSelectionDelay - s))"  
    sleep 1
done
wID=$(xdotool getactivewindow)

# find some boundary info and adjustments
# determine where the window is now
info=$(xdotool getwindowgeometry $wID)
base=$(grep -oP "[\d]+,[\d]+" <<< "$info")

# move the window to 0 0 and get real location
xdotool windowmove $wID 0 0
info=$(xdotool getwindowgeometry $wID)
realMins=$(grep -oP "[\d]+,[\d]+" <<< "$info")
xMin=$(cut -f1 -d, <<< "$realMins")
yMin=$(cut -f2 -d, <<< "$realMins")

# find offset values for no movement. This is necessary because moving 0,0
# relative to the current position sometimes actually moves the window
xdotool windowmove --relative $wID 0 0
info=$(xdotool getwindowgeometry $wID)
diff=$(grep -oP "[\d]+,[\d]+" <<< "$info")
xOffset=$[xMin - $(cut -f1 -d, <<< "$diff")]
yOffset=$[yMin- $(cut -f2 -d, <<< "$diff")]

# move window back to original location
x=$(cut -f1 -d, <<< "$base")
y=$(cut -f2 -d, <<< "$base")
xdotool windowmove $wID $[x + xOffset] $[y + yOffset]

dispSize=$(xdotool getdisplaygeometry)
xMax=$(cut -f1 -d ' ' <<< "$dispSize")
yMax=$(cut -f2 -d ' ' <<< "$dispSize")

clear
echo "You can minimize this window, but don't close it, or your window will overcome its cursophobia"
# start an infinite loop polling to see if we need to move the window.
while :
do
    # get information about where the window is
    info=$(xdotool getwindowgeometry $wID)
    position=$(grep -oP "[\d]+,[\d]+" <<< "$info")
    geometry=$(grep -oP "[\d]+x[\d]+" <<< "$info")
    height=$(cut -f2 -dx <<< "$geometry")
    width=$(cut -f1 -dx <<< "$geometry")
    top=$(cut -f2 -d, <<< "$position")
    left=$(cut -f1 -d, <<< "$position")
    bottom=$((top + height))
    right=$((left + width))

    # save mouse coordinates to x & y
    eval "$(xdotool getmouselocation | cut -f 1-2 -d ' ' | tr ' :' '\n=')"

    # If the mouse is too close to the window, move the window
    if [ $x -gt $((left - buffer)) ] && [ $x -lt $((right + buffer)) ] && [ $y -gt $((top - buffer)) ] && [ $y -lt $((bottom + buffer)) ]; then
        #figure out what side we're closest to so we know which direction to move the window
        t="$((y - top)):0 $((jump + (y - top)))"
        l="$((x - left)):$((jump + (x - left))) 0"
        b="$((bottom - y)):0 -$((jump + (bottom - y)))"
        r="$((right - x)):-$((jump + (right - x))) 0"
        coord="$(echo -e "$t\n$l\n$b\n$r" | sort -n | head -n 1 | cut -f2 -d:)"

        # set the offset values for x and y
        newX=$(cut -f1 -d ' ' <<< "$coord")
        newY=$(cut -f2 -d ' ' <<< "$coord")

        #check to make sure we're not out of bounds
        if [ $((right + newX)) -gt $xMax ]; then
            newX=$((-1 * left + xOffset))
        elif [ $((left + newX)) -lt $xMin ]; then
            newX=$((xMax - width))
        fi
        if [ $((bottom + newY)) -gt $yMax ]; then
            newY=$((-1 * top + yOffset))
        elif [ $((top + newY)) -lt $yMin ]; then
            newY=$((yMax - height))
        fi

        # move the window if it has focus
        [ $(xdotool getactivewindow) -eq $wID ] && xdotool windowmove --relative $wID $((newX + xOffset)) $((newY + yOffset))
    fi
    sleep $poll
done

好みに合わせて一番上にある4つの変数を編集することを忘れないでください。このスクリプトがCPUを処理しているpoll場合は、変数を大きな値に増やしてみてください。

cursophobia.shの動作
スクリプトを作成して実行可能にしたら、実行します。ウィンドウを選択するように求められます。嫌悪感になりたいウィンドウをクリックして、カウントダウンが終わるまで待ちます。カウントダウンが終了すると、選択したウィンドウは嫌悪感になります。あなたは以上のウィンドウを助けるカーソルのその恐怖、近いターミナルウィンドウを来たりして、ターミナルウィンドウからスクリプトを殺すために準備ができたらCtrl+c

複数のディスプレイ
これは、疎遠なウィンドウを単一のディスプレイに制限することに注意してください。私は、複数のディスプレイで機能するように編集できます。


楽しい部分は問題ありません。できます。残念ながら、それは完全に私のプロセッサーの占有を食べます(約60%)。したがって、それは実際の使用可能なソリューションではありません。
ジェイコブVlijm

@JacobVlijm、プロセッサーを使いやすくするためにいくつかの変更を加えました。やってみよう。
b_laoshi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.