前任者。いくつかのディレクトリの名前が指定されたとします。
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とは異なります。少し背景。
2つのステップがあります。
- ロケールに基づいてソートされるように Nemo を変更します。
- ロケールを編集
/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
感謝の言葉
理解に役立つ2つ
/usr/share/i18n/locales/iso14651_t1_common
の記事豆ディップ。正解は、大文字と小文字を区別せずに「ls」にドットファイルを最初に表示させる方法は?&LC_COLLATE を使用して、小文字が大文字の前に来るようにソート順を指定します。。
ポリスチレンこの回答の以前のバージョンは以下にあります。改訂。