从nautilus看用户习惯、用户方便、代码标准之争

部署运行你感兴趣的模型镜像

bug描述:

nautilus从中文语言转换为英文语言,文件管理器右键就不会有“新建文件”了


直入正题:

一、先说说nautilus 是到底怎么做的:

相关源码如下:

config_file = g_build_filename (g_get_user_config_dir (),

    "user-dirs.dirs", NULL);

file = g_file_new_for_path (config_file);

cached_xdg_dirs_monitor = g_file_monitor_file (file, 0, NULL, NULL);

g_signal_connect (cached_xdg_dirs_monitor, "changed",

 G_CALLBACK (xdg_dir_cache_changed_cb), NULL);


它是读取.config/user-dirs.dirs ,这个变动,那么Templates  Desktop Pictures等所有目录均会变化。

XDG_DESKTOP_DIR="$HOME/Desktop"

XDG_DOWNLOAD_DIR="$HOME/Downloads"

XDG_TEMPLATES_DIR="$HOME/Templates"

XDG_PUBLICSHARE_DIR="$HOME/Public"

XDG_DOCUMENTS_DIR="$HOME/Documents"

XDG_MUSIC_DIR="$HOME/Music"

XDG_PICTURES_DIR="$HOME/Pictures"

XDG_VIDEOS_DIR="$HOME/Videos"

以上是user-dirs.dirs中定义的目录。

也就是说这个更改语言后的目录并不由nautilus本身控制,它也仅仅是读取值。

同样的,dde的桌面右键中的新建 模板目录,也是读取user-dirs.dirs的。


二、再来说说user-dirs.dirs 是怎么回事。

当你手动在文件管理器中改变templates等目录的名字时,user-dirs.dirs里面的值会相应改变。

也就是说可以有以下解决方案:

我可以检测locale 然后rename Templates等文件名,可以解决这个bug。

但是问题来了,接下:


三:再来说说nautilus为何要仅仅以读取user-dirs.dirs目录为标准。

先说个题外话,其实nautilus留了一条备用的路,代码如下:

char *

nautilus_get_xdg_dir (const char *type)

{

int i;


if (cached_xdg_dirs == NULL) {

update_xdg_dir_cache ();

}


for (i = 0 ; cached_xdg_dirs != NULL && cached_xdg_dirs[i].type != NULL; i++) {

if (strcmp (cached_xdg_dirs[i].type, type) == 0) {

return g_strdup (cached_xdg_dirs[i].path);

}

}

if (strcmp ("DESKTOP", type) == 0) {

return g_build_filename (g_get_home_dir (), DESKTOP_DIRECTORY_NAME, NULL);

}

if (strcmp ("TEMPLATES", type) == 0) {

return g_build_filename (g_get_home_dir (), "Templates", NULL);

}

return g_strdup (g_get_home_dir ());

}

它是先读user-dirs.dirs,如果里面没有设定相应的值,那么就直接返回home目录下的对应文件夹,看得出,备用方案很戳,它只读了 ~/Templates  ~/Pictures, 没有读~/模板   ~/图片   

回归正题,

大家可以看出nautilus是有一套标准的,就是以user-dirs.dirs 里面的为标准

我相信这套标准应该不只是nautilus遵循的,应该是很多程序都遵循的标准,这点@夏彬  应该知道。  

五、然后再说说我个人对nautilus为何遵循这套标准的理解。

这里首先要@夏彬 问三个问题,这个我不知道

1.当切换语言时,user-dirs.dirs 里面中英文切换是由谁设定的,nautilus吗? 还是系统的什么设定的?

2.同样的,当我手动在文件管理器中重命名templates等时,user-dirs.dirs对应的值会自动改为我重名命的值。 这个过程是user-dirs.dirs监听了templates等这些特殊文件,还是nautilus自己更改的。(显然,我认为nautilus肯定不会去更改user-dirs.dirs中的值,否则,它就是自己在破坏自己遵循的标准了!)

3.说白了,我想知道user-dirs.dirs是不是监听了对应的特殊文件?  然后nautilus监听了user-dirs.dirs中的值。(后面这个我是确定的,前面这个就不知道了)


问题问完了,再继续说,下面对这套标准的解释,不依赖于三个问题的答案。

1.如果我用二中的解决方案修复了这个bug(根据上面的分析和测试,肯定是可行的)那么bug会更加很严重:

假设用户在桌面放了很多文件,其中有一个是他用户自行设置为开机启动(通过终端设置的),那么当切换语言后,因为我是更改了“Desktop”的名称,那么显然就不能启动了。

这只是一个开机启动的案例,再说一个,假设用户把一个小的程序直接安装在桌面(windows小白经常在桌面新建一个“安装目录”,然后直接把qq什么的装里面,大学经常见到这样有才的女生),那么当更改语言后,这个程序显然就不能执行了。

