改变终端下的光标颜色,包括 screen 和 tmux!

标签: Linux | 发表时间:2011-08-24 15:41 | 作者:依云 Wolf
出处:http://lilydjwg.is-programmer.com/

曾经在Ubuntu中文论坛里看到一个改变光标颜色的方法,用光标颜色来指示是在 Vim 的普通模式还是插入模式下(因为 gnome-terminal 不支持使用转义序列改变光标形状)。Vim Wiki 上的 tip

if &term =~ "xterm\|rxvt"
  silent !echo -ne "\e]12;HotPink\007"
  let &t_SI="\e]12;RoyalBlue1\007"
  let &t_EI="\e]12;HotPink\007"
  autocmd VimLeave * :!echo -ne "\e]12;green\007"
endif

可惜它不适用于当时我正在使用的 screen。现在我改用 tmux 了,偶然改变TERM变量测试的时候,发现光标颜色竟然改变了——虽然还附带一些“不良反应”。我想到:一定有办法来正确地改变光标颜色的!

于是求助于 Google,很快找到了这个,有了用于 screen 的转义序列。不过依旧不适用于 tmux。把“tmux”也加到关键词里再搜,终于找到了这个。根据这个帖子,screen 和 tmux 比 xterm 多出来的那些字符序列是告诉 screen 或者 tmux 把其中的字符序列直接发送到终端模拟器处理。

于是,我的 vimrc 又可以更新了:

let color_normal = 'HotPink'
let color_insert = 'RoyalBlue1'
let color_exit = 'green'
if &term =~ 'xterm\|rxvt'
  exe 'silent !echo -ne "\e]12;"' . shellescape(color_normal, 1) . '"\007"'
  let &t_SI="\e]12;" . color_insert . "\007"
  let &t_EI="\e]12;" . color_normal . "\007"
  exe 'autocmd VimLeave * :!echo -ne "\e]12;"' . shellescape(color_exit, 1) . '"\007"'
elseif &term =~ "screen"
  if !exists('$SUDO_UID')
    if exists('$TMUX')
      exe 'silent !echo -ne "\033Ptmux;\033\e]12;"' . shellescape(color_normal, 1) . '"\007\033\\"'
      let &t_SI="\033Ptmux;\033\e]12;" . color_insert . "\007\033\\"
      let &t_EI="\033Ptmux;\033\e]12;" . color_normal . "\007\033\\"
      exe 'autocmd VimLeave * :!echo -ne "\033Ptmux;\033\e]12;"' . shellescape(color_exit, 1) . '"\007\033\\"'
    else
      exe 'silent !echo -ne "\033P\e]12;"' . shellescape(color_normal, 1) . '"\007\033\\"'
      let &t_SI="\033P\e]12;" . color_insert . "\007\033\\"
      let &t_EI="\033P\e]12;" . color_normal . "\007\033\\"
      exe 'autocmd VimLeave * :!echo -ne "\033P\e]12;"' . shellescape(color_exit, 1) . '"\007\033\\"'
    endif
  endif
endif
unlet color_normal
unlet color_insert
unlet color_exit

因为 tmux 的TERM变量和 screen 的一致,所以得使用TMUX变量来判断是在 tmux 里还是在 screen 里。

最后,说下指定颜色的方法。可以使用和 HTML 中一样的#rrggbb甚至简写#rgb,也可以使用颜色名。这里有个 xterm 的颜色名表。

2011年8月25日更新:

写了个 zsh 函数:

if [[ $TERM == xterm* ]] || [[ $TERM == *rxvt* ]]; then # {{{2 设置光标颜色
  cursorcolor () { echo -ne "\e]12;$*\007" }
elif [[ $TERM == screen* ]]; then
  if [[ -n "$TMUX" ]]; then
    cursorcolor () { echo -ne "\ePtmux;\e\e]12;$*\007\e\\" }
  else
    cursorcolor () { echo -ne "\eP\e]12;$*\007\e\\" }
  fi
fi

相关 [改变 终端 光标] 推荐:

改变终端下的光标颜色,包括 screen 和 tmux!

- Wolf - 依云's Blog
曾经在Ubuntu中文论坛里看到一个改变光标颜色的方法,用光标颜色来指示是在 Vim 的普通模式还是插入模式下(因为 gnome-terminal 不支持使用转义序列改变光标形状). Vim Wiki 上的 tip. 可惜它不适用于当时我正在使用的 screen. 现在我改用 tmux 了,偶然改变TERM变量测试的时候,发现光标颜色竟然改变了——虽然还附带一些“不良反应”.

