我喜欢将我的锁定的启动器应用按字母顺序排序,我想知道是否有可能编写一个脚本来进行排序,这样每次添加新程序时我就不必自己手动排序了。
如果有一个包含所有图标名称和位置的文件夹,我应该能够从那里找到解决方法。
如果有一个包含所有图标名称和位置的文件夹,我应该能够从那里找到解决方法。
在后台运行下面的脚本(请参阅下面的说明)将使您的启动器按字母顺序从a到z进行排序:
在运行脚本之前,启动器中的前三个项目为:Gnome-terminal,Virtualbox,LibreOffice
应用程序的(界面)名称在.desktop
文件中定义。这些文件可以存储在/usr/share/applications
或~/.local/share/applications
中。如果存在本地文件,则后者会“覆盖”全局文件。
该脚本检查启动器列表中的更改,每两秒运行一次以下命令:
gsettings get com.canonical.Unity.Launcher favorites
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 ...
获取的格式相同
.desktop
文件的名称进行排序,稍微复杂一些的方式是按照“通用”(主要是美式英语)名称进行排序,但应用程序也可能有本地化的名称。为了使其真正整洁,你(我)需要知道你的系统所使用的语言。 - Jacob Vlijm