Je souhaite que mon bureau soit toujours organisé par nom. Comment puis-je atteindre cet objectif?
Le script ci-dessous va réorganiser un bureau tel que:
... dans un bureau ordonné par ordre alphabétique comme:
Commandé:
De plus, vous pouvez définir un nombre arbitraire d'éléments verticalement (lignes); l'espacement horizontal sera réglé automatiquement en conséquence.
#!/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
Le script a besoin de xdotool
:
Sudo apt-get install xdotool
Copiez le script dans un fichier vide, enregistrez-le sous le nom arrange_dt.py
Testez-le avec la commande:
python3 /path/to/arrange_dt.py
dans les 20 secondes cliquez sur le bureau, votre nouvel arrangement sera appliqué. Si vous exécutez le script à partir d'un raccourci, alors que le bureau est en face, l'arrangement sera appliqué immédiatement. Si le bureau n'est pas au premier plan, le script attend 20 secondes maximum. Si le temps dépasse, appuyez simplement sur F5 postuler.
Si tout fonctionne correctement, ajoutez-le à une touche de raccourci: choisissez: Paramètres système> "Clavier"> "Raccourcis"> "Raccourcis personnalisés". Cliquez sur le "+" et ajoutez la commande:
python3 /path/to/arrange_dt.py
Vous pouvez influencer la disposition des icônes de trois manières:
définir la taille des "tuiles"
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
Cela définira le nombre (max) d'icônes verticalement. Le taille des "tuiles" sera égal (x, y)
définir le décalage horizontal
x_offs = -15
Cela définira l'écart x par rapport à la position par défaut de la matrice d'icônes dans son ensemble
Définir le décalage vertical
y_offs = -30
Ceci définira la déviation y par rapport à la position par défaut de la matrice d'icônes
Un exemple, en utilisant:
# 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
L'explication ci-dessous est principalement une explication sur le concept plutôt que le codage
python
's os.listdir(Desktop)
Ensuite, nous créons la matrice:
Dans l'image ci-dessous, ces carrés "virtuels" sont visibles, le point rouge est l'endroit où l'icône est placée.
Ensuite, tout ce que nous avons à faire est de placer la première icône sur la moitié de la taille d’un carré, à la fois horizontalement et verticalement.
Pour trouver la position-x de toutes les autres icônes, il suffit de diviser leur index (en commençant à zéro) par le nombre de lignes, arrondi au bas. Le résultat sera ajouté à la position x de la première icône (en haut à gauche), par exemple:
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
Pour trouver le position-y de toutes les autres icônes, nous avons simplement besoin du reste de l'index et du nombre de lignes. Le résultat x la largeur d'un carré sera ajouté à la position y de la première icône (en haut à gauche), par exemple:
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
Ensuite, nous plaçons les icônes sur le bureau à l’aide de la commande suivante:
gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
Enfin, nous devons appuyer sur F5 avec le bureau devant], pour appliquer la disposition modifiée (actualisez le bureau). Si tel est le cas, ce sera fait immédiatement. Sinon, le script se déclenche pendant 20 secondes si le bureau est devant, appuie virtuellement F5 et pauses. Si après 20 secondes le bureau encore n'était pas devant, vous devez appuyer manuellement sur F5.
Inspiré en partie par la question ci-dessus, j’ai écrit iconic
pour résoudre ce problème en vous permettant de trier les icônes de quatre manières différentes. De plus, il va:
Vous pouvez obtenir le script sur github .
Voici l'écran principal:
Visitez la page github pour iconique pour voir tous les autres écrans, les explications et une copie du script.