2013-03-08 1 views
52

Это странно. Я определил следующую строку в zsh:Emacs multi-term не отображает специальные символы правильно

local user_host='%{$terminfo[bold]$fg[green]%}%n @ %m%{$reset_color%}' 
local current_dir='%{$terminfo[bold]$fg[blue]%} %~%{$reset_color%}' 
local git_branch='$(git_prompt_info)%{$reset_color%}' 
local return_code="%(?..%{$fg[red]%}%? ↵%{$reset_color%})" 

PROMPT="╭─${user_host} %D{[%a, %b %d %I:%M:%S]} ${current_dir} ${git_branch} 
╰─%B$%b " 
RPS1="${return_code}" 

Он отлично работает на gnome-terminal, а также в ansi-term терминале Emacs (Mxansi-term) - смотрите пример ниже:

prompt example gnome-terminal/ansi-term

Тем не менее, он не работает multi-term в Emacs, как показано ниже:

prompt example multi-term

Я думал multi-term бы способны интерпретировать один и тот же набор управляющих символов, что делает терминал как gnome-terminal или ansi-term. Почему это не интерпретирует escape-символы, возвращенные git-prompt_info и другими правильно?

Я также попытался:

  • Mxset-terminal-coding-system и установить его в utf-8-unix
  • TERM=eterm-color в нескольких перспективе терминала в или перед вызовом Emacs и т.д.
  • TERM= внутри мульти- или до вызова Emacs и т. д.
  • Извлечение любых export TERM из моего .zshrc

Update (29 января 2014):

Лучшее решение до сих пор, кажется, чтобы сделать следующее:

TERM=xterm-256color

но вызывает другую проблему, которую я сообщил здесь: Passing escape sequences to shells within ansi-term in Emacs.

+0

Проверьте ответ здесь, чтобы увидеть, если это работает. http://stackoverflow.com/questions/8918910/weird-character-zsh-in-emacs-terminal –

+0

Спасибо @JesusRamos Это отлично поработало для 'ansi-term'! По какой-то причине этого недостаточно для Emacs 'multi-term' (который должен продлить ansi-term) ... Hmmm –

+0

Я перестал использовать несколько термина, и вместо этого я просто сам' M-x переименовал-буфер'. Это прекрасно работает именно так :) –

ответ

1

Почему это не интерпретирует возвращаемые символы возврата, возвращаемые git-prompt_info и другие правильно?

Ответ на вопрос, что multi-term просто не готов принять эти escape-последовательности в этом формате по любой причине. Это может быть проблема конфигурации, ошибка или преднамеренное. Установка режима принимать цвета, т.е. TERM=xterm-256color, улучшает ситуацию, потому что тогда принимает цвет экранирующих последовательностей аналогичны стандартный формат используемого среди эмуляторов терминала, например:

RED='\033[0;31m' 
NC='\033[0m' # No Color 
echo "I ${RED}love${NC} Stack Overflow\n" # this output IS NOT interpreting the escapes 
echo -e "I ${RED}love${NC} Stack Overflow\n" # this output IS interpreting them 

code borrowed from here

выступа части является [0;31m для цвета, на который ссылается связанная нить в «Обновление 2» вашего другого вопроса, спрашивая, почему распечатываются строки, которые начинаются с 4m, который является частью этой цветовой escape-последовательности.

Вот еще info, с соответствующей выдержкой:

Таким образом, это ваш эмулятор терминала, который понимает цвета. Ваш эмулятор терминала понимает, что \033[0;36m является голубым, но другой эмулятор терминала может использовать совершенно другой набор символов для голубого (хотя никакой эмулятор терминального терминала не будет выставлять напоказ стандарт и делать это). Это причина для tput. Когда вы запустите tput setaf 6, tput будет искать коды выхода вашего терминала для цвета 6 (голубой) и выводить этот код выхода.

Я подозреваю, что в вашем другом вопросе, причину того, что альта + б и альт + х не работают в другом Вашем вопросе связан с графом терминала ширина будучи выключено, потому что неправильной интерпретации этих управляющих последовательностей, которые должны быть непечатаемыми или нулевыми. Я не перепутал с multi-term, но решение может включать в себя использование tput или подобное, чтобы позволить ему правильно понимать escape-последовательности.

Possible relevant troubleshooting info

+0

Это много слов, но не особенно полезно (хороший ответ может указывать на [documentation] (https://www.emacswiki.org/emacs/MultiTerm) и отметить, что соответствующая часть - 'term.el' (нет «xterm» ничего). –

 Смежные вопросы

  • Нет связанных вопросов^_^