Wie kann ich die Desktop-Symbole immer organisiert und nach Namen sortiert halten?

8

Ich möchte, dass mein Desktop immer nach Namen organisiert bleibt. Wie kann ich das erreichen?

Desktop nicht nach Namen organisiert:

Geben Sie hier die Bildbeschreibung ein

Desktop nach der Organisation nach Namen:

Geben Sie hier die Bildbeschreibung ein

Orschiro
quelle
Wenn Sie die Namen verblassen, können wir nicht genau sehen, was die Organisationsregel ist :)
Jacob Vlijm
@JacobVlijm Es sieht so aus, als ob seine Organisationsregel darin besteht, zuerst Verzeichnisse und dann Dateien zu sortieren. Wir können wahrscheinlich auch erraten, dass es alphabetisch ist
Sergiy Kolodyazhnyy
Hallo orschiro welche von diesen beiden: chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm
Entschuldigung für die fehlenden Informationen! Der Desktop ist alphabetisch geordnet, beginnend mit Ordnern von A bis Z, gefolgt von Dateien. Reichen diese Informationen aus?
Orschiro

Antworten:

9

Ordnen Sie die Desktopsymbole alphabetisch nach Befehl an

Das folgende Skript ordnet einen Desktop wie folgt neu an:

Geben Sie hier die Bildbeschreibung ein

... in einen alphabetisch geordneten Desktop wie:

Geben Sie hier die Bildbeschreibung ein

Bestellt:

  • zuerst Verzeichnisse, dann Dateien
  • von oben nach unten, von links nach rechts

Stellen Sie die Anzahl der Elemente vertikal ein

Darüber hinaus können Sie eine beliebige Anzahl von Elementen vertikal (Zeilen) festlegen. Der horizontale Abstand wird automatisch entsprechend eingestellt.

Das Skript

#!/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

Wie benutzt man

  1. Das Skript benötigt xdotool:

      sudo apt-get install xdotool
  2. Kopieren Sie das Skript in eine leere Datei und speichern Sie es unter arrange_dt.py

  3. 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.

  4. 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

Optionen

Sie können die Anordnung der Symbole auf drei Arten beeinflussen:

  1. 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)

  2. Stellen Sie den horizontalen Versatz ein

    x_offs = -15 

    Dadurch wird die x-Abweichung von der Standardposition der gesamten Symbolmatrix festgelegt

  3. 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

    Geben Sie hier die Bildbeschreibung ein

Erläuterung

Die folgende Erklärung ist hauptsächlich eine Erklärung des Konzepts und nicht der Codierung

  • Um die Symbole alphabetisch zu positionieren, listen wir zuerst die Elemente auf dem Desktop mit python's aufos.listdir(Desktop)
  • Dann teilen wir die Dateien in zwei Unterlisten auf; Dateien / Ordner, und sortieren Sie beide Listen, verbinden Sie sie erneut, Ordner zuerst.
  • Dann erstellen wir die Matrix:

    • Da die Anzahl der Zeilen im Kopf des Skripts festgelegt ist, teilen wir die Höhe des Bildschirms durch die Anzahl der Zeilen. Wir haben also die Größe der "Quadrate", in denen die Symbole platziert werden (zentriert).
    • Da die Symbole in horizontaler Richtung ähnlich beabstandet sind , können wir die (maximale) Anzahl von Spalten berechnen, indem wir die Breite des Bildschirms durch die Breite der "Quadrate" dividieren, in denen die Symbole platziert werden (pro Symbol), abgerundet auf erste ganze Zahl unten.
    • Im Bild unten sind diese "virtuellen" Quadrate sichtbar. Der rote Punkt befindet sich dort, wo das Symbol platziert ist.

      Geben Sie hier die Bildbeschreibung ein

    • 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.

Jacob Vlijm
quelle
Was für ein fantastisches und vielseitiges Skript. Vielen Dank, Jacob! :-)
Orschiro
@orschiro wie immer, Ihre Fragen sind irgendwie inspirierend und großartig zu bearbeiten :)
Jacob Vlijm
Ich stolpere zufällig über Dinge, von denen ich denke, dass sie das Standardverhalten in Ubuntu sein sollten. Freut mich zu sehen, dass es hochqualifizierte Leute gibt, die diese Realität werden lassen!
Orschiro
Hey Jacob, ich habe die Werte verwendet, 6 -50 -50aber drei Ordner sind leicht versetzt. Irgendwelche Ideen warum? Screenshot: i.imgur.com/XuGIiBT.png
orschiro
Hallo @orschiro Das liegt an der unterschiedlichen Breite der Ordnernamen. Wenn der Befehl aus diesem Grund nicht ausgeführt werden kann, wird die erste mögliche Option verwendet. Besser nicht zu negativ
einstellen
0

iconicZum 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:

  • Definieren Sie ein Raster, um Symbole näher oder weiter voneinander entfernt zu platzieren
  • Speichern Sie das Symbol-Desktop-Setup und stellen Sie es später für verschiedene Setups zu Hause und am Arbeitsplatz wieder her
  • Ermöglichen das Verschieben von Symbolen auf einen von drei Monitoren
  • Leiden Sie nicht unter dem "Lost-Icon-Syndrom", das auftritt, wenn Monitore mit mehreren Auflösungen verwendet werden
  • Sortieren Sie die Symbole alphabetisch und alphabetisch, wobei das Präfix "Link zu" ignoriert wird. Sortieren Sie nach dem aufsteigenden oder absteigenden Änderungsdatum
  • Lassen Sie je nach Monitor unterschiedliche Rastergrößen (Spalten x Zeilen) zu, z. B. mehr auf 4K-Monitor als auf 2K-Monitor
  • Instant - Test - Taste für den schnellen Experimentieren auf Spalte x Zeile Änderungen oder reservierten Platz Änderungen für Monitor links, oben, rechts oder unten Bereiche
  • Die Testschaltfläche hält x Sekunden an, die Sie definiert haben. Löschen Sie alle Fenster vor dem Test und stellen Sie sie nach dem Test wieder her
  • Bash-Skript für einfache Änderungen

Sie können das Skript auf Github erhalten .

Hier ist der Hauptbildschirm:

ikonisches Hauptmenü.png

Besuchen Sie die GitHub - Seite für ikonische zu sehen , alle anderen Bildschirme, Erklärungen und eine Kopie des Skripts.

WinEunuuchs2Unix
quelle