Як я можу завжди тримати впорядковані піктограми на робочому столі та сортувати їх за назвою?


8

Я хотів би, щоб мій робочий стіл завжди був організований по імені. Як я можу цього досягти?

Робочий стіл не впорядкований по імені:

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

Робочий стіл після організації назви:

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


Якщо ви згадаєте імена, ми не можемо точно побачити, що є правилом організації :)
Яків Влійм

@JacobVlijm Схоже, що його організація правило - спочатку сортувати dirs, а потім файли. Ми також, мабуть, можемо здогадатися, що це за алфавітом
Сергій Колодяжний

Привіт orschiro, хто з цих двох: chat.stackexchange.com/transcript/message/30927193#30927193
Яків Влійм

Вибачте за відсутні дані! Робочий стіл організовано в алфавітному порядку, починаючи з папок від А до Я, а потім слідують файли. Чи достатньо цієї інформації?
orschiro

Відповіді:


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

    Це встановить відхилення y від положення за замовчуванням матриці значків

    Приклад, використовуючи:

    # 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

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

Пояснення

Нижче пояснення - це переважно пояснення щодо концепції, а не кодування

  • Щоб розташувати піктограми в алфавітному порядку, ми спочатку перераховуємо елементи на робочому столі за допомогою pythonsos.listdir(Desktop)
  • Потім розділяємо файли на два підлісти; файли / папки та сортуйте обидва списки, з'єднайте їх знову, спочатку папки.
  • Потім створюємо матрицю:

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

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

    • Тоді все, що нам потрібно зробити, - це розмістити перший значок на половину розміру квадрата, як горизонтально, так і вертикально.

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

@orschiro, як завжди, ваші запитання якось надихають і над цим чудово працюватимуть :)
Jacob Vlijm

Мені просто трапляється натрапляти на речі, які, на мою думку, повинні бути поведінкою за замовчуванням в Ubuntu. Рада бачити, що є багато кваліфікованих людей, які реалізують цю реальність!
orschiro

Привіт Якоб, я використав ці значення, 6 -50 -50але три папки трохи зміщені. Будь-які ідеї чому? Знімок екрана: i.imgur.com/XuGIiBT.png
orschiro

Привіт @orschiro Це через різницю в ширині назв папок. Якщо команду через це неможливо виконати, вона приймає перший можливий варіант. Краще не встановлюйте компенсацію занадто негативно :)
Яків Влійм

0

Натхненний частково вищезазначеним питанням, я писав, iconicщоб вирішити цю проблему, дозволяючи сортувати іконки чотирма різними способами. Додатково:

  • Визначте значки сітки та пробілу ближче чи далі
  • Збережіть налаштування робочого столу значка та відновіть його пізніше для різних налаштувань будинку та роботи
  • Дозволяє переміщувати піктограми на будь-який із трьох моніторів
  • Не страждайте від "синдрому втраченої ікони", який виникає при використанні моніторів декількох роздільних можливостей
  • Сортувати піктограми за алфавітом, за алфавітом із префіксом "Посилання на" ігнорувати, сортувати за модифікованою датою за зростанням чи за датою зменшення
  • Дозволити різний розмір сітки (стовпці x рядки) залежно від монітора, EG більше на моніторі 4K, ніж на моніторі 2K
  • Кнопка миттєвого тестування для швидкого експерименту над змінами рядків стовпця або зміною місця для лівого, верхнього, правого або нижнього областей монітора
  • Кнопка тестування триватиме x секунди, визначені вами, очистіть усі вікна перед тестом та відновіть їх після тесту
  • Сценарій Bash для легких модифікацій

Ви можете отримати сценарій на github .

Ось головний екран:

iconic main menu.png

Відвідайте сторінку github для знакових, щоб побачити всі інші екрани, пояснення та копію сценарію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.