Индикатор прогресса Unity для gnome-терминала?

Одна из моих любимых функций Unity - индикатор выполнения, который панель запуска накладывает на значки для различных программ, таких как файловый менеджер или Firefox. Гном-терминал не имеет индикатора выполнения. Что мне нужно сделать, чтобы для отображения статуса apt-get или dd и т. Д.

2
задан 17 May 2013 в 10:06

1 ответ

Получение индикатора выполнения для работы будет (я считаю) трудным делом, и его придется реализовывать в каждом конкретном случае для различных приложений (apt-get, dd и т. Д.).


С другой стороны, изменить значок при наличии приглашения стало проще. Предположим, что существуют два скрипта iconprompt и iconnoprompt, которые изменяют значок gnome-терминала при выполнении. [Я добавил образцы iconprompt и iconnoprompt в конце]

Итак, все, что осталось сделать, это

  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 .... Значок будет отличаться только во время выполнения контролируемой команды.

Я рекомендую это решение также потому, что выполнение моих сценариев 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 - но значение прогресса не имеет корреляции с фактическим прогрессом.

0
ответ дан 17 May 2013 в 10:06

Другие вопросы по тегам:

Похожие вопросы: