tmux 随机打印 u'0x001b' 和 "]112"

tmux 随机打印 u'0x001b' 和 "]112"

我已经和这个问题斗争了好几个星期,希望只要让它不断发生,我就能找出根本原因。但没有成功。

Ubuntu 14.04.1 LTS(全新安装)上 XMonad 中 gnome-terminal 中的 bash 中的 tmux。当我使用 vanilla Unity(甚至是全新安装)代替 XMonad 时也出现了同样的错误。

似乎时不时地会有一些东西打印出字符 u'0x001b',它叠加在字符串“]112”中的“]”字符上,而不是将其识别为转义符后跟一些数字,tmux 会将其逐字打印到屏幕上的(随机)位置。最近,字符串“]112”也开始偶尔出现没有 unicode 字符的情况。似乎如果字符超出 vim 行的末尾,则替换第一个字符可能会有时其余部分保持原样。

任何强制重绘包含 unicode 字符的矩形的操作都会删除整个字符序列。但是在 Vim 中,我可以删除字符串“]112”中的每个字符,就好像它们确实存在一样。简单地更改它们的颜色(例如,在 vim 中将光标置于它们上面)并不能删除它们。

我没有足够的声誉来发布图片,但我将主持一个小型截屏视频,展示问题的具体情况:http://www.brunobeltran.com/junkdump/tmux_error.mkv

下面是我的 .tmux.conf。我尝试了各种退出时间值,但都无济于事。此外,删除鼠标内容也无济于事。

任何想法或尝试的事情都将不胜感激!


# 0 is too far from 1
set -g base-index 1

# Automatically set window title
set-window-option -g automatic-rename on
set-option -g set-titles on

set -g default-terminal screen-256color
set -g status-keys vi
set -g history-limit 10000

setw -g mode-keys vi
setw -g mode-mouse on
setw -g mouse-resize-pane on
setw -g mouse-select-pane on
setw -g mouse-select-window on
setw -g monitor-activity on

bind-key v split-window -h
bind-key s split-window -v
bind-key J resize-pane -D 5
bind-key K resize-pane -U 5
bind-key H resize-pane -L 5
bind-key L resize-pane -R 5
bind-key M-j resize-pane -D
bind-key M-k resize-pane -U
bind-key M-h resize-pane -L
bind-key M-l resize-pane -R

# Vim style pane selection
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R

# Use Alt-vim keys without prefix key to switch panes
bind -n M-h select-pane -L
bind -n M-j select-pane -D
bind -n M-k select-pane -U
bind -n M-l select-pane -R

# Use Alt-arrow keys without prefix key to switch panes
bind -n M-Left select-pane -L
bind -n M-Right select-pane -R
bind -n M-Up select-pane -U
bind -n M-Down select-pane -D

# Shift arrow to switch windows
bind -n S-Left  previous-window
bind -n S-Right next-window

# No delay for escape key press
set -sg escape-time 0

# copy to clipboard in sane way on linux with xclip
bind -t vi-copy y copy-pipe 'xclip -in -selection clipboard'

# Reload tmux config
bind r source-file ~/.tmux.conf

# THEME
set -g status-bg black
set -g status-fg white
set -g window-status-current-bg white
set -g window-status-current-fg black
set -g window-status-current-attr bold
set -g status-interval 60
set -g status-left-length 30
set -g status-left '#[fg=green](#S) #(whoami)'
set -g status-right '#[fg=yellow]#(cut -d " " -f 1-3 /proc/loadavg)#[default] #[fg=white]%H:%M#[default]'

## my additions start here
# fix pgup/pgdn issues
#set -ga terminal-overrides ',xterm*:smcup@:rmcup@'
# Set up workflow for CJW Lab
#
new  -n Shell  "/usr/bin/env bash"
splitw -h -p 50 -t 0 "bash"
neww -n Matlab "/opt/MATLAB/R2014b/bin/matlab -nodesktop -nosplash"
splitw -h -p 50 -t 0 "bash"
neww -n Mathematica  "/opt/Wolfram/Mathematica/10.0/Executables/math"
splitw -h -p 50 -t 0 "bash"
neww -n Asciiquarium "~/bin/asciiquarium"
neww -n Media  "/usr/bin/ncmpcpp"

# Fix my leader to be Ctrl-q
unbind-key C-b
set -g prefix 'C-q'
bind-key 'C-q' send-prefix

答案1

根据 Egmont Koblinger 在 bugtracker 上的帮助意见 (https://bugs.launchpad.net/ubuntu/+source/gnome-terminal/+bug/1435905),看来这个错误已经在上游被修复了。

该错误似乎是由于 libvte 不支持 OSC 112(“重置光标颜色”转义字符)而导致的。这可能是 Jeff 在安装 solarized 后注意到该错误的原因。terminator 和 gnome-terminal 都使用 libvte,因此相同的修复应该适用于两者。

只需从 utopic repos 安装最新版本的 libvte (libvte-2.90-9/utopic),添加以下行

deb http://us.archive.ubuntu.com/ubuntu utopic main restricted

deb http://extras.ubuntu.com/ubuntu utopic main

到文件

/etc/apt/sources.list

(需要 root 权限)。

然后请求 apt 安装仅有的libvte-2.90-9 从 utopic repos 中执行

~# apt-get update

其次是

~# apt-get install libvte-2.90-9/utopic

这应该可以解决 Ubuntu Trusty 中的问题。较旧版本的 Ubuntu 可能会遇到依赖性问题,这一点很难确定。

答案2

这也报道了github。将以下行放入.tmux.conf文件中可以解决问题,直到 libvte 更新为止。

set-option -g terminal-overrides ',xterm*:Cr=\E]12;gray\007'

相关内容