Server.set_hooks
Write a whole hook at once.
Source and package
- Qualified name
-
libtmux::server:: Server:: set _hooks - Module
- server
- Declared in
Server- Package
- libtmux
- Source
- crates/libtmux/src/server/settings.rs
-
Description#
ReplaceMode::Replaceclears the hook first, so only what is written remains;ReplaceMode::Mergeleaves entries at indices the write does not name.Sent as at most two tmux invocations rather than one per index: the first command alone, then the rest together. That is not atomic: tmux applies a shared invocation in order and stops at the first refusal, so a rejected entry leaves the ones before it written.
Errors
Returns an error when tmux rejects the name or any command.
Cancel safety
Under
ReplaceMode::Replacethe clear and the entries are one invocation, so a drop leaves the hook as it was or fully written, never cleared and unwritten; tmux reports one status for that group, so a refusal there cannot name which command drew it. UnderReplaceMode::Mergethe first entry is sent on its own, so a drop after it leaves that entry written and the rest not.Examples#
use std::collections::BTreeMap;use libtmux::{IndexedHooks, ReplaceMode, TmuxText};let guard = libtmux::test::TestServer::new().await?;let server = guard.server();let mut entries = BTreeMap::new();entries.insert(0, TmuxText::from(b"display-message first".to_vec()));entries.insert(3, TmuxText::from(b"display-message fourth".to_vec()));server.set_hooks("alert-bell", &IndexedHooks::from(entries), ReplaceMode::Replace).await?;let written = server.hook("alert-bell").await?.expect("the hook is set");assert_eq!(written.len(), 2);assert!(written.get(1).is_none(), "the gap is kept");guard.shutdown().await?;- Parameters
-
-
hooks(&IndexedHooks ) #
tmux command#
The tmux commands behind set_hooks.
tmux C API#
The C declarations in tmux that implement these commands.