Me gustaría mantener mi escritorio siempre organizado por nombre. ¿Cómo puedo conseguir esto?
Me gustaría mantener mi escritorio siempre organizado por nombre. ¿Cómo puedo conseguir esto?
Respuestas:
El siguiente script reorganizará un escritorio como:
... en un escritorio ordenado alfabéticamente como:
Ordenado:
Además, puede establecer un número arbitrario de elementos verticalmente (filas); el espaciado horizontal se establecerá automáticamente en consecuencia.
#!/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
El script necesita xdotool
:
sudo apt-get install xdotool
Copie el script en un archivo vacío, guárdelo como arrange_dt.py
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.
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
Puede influir en la disposición de los iconos de tres maneras:
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)
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
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
La explicación a continuación es principalmente una explicación sobre el concepto en lugar de la codificación
python
'sos.listdir(Desktop)
Luego creamos la matriz:
En la imagen a continuación, estos cuadrados "virtuales" son visibles, el punto rojo es donde se coloca el icono.
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.
6 -50 -50
pero tres carpetas están ligeramente desplazadas. Alguna idea de por qué? Captura de pantalla: i.imgur.com/XuGIiBT.png
Inspirado en parte por la pregunta anterior, escribí iconic
para resolver este problema permitiéndole ordenar los iconos de cuatro maneras diferentes. Además:
Puedes obtener el script en github .
Aquí está la pantalla principal:
Visite la página de github para ver íconos para ver todas las demás pantallas, explicaciones y una copia del guión.