···11# Jujutsu TUI
22[](https://github.com/faldor20/jj_tui/actions/workflows/build-nix.yml)
33-A TUI for the new version control system Jujutsu
33+A TUI for the new version control system Jujutsu
445566
···8899Press `?` to show the help. (commands are different between graph and files view).
1010Press `Arrows` to navigate windows, `Enter` to focus status view
1111+Press `Space` to select/deselect revisions (multi-select in graph view)
1112List of graph commands:
12131314
14151515-Please provide any suggestions. I'm new to jujutsu so I'm sure people have workflows I couldn't even dream of.
1616+Please provide any suggestions. I'm new to jujutsu so I'm sure people have workflows I couldn't even dream of.
1617## Installing
1718`linux`: Grab the latest release. It's statically linked and should work on any linux machine.
1819`mac`: Grab a prebuild. Let me know if you have any issues as I can't test on a mac.
19202020-To open a shell with jj_tui on nix:`nix shell github:faldor20/jj_tui``
2121+To open a shell with jj_tui on nix: `nix shell github:faldor20/jj_tui`
21222223## Dependencies
2324The jujutsu CLI (minimum version 0.30.0)
2425I haven't tested on windows or Mac.
2525-I believe it won't work outside Unix so Windows users will currently have to use wsl.
2626+I believe it won't work outside Unix so Windows users will currently have to use wsl.
262727282829# Config file:
···4647 title: "Squash"
4748 sub:
4849 # sub menu command
4949- s: "squash_into_parent"
5050+ s: "squash_into_parent"
5051# If the terminal is smaller than this width, the UI will change to a single pane view
5152single_pane_width_threshold: 110
5253```
5354For a full list of commands ids see [`jj_tui/bin/graph_commands.ml`](jj_tui/bin/graph_commands.ml) and [`jj_tui/bin/file_commands.ml`](jj_tui/bin/file_commands.ml)
54555555-# logs:
5656+# logs:
5657`linux`: $XDG_STATE_HOME/jj_tui/
5758`macos`: ~/Library/logs/jj_tui/
5859
+14-3
jj_tui/bin/jj_commands.ml
···138138 | Cmd_async _ )
139139 ; sort_key = _
140140 } ->
141141- [ render_command_line ~indent_level (key_to_string key) description ]
141141+ let key_str =
142142+ let s = key_to_string key in
143143+ if s = " " then "<space>" else s
144144+ in
145145+ [ render_command_line ~indent_level key_str description ]
142146 | { key; description; cmd = SubCmd subs; sort_key = _ } ->
143143- render_command_line ~indent_level (key_to_string key) description
147147+ let key_str =
148148+ let s = key_to_string key in
149149+ if s = " " then "<space>" else s
150150+ in
151151+ render_command_line ~indent_level key_str description
144152 :: render_commands ~indent_level:(indent_level + 1) subs
145153 ;;
146154···148156 let move_command =
149157 render_command_line ~indent_level:0 "Arrows" "navigation between windows"
150158 in
151151- ((commands |> render_commands) @ if include_arrows then [ move_command ] else [])
159159+ let space_command =
160160+ render_command_line ~indent_level:0 "<space>" "toggle selection (multi-select)"
161161+ in
162162+ ((commands |> render_commands) @ if include_arrows then [ move_command; space_command ] else [])
152163 |> I.vcat
153164 |> Ui.atom
154165 |> Lwd.pure