QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1927|回复: 14

gedit 2.5.91得奇怪问题

[复制链接]
发表于 2004-3-16 09:09:11 | 显示全部楼层 |阅读模式
打开gedit,然后向里面拷贝一些文字,然后存盘。在弹出的对话框的文件名文本框内单击,就会出现一个特殊的符号,然后清除这个符号,输入任何的文件名,都不能正确的存盘。如果你在文件名编辑框中不断的按delete,gedit就崩溃了。

如果你在gedit拷贝的文本中敲入任何内容,哪怕是一个空格,上面不能存盘的问题就没有了。但是按住delete依然崩溃。

不知道大家有没有遇到这个问题?可以试一下看看。
发表于 2004-3-16 10:38:57 | 显示全部楼层
不能重现

我 gedit 2.5.91,按存盘后出现对话框中默认文件名为 “未命名 1”,点击或者删除并未出现异常情况

倒是在下面 Save in folder 中,一选“文件系统”,就崩溃了,大家有没有遇到?
回复

使用道具 举报

发表于 2004-3-16 10:49:32 | 显示全部楼层
在 gdb 中运行时,我获得如下 bt:

(gdb) bt
#0  0x035cef7e in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#1  0x035cf11e in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#2  0x035cf193 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#3  0x035d4ee0 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#4  0x035d5073 in gtk_file_chooser_dialog_new_with_backend ()
   from /usr/lib/libgtk-x11-2.0.so.0
#5  0x00291ed2 in g_cclosure_marshal_VOID__VOID ()
   from /usr/lib/libgobject-2.0.so.0
#6  0x0027ef12 in g_closure_invoke () from /usr/lib/libgobject-2.0.so.0
#7  0x002919ef in signal_emit_unlocked_R () from /usr/lib/libgobject-2.0.so.0
(gdb)

一下子看不出端倪。这到底算进了 libgnomeui 带的文件系统插件了没有?

我系统 locale 是  zh_CN.GBK
回复

使用道具 举报

 楼主| 发表于 2004-3-16 11:11:50 | 显示全部楼层
[quote:76b70f06a9="xLoneStar"]不能重现

我 gedit 2.5.91,按存盘后出现对话框中默认文件名为 “未命名 1”,点击或者删除并未出现异常情况

倒是在下面 Save in folder 中,一选“文件系统”,就崩溃了,大家有没有遇到?[/quote]

这个倒是出现过,不过后来升级了gtk2.3.6,而且里面好像永乐gentoo的一个补丁,这个问题就没有了。
回复

使用道具 举报

 楼主| 发表于 2004-3-16 11:13:30 | 显示全部楼层
Gedit-file.c:374
        fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);
        这句代码似乎是错误的,不应该将utf8转换到locale编码。应该直接使用,因为在gtk_file_chooser_set_current_name需要的是utf8编码的字符串,
回复

使用道具 举报

发表于 2004-3-16 15:20:51 | 显示全部楼层
我相信 g_filename_from_utf8 并非简单地将 utf8 串转成 locale 编码。此函数的行为是受环境变量 G_BROKEN_FILENAMES 控制的
回复

使用道具 举报

 楼主| 发表于 2004-3-16 15:36:02 | 显示全部楼层
你的G_BROKEN_FILENAMES设置为1还是0

[quote:113f43f2f5="xLoneStar"]我相信 g_filename_from_utf8 并非简单地将 utf8 串转成 locale 编码。此函数的行为是受环境变量 G_BROKEN_FILENAMES 控制的[/quote]
回复

使用道具 举报

发表于 2004-3-16 15:50:21 | 显示全部楼层
我没有设,你呢?
回复

使用道具 举报

发表于 2004-3-16 18:25:58 | 显示全部楼层
我的locale设置是

[code:1]gentoo jcome $ locale
LANG=zh_CN.gbk
LC_CTYPE=zh_CN.gbk
LC_NUMERIC=en_US
LC_TIME=en_US
LC_COLLATE=en_US
LC_MONETARY=en_US
LC_MESSAGES=en_US
LC_PAPER=en_US
LC_NAME=en_US
LC_ADDRESS=en_US
LC_TELEPHONE=en_US
LC_MEASUREMENT=en_US
LC_IDENTIFICATION=en_US
LC_ALL=

gentoo jcome $ export

......................
G_BROKEN_FILENAMES="1"
........................
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-3-16 20:51:11 | 显示全部楼层

Here is the patch

it works for me.
       

diff -uNrp gedit-2.5.91/gedit/gedit-file.c gedit-2.5.91.new/gedit/gedit-file.c
--- gedit-2.5.91/gedit/gedit-file.c 2004-03-05 23:19:46.000000000 +0800
+++ gedit-2.5.91.new/gedit/gedit-file.c 2004-03-16 20:32:59.543092960 +0800
@@ -370,12 +370,12 @@ gedit_file_save_as (GeditMDIChild *child
path = (gedit_default_path != NULL) ?
g_strdup (gedit_default_path) : NULL;

- tmpstr = gedit_document_get_uri (doc);
- fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);
+ fname = gedit_document_get_uri (doc);
+ /*fname = g_filename_from_utf8 (tmpstr, -1, NULL, NULL, NULL);*/ if (!fname)
/* FIXME: should fname remain NULL in this case? - Paolo */
fname = g_strdup ("Untitled"); /* Use ASCII */
- g_free (tmpstr);
+ /*g_free (tmpstr);*/
}
else
{

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

发表于 2004-3-16 22:01:06 | 显示全部楼层

Re: Here is the patch

[quote:c74562672d="younker"]it works for me.[/quote]

我还没有看代码,不过我有点不是很明白。你在这里取消了对 g_filename_from_utf8 的调用,准备在哪儿再调用它呢?总不能不调吧,否则 G_BROKEN_FILENAMES 环境变量就不起作用了
回复

使用道具 举报

 楼主| 发表于 2004-3-16 22:31:20 | 显示全部楼层
这个地方是不许要调用的, 因为他通过这个来取得document的文件名,而在一个新文件没有被存盘之前他的标识应该是untitled,所以它会使用缺省的Untitled加一个数字作为序列号,如果你用了locale,那么他就会取得一个utf8的字符串,中文下就是未命名,然后他用这个字符串来调用gtk_file_chooser_set_current_name(),而这个函数是需要一个utf8字符串的,当你在file-chooser里面设定了文件名,确定之后, gedit会重新将得到的新的文件名在此转换为local编码的,然后进行实际的存盘。

不知道是不是正确,至少对我的是这样的
我的G_BROKEN_FILENAMES=1
在我设置LANG=zh_CN.UTF8和LC_ALL=zh_CN.UTF8之后, 即使不用补丁也正常。但是打了补丁之后在gb2312下面也正常了。
回复

使用道具 举报

发表于 2004-3-17 12:12:34 | 显示全部楼层

Re: Here is the patch

[quote:6c5dd54bff="younker"]it works for me.[/quote]
Where is the patch?
回复

使用道具 举报

发表于 2004-4-20 14:16:59 | 显示全部楼层
Let's check if it has been fixed now.
回复

使用道具 举报

发表于 2004-4-20 23:20:51 | 显示全部楼层
I've tried but still cannot reproduce it
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-23 09:57 , Processed in 0.056831 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表