web-dev-qa-db-fra.com

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

Je souhaite que mon bureau soit toujours organisé par nom. Comment puis-je atteindre cet objectif?

Bureau non organisé par nom:

enter image description here

Bureau après avoir organisé par nom:

enter image description here

8
orschiro

Organiser les icônes du bureau alphabétiquement par commande

Le script ci-dessous va réorganiser un bureau tel que:

enter image description here

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

enter image description here

Commandé:

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

Définir 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 le nom arrange_dt.py

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

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

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. Le taille des "tuiles" sera égal (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
    

    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
    

    enter image description here

Explication

L'explication ci-dessous est principalement une explication sur le concept ​​plutôt que le codage

  • Pour positionner les icônes par ordre alphabétique, listons d’abord les éléments sur le bureau, en utilisant python's os.listdir(Desktop)
  • Ensuite, nous avons divisé les fichiers en deux sous-listes; fichiers/dossiers, et trier les deux listes, les rejoindre, les dossiers en premier.
  • Ensuite, nous créons la matrice:

    • Le nombre de lignes étant défini dans l'en-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).
    • Puisque les icônes sont espacées de la même façon horizontalement, nous pouvons alors 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 au premier entier inférieur 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.

      enter image description here

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

9
Jacob Vlijm

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:

  • Définir une grille pour espacer les icônes de plus en plus proches
  • Enregistrez la configuration de bureau d'icônes et restaurez-la plus tard pour différentes configurations à la maison et au travail
  • Vous permet de déplacer des icônes sur l'un des trois moniteurs
  • Ne pas souffrir du "syndrome d'icône perdue" qui se produit lorsque des moniteurs de plusieurs résolutions sont utilisés
  • Triez les icônes alphabétiquement, alphabétiquement, le préfixe "Lien vers" étant ignoré, triez par date modifiée par ordre croissant ou par date décroissante.
  • Autorise une taille de grille différente (colonnes x lignes) en fonction du moniteur, par exemple davantage sur un moniteur 4K que sur un moniteur 2K
  • Bouton Instant Test pour une expérimentation rapide sur les modifications de colonne x rangée ou les modifications d'espace réservé pour les zones de gauche, du haut, de droite ou du bas du moniteur
  • Le bouton Test durera x secondes, défini par vous, effacez toutes les fenêtres avant le test et les restaure après le test.
  • Script Bash pour des modifications faciles

Vous pouvez obtenir le script sur github .

Voici l'écran principal:

iconic main menu.png

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

0
WinEunuuchs2Unix