¿Cómo puedo mantener los íconos del escritorio organizados y ordenados por nombre?

8

Me gustaría mantener mi escritorio siempre organizado por nombre. ¿Cómo puedo conseguir esto?

Escritorio no organizado por nombre:

ingrese la descripción de la imagen aquí

Escritorio después de haber organizado por nombre:

ingrese la descripción de la imagen aquí

orschiro
fuente
Si desvanece los nombres, no podemos ver exactamente cuál es la regla de la organización :)
Jacob Vlijm
@JacobVlijm Parece que la regla de su organización es ordenar los directorios primero, luego los archivos. Probablemente también podamos adivinar que es alfabético
Sergiy Kolodyazhnyy
Hola orschiro, ¿cuál de estos dos: chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm
¡Disculpas por esa información faltante! El escritorio está organizado alfabéticamente comenzando con carpetas de la A a la Z y luego seguidas de archivos. ¿Es suficiente esa información?
orschiro

Respuestas:

9

Organice los iconos del escritorio alfabéticamente por comando

El siguiente script reorganizará un escritorio como:

ingrese la descripción de la imagen aquí

... en un escritorio ordenado alfabéticamente como:

ingrese la descripción de la imagen aquí

Ordenado:

  • directorios primero, luego archivos
  • de arriba a abajo, de izquierda a derecha

Establecer el número de elementos verticalmente

Además, puede establecer un número arbitrario de elementos verticalmente (filas); el espaciado horizontal se establecerá automáticamente en consecuencia.

La secuencia de comandos

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

Cómo utilizar

  1. El script necesita xdotool:

      sudo apt-get install xdotool
  2. Copie el script en un archivo vacío, guárdelo como arrange_dt.py

  3. Prueba: ejecútelo con el comando:

    python3 /path/to/arrange_dt.py

    dentro de 20 segundos, haga clic en el escritorio, se aplicará su nueva disposición. Si ejecuta el script desde un acceso directo, mientras el escritorio está al frente, la disposición se aplicará de inmediato. Si el escritorio no está en primer plano, el script espera un máximo de 20 segundos. Si el tiempo excede, simplemente presioneF5para aplicar.

  4. Si todo funciona bien, agréguelo a una tecla de acceso directo: elija: Configuración del sistema> "Teclado"> "Accesos directos"> "Accesos directos personalizados". Haga clic en "+" y agregue el comando:

    python3 /path/to/arrange_dt.py

Opciones

Puede influir en la disposición de los iconos de tres maneras:

  1. establecer el tamaño de los "mosaicos"

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

    Esto establecerá el número (máximo) de iconos verticalmente. El tamaño de los "mosaicos" será igual (x, y)

  2. establecer el desplazamiento horizontal

    x_offs = -15 

    Esto establecerá la desviación x de la posición predeterminada de la matriz de iconos como un todo

  3. Establecer el desplazamiento vertical

    y_offs = -30

    Esto establecerá la desviación y de la posición predeterminada de la matriz de iconos

    Un ejemplo, 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

    ingrese la descripción de la imagen aquí

Explicación

La explicación a continuación es principalmente una explicación sobre el concepto en lugar de la codificación

  • Para posicionar los iconos alfabéticamente, primero enumeramos los elementos en el escritorio, usando python'sos.listdir(Desktop)
  • Luego dividimos los archivos en dos sublistas; archivos / carpetas, y clasifique ambas listas, únalas nuevamente, primero las carpetas.
  • Luego creamos la matriz:

    • Como el número de filas se establece en el encabezado del script, dividimos la altura de la pantalla por el número de filas. Por lo tanto, tenemos el tamaño de los "cuadrados" en los que se colocarán los iconos (centrados).
    • Dado que los íconos están espaciados horizontalmente de manera similar , podemos calcular el número (máximo) de columnas dividiendo el ancho de la pantalla por el ancho de los "cuadrados" en los que se colocarán los íconos (por ícono), redondeados hacia abajo primer entero a continuación.
    • En la imagen a continuación, estos cuadrados "virtuales" son visibles, el punto rojo es donde se coloca el icono.

      ingrese la descripción de la imagen aquí

    • Luego, todo lo que tenemos que hacer es colocar el primer ícono en la mitad del tamaño de un cuadrado, tanto horizontal como verticalmente.

    • Para encontrar la posición x de todos los demás íconos, simplemente necesitamos dividir su índice (comenzando con cero) por el número de filas, redondeado hacia abajo. El resultado se agregará a la posición x del primer ícono (arriba a la izquierda), por ejemplo:

      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
    • Para encontrar la posición y de todos los demás íconos, simplemente necesitamos el resto del índice y el número de filas. El resultado x el ancho de un cuadrado se agregará a la posición y del primer icono (arriba a la izquierda), por ejemplo:

      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
  • Posteriormente, colocamos los iconos en el escritorio, usando el comando:

    gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
  • Finalmente, debemos presionar F5 con el escritorio al frente para aplicar el diseño modificado (actualizar el escritorio). Si ese es el caso, se hará de inmediato. Si no, el script se vuelve a intentar durante 20 segundos si el escritorio está al frente, prácticamente presiona F5y se rompe. Si después de 20 segundos el escritorio aún no estaba al frente, debe presionar manualmente F5.

Jacob Vlijm
fuente
Qué guión fantástico y versátil. Muchas gracias Jacob! :-)
orschiro
@orschiro como siempre, sus preguntas son de alguna manera inspiradoras y geniales para trabajar :)
Jacob Vlijm
Simplemente me encuentro con cosas que creo que deberían ser el comportamiento predeterminado en Ubuntu. ¡Feliz de ver que hay personas muy capacitadas para hacer realidad esta realidad!
orschiro
Hola Jacob, usé los valores, 6 -50 -50pero tres carpetas están ligeramente desplazadas. Alguna idea de por qué? Captura de pantalla: i.imgur.com/XuGIiBT.png
orschiro
Hola @orschiro Eso se debe a la diferencia en el ancho de los nombres de las carpetas. Si el comando no se puede ejecutar debido a eso, toma la primera opción posible. Mejor no establecer el desplazamiento demasiado negativo :)
Jacob Vlijm
0

Inspirado en parte por la pregunta anterior, escribí iconicpara resolver este problema permitiéndole ordenar los iconos de cuatro maneras diferentes. Además:

  • Defina una cuadrícula para espaciar iconos más cerca o más separados
  • Guarde la configuración de escritorio del ícono y restáurelo más tarde para diferentes configuraciones de hogar y trabajo
  • Le permite mover íconos a cualquiera de los tres monitores
  • No sufrir el "síndrome del ícono perdido" que ocurre cuando se utilizan monitores de múltiples resoluciones
  • Ordenar iconos alfabéticamente, alfabéticamente con el prefijo "Enlace a" ignorado, ordenar por fecha modificada ascendente o fecha descendente
  • Permita diferentes tamaños de cuadrícula (columnas x filas) según el monitor, por ejemplo, más en un monitor 4K que en un monitor 2K
  • Botón de prueba instantánea para una rápida experimentación en los cambios de columna x fila o cambios de espacio reservado para las áreas izquierda, superior, derecha o inferior del monitor
  • El botón de prueba durará x segundos definidos por usted, borrará todas las ventanas antes de la prueba y las restaurará después de la prueba
  • Bash script para modificaciones fáciles

Puedes obtener el script en github .

Aquí está la pantalla principal:

iconic main menu.png

Visite la página de github para ver íconos para ver todas las demás pantallas, explicaciones y una copia del guión.

WinEunuuchs2Unix
fuente