有没有办法使用快捷方式从窗口栏打开窗口?例如,按 Ctrl+1 打开左侧的第一个窗口,按 Ctrl+2 打开左侧的第二个窗口。
我目前正在使用 xfce4,但是如果在 xfce4 下不可能,是否有其他桌面环境允许这样做?
由于我为同一个应用程序打开了多个窗口,因此我不是在搜索与该应用程序相关的排序,而是像我下面所说的那样,在窗口中搜索。
答案1
只需编写一个小脚本并对您的系统进行小改动,它就可以完全按照您的描述进行安排。
原料
wmctrl
;可能需要安装。- 下面的脚本
xprop
,获取窗口属性。该程序已安装在您的系统上。- xfce 面板设置中的设置更改
- 其他键盘快捷键
如何设置
安装
wmctrl
:sudo apt-get install wmctrl
创建目录
~/bin
(/home/<yourname>/bin
)。将下面的脚本复制到一个空文件中,将其另存为panel_navigate
(无扩展名)~/bin
,然后使其可执行。更改面板设置:
转到设置管理器>“面板”>“项目”(选项卡)>“窗口按钮”>- “排序顺序” > 选择:时间戳
- “窗口分组”>选择:“从不”
- 确保“显示所有工作区或视口的窗口”联合国已勾选
- “排序顺序” > 选择:时间戳
添加键盘快捷键:
进入设置管理器 > “键盘” > “应用程序快捷键”,选择“添加”。添加命令:panel_navigate 1
将其设置为组合键Ctrl+1
现在您可以选择:
- 重复此过程以添加
panel_navigate 2
+Ctrl等2(直到 9)
(保存选项)或者(如果您不怕手动编辑配置文件):
您可以编辑该文件:
~/.config/xfce4/xfconf/xfce-perchanel-xml/xfce4-keyboard-shortcuts.xml
其中存储了键盘快捷键(在 中
xfce
)。使用 打开文件mousepad
并查找类似以下行:<property name="<Primary>1" type="string" value="panel_navigate 1"/>
复制该行,将其粘贴到下一行(插入),并将两次出现的 1 更改为 2,这样您将得到:
<property name="<Primary>1" type="string" value="panel_navigate 1"/> <property name="<Primary>2" type="string" value="panel_navigate 2"/>
等等..
确保缩进完全相同。重复此过程直到 9。
- 重复此过程以添加
注销并重新登录,它应该可以正常工作:
Ctrl+1
Ctrl+3
等等...
剧本
#!/usr/bin/env python3
import subprocess
import sys
def get_value(command):
return subprocess.check_output(["/bin/bash", "-c", command]).decode("utf-8").strip()
def run_command(command):
subprocess.Popen(["/bin/bash", "-c", command])
current_workspace = [l for l in get_value("wmctrl -d").splitlines() if l.split(" ")[2] == "*"][0][0]
wlist_ids = [item.split()[0:4] for item in get_value("wmctrl -l").splitlines()]
relevant = [item for item in wlist_ids if item[1] == current_workspace]
panel = []
for item in relevant:
data = get_value("xprop -id "+item[0])
if ("_TYPE_NORMAL" in data, "TYPE_DIALOG" in data).count(True) == 1:
panel.append(item)
try:
window = panel[int(sys.argv[1])-1][0]
run_command("wmctrl -ia "+window)
except IndexError:
pass
解释
解决方案是随机的。我发现命令 调用的窗口列表wmcrl -l
是按窗口的年龄排序的。通过让 xfce 面板执行相同的操作(设置),两个顺序完全对应。脚本所做的是创建一个窗口列表,过滤掉“真实的”可见窗口(使用xprop
),并通过命令 切换到所选窗口panel_navigate
,以窗口编号(从左到右)作为参数。
问题
我注意到一个例外:IDLE(python 解释器)窗口的 pid 为 0,并且它们的属性无法被“研究” xprop
。这些窗口不会出现在窗口列表中,并且会被脚本跳过。
笔记
虽然测试时组合键Ctrl+没有出现任何错误,但它可能会与某些应用程序发生冲突。选择(例如)++可能<number>
更安全
CtrlAlt1
答案2
不确定是否是同一应用程序,但Unity
您可以使用 切换应用程序super+number
,例如super + 1
= 启动器上的第一个项目,super + 2
= 启动器的第二项,super + n
= 启动器的第 n 项。这也有助于打开启动器上的任何项目,例如,如果 nautilus 是启动器的第一个项目,super + 1
将打开 nautilus 文件管理器。