改变终端下的光标颜色,包括 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一定在一旁冷笑,因为,这款革命性的体感交互设备,有可能改变整个世界.. 所谓体感技术,简单来说,就是可以让人使用肢体动作,而无需任何复杂的控制设备,就可以身历其境地与内容做互动.

iPhone 4S外观无突破原因:不为改变而改变

- 品味视界 - cnBeta.COM
10月9日消息,据国外媒体报道,iPhone 4S的亮相有些让人失望,因为它的外形与iPhone 4一致,而人们期待一款全新设计的iPhone. 但这并不是说iPhone 4的设计糟糕,实际上它是市面上设计最好的手机,坚固、优雅、华丽. 在几个月的媒体轰炸中,人们一直期待传说中更薄、更不同的iPhone.

微软称Windows改变了PC Windows 8将改变一切

- Antoine - cnBeta.COM
据国外媒体报道,2011年8月24日不仅是Windows XP RTM发布的十周年纪念日,而且还是Windows 95发布的16周年纪念日,近日,微软表示,Windows改变了PC,即将发布的Windows 8将改变一切.

4G改变游戏、视频、定位,改变移动互联网

- - 人人都是产品经理
12月4日4G终于发了第一批牌照,工信部对于三个视如己出的运营商兄弟,毫无悬念地给了三张TD-LTE牌照,让3G时代的各一张不同的牌照成为了历史. 4G时代正式到来,2014年的移动互联网,又是一片全新的光景. 现在市场上主流的手游分为两个类型. 这两种类型的手游都有共同点就是花费的手机流量较少,需要的时间较少,很多情况下是一种单机的操作,在完成一局或者一次战斗以后需要上传数据到服务器的时候才会消耗流量,适应于2G,3G时代.