Мне нравится сохранять мои заблокированные приложения Средства запуска отсортированными в алфавитном порядке, и я задавался вопросом, будет ли возможно записать сценарий, который сортирует их, таким образом, я не должен делать этого сам каждый раз, когда я добавляю новую программу.
Если существует папка где-нибудь, которая содержит все названия и местоположение значков, я должен смочь изобразить его из там.
Запущение скрипта ниже в фоновом режиме (см. далее ниже, как сделать это) сохранит Ваше средство запуска отсортированным в алфавитном порядке от до z:
Лучшие три объекта средства запуска прежде, чем запустить скрипт: терминал Gnome, Virtualbox, LibreOffice
Запущение скрипта: dconf-редактор, Файлы, Firefox
(Интерфейс-) названия приложений определяется в .desktop
файлы. Эти файлы могут храниться в также /usr/share/applications
или ~/.local/share/applications
. Последний "отвергает" глобальный, если локальный существует.
Сценарий проверяет на изменения в списке средства запуска, выполняя (в цикле, каждые две секунды) команду:
gsettings get com.canonical.Unity.Launcher favorites
Это возвращает список объектов средства запуска, заказанных как текущий порядок средства запуска.
Если средство запуска изменяется (например, если Вы добавляете новое средство запуска), сценарий ищет относящиеся имена интерфейса в .desktop
файлы (сохраняющий приоритет локального .desktop
файлы) и виды объекты средства запуска, согласно этим именам интерфейса.
Впоследствии, сценарий устанавливает отсортированное средство запуска командой:
gsettings set com.canonical.Unity.Launcher favorites "<sorted_launcheritems_list>"
sort_launcher.py
Тестовый прогон это путем выполнения (в терминале) команды:
python3 /path/to/sort_launcher.py
Если это хорошо работает, добавьте его к своим приложениям запуска: Тире> Приложения Запуска> Добавляет команду:
/bin/bash -c "sleep 15&&python3 /path/to/sort_launcher.py"
#!/usr/bin/env python3
import subprocess
import os
import time
home = os.environ["HOME"]
# define the two directories to search .desktop files, the string to identify application launchers
dir1 = "/usr/share/applications/"; dir2 = home+"/.local/share/applications/"; s = "application://"
# the key to read / write the launcher
lget = "gsettings get "; lset = "gsettings set "; key = "com.canonical.Unity.Launcher favorites"
# read current launcher
def read_current():
return eval(subprocess.check_output(["/bin/bash", "-c", lget+key]).decode("utf-8").strip())
def sort_launcher(launchers):
# split up launcher items in applications / others
apps = []; others = []
for it in launchers:
apps.append(it) if it.startswith(s) else others.append(it)
# create a sorted application (launcher-) list
sort_list = []
app_launchers = []
for item in apps:
check = get_interfacename(item)
if check:
app_launchers.append([check, item])
app_launchers.sort(key=lambda x: x[0])
# set the sorted launcher
launcher_set = [item[1] for item in app_launchers]+others
subprocess.Popen(["/bin/bash", "-c", lset+key+' "'+str(launcher_set)+'"'])
def get_interfacename(item):
name = []
for dr in [dir1, dir2]:
subject = dr+item.replace(s, "")
try:
app = [l.strip() for l in open(subject).readlines() if l.startswith("Name=")][0]
name.append(app)
except FileNotFoundError:
pass
else:
name.append(app)
return name[-1].strip("Name=").lower()
# check every two seconds for changes, update launcher if necessary
current_launcher1 = read_current()
sort_launcher(current_launcher1)
while True:
time.sleep(2)
current_launcher2 = read_current()
if current_launcher1 != current_launcher2:
sort_launcher(current_launcher2)
else:
pass
current_launcher1 = current_launcher2
cpu 0%
, что означает, что сценарий практически ничего не добавляет к загрузке процессора.Можно получить их использующий
gsettings get com.canonical.Unity.Launcher favorites
и установить их с
gsettings set com.canonical.Unity.Launcher favorites VALUE
, где VALUE
имеет тот же формат как, что Вы получили от gsettings get ...