ロックされたLauncherアプリケーションをアルファベット順に並べ替えておくのが好きで、それらを並べ替えるスクリプトを作成できるかどうか考えていたので、新しいプログラムを追加するたびに自分で行う必要はありませんでした。
アイコンのすべての名前と場所を含むフォルダがどこかにある場合、そこからそれを理解できるはずです。
以下のスクリプトをバックグラウンドで実行すると(その方法については下記を参照)、ランチャーがアルファベット順にソートされます。
スクリプトを実行する前の上位3つのランチャー項目:Gnome-terminal、Virtualbox、LibreOffice
スクリプトの実行:dconf-editor、Files、Firefox
アプリケーションの(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>"
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 ...
から取得したものと同じ形式です。