i3中工作区滑动动画

i3中工作区滑动动画

如何在 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 上看到的动画,那么这些可能会更好。

相关内容