我最喜欢的 Unity 功能之一是启动器覆盖在各种程序(如文件管理器或 Firefox)图标上的进度条。Gnome-terminal 没有进度条。我需要做什么才能让 Unity 显示 apt-get 或 dd 等的状态?
如果这不可能,我们至少可以在出现提示时更改图标吗?
答案1
让进度条工作起来(我相信)会很难,而且必须根据不同的应用程序(apt-get、dd 等)逐一实现。
另一方面,在提示可用时更改图标更容易。假设存在两个脚本iconprompt
和,它们在执行时会更改 gnome-terminal 的图标。[我在最后iconnoprompt
添加了示例]iconprompt
iconnoprompt
因此,剩下要做的就是
iconprompt
当提示可用时执行。iconnoprompt
当命令开始执行时执行。
这些可以通过添加行来实现
export PROMPT_COMMAND='iconprompt'
trap 'iconnoprompt' DEBUG
到.bashrc
您的主文件夹中的文件。
当您打开多个终端时(一个终端正在运行apt-get
,另一个终端正在工作),行为将不会如您所愿。在这种情况下,图标变化将不会指示进程完成。要解决此问题,请考虑以下替代解决方案:
添加
monitor() { iconnoprompt; "$@"; iconprompt; }
至.bashrc
。为此,sudo apt-get ...
您必须键入monitor sudo apt-get ...
。只有在监视的命令运行时,图标才会有所不同。
我推荐这个解决方案,也是因为我的iconprompt
和iconnoprompt
脚本大约需要 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)
将可执行权限设置为iconnoprompt
和iconprompt
并将它们放在您的中PATH
。iconnoprompt
将向 gnome-terminal 图标添加进度条 - 但进度值与实际进度无关。