我喜欢将我锁定的启动器应用程序按字母顺序排序,我想知道是否可以编写一个脚本来对它们进行排序,这样我就不必每次添加新程序时都自己这样做。
如果某个地方有一个文件夹包含所有图标的名称和位置,我应该能够从那里找出答案。
答案1
保持启动器按字母顺序排序
在后台运行下面的脚本(请参阅下面的操作方法)将使您的启动器按字母顺序从 a 到 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
如果运行正常,请将其添加到启动应用程序中:Dash > 启动应用程序> 添加命令:
/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%
,这意味着该脚本实际上不会增加处理器负载。
答案2
您可以使用以下方式获取它们
gsettings get com.canonical.Unity.Launcher favorites
并设置它们
gsettings set com.canonical.Unity.Launcher favorites VALUE
VALUE
格式和你从哪里得到的格式一样gsettings get ...