前任。假设一些目录被命名为
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 不同有一点背景。
我们有两个步骤:
- 修改 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
然后ctrlaltbackspace重新启动Xorg。
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
致谢
帮助我理解的两篇文章
/usr/share/i18n/locales/iso14651_t1_common
是豆浸。答案是,如何使“ls”首先显示点文件,同时保持不区分大小写?&使用 LC_COLLATE 指定排序顺序,因此小写字母在大写字母之前。
聚苯乙烯该答案的先前版本可以在修订。