Ste*_*zzo 7 terminal emacs xterm ansi-term
我目前设置$TERM
为xterm-256color
:
if [[ -n "$EMACS" ]]; then
export TERM=xterm-256color
alias emacs="emacsclient --no-wait"
export EDITOR="emacsclient --no-wait"
export VISUAL="emacsclient"
fi
Run Code Online (Sandbox Code Playgroud)
我曾经将它设置为eterm-color
,但问题是这种终端类型在我通过 SSH 登录的大多数机器上不可用。
.bashrc
Ubuntu 中的默认值检查TERM
变量是否以开头xterm-
,在这种情况下,它会尝试设置窗口标题:
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
Run Code Online (Sandbox Code Playgroud)
问题是\[\e]0;
一点。它应该由 xterm 兼容的终端模拟器解析,但 emacs (ansi-term) 不这样做。其结果是这样的终端:
0;user@host: ~user@host:~$
Run Code Online (Sandbox Code Playgroud)
readline
当输入的文本大于终端的宽度时,它也会使用,破坏一些应用程序。
因为eterm-color
在某些远程主机上不可用(而且我也无法安装它),将其设置为该值会使less
.
有什么我可以使用的技巧,例如大多数发行版附带的另一种终端类型,或者使 ansi-term 识别相关转义码并设置标题的黑客,或者只是丢弃它们?
我找到了一种方法,可以让您具体找出远程主机上可用的终端,然后进行设置。通常,至少有一个 ansi 兼容终端,因此不需要“黑客”来伪造它。
通过一个很长的 ssh 命令完成,它看起来像这样:
ssh -i ~/.ssh/some_key.pub -tty some_remote_server "导出 TERM=`ls -1R /usr/share/terminfo | grep ^eterm-color$ || ls -1R /usr/share/terminfo | grep ^aterm $ || ls -1R /usr/share/terminfo | grep ^ansi$ || ls -1R /usr/share/terminfo | grep ^xterm-256color$ || 导出 TERM=xterm && emacs -nw"
这会在远程主机上按优先顺序查找不同的 ansi 兼容(和不兼容)终端类型,并设置在启动 EMACS 之前找到的第一个终端类型。如果找不到我们的首选类型,它将 TERM 设置为使用“xterm”类型,确保 EMACS 确实启动。
在此示例中,我按顺序查找 eterm-color、aterm、ansi 和 xterm-256color。我不是 EMACS 的重度用户,所以不确定这些是否真的是最好的。我在 CentOS 上测试了这个启动并且运行良好(它在我的测试中发现了 eterm-color )。
我相信 terminfo 在大多数/所有 Linux 变体上都位于同一位置,但您可以添加更多路径来搜索,就像添加更多终端一样,通过添加更多
|| ls -1R /a/不同/路径 | grep ^其他终端$条件测试和管道。
归档时间: |
|
查看次数: |
4789 次 |
最近记录: |