Emacs показывает ^ M в буфере процесса - PullRequest
1 голос
/ 08 ноября 2010

На данный момент у меня есть буфер процесса, который равен 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)

И все заработалохорошо.

Ответы [ 3 ]

2 голосов
/ 08 ноября 2010

Это потому, что эти файлы находятся в конце строки DOS / Windows.Вы можете использовать Cx [Enter] для unix [Enter], чтобы преобразовать их в кодировку Unix.

^L - разрыв страницы.Я видел их несколько раз для разделения различных частей исходного кода (для устаревших списков в текстовом принтере) или в текстовой документации для вставки фактической команды «новая страница»., здесь вы можете видеть, что вы должны выбрать set-process-coding-system для правильной системы кодирования.

1 голос
/ 08 ноября 2010

В качестве альтернативы dos2unix вы можете использовать одну из команд MULE в Emacs или (мой любимый), поскольку эти символы ошибочно рассматриваются как часть текста, вы можете заменить их, используя команду для замены строка в тексте: M-% Cq CM RETURN

M-% - это команда query-replace.

C-q означает «позвольте мне ввести следующий символ, не интерпретируя его как клавишу RETURN».

0 голосов
/ 08 ноября 2010

Я полагаю, что вы видите это из-за несоответствий в ваших новых строках (например, Windows Newlines против * Nux), вам, вероятно, следует попробовать dos2unix

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...