我在使用 xfce4-terminal 时问这个问题,但我对通用解决方案感兴趣:有没有办法阻止终端模拟器在控制台中宣布鼠标支持?我需要鼠标选择和复制粘贴的频率比我在 vim 或其他地方需要鼠标支持的频率要高得多。
答案1
您可以按住该Shift键以使用普通鼠标选择,同时xterm 鼠标跟踪已启用。这适用于我所知道的所有终端模拟器(xterm
、vte
(如xfce-terminal
) 或rxvt
基于 的)。
具体来说vim
,mouse
终端中通常默认不启用。因此,您或操作系统提供的系统set mouse=a
中可能有一个vimrc。~/.vimrc
您可以随时添加:
set mouse=
给你~/.vimrc
禁用它。或者:
if !has("gui_running")
set mouse=
endif
以避免为 GUI 版本禁用它vim
。
鼠标支持(在某种程度上)在terminfo
具有该kmous
功能的数据库中进行了宣传。现在,并非所有应用程序都依赖它来决定是否启用鼠标跟踪。
您可以重新定义终端的条目(在本地 terminfo 数据库中)以删除该功能:
infocmp -1x | grep -v kmous= | TERMINFO=~/.terminfo tic -x -
export TERMINFO=~/.terminfo
对于使用 的应用程序ncurses
,设置就足够了XM
用户自定义将能力(未在 中记录,但在和terminfo(5)
中提到)添加到空字符串。这不会阻止应用程序处理由终端发送的鼠标事件,但会阻止应用程序发送进入鼠标跟踪模式的序列。所以你可以将两者结合起来:curs_caps(5)
curs_mouse(3)
infocmp -1x |
sed '/kmous=/d;/XM=/d;$s/$/XM=,/' |
TERMINFO=~/.terminfo tic -x -
export TERMINFO=~/.terminfo
答案2
在 /etc/vim/vimrc 末尾添加以下两行:
set mouse=
set ttymouse=
答案3
我正在使用这个补丁:
--- a/src/vteseq.cc 2020-01-25 21:39:47.737317745 +0100
+++ b/src/vteseq.cc 2020-01-25 21:40:12.811424242 +0100
@@ -462,18 +462,7 @@
void
Terminal::update_mouse_protocol() noexcept
{
- if (m_modes_private.XTERM_MOUSE_ANY_EVENT())
- m_mouse_tracking_mode = MOUSE_TRACKING_ALL_MOTION_TRACKING;
- else if (m_modes_private.XTERM_MOUSE_BUTTON_EVENT())
- m_mouse_tracking_mode = MOUSE_TRACKING_CELL_MOTION_TRACKING;
- else if (m_modes_private.XTERM_MOUSE_VT220_HIGHLIGHT())
- m_mouse_tracking_mode = MOUSE_TRACKING_HILITE_TRACKING;
- else if (m_modes_private.XTERM_MOUSE_VT220())
- m_mouse_tracking_mode = MOUSE_TRACKING_SEND_XY_ON_BUTTON;
- else if (m_modes_private.XTERM_MOUSE_X10())
- m_mouse_tracking_mode = MOUSE_TRACKING_SEND_XY_ON_CLICK;
- else
- m_mouse_tracking_mode = MOUSE_TRACKING_NONE;
+ m_mouse_tracking_mode = MOUSE_TRACKING_NONE;
m_mouse_smooth_scroll_delta = 0.0;
vte 不再关心我的鼠标,所以 vim 不知道我有一个。
答案4
至少xterm
(它似乎不适用于urxvt
),您可以通过将其运行为“禁用鼠标”
xterm -xrm xterm*allowMouseOps:false