如何始终保持桌面图标的组织和按名称排序?


8

我想让我的桌面始终按名称进行组织。我该如何实现?

桌面未按名称进行组织:

在此处输入图片说明

按名称整理后的桌面:

在此处输入图片说明


如果您淡化名称,我们将无法确切看到组织规则:)
Jacob Vlijm

@JacobVlijm看起来他的组织规则是先分类目录,然后分类文件。我们也可以大概猜到它是按字母顺序排列
谢尔盖Kolodyazhnyy

嗨奥西罗,您可以选择以下两个方法中的哪一个:chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm 2016年

对于缺少的信息表示歉意!桌面按字母顺序组织,从A到Z的文件夹开始,然后是文件。该信息足够吗?
orschiro '16

Answers:


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

    这将垂直设置(最大)图标数量。“平铺” 的大小将等于(x,y)

  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

    在此处输入图片说明

说明

以下说明主要是关于概念的说明,而不是编码

  • 按字母顺序放置的图标,我们首先列出桌面上的项目,使用pythonos.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


多么奇妙而多功能的脚本。非常感谢,雅各!:-)
orschiro '16

@orschiro一如既往,您的问题在某种程度上令人鼓舞,并且
很有意义

我偶然发现我认为应该是Ubuntu中的默认行为的事情。高兴地看到,有很多熟练的人才可以实现这一目标!
orschiro'7

嘿,雅各布,我使用了值,6 -50 -50但是三个文件夹略有偏移。有什么想法吗?萤幕撷图
orschiro 2016年

嗨@orschiro那是因为文件夹名称的宽度不同。如果由于该原因无法执行该命令,则采用第一个可能的选项。最好不要将偏移量设置得太负:)
Jacob Vlijm '16

0

受到上述问题的启发,我写了一篇文章iconic以解决该问题,方法是让您以四种不同的方式对图标进行排序。此外,它将:

  • 定义网格以使图标更接近或更远
  • 保存图标桌面设置,以后再还原以用于家庭和工作中的不同设置
  • 允许您将图标移动到三个监视器中的任何一个
  • 不会遭受使用多种分辨率的显示器时发生的“丢失图标综合症”的影响
  • 按字母顺序排列图标,按字母顺序,忽略“链接到”前缀,按修改后的日期升序或日期降序排序
  • 根据监视器允许不同的网格大小(列x行),在4K监视器上比2K监视器更多EG
  • Instant Test(即时测试)按钮,用于对显示器的左侧,顶部,右侧或底部区域的列x行更改或保留空间更改进行快速实验
  • 测试按钮将持续您定义的x秒,在测试前清除所有窗口,并在测试后恢复它们
  • Bash脚本,方便修改

您可以在github上获取脚本。

这是主屏幕:

标志性的main menu.png

请访问github页面以查看图标,以查看所有其他屏幕,说明和脚本副本。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.