使用行内 src_latex{test}
时,如果用 C-c '打开编辑 buffer,那么用 C-c '关闭编辑 buffer 时,光标会移动到 src_latex{test}
的范围以外(正常情况下应该在范围内),不知道大家是不是这种情况?
org 使用的是最新版本的 org plus contrib (Org mode version 9.0.5 (9.0.5-elpaplus @ /home/neoarch/.emacs.d/elpa/org-plus-contrib-20170210/))
希望大家帮我测试一下,我的包 org-edit-latex 因为这个 bug 导致行内 latex 无法正确处理,谢谢!
活捉一条 orgmode 的 bug
orgmode 要是托管到 github 就好了,提交 issue 也不用那么麻烦
我现在可以完整的重现这个 issue,并且也大致了解造成此种情况的原因,但是无法修复,因为 org 的代码太复杂,牵一发而动全身。
重现步骤:
1 在 orgmode 中单独另起一行输入如下:
src_latex{test}mmmmmmmmmmmmmmmmmmmm
后面的字母 m 是用来占位的。
2 将光标置于 inline src block 之上,比如放在 “test” 的字母 “e” 上面,按 C-c ’ 进入编辑模式
3 按 C-c ’ 退出编辑模式,然后发现光标位于到数第四个 “m” 上面。
提交bug,直接发邮件到 orgmode-devel 邮件列表就可以了
1 个赞
只能如此了,我只能暂时地在 readme里加上一条:因为上游bug,暂时不要用它来编辑行内公式。
我没有向 org 提交 issue,因为我觉得那样太慢了。
而是自己做了临时修复。解决方法非常简单,但是花费我一下午的时间才找到。利用 advice,在调用 org-edit-src-exit
时,令变量 org-src--remote
的值为 t
就行了!这样的话退出 edit buffer 时光标会直接回到起点。然后加一个判断语句令它只对 inline-src-block 生效就好了。
我现在把它推送到 github,估计过两三个小时就可以从 melpa 上下到了,happy hacking!
所以用我这个包的一个额外效果,就是自动修复了 org 的一个 bug!哈哈!
LdBeth
10
你这样随便用advice会被怼的。
你应该先提issue,然后在README里面说明,提供你的修复,不该直接在包里上advice。
1 个赞
et2010
11
没有什么负面效果的,可以用 minor mode 开启关闭,关闭时没有任何效果。
BTW,那个minor mode 开启关闭是 purcell 大神亲自发的PR
et2010
12
不用担心,我没有做任何实质性的修改,只是利用了 orgmode 里的一个机制,即 org-src--remote
变量值为 t
的时候,退出编辑模式光标会移动回起点。而且我只对会出现问题的 inline src block 的退出做了修改。
et2010
13
现在的效果终于让我满意了,现在不管是不是 Inline 都可以打开 buffer 编辑,很爽。
虽然过程比较 hacky,但是学了不少东西。
LdBeth
14
只是对于这个现象是否属于bug,然后如果是bug被修复以后应该如何处理的一个建议。毕竟考虑到Org的更新问题,可能有些用户还是用原先的版本。不过到那个时候再考虑也不迟。
看起来这的确是个很有趣的包。虽然我对TeX没有什么需求,我还是准备弄一个玩玩。
1 个赞
et2010
15
这个应该是 bug 无疑,你可以用我上面的重现步骤试一下就知道了。 @tumashu 大神按照我的步骤也重现了这个 bug 。
而且我为了 debug 看了 org 的内部函数,出现这个问题的原因就是其中的座标函数出了问题,返回的座标不能令光标回到正确的位置(只针对 Inline Source Block)。
你这属于走歪路,和自己过不去,org master 修复后,就不需要你操心这个 bug 了, 你如果在自己的包里面用 advice 修复bug, 你的不停的检测。。。。。
et2010
17
我已经把影响降到最低了,即使 bug 被修复,我这个 patch 的唯一影响就是: inline src block 的光标不管退出 edit buffer 之前的光标位置在哪里,都回到 src block的起点,如果你不留意的话,这点影响是可以忽略不计的。
附上我的 patch:
真正的核心部分只有两行:
另外,我感觉短时间内这个 bug 不会被修复,先凑合一下吧:hugging: 。等它被修复的那一天,说不定编辑 embedded latex 这个功能也已经被 org 官方支持了,也就不需要我这个包了
你可以临时hack,处理这个bug,但同时应该给 orgmode-devel 发邮件,描述这个bug,估计不出1周,这个bug就修复了,等过一年半载,你在去除hack的代码,emacs社区需要合作,为什么 org 主社区国人很少,可能就是因为国人大多数都有嫌麻烦吧。。。。
et2010
19
org-mode 要是托管在 github 上,肯定不是现在这种情况。跟它的 logo 一样,它真的是一只独角兽。
我以前给 org 发过邮件,然后。。。然后就没有然后了,石沉大海,所以我觉得 org 这种方式不利于 issue tracking.
当然,也可能是我自己的问题,我再发一个试试吧。
各个社区都有各个社区的传统和习俗,org-mode 既然是 gnu 项目,就不可能托管到 github