Одна из моих любимых функций Unity - индикатор выполнения, который панель запуска накладывает на значки для различных программ, таких как файловый менеджер или Firefox. Гном-терминал не имеет индикатора выполнения. Что мне нужно сделать, чтобы для отображения статуса apt-get или dd и т. Д.
Получение индикатора выполнения для работы будет (я считаю) трудным делом, и его придется реализовывать в каждом конкретном случае для различных приложений (apt-get, dd и т. Д.).
С другой стороны, изменить значок при наличии приглашения стало проще. Предположим, что существуют два скрипта iconprompt
и iconnoprompt
, которые изменяют значок gnome-терминала при выполнении. [Я добавил образцы 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 - но значение прогресса не имеет корреляции с фактическим прогрессом.