1

現時点では、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)

そして、すべてがうまくいきました。

4

3 に答える 3

2

これは、これらのファイルが DOS/Windows の行末にあるためです。Cx [Enter] f unix [Enter] を使用して、Unix エンコーディングに変換できます。

^L改ページです。ソース コードのさまざまな部分を分離するために (テキスト プリンターで昔ながらのリストを表示する場合)、またはテキスト ドキュメントで実際の「新しいページ」コマンドを挿入するために、それらを何度か見てきました。

更新の時点で、正しいコーディング システムを選択する必要があることがわかりますset-process-coding-system

于 2010-11-07T22:34:27.110 に答える
1

このアプローチの代わりに、dos2unixEmacs の MULE コマンドの 1 つを使用できます。または (私のお気に入り)、これらの文字は誤ってテキストの一部として扱われるため、テキスト内の文字列を置き換えるコマンドを使用して置き換えることができます: M -% Cq CM リターン

M-% はクエリ置換コマンドです。

Cq は、「RETURN キーと解釈せずに次の文字を入力させてください」という意味です。

于 2010-11-07T22:42:19.787 に答える
0

改行の不一致 (たとえば、Windows の改行と *nux の改行) が原因でこれらが表示されると思います。おそらくdos2unixを試してください。

于 2010-11-07T22:33:17.937 に答える