# session.Session.set_typed_option

- **Module:** session.Session
- **Package:** libtmux
- **Language:** Rust
- **Kind:** method
- **Source:** https://github.com/libtmux/libtmux-rs/blob/f0e37052c232636b61d095817046e6bfc8f2ca40/crates/libtmux/src/session/settings.rs#L145
- **Page:** https://libtmux.org/en/rs/latest/reference/session-session-set_typed_option/

```
session.Session.set_typed_option(self, name: &str, value: impl Into<OptionValue>) -> Result<(), Error>
```

Set one option to a typed value, checked before it is sent.

The value must be the variant [`Self::typed_option`] reads back for
the option: `true` for `mouse`, a number for `history-limit`, and
`"vi"` for the choice `status-keys`. [`OptionValue`] gives the rules,
and the two writes it cannot check. The value is marked sensitive, as
in [`Self::set_option`].

# Errors

Returns [`crate::Error::OptionValueRefused`] without sending anything
when tmux's option table refuses the value: the wrong variant, a word
outside a choice's set, or a number outside its range.

Returns [`crate::Error::OptionScopeMismatch`] when tmux keeps the
option in another of its tables, and an error when tmux rejects the
name or value.

## Example

```rust
use libtmux::{Error, OptionValue};

let guard = libtmux::test::TestServer::new().await?;
let session = guard.server().new_session("typed").await?;

session.set_typed_option("history-limit", 5000).await?;
assert_eq!(
    session.typed_option("history-limit").await?,
    Some(OptionValue::Number(5000)),
);

// Below the range tmux's table declares, so it is never sent.
let refused = session.set_typed_option("history-limit", -1).await;
assert!(matches!(refused, Err(Error::OptionValueRefused { .. })));

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