我有一个像这样定义的骨架:
(define-skeleton hello-skeleton
"Write a greeting"
"Name: "
"Hello " str "!")
当我用M-x
运行时,一切都很顺利。迷你缓冲器显示"姓名:",如果我输入" abc"我结束了"你好abc!"。真棒。
然后我对此进行评估:
(define-abbrev text-mode-abbrev-table "hello" "" 'hello-skeleton)
现在,在激活了文本模式和缩写模式的缓冲区中,键入" hello" [ENTER]会导致迷你缓冲区活跃并显示"名称:"再次,但这一次我输入的内容是颠倒的。我在迷你缓冲区中键入的每个字符都会将前一个字符向右推一步,插入符不会移动。
所以,如果我输入" abc"我得到" cba"在minbuffer中,如果按[ENTER],我会得到"你好cba!"在缓冲区。
我怀疑我的init文件中有一些垃圾,但即使我使用-q
启动emacs,我也会看到这种行为。
这里发生了什么,为什么这样做?
使用:2013-03-17关于MARVIN的GNU Emacs 24.3.1(i386-mingw-nt6.1.7601)。 Windows 7 Home Prem。
更新2014-08-23:
我可以使用Emacs Windows二进制文件(http://ftp.gnu.org/pub/gnu/emacs/windows/)的版本24.1.1重现该错误,但不能使用23.4.1重现错误。
我尝试用无错版本(23.4.1)替换错误版本(24.1.1)中的缩写模式和骨架.el和.elc文件,但问题并没有消失。我想在缩写模式/骨架组合没有考虑到的那些版本之间发生了其他变化..?
建议?
答案 0 :(得分:0)
我找到了一种完成工作的方法:
如果我在触发词之后按[SPACE]而不是[ENTER]("你好"在我的例子中),那么我不再看到奇怪的反向迷你缓冲输入行为。
令人困惑,因为[ENTER]在23.4.1中运作得很好。然后在24.1.1中出现了这种奇怪的行为。我的猜测是Windows换行符(CR和LF)混淆了Emacs 24。
我知道从技术上讲,我还没有找到问题的答案,但这对我来说已经足够了。