设置仅在启动器中显示当前工作区的应用程序?

设置仅在启动器中显示当前工作区的应用程序?

是否可以在启动器中显示当前工作区打开的应用程序,但不显示其他工作区打开的应用程序?

答案1

对于 Ubuntu 17.10 及更高版本附带的 Ubuntu Dock(带有 GNOME)

好吧,其他答案都已经很老了,所以我认为值得添加最新的答案。现在就可以这样做,而且说实话不太难(使用 Ubuntu 17.10 并且它有 Gnome)。

只需使用dconf-编辑器

sudo apt install dconf-editor

导航org > gnome > shell > 扩展 > dash-to-dock并检查隔离工作区 在此处输入图片描述

答案2

如何使应用程序在(其他)工作区中不可追踪

使用 的xdotoolwindowunmap可以完全隐藏窗口。窗口及其应用程序不再出现在启动器图标中,甚至不再在 的输出中列出wmctrl

从理论上讲,这可以连接到“工作区引擎”,用于答案。那将是最优雅的解决方案。

然而,仅有的隐藏其他工作区上的窗口并自动提升当前工作区要求太高,无法在持续使用中背景脚本(目前),并且也不太可能“感冒”。由于一旦出现错误,窗口将永远消失,因此我决定不将该过程作为自动(后台)进程提供。

这个答案是否对您有用取决于具体情况,以及您想要隐藏在其他工作区上运行的应用程序图标的原因;决定权在您手中。

解决方案;它是什么以及它在实践中如何运作

  • 一个脚本,可通过快捷键使用,似乎可以打开所有窗口当前工作区(因此应用程序)完全消失。这意味着 Unity 启动器中的应用程序图标不显示任何应用程序活动:

    三个正在运行的应用程序: 在此处输入图片描述按下快捷键后:在此处输入图片描述

  • 再次按下快捷键组合,窗口及其应用程序将重新出现。

  • 由于组合键只会隐藏当前工作区,您随后可以切换到另一个工作区,而无需知道当前工作区上有什么(隐藏)。
  • 取消隐藏仅对当前工作区进行隐藏和取消隐藏,因此,隐藏和取消隐藏的过程完全独立每个工作区

剧本

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

datadir = os.environ["HOME"]+"/.config/maptoggle"
if not os.path.exists(datadir):
    os.makedirs(datadir)
workspace_data = datadir+"/wspacedata_"

def get_wlist(res):
    res = get_res()
    try:
        wlist = [l.split() for l in subprocess.check_output(["wmctrl", "-lG"]).decode("utf-8").splitlines()]
        return [w for w in wlist if all([
            0 < int(w[2]) < res[0],
            0 < int(w[3]) < res[1],
            "_NET_WM_WINDOW_TYPE_NORMAL" in subprocess.check_output(["xprop", "-id", w[0]]).decode("utf-8"),
            ])]
    except subprocess.CalledProcessError:
        pass

def get_res():
    # get resolution
    xr = subprocess.check_output(["xrandr"]).decode("utf-8").split()
    pos = xr.index("current")
    return [int(xr[pos+1]), int(xr[pos+3].replace(",", "") )]

def current(res):
    # get the current viewport
    vp_data = subprocess.check_output(
        ["wmctrl", "-d"]
        ).decode("utf-8").split()
    dt = [int(n) for n in vp_data[3].split("x")]
    cols = int(dt[0]/res[0])
    curr_vpdata = [int(n) for n in vp_data[5].split(",")]
    curr_col = int(curr_vpdata[0]/res[0])+1
    curr_row = int(curr_vpdata[1]/res[1])
    return str(curr_col+curr_row*cols)

res = get_res()

try:
    f = workspace_data+current(res)
    wlist = eval(open(f).read().strip())
    for w in wlist:
        subprocess.Popen(["xdotool", "windowmap", w[0]])
    os.remove(f)
except FileNotFoundError:
    current_windows = get_wlist(res)
    open(f, "wt").write(str(current_windows))
    for w in current_windows:
        subprocess.Popen(["xdotool", "windowunmap", w[0]])

如何使用

  1. 该脚本需要wmctrlxdotool

    sudo apt-get install wmctrl xdotool
    
  2. 将脚本复制到一个空文件中,另存为toggle_visibility.py
  3. 测试运行脚本:在终端窗口中,运行命令:

    python3 /path/to/toggle_visibility.py
    

    现在打开一个新的终端窗口(因为第一个窗口似乎从地球表面消失了)并再次运行相同的命令。所有窗口都应该重新出现。

    注意::确保在测试时没有打开“有价值的”窗口

  4. 如果一切正常,请将命令添加到快捷键组合中:选择:系统设置 > “键盘” > “快捷键” > “自定义快捷键”。单击“+”并添加命令:

    python3 /path/to/toggle_visibility.py
    

解释

如上所述,该脚本使用xdotoolwindowunmap(完全)隐藏窗口及其所属的应用程序。脚本:

  • 读取当前工作区
  • 读取存在的窗口在当前工作区(仅有的)
  • 将窗口列表写入以当前工作区命名的文件中
  • 隐藏窗口

下次运行时,脚本:

  • 检查文件是否对应于当前工作区存在
  • 如果是,则读取窗口列表并取消隐藏窗口。

从而切换当前工作区中窗口和应用程序的可见性。

答案3

不幸的是这是不可能的。

Unity 总是显示所有应用程序,并且无法更改这一点。有一个错误报告 -https://bugs.launchpad.net/ayatana-design/+bug/683170 但似乎开发人员不会采取任何措施。如果您在页面顶部标记此错误会影响您,这将有助于开发人员了解此选项的重要性。

答案4

从 alt-tab 切换器隐藏应用程序/窗口

  1. 使用以下命令安装 dconf-editor
    • sudo apt-get install dconf-editor
  2. 使用以下命令从菜单或终端启动 dconf-editor
    • dconf-editor
  3. 在 dconf 中访问位置
    • 对于应用程序切换,请使用以下
      • /org/gnome/shell/app-switcher/current-workspace-only
    • 对于窗口切换器使用以下
      • /org/gnome/shell/window-switcher/current-workspace-only
    • 注意:您也可以编辑两者
  4. 关闭按钮/开关,上面写着使用默认值
  5. 覆盖自定义值falsetrue
  6. 点击保存更改申请dconf 右下角的按钮

相关内容