# window.Window.rotate

- **Module:** window.Window
- **Package:** libtmux
- **Language:** Rust
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-rs/blob/8a648c0894dfffc9303583f753b6c8ae01f2fe76/crates/libtmux/src/window.rs#L598
- **Page:** https://libtmux.org/reference/rs/window-window-rotate/

```
window.Window.rotate(self, rotation: Rotation) -> Result<(), Error>
```

Move the window's panes round one position, keeping the layout.

The panes swap places within the arrangement rather than the
arrangement changing, so a rotation of a three-pane window three times
returns it to where it started.

# Errors

Returns an error when tmux cannot be reached or refuses the rotation.

## Example

```rust
use libtmux::{Rotation, SplitDirection, SplitOptions};

let guard = libtmux::test::TestServer::new().await?;
let session = guard.server().new_session("turning").await?;
let mut window = session.active_window().await?.expect("a window");
window.split(SplitOptions::new(SplitDirection::Below)).await?;

let before: Vec<_> = window.panes().await?.iter().map(|p| p.id().clone()).collect();
window.rotate(Rotation::Up).await?;
let after: Vec<_> = window.panes().await?.iter().map(|p| p.id().clone()).collect();

assert_ne!(before, after, "the panes moved");
window.rotate(Rotation::Down).await?;
let back: Vec<_> = window.panes().await?.iter().map(|p| p.id().clone()).collect();
assert_eq!(before, back, "and the other way undoes it");

guard.shutdown().await?;
```
