bambouville

tmux

Tessera 原生支援 tmux 的控制模式(tmux -CC):視窗和窗格是第一級的介面元素, 而非文字透傳。它需要伺服器上已安裝 tmux

為什麼要用 tmux

在以 tmux 為後盾的工作階段中,shell 執行在伺服器上。關閉 Tessera、失去 Wi-Fi、 切換到行動網路、讓裝置睡眠 —— 這些都不會終結你的工作。重新連線後,你會回到 離開時的位置。

接入

自動 tmux 啟動模式會接入(或建立)該主機專屬的工作階段,名稱為決定性的 tessera-XXXXXXXX,並在 App 重新安裝後仍會記住。具名 tmux 則接入你指定 名稱的工作階段。兩者都在主機編輯器中依主機設定。

決定性的名稱意味著,使用同一筆主機項目的兩台裝置會進入同一個 tmux 工作階段 —— 這正是在兩者之間接續工作階段如此順暢的原因。

如果 tmux 起不來,Tessera 不會讓你乾等:主機未安裝 tmux、tmux 工作階段啟動失敗, 或 dotfiles 在登入時已經 exec tmux,這些情況都會把你帶進一個純 shell,並附上 說明原因的橫幅(「此主機在登入時會自行啟動 tmux —— 將該工作階段作為純終端機 顯示」)。詳見 連線卡住時

視窗

tmux 視窗以分頁形式出現在工作階段的頂欄中,依索引順序排列。列上的 + 按鈕可開啟新視窗;當分頁多到放不下時,一個溢位控制項會列出所有視窗。每個分頁都 帶有關閉控制項,而視窗可以從 ⌘K 面板重新命名 —— 該名稱對接入此工作階段的 所有用戶端都生效。

快速鍵 操作
⌘T 新增視窗
⇧⌘W 關閉窗格 / 視窗
⇧⌘[ / ⇧⌘] 上一個 / 下一個視窗
⌘1⌘9 跳至視窗 1–9

窗格

窗格就是真正的 tmux 窗格,透過控制模式驅動。

快速鍵 操作
⌘D 左右分割
⇧⌘D 上下分割
⌘[ / ⌘] 循環切換窗格
⇧⌘↩ 縮放 / 還原窗格
Tessera 中的一個 tmux 工作階段,頂部橫排三個視窗分頁,下方是兩個左右並排的窗格:左邊是顯示 git log 輸出的 shell,右邊是執行中的 htop。
同一個 tmux 視窗中的兩個窗格,工作階段的視窗以分頁形式列在上方。每個窗格都有自己的標題列和關閉控制項。

在 iPhone 上

從 iPhone 接入絕不會重排你的版面:分割和縮放狀態會維持大螢幕留下的樣子, 而手機透過切換器一次顯示一個窗格。詳見iPhone 上的 tessera

mosh + tmux

在 mosh 之下,終端機跑在 UDP 上,而 tmux 分頁則搭乘第二條 SSH 側通道。對 mosh 主機而言,這條側通道同樣負責承載 連接埠轉發 —— 以及 真正的回捲緩衝

響鈴

正是 tmux 控制模式的接線,讓 Tessera 能把終端機響鈴導向 通知 —— 以視窗為單位,並標記發出響鈴的分頁。

注意事項

  • 環境變數和啟動指令片段只在 tmux 工作階段啟動時執行。變更之後,請在伺服器上 結束該工作階段(tmux kill-session)才能套用更改。
  • 同時從 Tessera 和另一個用戶端接入是可行的,但兩個用戶端會共用相同的視窗 —— 這是 tmux 的行為,不是錯誤。當另一個用戶端是你自己的 iPhone 或 iPad 時, Tessera 會妥善處理這種競用 —— 詳見取回控制權
  • 如果在大量重繪之後輸出看起來卡住了,⌘R(iPad)會強制完整重繪。而如果 工作階段接入後畫面始終沒有繪製,Tessera 會告訴你(「按任意鍵將其喚醒」)—— 你的第一次按鍵就會讓畫面出現。