web-dev-qa-db-ja.com

Unity Launcherアイコンをアルファベット順に並べ替え

ロックされたLauncherアプリケーションをアルファベット順に並べ替えておくのが好きで、それらを並べ替えるスクリプトを作成できるかどうか考えていたので、新しいプログラムを追加するたびに自分で行う必要はありませんでした。

アイコンのすべての名前と場所を含むフォルダがどこかにある場合、そこからそれを理解できるはずです。

3

ランチャーをアルファベット順に並べ替える

以下のスクリプトをバックグラウンドで実行すると(その方法については下記を参照)、ランチャーがアルファベット順にソートされます。

スクリプトを実行する前の上位3つのランチャー項目:Gnome-terminal、Virtualbox、LibreOffice

enter image description here

スクリプトの実行:dconf-editor、Files、Firefox

enter image description here

スクリプトの機能

アプリケーションの(interface-)名は.desktopファイルで定義されます。これらのファイルは、/usr/share/applicationsまたは~/.local/share/applicationsに保存できます。後者は、ローカルなものが存在する場合、グローバルなものを「無効にします」。

スクリプトはランチャーリストの変更をチェックし、次のコマンドを(ループで、2秒ごとに)実行します。

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. 正常に動作する場合は、スタートアップアプリケーションに追加します。ダッシュ>スタートアップアプリケーション>コマンドを追加:

    /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%を表示します。これは、スクリプトがプロセッサの負荷に実質的に何も追加しないことを意味します。
0
Jacob Vlijm

あなたはそれらを使用して得ることができます

gsettings get com.canonical.Unity.Launcher favorites

そして、それらを設定します

gsettings set com.canonical.Unity.Launcher favorites VALUE

ここで、VALUEは、gsettings get ...から取得したものと同じ形式です。

0
Florian Diesch