Символы Юникода в режиме терминов emacs - PullRequest
9 голосов
/ 25 июля 2011

Я использую ansi-term для моих обычных терминальных сессий.Я склонен использовать символы юникода в моем приглашении, чтобы сделать такие вещи, как установка завершающего символа в зависимости от типа исходного контроля, который я использую.

Я использую символ "±" в качестве приглашения для репозиториев git.

В ответе Emacs мое приглашение не отображается как Unicode, а отображается как "\ 302 \ 261".Отображение текущей системы кодирования показывает, что по умолчанию используется utf-8-unix для ввода в процесс, но я получаю необработанный двоичный файл в качестве вывода декодирования.Я могу нажать Cc RET p, чтобы изменить системы кодирования и декодирования.Я рисую пробел о том, как установить это автоматически при запуске терминала?Я попытался добавить к term-mode-hook, чтобы установить систему кодирования буфера безрезультатно.Я думаю, что я нашел то, что я ищу в term.el, но я не хочу подстраивать elisp дистрибутива, и кажется, что необработанный двоичный файл был добавлен, чтобы исправить ошибку где-то еще.

РЕДАКТИРОВАТЬ: Это было неясно изначально.У меня проблемы с настройкой системы кодирования процессов по умолчанию для ANSI-term, работающей под Emacs 23.3 с Cocoa-ized на MacOS.Сам Emacs не работает в терминале, мой терминал работает в Emacs.

Ответы [ 3 ]

11 голосов
/ 16 сентября 2011

У меня сработало следующее:

(add-hook 'term-exec-hook
          (function
           (lambda ()
             (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))))

ansi-term, похоже, игнорирует переменную default-process-coding-system, поэтому мне пришлось установить ее локально в буфер после запуска моей оболочки.

8 голосов
/ 16 сентября 2011

После лучшего понимания term.el работает следующее:

(defadvice ansi-term (after advise-ansi-term-coding-system)
    (set-buffer-process-coding-system 'utf-8-unix 'utf-8-unix))
(ad-activate 'ansi-term)

Попытка сделать это с term-mode-hook не работает, потому что в term.el, term-mode-hook вызывается перед переключением на терминалбуфер, поэтому set-buffer-process-coding-system прерывается из-за отсутствия процесса, связанного с буфером.

5 голосов
/ 25 июля 2011

Попробуйте

(set-terminal-coding-system 'utf-8-unix)

Это C-x RET t, а не C-x RET p.


Так C-x RET p помогает? Если C-h v default-process-coding-system не является (utf-8-unix . utf-8-unix), попробуйте

(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
...