Nemo 파일 관리자는 정렬 시 디렉토리 이름 시작 부분의 "_"를 완전히 무시합니다.

Nemo 파일 관리자는 정렬 시 디렉토리 이름 시작 부분의 "_"를 완전히 무시합니다.

전임자. 일부 디렉토리의 이름이 지정되었다고 가정합니다.

absorbing
appreciate
arrive
connect
depend
drop
few
fold
littlel
popcorn
shrill
sticky

_Windows에서는 디렉토리 앞에 넣으면 이렇게 맨 위에 오게 됩니다.

_connect
_few
_little
_shrill
absorbing
appreciate
arrive
depend
drop
fold
popcorn
sticky

그러나 Nemo 4.0.6에서 알파벳순으로 정렬하면 동일한 디렉터리가 다음과 같이 보입니다(구체적으로 Linux Mint 19.1, Cinnamon 4.0.10).

absorbing
appreciate
arrive
_connect
depend
drop
_few
fold
_little
popcorn
_shrill
sticky

따라서 Nemo의 정렬 알고리즘은 _디렉토리 이름의 시작 부분을 완전히 무시합니다.

첫 번째 목록처럼 정렬이 작동하도록 하고 싶은데, 이를 수행할 수 있는 방법이 있습니까?

답변1

저는 이 솔루션을 Linux Mint 19.3에서 테스트했습니다.

먼저 계속해서 읽어보세요nemo 파일 정렬 순서가 /bin/ls와 다릅니다.약간의 배경.

두 가지 단계가 있습니다.

  1. 로케일을 기준으로 정렬되도록 Nemo를 수정합니다.
  2. 로케일을 편집 /usr/share/i18n/locales/iso14651_t1_common하여 원하는 대로 정렬하세요.

1. 니모 수정하기

주요 가이드는 다음 위치에 있습니다.GitHub.

git clone https://github.com/linuxmint/nemo

이제 편집해야 합니다.nemo/libnemo-private/nemo-file.c

제거하다:

/* Files that start with these characters sort after files that don't. */
#define SORT_LAST_CHAR1 '.'
#define SORT_LAST_CHAR2 '#'

바꾸다:

static int
compare_by_display_name (NemoFile *file_1, NemoFile *file_2)
{
    const char *name_1, *name_2;
    const char *key_1, *key_2;
    gboolean sort_last_1, sort_last_2;
    int compare=0;

    name_1 = nemo_file_peek_display_name (file_1);
    name_2 = nemo_file_peek_display_name (file_2);

    sort_last_1 = name_1 && (name_1[0] == SORT_LAST_CHAR1 || name_1[0] == SORT_LAST_CHAR2);
    sort_last_2 = name_2 && (name_2[0] == SORT_LAST_CHAR1 || name_2[0] == SORT_LAST_CHAR2);

    if (sort_last_1 && !sort_last_2) {
        compare = +1;
    } else if (!sort_last_1 && sort_last_2) {
        compare = -1;
    } else if (name_1 == NULL || name_2 == NULL) {
        if (name_1 && !name_2)
            compare = +1;
        else if (!name_1 && name_2)
            compare = -1;
    } else {
        key_1 = nemo_file_peek_display_name_collation_key (file_1);
        key_2 = nemo_file_peek_display_name_collation_key (file_2);
        compare = g_strcmp0 (key_1, key_2);
    }

    return compare;
}

그리고:

static int
compare_by_display_name (NemoFile *file_1, NemoFile *file_2)
{
    const char *key_1, *key_2;
    int compare=0;

    key_1 = nemo_file_peek_display_name_collation_key (file_1);
    key_2 = nemo_file_peek_display_name_collation_key (file_2);
    compare = strcmp (key_1, key_2);

    return compare;
}

그리고 다음을 교체하세요:

file->details->display_name_collation_key = g_utf8_collate_key_for_filename (display_name, -1);

그리고:

file->details->display_name_collation_key = g_utf8_collate_key (display_name, -1);

지금 열다소스 코드 저장소소프트웨어 소스에서.

그런 다음 nemo디렉터리에서 다음 명령을 실행합니다.

sudo apt-get build-dep nemo 
dpkg-buildpackage 
cd .. && sudo dpkg -i *.deb

그런 다음 ctrlaltbackspaceXorg를 다시 시작하십시오.

여기에 이미지 설명을 입력하세요.

2. 수정iso14651_t1_common

관리자로 엽니다 /usr/share/i18n/locales/iso14651_t1_common.

바꾸다:

<U005F> IGNORE;IGNORE;IGNORE;<U005F> # 33 _ 

그리고:

<U005F> <RES-2>;IGNORE;IGNORE;<U005F> # 33 _

달리기sudo locale-gen

감사의 말

  1. 마이클 웹스터,가르쳐소스에서 Nemo 빌드.

  2. bjd-pfq설립하다g_utf8_collate_key_for_filename 문제.

  3. 스티븐 쉬나를 향해 안내해줘니모와 팅커.

  4. 이해에 도움이 된 글 2개 /usr/share/i18n/locales/iso14651_t1_common콩 딥. 정답은,대소 문자를 구분하지 않고 "ls"가 도트 파일을 먼저 표시하도록 만드는 방법은 무엇입니까?&LC_COLLATE를 사용하여 소문자가 대문자 앞에 오도록 정렬 순서를 지정합니다..

폴리스티렌이 답변의 이전 버전은 다음에서 찾을 수 있습니다.개정.

관련 정보