現時点では、utf-8-auto
(emacs モードラインはバッファーを と報告しますutf-8-auto-dos
)CRLF
スタイルの改行を含むプロセスバッファーを持っています。複数行のテキストを aprocess-send-region
またはprocess-send-string
各行の末尾に^M
.
この問題を奇妙にしているのは、プロセスから直接プロセス バッファに書き込まれたテキストに^M
's' が含まれていないことです。
ソース テキストがどこから来ているかに違いはないようです。実際、マークされて送信された複数行の領域であっても、プロセス バッファー (含まれていない^M
) に既に表示されている場合でも、送信時にそれらが含まれます。
(複数行が Windows クリップボード インターフェイスからkillringに、または Emacs バッファーから killring に送信される場合、process-send-region のソース テキストは常に Emacs バッファー、process-send-string から取得されることに注意してください。 )
また、バッファへの着信テキストがafter-change-functions
フックによって解析されることも追加する必要があります(入力に基づいて色付けを行うため)。そのため、最後の手段regexp-replace-in-string
として、この着信テキストをそのフック関数の一部として追加します。間違っているように見えるため、それを避けるために、他に何も機能しない場合は、ハッキーなソリューションとして追加します。
補遺
バッファーのエンコード設定と、代わりに使用するプロセスを更新し、 が消え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)
そして、すべてがうまくいきました。