如何获取(自动)换行列 ↔ 列中视图的宽度?

How to get the (automatic) wrapping column ↔ the width of the view in columns?

我想获取文本将以“自动”自动换行宽度换行的列。换句话说,我需要的是列中文本 window 的宽度。我试过下面的代码,但是 window_to_text 方法似乎 return 0 不管 它的输入…

max_size = ex_view.viewport_extent()
max_size = (max_size[0] - 5, 1)
print(str(ex_view.rowcol(ex_view.window_to_text(max_size))[0]))

这里最主要的是 API 方法 view.window_to_text() 告诉你,基于特定的 window 位置,point 指的是什么文本,但是文本 point 不是您认为的那样(或者更确切地说,不是您认为的那样)。

缓冲区的内容向 API 显示为一个长字符串,其长度表示正在显示的字符数,point 是该字符串的偏移量。因此,例如,如果缓冲区包含文本“Hello”,则有效文本 points 范围从 0 到 4(含)。

由于 view.window_to_text() 必须 return 0-4 范围内的文本点(在此示例中),它所做的是确定最接近该位置的字符是什么。例如,一行中最右边字符右侧的位置 returns 表示行中最后一个字符的点,以及文件中所有内容下方的位置 returns 最后一个字符文件中的字符。

为了使用此方法确定缓冲区的宽度(或高度),您需要通过向缓冲区添加足够的文本来进行测试,以确保您提供的位置下方有文本,这可能不是你想要的。

要计算view的视口在一般意义上的字符有多大,您需要使用view.em_width()view.line_height(),它们告诉您宽度和高度dip 中的一个字符。从中您可以轻松准确地计算出当前可能可见的列数和行数:

>>> view.em_width()
10.0
>>> view.line_height()
22.0
>>> view.viewport_extent()
(1215.0, 775.0)
>>> 1215 // 10
121
>>> 775 // 22
35