答案1
按命令按字母顺序排列桌面图标
下面的脚本将重新排列桌面,如下所示:
...进入按字母顺序排列的桌面,例如:
已订购:
- 先有目录,再有文件
- 从上到下,从左到右
垂直设置项目数
此外,您可以垂直设置任意数量的项目(行);水平间距将相应地自动设置。
剧本
#!/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
选项
您可以通过三种方式影响图标的排列:
设置“tiles”的大小
# set the size of the squares (indirectly, by setting n- rows) rows = 10
这将设置垂直方向的图标数量(最大)。尺寸“瓷砖” 的等式为 (x,y)
设置水平偏移
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
为了按字母顺序排列图标,我们首先使用's列出桌面上的项目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。
答案2
受上述问题的启发,我写了一篇文章iconic
来解决这个问题,让你用四种不同的方式对图标进行排序。此外,它还将:
- 定义网格以使图标之间的距离更近或更远
- 保存图标桌面设置,稍后恢复以适应家庭和工作中的不同设置
- 允许您将图标移动到三台显示器中的任意一台
- 不会因使用多种分辨率的显示器而出现“丢失图标综合症”
- 按字母顺序对图标进行排序,按字母顺序排列(忽略“链接到”前缀),按修改日期升序或降序排序
- 根据显示器允许不同的网格大小(列 x 行),例如 4K 显示器比 2K 显示器更多
- 立即的测试用于快速试验列 x 行变化或显示器左侧、顶部、右侧或底部区域的保留空间变化的按钮
- 测试按钮将持续您定义的x秒,测试前清除所有窗口并在测试后恢复它们
- 易于修改的 Bash 脚本
您可以获取脚本github。
这是主屏幕:
访问github页面标志性的查看所有其他屏幕、说明和脚本的副本。