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

8

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

Área de trabalho não organizada por nome:

insira a descrição da imagem aqui

Área de trabalho depois de organizar pelo nome:

insira a descrição da imagem aqui

orschiro
fonte
Se você desaparecer os nomes, não podemos ver exatamente o que é a regra organização :)
Jacob Vlijm
@JacobVlijm Parece que a regra de sua organização é classificar os diretórios primeiro e depois os arquivos. Provavelmente também podemos adivinhar que é alfabético #
Sergiy Kolodyazhnyy
Orschiro oi qual destes dois: chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm
Desculpas pela falta de informações! A área de trabalho é organizada em ordem alfabética, começando com pastas de A a Z e, em seguida, seguida por arquivos. Essa informação é suficiente?
Orschiro

Respostas:

9

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

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

insira a descrição da imagem aqui

... em uma área de trabalho ordenada alfabeticamente, como:

insira a descrição da imagem aqui

Encomenda:

  • diretórios primeiro e, em seguida, arquivos
  • de cima para baixo, da esquerda para a direita

Defina o número de itens verticalmente

Além disso, você pode definir um número arbitrário de itens verticalmente (linhas); o espaçamento horizontal será definido automaticamente de acordo.

O script

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

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

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

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

Opções

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

  1. 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)

  2. definir o deslocamento horizontal

    x_offs = -15 

    Isso definirá o desvio-x 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, 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

    insira a descrição da imagem aqui

Explicação

A explicação abaixo é principalmente uma explicação sobre o conceito e não sobre a codificação

  • Para posicionar os ícones em ordem alfabética, primeiro listamos os itens na área de trabalho, usando python'sos.listdir(Desktop)
  • Depois, dividimos os arquivos em duas sublistas; arquivos / pastas e classifique as duas listas, junte-se a elas novamente, primeiro as pastas.
  • Então criamos a matriz:

    • Uma vez que o número de linhas é definido na cabeça do script, dividimos a altura da tela, o número de linhas. Assim, temos o tamanho dos "quadrados" nos quais os ícones serão colocados (centralizados).
    • Como os ícones são espaçados de maneira semelhante na horizontal , podemos calcular o número (máximo) de colunas dividindo a largura da tela pela largura dos "quadrados" nos quais os ícones serão colocados (por ícone), arredondados para baixo para o primeiro inteiro abaixo.
    • Na imagem abaixo, esses quadrados "virtuais" são visíveis, o ponto vermelho é onde o ícone é colocado.

      insira a descrição da imagem aqui

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

Jacob Vlijm
fonte
Que roteiro fantástico e versátil. Muito obrigado, Jacob! :-)
orschiro
@orschiro como sempre, suas perguntas são de alguma forma inspirar e grande para trabalhar em :)
Jacob Vlijm
Por acaso tropeço em coisas que acho que deveriam ser o comportamento padrão no Ubuntu. Feliz em ver que existem pessoas muito qualificadas para tornar essa realidade!
Orschiro 11/07/16
Hey Jacob, eu usei os valores, 6 -50 -50mas três pastas são ligeiramente deslocadas. Alguma idéia do porquê? Captura de tela: i.imgur.com/XuGIiBT.png
orschiro:
Oi @orschiro Isso é devido à diferença na largura dos nomes das pastas. Se o comando não puder ser executado por causa disso, será utilizada a primeira opção possível. Melhor não definir o :) demasiado negativo compensado
Jacob Vlijm
0

Inspirado em parte pela pergunta acima, escrevi iconicpara resolver esse problema, permitindo que você classifique os ícones de quatro maneiras diferentes. Além disso, irá:

  • Definir uma grade para espaçar ícones mais próximos ou mais afastados
  • Salve a configuração da área de trabalho do ícone e restaure-a mais tarde para configurações diferentes em casa e no trabalho
  • Permite mover ícones para qualquer um dos três monitores
  • Não sofrer a "síndrome do ícone perdido" que ocorre quando monitores de várias resoluções são usadas
  • Classifique os ícones em ordem alfabética, alfabeticamente com o prefixo "Vincular a" ignorado, classifique por data modificada ascendente ou descendente
  • Permitir diferente tamanho da grade (colunas x linhas) dependendo do monitor, por exemplo, mais de 4K monitor de que 2K do monitor
  • Botão Teste instantâneo para experimentação rápida nas alterações de coluna x linha ou alterações de espaço reservado para monitorar as áreas esquerda, superior, direita ou inferior
  • O botão de teste durará x segundos definidos por você, limpe todas as janelas antes do teste e restaure-as após o teste
  • Script Bash para modificações fáceis

Você pode obter o script no github .

Aqui está a tela principal:

iconic main menu.png

Visite a página do github para icônicos para ver todas as outras telas, explicações e uma cópia do script.

WinEunuuchs2Unix
fonte