Screen+Putty的理想呈現

用了Puttytray+Screen幾年,雖然因緣際會的學會了caption和hardstatus alwayslastline的雙狀態列技巧,但由於覺得兩行太累贅,用了沒幾個月就作罷,改用一行而已。但看著看著總又覺得缺了一些東西,加上又碰到putty每次複製一個profile就要點好幾下去改title,就覺得相當的厭煩。加上工作需要的關係開了一堆puttytray,每個puttytray又開了好幾個screen,要找東西都相當的困難,因而開始思考要怎麼樣解決。想來想去,決定要想辦法把兩行狀態列其中一行搬到視窗的標題上,寫上主機名跟所有開啟中的視窗名,這樣一來情況應該會好得多。

在survey一堆資料,發現自己所知實在太少的情況下(什麼terminal, terminfo, termcap的),只好邊硬K文件邊try&error…最後終於貼近理想的狀況,簡單報告一下:

.screenrc的部分:

termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=07:ds=\E]0;07

讓message(例如virtual bell,或者部分screen的錯誤訊息)送上title的控制碼,光terminfo似乎不會生效

shelltitle “> |idle"

配合等一下會提到的.cshrc中的設定,會自動捕捉"> “(大於加一個空白)之後,下一個空白出現為止之間的文字當作標題。通常就是捕捉我們在shell下的指令就是。

hardstatus message "%H :: %-Lw%n%f *%t*%+Lw"

設定hardstatus的資訊格式並以message方式呈現(因為message被丟到title了,所以這邊的資訊就是putty視窗title的資訊)

caption always "%{dk}%{+b K}> %{W}%n%f %t %{K}<%{W}%=%{+b K}load{%l} %{C}$USER@%{W}%H %{db}%{W} %Y/%m/%d %0C %A "

設定底部工作列顯示資訊

caption跟hardstatus的資訊格式可以看man screen的STRING ESCAPES有很多相關資料

再來是.cshrc的部分

setenv TITLE "%{33]0;%n@%m:%~07%}"

我是有用switch($TERM)去區隔,只有在case “xterm*"的時候才會設這行,因為進screen後title就交給screen去搞了,所以為了分清楚職責就只有在沒screen的xterm期間設定這樣的資料,(這字串的組成等於是丟TITLE ESCAPE STRING給putty叫他改title,前面開始控制碼,中間內容,最後結束控制碼),下面會再提到如何輸出生效,注意這邊只是設定而已。

set prompt = "${TITLE}%{\ek\e\%}(%{^[[36m%}%T%{^[[0m%}) [%{^[[1;34m%}%n%{^[[0m%}@%{^[[1;36m%}%m%{^[[0m%}] %B[%~]%b %# "

設定命令列前面的內容,最前面的${TITLE}是為了將上面setenv TITLE的東西輸出而放(也就是每出現一次prompt就會更新一次title,跟prompt本身看到的訊息無關),再來%{\ek\e\%}則是為了配合讓screen的shelltitle開始活動而放的控制碼,收到這個以後screen才會開始找shelltitle指令的第一個參數區段。(好像寫錯了,檢討中)

還有針對VIM做加強的.vimrc修改

set title
set t_ts=^[k
set t_fs=^[\

讓vim會去設定本身這個screen的title(而非整個視窗的title,就是當個screen的名稱),並告訴vim要用的開始和結束控制字串是什麼(這在man screen可找到)

但這樣做對於在.screenrc中用screen -t ‘title’ num預先啟動的screen會有離開時名字停留在"Thanks for flying VIM"的窘況,目前暫時的解決方法是把預先設定的’title’改叫做’> |title’,比較好的做法應該要再研究一下man screen的TITLES (naming windows)區段。

這樣一來大致就搞定了,原本以為已經差不多了,但後來發現一個大問題….screen lock的時候title會變空白啊啊<O>
這樣根本不知道這個窗是哪台機器了,囧!

目前除了customize screen以外還沒有想到其他解…而且我也還沒找出來怎麼自己寫orz

2 則迴響 »

  1. lwhsu said

    FreeBSD ports 有個 option HOSTINLOCKED 可以用, patch 在 files/opt-showencoding

    • notexist said

      我有編那個了 可是在ctrl+tab的切換和xp的工作列過於擁擠自動結合以及Win7的新工作列下這個option都派不上用場…XDa
      另外還有問題就是很多地方的screen我都不能動

RSS feed for comments on this post · TrackBack URI

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s

%d 位部落客按了讚: