Como posso sempre manter os ícones da área de trabalho organizados e classificados por nome?

8

Eu gostaria de manter minha área de trabalho sempre organizada por nome. Como posso conseguir isso?

Área de trabalho não organizada por nome:

Desktopapósterorganizadopelonome:

    
por orschiro 09.07.2016 / 23:46

1 resposta

9

Organize os ícones da área de trabalho por ordem alfabética

O script abaixo reorganizará uma área de trabalho como:

...emumaáreadetrabalhoordenadaalfabeticamente,como:

Encomendado:

  • diretóriosprimeiro,depoisarquivos
  • decimaparabaixo,daesquerdaparaadireita

Definaonúmerodeitensverticalmente

Alémdisso,vocêpodedefinirumnúmeroarbitráriodeitensverticalmente(linhas);oespaçamentohorizontalserádefinidoautomaticamentedeacordo.

Oscript

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

Como usar

  1. O script precisa de xdotool :

      sudo apt-get install xdotool
    
  2. Copie o script em um arquivo vazio, salve-o como arrange_dt.py

  3. Teste - execute-o 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 em 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 aguarda no máximo 20 segundos. Se o tempo exceder, simplesmente pressione F5 para aplicar.

  4. Se tudo funcionar bem, adicione-o a uma tecla de atalho: escolha: Configurações do sistema > "Teclado" > "Atalhos" > "Atalhos personalizados". Clique no botão "+" e adicione o comando:

    python3 /path/to/arrange_dt.py
    

Opções

Você pode influenciar a organização dos ícones de três maneiras:

  1. defina o tamanho dos "blocos"

    # 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 "tiles" será igual (x, y)

  2. defina o deslocamento horizontal

    x_offs = -15 
    

    Isto irá definir o x-desvio da posição padrão da matriz de ícones como um todo

  3. Defina o deslocamento vertical

    y_offs = -30
    

    Isso definirá o desvio Y da posição padrão da matriz de ícones

    Um exemplo, 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
    

Explicação

Aexplicaçãoabaixoéprincipalmenteumaexplicaçãosobreoconceitoemvezdacodificação

  • Paraposicionarosíconesemordemalfabética,primeirolistamosositensnaáreadetrabalho,usandopython'os.listdir(Desktop)
  • Então,dividimososarquivosemduassublistas;arquivos/pastaseclassificarambasaslistas,juntá-lasnovamente,pastasprimeiro.
  • Emseguida,criamosamatriz:

    • Comoonúmerodelinhasédefinidonacabeçadoscript,dividimosaalturadatelapelonúmerodelinhas.Assim,temosotamanhodos"quadrados" em que os ícones serão colocados (centrados).
    • Como os ícones são espaçados de maneira semelhante horizontalmente , podemos calcular o número (máximo) de colunas dividindo a largura da tela pela largura dos "quadrados "na qual os ícones serão colocados (por ícone), arredondados para o primeiro inteiro abaixo.
    • 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, tanto horizontal como verticalmente.

    • Para encontrar a posição x de todos os outros ícones, basta dividir o índice (começando com zero) pelo número de linhas, arredondado 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, simplesmente precisamos 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, isso será feito imediatamente. Se não, o script recua durante 20 segundos se a área de trabalho estiver na frente, virtualmente pressiona F5 e quebra. Se após 20 segundos a área de trabalho ainda não estiver na frente, você precisa pressionar manualmente F5 .

por Jacob Vlijm 10.07.2016 / 14:42