Crates.io | cursive-multiplex |
lib.rs | cursive-multiplex |
version | 0.7.0 |
source | src |
created_at | 2019-08-04 11:43:07.913672 |
updated_at | 2024-08-12 17:47:30.157043 |
description | A tmux like multiplexer for gyscos/cursive views |
homepage | |
repository | https://github.com/deinstapel/cursive-multiplex |
max_upload_size | |
id | 154104 |
size | 1,834,309 |
A tmux like multiplexer for
gyscos/cursive
views
This project is work-in-progress
This project provides a tiling window manager for 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.
demo
Simply add to your Cargo.toml
[dependencies]
cursive-multiplex = "^0.2.0"
And then use Mux::new
to create a new Mux view
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.
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 |
You can add views by giving a path or an id to an existing node e.g.
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.
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.
You can also remove views, by giving the id of the views.
mux.remove_id(new_node)?;
On success the id of the removed node is returned.
If you want to reorder your views you can easily switch them by using
mux.switch_views(new_node, old_node)?;
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.
Just run
$ cargo test
to execute all available 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 are generated inside the ./target/shields
folder. They are used in this README.
Fin Christensen
:octocat:
@fin-ger
:elephant:@fin_ger@weirder.earth
:bird:@fin_ger_github
Johannes Wünsche
:octocat:
@jwuensche
:elephant:@fredowald@mastodon.social
:bird:@Fredowald
Give a :star: if this project helped you!