1use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6use crate::{
7 ControlModeRequest, HandshakeRequest, PaneTarget, PaneTargetRef, SdkWaitId, SdkWaitOwnerId,
8 SessionName, Target, WindowTarget,
9};
10
11#[path = "request/compat.rs"]
12mod compat;
13
14#[path = "request/display.rs"]
15mod display;
16pub use display::{DisplayMessageExtRequest, DisplayMessageRequest};
17
18#[path = "request/show.rs"]
19mod show;
20pub use show::ShowHooksRequest;
21pub use show::{ShowEnvironmentRequest, ShowOptionsRequest};
22
23#[path = "request/layout.rs"]
24mod layout;
25pub use layout::{
26 NextLayoutRequest, PreviousLayoutRequest, SelectCustomLayoutRequest, SelectLayoutRequest,
27 SelectLayoutTarget, SelectOldLayoutRequest, SpreadLayoutRequest,
28};
29
30#[path = "request/pane.rs"]
31mod pane;
32pub use pane::{
33 BreakPaneRequest, DisplayPanesRequest, JoinPaneRequest, KillPaneRequest, LastPaneRequest,
34 MovePaneRequest, PaneBroadcastInputRequest, PaneInputRequest, PaneKillRequest,
35 PaneOutputCursorRequest, PaneOutputSubscriptionStart, PaneResizeRequest, PaneRespawnRequest,
36 PaneSelectRequest, PaneSnapshotRefRequest, PaneSnapshotRequest, PaneSplitSize, PipePaneRequest,
37 ResizePaneRequest, RespawnPaneRequest, SelectPaneAdjacentRequest, SelectPaneDirection,
38 SelectPaneMarkRequest, SelectPaneRequest, SendKeysExt2Request, SendKeysExtRequest,
39 SendKeysRequest, SplitWindowExtRequest, SplitWindowRequest, SplitWindowTarget,
40 SubscribePaneOutputRefRequest, SubscribePaneOutputRequest, SwapPaneDirection, SwapPaneRequest,
41 UnsubscribePaneOutputRequest,
42};
43
44#[path = "request/window.rs"]
45mod window;
46pub use window::{
47 KillWindowRequest, LastWindowRequest, LinkWindowRequest, ListWindowsRequest, MoveWindowRequest,
48 MoveWindowTarget, NewWindowRequest, NextWindowRequest, PreviousWindowRequest,
49 RenameWindowRequest, ResizeWindowAdjustment, ResizeWindowRequest, RespawnWindowRequest,
50 RotateWindowDirection, RotateWindowRequest, SelectWindowRequest, SwapWindowRequest,
51};
52
53#[path = "request/target.rs"]
54mod target;
55pub use target::{ResolveTargetRequest, ResolveTargetType};
56
57#[path = "request/session.rs"]
58mod session;
59pub use session::{
60 CreateSessionLeaseRequest, HasSessionRequest, KillSessionRequest, ListSessionsRequest,
61 NewSessionExtRequest, NewSessionRequest, ReleaseSessionLeaseRequest, RenameSessionRequest,
62 RenewSessionLeaseRequest,
63};
64
65#[path = "request/server.rs"]
66mod server;
67pub use server::{
68 DaemonStatusRequest, KillServerRequest, LockClientRequest, LockServerRequest,
69 LockSessionRequest, ServerAccessRequest, ShutdownIfIdleRequest,
70};
71
72#[path = "request/client.rs"]
73mod client;
74pub use client::{
75 AttachSessionExt2Request, AttachSessionExt3Request, AttachSessionExtRequest,
76 AttachSessionRequest, DetachClientExtRequest, DetachClientRequest, ListClientsRequest,
77 RefreshClientRequest, SuspendClientRequest, SwitchClientExt2Request, SwitchClientExt3Request,
78 SwitchClientExtRequest, SwitchClientRequest,
79};
80
81#[path = "request/keys.rs"]
82mod keys;
83pub use keys::{
84 BindKeyRequest, ClockModeRequest, CopyModeRequest, ListKeysRequest, SendPrefixRequest,
85 UnbindKeyRequest,
86};
87
88#[path = "request/options.rs"]
89mod options;
90pub use options::{
91 SetEnvironmentMode, SetEnvironmentRequest, SetHookMutationRequest, SetHookRequest,
92 SetOptionByNameRequest, SetOptionRequest,
93};
94
95#[path = "request/buffer.rs"]
96mod buffer;
97pub use buffer::{
98 CapturePaneRequest, ClearHistoryRequest, DeleteBufferRequest, ListBuffersRequest,
99 LoadBufferRequest, PasteBufferRequest, SaveBufferRequest, SetBufferRequest, ShowBufferRequest,
100};
101
102#[path = "request/web.rs"]
103mod web;
104pub use web::{
105 CreateWebShareRequest, ListWebSharesRequest, LookupWebShareRequest, StopAllWebSharesRequest,
106 StopWebShareRequest, WebShareConfigRequest, WebShareRequest, WebShareScope, WebShareUrlOptions,
107 WebTerminalPalette, WebTerminalTheme,
108};
109
110#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
113pub enum Request {
114 NewSession(NewSessionRequest),
116 HasSession(HasSessionRequest),
118 KillSession(KillSessionRequest),
120 NewWindow(NewWindowRequest),
122 KillWindow(KillWindowRequest),
124 SelectWindow(SelectWindowRequest),
126 RenameWindow(RenameWindowRequest),
128 NextWindow(NextWindowRequest),
130 PreviousWindow(PreviousWindowRequest),
132 LastWindow(LastWindowRequest),
134 ListWindows(ListWindowsRequest),
136 MoveWindow(MoveWindowRequest),
138 SwapWindow(SwapWindowRequest),
140 RotateWindow(RotateWindowRequest),
142 SplitWindow(SplitWindowRequest),
144 SwapPane(SwapPaneRequest),
146 LastPane(LastPaneRequest),
148 JoinPane(JoinPaneRequest),
150 BreakPane(BreakPaneRequest),
152 KillPane(KillPaneRequest),
154 SelectLayout(SelectLayoutRequest),
156 ResizePane(ResizePaneRequest),
158 DisplayPanes(DisplayPanesRequest),
160 SelectPane(SelectPaneRequest),
162 SelectPaneAdjacent(SelectPaneAdjacentRequest),
164 SendKeys(SendKeysRequest),
166 AttachSession(AttachSessionRequest),
168 SwitchClient(SwitchClientRequest),
170 DetachClient(DetachClientRequest),
172 SetOption(SetOptionRequest),
174 SetEnvironment(SetEnvironmentRequest),
176 SetHook(SetHookRequest),
178 NextLayout(NextLayoutRequest),
180 PreviousLayout(PreviousLayoutRequest),
182 ShowOptions(ShowOptionsRequest),
184 ShowEnvironment(ShowEnvironmentRequest),
186 SetBuffer(SetBufferRequest),
188 ShowBuffer(ShowBufferRequest),
190 PasteBuffer(PasteBufferRequest),
192 ListBuffers(ListBuffersRequest),
194 DeleteBuffer(DeleteBufferRequest),
196 LoadBuffer(LoadBufferRequest),
198 SaveBuffer(SaveBufferRequest),
200 CapturePane(CapturePaneRequest),
202 DisplayMessage(DisplayMessageRequest),
204 RunShell(RunShellRequest),
206 IfShell(IfShellRequest),
208 WaitFor(WaitForRequest),
210 RenameSession(RenameSessionRequest),
212 ListSessions(ListSessionsRequest),
214 ListPanes(ListPanesRequest),
216 SourceFile(SourceFileRequest),
218 SetOptionByName(SetOptionByNameRequest),
220 SetHookMutation(SetHookMutationRequest),
222 ShowHooks(ShowHooksRequest),
224 SendKeysExt(SendKeysExtRequest),
226 SwitchClientExt(SwitchClientExtRequest),
228 BindKey(BindKeyRequest),
230 UnbindKey(UnbindKeyRequest),
232 ListKeys(ListKeysRequest),
234 SendPrefix(SendPrefixRequest),
236 ClearHistory(ClearHistoryRequest),
238 CopyMode(CopyModeRequest),
240 ControlMode(ControlModeRequest),
242 ClockMode(ClockModeRequest),
244 ShowMessages(ShowMessagesRequest),
246 NewSessionExt(NewSessionExtRequest),
248 AttachSessionExt(AttachSessionExtRequest),
250 SwitchClientExt2(SwitchClientExt2Request),
252 SelectCustomLayout(SelectCustomLayoutRequest),
254 SelectOldLayout(SelectOldLayoutRequest),
256 SpreadLayout(SpreadLayoutRequest),
258 KillServer(KillServerRequest),
260 LockServer(LockServerRequest),
262 LockSession(LockSessionRequest),
264 LockClient(LockClientRequest),
266 ServerAccess(ServerAccessRequest),
268 RefreshClient(RefreshClientRequest),
270 ListClients(ListClientsRequest),
272 SuspendClient(SuspendClientRequest),
274 DetachClientExt(DetachClientExtRequest),
276 AttachSessionExt2(AttachSessionExt2Request),
278 SwitchClientExt3(SwitchClientExt3Request),
280 ResizeWindow(ResizeWindowRequest),
282 RespawnWindow(RespawnWindowRequest),
284 MovePane(MovePaneRequest),
286 PipePane(PipePaneRequest),
288 RespawnPane(RespawnPaneRequest),
290 LinkWindow(LinkWindowRequest),
292 UnlinkWindow(UnlinkWindowRequest),
294 SelectPaneMark(SelectPaneMarkRequest),
296 ResolveTarget(ResolveTargetRequest),
298 SplitWindowExt(SplitWindowExtRequest),
300 Handshake(HandshakeRequest),
302 PaneSnapshot(PaneSnapshotRequest),
304 SubscribePaneOutput(SubscribePaneOutputRequest),
306 UnsubscribePaneOutput(UnsubscribePaneOutputRequest),
308 PaneOutputCursor(PaneOutputCursorRequest),
310 SdkWaitForOutput(SdkWaitForOutputRequest),
312 CancelSdkWait(CancelSdkWaitRequest),
314 PaneInput(PaneInputRequest),
316 PaneResize(PaneResizeRequest),
318 PaneKill(PaneKillRequest),
320 PaneRespawn(PaneRespawnRequest),
322 PaneSnapshotRef(PaneSnapshotRefRequest),
324 PaneSelect(PaneSelectRequest),
326 PaneBroadcastInput(PaneBroadcastInputRequest),
328 CreateSessionLease(CreateSessionLeaseRequest),
330 RenewSessionLease(RenewSessionLeaseRequest),
332 ReleaseSessionLease(ReleaseSessionLeaseRequest),
334 SubscribePaneOutputRef(SubscribePaneOutputRefRequest),
336 SdkWaitForOutputRef(SdkWaitForOutputRefRequest),
338 DaemonStatus(DaemonStatusRequest),
340 ShutdownIfIdle(ShutdownIfIdleRequest),
342 WebShare(WebShareRequest),
344 DisplayMessageExt(DisplayMessageExtRequest),
346 SendKeysExt2(SendKeysExt2Request),
348 AttachSessionExt3(AttachSessionExt3Request),
350}
351
352impl Request {
353 #[must_use]
355 pub const fn command_name(&self) -> &'static str {
356 match self {
357 Self::NewSession(_) => "new-session",
358 Self::HasSession(_) => "has-session",
359 Self::KillSession(_) => "kill-session",
360 Self::NewWindow(_) => "new-window",
361 Self::KillWindow(_) => "kill-window",
362 Self::SelectWindow(_) => "select-window",
363 Self::RenameWindow(_) => "rename-window",
364 Self::NextWindow(_) => "next-window",
365 Self::PreviousWindow(_) => "previous-window",
366 Self::LastWindow(_) => "last-window",
367 Self::ListWindows(_) => "list-windows",
368 Self::LinkWindow(_) => "link-window",
369 Self::MoveWindow(_) => "move-window",
370 Self::SwapWindow(_) => "swap-window",
371 Self::RotateWindow(_) => "rotate-window",
372 Self::SplitWindow(_) | Self::SplitWindowExt(_) => "split-window",
373 Self::SwapPane(_) => "swap-pane",
374 Self::LastPane(_) => "last-pane",
375 Self::JoinPane(_) => "join-pane",
376 Self::BreakPane(_) => "break-pane",
377 Self::KillPane(_) => "kill-pane",
378 Self::SelectLayout(_) => "select-layout",
379 Self::ResizePane(_) => "resize-pane",
380 Self::DisplayPanes(_) => "display-panes",
381 Self::SelectPane(_) | Self::SelectPaneAdjacent(_) | Self::SelectPaneMark(_) => {
382 "select-pane"
383 }
384 Self::SendKeys(_) | Self::SendKeysExt2(_) => "send-keys",
385 Self::AttachSession(_) => "attach-session",
386 Self::SwitchClient(_) => "switch-client",
387 Self::DetachClient(_) => "detach-client",
388 Self::SetOption(_) => "set-option",
389 Self::SetEnvironment(_) => "set-environment",
390 Self::SetHook(_) => "set-hook",
391 Self::NextLayout(_) => "next-layout",
392 Self::PreviousLayout(_) => "previous-layout",
393 Self::ShowOptions(_) => "show-options",
394 Self::ShowEnvironment(_) => "show-environment",
395 Self::SetBuffer(_) => "set-buffer",
396 Self::ShowBuffer(_) => "show-buffer",
397 Self::PasteBuffer(_) => "paste-buffer",
398 Self::ListBuffers(_) => "list-buffers",
399 Self::DeleteBuffer(_) => "delete-buffer",
400 Self::LoadBuffer(_) => "load-buffer",
401 Self::SaveBuffer(_) => "save-buffer",
402 Self::CapturePane(_) => "capture-pane",
403 Self::PaneSnapshot(_) => "pane-snapshot",
404 Self::SubscribePaneOutput(_) | Self::SubscribePaneOutputRef(_) => {
405 "subscribe-pane-output"
406 }
407 Self::UnsubscribePaneOutput(_) => "unsubscribe-pane-output",
408 Self::PaneOutputCursor(_) => "pane-output-cursor",
409 Self::SdkWaitForOutput(_) | Self::SdkWaitForOutputRef(_) => "sdk-wait-output",
410 Self::CancelSdkWait(_) => "cancel-sdk-wait",
411 Self::PaneInput(_) => "send-keys",
412 Self::PaneBroadcastInput(_) => "send-keys",
413 Self::CreateSessionLease(_) => "create-session-lease",
414 Self::RenewSessionLease(_) => "renew-session-lease",
415 Self::ReleaseSessionLease(_) => "release-session-lease",
416 Self::PaneResize(_) => "resize-pane",
417 Self::PaneKill(_) => "kill-pane",
418 Self::PaneRespawn(_) => "respawn-pane",
419 Self::PaneSnapshotRef(_) => "pane-snapshot",
420 Self::PaneSelect(_) => "select-pane",
421 Self::DisplayMessage(_) | Self::DisplayMessageExt(_) => "display-message",
422 Self::ResolveTarget(_) => "resolve-target",
423 Self::RunShell(_) => "run-shell",
424 Self::IfShell(_) => "if-shell",
425 Self::WaitFor(_) => "wait-for",
426 Self::RenameSession(_) => "rename-session",
427 Self::ListSessions(_) => "list-sessions",
428 Self::ListPanes(_) => "list-panes",
429 Self::SourceFile(_) => "source-file",
430 Self::UnlinkWindow(_) => "unlink-window",
431 Self::SetOptionByName(_) => "set-option",
432 Self::SetHookMutation(_) => "set-hook",
433 Self::ShowHooks(_) => "show-hooks",
434 Self::SendKeysExt(_) => "send-keys",
435 Self::SwitchClientExt(_) => "switch-client",
436 Self::BindKey(_) => "bind-key",
437 Self::UnbindKey(_) => "unbind-key",
438 Self::ListKeys(_) => "list-keys",
439 Self::SendPrefix(_) => "send-prefix",
440 Self::ClearHistory(_) => "clear-history",
441 Self::CopyMode(_) => "copy-mode",
442 Self::ControlMode(_) => "control-mode",
443 Self::ClockMode(_) => "clock-mode",
444 Self::ShowMessages(_) => "show-messages",
445 Self::NewSessionExt(_) => "new-session",
446 Self::AttachSessionExt(_) => "attach-session",
447 Self::SwitchClientExt2(_) => "switch-client",
448 Self::SelectCustomLayout(_) => "select-layout",
449 Self::SelectOldLayout(_) => "select-layout",
450 Self::SpreadLayout(_) => "select-layout",
451 Self::ResizeWindow(_) => "resize-window",
452 Self::RespawnWindow(_) => "respawn-window",
453 Self::MovePane(_) => "move-pane",
454 Self::PipePane(_) => "pipe-pane",
455 Self::RespawnPane(_) => "respawn-pane",
456 Self::KillServer(_) => "kill-server",
457 Self::LockServer(_) => "lock-server",
458 Self::LockSession(_) => "lock-session",
459 Self::LockClient(_) => "lock-client",
460 Self::ServerAccess(_) => "server-access",
461 Self::RefreshClient(_) => "refresh-client",
462 Self::ListClients(_) => "list-clients",
463 Self::SuspendClient(_) => "suspend-client",
464 Self::DetachClientExt(_) => "detach-client",
465 Self::AttachSessionExt2(_) | Self::AttachSessionExt3(_) => "attach-session",
466 Self::SwitchClientExt3(_) => "switch-client",
467 Self::Handshake(_) => "handshake",
468 Self::DaemonStatus(_) => "daemon-status",
469 Self::ShutdownIfIdle(_) => "shutdown-if-idle",
470 Self::WebShare(_) => "web-share",
471 }
472 }
473}
474
475#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
477pub struct ShowMessagesRequest {
478 pub jobs: bool,
480 pub terminals: bool,
482 pub target_client: Option<String>,
484}
485
486#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
488pub struct RunShellRequest {
489 pub command: String,
491 pub background: bool,
493 #[serde(default)]
495 pub as_commands: bool,
496 #[serde(default)]
498 pub show_stderr: bool,
499 #[serde(default)]
501 pub delay_seconds: Option<RunShellDelaySeconds>,
502 #[serde(default)]
504 pub start_directory: Option<PathBuf>,
505 #[serde(default)]
507 pub target: Option<PaneTarget>,
508 #[serde(default)]
510 pub source_depth: Option<usize>,
511}
512
513#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
515pub struct RunShellDelaySeconds(pub f64);
516
517impl RunShellDelaySeconds {
518 #[must_use]
520 pub const fn as_secs_f64(self) -> f64 {
521 self.0
522 }
523}
524
525impl PartialEq for RunShellDelaySeconds {
526 fn eq(&self, other: &Self) -> bool {
527 self.0.to_bits() == other.0.to_bits()
528 }
529}
530
531impl Eq for RunShellDelaySeconds {}
532
533#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
535pub struct IfShellRequest {
536 pub condition: String,
538 pub format_mode: bool,
540 pub then_command: String,
542 pub else_command: Option<String>,
544 pub target: Option<Target>,
546 pub caller_cwd: Option<PathBuf>,
548 #[serde(default)]
550 pub background: bool,
551}
552
553#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
555pub struct SourceFileRequest {
556 pub paths: Vec<String>,
558 pub quiet: bool,
560 pub parse_only: bool,
562 pub verbose: bool,
564 pub expand_paths: bool,
566 pub target: Option<PaneTarget>,
568 pub caller_cwd: Option<PathBuf>,
570 pub stdin: Option<String>,
572}
573
574#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
576pub struct UnlinkWindowRequest {
577 pub target: WindowTarget,
579 #[serde(default)]
581 pub kill_if_last: bool,
582}
583
584#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
586pub enum WaitForMode {
587 Wait,
589 Signal,
591 Lock,
593 Unlock,
595}
596
597#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
599pub struct WaitForRequest {
600 pub channel: String,
602 pub mode: WaitForMode,
604}
605
606#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
613pub struct SdkWaitForOutputRequest {
614 pub owner_id: SdkWaitOwnerId,
616 pub wait_id: SdkWaitId,
618 pub target: PaneTarget,
620 pub bytes: Vec<u8>,
622 pub start: PaneOutputSubscriptionStart,
624}
625
626#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
628pub struct SdkWaitForOutputRefRequest {
629 pub owner_id: SdkWaitOwnerId,
631 pub wait_id: SdkWaitId,
633 pub target: PaneTargetRef,
635 pub bytes: Vec<u8>,
637 pub start: PaneOutputSubscriptionStart,
639}
640
641#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
643pub struct CancelSdkWaitRequest {
644 pub owner_id: SdkWaitOwnerId,
646 pub wait_id: SdkWaitId,
648}
649
650#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
652pub struct ListPanesRequest {
653 pub target: SessionName,
655 #[serde(default)]
657 pub target_window_index: Option<u32>,
658 pub format: Option<String>,
660}
661
662#[cfg(test)]
663#[path = "request/compat_tests.rs"]
664mod compat_tests;
665
666#[cfg(test)]
667mod tests {
668 use super::*;
669 use crate::{
670 OptionScopeSelector, PaneTarget, ScopeSelector, SelectPaneDirection, SetOptionMode,
671 SplitDirection,
672 };
673
674 fn alpha() -> SessionName {
675 SessionName::new("alpha").expect("valid session")
676 }
677
678 fn pane() -> PaneTarget {
679 PaneTarget::new(alpha(), 0)
680 }
681
682 #[test]
683 fn request_command_names_cover_extended_aliases_and_internal_tags() {
684 assert_eq!(
685 Request::NewSessionExt(NewSessionExtRequest {
686 session_name: None,
687 working_directory: None,
688 detached: true,
689 size: None,
690 environment: None,
691 group_target: None,
692 attach_if_exists: false,
693 detach_other_clients: false,
694 kill_other_clients: false,
695 flags: None,
696 window_name: None,
697 print_session_info: false,
698 print_format: None,
699 command: None,
700 process_command: None,
701 client_environment: None,
702 skip_environment_update: false,
703 })
704 .command_name(),
705 "new-session"
706 );
707 assert_eq!(
708 Request::SplitWindowExt(SplitWindowExtRequest {
709 target: SplitWindowTarget::Pane(pane()),
710 direction: SplitDirection::Vertical,
711 before: false,
712 environment: None,
713 command: None,
714 process_command: None,
715 start_directory: None,
716 keep_alive_on_exit: None,
717 detached: false,
718 size: None,
719 preserve_zoom: false,
720 full_size: false,
721 stdin_payload: None,
722 })
723 .command_name(),
724 "split-window"
725 );
726 assert_eq!(
727 Request::SelectPaneAdjacent(SelectPaneAdjacentRequest {
728 target: pane(),
729 direction: SelectPaneDirection::Right,
730 preserve_zoom: false,
731 })
732 .command_name(),
733 "select-pane"
734 );
735 assert_eq!(
736 Request::SelectPaneMark(SelectPaneMarkRequest {
737 target: pane(),
738 clear: false,
739 title: None,
740 })
741 .command_name(),
742 "select-pane"
743 );
744 assert_eq!(
745 Request::SetOptionByName(SetOptionByNameRequest {
746 scope: OptionScopeSelector::ServerGlobal,
747 name: "status".to_owned(),
748 value: Some("on".to_owned()),
749 mode: SetOptionMode::Replace,
750 only_if_unset: false,
751 unset: false,
752 unset_pane_overrides: false,
753 format: false,
754 format_target: None,
755 })
756 .command_name(),
757 "set-option"
758 );
759 assert_eq!(
760 Request::SetHookMutation(SetHookMutationRequest {
761 scope: ScopeSelector::Global,
762 hook: crate::HookName::AfterNewSession,
763 command: None,
764 lifecycle: crate::HookLifecycle::Persistent,
765 append: false,
766 unset: true,
767 run_immediately: false,
768 index: None,
769 })
770 .command_name(),
771 "set-hook"
772 );
773 assert_eq!(
774 Request::AttachSessionExt2(AttachSessionExt2Request {
775 target: Some(alpha()),
776 target_spec: None,
777 detach_other_clients: false,
778 kill_other_clients: false,
779 read_only: false,
780 skip_environment_update: false,
781 flags: None,
782 working_directory: None,
783 client_terminal: crate::ClientTerminalContext::default(),
784 client_size: None,
785 })
786 .command_name(),
787 "attach-session"
788 );
789 assert_eq!(
790 Request::AttachSessionExt3(AttachSessionExt3Request::from_ext2(
791 AttachSessionExt2Request {
792 target: Some(alpha()),
793 target_spec: None,
794 detach_other_clients: false,
795 kill_other_clients: false,
796 read_only: false,
797 skip_environment_update: false,
798 flags: None,
799 working_directory: None,
800 client_terminal: crate::ClientTerminalContext::default(),
801 client_size: None,
802 },
803 vec![crate::CAPABILITY_ATTACH_RENDER.to_owned()],
804 ))
805 .command_name(),
806 "attach-session"
807 );
808 assert_eq!(
809 Request::SwitchClientExt3(SwitchClientExt3Request {
810 target_client: None,
811 target: Some("alpha:0.0".to_owned()),
812 key_table: None,
813 last_session: false,
814 next_session: false,
815 previous_session: false,
816 toggle_read_only: false,
817 sort_order: None,
818 skip_environment_update: false,
819 zoom: false,
820 })
821 .command_name(),
822 "switch-client"
823 );
824 assert_eq!(
825 Request::ResolveTarget(ResolveTargetRequest {
826 target: Some("alpha:0.0".to_owned()),
827 target_type: ResolveTargetType::Pane,
828 window_index: false,
829 prefer_unattached: false,
830 })
831 .command_name(),
832 "resolve-target"
833 );
834 assert_eq!(
835 Request::Handshake(HandshakeRequest::current()).command_name(),
836 "handshake"
837 );
838 assert_eq!(
839 Request::SdkWaitForOutput(SdkWaitForOutputRequest {
840 owner_id: SdkWaitOwnerId::new(1),
841 wait_id: SdkWaitId::new(1),
842 target: pane(),
843 bytes: b"ready".to_vec(),
844 start: PaneOutputSubscriptionStart::Now,
845 })
846 .command_name(),
847 "sdk-wait-output"
848 );
849 assert_eq!(
850 Request::CancelSdkWait(CancelSdkWaitRequest {
851 owner_id: SdkWaitOwnerId::new(1),
852 wait_id: SdkWaitId::new(1),
853 })
854 .command_name(),
855 "cancel-sdk-wait"
856 );
857 assert_eq!(
858 Request::WaitFor(WaitForRequest {
859 channel: "ready".to_owned(),
860 mode: WaitForMode::Wait,
861 })
862 .command_name(),
863 "wait-for"
864 );
865 }
866}