Comment puis-je toujours garder les icônes du bureau organisées et triées par nom?

8

J'aimerais garder mon bureau toujours organisé par nom. Comment puis-je atteindre cet objectif?

Bureau non organisé par nom:

entrez la description de l'image ici

Bureau après avoir organisé par nom:

entrez la description de l'image ici

orschiro
la source
Si vous effacez les noms, nous ne pouvons pas voir exactement quelle est la règle d'organisation :)
Jacob Vlijm
@JacobVlijm On dirait que sa règle d'organisation est de trier d'abord les répertoires, puis les fichiers. Nous pouvons aussi probablement deviner que c'est alphabétique
Sergiy Kolodyazhnyy
Salut orschiro lequel de ces deux: chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm
Toutes mes excuses pour ces informations manquantes! Le bureau est organisé par ordre alphabétique en commençant par les dossiers de A à Z, puis par les fichiers. Ces informations sont-elles suffisantes?
orschiro

Réponses:

9

Organiser les icônes du bureau par ordre alphabétique par commande

Le script ci-dessous réorganisera un bureau comme:

entrez la description de l'image ici

... dans un bureau par ordre alphabétique comme:

entrez la description de l'image ici

Commandé:

  • répertoires d'abord, puis les fichiers
  • de haut en bas, de gauche à droite

Réglez le nombre d'éléments verticalement

De plus, vous pouvez définir un nombre arbitraire d'éléments verticalement (lignes); l'espacement horizontal sera réglé automatiquement en conséquence.

Le scénario

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

Comment utiliser

  1. Le script a besoin de xdotool:

      sudo apt-get install xdotool
  2. Copiez le script dans un fichier vide, enregistrez-le sous arrange_dt.py

  3. Testez-le par 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 au maximum 20 secondes. Si le temps dépasse, appuyez simplementF5pour postuler.

  4. Si tout fonctionne bien, 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

Les options

Vous pouvez influencer la disposition des icônes de trois manières:

  1. 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. La taille des "tuiles" sera égale (x, y)

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

  3. Définir le décalage vertical

    y_offs = -30

    Cela définira l'écart 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

    entrez la description de l'image ici

Explication

L'explication ci-dessous est principalement une explication du concept plutôt que du codage

  • Pour positionner les icônes par ordre alphabétique, nous avons d' abord la liste des éléments sur le bureau, en utilisant python« sos.listdir(Desktop)
  • Ensuite, nous avons divisé les fichiers en deux sous-listes; fichiers / dossiers et triez les deux listes, joignez-les à nouveau, les dossiers d'abord.
  • Ensuite, nous créons la matrice:

    • Étant donné que le nombre de lignes est défini dans la tête du script, nous divisons la hauteur de l'écran par le nombre de lignes. Nous avons donc la taille des "carrés" dans lesquels les icônes seront placées (centrées).
    • Étant donné que les icônes sont espacées de manière similaire horizontalement , nous pouvons ensuite calculer le nombre (max) de colonnes en divisant la largeur de l'écran par la largeur des "carrés" dans lesquels les icônes seront placées (par icône), arrondies à la premier entier ci-dessous.
    • Dans l'image ci-dessous, ces carrés "virtuels" sont visibles, le point rouge est l'endroit où l'icône est placée.

      entrez la description de l'image ici

    • 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 par zéro) par le nombre de lignes, arrondi vers le 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 la 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
  • Par la suite, nous plaçons les icônes sur le bureau, en utilisant la commande:

    gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
  • Enfin, nous devons appuyer F5 avec le bureau devant , pour appliquer la disposition modifiée (actualiser le bureau). Si tel est le cas, cela se fera immédiatement. Sinon, le script réapparaît pendant 20 secondes si le bureau est en face, appuie F5et se casse virtuellement . Si après 20 secondes, le bureau n'était toujours pas devant, vous devez appuyer manuellement sur F5.

Jacob Vlijm
la source
Quel script fantastique et polyvalent. Merci beaucoup, Jacob! :-)
orschiro
@orschiro comme toujours, vos questions sont en quelque sorte inspirantes et géniales à travailler :)
Jacob Vlijm
Il se trouve que je tombe sur des choses qui, à mon avis, devraient être le comportement par défaut dans Ubuntu. Heureux de voir qu'il y a des gens hautement qualifiés pour faire de cette réalité!
orschiro
Hey Jacob, j'ai utilisé les valeurs 6 -50 -50mais trois dossiers sont légèrement décalés. Des idées pourquoi? Capture d'écran: i.imgur.com/XuGIiBT.png
orschiro
Salut @orschiro C'est à cause de la différence de largeur des noms de dossier. Si la commande ne peut pas être exécutée à cause de cela, elle prend la première option possible. Mieux vaut ne pas régler le décalage trop négatif :)
Jacob Vlijm
0

Inspiré en partie par la question ci-dessus, j'ai écrit iconicpour résoudre ce problème en vous permettant de trier les icônes de quatre manières différentes. De plus, il:

  • Définir une grille pour espacer ou rapprocher les icônes
  • Enregistrer l'icône de la configuration du bureau et la restaurer plus tard pour différentes configurations, à la maison et au travail
  • Vous permet de déplacer des icônes vers l'un des trois moniteurs
  • Ne souffrez pas du "syndrome des icônes perdues" qui se produit lorsque des moniteurs de plusieurs résolutions sont utilisés
  • Trier les icônes par ordre alphabétique, avec le préfixe "Lien vers" ignoré, trier par date de modification ascendante ou par date décroissante
  • Autoriser une taille de grille différente (colonnes x lignes) selon le moniteur, EG plus sur le moniteur 4K que sur le moniteur 2K
  • Bouton de test instantané pour une expérimentation rapide sur les changements de colonne x ligne ou les changements d'espace réservé pour les zones gauche, supérieure, droite ou inférieure du moniteur
  • Le bouton de test durera pendant x secondes défini par vous, effacera toutes les fenêtres avant le test et les restaurera après le test
  • Script bash pour des modifications faciles

Vous pouvez obtenir le script sur github .

Voici l'écran principal:

menu principal iconique.png

Visitez la page github pour iconique pour voir tous les autres écrans, explications et une copie du script.

WinEunuuchs2Unix
la source