回答:
以下のスクリプトは、デスクトップを次のように再配置します。
...アルファベット順に並べられたデスクトップに:
順序付けられました:
さらに、垂直方向(行)に任意の数のアイテムを設定できます。それに応じて、水平間隔が自動的に設定されます。
#!/usr/bin/env python3
import subprocess
import os
import math
import time
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
# set x/y offset of the matrix if you want
x_offs = -15
y_offs = -30
def get(cmd):
return subprocess.check_output(cmd).decode("utf-8")
dt = get(["xdg-user-dir", "DESKTOP"]).strip()
# find size of the left screen
left = [int(n) for n in sum(
[s.split("+")[0].split("x") for s in \
get("xrandr").split() if "+0+" in s], [])]
# size of the squares (icon area)
sqr = int((left[1]/rows))
# number of cols, squares
cols = math.floor(left[0]/sqr)
n_sqrs = cols*rows
# define positions (matrix)
pos = list([[
str(int((math.floor(n/rows)*sqr)+(sqr/2)+x_offs)),
str(int(((n%rows)*sqr)+(sqr/2)+y_offs)),
] for n in range(n_sqrs)])
# list iconfiles, split into dirs and files, sort & combine
iconlist = [os.path.join(dt, item) for item in \
sorted([item for item in os.listdir(dt) if not "~" in item])]
dirs = []; files = []
for it in iconlist:
if os.path.isfile(it):
files.append(it)
else:
dirs.append(it)
iconlist = dirs+files
# place icons in position(s)
for i, item in enumerate(iconlist):
location = (",").join(pos[i])
subprocess.call(["gvfs-set-attribute", "-t", "string", item,
'metadata::nautilus-icon-position', location])
# simulate F5 to refresh desktop, retry for max 20 secs if not in front
t = 0
while t < 40:
w_id = [l.split()[-1] for l in get(["xprop", "-root"]).splitlines() \
if "_NET_ACTIVE_WINDOW(WINDOW):" in l][0]
if "desktop" in get(["xprop", "-id", w_id, "WM_CLASS"]):
subprocess.Popen(["xdotool", "key", "F5"])
break
else:
time.sleep(0.5)
t += 1
スクリプトに必要なものxdotool
:
sudo apt-get install xdotool
スクリプトを空のファイルにコピーし、名前を付けて保存します arrange_dt.py
次のコマンドでテスト実行します。
python3 /path/to/arrange_dt.py
20秒以内にデスクトップをクリックすると、新しい配置が適用されます。ショートカットからスクリプトを実行すると、デスクトップが前面にあるときに、配置がすぐに適用されます。デスクトップが最前面にない場合、スクリプトは最大20秒間待機します。時間を超える場合は、押しF5て適用してください。
すべて正常に機能する場合は、ショートカットキーに追加します。[システム設定]> [キーボード]> [ショートカット]> [カスタムショートカット]を選択します。「+」をクリックして、コマンドを追加します。
python3 /path/to/arrange_dt.py
アイコンの配置には、次の3つの方法で影響を与えることができます。
「タイル」のサイズを設定する
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
これにより、アイコンの(最大)数が垂直方向に設定されます。「タイル」のサイズは、(x、y)と等しくなります。
水平オフセットを設定する
x_offs = -15
これにより、アイコンマトリックス全体のデフォルト位置からのx偏差が設定されます。
垂直オフセットを設定する
y_offs = -30
これにより、アイコンマトリックスのデフォルト位置からのy偏差が設定されます。
使用例:
# set the size of the squares (indirectly, by setting n- rows)
rows = 6
# set x/y offset of the matrix if you want
x_offs = 50
y_offs = 10
以下の説明は、コーディングではなく概念の説明が主です
python
のをos.listdir(Desktop)
次に、マトリックスを作成します。
下の画像では、これらの「仮想」正方形が表示されています。赤い点は、アイコンが配置されている場所です。
次に、最初のアイコンを正方形の半分のサイズに、水平方向と垂直方向の両方に配置します。
他のすべてのアイコンのx位置を見つけるには、それらのインデックス(ゼロから開始)を行数で割り、端数を切り捨てるだけです。結果は、最初のアイコン(左上)のx位置に追加されます。次に例を示します。
item 10 (index 9): 9/4 = 2,25, rounded down: 2
x position = position of icon 0 + 2 x the width of a square
item 17 (index 16): 16/4 = 4, rounded down: 4
x position = position of icon 0 + 4 x the width of a square
他のすべてのアイコンのy位置を見つけるには、インデックスの残りと行数が必要です。結果x正方形の幅は、最初のアイコン(左上)のy位置に追加されます。次に例を示します。
item 10 (index 9): 9%4 = 1
y position = position of icon 0 + 1 x the height of a square
item 17 (index 16): 16%4 = 0
y position = position of icon 0 + 0 x the height of a square
続いて、次のコマンドを使用して、アイコンをデスクトップに配置します。
gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
最後に、変更したレイアウトを適用する(デスクトップを更新する)ためにF5 、デスクトップを前に押します。その場合は、すぐに実行されます。そうでない場合、デスクトップが前面にあり、仮想的に押しF5て中断すると、スクリプトは20秒間再試行します。20秒後にデスクトップがいる場合、まだ前にはなかった、手動で押す必要F5。
6 -50 -50
が、3つのフォルダが少しずれています。何かアイデアはありますか?スクリーンショット:i.imgur.com/XuGIiBT.png
上記の質問に一部触発されて、私はiconic
この問題を解決するために、アイコンを4つの異なる方法で並べ替えることができます。さらに、それは:
スクリプトはgithubで入手できます。
メイン画面は次のとおりです。
他のすべての画面、説明、およびスクリプトのコピーを確認するには、githubページにアイコンを表示してください。