是否可以在 Unity(14.04+)中循环切换工作区?

是否可以在 Unity(14.04+)中循环切换工作区?

我已经配置了键盘快捷键,Alt + 左键将我带到左侧的工作空间,Alt + 右键将我带到右侧的工作空间,但我更希望有一组键可以循环。理想情况下,类似

workspace 1 + Alt + tab ---> worskspace 2
workspace 2 + Alt + tab ---> worskspace 3
workspace 3 + Alt + tab ---> worskspace 4
workspace 4 + Alt + tab ---> worskspace 1

问题出在最后一行。我看不出有什么办法可以从工作空间 4 回到工作空间 1。如何移动到右边的模 4 呢?

答案1

循环浏览视口

使用一个小脚本,可以很好地浏览工作区(实际上是视口):

  • 向前

    在此处输入图片描述

    (如果到达最后一个视口,脚本将移动到第一个视口)

  • ...或者落后

    在此处输入图片描述

    (如果到达第一个视口,脚本将移动到最后一个视口)

剧本

#!/usr/bin/env python3
import subprocess
import sys

move = sys.argv[1]

# get the needed info from wmctrl -d
wsdata = subprocess.check_output(["wmctrl", "-d"]).decode("utf-8").split()
# retrieve total size of workspace
ws = [int(n) for n in wsdata[3].split("x")]
# panel/launcher height/width
pans = [int(n) for n in wsdata[7].split(",")]
# work area
wa = [int(n) for n in wsdata[8].split("x")]
# x/y resolution
res_h = pans[0]+wa[0]; res_v = pans[1]+wa[1]
# current position in the spanning workspace
VP = [int(n) for n in wsdata[5].split(",")]

def last_h():
    # test if we are on the last viewport horizontally
    return VP[0]+res_h == ws[0]

def first_h():
    # test if we are on the first viewport horizontally
    return VP[0] == 0

def last_v():
    # test if we are on the last viewport vertically
    return VP[1]+res_v == ws[1]

def first_v():
    # test if we are on the first viewport vertically
    return VP[1] == 0

if move == "next":
    if last_h() == False:
        command = str(VP[0]+res_h)+","+str(VP[1])
    elif last_v() == True:
        command = "0,0"
    else:
        command = "0,"+str(VP[1]+res_v)

if move == "prev":
    if first_h() == False:
        command = str(VP[0]-res_h)+","+str(VP[1])
    elif first_v() == True:
        command = str(ws[0]-res_h)+","+str(ws[1]-res_v)
    else:
        command = str(ws[0]-res_h)+","+str(VP[1]-res_v)

subprocess.Popen(["wmctrl", "-o", command])

如何使用

  1. 脚本需要控制端

    sudo apt-get install wmctrl
    
  2. 将脚本复制到一个空文件中,另存为through_viewports.py

  3. 将两个命令添加到两个不同的快捷键:

    python3 /path/to/through_viewports.py next
    

    转到下一个视口,然后:

    python3 /path/to/through_viewports.py prev
    

    转到上一个视口

    打开系统设置 > 键盘 > 快捷键 > 自定义快捷键。单击+并将两个命令添加到您喜欢的快捷键中。

就是这样该脚本会检测您的视口如何设置并循环浏览它们。

它是如何工作的,概念

在 Unity 中,视口排列在一个大矩阵中,所有这些一起构成了单个工作区,Unity桌面存在的意义。

使用命令:

wmctrl -d

在输出中,我们可以读取所需的所有信息,以找出我们当前在矩阵中的位置。

0  * DG: 5120x2400  VP: 0,0  WA: 65,24 1215x776  N/A
  • 5120x2400是所有视口(矩阵)的总大小
  • 0,0是矩阵中当前视口的 x/y 位置(左上角,像素)
  • 由此WA: 65,24 1215x776我们可以得出屏幕的分辨率(65,24是启动器/面板的宽度/高度,1215x776是剩余区域)

一旦我们获得正确的信息,脚本就会计算矩阵中的目标位置并使用以下命令进行设置:

wmctrl -o x,y

答案2

在 12.04 中,我通过使用 gconf-editor 编辑密钥解决了这个问题,但是在 16.04 中没有相同的密钥,因此下面是对我有用的方法:

sudo apt-get install compizconfig-settings-manager

安装 GUI 高级设置实用程序,然后

ccsm

然后我去了桌面墙 > 视口切换 > 允许环绕并勾选了该复选框。

相关内容