항상 데스크탑 아이콘을 이름별로 정리하고 정렬하려면 어떻게해야합니까?


8

데스크탑을 항상 이름별로 정리하고 싶습니다. 어떻게하면 되나요?

이름별로 구성되지 않은 데스크톱 :

여기에 이미지 설명을 입력하십시오

이름별로 정리 한 후 바탕 화면 :

여기에 이미지 설명을 입력하십시오


이름을 흐리게하면 조직 규칙이 정확히 무엇인지 알 수 없습니다.
Jacob Vlijm

@JacobVlijm 그의 조직 규칙은 dirs를 먼저 정렬 한 다음 파일로 정렬하는 것 같습니다. 알파벳순으로 추측 할 수도 있습니다
Sergiy Kolodyazhnyy

안녕하세요 orschiro이 두 가지 중 : 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

옵션

세 가지 방법으로 아이콘 배열에 영향을 줄 수 있습니다.

  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's를 사용하여 바탕 화면에 항목을 나열합니다.os.listdir(Desktop)
  • 그런 다음 파일을 두 개의 하위 목록으로 분할합니다. 파일 / 폴더 및 두 목록을 정렬 한 다음 폴더를 먼저 다시 결합하십시오.
  • 그런 다음 행렬을 만듭니다.

    • 행 수는 스크립트 헤드에서 설정되므로 화면 높이를 행 수로 나눕니다. 따라서 우리는 아이콘이 놓일 "정사각형"의 크기를 갖습니다.
    • 아이콘 마찬가지로 이격되어 있기 때문에 가로 , 우리는 다음 나누어 열 (최대) 수를 계산할 수있는 아이콘은 (아이콘마다) 놓일 "사각형"의 폭에 의해 화면을 상기 내림 아래 첫 번째 정수.
    • 아래 이미지에서 이러한 "가상"사각형이 표시되고 빨간색 점은 아이콘이있는 위치입니다.

      여기에 이미지 설명을 입력하십시오

    • 그런 다음 첫 번째 아이콘을 사각형 크기의 절반에 가로 및 세로로 배치하면됩니다.

    • 다른 모든 아이콘 의 x 위치 를 찾으려면 인덱스 (0으로 시작)를 반올림 한 행 수로 나누면 됩니다. 결과는 첫 번째 아이콘의 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 데스크톱을 front 로 눌러야 합니다 (데스크톱 새로 고침). 이 경우 즉시 처리됩니다. 그렇지 않은 경우, 데스크탑이 정면에 있으면 스크립트가 20 초 동안 다시 시도하여 사실상 눌렀다 F5가 끊습니다. 20 초 후에도 데스크탑이 여전히 앞에 있지 않은 경우 수동으로을 눌러야 F5합니다.


환상적이고 다양한 스크립트입니다. 정말 감사합니다, 야곱! :-)
orschiro

항상 @orschiro, 귀하의 질문은 어떻게 든 영감과 작업하기 좋은 :)
Jacob Vlijm

우분투의 기본 행동이어야한다고 생각하는 것들을 우연히 발견했습니다. 이 현실을 만들 수있는 숙련 된 사람들이 있다는 것을 알게되어 기쁩니다!
orschiro

야곱, 나는 값을 사용 6 -50 -50했지만 세 개의 폴더는 약간 오프셋되어 있습니다. 어떤 아이디어가 있습니까? 스크린 샷 : i.imgur.com/XuGIiBT.png
orschiro

안녕하세요 @orschiro 폴더 이름의 너비 차이 때문에 발생합니다. 이로 인해 명령을 실행할 수 없으면 가능한 첫 번째 옵션이 필요합니다. 오프셋을 너무 음수로 설정하지 않는 것이
좋습니다

0

위의 질문에 부분적으로 영감을 받아 iconic아이콘을 네 가지 방법으로 정렬 하여이 문제를 해결하기 위해 썼습니다 . 또한 그것은 :

  • 공간 아이콘을 더 가깝게 또는 더 멀리 배치하기위한 그리드 정의
  • 아이콘 데스크탑 설정을 저장하고 나중에 다른 설정을 위해 집과 직장에서 복원
  • 아이콘을 세 모니터 중 하나로 이동할 수 있습니다
  • 여러 해상도의 모니터를 사용할 때 발생하는 "잃어버린 아이콘 증후군"이 발생하지 않습니다
  • "링크 대상"접두사가 무시되고 사전 순으로 아이콘 정렬, 수정 된 날짜 오름차순 또는 내림차순으로 정렬
  • 모니터에 따라 다른 그리드 크기 (열 x 행) 허용, 2K 모니터보다 4K 모니터에서 EG 더 많음
  • 열 x 행 변경 또는 모니터 왼쪽, 위쪽, 오른쪽 또는 아래쪽 영역의 예약 된 공간 변경에 대한 빠른 실험을위한 즉석 테스트 버튼
  • 테스트 버튼은 사용자가 정의한 x 초 동안 지속되며 테스트 전에 모든 창을 지우고 테스트 후에 복원합니다.
  • 손쉬운 수정을위한 Bash 스크립트

github 에서 스크립트를 얻을 수 있습니다 .

메인 화면은 다음과 같습니다.

아이코닉 메인 메뉴 .png

방문 github의의 페이지를 상징적 다른 모든 화면, 설명하고 스크립트의 사본을 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.