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 * MacVim.m: Code shared between Vim and MacVim.
16 char *MessageStrings[] =
31 "SetTextDimensionsMsgID",
32 "SetWindowTitleMsgID",
40 "RemoveMenuItemMsgID",
41 "EnableMenuItemMsgID",
45 "CreateScrollbarMsgID",
46 "DestroyScrollbarMsgID",
48 "SetScrollbarPositionMsgID",
49 "SetScrollbarThumbMsgID",
50 "ScrollbarEventMsgID",
53 "VimShouldCloseMsgID",
54 "SetDefaultColorsMsgID",
63 "AdjustLinespaceMsgID",
66 "EnterFullscreenMsgID",
67 "LeaveFullscreenMsgID",
68 "BuffersNotModifiedMsgID",
69 "BuffersModifiedMsgID",
71 "SetPreEditPositionMsgID",
81 // NSUserDefaults keys
82 NSString *MMNoWindowKey = @"MMNoWindow";
83 NSString *MMTabMinWidthKey = @"MMTabMinWidth";
84 NSString *MMTabMaxWidthKey = @"MMTabMaxWidth";
85 NSString *MMTabOptimumWidthKey = @"MMTabOptimumWidth";
86 NSString *MMTextInsetLeftKey = @"MMTextInsetLeft";
87 NSString *MMTextInsetRightKey = @"MMTextInsetRight";
88 NSString *MMTextInsetTopKey = @"MMTextInsetTop";
89 NSString *MMTextInsetBottomKey = @"MMTextInsetBottom";
90 NSString *MMTerminateAfterLastWindowClosedKey
91 = @"MMTerminateAfterLastWindowClosed";
92 NSString *MMTypesetterKey = @"MMTypesetter";
93 NSString *MMCellWidthMultiplierKey = @"MMCellWidthMultiplier";
94 NSString *MMBaselineOffsetKey = @"MMBaselineOffset";
95 NSString *MMTranslateCtrlClickKey = @"MMTranslateCtrlClick";
96 NSString *MMTopLeftPointKey = @"MMTopLeftPoint";
97 NSString *MMOpenFilesInTabsKey = @"MMOpenFilesInTabs";
98 NSString *MMNoFontSubstitutionKey = @"MMNoFontSubstitution";
99 NSString *MMLoginShellKey = @"MMLoginShell";
100 NSString *MMAtsuiRendererKey = @"MMAtsuiRenderer";
101 NSString *MMUntitledWindowKey = @"MMUntitledWindow";
102 NSString *MMTexturedWindowKey = @"MMTexturedWindow";
110 // This loads all fonts from the Resources folder. The fonts are only
111 // available to the process which loaded them, so loading has to be done
112 // once for MacVim and an additional time for each Vim process. The
113 // returned container ref should be used to deactiave the font.
115 // (Code taken from cocoadev.com)
116 ATSFontContainerRef fontContainerRef = 0;
117 NSString *fontsFolder = [[NSBundle mainBundle] resourcePath];
119 NSURL *fontsURL = [NSURL fileURLWithPath:fontsFolder];
123 CFURLGetFSRef((CFURLRef)fontsURL, &fsRef);
125 if (FSGetCatalogInfo(&fsRef, kFSCatInfoNone, NULL, NULL, &fsSpec,
127 ATSFontActivateFromFileSpecification(&fsSpec,
128 kATSFontContextLocal, kATSFontFormatUnspecified, NULL,
129 kATSOptionFlagsDefault, &fontContainerRef);
134 return fontContainerRef;
141 buildTabDropCommand(NSArray *filenames)
143 // Create a command line string that will open the specified files in tabs.
145 if (!filenames || [filenames count] == 0)
146 return [NSString string];
148 NSMutableString *cmd = [NSMutableString stringWithString:
149 @"<C-\\><C-N>:tab drop"];
151 NSEnumerator *e = [filenames objectEnumerator];
153 while ((o = [e nextObject])) {
154 NSString *file = [o stringByEscapingSpecialFilenameCharacters];
155 [cmd appendString:@" "];
156 [cmd appendString:file];
159 [cmd appendString:@"|redr|f<CR>"];
165 buildSelectRangeCommand(NSRange range)
167 // Build a command line string that will select the given range of lines.
168 // If range.length == 0, then position the cursor on the given line but do
171 if (range.location == NSNotFound)
172 return [NSString string];
175 if (range.length > 0) {
176 cmd = [NSString stringWithFormat:@"<C-\\><C-N>%dGV%dGz.0",
177 NSMaxRange(range), range.location];
179 cmd = [NSString stringWithFormat:@"<C-\\><C-N>%dGz.0", range.location];
188 @implementation NSString (MMExtras)
190 - (NSString *)stringByEscapingSpecialFilenameCharacters
192 // NOTE: This code assumes that no characters already have been escaped.
193 NSMutableString *string = [self mutableCopy];
195 [string replaceOccurrencesOfString:@"\\"
197 options:NSLiteralSearch
198 range:NSMakeRange(0, [string length])];
199 [string replaceOccurrencesOfString:@" "
201 options:NSLiteralSearch
202 range:NSMakeRange(0, [string length])];
203 [string replaceOccurrencesOfString:@"\t"
205 options:NSLiteralSearch
206 range:NSMakeRange(0, [string length])];
207 [string replaceOccurrencesOfString:@"%"
209 options:NSLiteralSearch
210 range:NSMakeRange(0, [string length])];
211 [string replaceOccurrencesOfString:@"#"
213 options:NSLiteralSearch
214 range:NSMakeRange(0, [string length])];
215 [string replaceOccurrencesOfString:@"|"
217 options:NSLiteralSearch
218 range:NSMakeRange(0, [string length])];
219 [string replaceOccurrencesOfString:@"\""
221 options:NSLiteralSearch
222 range:NSMakeRange(0, [string length])];
224 return [string autorelease];
227 @end // NSString (MMExtras)
231 @implementation NSIndexSet (MMExtras)
233 + (id)indexSetWithVimList:(NSString *)list
235 NSMutableIndexSet *idxSet = [NSMutableIndexSet indexSet];
236 NSArray *array = [list componentsSeparatedByString:@"\n"];
237 unsigned i, count = [array count];
239 for (i = 0; i < count; ++i) {
240 NSString *entry = [array objectAtIndex:i];
241 if ([entry intValue] > 0)
248 @end // NSIndexSet (MMExtras)
253 @implementation NSColor (MMExtras)
255 + (NSColor *)colorWithRgbInt:(unsigned)rgb
257 float r = ((rgb>>16) & 0xff)/255.0f;
258 float g = ((rgb>>8) & 0xff)/255.0f;
259 float b = (rgb & 0xff)/255.0f;
261 return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:1.0f];
264 + (NSColor *)colorWithArgbInt:(unsigned)argb
266 float a = ((argb>>24) & 0xff)/255.0f;
267 float r = ((argb>>16) & 0xff)/255.0f;
268 float g = ((argb>>8) & 0xff)/255.0f;
269 float b = (argb & 0xff)/255.0f;
271 return [NSColor colorWithCalibratedRed:r green:g blue:b alpha:a];
274 @end // NSColor (MMExtras)