2012-09-10 20 views

回答

10

如果你總是希望CA以

  • 窗口之間切換窗格之間

    • 開關時,活動窗口有一個以上的窗格中,當活動窗口只有一個窗格,

    然後您可以使用if-shell來計算活動窗口中的窗格數量,以決定在last-panelast-window之間:

    bind-key C-a if-shell 'test $(tmux list-panes | wc -l) -gt 1' 'last-pane' 'last-window' 
    

    在「寬」和「方」配置之間切換時,它仍然是「由您決定」重新排列窗格。通過break-panejoin-pane)。


    TMUX 1.8 if-shellrun-shell做格式的擴展,所以可以簡單的shell命令了一下:

    bind-key C-a if-shell 'test #{window_panes} -gt 1' 'last-pane' 'last-window' 
    
  • +0

    我不知道是否有一個不太麻煩的方式來測試當前窗口是否有多個窗格。它確實應該是那些tmux變量之一,比如'#{pane_count}',那麼我們可以使用它的'#{?}}'結構而不是分出一個shell,另一個tmux來做IPC,和'wc -l'。不幸的是,我找不到所有tmux變量的完整列表。我知道至少有一個沒有記錄的''{pane_current_command}''這很方便。 **更新**我找到了,它是'#{window_panes}',它是「窗口中的窗格數量」。完美 –

    +0

    垃圾,那些條件thingies可能只適用於狀態字符串構建,而不是確定要運行的shell命令。儘管可以避免管道到'wc -l'。 –

    +0

    @StevenLu:* tmux * 1.8支持'if-shell'(和'run-shell')格式的擴展,所以你可以在1.8中做到這一點:''''''''最後一個窗格最後一個窗口「。 –

    1

    我想建議以下(調整80你的兩個終端寬度來區分)

    if-shell '[ "$COLUMNS" -gt 80 ]' 'bind-key C-a "select-window -t :.+"' 'bind-key C-a "next-window"' 
    

    但我要麼搞亂了語法,或COLUMNS未在相關tmux設置環境,因爲上面的shell表達式總是爲我評估爲false。

    +2

    '如果-shell'和'運行shell'都在跑(從分支)服務器的上下文(而不是任何特定的會話或客戶端),所以他們不會有COLUMNS(甚至在std {in,out,err}上都沒有tty)。你可以通過如下方式獲得最近激活的客戶端的寬度:'tmux list-clients -F'#{client_activity}#{client_width}'| sort -rn |頭-1 | cut -d''-f' –

    +0

    IIRC,'$ COLUMNS'是一個bash變量,而不是一個環境變量;所以你需要確保在你運行測試的時候封裝的外殼是bash。而且,即使是這樣,它也不一定會附加到用戶正在查看的同一個pty上(或者任何pty),同時按下鍵綁定。 – jpaugh

    相關問題