如何绑定一个键以便在一个特定应用程序和当前应用程序之间切换?

如何绑定一个键以便在一个特定应用程序和当前应用程序之间切换?

我想绑定一个键,使得特定的应用程序(在我的情况下是 Pidgin 或计算器)获得焦点,然后当我完成并再次按下键时,焦点返回到先前聚焦的应用程序,就好像我从未改变焦点一样。

例如:

前:

Chromium — Alt+ Tab→ 文件 — Alt+ Tab→ Chromium

键绑定的使用:

Chromium — (bound key)→ Pidgin(回答聊天)或 Calc(计算某事)— (bound key)→ Chromium

使用上述操作后:

Chromium — Alt+ Tab→ 文件 (不是 Pidgin) — Alt+ Tab→ Chromium

欢迎提出其他替代方案。

答案1

众所周知,可以使用Alt+在两个应用程序之间切换Tab。但它的设计是按 Z 顺序浏览所有打开的窗口;因此,每次激活第三个应用程序时,Z 顺序都会发生变化,并且通常需要让您主要感兴趣的两个应用程序重新同步以进行切换,这很烦人。

我读到您的要求是您有一个主应用程序 Chromium 和一个辅助应用程序,让我们开始吧gnome-calculator,您经常在它们之间切换,并且希望使用单个键绑定在它们之间进行万无一失的切换。

但是,您可以使用脚本和自定义键绑定来创建此行为。为了创建脚本,我想要一些简单易懂的东西(对我来说),并且可以轻松修改而无需编译;所以我使用了 python。

#!/usr/bin/python
import gtk
import re
import sys
import time
import wnck

#windows are found through the titlebar, not the app name
#edit the titles to change the apps
titlePrimaryApp = re.compile(".*Chromium*")
titleSecondaryApp = re.compile("Calculator")

screen = wnck.screen_get_default()

#needed for the code that gets the windows list to work
while gtk.events_pending():
  gtk.main_iteration()

active_window = screen.get_active_window()
open_windows = screen.get_windows()

#if the primary app is already activated, find the secondary app, and activate it
if titlePrimaryApp.match(active_window.get_name()):
  for w in open_windows:
    if titleSecondaryApp.match(w.get_name()):
      w.activate(int(time.time()))

#otherwise, activate the primary app
else:
  for w in open_windows:
    if titlePrimaryApp.match(w.get_name()):
      w.activate(int(time.time()))

要使用此脚本:

  1. 将其保存在诸如的文件中myswitcher.py。一个好的地方是/home/<user>/bin

  2. 使其可执行:chmod +x myswitcher.py

  3. 您将需要:sudo apt-get install python-wnck。这是与 Gtk windows 配合使用的库。默认情况下不会安装。

  4. 将脚本链接到键绑定。

    最简单的方法是在 中创建自定义快捷方式System Settings >> Keyboard >> Shortcuts >> Custom Shortcuts

  5. 突出显示后自定义快捷方式在左侧列表中,单击加号以添加快捷方式。

  6. 在弹出窗口中,选择快捷方式的名称并输入命令/path/to/myswitcher.py

  7. 新的快捷方式将添加到窗口中的快捷方式列表中。名称右侧将显示单词已禁用. 通过单击单词设置键绑定已禁用,然后键入所需的组合键。

  8. 确保选择的键绑定不会与其他程序冲突。这些绑定设置在较低级别,并将抢占脚本。我选择了Ctrl+ (反斜杠),因为它没有被其他任何东西使用,并且或多或少是+ \ 的镜像(至少在我的键盘布局上)。AltTab

  9. 您需要先注销并重新登录,自定义键绑定才能生效。

对脚本提供帮助的感谢:

在寻找示例之前,我已经想出了大部分脚本逻辑(而且示例还有很多wnck);但我需要感谢这个答案在 StackOverflow 上解决了我在正则表达式使用、传入 gtk 时间戳的语法以及最重要的是提供有关 Gtk 事件的关键行方面遇到的一些问题。如果没有这两行,get_windows 将返回一个空列表。

相关内容