デスクトップアイコンを常に整理し、名前順に並べ替える方法を教えてください。


8

デスクトップを常に名前で整理したいと思います。どうすればこれを達成できますか?

名前で整理されていないデスクトップ:

ここに画像の説明を入力してください

名前で整理した後のデスクトップ:

ここに画像の説明を入力してください


名前をフェードインすると、組織のルールが正確にわかりません:)
Jacob Vlijm

@JacobVlijm彼の組織規則では、まずdirsをソートしてからファイルをソートするように見えます。アルファベット順だと思うかもしれません
Sergiy Kolodyazhnyy

こんにちはorschiroこれら2つのうちのどちらか:chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm

不足している情報についてお詫びします!デスクトップは、AからZまでのフォルダーで始まり、その後にファイルが続くアルファベット順に編成されています。その情報で十分ですか?
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

オプション

アイコンの配置には、次の3つの方法で影響を与えることができます。

  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

    ここに画像の説明を入力してください

説明

以下の説明は、コーディングではなく概念の説明が主です

  • 使用して、我々最初のリストデスクトップ上の項目を、アルファベット順にアイコンを配置するpythonのをos.listdir(Desktop)
  • 次に、ファイルを2つのサブリストに分割します。ファイル/フォルダー、および両方のリストを並べ替え、それらを再度結合し、フォルダーを最初にします。
  • 次に、マトリックスを作成します。

    • 行数はスクリプトの先頭に設定されているため、画面の高さを行数で割ります。したがって、アイコンが配置される「中央」の「正方形」のサイズがわかります。
    • アイコンが同様に離間されているので、水平、我々は次に分割することによって、列の(最大)数を計算することができる(アイコンあたり)のアイコンが配置されている「正方形」の幅で画面のを、に切り捨て以下の最初の整数。
    • 下の画像では、これらの「仮想」正方形が表示されています。赤い点は、アイコンが配置されている場所です。

      ここに画像の説明を入力してください

    • 次に、最初のアイコンを正方形の半分のサイズに、水平方向と垂直方向の両方に配置します。

    • 他のすべてのアイコンの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 、デスクトップを前に押します。その場合は、すぐに実行されます。そうでない場合、デスクトップが前面にあり、仮想的に押しF5て中断すると、スクリプトは20秒間再試行します。20秒後にデスクトップがいる場合、まだ前にはなかった、手動で押す必要F5


なんて素晴らしい、多目的なスクリプトでしょう。どうもありがとう、ジェイコブ!:-)
orschiro 2016

@orschiroいつものように、あなたの質問は何とか刺激的で、取り組むのに素晴らしいです:)
Jacob Vlijm

私はたまたま、Ubuntuのデフォルトの動作であるべきだと思うことに遭遇します。この現実を実現するために非常に熟練した人々がいるのを見て嬉しいです!
orschiro

ジェイコブさん、値を使用しました6 -50 -50が、3つのフォルダが少しずれています。何かアイデアはありますか?スクリーンショット:i.imgur.com/XuGIiBT.png
orschiro

こんにちは@orschiroフォルダー名の幅が異なるためです。そのためにコマンドを実行できない場合は、最初の可能なオプションが使用されます。オフセットを負に設定しすぎないようにしてください:)
Jacob Vlijm

0

上記の質問に一部触発されて、私はiconicこの問題を解決するために、アイコンを4つの異なる方法で並べ替えることができます。さらに、それは:

  • グリッドを定義して、アイコンを近づけたり離したりします
  • アイコンデスクトップセットアップを保存し、後でさまざまなセットアップ用に復元します
  • アイコンを3つのモニターのいずれかに移動できます
  • 複数の解像度のモニターを使用したときに発生する「ロストアイコンシンドローム」に悩まされない
  • アイコンをアルファベット順に並べ替え、「リンク先」プレフィックスを無視してアルファベット順に並べ替え、変更日付の昇順または日付の降順で並べ替え
  • モニターに応じて異なるグリッドサイズ(列x行)を許可します。たとえば、2Kモニターよりも4Kモニターの方が多くなります。
  • モニターの左、上、右、または下の領域の列x行の変更または予約スペースの変更をすばやく実験するためのインスタントテストボタン
  • テストボタンはあなたが定義したx秒間持続し、テスト前にすべてのウィンドウをクリアし、テスト後にそれらを復元します
  • 簡単な変更のためのBashスクリプト

スクリプトはgithubで入手できます。

メイン画面は次のとおりです。

iconic main menu.png

他のすべての画面、説明、およびスクリプトのコピーを確認するには、githubページにアイコンを表示してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.