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.
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
;
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
;
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
69 - (NSArray
*)serverList
;
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
;
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
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
;
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
[];
126 SetTextDimensionsMsgID
,
140 CreateScrollbarMsgID
,
141 DestroyScrollbarMsgID
,
143 SetScrollbarPositionMsgID
,
144 SetScrollbarThumbMsgID
,
149 SetDefaultColorsMsgID
,
158 AdjustLinespaceMsgID
,
161 EnterFullscreenMsgID
,
162 LeaveFullscreenMsgID
,
163 BuffersNotModifiedMsgID
,
164 BuffersModifiedMsgID
,
166 SetPreEditPositionMsgID
,
170 EnableAntialiasMsgID
,
171 DisableAntialiasMsgID
,
173 SetDocumentFilenameMsgID
,
174 OpenWithArgumentsMsgID
,
179 #define DRAW_WIDE 0x40 /* draw wide text */
182 ClearAllDrawType
= 1,
188 SetCursorPosDrawType
,
189 DrawInvertedRectDrawType
,
193 MMInsertionPointBlock
,
194 MMInsertionPointHorizontal
,
195 MMInsertionPointVertical
,
196 MMInsertionPointHollow
,
197 MMInsertionPointVerticalRight
,
202 ToolbarLabelFlag
= 1,
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
;
227 @interface
NSColor (MMExtras
)
228 + (NSColor
*)colorWithRgbInt
:(unsigned)rgb
;
229 + (NSColor
*)colorWithArgbInt
:(unsigned)argb
;
233 @interface
NSDictionary (MMExtras
)
234 + (id
)dictionaryWithData
:(NSData
*)data
;
235 - (NSData
*)dictionaryAsData
;
238 @interface
NSMutableDictionary (MMExtras
)
239 + (id
)dictionaryWithData
:(NSData
*)data
;
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'