From dc950ad0d4b0767573abdea9b745206c1a1ef017 Mon Sep 17 00:00:00 2001 From: Thomas Forgione Date: Mon, 6 Nov 2023 11:33:15 +0100 Subject: [PATCH] Fix bug, adds readme --- README.md | 59 ++++++++++++++++++++++++++++++++++++++ screenshots/col-major.png | Bin 0 -> 27123 bytes screenshots/row-major.png | Bin 0 -> 21466 bytes src/lib.rs | 4 +-- 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 README.md create mode 100644 screenshots/col-major.png create mode 100644 screenshots/row-major.png diff --git a/README.md b/README.md new file mode 100644 index 0000000..c43ebdc --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +# multiview-rs + +*Run many commands and watch all outputs in a single terminal* + + +## Installation + +If rust is not already installed, [install rust](https://www.rust-lang.org/tools/install). + +Then run: + +```sh +cargo install --git https://gitea.tforgione.fr/tforgione/multiview +``` + +## Usage + +Split your terminal in two rows, the first containing three columns, and the second containing one column: +```sh +multiview cmd1 :: cmd2 :: cmd3 // cmd4 :: cmd5 +``` + +Split your terminal in two columns, the first containing three rows, and the second containing one row: +```sh +multiview cmd1 // cmd2 // cmd3 :: cmd4 // cmd5 +``` + +## Colors + +Most well written programs will disable colors when running from multiview, in order to force them to use colors, you +can use the `unbuffer` command from the [`expect` package](https://packages.ubuntu.com/search?keywords=expect). + +```sh +multiview unbuffer cmd1 :: unbuffer cmd2 +``` + +## Shortcuts + + - `k`: kills the current tile + - `K`: kills all tiles + - `r`: restarts the current tile + - `R`: restarts all tiles + - `l`: draw a line on the current tile + - `L`: draw a line on all tiles + - `q`: quits + +## Limitations + +*Don't resize your terminal... just don't* :cry: + +## History + +This is my attempt to rewrite [arjunmehta's multiview](https://github.com/arjunmehta/multiview) in rust. + +Their version has many features that I don't use, but is missing a few things that I need: + - line wrapping: when a line is bigger than the terminal size, the end is just not displayed + - scroll: if your output has more lines than your terminal height, there is no way (to my knowledge) to scroll up + + diff --git a/screenshots/col-major.png b/screenshots/col-major.png new file mode 100644 index 0000000000000000000000000000000000000000..8742a36ab1b5ae381769fc4da059a0ea32607e67 GIT binary patch literal 27123 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 literal 0 HcmV?d00001 diff --git a/screenshots/row-major.png b/screenshots/row-major.png new file mode 100644 index 0000000000000000000000000000000000000000..4e41cfa42c8fa4320622415112b7212980e75c7a GIT binary patch literal 21466 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 J*W|)T`x^+kA*=uZ literal 0 HcmV?d00001 diff --git a/src/lib.rs b/src/lib.rs index 0230216..e19fdea 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -359,12 +359,12 @@ pub fn main() -> io::Result<()> { row.into_iter() .map(|((i, j), tile)| { - let (i, j) = if is_row_major { (i, j) } else { (j, i) }; + let (p_i, p_j) = if is_row_major { (i, j) } else { (j, i) }; TileBuilder::new() .command(tile.into()) .coords((i as u16, j as u16)) - .position((j as u16 * tile_size.0 + 1, i as u16 * tile_size.1 + 1)) + .position((p_j as u16 * tile_size.0 + 1, p_i as u16 * tile_size.1 + 1)) .size(tile_size) .sender(sender.clone()) .build()