An open API service indexing awesome lists of open source software.

https://github.com/deinstapel/cursive-multiplex

A tmux like multiplexer for gyscos/cursive views πŸ–₯️
https://github.com/deinstapel/cursive-multiplex

cursive cursive-views layout manager multiplexer pane terminal tiling tmux tui view window

Last synced: 3 months ago
JSON representation

A tmux like multiplexer for gyscos/cursive views πŸ–₯️

Awesome Lists containing this project

README

          




Welcome to cursive-multiplex πŸ‘‹




stable build


nightly build


crates.io


Docs.rs


GitHub





PRs Welcome



A tmux like multiplexer for
gyscos/cursive
views

---

> This project is work-in-progress

This project provides a tiling window manager for [gyscos/cursive](https://github.com/gyscos/cursive) similar to Tmux. You can place any other `cursive` view inside of a `Mux` view to display these views in complex layouts side by side. Watch the demo below to see how it looks.

## How does it look like? `demo` [![terminalizer](https://img.shields.io/badge/GIF-terminalizer-blueviolet.svg)](https://github.com/faressoft/terminalizer)

Expand to view
Demo GIF

## Usage

Simply add to your `Cargo.toml`

```toml
[dependencies]
cursive-multiplex = "^0.2.0"
```

And then use `Mux::new` to create a new Mux view

```rust
let (mut mux, root_node) = cursive_multiplex::Mux::new(
cursive::views::TextView::new("Hello World!".to_string())
);
```

> Mux has defaults defined for key bindings. You can change them with the API described in the [docs](https://docs.rs/cursive-multiplex).

Expand to see default keybindings



Action
Key


Move focus up
Alt + ↑


Move focus right
Alt + β†’


Move focus down
Alt + ↓


Move focus left
Alt + ←


Resize up
Ctrl + ↑


Resize right
Ctrl + β†’


Resize down
Ctrl + ↓


Resize left
Ctrl + ←


Zoom
Ctrl + x

### Adding views

You can add views by giving a path or an id to an existing node e.g.

```rust
let new_node = mux.add_right_of(
cursive::views::TextView::new("Foo"),
root_node,
).expect("adding right panel to root failed");
```

Its also possible to add views by their path.
```rust
if let Some(sibbling) = mux.root().right().right().down().build() {
let new_node = mux.add_above(
cursive::views::TextView::new("Foo"),
sibbling,
).expect("adding by path failed");
}
```

Returned will be a Result Ok contains the new id assigned to the view, or an error in case of failure.

### Removing Views

You can also remove views, by giving the id of the views.

```rust
mux.remove_id(new_node)?;
```

On success the id of the removed node is returned.

### Switch Views

If you want to reorder your views you can easily switch them by using

```rust
mux.switch_views(new_node, old_node)?;
```

## Troubleshooting

If you find any bugs/unexpected behaviour or you have a proposition for future changes open an issue describing the current behaviour and what you expected.

## Development [![cargo test](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fdeinstapel.github.io%2Fcursive-multiplex%2Fcargo-test.json)](https://github.com/deinstapel/cursive-multiplex/actions)

### Running the tests

#### Running all test suites

Just run

```
$ cargo test
```

to execute all available tests.

#### Investigating failed tests

In case some test fails with your changes, you can use the `cargo-insta` tool to investigate the test case.

To install
```
$ cargo install cargo-insta
```

and to run the tests and investigate all failing tests interactively.

```
$ cargo insta review
```

Any changes between the expected and received screen will be then displayed.

#### shields.io endpoints

[shields.io](https://shields.io) endpoints are generated inside the `./target/shields` folder. They are used in this README.

## Authors

**Fin Christensen**

> [:octocat: `@fin-ger`](https://github.com/fin-ger)
> [:elephant: `@fin_ger@weirder.earth`](https://weirder.earth/@fin_ger)
> [:bird: `@fin_ger_github`](https://twitter.com/fin_ger_github)


**Johannes WΓΌnsche**

> [:octocat: `@jwuensche`](https://github.com/jwuensche)
> [:elephant: `@fredowald@mastodon.social`](https://mastodon.social/web/accounts/843376)
> [:bird: `@Fredowald`](https://twitter.com/fredowald)

## Show your support

Give a :star: if this project helped you!