2. 这就是为何nautilus遵循use-dirs.dirs标准的原因

我相信写nautilus的人(我不知道是谁),肯定知道这个bug,但是他还是想到解决这个用户习惯和用户方便难题的解决方案---遵循一个标准即可!


六、再来说说windows对这种事情是怎么解决的

大家都知道windows上有 “我的文档” 这个目录,默认是在c:/usr/中的,但是现在很多人喜欢把这个目录更改到d:/我的文档  下面。因为很多东西,如qq聊天记录、eclipse开发工程、收藏夹等等都在这里面

显然如果微软检测d:/我的文档 是否存在,如果存在直接设置为这个目录即可,但是微软没有这么做,因为这样做的话,虽然方便了用户,但是破坏了自己遵循的标准(默认在c:/usr下面,当然多个用户时,那就更能说明这个标准的正确性了!)

微软把这个难题最后给了用户自己,这也是正确的,最后的选择权在用户自己手上,是否更改路径由用户自己决定

同样的,usr-dirs.dirs在用户自己重命名Templates等后,会自动更改对应值,它也是在遵循自己的标准,同时把最后的选择权给了用户自己。


七、 最后

说了好多好多,希望大家能讨论出是否遵循这个标准,如果不遵循,请说说原因。

最后我还是说说我个人的最后的解决方案吧:

1.更改locale后(假设由en_US 到 zh_CN), Templates、Desktop 还是会保留,同时会新建 “模板” “桌面” 两个文件夹,且usr-dirs.dirs同样值为对应的值(此时会自动更改为"模板"等),且新建的文件夹中是空的。---------这些所有的,就是现在nautilus的解决方案

2.我们增加一步:

上面操作完成后,将Templats目录中的文件全部复制到新建的“模板”目录中去。

但是:Desktop、Picture中都不复制。

原因:请看看你的Picture中的文件多不多,有复制的必要吗?(剪切或者重命名的方案,上面所有的话已经解释了不应采纳的原因了)  再对于小白用户,桌面上的文件甚至比D盘的东西还多,能复制吗?切换locale后复制这么多不会卡死吗?

为何只需要复制Templates目录:

模板目录的确很特殊,新建是用户常用的操作,而很多时候,用户把好的ppt模板(例如我们深之度ppt模板)直接放在模板目录下,就是为了方便,不需要每次都添加背景图片。  且模板目录中文件不会很大(office文档也大不起来),复制时间也不会很长,不会在切换locale后卡死。

欢迎讨论,欢迎吐槽

您可能感兴趣的与本文相关的镜像

Wan2.2-T2V-A5B

Wan2.2-T2V-A5B

文生视频
Wan2.2

Wan2.2是由通义万相开源高效文本到视频生成模型,是有​50亿参数的轻量级视频生成模型,专为快速内容创作优化。支持480P视频生成,具备优秀的时序连贯性和运动推理能力

03-08
### MathPix工具介绍 Mathpix Snipping Tool 是一款强大的数学公式识别工具,从最初的原型发展至今已经历了多次迭代和功能增强[^1]。该工具不仅能处理简单的数学表达式,还可以应对复杂的数学模型以及多行公式,并且支持手写公式的识别。 这款应用程序通过不断的科技创新与用户反馈改进,在学术研究和技术领域赢得了良好声誉,成为许多科研人员不可或缺的工作伙伴之一。除了基本的功能外,Mathpix 还提供了多种高级特性来满足不同用户的特定需求。 ### 使用方法 #### 安装与启动 为了使用 Mathpix Snipping Tool ,首先需要下载安装程序并按照提示完成设置过程。一旦成功安装后即可随时调用此应用来进行截图操作。 #### 截取屏幕上的公式图像 当遇到想要转换成 LaTeX 或 AsciiMath 的图片时,只需打开软件界面按下快捷键(默认为 `Ctrl+Alt+M`),此时鼠标指针会变为十字形状以便于选取目标区域;框选所需部分之后松开按键即刻上传至云端服务器等待进一步分析处理。 #### 获取LaTeX代码片段 经过短暂几秒钟的时间延迟过后,所截获的内容将以纯文本形式显示出来供复制粘贴到其他编辑器当中继续编写文档或是分享给他人查看交流之用。 ```python import pyperclip # 假设已获取到LaTeX字符串 stored_in_variable named latex_code pyperclip.copy(latex_code) print("LaTeX code has been copied to clipboard.") ``` 对于希望深入探索更多可能性的用户来说,可以考虑查阅官方提供的扩展插件——如用于解析Markdown文件内的公式标记语法的库 **mathpix-markdown-it** [^2] ——这将进一步提升工作效率和个人体验感。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值