창을 포인터 공포증으로 만드는 방법?


15

포인터를 움직일 때마다 창이 움직여야 함을 의미합니다. "아날로그 시계 스크린 릿"과 "파일 진행 대화 상자"가 있는데 CCSM이있는 다른 창의 "항상 맨 위에"유지하도록 조정했지만 때로는 작업을 수행하는 데 방해가됩니다.

그것이 가능하지 않다면 포인터를 움직일 때 숨겨서 바로 아래의 응용 프로그램을 클릭 할 수있는 방법이 있습니까?

그것이 가능하지 않다면 창문이없는 것처럼 동작하도록 만들 수 있습니까? 나는 창을 볼 것이지만 포인터는 그것을 인식해서는 안되며 아래의 응용 프로그램에서 정상적으로 작동해야합니다. 응용 프로그램의 투명성을 변경하고 가능한 경우 작동하게 하시겠습니까?


2
일부 창을 항상 표시하고 싶지만 그 아래의 다른 창과 상호 작용할 수 있어야합니까?
Anwar

예, 포인터를 해당 창으로 이동할 때 해당 창과 상호 작용하고 싶지 않습니다 (예 : "항상 맨 위"가 활성화 된 "복사 대화 상자"). 그 아래의 창 메인 윈도우 (상단에 남아 일) 워터 마크처럼 행동 (당신은 아이디어를 얻을?) 아니면 내가 그것을 향해 포인터를 이동할 때 옆으로 이동해야합니다..
인 Hemant 야다 브를

1
특이한 요청이므로 아무도 그렇게하지 않았다고 생각합니다. 그러나 이것은 가능합니다. 사용하는 창 관리자의 확장 기능을 작성해야합니다 (compiz, 추측합니다) . 또는 "Super + some_number"를 사용하여 데스크톱간에 전환 할 수 있도록 해당 창을 별도의 데스크톱에 유지하고 설치 키를 고려해 보셨습니까? 한 번에 여러 개의 창문을 열어 두는 것이 매우 편안합니다.
Hi-Angel

1
Gnome Shell 확장 "Workspaces To Dock"에는 도크가 창을 피할 수있는 옵션이 있습니다. 이것은 정확히 요구되는 것은 아니지만 github.com/passingthru67/workspaces-to-dock 달성 방법에 대한 아이디어를 얻을 수 있습니다.
사무엘

수퍼 유저에 대한 비슷한 질문을 살펴보십시오 . 누군가가 50 % 미만의 불투명도를 가진 객체를 클릭 연결 가능하게 만드는 compiz 플러그인 "불투명도, 밝기 및 채도"의 기능이 있다고 제안합니다.
Jan Stavěl

답변:


2

배쉬 스크립트와 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

가장 좋아하는 네 가지 변수를 편집하는 것을 잊지 마십시오. 이 스크립트가 CPU를 작업하는 경우 poll변수를 더 큰 값으로 늘리십시오 .

cursophobia.sh 작동
스크립트를 작성하고 실행 가능하게 만든 후에 실행하십시오. 창을 선택하라는 메시지가 표시됩니다. cursophobic되고 싶은 창을 클릭하고 카운트 다운이 끝날 때까지 기다립니다. 카운트 다운이 끝나면 선택한 창이 cursophobic이됩니다. 커서가 커서 두려워 질 가능성이있는 창을 도울 준비가되면 터미널 창을 닫거나 Ctrl+ 를 사용하여 터미널 창에서 스크립트를 종료하십시오.c

다중 디스플레이
이것은 cursophobic window를 단일 디스플레이로 제한합니다. 여러 디스플레이에서 작동하도록 편집 할 수 있습니다.


재미있는 부분은 괜찮습니다. 효과가있다. 불행히도, 그것은 내 프로세서의 직업을 완전히 먹습니다 (약 60 %). 따라서 실제 사용 가능한 솔루션은 아닙니다.
Jacob Vlijm

@JacobVlijm, 프로세서를 쉽게하기 위해 변경했습니다. 사용해보십시오.
b_laoshi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.