tmui

tmux를 위한 터미널 UI. 오픈소스(MIT)입니다. 세션, 윈도우, pane과 그 출력을 한 화면에서 보며, 다른 것은 아무것도 띄우지 않아도 됩니다.

tmui는 tmux를 위한 터미널 UI입니다. tmux 서버의 세션, 윈도우, pane을 한 화면에 보여 주고, 만들고 이름을 바꾸고 나누고 없앱니다. 어떤 pane의 출력이든 읽을 수 있고, 세션에 붙었다가 떼면 tmui로 돌아옵니다. tmux와 직접 이야기하므로 어떤 tmux 설정에서도 동작하고, st도 계정도 필요 없습니다. 오픈소스(MIT)이며 저장소는 sophonz-labs/tmui입니다. 지금 릴리스는 v0.2.2입니다.

무엇을 쓰나

tmui, stui, st ui는 생김새가 비슷하고 키도 같습니다. 필요한 것과 닿는 범위가 다릅니다.

누구를 위한 것보여 주는 것다른 장치와 폰필요한 것
tmui (MIT)tmux를 쓰는 누구나세션, 윈도우, pane, 출력, 플러그인없음tmux
stui (Apache-2.0)한 장치에서 코딩 에이전트를 돌리는 사람tmui의 화면에 더해 에이전트 상태, 오케스트레이션 런, CI, 요금제 한도없음, 이 장치만tmux, CI에는 gh
st uist 사용자stui의 화면에 더해 계정의 모든 장치와 장치의 볼트있음, st와 앱을 거쳐장치에서 공유 중인 st

설치

curl -fsSL https://dl.sophonz.io/tmui/install.sh | sh

스크립트는 SHA-256을 확인한 뒤 tmui를 ~/.local/bin에 둡니다. TMUI_INSTALL_DIR로 다른 곳에 두고, TMUI_VERSION=v0.2.2로 릴리스를 고정합니다. Go가 있으면 go install github.com/sophonz-labs/tmui@latest도 됩니다. 릴리스 페이지에는 macOS와 Linux(amd64, arm64)용 tmui-<os>-<arch>.tar.gz와 checksums.txt가 있습니다.

tmui upgrade는 같은 방식으로 SHA-256을 확인하고 최신 릴리스로 바꿉니다(--check는 새 릴리스가 있는지만 말하고, --version vX.Y.Z는 그 판을 설치합니다). Homebrew가 설치한 tmui는 건드리지 않고 brew upgrade tmui를 실행하라고 알려 줍니다.

tmux 3.0 이상이 PATH에 있어야 하고(팝업으로 붙으려면 3.2), macOS나 Linux에서 동작합니다.

사용하기

tmui                  # 지금 들어 있는 서버, 아니면 기본 서버
tmui -L work          # 소켓 이름이 "work"인 서버 (tmux -L과 같습니다)
tmui -S /tmp/my.sock  # 소켓 경로의 서버 (tmux -S와 같습니다)

세션 목록에서 시작합니다. enter는 한 단계 아래로(세션, 윈도우, pane, pane의 출력), esc는 위로 돌아옵니다. ?는 모든 키를 보여 줍니다.

tmui의 세션 목록: 위쪽 머리글에 서버, tmux 버전, 세션·윈도우·pane 수, 이 화면의 키, tmui 로고. 아래에 세션 api, build, docs, work와 각각의 윈도우 수, 붙은 클라이언트, 나이, 현재 윈도우
세션 목록
세션 work의 pane 목록: pane 네 개와 각각의 윈도우, 명령, 프로세스 id, 크기, 디렉터리, 그리고 나누기·없애기·플러그인 화면의 키
세션의 pane
키어디서하는 일
j k, g G, ctrl-b ctrl-f어디서나이동, 맨 위와 맨 아래, 한 페이지
enter, esc어디서나줄 안으로, 뒤로(또는 필터 지우기)
/목록, 출력줄 거르기. 출력에서는 검색(n N으로 다음과 이전)
a세션, 윈도우, pane붙기(아래 참고)
n, R세션, 윈도우새로 만들기, 이름 바꾸기
s vpane아래로 나누기, 오른쪽으로 나누기
ctrl-d세션, 윈도우, pane없애기(먼저 묻습니다)
ctrl-r어디서나지금 새로 읽기(2초마다 새로 읽습니다), 설정 다시 읽기
ctrl-e어디서나머리글 켜고 끄기
:어디서나:sessions, :windows, :panes, :ext, :config, :logo, :headless, :tmux <인자>, :q

