# plan.planner.Planner

- **Module:** plan.planner
- **Package:** libtmux
- **Language:** Rust
- **Kind:** enum
- **Source:** https://github.com/libtmux/libtmux-rs/blob/f0e37052c232636b61d095817046e6bfc8f2ca40/crates/libtmux/src/plan/planner.rs#L115
- **Page:** https://libtmux.org/en/rs/latest/reference/plan-planner-planner/

How a plan is grouped into tmux invocations.

## Example

```rust
use libtmux::plan::{Plan, Planner, SendKeys, SplitWindow};
use libtmux::WindowId;

let window: WindowId = "@1".parse()?;
let mut plan = Plan::new();
let pane = plan.add(SplitWindow::new(window).focus());
plan.add(SendKeys::new(pane).text("vim").enter());
plan.add(SendKeys::new(pane).text(":e .").enter());

// The same three operations, grouped three ways.
assert_eq!(Planner::Sequential.steps(&plan).len(), 3);
assert_eq!(Planner::Folding.steps(&plan).len(), 2);
assert_eq!(Planner::Marked.steps(&plan).len(), 1);
```

## Members

- `Sequential` (constant): One tmux invocation per operation.
- `Folding` (constant): Share one invocation between neighbouring operations that can.
- `Marked` (constant): Also share a pane creation with the operations that decorate it.
- `steps` (method): Group a plan into the invocations it will dispatch as.
- `steps_bounded` (method): Group a plan, but never share an invocation across a boundary.
- `explain` (method): Group a plan and say why each invocation is separate.
