有没有办法使用快捷方式从窗口栏打开窗口

有没有办法使用快捷方式从窗口栏打开窗口

有没有办法使用快捷方式从窗口栏打开窗口?例如,按 Ctrl+1 打开左侧的第一个窗口,按 Ctrl+2 打开左侧的第二个窗口。

我目前正在使用 xfce4,但是如果在 xfce4 下不可能,是否有其他桌面环境允许这样做?

由于我为同一个应用程序打开了多个窗口,因此我不是在搜索与该应用程序相关的排序,而是像我下面所说的那样,在窗口中搜索。

答案1

只需编写一个小脚本并对您的系统进行小改动,它就可以完全按照您的描述进行安排。

原料

  1. wmctrl;可能需要安装。
  2. 下面的脚本
  3. xprop,获取窗口属性。该程序已安装在您的系统上。
  4. xfce 面板设置中的设置更改
  5. 其他键盘快捷键

如何设置

  • 安装wmctrl

    sudo apt-get install wmctrl
    
  • 创建目录~/bin( /home/<yourname>/bin)。将下面的脚本复制到一个空文件中,将其另存为panel_navigate(无扩展名)~/bin,然后使其可执行

  • 更改面板设置:
    转到设置管理器>“面板”>“项目”(选项卡)>“窗口按钮”>

    • “排序顺序” > 选择:时间戳
    • “窗口分组”>选择:“从不”
    • 确保“显示所有工作区或视口的窗口”联合国已勾选

    在此处输入图片描述

  • 添加键盘快捷键:
    进入设置管理器 > “键盘” > “应用程序快捷键”,选择“添加”。添加命令:

    panel_navigate 1
    

    将其设置为组合键Ctrl+1

    在此处输入图片描述

  • 现在您可以选择:

    • 重复此过程以添加panel_navigate 2+Ctrl2(直到 9)

    (保存选项)或者(如果您不怕手动编辑配置文件):

    • 您可以编辑该文件:

      ~/.config/xfce4/xfconf/xfce-perchanel-xml/xfce4-keyboard-shortcuts.xml
      

      其中存储了键盘快捷键(在 中xfce)。使用 打开文件mousepad并查找类似以下行:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      

      复制该行,将其粘贴到下一行(插入),并将两次出现的 1 更改为 2,这样您将得到:

      <property name="&lt;Primary&gt;1" type="string" value="panel_navigate 1"/>
      <property name="&lt;Primary&gt;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 文件管理器。

相关内容