Я хотів би, щоб мій робочий стіл завжди був організований по імені. Як я можу цього досягти?
Я хотів би, щоб мій робочий стіл завжди був організований по імені. Як я можу цього досягти?
Відповіді:
Сценарій нижче переставить робочий стіл на зразок:
... на алфавітно-упорядкований робочий стіл, наприклад:
Упорядковано:
Крім того, ви можете встановити довільну кількість елементів вертикально (рядки); горизонтальний інтервал буде встановлений відповідно відповідно.
#!/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
Сценарій потребує xdotool
:
sudo apt-get install xdotool
Скопіюйте скрипт у порожній файл, збережіть його як arrange_dt.py
Тест - запустіть його командою:
python3 /path/to/arrange_dt.py
протягом 20 секунд натисніть на робочий стіл, ваша нова композиція буде застосована. Якщо запустити сценарій із ярлика, поки робочий стіл передує, розташування буде застосовано негайно. Якщо робочий стіл не передує, сценарій чекає максимум 20 секунд. Якщо час перевищує, просто натисніть,F5щоб подати заявку.
Якщо все працює добре, додайте його до клавіші швидкого доступу: виберіть: Налаштування системи> "Клавіатура"> "Ярлики"> "Спеціальні ярлики". Клацніть "+" і додайте команду:
python3 /path/to/arrange_dt.py
Ви можете впливати на розташування піктограм трьома способами:
встановити розмір "плитки"
# set the size of the squares (indirectly, by setting n- rows)
rows = 10
Це встановить (максимальну) кількість піктограм вертикально. Розмір з «плитки» буде, рівний (х, у)
встановити горизонтальне зміщення
x_offs = -15
Це встановить відхилення x від положення за замовчуванням матриці значків у цілому
Встановити вертикальне зміщення
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
Нижче пояснення - це переважно пояснення щодо концепції, а не кодування
python
sos.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.
6 -50 -50
але три папки трохи зміщені. Будь-які ідеї чому? Знімок екрана: i.imgur.com/XuGIiBT.png
Натхненний частково вищезазначеним питанням, я писав, iconic
щоб вирішити цю проблему, дозволяючи сортувати іконки чотирма різними способами. Додатково:
Ви можете отримати сценарій на github .
Ось головний екран:
Відвідайте сторінку github для знакових, щоб побачити всі інші екрани, пояснення та копію сценарію.