마우스를 위쪽(또는 아래쪽, 왼쪽, 오른쪽)으로 움직일 때 드롭다운 터미널이 필요합니다. 이는 자동 숨김 패널을 구성하고 마우스 오버 시에만 드롭다운하거나 패널이 있는 경계까지 드롭다운하도록 구성하는 것과 유사합니다.
지금까지 딱 한 개 찾았는데방법예를 들어 단축키를 사용하여 F12예를 들어 xfce4-terminal --drop-down
.
XFCE 4.12를 사용하고 있는데 XFCE나 XFCE에 특별히 고정된 것은 아니기 xfce4-terminal
때문에 다른 데스크톱이나 터미널에서 이 기능을 지원하면 도움이 될 것 같습니다.
답변1
를 사용하면 이와 같은 작업을 수행할 수 있습니다 xdotool
. 예를 들어,
xdotool behave_screen_edge top search --name mywindowname windowactivate
마우스 움직임은 지속적으로 모니터링되며 화면 상단에서 다음과 같은 이름의 창을 검색합니다.내 창 이름창 관리자에 따라 표시되도록 합니다.
답변2
@meuh 님의 답변을 바탕으로 첨부된 스크립트를 생각해냈습니다. 그 기능은 다음과 같습니다.
- 양쪽에 2개씩, 상단에 1개씩 총 5개의 터미널을 생성합니다.
- 커서가 터미널의 높이/너비 내의 테두리에 닿으면 터미널은 처음에 최소화되고 활성으로 설정되고, 창이 활성화되고 테두리에 다시 닿으면 터미널이 사라집니다.
노트:
behave_screen_edge
나는 때때로 그 행동이 이상하다고 생각합니다. 무시되는 상황이 많은 것 같습니다. 이는 매우 불만족스럽습니다.- 애니메이션에도 멋진 드롭/슬라이드가 없습니다. 루프를 시도했지만
windowmove
bash 루프가 너무 느리고 보기에도 좋지 않습니다.
스크립트:
#!/bin/bash
# spawn drop in terminals
getLastWid() {
sleep 0.4s
wid=$(wmctrl -lp | 'grep' " Terminal " | awk '{print strtonum($1),$0;}' |
'sort' -n | 'tail' -1 | 'sed' -nE 's|^([0-9a-f]+) .*|\1|p')
}
getBorderWidth() {
# https://github.com/jordansissel/xdotool/issues/115
local X Y X0 Y0
eval $(xdotool getwindowgeometry --shell $1 | command grep '[XY]=')
X0=$X
Y0=$Y
xdotool windowmove --relative $1 0 0
eval $(xdotool getwindowgeometry --shell $1)
bw=$((X-X0))
bh=$((Y-Y0))
xdotool windowmove $1 $((X0-bw)) $((Y0-bh))
}
script=$(mktemp)
cat > "$script" <<"EOF"
#!/bin/bash
sw=1920 # screen width
sh=1080 # screen height
ph=35 # panel height (assumed it is at the bottom)
script=$0; pos=$1; wid=$2; bw=$3; bh=$4; firstUse=$5
# test if window is still open, if not close xdotool
if ! wmctrl -lp | 'grep' -q -i "$(echo "obase=16;$wid" | bc)"; then
pkill -i -f "xdotool behave_screen_edge.*$wid"
exit 1
fi
# choose target coordinates, where to move window and also to manually evalute clicks
eval $(xdotool getwindowgeometry --shell $wid) # sets HEIGHT, WIDTH
ww=$((WIDTH+bw/2)) # window width
wh=$((HEIGHT+bh/2+bw/2)) # window height
case $pos in
left1) x=0; y=$((sh-ph-wh-1-wh)) ; ;;
left2) x=0; y=$((sh-ph-wh-1)) ; ;;
top) x=$((sw/2-ww/2)); y=0 ; ;;
right1) x=$((sw-ww)); y=$((sh-ph-wh-1-wh)) ; ;;
right2) x=$((sw-ww)); y=$((sh-ph-wh-1)) ; ;;
esac
# on first use only move windows to their correct positions and hide them
if [ ! -z "$firstUse" ] && [ $firstUse == 1 ]; then
xdotool behave_screen_edge ${pos%*[0-9]} exec "$script" $pos $wid $bw $bh &
xdotool windowminimize $wid windowmove $wid $x $y
exit 0
fi
# evaluate mouse location now and exit if not correct
eval $(xdotool getmouselocation --shell | command grep '[XY]=')
case $pos in
left1|left2) if [ $Y -lt $y ] || [ $Y -ge $((y+HEIGHT)) ]; then exit; fi; ;;
right1|right2) if [ $Y -lt $y ] || [ $Y -ge $((y+HEIGHT)) ]; then exit; fi; ;;
top) if [ $X -lt $x ] || [ $X -ge $((x+WIDTH )) ]; then exit; fi; ;;
esac
#actually move and activate window and hide it, if it already is active
if [ $wid == $(xdotool getactivewindow) ]; then
xdotool windowminimize $wid
else
xdotool windowmove $wid $x $y windowactivate $wid
fi
EOF
chmod u+x "$script"
xfce4-terminal --working-directory="$HOME" & getLastWid && getBorderWidth $wid && "$script" left1 $wid $bw $bh 1
xfce4-terminal --working-directory="$HOME" & getLastWid && "$script" left2 $wid $bw $bh 1
xfce4-terminal --working-directory="$HOME" & getLastWid && "$script" right1 $wid $bw $bh 1
xfce4-terminal --working-directory="$HOME" & getLastWid && "$script" right2 $wid $bw $bh 1
xfce4-terminal --working-directory="$HOME" & getLastWid && "$script" top $wid $bw $bh 1