2013-03-04 44 views

回答

4

的xterm式的終端發送兩個不同序列的每個截至向下首頁,並結束。在「正常光標鍵」模式下,序列以^[[(ESC [)開頭;在「應用程序光標鍵」模式下,序列以^[O(ESC O)開頭。 結束結束於F,所以在「正常光標鍵」模式下爲^[[F,在「應用程序光標鍵」模式下爲^[OF

TMUX 1.8同時識別默認情況下這些序列的,所以你不應該需要做什麼特別的事情已經TMUX 1.8可靠地識別的xterm風格首頁結束序列(即無需對terminal-overrides如下所述)。


這篇文章的其餘部分介紹一種方式來獲得這些密鑰之前1.8工作工作TMUX版本。的TMUX之前1.8


版本只能看到在kend能力的連接終端的terminfo項中(由項所記載,當你連接到一個TMUX會議)所提供的序列時,認識結束 。默認情況下,tmux將客戶端切換到「正常光標鍵」模式。這最終意味着TMUX因爲終端發送「正常光標鍵」序列但TMUX只知道「應用光標鍵」序列將無法識別(來自kend)。

基本上,TMUX似乎期待首頁結束不受光標鍵模式。與xterm -style終端的不兼容性導致密鑰無法正確識別。

有一種循環孔的在這裏,你可以用它來驗證這種情況的發生:運行tput smkx(或啓動Emacs的Vim的)在活動窗格。只要該窗格處於活動狀態,tmux應識別爲主頁結束。這是因爲smkx發送一個序列給TMUX,導致它發送smkx到客戶端(其切換所述客戶到「應用光標鍵」模式,它發送序列主頁結束TMUX將能夠匹配來自khomekend的序列)。這是不是一個很好的解決方法,但是,因爲「應用」與「正常」狀態也將被設置並通過交互式或全屏程序重置(如Emacs的Vim的)時,他們開始/恢復和退出/暫停。

一個更好的解決方法是使用TMUXterminal-overrides選項改變kend(和khome)到‘正常’的序列和從smkxrmkx(刪除‘應用光標鍵’的變化,以防止切換到「應用程序光標鍵」模式,其中首頁結束將發送(未確認現在)序列)。箭頭鍵有特殊的支持,所以他們將永遠被識別(假設的xterm式的序列)。如果您正在使用TERM=xterm=256color連接到TMUX,你可以在做你的(~/.tmux.conf):

set-option -ga terminal-overrides ',xterm-256color:kend=\E[F:khome=\E[H:smkx=\E=:rmkx=\E>' 

(注:由於的方式terminfo項被TMUX處理則需要斷開所有現有xterm-256color客戶端之前的覆蓋生效,也可用於smkxrmkx上面使用的數值假定鍵盤模式序列是所有剩下的一次光標鍵模式序列已經從每個被刪除。)

最終,這一世可能是tmux中的一個bug。它也許應該要麼

  • 包括首頁結束的特殊支持,箭頭鍵得到識別正常模式和應用模式序列,或
  • 始終把客戶端中的「鍵盤發送「模式,並根據窗格是否請求正常或應用程序光標或鍵盤模式發送適當的TERM=screen序列。

實際上,它發送的terminfo能力rmkx(」端鍵盤發射模式」),該換xterm樣terminfo項-切換到‘正常光標鍵’模式‘正常kaypad’模式。
由於^[[F序列不被識別爲一個鍵,它最終被處理爲兩個「鍵組合」:^[[(ESC [,這被視爲M-[),和一個普通的F
修訂控制歷史記錄表明此方法(始終處於鍵盤傳輸模式,模擬每個窗格的光標/鍵盤模式)在過去的某個時間點被使用。我不清楚爲什麼它改變爲當前行爲(活動窗格的跟蹤鍵盤模式);這種方法可能存在一些問題。

+0

謝謝!我的.tmux.conf文件中的這一行中的肯德鍵的名字是什麼? 'set -g prefix End'即使我在前面插入了'set-option -ga terminal-overrides ...'行,該行也不起作用。我可以給你更多的診斷信息嗎? – 2013-03-06 18:40:31

+1

@RosePerrone:首先,「沒有工作」以什麼方式?您是否遇到錯誤,或者您是否無法成功使用End作爲前綴?舊的前綴密鑰是否仍然有效? (你可能也想使用'set -g prefix2 C-b',所以你有一個備份前綴鍵。)其次,你實際上最初是否在* tmux *之外使用'xterm-256color'? (對於終端類型,'smkx'和'rmkx'值可能不同;我只是猜測'xterm-256color'。) – 2013-03-06 20:04:17

+0

第三,如果運行'tmux show -g | grep -F over',報告的'terminal-overrides'值是否包含修改? (配置文件只在服務器啓動的時候被處理,所以你需要重新啓動服務器(退出所有的會話(所以'tmux ls'說'無法連接服務器'),然後啓動一個新的服務器)。 ,你可以重新配置你現有的服務器(前綴':設置-ga ...'或'tmux set -ga ...'),但你仍然需要斷開任何現有的客戶端以使更改生效。 – 2013-03-06 20:05:05

相關問題