目前,我有一个进程缓冲区,它是utf-8-auto
(emacs modeline 将缓冲区报告为utf-8-auto-dos
),带有CRLF
样式换行符。当我通过 a 将多行文本写入缓冲区时,process-send-region
或者process-send-string
每行都以^M
.
使这个问题变得奇怪的是,直接从进程写入进程缓冲区的文本不包含^M
's.
源文本的来源似乎没有任何区别,事实上,即使是标记和发送的多行区域,已经出现在进程缓冲区(不包含^M
)中,在发送时也会有它们。
(请注意,process-send-region 的源文本将始终来自 Emacs 缓冲区,process-send-string,而多行将从 Windows 剪贴板界面到 killring,或者再次从 Emacs 缓冲区到 killring。 )
我还应该补充一点,缓冲区的传入文本是由一个after-change-functions
钩子解析的(根据输入进行一些着色)所以最后的手段我会regexp-replace-in-string
在这个传入的文本上做一个额外的作为钩子函数的一部分,我想避免这种情况,因为它似乎是错误的,但如果没有其他方法,我会将它添加为一个 hacky 解决方案。
附录
我更新了缓冲区的编码设置和要使用的进程,而utf-8-dos
不是' 消失了。utf-8-auto
^M
所以在我的应用程序的缓冲区设置部分,我做了......
(switch-to-buffer "sock-buffer")
(set-process-coding-system (get-process sock-process) 'utf-8-dos 'utf-8-dos)
(set-buffer-file-coding-system 'utf-8-dos nil)
(set-buffer-process-coding-system 'utf-8-dos 'utf-8-dos)
然后将其简化为...
(switch-to-buffer "sock-buffer")
(set-buffer-process-coding-system 'utf-8-dos 'utf-8-dos)
一切正常。