Come posso sempre organizzare le icone del desktop e ordinarle per nome?


8

Vorrei che il mio desktop fosse sempre organizzato per nome. Come posso raggiungere questo obiettivo?

Desktop non organizzato per nome:

inserisci qui la descrizione dell'immagine

Desktop dopo aver organizzato per nome:

inserisci qui la descrizione dell'immagine


Se si sbiadiscono i nomi, non possiamo vedere esattamente qual è la regola dell'organizzazione :)
Jacob Vlijm,

@JacobVlijm Sembra che la sua regola di organizzazione sia prima di ordinare i dir, poi i file. Probabilmente possiamo anche immaginare che sia alfabetico
Sergiy Kolodyazhnyy il


Ci scusiamo per le informazioni mancanti! Il desktop è organizzato in ordine alfabetico a partire dalle cartelle dalla A alla Z e quindi seguito dai file. Queste informazioni sono sufficienti?
Orschiro,

Risposte:


9

Disporre le icone del desktop in ordine alfabetico tramite comando

Lo script seguente ridisporrà un desktop come:

inserisci qui la descrizione dell'immagine

... in un desktop in ordine alfabetico come:

inserisci qui la descrizione dell'immagine

Ordinato:

  • prima le directory, poi i file
  • dall'alto verso il basso, da sinistra a destra

Imposta il numero di elementi in verticale

Inoltre, è possibile impostare un numero arbitrario di elementi in verticale (righe); la spaziatura orizzontale verrà impostata automaticamente di conseguenza.

Il copione

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

Come usare

  1. La sceneggiatura ha bisogno di xdotool:

      sudo apt-get install xdotool
  2. Copia lo script in un file vuoto, salvalo come arrange_dt.py

  3. Prova- eseguilo con il comando:

    python3 /path/to/arrange_dt.py

    entro 20 secondi fai clic sul desktop, verrà applicata la nuova disposizione. Se si esegue lo script da un collegamento, mentre il desktop è in primo piano, la disposizione verrà applicata immediatamente. Se il desktop non è in primo piano, lo script attende per un massimo di 20 secondi. Se il tempo supera, è sufficiente premereF5per applicare.

  4. Se tutto funziona correttamente, aggiungilo a un tasto di scelta rapida: scegli: Impostazioni di sistema> "Tastiera"> "Collegamenti"> "Collegamenti personalizzati". Fai clic su "+" e aggiungi il comando:

    python3 /path/to/arrange_dt.py

Opzioni

Puoi influenzare la disposizione delle icone in tre modi:

  1. imposta la dimensione delle "tessere"

    # set the size of the squares (indirectly, by setting n- rows)
    rows = 10
    

    Ciò imposterà il numero (massimo) di icone in verticale. La dimensione delle "tessere" sarà uguale (x, y)

  2. imposta l'offset orizzontale

    x_offs = -15 

    Questo imposterà la deviazione x dalla posizione predefinita della matrice icona nel suo insieme

  3. Imposta l'offset verticale

    y_offs = -30

    Questo imposterà la deviazione y dalla posizione predefinita della matrice icona

    Un esempio, usando:

    # 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
    

    inserisci qui la descrizione dell'immagine

Spiegazione

