擅长:python、mysql、java
<p>我有办法解决这个问题。我只是不明白为什么它能工作,为什么我不能用测试脚本重现这个问题。下面是执行折叠的代码段:</p>
<pre><code>fold_start = at.copy()
fold_start.forward_to_line_end()
fold_start.forward_char() # Comment this line -> crash
fold_end = self.scene_end_iter(end)
self.apply_tag(self.tag_fold_hide, fold_start, fold_end)
</code></pre>
<p><code>at</code>是在insert text或delete range回调中派生的,并指向行的开始。<code>fold_end</code>是指向下一个场景标记或文件结尾的文本。如果我们查看缓冲区内容,它是这样的:</p>
<pre><code><mark 1><at>Scene 1 heading<eol>
Line
Line
<mark 2>Scene 2 heading
</code></pre>
<p>将隐藏标记从<code><eol></code>应用到<code><mark 2></code>会导致崩溃。将标记从<code><eol + 1></code>应用到<code><mark 2></code>可以按预期工作。如果折叠到文件的末尾(<code><mark 2> == buffer.get_end_iter()</code>),则可以进行折叠。在某些情况下,如果只需要隐藏换行符,它也可以工作,但不是在所有情况下都可以。你知道吗</p>
<p>如前所述,我不明白为什么这样做,为什么我不能用更简单的脚本重现问题,但我继续调查更多的问题,虽然现在有一个修复,它不是那么紧迫。你知道吗</p>