На данный момент у меня есть буфер процесса, который равен utf-8-auto
(emacs modeline сообщает о буфере как utf-8-auto-dos
) с символами новой строки в стиле CRLF
.Когда я записываю многострочный текст в буфер через process-send-region
или process-send-string
, каждая строка имеет суффикс ^M
.
. Что делает эту проблему странной, так это то, что текст записывается в буфер процесса непосредственно изпроцесс, не содержащий ^M
.
Кажется, что не имеет никакого значения, откуда исходит исходный текст, фактически даже многострочная область, помеченная и отправленная, которая уже появляется вбуфер процесса (который не содержит ^M
) будет иметь их при отправке.
( Примечание исходный текст для региона процесса-отправки всегда будет поступать из буфера Emacs, process-send-string, когда многострочный будет из интерфейса буфера обмена Windows в killring, или снова из буфера Emacs в killring.)
Я также должен добавить, что входящий текст в буферобработанный after-change-functions
ловушкой (для некоторой раскраски, основанной на вводе), так что в крайнем случае я бы сделал дополнительный regexp-replace-in-string
для этого входящего текста как часть этой функции ловушки, я хотел бы избежать этого, потому что это кажетсяs неправильно , но я добавлю его как хакерское решение, если ничего не сработает.
Приложение
Я обновил настройки кодирования для буфера и используемого процесса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)
И все заработалохорошо.