Tk文本小部件索引表达式和Unicode

Tk文本小部件索引表达式和Unicode,unicode,tcl,tk,Unicode,Tcl,Tk,(这个问题的基础是) 让我们考虑下面的代码: 包装要求Tk 8.6 pack[text.t] .t插入“abcdefgh”结尾一伊依医咿噫欹泆" 放入“[.t索引1.4+1l][.t索引1.4+2l]” 放入“[.t索引3.4-1l][.t索引3.4-2l]” 出口0 输出: 2.2 3.2 2.6 1.8 如果行足够长,我希望+1l和-1l保留该列,即打印2.4 3.4和2.4 1.4。结果似乎取决于编码每个字符所需的字节数 是否应该是这种方式?是否有文档记录?您使用的是什么字体?您使用的

(这个问题的基础是)

让我们考虑下面的代码:

包装要求Tk 8.6
pack[text.t]
.t插入“abcdefgh”结尾一伊依医咿噫欹泆"
放入“[.t索引1.4+1l][.t索引1.4+2l]”
放入“[.t索引3.4-1l][.t索引3.4-2l]”
出口0
输出:

2.2 3.2
2.6 1.8
如果行足够长,我希望
+1l
-1l
保留该列,即打印
2.4 3.4
2.4 1.4
。结果似乎取决于编码每个字符所需的字节数


是否应该是这种方式?是否有文档记录?

您使用的是什么字体?您使用的是什么确切的Tk修补程序版本?(应该通过执行
put[package Required Tk]
报告)

我认为文本小部件目前在计算按行移动索引的实际运动时使用字符宽度。这在过去的版本中有所改变。问题是不同的代码位需要不同的东西:有时您需要可见的运动(例如,在处理用户的光标运动时,尤其是设置了选项卡时)有时你需要角色空间的运动(这是你期待的)


Tk不应该(你可以看到)对unicode字符的字节宽度做任何事情。它确实应该透明地处理这一点(至少对于基本多语言平面中的任何字符;你可能会发现它之外的错误)。

你使用的是什么字体?你使用的Tk的确切补丁版本是什么?(应通过执行
put[package require Tk]
报告)

我认为文本小部件目前在计算按行移动索引的实际运动时使用字符宽度。这在过去的版本中有所改变。问题是不同的代码位需要不同的东西:有时您需要可见的运动(例如,在处理用户的光标运动时,尤其是设置了选项卡时)有时你需要角色空间的运动(这是你期待的)


Tk不应该对unicode字符的字节宽度做任何事情(你可以看到)。它确实应该透明地处理这一点(至少对于基本多语言平面中的任何字符;你可能会发现除此之外的错误)。

谢谢你的回复。版本是8.6.5。关于字体:
put[.t cget-font]
告诉我字体是
TkFixedFont
,但如果我更改字体(例如,更改为
FreeMono
freeerif
)然后数字不会改变,尽管文本的外观发生了显著的变化。此外,如果我将
+1l
光标在大型多语言文本中的移动可视化,它一点也不平滑,到处乱跳。但是如果文本仅为西里尔文或拉丁文,则移动是平滑的。至少这是改变字体会改变外观;这是人们改变字体的主要原因。这听起来像是某种失败案例,但可能是由于意外事件(代理?)因此,需要进行更深入的调查才能找出问题所在。还有一些改进文本小部件的方法——再一次——因此它肯定是值得的。此外,至少有一些“monospace”字体(即,我机器终端中的默认字体)这些汉字比拉丁和西里尔字母宽。这是真的,但它不能解释这种行为。例如,西里尔字母
a
,在我使用的字体中,没有明显比拉丁字母
a
宽或薄,但即使你使用
aaaaaa
a
替代,这种行为仍然存在感谢您的回复。版本是8.6.5。关于字体:
put[.t cget-font]
告诉我字体是
TkFixedFont
,但是如果我更改字体(例如,更改为
freemonio
freeerif
)然后数字不会改变,尽管文本的外观发生了显著的变化。此外,如果我将
+1l
光标在大型多语言文本中的移动可视化,它一点也不平滑,到处乱跳。但是如果文本仅为西里尔文或拉丁文,则移动是平滑的。至少这是改变字体会改变外观;这是人们改变字体的主要原因。这听起来像是某种失败案例,但可能是由于意外事件(代理?)因此,需要进行更深入的调查才能找出问题所在。还有一些改进文本小部件的方法——再一次——因此它肯定是值得的。此外,至少有一些“monospace”字体(即,我机器终端中的默认字体)这些汉字比拉丁和西里尔字母宽。这是真的,但它不能解释这种行为。例如,西里尔字母
a
,在我使用的字体中,没有明显比拉丁字母
a
宽或薄,但即使你使用
aaaaaa
a
替代,这种行为仍然存在ad的
abcdefgh