La spiegazione che segue è principalmente una spiegazione sul concetto piuttosto che sulla codifica

  • Per posizionare le icone in ordine alfabetico, per prima cosa elenchiamo gli elementi sul desktop, usando python'sos.listdir(Desktop)
  • Quindi dividiamo i file in due elenchi secondari; file / cartelle e ordina entrambi gli elenchi, uniscili nuovamente, prima le cartelle.
  • Quindi creiamo la matrice:

    • Poiché il numero di righe è impostato nella testa dello script, dividiamo l'altezza dello schermo per il numero di righe. Quindi abbiamo la dimensione dei "quadrati" in cui verranno posizionate le icone (centrate).
    • Poiché le icone sono spaziate in modo simile in senso orizzontale , possiamo quindi calcolare il (massimo) numero di colonne dividendo la larghezza dello schermo per la larghezza dei "quadrati" in cui verranno posizionate le icone (per icona), arrotondate per difetto al primo intero di seguito.
    • Nell'immagine seguente, questi quadrati "virtuali" sono visibili, il punto rosso è dove si trova l'icona.

      inserisci qui la descrizione dell'immagine

    • Quindi tutto ciò che dobbiamo fare è posizionare la prima icona su metà delle dimensioni di un quadrato, sia in orizzontale che in verticale.

    • Per trovare la posizione x di tutte le altre icone, dobbiamo semplicemente dividere il loro indice (iniziando da zero) per il numero di righe, arrotondato per difetto. Il risultato verrà aggiunto alla posizione x della prima icona (in alto a sinistra), ad esempio:

      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
      
    • Per trovare la posizione y di tutte le altre icone, abbiamo semplicemente bisogno del resto dell'indice e del numero di righe. Il risultato x la larghezza di un quadrato verrà aggiunto alla posizione y della prima icona (in alto a sinistra), ad esempio:

      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
      
  • Successivamente, posizioniamo le icone sul desktop, usando il comando:

    gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
  • Infine, dobbiamo premere F5 con il desktop davanti per applicare il layout modificato (aggiorna il desktop). In tal caso, verrà fatto immediatamente. In caso contrario, lo script restituisce per 20 secondi se il desktop è in primo piano, praticamente preme F5e si rompe. Se dopo 20 secondi desktop ancora non era di fronte, è necessario premere manualmente F5.


Che sceneggiatura fantastica e versatile. Grazie mille Jacob! :-)
Orschiro,

@orschiro come sempre, le tue domande sono in qualche modo stimolanti e fantastiche su cui lavorare :)
Jacob Vlijm,

Mi capita di imbattermi in cose che penso dovrebbero essere il comportamento predefinito in Ubuntu. Felice di vedere che ci sono persone altamente qualificate per realizzare questa realtà!
Orschiro,

Ehi Jacob, ho usato i valori 6 -50 -50ma tre cartelle sono leggermente sfalsate. Qualche idea sul perché? Schermata: i.imgur.com/XuGIiBT.png
orschiro

Ciao @orschiro Questo è dovuto alla differenza di larghezza dei nomi delle cartelle. Se il comando non può essere eseguito a causa di ciò, accetta la prima opzione possibile. Meglio non impostare l'offset troppo negativo :)
Jacob Vlijm,

0

Ispirato in parte alla domanda precedente, ho scritto iconicper risolvere questo problema, permettendoti di ordinare le icone in quattro modi diversi. Inoltre sarà:

  • Definire una griglia per posizionare le icone più vicine o più distanti
  • Salva l'icona sul desktop e ripristinala in un secondo momento per diverse configurazioni a casa e al lavoro
  • Consente di spostare le icone su uno dei tre monitor
  • Non subire la "sindrome dell'icona perduta" che si verifica quando si utilizzano monitor di risoluzioni multiple
  • Ordina le icone in ordine alfabetico, alfabetico con il prefisso "Collegamento a" ignorato, ordina per data modificata crescente o data decrescente
  • Consenti dimensioni della griglia diverse (colonne x righe) a seconda del monitor, ad esempio più sul monitor 4K rispetto al monitor 2K
  • Pulsante Test istantaneo per una rapida sperimentazione su cambiamenti di colonna x riga o cambiamenti di spazio riservato per le aree di monitoraggio sinistra, superiore, destra o inferiore
  • Il pulsante Test durerà per x secondi da te definiti, cancella tutte le finestre prima del test e ripristinale dopo il test
  • Script Bash per facili modifiche

Puoi ottenere lo script su github .

Ecco la schermata principale:

iconico menu principale.png

Visita la pagina di github per l' iconico per vedere tutte le altre schermate, spiegazioni e una copia della sceneggiatura.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.