Jak mogę zawsze porządkować ikony pulpitu i sortować według nazwy?

8

Chciałbym, aby mój Pulpit był zawsze uporządkowany według nazwy. Jak mogę to osiągnąć?

Pulpit niezorganizowany według nazwy:

wprowadź opis zdjęcia tutaj

Pulpit po zorganizowaniu według nazwy:

wprowadź opis zdjęcia tutaj

orschiro
źródło
Jeśli znikniesz z nazwisk, nie będziemy mogli dokładnie zobaczyć, jaka jest zasada organizacji :)
Jacob Vlijm,
@JacobVlijm Wygląda na to, że jego regułą organizacyjną jest najpierw sortowanie katalogów, a następnie plików. Prawdopodobnie też możemy się domyślić, że jest to alfabet
Sergiy Kolodyazhnyy
Cześć orschiro, który z tych dwóch: chat.stackexchange.com/transcript/message/30927193#30927193
Jacob Vlijm
Przepraszamy za tę brakującą informację! Pulpit jest uporządkowany alfabetycznie, zaczynając od folderów od A do Z, a następnie plików. Czy te informacje są wystarczające?
orschiro,

Odpowiedzi:

9

Rozmieść ikony pulpitu alfabetycznie według poleceń

Poniższy skrypt zmieni układ pulpitu:

wprowadź opis zdjęcia tutaj

... na alfabetycznie uporządkowany pulpit, taki jak:

wprowadź opis zdjęcia tutaj

Zamówione:

  • najpierw katalogi, a potem pliki
  • od góry do dołu, od lewej do prawej

Ustaw liczbę elementów w pionie

Ponadto można ustawić dowolną liczbę elementów w pionie (wiersze); odstępy w poziomie zostaną odpowiednio ustawione automatycznie.

Scenariusz

#!/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

Jak używać

  1. Skrypt potrzebuje xdotool:

      sudo apt-get install xdotool
  2. Skopiuj skrypt do pustego pliku i zapisz go jako arrange_dt.py

  3. Przetestuj - uruchom komendę:

    python3 /path/to/arrange_dt.py

    w ciągu 20 sekund kliknij pulpit, nowe ustawienie zostanie zastosowane. Jeśli uruchomisz skrypt ze skrótu, gdy pulpit jest z przodu, układ zostanie zastosowany natychmiast. Jeśli pulpit nie znajduje się na pierwszym planie, skrypt czeka maksymalnie 20 sekund. Jeśli czas przekroczy, po prostu naciśnij,F5aby zastosować.

  4. Jeśli wszystko działa poprawnie, dodaj go do klawisza skrótu: wybierz: Ustawienia systemu> „Klawiatura”> „Skróty”> „Skróty niestandardowe”. Kliknij „+” i dodaj polecenie:

    python3 /path/to/arrange_dt.py

Opcje

Możesz wpływać na rozmieszczenie ikon na trzy sposoby:

  1. ustaw rozmiar „kafelków”

    # set the size of the squares (indirectly, by setting n- rows)
    rows = 10

    Spowoduje to ustawienie (maksymalnej) liczby ikon w pionie. Wielkość z „płytek” będzie równa (x, y),

  2. ustaw przesunięcie w poziomie

    x_offs = -15 

    Spowoduje to ustawienie odchylenia x od domyślnej pozycji matrycy ikon jako całości

  3. Ustaw przesunięcie pionowe

    y_offs = -30

    Spowoduje to ustawienie odchylenia y od domyślnej pozycji matrycy ikon

    Przykład z użyciem:

    # 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

    wprowadź opis zdjęcia tutaj

Wyjaśnienie

