启动所有工作区上的每个窗口,并包含一些例外情况

我知道,Always on visible workspace但是我希望所有窗口在打开时都将其作为默认设置,只有少数例外。

我正在寻找的工作流程与它的工作原理几乎相反。显示所有工作区上的所有内容,但有一些(手动)例外。

是否可以?如果需要一些脚本,我可能不会介意。

我正在用Ubuntu运行Ubuntu 17.04,但afaik在统一和大多数桌面环境中都存在此功能。

雅各布·弗利姆(Jacob Vlijm)

有趣的情况。

我们需要考虑的是

这个概念是不复杂:简单地将所有Windows粘,但是

  • 由于您要排除某些应用程序,因此我们将需要列出这些应用程序并检查其窗口类的窗口,以决定是否应将它们设置为粘性(显示在所有工作空间中)。
  • 窗口列表作为输出,wmctrl -l还显示了一些窗口类型,例如DOCK和DESKTOP,通常不应编辑其中的属性。
  • 我们将需要确保仅将窗口设置为粘性,以防止不必要的燃料消耗。

示例脚本(python)

在下面的脚本中:

  • 使用以下命令运行一个为时两秒的循环,以将窗口列表与上一个列表进行比较:

    wmctrl -l
    

    然后从每行提取窗口ID

  • 随后,脚本运行

    xprop -id <window_id>
    

    我们可以在其中找到有关_NET_WM_WINDOW_TYPE和的信息WM_CLASS

  • 如果新窗口“通过”了这些测试,则该窗口不属于任何排除的应用程序,并且不属于任何排除的类型,则将其设置为粘滞状态。

由于该脚本仅作用于新创建的窗口,因此不会给您的系统增加任何明显的负担。

剧本

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

# excluded applications
apps = ["gedit", "chromium", "monkey"]


# ignored window types
ignore = [
    "= _NET_WM_WINDOW_TYPE_DOCK",
    "= _NET_WM_WINDOW_TYPE_DESKTOP",
]


# just a helper
def get(cmd):

    try:
        return subprocess.check_output(cmd).decode("utf-8").strip()
    except (subprocess.CalledProcessError, TypeError):
        pass


# initiate windowlist
wins1 = []


while True:
    # cycle time
    time.sleep(2)
    # initiate new list
    new_wins = []
    # get the most recent window list
    windata = get(["wmctrl", "-l"])
    if windata:
        # extract window -ids
        wins2 = [w.split()[0] for w in windata.splitlines()]
        new = [w for w in wins2 if w not in wins1]
        # check for excluded classes and window types
        for w in new:
            testdata = get(["xprop", "-id", w])
            if all([
                not any([ig in testdata for ig in ignore]),
                not any([app in testdata for app in apps]),
                ]):
                # set the passed windows to sticky
                subprocess.Popen(
                    ["wmctrl", "-i", "-r", w, "-b", "add,sticky"]
                    )
        # refresh the window list for next cycle
        wins1 = wins2

如何设定

  1. 确保wmctrl已安装:

    sudo apt install wmctrl
    
  2. 将脚本复制到一个空文件中,另存为 set_sticky.py
  3. 在脚本的开头部分,将WM_CLASS-ses设置为排除(您可能想删除猴子,这是出于测试目的:))
  4. 使用以下命令进行测试:

    python3 /path/to/set_sticky.py
    
  5. 如果一切正常,您可以将其添加到“启动应用程序”,但请确保添加一个小中断以防止脚本在尚未就绪的桌面上中断:

    /bin/bash -c "sleep 10 && python3 /path/to/set_sticky.py"
    

玩得开心 :)

笔记

我在Ubuntu Budgie(杂音)上测试了25分钟,没有任何问题。它在任何窗口管理器上都应该可以正常运行,但是如果遇到问题,只需提一下。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

例外情况下正确工作

来自分类Dev

如何在所有工作区上都有一个窗口?

来自分类Dev

如何在所有工作区上都有一个窗口?

来自分类Dev

启动卡在带有一些文本的黑屏上

来自分类Dev

