rmux_client/commands/
buffer.rs1use rmux_proto::{
2 CapturePaneRequest, ClearHistoryRequest, DeleteBufferRequest, ListBuffersRequest,
3 LoadBufferRequest, PaneTarget, PasteBufferRequest, Request, Response, SaveBufferRequest,
4 SetBufferRequest, ShowBufferRequest,
5};
6use std::path::{Path, PathBuf};
7
8use crate::{connection::Connection, ClientError};
9
10impl Connection {
11 pub fn set_buffer(
13 &mut self,
14 name: Option<String>,
15 content: Vec<u8>,
16 append: bool,
17 new_name: Option<String>,
18 set_clipboard: bool,
19 ) -> Result<Response, ClientError> {
20 self.roundtrip(&Request::SetBuffer(SetBufferRequest {
21 name,
22 content,
23 append,
24 new_name,
25 set_clipboard,
26 }))
27 }
28
29 pub fn show_buffer(&mut self, name: Option<String>) -> Result<Response, ClientError> {
31 self.roundtrip(&Request::ShowBuffer(ShowBufferRequest { name }))
32 }
33
34 #[allow(clippy::too_many_arguments)]
36 pub fn paste_buffer(
37 &mut self,
38 name: Option<String>,
39 target: PaneTarget,
40 delete_after: bool,
41 separator: Option<String>,
42 linefeed: bool,
43 raw: bool,
44 bracketed: bool,
45 ) -> Result<Response, ClientError> {
46 self.roundtrip(&Request::PasteBuffer(PasteBufferRequest {
47 name,
48 target,
49 delete_after,
50 separator,
51 linefeed,
52 raw,
53 bracketed,
54 }))
55 }
56
57 pub fn list_buffers(
59 &mut self,
60 format: Option<String>,
61 filter: Option<String>,
62 sort_order: Option<String>,
63 reversed: bool,
64 ) -> Result<Response, ClientError> {
65 self.roundtrip(&Request::ListBuffers(ListBuffersRequest {
66 format,
67 filter,
68 sort_order,
69 reversed,
70 }))
71 }
72
73 pub fn delete_buffer(&mut self, name: Option<String>) -> Result<Response, ClientError> {
75 self.roundtrip(&Request::DeleteBuffer(DeleteBufferRequest { name }))
76 }
77
78 pub fn load_buffer(
80 &mut self,
81 path: String,
82 name: Option<String>,
83 set_clipboard: bool,
84 ) -> Result<Response, ClientError> {
85 let cwd = caller_cwd_for_path(&path)?;
86 self.roundtrip(&Request::LoadBuffer(LoadBufferRequest {
87 path,
88 cwd,
89 name,
90 set_clipboard,
91 }))
92 }
93
94 pub fn save_buffer(
96 &mut self,
97 path: String,
98 name: Option<String>,
99 append: bool,
100 ) -> Result<Response, ClientError> {
101 let cwd = caller_cwd_for_path(&path)?;
102 self.roundtrip(&Request::SaveBuffer(SaveBufferRequest {
103 path,
104 cwd,
105 name,
106 append,
107 }))
108 }
109
110 pub fn capture_pane(&mut self, request: CapturePaneRequest) -> Result<Response, ClientError> {
112 self.roundtrip(&Request::CapturePane(request))
113 }
114
115 pub fn clear_history(
117 &mut self,
118 target: PaneTarget,
119 reset_hyperlinks: bool,
120 ) -> Result<Response, ClientError> {
121 self.roundtrip(&Request::ClearHistory(ClearHistoryRequest {
122 target,
123 reset_hyperlinks,
124 }))
125 }
126}
127
128fn caller_cwd_for_path(path: &str) -> Result<Option<PathBuf>, ClientError> {
129 if Path::new(path).is_absolute() {
130 Ok(None)
131 } else {
132 std::env::current_dir().map(Some).map_err(Into::into)
133 }
134}