Ich möchte, dass mein Desktop immer nach Namen organisiert bleibt. Wie kann ich das erreichen?
Ich möchte, dass mein Desktop immer nach Namen organisiert bleibt. Wie kann ich das erreichen?
Antworten:
Das folgende Skript ordnet einen Desktop wie folgt neu an:
... in einen alphabetisch geordneten Desktop wie:
Bestellt:
Darüber hinaus können Sie eine beliebige Anzahl von Elementen vertikal (Zeilen) festlegen. Der horizontale Abstand wird automatisch entsprechend eingestellt.
#!/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
Das Skript benötigt xdotool
:
sudo apt-get install xdotool
Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter arrange_dt.py
Testen Sie es mit dem folgenden Befehl:
python3 /path/to/arrange_dt.py
Innerhalb von 20 Sekunden klicken Sie auf den Desktop, Ihre neue Anordnung wird angewendet. Wenn Sie das Skript über eine Verknüpfung ausführen, während sich der Desktop vorne befindet, wird die Anordnung sofort angewendet. Wenn sich der Desktop nicht vorne befindet, wartet das Skript maximal 20 Sekunden. Wenn die Zeit abgelaufen ist, drücken Sie einfach, um sichF5zu bewerben.
Wenn alles einwandfrei funktioniert, fügen Sie es einer Tastenkombination hinzu: Wählen Sie: Systemeinstellungen> "Tastatur"> "Tastenkombinationen"> "Benutzerdefinierte Tastenkombinationen". Klicken Sie auf das "+" und fügen Sie den Befehl hinzu:
python3 /path/to/arrange_dt.py
Sie können die Anordnung der Symbole auf drei Arten beeinflussen:
Stellen Sie die Größe der "Kacheln" ein
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
Dadurch wird die (maximale) Anzahl von Symbolen vertikal festgelegt. Die Größe der "Kacheln" ist gleich (x, y)
Stellen Sie den horizontalen Versatz ein
x_offs = -15
Dadurch wird die x-Abweichung von der Standardposition der gesamten Symbolmatrix festgelegt
Stellen Sie den vertikalen Versatz ein
y_offs = -30
Dadurch wird die y-Abweichung von der Standardposition der Symbolmatrix festgelegt
Ein Beispiel mit:
# 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
Die folgende Erklärung ist hauptsächlich eine Erklärung des Konzepts und nicht der Codierung
python
's aufos.listdir(Desktop)
Dann erstellen wir die Matrix:
Im Bild unten sind diese "virtuellen" Quadrate sichtbar. Der rote Punkt befindet sich dort, wo das Symbol platziert ist.
Dann müssen wir nur noch das erste Symbol auf die Hälfte der Größe eines Quadrats setzen, sowohl horizontal als auch vertikal.
Um die x-Position aller anderen Symbole zu ermitteln, müssen wir lediglich ihren Index (beginnend mit Null) durch die Anzahl der abgerundeten Zeilen teilen . Das Ergebnis wird an der x-Position des ersten Symbols (oben links) hinzugefügt, zum Beispiel:
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
Um die y-Position aller anderen Symbole zu ermitteln, benötigen wir lediglich den Rest des Index und die Anzahl der Zeilen. Das Ergebnis x die Breite eines Quadrats wird zur y-Position des ersten Symbols (oben links) hinzugefügt, zum Beispiel:
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
Anschließend platzieren wir die Symbole mit dem folgenden Befehl auf dem Desktop:
gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
Schließlich müssen wir F5 mit dem Desktop nach vorne drücken , um das geänderte Layout anzuwenden (den Desktop aktualisieren). Wenn dies der Fall ist, wird dies sofort durchgeführt. Wenn nicht, wird das Skript innerhalb von 20 Sekunden wiederholt, wenn sich der Desktop vorne befindet, virtuell gedrückt und unterbrochen wird F5. Wenn der Desktop nach 20 Sekunden immer noch nicht vorne war, müssen Sie manuell drücken F5.
6 -50 -50
aber drei Ordner sind leicht versetzt. Irgendwelche Ideen warum? Screenshot: i.imgur.com/XuGIiBT.png
iconic
Zum Teil inspiriert von der obigen Frage, schrieb ich , um dieses Problem zu lösen, indem Sie Symbole auf vier verschiedene Arten sortieren konnten. Zusätzlich wird es:
Sie können das Skript auf Github erhalten .
Hier ist der Hauptbildschirm:
Besuchen Sie die GitHub - Seite für ikonische zu sehen , alle anderen Bildschirme, Erklärungen und eine Kopie des Skripts.