:tmux <인자>는 같은 서버에서 tmux 명령을 실행합니다. 예를 들어 :tmux new-window -d -n logs처럼 씁니다. 출력은 페이저로 열립니다.

복사하기

마우스로 고르면 테두리와 칸까지 같이 잡히므로, tmui는 내용만 일반 텍스트로 복사합니다.

  • y는 줄의 값을 복사합니다. 세션은 이름, 윈도우는 session:index, pane은 id, 플러그인 줄은 url입니다. Y는 줄 전체를 탭으로 구분해 복사합니다.
  • pane 출력에서 v는 줄을 고르고(j k g G로 넓힘), y는 고른 부분을, 고른 것이 없으면 출력 전체를 복사합니다.
  • z는 테두리 없이 출력만 보여 주어 터미널의 마우스 선택을 쓸 수 있게 합니다. esc로 돌아옵니다.

텍스트는 터미널의 클립보드(tmux 밖에서는 OSC 52, 안에서는 tmux 붙여넣기 버퍼)와, pbcopy·wl-copy·xclip·clip.exe가 있으면 이 장치의 클립보드로 갑니다.

붙었다가 돌아오기

붙기 전에 tmui가 실제 prefix 키로 돌아오는 법을 알려 줍니다. 예를 들면 attaching to web — C-b d comes back to tmui입니다.

  • tmux 밖에서는 tmux attach를 실행합니다. 떼면(prefix d) tmui로 돌아옵니다.
  • tmux 3.2 이상 안에서는 세션을 화면 크기의 팝업으로 엽니다. prefix d로 팝업이 닫히고 tmui는 그대로 있습니다.
  • 그보다 오래된 tmux 안에서는 클라이언트를 전환합니다. prefix L이나 prefix s로 돌아옵니다.

플러그인

플러그인은 다른 CLI를 들여옵니다. 그 출력을 tmui의 표로 보여 주고, 그 명령을 키와 : 줄에 붙입니다. 플러그인은 JSON 파일이고 tmui와 stui가 같은 파일을 읽습니다. 지금 있는 플러그인과 만드는 법은 tui-plugins 페이지에, 형식은 SPEC.md에 있습니다.

tmui ext install gh-prs       # 실행할 명령을 모두 보여 주고 먼저 묻습니다
tmui ext install ./my-plugin  # plugin.json이 든 디렉터리, 또는 그 파일의 경로나 URL
tmui ext list
tmui ext remove gh-prs

gh-runs를 설치하면 커서가 있는 pane의 저장소에서 GitHub Actions 런을 엽니다.

tmui의 gh-runs 플러그인 화면: pane이 있는 저장소의 워크플로 런과 id, 워크플로, 브랜치, 이벤트, 상태, 결론, 시작 시각, 그리고 다시 실행·실패 로그·브라우저에서 열기·지켜보기 키
gh-runs 플러그인

tmui 자신의 키와 명령이 늘 우선합니다. 그와 겹치는 플러그인 키는 빠지고, :ext가 그렇다고 알려 줍니다.

설정

설정은 $XDG_CONFIG_HOME/tmui/config.yaml(기본은 ~/.config/tmui/config.yaml)에 둡니다. 파일이 없으면 기본값을 씁니다. 쓸 수 없는 키나 값은 상태 줄과 :config에 경고로 나옵니다. 파일이 바뀌면 다시 읽습니다.

tmui config          # 지금 적용된 설정과 각각이 어디서 왔는지
tmui config edit     # $EDITOR로 엽니다. 없으면 모든 기본값을 주석으로 담아 만듭니다
키기본값
ui.logotrue머리글 오른쪽 위의 로고
ui.headlessfalse머리글을 아예 두지 않습니다. ctrl-e로 잠시 켜고 끕니다
ui.colortruefalse면 색 없이 그립니다(NO_COLOR와 같습니다)
refreshRate2stmux를 다시 읽는 간격, 500ms 이상
startViewsessionssessions, windows, panes
plugins.enabled, plugins.disabledtrue, []플러그인을 하나도 불러오지 않거나, 이름으로 몇 개를 뺍니다