emacs autopair与graphvizdotmode之间的冲突

     - 问题描述
     autopair一般情况下都会开启(autopair-global-mode);; enable autopair in all buffers.
     也就是在所有主模式下都能使用autopair的功能,但是当装了graphviz-dot-mode插件的时候,emacs只要打开.dot等关联graphviz-dot-mode的文件的时候,就会出现
     "Error in post-command-hook: (wrong-type-argument characterp nil)"
     这种错误,而且之后emacs的很多功能都不能正常使用,不停的提示上述的错误。
     - 解决经过
     网上查阅了相关资料,在google上也有人反映了autopair与sldb-mode之间也有上述的问题存在。
     (`autopair-dont-activate' in slime's problematic `sldb-mode',http://code.google.com/p/autopair/issues/detail?id=32),
     对于这个问题的解决也只是在sldb-mode中屏蔽了autopair。解决方法如下:
     (set-default 'autopair-dont-activate #'(lambda () (eq major-mode 'sldb-mode)))
     - 问题解决方法
       效仿google上对sldb-mode与autopair的冲突解决方法。处理autopair与graphviz-dot-mode的时候在配置文件中加入下面的elisp语句即可。

       (set-default 'autopair-dont-activate #'(lambda () (eq major-mode 'graphviz-dot-mode)))  
       总结
       我个人认为,autopair在设置了globle-mode后,注入了默写函数,使得打开所有文件都有autopair的特性,而sldb和graphviz的模式恰好又对那个注入的函数进行了某种操作导致了问题的发生。貌似想得太浅了。。。。记录下问题,方便以后翻阅。

最新解决方法:(setq graphviz-dot-mode-syntax-table (syntax-table))

这样可以使用autopair mode

原文地址:https://www.cnblogs.com/csophys/p/2389504.html