OAuth的改变

- lyxint - 火丁笔记
去年我写过一篇《OAuth那些事儿》,对OAuth做了一些简单扼要的介绍,今天我打算写一些细节,以阐明OAuth如何从1.0改变成1.0a,继而改变成2.0的. 在OAuth诞生前,Web安全方面的标准协议只有OpenID,不过它关注的是验证,即WHO的问题,而不是授权,即WHAT的问题. 好在FlickrAuth和GoogleAuthSub等私有协议在授权方面做了不少有益的尝试,从而为OAuth的诞生奠定了基础.

TermKit: 下一代富终端

- openboy - Wow! Ubuntu
TermKit 是由 Steven Wittens 为 MacOS X 编写的一个很有趣的项目,可以称之为下一代的富媒体终端. 它可以在终端中用图形化元素来显示命令结果,比如图标等等. 现在有人对此项目进行了 fork ,把它移植到了 Ubuntu 平台上,但没有原生程序,只能运行在 Chromium/Chrome 中,有兴趣的话你可以尝试一下.

改变思想的数学

- 我要发芽 - Solidot
观点将随事实的改变而改变,这是贝叶斯定理的真谛. 贝叶斯定理以18世纪的长老教会牧师Thomas Bayes的名字命名,目的是为了解决一些本质问题:当更多信息涌入时我们如何改变信仰. 是顽固的直到旧有假说完全站不住脚. 还是在怀疑第一次出现后立即抛弃旧观念. 贝叶斯的推导已经变成了无价的科学工具,它帮助我们一步步认清现实.

成长源于改变

- 笨笨龙 - 褪墨
年前有个学生困扰于求职,我有幸和她聊了聊,她的困扰就是父母的期望与自己的选择有很大差异,很纠结. 她希望能做自己想要的工作,但这种工作可能在别人眼里不光鲜,不像公务员工作会让别人眼里放光:)她的父母就是希望她能找到一份稳定而光鲜的工作,如什么公务员、教师、500强外企之类的工作,而且她的父母总是拿别人的小孩来比较,强调什么样的工作是好工作.

小改变,大不同

- 耗子 - GTD Life
7月30日,西安的成长伙伴们又聚在了一起分享自己的成长经验(我们把时间管理沙龙更名为“木立方成长俱乐部”,我们称呼彼此为共同成长的伙伴,这是小改变之一,:)). 不过这一次的形式和以往有一点点小改变,原来是利用1个小时的时间和大家进行主题分享,是一对多的模式,这一次采用“案例分析”的方式,是多对多的模式.

改变世界的Leap Motion

- - 望月的博客
当Wii、PlayStation Move和Kinect无比自豪的把体感技术应用于游戏中,让人觉得很牛逼时,Leap Motion一定在一旁冷笑,因为,这款革命性的体感交互设备,有可能改变整个世界.. 所谓体感技术,简单来说,就是可以让人使用肢体动作,而无需任何复杂的控制设备,就可以身历其境地与内容做互动.

为什么要控制终端?

- Alex - 爱范儿 · Beats of Bits
在写这篇文章之前,先摆出一张照片,证明我绝非空口而谈:这是手上的一部魅族 M9 和一部 MIUI 的 Nexus S ,在每个周末我都会为它俩下载最新的测试固件,体验“用互联网快速迭代的开发模式”生产出来的 ROM (手机固件). 表面上看,M9 和 MIUI 在交互体验上有相似之处,但仔细体会之后就能发现这两款产品的本质区别——前者是以“最好的消费电子产品”为目标,而后者是以“最好的移动互联网体验”为目标.

手机超PC成第一大终端

- - 《商业价值》杂志
中国互联网络信息中心(CNNIC)在7月19日发布的《第30次中国互联网络发展状况统计报告》显示,在中国,中国互联网用户实现互联网接入的方式呈现出全新格局,在2012年上半年,通过手机接入互联网的网民数量达到3.88亿,相比台式电脑的3.8亿,手机成为中国互联网用户的第一大上网终端. CNNIC指出,手机上网终端的普及和上网应用的创新,成为了刺激手机上网用户增速回升的重要刺激因素.

移动终端抓包分析

- - TID-财付通设计中心
1、  从appstore中安装httpwatch basic(高富帅的同学可以装一个pro版本). 2、  运行httpwatch,输入目标URL. 注:basic版本不能查看响应数据. 1、  在PC上安装HttpAnalyzer或Fiddler. 2、  在PC上安装Android Develop Tool.