gnome-terminal 的 Unity 进度条?

gnome-terminal 的 Unity 进度条?

我最喜欢的 Unity 功能之一是启动器覆盖在各种程序(如文件管理器或 Firefox)图标上的进度条。Gnome-terminal 没有进度条。我需要做什么才能让 Unity 显示 apt-get 或 dd 等的状态?

如果这不可能,我们至少可以在出现提示时更改图标吗?

答案1

让进度条工作起来(我相信)会很难,而且必须根据不同的应用程序(apt-get、dd 等)逐一实现。


另一方面,在提示可用时更改图标更容易。假设存在两个脚本iconprompt和,它们在执行时会更改 gnome-terminal 的图标。[我在最后iconnoprompt添加了示例]iconprompticonnoprompt

因此,剩下要做的就是

  1. iconprompt当提示可用时执行。

  2. iconnoprompt当命令开始执行时执行。

这些可以通过添加行来实现

export PROMPT_COMMAND='iconprompt'
trap 'iconnoprompt' DEBUG

.bashrc您的主文件夹中的文件。


当您打开多个终端时(一个终端正在运行apt-get,另一个终端正在工作),行为将不会如您所愿。在这种情况下,图标变化将不会指示进程完成。要解决此问题,请考虑以下替代解决方案:

添加

monitor() { iconnoprompt; "$@"; iconprompt; }

.bashrc。为此,sudo apt-get ... 您必须键入monitor sudo apt-get ...。只有在监视的命令运行时,图标才会有所不同。

我推荐这个解决方案,也是因为我的iconprompticonnoprompt脚本大约需要 0.1 秒才能执行,这会给ls和等命令造成明显的滞后cd


(样本)内容iconnoprompt

#!/usr/bin/python

from gi.repository import Unity, GObject
import threading, time

launcher = Unity.LauncherEntry.get_for_desktop_id ("gnome-terminal.desktop")
launcher.set_property("progress", 0.5)
launcher.set_property("progress_visible", True)

GObject.threads_init()
loop = GObject.MainLoop()

t = threading.Thread()
t.daemon = True
t.run = loop.run
t.start()

time.sleep(0.1)

(样本)内容iconprompt

#!/usr/bin/python

from gi.repository import Unity, GObject
import threading, time

launcher = Unity.LauncherEntry.get_for_desktop_id ("gnome-terminal.desktop")
launcher.set_property("progress", 0.)
launcher.set_property("progress_visible", False)

GObject.threads_init()
loop = GObject.MainLoop()

t = threading.Thread()
t.daemon = True
t.run = loop.run
t.start()

time.sleep(0.1)

将可执行权限设置为iconnoprompticonprompt并将它们放在您的中PATHiconnoprompt将向 gnome-terminal 图标添加进度条 - 但进度值与实际进度无关。

相关内容