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


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

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

enter image description here

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

enter image description here


8
2017-07-09 21:46


происхождения


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


ответы:


Упорядочить значки рабочего стола по алфавиту по команде

В приведенном ниже сценарии будет изменен рабочий стол, например:

enter image description here

... в алфавитном порядке:

enter image description here

Приказал:

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

Задайте количество элементов по вертикали

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

Сценарий

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

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

  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
    

    enter image description here

объяснение

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

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

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

      enter image description here

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

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


9
2017-07-10 12:42



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