Fix problems with 'fullscreen' and :mksession
[MacVim.git] / src / MacVim / MacVim.h
blob16d539d9c203b84f5bf4ca1d3ce5e8284a540337
1 /* vi:set ts=8 sts=4 sw=4 ft=objc:
3 * VIM - Vi IMproved by Bram Moolenaar
4 * MacVim GUI port by Bjorn Winckler
6 * Do ":help uganda" in Vim to read copying and usage conditions.
7 * Do ":help credits" in Vim to see a list of people who contributed.
8 * See README.txt for an overview of the Vim source code.
9 */
11 #import <Cocoa/Cocoa.h>
15 // Enable support for MacVim plugins (not to be confused with Vim plugins!).
17 #define MM_ENABLE_PLUGINS
22 // This is the protocol MMBackend implements.
24 // Only processInput:data: is allowed to cause state changes in Vim; all other
25 // messages should only read the Vim state. (Note that setDialogReturn: is an
26 // exception to this rule; there really is no other way to deal with dialogs
27 // since they work with callbacks, so we cannot wait for them to return.)
29 // Be careful with messages with return type other than 'oneway void' -- there
30 // is a reply timeout set in MMAppController, if a message fails to get a
31 // response within the given timeout an exception will be thrown. Use
32 // @try/@catch/@finally to deal with timeouts.
34 @protocol MMBackendProtocol
35 - (oneway void)processInput:(int)msgid data:(in bycopy NSData *)data;
36 - (oneway void)processInputAndData:(in bycopy NSArray *)messages;
37 - (oneway void)setDialogReturn:(in bycopy id)obj;
38 - (NSString *)evaluateExpression:(in bycopy NSString *)expr;
39 - (id)evaluateExpressionCocoa:(in bycopy NSString *)expr
40 errorString:(out bycopy NSString **)errstr;
41 - (BOOL)starRegisterToPasteboard:(byref NSPasteboard *)pboard;
42 - (oneway void)acknowledgeConnection;
43 @end
46 // This is the protocol MMVimController implements.
48 // Be very careful if you want to add methods to this protocol. Since DO
49 // messages may arrive while Cocoa is in the middle of processing some other
50 // message be sure to consider reentrancy issues. Look at processCommandQueue:
51 // to see an example of how to deal with this.
53 @protocol MMFrontendProtocol
54 - (oneway void)processCommandQueue:(in bycopy NSArray *)queue;
55 - (oneway void)showSavePanelWithAttributes:(in bycopy NSDictionary *)attr;
56 - (oneway void)presentDialogWithAttributes:(in bycopy NSDictionary *)attr;
57 @end
61 // This is the protocol MMAppController implements.
63 // It handles connections between MacVim and Vim.
65 @protocol MMAppProtocol
66 - (byref id <MMFrontendProtocol>)
67 connectBackend:(byref in id <MMBackendProtocol>)backend
68 pid:(int)pid;
69 - (NSArray *)serverList;
70 @end
73 @protocol MMVimServerProtocol;
76 // The Vim client protocol (implemented by MMBackend).
78 // The client needs to keep track of server replies. Take a look at MMBackend
79 // if you want to implement this protocol in another program.
81 @protocol MMVimClientProtocol
82 - (oneway void)addReply:(in bycopy NSString *)reply
83 server:(in byref id <MMVimServerProtocol>)server;
84 @end
88 // The Vim server protocol (implemented by MMBackend).
90 // Note that addInput:client: is not asynchronous, because otherwise Vim might
91 // quit before the message has been passed (e.g. if --remote was used on the
92 // command line).
94 @protocol MMVimServerProtocol
95 - (void)addInput:(in bycopy NSString *)input
96 client:(in byref id <MMVimClientProtocol>)client;
97 - (NSString *)evaluateExpression:(in bycopy NSString *)expr
98 client:(in byref id <MMVimClientProtocol>)client;
99 @end
104 // The following enum lists all messages that are passed between MacVim and
105 // Vim. These can be sent in processInput:data: and in processCommandQueue:.
108 // NOTE! This array must be updated whenever the enum below changes!
109 extern char *MessageStrings[];
111 enum {
112 OpenWindowMsgID = 1,
113 InsertTextMsgID,
114 KeyDownMsgID,
115 CmdKeyMsgID,
116 BatchDrawMsgID,
117 SelectTabMsgID,
118 CloseTabMsgID,
119 AddNewTabMsgID,
120 DraggedTabMsgID,
121 UpdateTabBarMsgID,
122 ShowTabBarMsgID,
123 HideTabBarMsgID,
124 SetTextRowsMsgID,
125 SetTextColumnsMsgID,
126 SetTextDimensionsMsgID,
127 SetWindowTitleMsgID,
128 ScrollWheelMsgID,
129 MouseDownMsgID,
130 MouseUpMsgID,
131 MouseDraggedMsgID,
132 FlushQueueMsgID,
133 AddMenuMsgID,
134 AddMenuItemMsgID,
135 RemoveMenuItemMsgID,
136 EnableMenuItemMsgID,
137 ExecuteMenuMsgID,
138 ShowToolbarMsgID,
139 ToggleToolbarMsgID,
140 CreateScrollbarMsgID,
141 DestroyScrollbarMsgID,
142 ShowScrollbarMsgID,
143 SetScrollbarPositionMsgID,
144 SetScrollbarThumbMsgID,
145 ScrollbarEventMsgID,
146 SetFontMsgID,
147 SetWideFontMsgID,
148 VimShouldCloseMsgID,
149 SetDefaultColorsMsgID,
150 ExecuteActionMsgID,
151 DropFilesMsgID,
152 DropStringMsgID,
153 ShowPopupMenuMsgID,
154 GotFocusMsgID,
155 LostFocusMsgID,
156 MouseMovedMsgID,
157 SetMouseShapeMsgID,
158 AdjustLinespaceMsgID,
159 ActivateMsgID,
160 SetServerNameMsgID,
161 EnterFullscreenMsgID,
162 LeaveFullscreenMsgID,
163 BuffersNotModifiedMsgID,
164 BuffersModifiedMsgID,
165 AddInputMsgID,
166 SetPreEditPositionMsgID,
167 TerminateNowMsgID,
168 XcodeModMsgID,
169 LiveResizeMsgID,
170 EnableAntialiasMsgID,
171 DisableAntialiasMsgID,
172 SetVimStateMsgID,
173 SetDocumentFilenameMsgID,
174 OpenWithArgumentsMsgID,
175 CloseWindowMsgID,
179 #define DRAW_WIDE 0x40 /* draw wide text */
181 enum {
182 ClearAllDrawType = 1,
183 ClearBlockDrawType,
184 DeleteLinesDrawType,
185 DrawStringDrawType,
186 InsertLinesDrawType,
187 DrawCursorDrawType,
188 SetCursorPosDrawType,
189 DrawInvertedRectDrawType,
192 enum {
193 MMInsertionPointBlock,
194 MMInsertionPointHorizontal,
195 MMInsertionPointVertical,
196 MMInsertionPointHollow,
197 MMInsertionPointVerticalRight,
201 enum {
202 ToolbarLabelFlag = 1,
203 ToolbarIconFlag = 2,
204 ToolbarSizeRegularFlag = 4
207 // Argument used to stop MacVim from opening an empty window on startup
208 // (techincally this is a user default but should not be used as such).
209 extern NSString *MMNoWindowKey;
211 // Vim pasteboard type (holds motion type + string)
212 extern NSString *VimPBoardType;
216 // Loads all fonts in the Resouces folder of the app bundle and returns a font
217 // container reference (which should be used to deactivate the loaded fonts).
218 ATSFontContainerRef loadFonts();
222 @interface NSString (MMExtras)
223 - (NSString *)stringByEscapingSpecialFilenameCharacters;
224 @end
227 @interface NSColor (MMExtras)
228 + (NSColor *)colorWithRgbInt:(unsigned)rgb;
229 + (NSColor *)colorWithArgbInt:(unsigned)argb;
230 @end
233 @interface NSDictionary (MMExtras)
234 + (id)dictionaryWithData:(NSData *)data;
235 - (NSData *)dictionaryAsData;
236 @end
238 @interface NSMutableDictionary (MMExtras)
239 + (id)dictionaryWithData:(NSData *)data;
240 @end
245 // ODB Editor Suite Constants (taken from ODBEditorSuite.h)
246 #define keyFileSender 'FSnd'
247 #define keyFileSenderToken 'FTok'
248 #define keyFileCustomPath 'Burl'
249 #define kODBEditorSuite 'R*ch'
250 #define kAEModifiedFile 'FMod'
251 #define keyNewLocation 'New?'
252 #define kAEClosedFile 'FCls'
253 #define keySenderToken 'Tokn'
256 // MacVim Apple Event Constants
257 #define keyMMUntitledWindow 'MMuw'