Emacs多项不能正确显示特殊字符
这很奇怪 我在zsh
定义了以下提示:
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
以及Emacs的ansi-term
terminal( Mx ansi-term
)中效果很好 – 请参阅下面的示例:
但是,在Emacs的multi-term
下,它不能正常工作,如下所示:
我认为multi-term
将能够解释像gnome-terminal
或ansi-term
这样的terminal相同的一组转义字符。 为什么它没有正确解释git-prompt_info
和其他人返回的转义字符?
我也试过了:
- Mx
set-terminal-coding-system
并将其设置为utf-8-unix
-
TERM=eterm-color
多任期terminal中的TERM=eterm-color
,或在调用Emacs之前等 -
TERM=
在多任期terminal中,或在调用Emacs之前等 - 从我的
.zshrc
删除任何export TERM
更新(2014年1月29日):
到目前为止,最好的解决scheme似乎是要做到以下几点:
TERM=xterm-256color
但导致另一个我在这里报告的问题: 在Emacs的ansi-term中传递转义序列到shell 。
为什么它没有正确解释git-prompt_info和其他人返回的转义字符?
答案很可能是multi-term
不准备以任何理由接受这种格式的转义序列。 这可能是一个configuration问题,错误或故意。 将模式设置为接受颜色(即TERM=xterm-256color
)改善了这种情况,因为它接受类似于terminal仿真器中使用的标准格式的颜色转义序列,例如:
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
从这里借用的代码
突出部分是颜色[0;31m
,在另一个问题的“更新2”中的链接线程中引用,询问为什么以4m
开始的行是打印出来的,这是该颜色转义序列的一部分。
以下是更多信息 ,并附有相关摘录:
因此,它是理解颜色的terminal模拟器。 你的terminal仿真器明白
\033[0;36m
是青色的,但另一个terminal仿真器可能使用一组完全不同的字符来进行青色(尽pipe没有一个合理的terminal仿真器会标榜这个标准。 这是tput
的原因。 当您运行tput setaf 6
,tput
将查找您的terminal的颜色6(青色)的转义码,并输出该转义码。
我怀疑在你的另一个问题中, alt + b和alt + f在你的另一个问题中没有起作用的原因是由于terminal宽度计数被closures,因为这些转义序列被错误地解释,打印或零宽度。 我并没有把multi-term
混淆很多,但解决scheme可能涉及到使用tput
或类似的方法来正确理解转义序列。
可能的相关疑难解答