使用 wmctrl 创建快捷键并将其绑定到键盘快捷键

使用 wmctrl 创建快捷键并将其绑定到键盘快捷键

我对应用程序窗口之间切换的当前状态不满意。

假设我有三层终端窗口,标题如下:

  1. 当地的
  2. 根@本地主机
  3. 用户@远程主机

使用 ALT+TAB 在这三个终端之间切换很无趣。

我是一个快速的十指触摸打字者。

我寻找一种切换的方法直接地到窗口。我不想因为查看列表并选择一个条目而使眼睛负担过重。

例如:如果我想切换到标题为用户@远程主机,我只想输入一些神奇的键,然后输入“用户”,仅此而已。就像我们今天看到的所有那些不错的自动完成输入一样。

我想保留 ubuntu 自带的默认窗口管理器。

我知道有些非常特殊的窗口管理器可以做到这一点。但我想使用默认窗口管理器和一些扩展插件。

答案1

从 Unity 14.04 开始,您可以点击Super+W(窗口展开),然后通过窗口名称或程序名称来搜索窗口。

答案2

如果您不使用 Unity...

如果你正在使用 Unity,一定要使用 jan 的答案。这个可以作为其他窗口管理器的替代方案。


下面的脚本应该完全按照您描述的方式执行:

  • 按下组合键
  • 键入窗口名称的一个或多个字符
  • Return

    在此处输入图片描述

    并出现相应的窗口:

    在此处输入图片描述

剧本

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

machine_name = socket.gethostname()

get = lambda cmd: subprocess.check_output(["/bin/bash", "-c", cmd]).decode("utf-8")

w_list = get("wmctrl -l").splitlines()
w_data = [(w.split()[0], w[w.find(machine_name)+len(machine_name)+1:])for w in w_list]     
windows = [it[1] for it in w_data if "_NET_WM_WINDOW_TYPE_NORMAL" in get("xprop -id "+it[0])]
l = "'"+("' '").join(windows)+"'"
cmd = "zenity --list --title='Window chooser' --column='Type one or more characters' "+l
try:
    window = get(cmd).split("|")[-1].strip()
    w_id = [item[0] for item in w_data if window in item[1]][0]
    subprocess.Popen(["wmctrl", "-ia", w_id])
except:
    pass

如何使用

  • wmctrl需要安装脚本:

    sudo apt-get install wmctrl
    

然后:

  • 将脚本复制到一个空文件中,另存为window_switcher.py
  • 通过命令测试运行:

    python3 /path/to/window_switcher.py
    
  • 如果一切正常,请将其添加到快捷键:选择:系统设置>“键盘”>“快捷键”>“自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/window_switcher.py
    

答案3

实用程序“rofi”允许显示打开的窗口列表,可以通过输入应用程序名称和/或窗口标题的部分内容来缩小列表范围。

罗菲可以使用命令来安装sudo apt install rofi

使用以下命令以“窗口”模式启动 rofi

rofi -show window

将此命令绑定到热键。

答案4

使用 wmctrl 创建快捷键并将其绑定到键盘快捷键

例如 wmctrl -a 'Chromium' 切换到一个名为 chromium 的窗口

  • 如果你知道窗口的全名,你可以使用

wmctrl -Fa 'Terminal - 12'

  • 列出窗口名称

wmctrl -l

相关内容