如何遍历所有 CSV 文件,打开每个文件并对每个文件执行一些操作?

来自分类Dev

Rail集成测试中是否排除了所有例外情况?

来自分类Dev

告诉ido忽略所有星缓冲区,除了一些

来自分类Dev

如果当前工作区上没有Firefox窗口打开,我希望启动器上的Firefox图标打开一个新窗口

来自分类Dev

如果当前工作区上没有打开Firefox窗口,我希望启动器上的Firefox图标打开一个新窗口

来自分类Dev

如何移动主体中的所有元素,并添加一些不可移动元素的例外?

来自分类Dev

JavaScript。打开的窗口中包含一些内容

来自分类Dev

按名称排列一些列,然后包含所有其他列

来自分类Dev

在所有事件引发(或合并事件)之后,C#会做一些工作

来自分类Dev

如何设置一个窗口显示在OS X的每个工作区上?

来自分类Dev

断路器有太多例外情况?

来自分类Dev

使用线程池时有哪些例外情况

来自分类Dev

在CakePHP上获取所有的EmiratesTo关系以及一些HABTM

来自分类Dev

Mysql:在所有重复更新上的一些重复列插入

来自分类Dev

如何记录例外情况?

来自分类Dev

建筑挤压的例外情况

来自分类Dev

如何在所有工作区上打开pidgin聊天窗口?

来自分类Dev

Ubuntu 14.10一些带有透明背景的窗口

来自分类Dev

.htaccess文件,但有一些例外

来自分类Dev

Laravel 刷新会话有一些例外

来自分类Dev

如何在只有一些可见值的情况下启动R绘图图

来自分类Dev

如何在只有一些可见值的情况下启动R绘图图

来自分类Dev

一些启动服务

来自分类Dev

一些网站在没有回发浏览器加载的情况下工作

来自分类Dev

连接excel文件中的所有工作表,其中一些具有不同的skiprows标准

Related 相关文章

  1. 1

    例外情况下正确工作

  2. 2

    如何在所有工作区上都有一个窗口?

  3. 3

    如何在所有工作区上都有一个窗口?

  4. 4

    启动卡在带有一些文本的黑屏上

  5. 5

    如何遍历所有 CSV 文件,打开每个文件并对每个文件执行一些操作?

  6. 6

    Rail集成测试中是否排除了所有例外情况?

  7. 7

    告诉ido忽略所有星缓冲区,除了一些

  8. 8

    如果当前工作区上没有Firefox窗口打开,我希望启动器上的Firefox图标打开一个新窗口

  9. 9

    如果当前工作区上没有打开Firefox窗口,我希望启动器上的Firefox图标打开一个新窗口

  10. 10

    如何移动主体中的所有元素,并添加一些不可移动元素的例外?

  11. 11

    JavaScript。打开的窗口中包含一些内容

  12. 12

    按名称排列一些列,然后包含所有其他列

  13. 13

    在所有事件引发(或合并事件)之后,C#会做一些工作

  14. 14

    如何设置一个窗口显示在OS X的每个工作区上?

  15. 15

    断路器有太多例外情况?

  16. 16

    使用线程池时有哪些例外情况

  17. 17

    在CakePHP上获取所有的EmiratesTo关系以及一些HABTM

  18. 18

    Mysql:在所有重复更新上的一些重复列插入

  19. 19

    如何记录例外情况?

  20. 20

    建筑挤压的例外情况

  21. 21

    如何在所有工作区上打开pidgin聊天窗口?

  22. 22

    Ubuntu 14.10一些带有透明背景的窗口

  23. 23

    .htaccess文件,但有一些例外

  24. 24

    Laravel 刷新会话有一些例外

  25. 25

    如何在只有一些可见值的情况下启动R绘图图

  26. 26

    如何在只有一些可见值的情况下启动R绘图图

  27. 27

    一些启动服务

  28. 28

    一些网站在没有回发浏览器加载的情况下工作

  29. 29

    连接excel文件中的所有工作表,其中一些具有不同的skiprows标准

热门标签

归档