ฉันต้องการจัดระเบียบเดสก์ท็อปของฉันตามชื่อเสมอ ฉันจะบรรลุสิ่งนี้ได้อย่างไร
ฉันต้องการจัดระเบียบเดสก์ท็อปของฉันตามชื่อเสมอ ฉันจะบรรลุสิ่งนี้ได้อย่างไร
คำตอบ:
สคริปต์ด้านล่างจะจัดเรียงเดสก์ท็อปใหม่เช่น:
... เข้าสู่เดสก์ท็อปที่เรียงลำดับตัวอักษรเช่น:
สั่งซื้อ:
นอกจากนี้คุณสามารถกำหนดจำนวนรายการตามแนวตั้ง (แถว) ได้เอง ระยะห่างแนวนอนจะถูกตั้งค่าโดยอัตโนมัติ
#!/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, y)
ตั้งค่าการชดเชยแนวนอน
x_offs = -15
สิ่งนี้จะตั้งค่าความเบี่ยงเบนจากตำแหน่งเริ่มต้นของไอคอนเมทริกซ์โดยรวม
ตั้งค่าชดเชยแนวตั้ง
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
'sos.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ไม่ได้อยู่ในหน้าคุณจะต้องกดด้วยตนเอง
ส่วนหนึ่งได้รับแรงบันดาลใจจากคำถามข้างต้นฉันเขียนiconic
เพื่อแก้ปัญหานี้โดยให้คุณเรียงไอคอนได้สี่วิธี นอกจากนี้มันจะ:
นี่คือหน้าจอหลัก:
เยี่ยมชมหน้าGitHubสำหรับสัญลักษณ์เพื่อดูหน้าจออื่น ๆ ทั้งหมดคำอธิบายและสำเนาของสคริปต์