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


30

是否可以在启动器中拥有当前工作空间的已打开应用程序,而其他工作空间中没有这些应用程序?


我认为ctrl +(1,2,3,4)用于切换工作空间。但是请检查系统设置中的快捷方式...
Alvar 2013年

按住SUPER键(Windows键)以显示所有可用的Unity快捷方式的概述。另请参阅此问答
谷氨酰胺

我编辑了您的第二个关于快捷方式的问题,因为它是重复的,之前已经回答过。我看到这是您的第一个问题(欢迎来到Askubuntu!):如果您每个帖子只问一个问题,对我们来说更容易为您提供帮助。将来在使用AU时请记住这一点。
谷氨酰胺

这里的问题相同。但是,那没有答案。
RPiAwesomeness

可能不是您要找的答案,而是统一缺乏可定制性。如果您有特殊需要或希望对桌面有更多控制,则应考虑迁移到更灵活的桌面环境,例如KDE。
Conchylicultor '16

Answers:


30

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

好吧,其他答案已经很老了,因此我认为值得添加最新答案。现在可以这样做,而不必太费力(使用Ubuntu 17.10并具有Gnome)。

只需使用dconf-editor

sudo apt install dconf-editor

导航到org> gnome> shell>扩展> dash-to-dock并检查isolate-workspaces 在此处输入图片说明


1
这个问题与Dash To Dock Gnome Extension完全无关。问题是关于Unity Launcher,Dash To Dock甚至与Unity不兼容。
crookedleaf

2
@crookedleaf Ubuntu在默认情况下使用17.10重新启动了dash-to-dock,从而切换到GNOME。
赛斯

1
@Seth但是OP正在使用Unity,而不是Gnome。因此,OP要么偶然使用了“ Unity”标签,要么他们将Unity与Ubuntu版本一起使用。
crookedleaf

3
@crookedleaf或者我们只需要保持问题更新,以便他们也有最新答案:)
赛斯

1
在18.04 / w gnome中非常有效。谢谢!请注意,也可以从以下网站轻松安装该扩展程序:extensions.gnome.org/extension/307/dash-to-dock
Jeff Ward,

8

如何使应用程序在(其他)工作空间上不可追踪

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

从理论上讲,它可以连接到“工作空间引擎”,该引擎已在答案中使用。那将是最优雅的解决方案。

但是,隐藏其他工作区上的窗口并自动将当前工作区上的窗口隐藏起来的过程非常需要在正在进行的后台脚本中使用(目前),而且也不太可能“感冒”。由于在发生错误的情况下永久丢失了窗口,因此我决定不提供该过程作为自动(后台)过程。

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

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

  • 快捷键下可用的脚本似乎使当前工作空间(以及应用程序)上所有窗口全部消失。这意味着Unity启动器中的应用程序图标不显示该应用程序的活动:

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

  • 再按一次schortcut组合键,将重新显示窗口及其应用程序。

  • 由于组合键只会在当前工作空间中隐藏窗口和应用程序,因此您可以随后切换到另一个工作空间,而无需注意当前工作空间上的内容(隐藏)。
  • 取消隐藏完成(仅)在当前工作空间,因此,在短,隐藏和取消隐藏的处理DOEN完全独立的每个工作区

剧本

#!/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来(完全)隐藏窗口及其所属的应用程序。剧本:

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

在下一次运行时,脚本:

  • 检查是否存在与当前工作空间对应的文件
  • 如果是这样,则读取窗口列表并隐藏窗口。

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


大。现在,只有当我能够找到一种在我移至另一个工作区时自动执行脚本的方式时,它们才能神奇地消失,然后在我移回时再次出现。也许我可以写一个python脚本来替换ctrl+ shift+ 的快捷键arrow key
星期四

1
现在可以在17.10上实现。查看其他答案。
马丁·梅尔卡

6

不幸的是,这是不可能的。

Unity总是显示所有地方的所有应用程序,并且没有办法更改它。有一个错误报告-https://bugs.launchpad.net/ayatana-design/+bug/683170 但是似乎开发人员不会做任何事情。如果您在页面顶部标记此错误影响到您,则可能会帮助开发人员了解此选项的重要性。


1
不要对错误报告发表评论,只需在页面顶部将其标记为影响您即可。
Flimm 2013年

@Flimm您是否偶然知道哪个桌面管理器具有此功能?
Cesar 2014年

2
统一看起来很棒,但是缺乏可定制性的确令人沮丧。
Programster
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.