【发布时间】:2011-05-06 10:11:23
【问题描述】:
目前,我有一个进程缓冲区,它是utf-8-auto(emacs 模式将缓冲区报告为utf-8-auto-dos),带有CRLF 样式的换行符。当我通过process-send-region 或process-send-string 将多行文本写入缓冲区时,每行都以^M 为后缀。
让这个问题变得奇怪的是,直接从进程写入进程缓冲区的文本不包含^M。
源文本的来源似乎没有任何区别,实际上,即使是已标记并发送的多行区域,已出现在进程缓冲区中(不包含^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)
一切正常。
【问题讨论】:
-
请注意更新,我已经将问题细化到特定用例,使用进程缓冲区,在这种情况下,
dos2unix方法不相关,但是,我能够处理这个使用 emacs-lisp 插入的文本。
标签: windows emacs character-encoding line-endings