forked from gnachman/iTerm2
/
TmuxGateway.h
79 lines (63 loc) · 2.33 KB
/
TmuxGateway.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//
// TmuxGateway.h
// iTerm
//
// Created by George Nachman on 11/27/11.
//
#import <Cocoa/Cocoa.h>
@class TmuxController;
@protocol TmuxGatewayDelegate
- (TmuxController *)tmuxController;
- (void)tmuxUpdateLayoutForWindow:(int)windowId
layout:(NSString *)layout;
- (void)tmuxWindowAddedWithId:(int)windowId;
- (void)tmuxWindowClosedWithId:(int)windowId;
- (void)tmuxWindowRenamedWithId:(int)windowId to:(NSString *)newName;
- (void)tmuxHostDisconnected;
- (void)tmuxWriteData:(NSData *)data;
- (void)tmuxReadTask:(NSData *)data;
- (void)tmuxSessionChanged:(NSString *)sessionName
sessionId:(int)sessionId;
- (void)tmuxSessionsChanged;
- (void)tmuxWindowsDidChange;
- (void)tmuxSessionRenamed:(NSString *)newName;
- (NSSize)tmuxBookmarkSize; // rows, cols
- (int)tmuxNumHistoryLinesInBookmark;
@end
typedef enum {
CONTROL_COMMAND_OUTPUT,
CONTROL_COMMAND_LAYOUT_CHANGE,
CONTROL_COMMAND_WINDOWS_CHANGE,
CONTROL_COMMAND_NOOP
} ControlCommand;
typedef enum {
CONTROL_STATE_READY,
CONTROL_STATE_DETACHED,
} ControlState;
@interface TmuxGateway : NSObject {
NSObject<TmuxGatewayDelegate> *delegate_; // weak
ControlState state_;
NSMutableData *stream_;
// Data from parsing an incoming command
ControlCommand command_;
NSMutableArray *commandQueue_; // Dictionaries
NSMutableString *currentCommandResponse_;
NSMutableDictionary *currentCommand_; // Set between %begin and %end
BOOL detachSent_;
}
- (id)initWithDelegate:(NSObject<TmuxGatewayDelegate> *)delegate;
// Returns any unconsumed data if tmux mode is exited.
- (NSData *)readTask:(NSData *)data;
- (void)sendCommand:(NSString *)command responseTarget:(id)target responseSelector:(SEL)selector;
- (void)sendCommand:(NSString *)command responseTarget:(id)target responseSelector:(SEL)selector responseObject:(id)obj;
- (void)sendCommandList:(NSArray *)commandDicts;
- (void)abortWithErrorMessage:(NSString *)message;
// Use this to compose a command list for sendCommandList:.
- (NSDictionary *)dictionaryForCommand:(NSString *)command
responseTarget:(id)target
responseSelector:(SEL)selector
responseObject:(id)obj;
- (void)sendKeys:(NSData *)data toWindowPane:(int)windowPane;
- (void)detach;
- (NSObject<TmuxGatewayDelegate> *)delegate;
@end