0.4.7.1 用文本编辑器打开功能对gvim有bug

Bug #371626 reported by Xu Zhen
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Ubuntu Tweak
Fix Released
Medium
Ding Zhou

Bug Description

如果设置gvim为文本文件默认打开方式,则使用"用文本编辑器打开"功能打开含有中文文件名的文件时,会提示:
处理 BufReadCmd 自动命令 "file://*" 时发生错误:
E71: \% 后面有无效的字符
但设置leafpad、OOo Writer为默认打开方式时都可以正常打开,在命令行下用 gvim file://文件名 方式打开也没有问题。

Revision history for this message
Ding Zhou (tualatrix) wrote :

谢谢,确实有这个问题。我看看该如何修正它。

Changed in ubuntu-tweak:
assignee: nobody → TualatriX (tualatrix)
milestone: none → 0.4.7.2
Ding Zhou (tualatrix)
Changed in ubuntu-tweak:
importance: Undecided → Medium
status: New → Confirmed
Revision history for this message
Ding Zhou (tualatrix) wrote :

我尝试去解决了一下这个问题,即有自己水平原因,又有gvim的原因。暂时修复不了了。gvim在处理URI编码时有问题。

Revision history for this message
Xu Zhen (xuzhen666) wrote :

我也仔细看了一下。主要问题出在脚本中script-worker open $NAUTILUS_SCRIPT_SELECTED_URIS。$NAUTILUS_SCRIPT_SELECTED_URIS会把中文还有%空格等特殊字符转换成%aa%bb%cc的形式,导致gvim处理出错。

我想了几个可能的解决思路:

1、在程序中分析$NAUTILUS_SCRIPT_SELECTED_URIS的内容,如果遇到%AA,就替换为对应的16进制值0xAA。不过这样虽然能处理中文,但对于%和空格还是不行。%是错误解释的原因,如果不替换%25到%,虽然gvim还是会说出错,但可以正确打开。空格应该是script-worker文件的问题,exec ${python_exec} -OO ScriptWorker.py $*中的$*把空格当成了分隔符。所以需要用
ARG1="$1"
shift
ARG2="$1"
shift
exec ${python_exec} -OO ScriptWorker.py "$ARG1" "$ARG2" "$*"
取代。不过不知道是否对其他的操作有影响。
另外这个方法只能对本地文件使用,所以还要分析一下是不是本地文

2、分析$NAUTILUS_SCRIPT_SELECTED_URIS,如果是本地文件,就处理$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS中的文件名。仍然要修改script-worker文件,修改后就不会可以正常打开了

另外,又有一个BUG:$NAUTILUS_SCRIPT_SELECTED_URIS和$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS是用新行分开的列表,当选择了多个文件时,script-worker open $NAUTILUS_SCRIPT_SELECTED_URIS这种方式只能处理其中一个文件。
我修改了一下脚本,没有测试打开远程文件的情况。放在附件里了

Revision history for this message
Xu Zhen (xuzhen666) wrote :
Revision history for this message
Ding Zhou (tualatrix) wrote :

Hi Astolia,

抱歉久等了!
谢谢你所做的这些改进,我测试后,确实很好的工作了。你的脚本技能比我强,以后还请多指教。
最新的修正已经提交了,请看这里:http://github.com/tualatrix/ubuntu-tweak/commit/118c2720bb8e8305251215562171254d6cebc397
再次感謝。

Ding Zhou (tualatrix)
Changed in ubuntu-tweak:
status: Confirmed → Fix Committed
Ding Zhou (tualatrix)
Changed in ubuntu-tweak:
status: Fix Committed → Fix Released
Revision history for this message
Xu Zhen (xuzhen666) wrote :

我上次修改的script-worker文件中有一个BUG,会导致gvim打开文件时也顺路打开了/usr/share目录,在标题栏可以看到((1) of 2)。
原因是exec ${python_exec} -OO ScriptWorker.py "$ARG1" "$ARG2" "$*"这一句中,最后的"$*"会强制shell向"$*"提交一个空的参数。应该改成$*,即去掉引号。

而且加上引号后,也会影响其他的脚本工作。例如对于“复制到...“脚本,有引号的情况下,当选择的文件多于2个时,只能复制第一个。

Revision history for this message
Ding Zhou (tualatrix) wrote :

这样的话不能照顾所有的情况了,能不能两全其美呢?

有空我也琢磨琢磨。

Revision history for this message
Xu Zhen (xuzhen666) wrote :

额?我估计你看错了吧。我的意思是只要去掉"$*"的引号就可以修正gvim打开/usr/share和"复制到..""移动到.."等脚本只能处理少于3个被选择文件的情况。已经两全其美了

我不是很清楚其他脚本的情况。但从我用到的脚本来看,都至少会向script-worker传递两个参数,第一个是执行的操作,第二个一般是文件。这样子的话就保证了"$ARG1" "$ARG2" 两个参数不为空,后面如果还有参数,$*就可以了。没有参数的话,$*为空,shell为忽略掉。

如果某些脚本只会向script-worker传递一个参数,那为保险起见,还需要判断一下"$ARG2"是否为空

Revision history for this message
Ding Zhou (tualatrix) wrote :

不好意思。之前没看仔细,已经在源码中修正了。谢谢你的详解!

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.