如何在 ArchLinux 上的 i3 中制作工作区滑动动画?
我不想使用完整的 DE,我现在使用 compton 作为合成器,但它只在切换工作空间时提供淡入/淡出,我无法让它执行滑动动画,例如 KDE 或侏儒。
我不介意安装另一个合成器,但如果可能的话,我希望能够使用 compton 和 i3 来完成。 (我不介意不必使用更底层的 api 并自己编写动画,但我不知道从哪里开始)
第二步是像在 MacO 上(或者现在在 Windows 10 上)一样进行工作区切换,您在触控板上拖动手指,它就会在工作区之间平稳切换:如果您停止拖动,工作区就会弹回原位。 (我说的是这)在 Linux 系统上进行设置真是太酷了。我正在使用 Libinput (和 libinput 手势),但我不知道是否有这样的功能。
如何在 ArchLinux 上使用 i3 获得最接近 MacOs/Windows10 工作区切换体验?
答案1
这是我很久以前就做过的事情,但可能不应该这样做,这是令人难以置信的黑客和低效! :P
它基本上制作当前屏幕的屏幕截图,并将其滑到一侧,一次一个像素。 (我猜速度取决于计算机。)
我有一个 bash 脚本goto_to_workspace.sh
,每次我使用以下代码更改工作区时都会触发该脚本:(脚本将参数编号作为工作区编号,例如goto_to_workspace.sh 4
:)
WORKSPACE=$1
WKSP=`xprop -root -notype _NET_CURRENT_DESKTOP | sed 's#.* =##'`
CURRENT_WORKSPACE=`expr 1 + $WKSP`
if [ $CURRENT_WORKSPACE -ne $WORKSPACE ]; then
scrot -q 50 PRTSRC.jpeg
feh PRTSRC.jpeg&
FEH_WINDOW=$!
#WAIT (give i3 time to switch workspace in the background)
sleep .2
fi
slide_FEH_LEFT(){
LONG_LINE="move left 1px"
for i in {1..11}; do
LONG_LINE=$LONG_LINE","$LONG_LINE
done
i3-msg "[class=feh] $LONG_LINE"
}
slide_FEH_RIGHT(){
LONG_LINE="move right 1px"
for i in {1..11}; do
LONG_LINE=$LONG_LINE","$LONG_LINE
done
i3-msg "[class=feh] $LONG_LINE"
}
if [ $CURRENT_WORKSPACE -gt $WORKSPACE ]; then
slide_FEH_RIGHT
else
slide_FEH_LEFT
fi
#SIMPLE KILL AFTER 500ms
{ sleep .5 && kill $FEH_WINDOW; } &
编辑:更深入地研究问题。使用 wmctrl 代替会更聪明。
因此,向下的功能可以是例如:(对于我的 1920x1080 屏幕)
slide_FEH_DOWN_wmctrl(){
FEH_ID=`wmctrl -l|grep "PRTSRC.jpeg$"|awk '{print $1}'`
for (( c=0; c!=1100; c=c+10 )) do
wmctrl -i -r $FEH_ID -e 1,0,$c,1920,1080
done
}
我还尝试使用 xlib (c 或 python)快速执行某些操作,但它不如 wmctrl 顺利。因此,如果有人可以做得更好,请告诉我们。
EDIT2:当然你需要 feh 来坚持,例如在你的 i3 配置中:
for_window [class="feh"] floating enable, sticky enable, border pixel 0, move absolute position 0 px 0 px
答案2
这很可能是可能的,尽管我还没有找到实现它的方法。
我已经使用 i3wm 五年了。它的目标是快速,没有不必要的绒毛。引用 i3wm.org 的话:“不要臃肿,不要花哨”
您的请求似乎超出了该窗口管理器的范围;如果您确实想要流畅的动画,例如 KDE 或 Gnome 上看到的动画,那么这些可能会更好。