Vorrei che il mio desktop fosse sempre organizzato per nome. Come posso raggiungere questo obiettivo?
Vorrei che il mio desktop fosse sempre organizzato per nome. Come posso raggiungere questo obiettivo?
Risposte:
Lo script seguente ridisporrà un desktop come:
... in un desktop in ordine alfabetico come:
Ordinato:
Inoltre, è possibile impostare un numero arbitrario di elementi in verticale (righe); la spaziatura orizzontale verrà impostata automaticamente di conseguenza.
#!/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
La sceneggiatura ha bisogno di xdotool
:
sudo apt-get install xdotool
Copia lo script in un file vuoto, salvalo come arrange_dt.py
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.
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
Puoi influenzare la disposizione delle icone in tre modi:
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)
imposta l'offset orizzontale
x_offs = -15
Questo imposterà la deviazione x dalla posizione predefinita della matrice icona nel suo insieme
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
La spiegazione che segue è principalmente una spiegazione sul concetto piuttosto che sulla codifica
python
'sos.listdir(Desktop)
Quindi creiamo la matrice:
Nell'immagine seguente, questi quadrati "virtuali" sono visibili, il punto rosso è dove si trova l'icona.
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.
6 -50 -50
ma tre cartelle sono leggermente sfalsate. Qualche idea sul perché? Schermata: i.imgur.com/XuGIiBT.png
Ispirato in parte alla domanda precedente, ho scritto iconic
per risolvere questo problema, permettendoti di ordinare le icone in quattro modi diversi. Inoltre sarà:
Puoi ottenere lo script su github .
Ecco la schermata principale:
Visita la pagina di github per l' iconico per vedere tutte le altre schermate, spiegazioni e una copia della sceneggiatura.