Как я могу всегда организовывать значки рабочего стола и сортировать их по имени?

8

Я бы хотел, чтобы мой рабочий стол всегда был организован по имени. Как мне этого добиться?

Рабочий стол не организован по имени:

введите описание изображения здесь

Рабочий стол после организации по имени:

введите описание изображения здесь

orschiro
источник
Если вы потеряете имена, мы не сможем точно понять, каково правило организации :)
Джейкоб Влейм,
@JacobVlijm Похоже, его организационное правило - сначала сортировать каталоги, а затем файлы. Мы также, вероятно, можем догадаться, что это по алфавиту
Сергей Колодяжный
Привет, Орширо, кто из этих двоих: chat.stackexchange.com/transcript/message/30927193#30927193
Джейкоб Влейм,
Извиняюсь за эту недостающую информацию! Рабочий стол организован в алфавитном порядке, начиная с папок от А до Я, а затем следуют файлы. Достаточно ли этой информации?
Орширо

Ответы:

9

Расположите значки на рабочем столе в алфавитном порядке по команде

Сценарий ниже переставит рабочий стол, как:

введите описание изображения здесь

... в алфавитном порядке рабочего стола, как:

введите описание изображения здесь

Заказал:

  • сначала каталоги, потом файлы
  • сверху вниз, слева направо

Установите количество предметов по вертикали

Кроме того, вы можете установить произвольное количество элементов по вертикали (строк); горизонтальный интервал будет установлен автоматически соответственно.

Сценарий

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

Как пользоваться

  1. Скрипту нужно xdotool:

      sudo apt-get install xdotool
  2. Скопируйте скрипт в пустой файл, сохраните его как arrange_dt.py

  3. Протестируйте его с помощью команды:

    python3 /path/to/arrange_dt.py

    в течение 20 секунд нажмите на рабочий стол, ваше новое соглашение будет применено. Если вы запускаете скрипт из ярлыка, когда рабочий стол находится впереди, расположение будет применено немедленно. Если рабочий стол не передний, скрипт ждет максимум 20 секунд. Если время превышает, просто нажмите,F5чтобы применить.

  4. Если все работает нормально, добавьте его к сочетанию клавиш: выберите: «Системные настройки»> «Клавиатура»> «Ярлыки»> «Пользовательские ярлыки». Нажмите «+» и добавьте команду:

    python3 /path/to/arrange_dt.py

Опции

Вы можете повлиять на расположение иконок тремя способами:

  1. установить размер "плитки"

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

    Это установит (максимальное) количество значков по вертикали. Размер из «плитки» будет, равный (х, у)

  2. установить горизонтальное смещение

    x_offs = -15 

    Это установит x-отклонение от положения по умолчанию матрицы значков в целом

  3. Установите вертикальное смещение

    y_offs = -30

    Это установит отклонение от положения по умолчанию матрицы значков.

    Пример, использующий:

    # 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
    

    введите описание изображения здесь

объяснение

Приведенное ниже объяснение в основном объясняет концепцию, а не кодирование

  • Чтобы расположить иконки в алфавитном порядке, мы первый список элементов на рабочем столе, используя python«ю.ш.os.listdir(Desktop)
  • Затем мы разделяем файлы на два подсписка; файлы / папки, и сортируйте оба списка, соединяйте их снова, сначала папки.
  • Затем мы создаем матрицу:

    • Поскольку количество строк задается в заголовке скрипта, мы делим высоту экрана на количество строк. Таким образом, у нас есть размер «квадратов», в которые будут помещены значки (по центру).
    • Поскольку значки расположены на одинаковом расстоянии по горизонтали , мы можем затем вычислить (максимальное) количество столбцов, разделив ширину экрана на ширину «квадратов», в которые будут помещены значки (на значок), округленные до первое целое число ниже.
    • На изображении ниже эти «виртуальные» квадраты видны, красная точка - там, где находится значок.

      введите описание изображения здесь

    • Тогда все, что нам нужно сделать, это поместить первый значок на половину размера квадрата, как по горизонтали, так и по вертикали.

    • Чтобы найти x-положение всех других значков, нам просто нужно разделить их индекс (начиная с нуля) на количество строк, округленных в меньшую сторону. Результат будет добавлен к позиции x первого значка (вверху слева), например:

      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
      
    • Чтобы найти y-положение всех других значков, нам просто понадобится остаток индекса и количество строк. Результат x ширина квадрата будет добавлен к позиции y первого значка (вверху слева), например:

      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
      
  • Впоследствии мы размещаем значки на рабочем столе, используя команду:

    gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
  • Наконец, нам нужно нажать F5 с рабочим столом впереди , чтобы применить измененный макет (обновить рабочий стол). Если это так, это будет сделано немедленно. Если нет, сценарий повторяется в течение 20 секунд, если рабочий стол находится впереди, фактически нажимает F5и ломает. Если через 20 секунд рабочий стол все еще не был впереди, вам нужно нажать вручную F5.

Якоб Влейм
источник
Какой фантастический и универсальный сценарий. Большое спасибо, Джейкоб! :-)
Орширо
@orschiro, как всегда, твои вопросы как-то вдохновляют, и над ними здорово работать :)
Jacob Vlijm
Я просто наткнулся на то, что, по моему мнению, должно быть поведением по умолчанию в Ubuntu. Рад видеть, что есть очень квалифицированные люди, чтобы сделать это реальностью!
Орширо
Эй, Джейкоб, я использовал значения, 6 -50 -50но три папки слегка смещены. Есть идеи почему? Снимок экрана: i.imgur.com/XuGIiBT.png
orschiro
Привет @orschiro Это из-за разницы в ширине имен папок. Если команда не может быть выполнена из-за этого, она выбирает первый возможный вариант. Лучше не устанавливать слишком отрицательное смещение :)
Jacob Vlijm
0

Отчасти вдохновленный вышеуказанным вопросом, я написал iconicдля решения этой проблемы, позволив вам сортировать значки четырьмя различными способами. Дополнительно это будет:

  • Определите сетку для размещения значков ближе или дальше друг от друга
  • Сохраните значок настройки рабочего стола и восстановите его позже для различных настроек дома и на работе.
  • Позволяет перемещать значки на любой из трех мониторов
  • Не страдать от «синдрома потерянного значка», возникающего при использовании мониторов с несколькими разрешениями
  • Сортировка значков по алфавиту, по алфавиту с префиксом «Ссылка на» игнорируется, сортировка по дате изменения по возрастанию или по дате убывания
  • Разрешить различный размер сетки (столбцы x строки) в зависимости от монитора, например больше на мониторе 4K, чем на мониторе 2K
  • Кнопка мгновенного тестирования для быстрого экспериментирования с изменениями строк столбца x или зарезервированного пространства для левой, верхней, правой или нижней областей монитора
  • Кнопка тестирования будет действовать в течение заданных вами секунд x, очистить все окна перед тестом и восстановить их после теста
  • Скрипт Bash для простых изменений

Вы можете получить скрипт на github .

Вот главный экран:

iconic main menu.png

Посетите страницу GitHub для иконических, чтобы увидеть все другие экраны, объяснения и копию сценария.

WinEunuuchs2Unix
источник