如何在所有其他窗口最小化的情况下跳转到打开的终端?

如何在所有其他窗口最小化的情况下跳转到打开的终端?

我想创建一个快捷方式来最小化所有窗口并访问我的 -opened- 终端。我知道命令 ctrl+super+D 可以最小化所有窗口,但我想要一种最简单的方法。(ubuntu 14.04)

答案1

下面的脚本可以做你想做的事。用法很简单:将其绑定到键盘快捷键并赋予它终端的窗口类。请按照以下步骤操作

1.保存文件

最好将其保存在~/bin目录下的主文件夹中。如果您没有该目录,请创建它。

确保脚本具有可执行权限,chmod +x如下所示。

 $ chmod +x ~/bin/get_terminal.py 

2. 找出你的终端的WM_CLASS。

使用xprop命令来执行此操作(它将允许您通过将光标更改为 x 符号来选择要检查的窗口):

$ xprop WM_CLASS                                                               
WM_CLASS(STRING) = "gnome-terminal-server", "Gnome-terminal"

任何结果字符串都可以。

3. 绑定键盘快捷键

在系统设置 -> 键盘 -> 快捷键 -> 自定义下,添加以下条目:

在此处输入图片描述

那里使用的命令是:

python3 /home/xieerqi/bin/get_terminal.py "Gnome-terminal"

请注意,我给出了完整路径,并且 WM_CLASS 被引用

我设置的键盘快捷键是CtrlSuperG,但您也可以自由使用其他键绑定。

脚本源

#!/usr/bin/env python3
#from __future__ import print_function
import gi
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk
import subprocess
import time
import os
import sys

def run_cmd(cmdlist):
    """ Reusable function for running external commands """
    new_env = dict(os.environ)
    new_env['LC_ALL'] = 'C'
    try:
        stdout = subprocess.check_output(cmdlist, env=new_env)
    except subprocess.CalledProcessError:
         print('FAIL:' + repr(cmdline))
    else:
        if stdout:
            return stdout

def main():

    if len(sys.argv) < 2:
       sys.stderr.write("REQUIRES WM_CLASS\n")
       sys.exit(1)

    screen = Gdk.Screen.get_default()
    for window in screen.get_window_stack():
        xid = int(window.get_xid())
        wm_class = run_cmd(['xprop','-notype','WM_CLASS','-id',str(xid)])
        if sys.argv[1] in wm_class.decode():
            window.focus(int(time.time()))
            window.process_all_updates()
        else:
            window.iconify()
            window.process_all_updates()

if __name__ == '__main__':
    main() 

相关内容