Gostaria de manter minha área de trabalho sempre organizada por nome. Como posso conseguir isso?
Gostaria de manter minha área de trabalho sempre organizada por nome. Como posso conseguir isso?
Respostas:
O script abaixo irá reorganizar uma área de trabalho como:
... em uma área de trabalho ordenada alfabeticamente, como:
Encomenda:
Além disso, você pode definir um número arbitrário de itens verticalmente (linhas); o espaçamento horizontal será definido automaticamente de acordo.
#!/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
O script precisa xdotool
:
sudo apt-get install xdotool
Copie o script em um arquivo vazio, salve-o como arrange_dt.py
Teste-execute pelo comando:
python3 /path/to/arrange_dt.py
dentro de 20 segundos, clique na área de trabalho, seu novo arranjo será aplicado. Se você executar o script a partir de um atalho, enquanto a área de trabalho estiver na frente, o arranjo será aplicado imediatamente. Se a área de trabalho não estiver na frente, o script aguardará no máximo 20 segundos. Se o tempo exceder, basta pressionarF5para aplicar.
Se tudo funcionar bem, adicione-o a uma tecla de atalho: escolha: Configurações do sistema> "Teclado"> "Atalhos"> "Atalhos personalizados". Clique no "+" e adicione o comando:
python3 /path/to/arrange_dt.py
Você pode influenciar a organização dos ícones de três maneiras:
defina o tamanho dos "ladrilhos"
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
Isso definirá o número (máximo) de ícones verticalmente. O tamanho dos "ladrilhos" será igual (x, y)
definir o deslocamento horizontal
x_offs = -15
Isso definirá o desvio-x da posição padrão da matriz de ícones como um todo
Defina o deslocamento vertical
y_offs = -30
Isso definirá o desvio y da posição padrão da matriz de ícones
Um exemplo, utilizando-se:
# 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
A explicação abaixo é principalmente uma explicação sobre o conceito e não sobre a codificação
python
'sos.listdir(Desktop)
Então criamos a matriz:
Na imagem abaixo, esses quadrados "virtuais" são visíveis, o ponto vermelho é onde o ícone é colocado.
Então, tudo o que precisamos fazer é colocar o primeiro ícone na metade do tamanho de um quadrado, na horizontal e na vertical.
Para encontrar a posição x de todos os outros ícones, basta dividir o índice (começando com zero) pelo número de linhas arredondadas para baixo. O resultado será adicionado à posição x do primeiro ícone (canto superior esquerdo), por exemplo:
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 a posição y de todos os outros ícones, precisamos simplesmente do restante do índice e do número de linhas. O resultado x a largura de um quadrado será adicionado à posição y do primeiro ícone (canto superior esquerdo), por exemplo:
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 os ícones na área de trabalho, usando o comando:
gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
Finalmente, precisamos pressionar F5 com a área de trabalho na frente para aplicar o layout alterado (atualizar a área de trabalho). Se for esse o caso, será feito imediatamente. Caso contrário, o script tentará novamente por 20 segundos, se a área de trabalho estiver na frente, praticamente pressiona F5e quebra. Se depois de 20 segundos a área de trabalho ainda não estiver na frente, você precisará pressionar manualmente F5.
6 -50 -50
mas três pastas são ligeiramente deslocadas. Alguma idéia do porquê? Captura de tela: i.imgur.com/XuGIiBT.png
Inspirado em parte pela pergunta acima, escrevi iconic
para resolver esse problema, permitindo que você classifique os ícones de quatro maneiras diferentes. Além disso, irá:
Você pode obter o script no github .
Aqui está a tela principal:
Visite a página do github para icônicos para ver todas as outras telas, explicações e uma cópia do script.