按字母顺序对 Unity Launcher 图标进行排序

按字母顺序对 Unity Launcher 图标进行排序

我喜欢将我锁定的启动器应用程序按字母顺序排序,我想知道是否可以编写一个脚本来对它们进行排序,这样我就不必每次添加新程序时都自己这样做。

如果某个地方有一个文件夹包含所有图标的名称和位置,我应该能够从那里找出答案。

答案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>"

如何使用

  1. 将以下脚本复制到一个空文件中,并将其另存为sort_launcher.py
  2. 通过运行(在终端中)以下命令进行测试运行:

    python3 /path/to/sort_launcher.py
    
  3. 如果运行正常,请将其添加到启动应用程序中: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 ...

相关内容