Wyjaśnienie poniżej jest raczej wyjaśnieniem koncepcji niż kodowania

  • Aby alfabetycznie rozmieścić ikony, najpierw wypisujemy elementy na pulpicie, używając python'sos.listdir(Desktop)
  • Następnie dzielimy pliki na dwie podlisty; pliki / foldery i posortuj obie listy, dołącz je ponownie, najpierw foldery.
  • Następnie tworzymy macierz:

    • Ponieważ liczba wierszy jest ustawiona w nagłówku skryptu, wysokość ekranu dzielimy przez liczbę wierszy. Mamy więc rozmiar „kwadratów”, w których ikony zostaną umieszczone (wyśrodkowane).
    • Ponieważ ikony są podobnie rozmieszczone w poziomie , możemy następnie obliczyć (maksymalną) liczbę kolumn, dzieląc szerokość ekranu przez szerokość „kwadratów”, w których zostaną umieszczone ikony (na ikonę), w zaokrągleniu w dół do pierwsza liczba całkowita poniżej.
    • Na obrazku poniżej te „wirtualne” kwadraty są widoczne, czerwona kropka to miejsce, w którym umieszczona jest ikona.

      wprowadź opis zdjęcia tutaj

    • Następnie wszystko, co musimy zrobić, to umieścić pierwszą ikonę na połowie wielkości kwadratu, zarówno poziomo, jak i pionowo.

    • Aby znaleźć pozycję x wszystkich innych ikon, wystarczy podzielić ich indeks (zaczynając od zera) przez liczbę wierszy, zaokrągloną w dół. Wynik zostanie dodany do pozycji x pierwszej ikony (u góry po lewej), na przykład:

      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
    • Aby znaleźć pozycję y wszystkich innych ikon, potrzebujemy tylko pozostałej części indeksu i liczby wierszy. Wynik x szerokość kwadratu zostanie dodany do pozycji y pierwszej ikony (u góry po lewej), na przykład:

      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
  • Następnie umieszczamy ikony na pulpicie, używając polecenia:

    gvfs-set-attribute <path_to_dir_or_file> metadata::nautilus-icon-position x,y
  • Wreszcie musimy nacisnąć F5 pulpit z przodu , aby zastosować zmieniony układ (odświeżyć pulpit). W takim przypadku nastąpi to natychmiast. Jeśli nie, skrypt będzie próbował ponownie w ciągu 20 sekund, jeśli pulpit jest z przodu, praktycznie naciska F5i pęka. Jeśli po 20 sekundach pulpit nadal nie był na froncie, musisz ręcznie nacisnąć F5.

Jacob Vlijm
źródło
Co za fantastyczny i wszechstronny scenariusz. Dziękuję bardzo, Jacob! :-)
orschiro,
@orschiro jak zawsze, twoje pytania są jakoś inspirujące i wspaniale nad nimi pracować :)
Jacob Vlijm
Zdarza mi się natknąć na rzeczy, które moim zdaniem powinny być domyślnym zachowaniem w Ubuntu. Cieszę się, że są ludzie o wysokich umiejętnościach, aby zrealizować tę rzeczywistość!
orschiro
Hej Jacob, użyłem wartości, 6 -50 -50ale trzy foldery są lekko przesunięte. Jakieś pomysły dlaczego? Zrzut ekranu: i.imgur.com/XuGIiBT.png
orschiro
Cześć @orschiro To z powodu różnicy szerokości nazw folderów. Jeśli polecenie nie może zostać wykonane z tego powodu, przyjmuje pierwszą możliwą opcję. Lepiej nie ustawiać zbyt
dużego
0

Zainspirowany częściowo powyższym pytaniem napisałem, iconicaby rozwiązać ten problem, umożliwiając sortowanie ikon na cztery różne sposoby. Dodatkowo:

  • Zdefiniuj ikony siatki lub odstępu bliżej lub dalej
  • Zapisz ikonę konfiguracji pulpitu i przywróć ją później dla różnych ustawień domu i pracy
  • Umożliwiają przenoszenie ikon na dowolny z trzech monitorów
  • Nie cierpi na „zespół utraconych ikon”, który występuje, gdy używane są monitory o wielu rozdzielczościach
  • Sortuj ikony alfabetycznie, alfabetycznie z pominiętym prefiksem „Link do”, sortuj według zmodyfikowanej daty rosnąco lub malejąco daty
  • Zezwalaj na inny rozmiar siatki (kolumny x rzędy) w zależności od monitora, np. Więcej na monitorze 4K niż na monitorze 2K
  • Przycisk Natychmiastowego testu do szybkiego eksperymentowania zmian w kolumnie x zmiany wiersza lub zmiany zarezerwowanej przestrzeni dla monitorowania obszarów lewego, górnego, prawego lub dolnego
  • Przycisk Test będzie trwał przez zdefiniowane przez ciebie x sekund, wyczyści wszystkie okna przed testem i przywróci je po teście
  • Skrypt Bash dla łatwych modyfikacji

Możesz pobrać skrypt na github .

Oto główny ekran:

iconic main menu.png

Odwiedź stronę github, aby zobaczyć ikony, aby zobaczyć wszystkie pozostałe ekrany, objaśnienia i kopię skryptu.

WinEunuuchs2Unix
źródło