天天看點

使用Terminator和Tmux打造完美終端

          我一直在使用Termiantor作為預設終端,該控制台模拟器最大的特點就是支援全屏,我十分喜歡這個功能,這樣,我就不會被工作列和視窗标題等東西幹擾,而且給人的感覺就像是在控制台中操作,而不是在圖形桌面上操作,感覺倍兒棒 :-).

        除全屏功能以外,Terminator還支援多種配置設定,值得一提的是"Run a custom command",該功能可以使Terminator啟動時就運作一些指令,并且可以設定指令退出時Terminator也同時關閉.當然,這個功能并非Terminator所特有,在其他控制台模拟器中通過指令參數或配置檔案也可以實作.

        在最新版的Terminator-0.96中,其實作了真正的背景透明以及預設的插件支援,不過,目前還不知道這些插件是幹什麼用的,又是如何使用的.

        好了,本次所要打造的完美終端,所用的Terminator就是0.96版的,這一版的在Debian的軟體庫中還沒有,是以需要下載下傳源碼進行編譯/安裝,而tmux就直接用apt-get安裝就行了.

        首先,從https://launchpad.net/terminator/trunk下載下傳最新版的Terminator,然後,我們需要修改一下代碼(搞不清楚的是這些bug都存在老長時間了,但就是沒人解決 !-_-!).

            * cp terminatorlib/__init__.py terminatorlib/plugins/ ; 這個bug實在~~,這麼複制隻能是讓其能運作,但是插件能不能用就不知道了,反正目前也用不着

           * 編輯termiantor,在第40行下面增加一行如下代碼:

              sys.path.append('/usr/lib/python2.6/site-packages')

              這行代碼指明了python的庫搜尋路徑,我在首次安裝Terminator時發現其将terminatorlib都放到了/usr/lib/python2.6/site-packages目錄下,不同的系統下可能路徑不一樣,你可以先安裝,然後,看其所放置的位置,對應修改上一句即可.我沒有使用設定環境變量PYTHONPATH=$PYTHONPATH:/usr/lib/python2.6/site-packages的方式,因為我希望盡量減少對系統環境的影響.

            * ./setup.py install --prefix=/usr --record=install-files.txt ; 安裝,并指定安裝目錄以及記錄安裝資訊以便于解除安裝(./setup.py uninstall --manifest=install-files.txt)

        按上面操作後就可以成功運作Terminator了.

        如果需求簡單的話,直接用Terminator就可以了,其支援多标簽,可以在一個Terminator中開啟多個終端,并且也支援分屏.不過,我太喜歡它的分屏,感覺分屏線太占空間,而且不十分Geek.是以,我還是選用了tmux.

        tmux的功能十分之強大,而且擴充性也十分強,可以通過腳本對tmux進行美化等.

        說到美化,不得不說tmux-powerline這個強大的tmux狀态欄美化工具了,有了它,就解決了我在Terminator全屏時,不能直接檢視時間/日期等資訊的問題,我可以直接将這些資訊或是其他資訊顯示在tmux的狀态欄上.如此,就是十分的Geek了,并且,使我可以專注地在終端下進行程式設計操作 :-).

        首先,從GitHub上clone一份tmux-powerline下來,按照其文檔進行相關的配置即可.

        這裡,需要說明一下tmux-powerline需要進行修改的地方.

            1. 修改lib.sh:

                * 增加變量center_background,并設定為狀态欄中間部分的背景色(目前還不知道是如何設定狀态欄背景色的);

                * 将print_status_line_right方法中的第一句local prev_bg="colour235"修改為local prev_bg="$center_background",該句是保證狀态欄右部的背景色能和中部的背景色産生無縫過渡;

                * 将print_status_line_left方法中的__ui_left "colour235" "colour235" "red" "$separator_right_bold" "$prev_bg"修改為__ui_left "colour235" "$center_background" "red" "$separator_right_bold" "$prev_bg",也就是将__ui_left的第二個參數修改為狀态欄中部的顔色,該參數是用于設定狀态欄左部與中部間的分隔符的背景色的,同樣是為了進行無縫過渡.

            2. 修改config.sh:

                * 我沒有使用tmux-powerline所提到的字型,是以,我将USER_PATCHED_FONT設定為了false,這樣資訊的分隔符就稍微難看點,不過,暫時忍了,因為我不知道怎麼patch字型:-(.

            3. 修改segments/date_day.sh:

               * 将date +%a修改為date +%A.這是顯示星期幾的腳本,%a表示顯示的是縮寫,在英文環境下沒問題,但是在中文環境下就隻顯示一/二/三...了,不是很明顯,是以改成了顯示全稱.

            4. tmux-powerline中使用了Google Weather服務顯示天氣,但是,Google現在已經停止了該服務,于是,我自己按照其提供的segments/weather.sh腳本寫了個Yahoo Weather的腳本weather_yahoo.sh,下載下傳後,需将腳本中的location修改為你所在地的code,具體的可以從http://weather.yahoo.com/上檢視,文檔位址為http://developer.yahoo.com/weather/,在必要時可以對腳本進行修改.

             5. 在status-left.sh和status-right.sh中就是設定狀态欄左右部分所要顯示的資訊,每部分資訊都是以declare開始,register_segment結束,很容易進行修改和添加.由于修改了擷取天氣的腳本,是以需要将weather部分的腳本替換為weather_yahoo.sh.

        從tmux-powerline就可以感受到tmux的強大,如若需要詳細學習tmux的使用,可以通過man來了解,或是閱讀https://wiki.freebsdchina.org/software/t/tmux.不過,目前我對tmux的session還不是很清楚:-(.

        配置好了tmux,然後,選擇Terminator的"首選項"->"Profiles"->"Command",選中"Run a custom command instead of my shell",并在"Custom command"中填入tmux啟動指令: ([[ -f "$TMUX" ]] && tmux -2 -S $TMUX) || (TMUX="" tmux -2) ,我還不清楚"-S"參數的作用,我的了解是将建立的會話附加到已存在的會話上.這句指令的意思就是建立會話或附加會話.至于參數"-2",則是讓tmux預設認為終端支援256色,并開啟對256色的支援.

        提到終端的256 color,基本上流行的終端都是支援256色的,但是它們并沒有開啟該功能,因為256色的支援需要終端的運作環境中設定了TERM變量的值為"xterm-256color"(不包括引号)才行.xterm是控制台模拟器中的老者,且功能十分強大,唯一的不足是對雙位元組字元的支援太差.

        我也倒騰過xterm與tmux的組合,但是,因為字型的問題還是放棄了該組合.像gnome-terminal和Terminator這些基于libvte開發的終端都是通過"export TERM=xterm-256color"指令設定TERM環境變量來開啟256色的支援,似乎是libvte基于xterm開發或是借鑒了相應的設計和配置?-_-?.

        為了使Terminator支援256色,需在"~/.bashrc"中增加指令"export TERM=xterm-256color".要知道自己的終端是否真的支援256色,可以使用腳本colors.sh列印出256色,通過你的眼睛來判斷:-).

        以前我一直認為自己的終端已經開啟了256色支援的,結果,通過鼓搗tmux的過程中才發現,事實并非如此,最後在256的支援上也是大費波折,不過,幸而弄好了,也算是值得高興的^_^.

        順便提一下,fbterm也支援256色,開啟方式則是在"~/.bashrc"中增加"export TERM=fbterm"指令,将TERM變量的值設定為fbterm即可,也可以在fbterm環境中,在程式啟動時設定該變量,如: TERM=fbterm vi .不過,在fbterm中要使用tmux的話,則256色功能便無法開啟,因為tmux的需設定TERM的值為screen-256color,二者産生了沖突,目前,沒想到什麼好的解決方法,就隻能是要256色,則不要tmux,否則就不要256色 :-(. (啟動fbterm時啟動tmux的方式為: fbterm -- tmux)

        好了,就是這些了,有了Termiantor和tmux,在終端下工作,感覺那是太爽了!

       注意: ~/.bashrc中TERM的值也需要設定為screen-256color,否則,tmux實際上是不能開啟256色的(上次未注意該問題),幸運的是Terminator也支援使用該值開啟256色,故而,皆大歡喜! :-)

        .bashrc相關配置:

if [ "$TERM" = "linux" ]; then

    alias fbterm='

    export TERM=fbterm

    fbterm -- tmux

else

    export TERM='screen-256color'

    # forbid touchpad when I'm typing

    if [ "none`pgrep syndaemon`" = "none" ]; then

        syndaemon -i 1 -K -d

    fi

fi

#xrdb指令使xterm的配置生效

#alias xterm='xrdb ~/.Xdefaults && xterm -e tmux'

使用Terminator和Tmux打造完美終端

參考:

    * 256 colors setup for console Vim

    * 使用tmux

    * How do I enable full-color support in Terminal?

    * The 256 color mode of xterm (注: 該文有256色測試腳本)