我会尽力使自己更加清晰。

当我们打开一个应用程序时,它将显示在dock中。是否可以打开应用程序而不会使其出现在底座中。

例如:

我应该能够打开chrome(例如),但我不能打开它在扩展坞中。


编辑1:

到目前为止我一直在尝试:

我打开了gedit进行测试。

wmctrl -l的输出部分是0x03800049 0 ravan Untitled Document 1 - gedit

命令:

wmctrl -r "Untitled Document 1 - gedit" -b add,skip_taskbar


做跳过的工作码头。

问题是,如果将其最小化(win + H),我将无法取回。

#1 楼

可能无法在扩展坞中显示任务列表。


按住Control键并右键单击扩展坞上的任意位置
选择“首选项”
选择“行为”标签
在“项目管理”标题下,禁用“显示未固定”

运行,但未固定的项目将不再显示在停靠栏中。

请注意,停靠项充当最小化/最小化机制。如果您已经修改了窗口装饰的布局以包含一个最小化按钮,那么您将不再具有一种使窗口最小化的简便方法。但是,仍然可以从多任务视图访问最小化的窗口。

评论


嘿Daniel,隐藏功能o_O

– Ravan
15年12月8日在1:30

好吧,如果最小化了,我如何找回它?

– Ravan
2015年12月8日,下午1:32

#2 楼

基本OS的基座是plank。因此,我分析了plank的源代码,并找到了它无法处理Windows的“跳过任务栏”选项的原因。因此,我修改了木板的两个部分来执行此操作。

首先,它获得了该应用程序的窗口数量包括跳过任务栏选项的窗口。

我们可以从plank源中找到确切的源函数。
这是get_num_windows中的lib/Services/WindowControl.vala函数。
下面,我添加了一个检查is_skip_tasklist的条件。

public static uint get_num_windows (Bamf.Application app)
{
    Wnck.Screen.get_default ();
    Array<uint32>? xids = app.get_xids ();

    warn_if_fail (xids != null);

    uint count = 0;

    for (var i = 0; xids != null && i < xids.length; i++) {
        unowned Wnck.Window window = Wnck.Window.@get (xids.index (i));
        if (window != null && window.get_transient () == null && !window.is_skip_tasklist ()) /* LOOK, should be added && !window.is_skip_tasklist() */
            count++;
    }

    return count;
}


其次,当更改窗口的“跳过任务栏”选项时,它无法处理指示器。源代码的相关部分是handle_user_visible_changedlib/Items/ApplicationDockItem.vala函数。
我在函数中添加了以下一行。

void handle_user_visible_changed (bool user_visible)
{
    update_indicator (); /* LOOK, should be called */
    if (user_visible) {
        app_window_added ();
        return;
    }

    if (this is TransientDockItem)
        App = null;

    app_closed ();
}


以下简单的python脚本可见/在木板上不可见的特殊应用。在运行此脚本之前,应使用以下命令安装python wnck模块:$ sudo apt-get install python-wnck

#!/usr/bin/python

import wnck
import sys

if __name__ == "__main__":
    if len(sys.argv) != 3:
        print "Usage: appvisible <appname> <1|0>"
        sys.exit(0)

    processname = sys.argv[1]
    visible = sys.argv[2]

    screen = wnck.screen_get_default()
    screen.force_update()

    for window in screen.get_windows():
        if window.get_class_group().get_name() == processname:
            if visible == "1":
                window.set_skip_tasklist(True)
            else:
                window.set_skip_tasklist(False)


它可以按以下方式使用。
$ appvisible gedit 0-可见gedit木板,$ appvisible gedit 1-木板上不可见的gedit。

其他编辑功能可最小化已跳过和最小化的窗口。

#!/usr/bin/python

import gtk
import wnck
import sys
import time

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print "Usage: unminimize <-l|appname>"
        sys.exit(0)

    appname = sys.argv[1]

    screen = wnck.screen_get_default()
    screen.force_update()

    for window in screen.get_windows():
        if not window.is_minimized():
            continue
        if not window.is_skip_tasklist():
            continue
        if appname == '-l':
            print window.get_class_group().get_name()
        elif window.get_class_group().get_name() == appname:
            window.unminimize(gtk.gdk.x11_get_server_time(gtk.gdk.get_default_root_window()))


您可以使用它作为./unminimize -l-列表跳过和最小化的窗口,./unminimize appname

评论


好吧,好工作+1,我在测试之后会告诉您:)

– Ravan
2015年12月7日在7:12



如果您能更恰当地指出编辑系统文件可能会破坏系统,我会感觉更好。将来,更改和更新可能会有效地使系统变砖,您只是不知道。

–刘易斯·戈达德♦
2015年12月7日在20:09

@Ravan请查看其他脚本以使其最小化。

–小东街
2015年12月9日,2:13