Crate tmux_interface[−][src]
tmux_interface is a library for communication with TMUX via
CLI.
Description
Main purpose of the tmux_interface library is to implement simple sending and recieving data
mechanisms for intercommunication with TMUX only via standard streams (stdin, stdout,
stderr).
Project Structure
This goal can be reached by splitting it into two separate tasks:
-
Providing wrapper functions for tmux subcommands (which is sending data). Wrapper functions are structured like in tmux manual in few next categories:
- Clients and Sessions (
clients_and_sessions) - Windows and Panes (
windows_and_panes) - Key Bindings (
key_bindings) - Options (
options) - Hooks (
hooks) - Global and Session Environment (
global_and_session_environment) - Status Line (
status_line) - Buffers (
buffers) - Miscellaneous (
miscellaneous)
- Clients and Sessions (
Main structure is TmuxCommand wich has all these wrapper functions implementations.
-
Parsing functions for tmux output as rust structures (which is recieving data). Parsing function are structured by objects they operate with:
Conventions
Library Functions: - Function names and their grouping are inherited from tmux manual
Examples
use crate::tmux_interface::{AttachSession, NewSession, KillSession, TmuxCommand}; // 1. TmuxCommand let tmux = TmuxCommand::new(); tmux.new_session().detached().session_name("new_session_name1").output().unwrap(); tmux.attach_session().target_session("new_session_name1").output().unwrap(); tmux.kill_session().target_session("new_session_name1").output().unwrap(); // 2.a. One-liner NewSession::new().detached().session_name("new_session_name2a").output().unwrap(); AttachSession::new().target_session("new_session_name2a").output().unwrap(); KillSession::new().target_session("new_session_name2a").output().unwrap(); // 2.b. Multi-Liner let mut new_session = NewSession::new(); new_session.detached(); new_session.session_name("new_session_name2b"); new_session.output().unwrap(); let mut attach_session = AttachSession::new(); attach_session.target_session("new_session_name2b"); attach_session.output().unwrap(); let mut kill_session = KillSession::new(); kill_session.target_session("new_session_name2b").output().unwrap();
Examples
Parsing examples:
use crate::tmux_interface::{Sessions, Session, Windows, Window, Pane, Panes, TargetSession, TargetWindowExt}; use crate::tmux_interface::variables::session::session::SESSION_ALL; use crate::tmux_interface::variables::window::window::WINDOW_ALL; use crate::tmux_interface::variables::pane::pane::PANE_ALL; let sessions = Sessions::get(SESSION_ALL).unwrap(); let windows = Windows::get(&TargetSession::Raw("0"), WINDOW_ALL).unwrap(); let panes = Panes::get(&TargetWindowExt::raw("0:1"), PANE_ALL).unwrap();
Examples
Change tmux command line flags, options
use crate::tmux_interface::{TmuxCommand, NewSession, KillSession}; let mut tmux = TmuxCommand::new(); tmux.bin("tmux"); NewSession::from(&tmux).detached().session_name("new_session_name3").output(); KillSession::from(&tmux).target_session("new_session_name3").output();
New session
Examples
Create a new tmux session without any additional parameters (alternative to: tmux new-session)
use crate::tmux_interface::TmuxCommand;
let mut tmux = TmuxCommand::new();
tmux.new_session().output().unwrap();
Examples
Create a new tmux session with some additional parameters (alternative to: tmux new -d -s new_session)
using builder pattern:
use crate::tmux_interface::{TmuxCommand, TargetSession}; let mut tmux = TmuxCommand::new(); tmux.new_session().detached().session_name("new_session_default").output(); tmux.kill_session().target_session("new_session_default").output();
using std::default::Default trait:
use crate::tmux_interface::{TmuxCommand, NewSession, TargetSession}; let mut tmux = TmuxCommand::new(); let new_session = tmux.new_session().detached().session_name("new_session_default").output(); tmux.kill_session().target_session("new_session_default").output();
using direct structure modification:
use crate::tmux_interface::{TmuxCommand, NewSession, TargetSession}; let mut tmux = TmuxCommand::new(); let mut new_session = NewSession::new(); new_session.detached(); new_session.session_name("new_session_direct"); new_session.output(); tmux.kill_session().target_session("new_session_direct").output();
Usage
-
Add a dependency in your
Cargo.toml. Versions below0.1.0are mostly for development and testing purposes (further versions may have different ABI, use them in your projects on your own risk).[dependencies] tmux_interface = "^0.1.0"You can also add
featuresto your dependencies entry inCargo.toml, if you want to specify the version of tmux you want to use. Different tmux versions may have incompatible CLI changes. Followingfeaturesare currently supported:tmux_X_X- tmux latest, default (based on tmux master branch)tmux_2_6- tmux 2.6 (included in Ubuntu 18.04 LTS Bionic Beaver)
[dependencies] tmux_interface = { version = "^0.1.0", features = ["tmux_2_6"] }by default
tmux_X_Xis used. It can be removed with--no-default-featurescargo command line option or withdefault-features = falseoption inCargo.toml[dependencies] tmux_interface = { version = "^0.1.0", default-features = false, features = ["tmux_2_6"] }
-
Add extern crate and use in your source file.
extern crate tmux_interface;
-
Use it’s functions
use crate::tmux_interface::{AttachSession, NewSession, TargetPane, TargetSession, TmuxCommand}; let target_session = TargetSession::Raw("session_name").to_string(); let mut tmux = TmuxCommand::new(); let new_session = NewSession::new().detached().session_name("session_name").output(); let attach_session = AttachSession::new().target_session(&target_session).output(); tmux.send_keys().key("exit").key("C-m").output(); tmux.kill_session().target_session(&target_session).output();
Re-exports
pub use crate::options::StatusKeys; |
pub use crate::options::Switch; |
pub use crate::options::server_options::ServerOptions; |
pub use crate::options::server_options::ServerOptionsBuilder; |
pub use crate::options::server_options::SetClipboard; |
pub use crate::options::server_options::BUFFER_LIMIT; |
pub use crate::options::server_options::COMMAND_ALIAS; |
pub use crate::options::server_options::DEFAULT_TERMINAL; |
pub use crate::options::server_options::ESCAPE_TIME; |
pub use crate::options::server_options::EXIT_EMPTY; |
pub use crate::options::server_options::EXIT_UNATTACHED; |
pub use crate::options::server_options::FOCUS_EVENTS; |
pub use crate::options::server_options::HISTORY_FILE; |
pub use crate::options::server_options::MESSAGE_LIMIT; |
pub use crate::options::server_options::SET_CLIPBOARD; |
pub use crate::options::server_options::TERMINAL_OVERRIDES; |
pub use crate::options::server_options::SERVER_OPTIONS_ALL; |
pub use crate::options::server_options::SERVER_OPTIONS_NONE; |
pub use crate::options::session_options::SessionOptions; |
pub use crate::options::session_options::SessionOptionsBuilder; |
pub use crate::options::session_options::Action; |
pub use crate::options::session_options::Activity; |
pub use crate::options::session_options::Status; |
pub use crate::options::session_options::StatusJustify; |
pub use crate::options::session_options::StatusPosition; |
pub use crate::options::session_options::ACTIVITY_ACTION; |
pub use crate::options::session_options::ASSUME_PASTE_TIME; |
pub use crate::options::session_options::BASE_INDEX; |
pub use crate::options::session_options::BELL_ACTION; |
pub use crate::options::session_options::DEFAULT_COMMAND; |
pub use crate::options::session_options::DEFAULT_SHELL; |
pub use crate::options::session_options::DESTROY_UNATTACHED; |
pub use crate::options::session_options::DETACH_ON_DESTROY; |
pub use crate::options::session_options::DISPLAY_PANES_ACTIVE_COLOUR; |
pub use crate::options::session_options::DISPLAY_PANES_COLOUR; |
pub use crate::options::session_options::DISPLAY_PANES_TIME; |
pub use crate::options::session_options::DISPLAY_TIME; |
pub use crate::options::session_options::HISTORY_LIMIT; |
pub use crate::options::session_options::KEY_TABLE; |
pub use crate::options::session_options::LOCK_AFTER_TIME; |
pub use crate::options::session_options::LOCK_COMMAND; |
pub use crate::options::session_options::MESSAGE_COMMAND_STYLE; |
pub use crate::options::session_options::MESSAGE_STYLE; |
pub use crate::options::session_options::MOUSE; |
pub use crate::options::session_options::PREFIX; |
pub use crate::options::session_options::PREFIX2; |
pub use crate::options::session_options::RENUMBER_WINDOWS; |
pub use crate::options::session_options::REPEAT_TIME; |
pub use crate::options::session_options::SET_TITLES; |
pub use crate::options::session_options::SET_TITLES_STRING; |
pub use crate::options::session_options::SILENCE_ACTION; |
pub use crate::options::session_options::STATUS; |
pub use crate::options::session_options::STATUS_INTERVAL; |
pub use crate::options::session_options::STATUS_JUSTIFY; |
pub use crate::options::session_options::STATUS_KEYS; |
pub use crate::options::session_options::STATUS_LEFT; |
pub use crate::options::session_options::STATUS_LEFT_LENGTH; |
pub use crate::options::session_options::STATUS_LEFT_STYLE; |
pub use crate::options::session_options::STATUS_POSITION; |
pub use crate::options::session_options::STATUS_RIGHT; |
pub use crate::options::session_options::STATUS_RIGHT_LENGTH; |
pub use crate::options::session_options::STATUS_RIGHT_STYLE; |
pub use crate::options::session_options::STATUS_STYLE; |
pub use crate::options::session_options::UPDATE_ENVIRONMENT; |
pub use crate::options::session_options::USER_KEYS; |
pub use crate::options::session_options::VISUAL_ACTIVITY; |
pub use crate::options::session_options::VISUAL_BELL; |
pub use crate::options::session_options::VISUAL_SILENCE; |
pub use crate::options::session_options::WORD_SEPARATORS; |
pub use crate::options::session_options::SESSION_OPTIONS_ALL; |
pub use crate::options::session_options::SESSION_OPTIONS_NONE; |
pub use crate::options::window_options::WindowOptions; |
pub use crate::options::window_options::WindowOptionsBuilder; |
pub use crate::options::window_options::ClockModeStyle; |
pub use crate::options::window_options::PaneBorderStatus; |
pub use crate::options::window_options::AGGRESIVE_RESIZE; |
pub use crate::options::window_options::ALLOW_RENAME; |
pub use crate::options::window_options::ALTERNAME_SCREEN; |
pub use crate::options::window_options::AUTOMATIC_RENAME; |
pub use crate::options::window_options::AUTOMATIC_RENAME_FORMAT; |
pub use crate::options::window_options::CLOCK_MODE_COLOUR; |
pub use crate::options::window_options::CLOCK_MODE_STYLE; |
pub use crate::options::window_options::FORCE_HEIGHT; |
pub use crate::options::window_options::FORCE_WIDTH; |
pub use crate::options::window_options::MAIN_PANE_HEIGHT; |
pub use crate::options::window_options::MAIN_PANE_WIDTH; |
pub use crate::options::window_options::MODE_KEYS; |
pub use crate::options::window_options::MODE_STYLE; |
pub use crate::options::window_options::MONITOR_ACTIVITY; |
pub use crate::options::window_options::MONITOR_BELL; |
pub use crate::options::window_options::MONITOR_SILENCE; |
pub use crate::options::window_options::OTHER_PANE_HEIGHT; |
pub use crate::options::window_options::OTHER_PANE_WIDTH; |
pub use crate::options::window_options::PANE_ACTIVE_BORDER_STYLE; |
pub use crate::options::window_options::PANE_BASE_INDEX; |
pub use crate::options::window_options::PANE_BORDER_FORMAT; |
pub use crate::options::window_options::PANE_BORDER_STATUS; |
pub use crate::options::window_options::PANE_BORDER_STYLE; |
pub use crate::options::window_options::REMAIN_ON_EXIT; |
pub use crate::options::window_options::SYNCHRONIZE_PANES; |
pub use crate::options::window_options::WINDOW_ACTIVE_STYLE; |
pub use crate::options::window_options::WINDOW_STATUS_ACTIVITY_STYLE; |
pub use crate::options::window_options::WINDOW_STATUS_BELL_STYLE; |
pub use crate::options::window_options::WINDOW_STATUS_CURRENT_FORMAT; |
pub use crate::options::window_options::WINDOW_STATUS_CURRENT_STYLE; |
pub use crate::options::window_options::WINDOW_STATUS_FORMAT; |
pub use crate::options::window_options::WINDOW_STATUS_LAST_STYLE; |
pub use crate::options::window_options::WINDOW_STATUS_SEPARATOR; |
pub use crate::options::window_options::WINDOW_STATUS_STYLE; |
pub use crate::options::window_options::WINDOW_STYLE; |
pub use crate::options::window_options::WRAP_SEARCH; |
pub use crate::options::window_options::XTERM_KEYS; |
pub use crate::options::window_options::WINDOW_OPTIONS_ALL; |
pub use crate::options::window_options::WINDOW_OPTIONS_NONE; |
pub use self::commands::tmux_command::TmuxCommand; |
pub use self::commands::tmux_output::TmuxOutput; |
pub use self::commands::buffers::choose_buffer::ChooseBuffer; |
pub use self::commands::buffers::clear_history::ClearHistory; |
pub use self::commands::buffers::delete_buffer::DeleteBuffer; |
pub use self::commands::buffers::list_buffers::ListBuffers; |
pub use self::commands::buffers::load_buffer::LoadBuffer; |
pub use self::commands::buffers::paste_buffer::PasteBuffer; |
pub use self::commands::buffers::save_buffer::SaveBuffer; |
pub use self::commands::buffers::set_buffer::SetBuffer; |
pub use self::commands::buffers::show_buffer::ShowBuffer; |
pub use self::commands::clients_and_sessions::attach_session::AttachSession; |
pub use self::commands::clients_and_sessions::detach_client::DetachClient; |
pub use self::commands::clients_and_sessions::has_session::HasSession; |
pub use self::commands::clients_and_sessions::kill_server::KillServer; |
pub use self::commands::clients_and_sessions::kill_session::KillSession; |
pub use self::commands::clients_and_sessions::list_clients::ListClients; |
pub use self::commands::clients_and_sessions::list_commands::ListCommands; |
pub use self::commands::clients_and_sessions::list_sessions::ListSessions; |
pub use self::commands::clients_and_sessions::lock_client::LockClient; |
pub use self::commands::clients_and_sessions::lock_session::LockSession; |
pub use self::commands::clients_and_sessions::new_session::NewSession; |
pub use self::commands::clients_and_sessions::refresh_client::RefreshClient; |
pub use self::commands::clients_and_sessions::rename_session::RenameSession; |
pub use self::commands::clients_and_sessions::show_messages::ShowMessages; |
pub use self::commands::clients_and_sessions::source_file::SourceFile; |
pub use self::commands::clients_and_sessions::start_server::StartServer; |
pub use self::commands::clients_and_sessions::suspend_client::SuspendClient; |
pub use self::commands::clients_and_sessions::switch_client::SwitchClient; |
pub use self::commands::global_and_session_environment::set_environment::SetEnvironment; |
pub use self::commands::global_and_session_environment::show_environment::ShowEnvironment; |
pub use self::commands::hooks::set_hook::SetHook; |
pub use self::commands::hooks::show_hooks::ShowHooks; |
pub use self::commands::key_bindings::bind_key::BindKey; |
pub use self::commands::key_bindings::list_keys::ListKeys; |
pub use self::commands::key_bindings::send_keys::SendKeys; |
pub use self::commands::key_bindings::send_prefix::SendPrefix; |
pub use self::commands::key_bindings::unbind_key::UnbindKey; |
pub use self::commands::miscellaneous::clock_mode::ClockMode; |
pub use self::commands::miscellaneous::if_shell::IfShell; |
pub use self::commands::miscellaneous::lock_server::LockServer; |
pub use self::commands::miscellaneous::run_shell::RunShell; |
pub use self::commands::miscellaneous::wait_for::WaitFor; |
pub use self::commands::options::set_option::SetOption; |
pub use self::commands::options::set_window_option::SetWindowOption; |
pub use self::commands::options::show_options::ShowOptions; |
pub use self::commands::options::show_window_options::ShowWindowOptions; |
pub use self::commands::status_line::command_prompt::CommandPrompt; |
pub use self::commands::status_line::confirm_before::ConfirmBefore; |
pub use self::commands::status_line::display_message::DisplayMessage; |
pub use self::commands::windows_and_panes::break_pane::BreakPane; |
pub use self::commands::windows_and_panes::capture_pane::CapturePane; |
pub use self::commands::windows_and_panes::choose_client::ChooseClient; |
pub use self::commands::windows_and_panes::choose_tree::ChooseTree; |
pub use self::commands::windows_and_panes::copy_mode::CopyMode; |
pub use self::commands::windows_and_panes::display_panes::DisplayPanes; |
pub use self::commands::windows_and_panes::find_window::FindWindow; |
pub use self::commands::windows_and_panes::join_pane::JoinPane; |
pub use self::commands::windows_and_panes::kill_pane::KillPane; |
pub use self::commands::windows_and_panes::kill_window::KillWindow; |
pub use self::commands::windows_and_panes::last_pane::LastPane; |
pub use self::commands::windows_and_panes::last_window::LastWindow; |
pub use self::commands::windows_and_panes::link_window::LinkWindow; |
pub use self::commands::windows_and_panes::list_panes::ListPanes; |
pub use self::commands::windows_and_panes::list_windows::ListWindows; |
pub use self::commands::windows_and_panes::move_pane::MovePane; |
pub use self::commands::windows_and_panes::move_window::MoveWindow; |
pub use self::commands::windows_and_panes::new_window::NewWindow; |
pub use self::commands::windows_and_panes::next_layout::NextLayout; |
pub use self::commands::windows_and_panes::next_window::NextWindow; |
pub use self::commands::windows_and_panes::pipe_pane::PipePane; |
pub use self::commands::windows_and_panes::previous_layout::PreviousLayout; |
pub use self::commands::windows_and_panes::previous_window::PreviousWindow; |
pub use self::commands::windows_and_panes::rename_window::RenameWindow; |
pub use self::commands::windows_and_panes::resize_pane::ResizePane; |
pub use self::commands::windows_and_panes::respawn_pane::RespawnPane; |
pub use self::commands::windows_and_panes::respawn_window::RespawnWindow; |
pub use self::commands::windows_and_panes::rotate_window::RotateWindow; |
pub use self::commands::windows_and_panes::select_layout::SelectLayot; |
pub use self::commands::windows_and_panes::select_pane::SelectPane; |
pub use self::commands::windows_and_panes::select_window::SelectWindow; |
pub use self::commands::windows_and_panes::split_window::SplitWindow; |
pub use self::commands::windows_and_panes::swap_pane::SwapPane; |
pub use self::commands::windows_and_panes::swap_window::SwapWindow; |
pub use self::commands::windows_and_panes::unlink_window::UnlinkWindow; |
pub use crate::commands::PaneSize; |
pub use crate::target::target_pane::TargetPane; |
pub use crate::target::target_pane::TargetPaneExt; |
pub use crate::target::target_pane::TargetPaneToken; |
pub use crate::target::target_session::TargetSession; |
pub use crate::target::target_window::TargetWindow; |
pub use crate::target::target_window::TargetWindowExt; |
pub use crate::target::target_window::TargetWindowToken; |
pub use self::variables::layout::layout_cell::LayoutType; |
pub use self::variables::layout::layout::Layout; |
pub use self::variables::layout::layout_cell::LayoutCell; |
pub use self::variables::layout::layout_checksum::LayoutChecksum; |
pub use self::variables::pane::pane::Pane; |
pub use self::variables::pane::pane_tabs::PaneTabs; |
pub use self::variables::pane::panes::Panes; |
pub use self::variables::session::session::Session; |
pub use self::variables::session::session_stack::SessionStack; |
pub use self::variables::session::sessions::Sessions; |
pub use self::variables::window::window::Window; |
pub use self::variables::window::window_flag::WindowFlag; |
pub use self::variables::window::windows::Windows; |
pub use self::version::Version; |
pub use self::error::Error; |
pub use crate::variables::session::session::SESSION_ACTIVITY; |
pub use crate::variables::session::session::SESSION_ALERTS; |
pub use crate::variables::session::session::SESSION_ATTACHED; |
pub use crate::variables::session::session::SESSION_CREATED; |
pub use crate::variables::session::session::SESSION_FORMAT; |
pub use crate::variables::session::session::SESSION_GROUP; |
pub use crate::variables::session::session::SESSION_GROUPED; |
pub use crate::variables::session::session::SESSION_GROUP_LIST; |
pub use crate::variables::session::session::SESSION_GROUP_SIZE; |
pub use crate::variables::session::session::SESSION_HEIGHT; |
pub use crate::variables::session::session::SESSION_ID; |
pub use crate::variables::session::session::SESSION_LAST_ATTACHED; |
pub use crate::variables::session::session::SESSION_MANY_ATTACHED; |
pub use crate::variables::session::session::SESSION_NAME; |
pub use crate::variables::session::session::SESSION_STACK; |
pub use crate::variables::session::session::SESSION_WIDTH; |
pub use crate::variables::session::session::SESSION_WINDOWS; |
pub use crate::variables::session::session::SESSION_NONE; |
pub use crate::variables::session::session::SESSION_ALL; |
pub use crate::variables::window::window::WINDOW_ACTIVE; |
pub use crate::variables::window::window::WINDOW_ACTIVITY; |
pub use crate::variables::window::window::WINDOW_ACTIVITY_FLAG; |
pub use crate::variables::window::window::WINDOW_BELL_FLAG; |
pub use crate::variables::window::window::WINDOW_FLAGS; |
pub use crate::variables::window::window::WINDOW_FORMAT; |
pub use crate::variables::window::window::WINDOW_HEIGHT; |
pub use crate::variables::window::window::WINDOW_ID; |
pub use crate::variables::window::window::WINDOW_INDEX; |
pub use crate::variables::window::window::WINDOW_LAST_FLAG; |
pub use crate::variables::window::window::WINDOW_LAYOUT; |
pub use crate::variables::window::window::WINDOW_LINKED; |
pub use crate::variables::window::window::WINDOW_NAME; |
pub use crate::variables::window::window::WINDOW_PANES; |
pub use crate::variables::window::window::WINDOW_SILENCE_FLAG; |
pub use crate::variables::window::window::WINDOW_STACK_INDEX; |
pub use crate::variables::window::window::WINDOW_VISIBLE_LAYOUT; |
pub use crate::variables::window::window::WINDOW_WIDTH; |
pub use crate::variables::window::window::WINDOW_ZOOMED_FLAG; |
pub use crate::variables::window::window::WINDOW_NONE; |
pub use crate::variables::window::window::WINDOW_ALL; |
pub use crate::variables::pane::pane::PANE_ACTIVE; |
pub use crate::variables::pane::pane::PANE_AT_BOTTOM; |
pub use crate::variables::pane::pane::PANE_AT_LEFT; |
pub use crate::variables::pane::pane::PANE_AT_RIGHT; |
pub use crate::variables::pane::pane::PANE_AT_TOP; |
pub use crate::variables::pane::pane::PANE_BOTTOM; |
pub use crate::variables::pane::pane::PANE_CURRENT_COMMAND; |
pub use crate::variables::pane::pane::PANE_CURRENT_PATH; |
pub use crate::variables::pane::pane::PANE_DEAD; |
pub use crate::variables::pane::pane::PANE_DEAD_STATUS; |
pub use crate::variables::pane::pane::PANE_FORMAT; |
pub use crate::variables::pane::pane::PANE_HEIGHT; |
pub use crate::variables::pane::pane::PANE_ID; |
pub use crate::variables::pane::pane::PANE_INDEX; |
pub use crate::variables::pane::pane::PANE_INPUT_OFF; |
pub use crate::variables::pane::pane::PANE_IN_MODE; |
pub use crate::variables::pane::pane::PANE_LEFT; |
pub use crate::variables::pane::pane::PANE_MODE; |
pub use crate::variables::pane::pane::PANE_PID; |
pub use crate::variables::pane::pane::PANE_PIPE; |
pub use crate::variables::pane::pane::PANE_RIGHT; |
pub use crate::variables::pane::pane::PANE_SEARCH_STRING; |
pub use crate::variables::pane::pane::PANE_START_COMMMAND; |
pub use crate::variables::pane::pane::PANE_SYNCHRONIZED; |
pub use crate::variables::pane::pane::PANE_TABS; |
pub use crate::variables::pane::pane::PANE_TITLE; |
pub use crate::variables::pane::pane::PANE_TOP; |
pub use crate::variables::pane::pane::PANE_TTY; |
pub use crate::variables::pane::pane::PANE_WIDTH; |
pub use crate::variables::pane::pane::PANE_NONE; |
pub use crate::variables::pane::pane::PANE_ALL; |
Modules
| commands | |
| error | |
| options | |
| target | |
| variables | |
| version |