Skip to content
Snippets Groups Projects
Commit 56cb9e2d authored by George Nachman's avatar George Nachman Committed by GitHub
Browse files

Merge pull request #324 from marcelocantos/master

Add support for cmd-click file:line:col and VSCode.
parents 0e3ae7b5 58eec843
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -169,24 +169,28 @@
 
- (void)testGetFullPathFailsOnNil {
XCTAssert([_semanticHistoryController getFullPath:nil
workingDirectory:@"/"
lineNumber:NULL] == nil);
workingDirectory:@"/"
lineNumber:NULL
columnNumber:NULL] == nil);
}
 
- (void)testGetFullPathFailsOnEmpty {
XCTAssert([_semanticHistoryController getFullPath:@""
workingDirectory:@"/"
lineNumber:NULL] == nil);
workingDirectory:@"/"
lineNumber:NULL
columnNumber:NULL] == nil);
}
 
- (void)testGetFullPathFindsExistingFileAtAbsolutePath {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -194,6 +198,7 @@
 
- (void)testGetFullPathFindsExistingFileAtRelativePath {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kAbsoluteFilename =
Loading
Loading
@@ -201,7 +206,8 @@
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -210,13 +216,15 @@
- (void)testGetFullPathStripsDelimiters {
for (NSString *delimiters in @[ @"()", @"<>", @"[]", @"{}", @"''", @"\"\"" ]) {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
NSString *kFilenameWithParens = [NSString stringWithFormat:@"%C%@%C", [delimiters characterAtIndex:0], kFilename, [delimiters characterAtIndex:1]];
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
assert([expected isEqualToString:actual]);
assert(lineNumber.length == 0);
Loading
Loading
@@ -226,13 +234,15 @@
- (void)testGetFullPathStripsTrailingPunctuation {
for (NSString *punctuation in @[ @".", @")", @",", @":" ]) {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
NSString *kFilenameWithParens = [kFilename stringByAppendingString:punctuation];
static NSString *const kWorkingDirectory = @"/working/directory";
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithParens
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -241,13 +251,15 @@
 
- (void)testGetFullPathExtractsLineNumber {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -255,13 +267,15 @@
 
- (void)testGetFullPathExtractsLineNumberAndIgnoresColumn {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [kFilename stringByAppendingString:@":123:456"];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -269,13 +283,15 @@
 
- (void)testGetFullPathWithParensAndTrailingPunctuationExtractsLineNumber {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kFilename = @"/path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kFilenameWithLineNumber = [NSString stringWithFormat:@"(%@:123.)", kFilename];
[_semanticHistoryController.fakeFileManager.files addObject:kFilename];
NSString *actual = [_semanticHistoryController getFullPath:kFilenameWithLineNumber
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.integerValue == 123);
Loading
Loading
@@ -283,23 +299,27 @@
 
- (void)testGetFullPathFailsWithJustStrippedChars {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kWorkingDirectory = @"/working/directory";
static NSString *const kFilename = @"(:123.)";
NSString *actual = [_semanticHistoryController getFullPath:kFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
XCTAssert(actual == nil);
}
 
- (void)testGetFullPathStandardizesDot {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"./path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -307,13 +327,15 @@
 
- (void)testGetFullPathStandardizesDotDot {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"../path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory/blah";
NSString *kAbsoluteFilename = @"/working/directory/path/to/file";
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -321,6 +343,7 @@
 
- (void)testGetFullPathStripsLeadingASlash {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kAbsoluteFilename =
Loading
Loading
@@ -328,7 +351,8 @@
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:[@"a/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -336,6 +360,7 @@
 
- (void)testGetFullPathStripsLeadingBSlash {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kAbsoluteFilename =
Loading
Loading
@@ -343,7 +368,8 @@
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:[@"b/" stringByAppendingString:kRelativeFilename]
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
XCTAssert(lineNumber.length == 0);
Loading
Loading
@@ -351,6 +377,7 @@
 
- (void)testGetFullPathRejectsNetworkPaths {
NSString *lineNumber = nil;
NSString *columnNumber = nil;
static NSString *const kRelativeFilename = @"path/to/file";
static NSString *const kWorkingDirectory = @"/working/directory";
NSString *kAbsoluteFilename =
Loading
Loading
@@ -358,14 +385,16 @@
[_semanticHistoryController.fakeFileManager.files addObject:kAbsoluteFilename];
NSString *actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
NSString *expected = kAbsoluteFilename;
XCTAssert([expected isEqualToString:actual]);
 
[_semanticHistoryController.fakeFileManager.networkMountPoints addObject:@"/working"];
actual = [_semanticHistoryController getFullPath:kRelativeFilename
workingDirectory:kWorkingDirectory
lineNumber:&lineNumber];
lineNumber:&lineNumber
columnNumber:&columnNumber];
XCTAssert(actual == nil);
}
 
Loading
Loading
@@ -568,6 +597,43 @@
XCTAssert([kExistingFileAbsolutePathWithLineNumber isEqualToString:_semanticHistoryController.launchedAppArg]);
}
 
- (void)testOpenPathOpensTextFileVSCodeEditor {
_semanticHistoryController.prefs =
@{ kSemanticHistoryActionKey: kSemanticHistoryEditorAction,
kSemanticHistoryEditorKey: kVSCodeIdentifier };
NSString *kExistingFileAbsolutePath = @"/file/that/exists";
NSString *kExistingFileAbsolutePathWithLineNumber = [kExistingFileAbsolutePath stringByAppendingString:@":12:11"];
[_semanticHistoryController.fakeFileManager.files addObject:kExistingFileAbsolutePath];
_semanticHistoryController.defaultAppIsEditor = NO;
BOOL opened = [_semanticHistoryController openPath:kExistingFileAbsolutePathWithLineNumber
workingDirectory:@"/"
substitutions:@{ kSemanticHistoryPrefixSubstitutionKey: @"Prefix",
kSemanticHistorySuffixSubstitutionKey: @"Suffix",
kSemanticHistoryWorkingDirectorySubstitutionKey: @"/" }];
XCTAssert(opened);
XCTAssert([kVSCodeIdentifier isEqualToString:_semanticHistoryController.launchedApp]);
XCTAssert([kExistingFileAbsolutePathWithLineNumber isEqualToString:_semanticHistoryController.launchedAppArg]);
}
- (void)testOpenPathOpensTextFileVSCodeEditorWhenDefaultAppForThisFile {
_semanticHistoryController.prefs =
@{ kSemanticHistoryActionKey: kSemanticHistoryEditorAction,
kSemanticHistoryEditorKey: kVSCodeIdentifier };
NSString *kExistingFileAbsolutePath = @"/file/that/exists";
NSString *kExistingFileAbsolutePathWithLineNumber = [kExistingFileAbsolutePath stringByAppendingString:@":12:11"];
[_semanticHistoryController.fakeFileManager.files addObject:kExistingFileAbsolutePath];
_semanticHistoryController.defaultAppIsEditor = NO;
_semanticHistoryController.bundleIdForDefaultApp = kVSCodeIdentifier; // Act like VSCode is the default app for this file
BOOL opened = [_semanticHistoryController openPath:kExistingFileAbsolutePathWithLineNumber
workingDirectory:@"/"
substitutions:@{ kSemanticHistoryPrefixSubstitutionKey: @"Prefix",
kSemanticHistorySuffixSubstitutionKey: @"Suffix",
kSemanticHistoryWorkingDirectorySubstitutionKey: @"/" }];
XCTAssert(opened);
XCTAssert([kVSCodeIdentifier isEqualToString:_semanticHistoryController.launchedApp]);
XCTAssert([kExistingFileAbsolutePathWithLineNumber isEqualToString:_semanticHistoryController.launchedAppArg]);
}
- (void)testOpenPathOpensTextFileSublimeText2Editor {
_semanticHistoryController.prefs =
@{ kSemanticHistoryActionKey: kSemanticHistoryEditorAction,
Loading
Loading
Loading
Loading
@@ -47,7 +47,8 @@ extern NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey;
// rejected.
- (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber;
lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber;
 
// Opens the file at the relative |path| (which may include :lineNumber) in |workingDirectory|.
// The |substitutions| dictionary is used to expand \references in the command to run (gotten from
Loading
Loading
Loading
Loading
@@ -50,7 +50,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
 
- (NSString *)getFullPath:(NSString *)path
workingDirectory:(NSString *)workingDirectory
lineNumber:(NSString **)lineNumber {
lineNumber:(NSString **)lineNumber
columnNumber:(NSString **)columnNumber {
DLog(@"Check if %@ is a valid path in %@", path, workingDirectory);
NSString *origPath = path;
// TODO(chendo): Move regex, define capture semantics in config file/prefs
Loading
Loading
@@ -70,6 +71,9 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
if (lineNumber != nil) {
*lineNumber = [path stringByMatching:@":(\\d+)" capture:1];
}
if (columnNumber != nil) {
*columnNumber = [path stringByMatching:@":(\\d+):(\\d+)" capture:2];
}
path = [[path stringByReplacingOccurrencesOfRegex:@":\\d*(?::.*)?$"
withString:@""]
stringByExpandingTildeInPath];
Loading
Loading
@@ -104,7 +108,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
// ... and calculate the full path again
return [self getFullPath:origPath
workingDirectory:workingDirectory
lineNumber:lineNumber];
lineNumber:lineNumber
columnNumber:columnNumber];
}
 
DLog(@" NO: no valid path found");
Loading
Loading
@@ -139,6 +144,28 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
}
}
 
- (void)launchVSCodeWithPath:(NSString *)path {
assert(path);
if (!path) {
// I don't expect this to ever happen.
return;
}
NSString *bundlePath = [self absolutePathForAppBundleWithIdentifier:kVSCodeIdentifier];
if (bundlePath) {
NSString *codeExecutable =
[bundlePath stringByAppendingPathComponent:@"Contents/Resources/app/bin/code"];
if ([self.fileManager fileExistsAtPath:codeExecutable]) {
DLog(@"Launch VSCode %@ %@", codeExecutable, path);
[self launchTaskWithPath:codeExecutable arguments:@[ path, @"-g" ] wait:NO];
} else {
// This isn't as good as opening "code -g" because it always opens a new instance
// of the app but it's the OS-sanctioned way of running VSCode. We can't
// use Applescript because it won't open the file to a particular line number.
[self launchAppWithBundleIdentifier:kVSCodeIdentifier path:path];
}
}
}
- (NSString *)absolutePathForAppBundleWithIdentifier:(NSString *)bundleId {
return [[NSWorkspace sharedWorkspace] absolutePathForAppBundleWithIdentifier:bundleId];
}
Loading
Loading
@@ -167,6 +194,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
 
+ (NSArray *)bundleIdsThatSupportOpeningToLineNumber {
return @[ kAtomIdentifier,
kVSCodeIdentifier,
kSublimeText2Identifier,
kSublimeText3Identifier,
kMacVimIdentifier,
Loading
Loading
@@ -177,19 +205,34 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
 
- (void)openFile:(NSString *)path
inEditorWithBundleId:(NSString *)identifier
lineNumber:(NSString *)lineNumber {
lineNumber:(NSString *)lineNumber
columnNumber:(NSString *)columnNumber {
if (identifier) {
DLog(@"openFileInEditor. editor=%@", [self preferredEditorIdentifier]);
if ([identifier isEqualToString:kAtomIdentifier]) {
if (lineNumber != nil) {
path = [NSString stringWithFormat:@"%@:%@", path, lineNumber];
}
if (columnNumber != nil) {
path = [path stringByAppendingFormat:@":%@", columnNumber];
}
[self launchAtomWithPath:path];
} else if ([identifier isEqualToString:kVSCodeIdentifier]) {
if (lineNumber != nil) {
path = [NSString stringWithFormat:@"%@:%@", path, lineNumber];
}
if (columnNumber != nil) {
path = [path stringByAppendingFormat:@":%@", columnNumber];
}
[self launchVSCodeWithPath:path];
} else if ([identifier isEqualToString:kSublimeText2Identifier] ||
[identifier isEqualToString:kSublimeText3Identifier]) {
if (lineNumber != nil) {
path = [NSString stringWithFormat:@"%@:%@", path, lineNumber];
}
if (columnNumber != nil) {
path = [path stringByAppendingFormat:@":%@", columnNumber];
}
NSString *bundleId;
if ([identifier isEqualToString:kSublimeText3Identifier]) {
bundleId = kSublimeText3Identifier;
Loading
Loading
@@ -220,8 +263,8 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
}
}
 
- (void)openFileInEditor:(NSString *)path lineNumber:(NSString *)lineNumber {
[self openFile:path inEditorWithBundleId:[self preferredEditorIdentifier] lineNumber:lineNumber];
- (void)openFileInEditor:(NSString *)path lineNumber:(NSString *)lineNumber columnNumber:(NSString *)columnNumber {
[self openFile:path inEditorWithBundleId:[self preferredEditorIdentifier] lineNumber:lineNumber columnNumber:columnNumber];
}
 
- (BOOL)activatesOnAnyString {
Loading
Loading
@@ -263,10 +306,11 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
DLog(@"openPath:%@ workingDirectory:%@ substitutions:%@", path, workingDirectory, substitutions);
BOOL isDirectory;
NSString *lineNumber = @"";
NSString *columnNumber = @"";
 
BOOL isRawAction = [prefs_[kSemanticHistoryActionKey] isEqualToString:kSemanticHistoryRawCommandAction];
if (!isRawAction) {
path = [self getFullPath:path workingDirectory:workingDirectory lineNumber:&lineNumber];
path = [self getFullPath:path workingDirectory:workingDirectory lineNumber:&lineNumber columnNumber:&columnNumber];
DLog(@"Not a raw action. New path is %@, line number is %@", path, lineNumber);
}
 
Loading
Loading
@@ -329,7 +373,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
if ([prefs_[kSemanticHistoryActionKey] isEqualToString:kSemanticHistoryEditorAction] &&
[self preferredEditorIdentifier]) {
// Action is to open in a specific editor, so open it in the editor.
[self openFileInEditor:path lineNumber:lineNumber];
[self openFileInEditor:path lineNumber:lineNumber columnNumber:columnNumber];
return YES;
}
 
Loading
Loading
@@ -338,7 +382,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
if ([self canOpenFileWithLineNumberUsingEditorWithBundleId:appBundleId]) {
DLog(@"A line number is present and I know how to open this file to the line number using %@. Do so.",
appBundleId);
[self openFile:path inEditorWithBundleId:appBundleId lineNumber:lineNumber];
[self openFile:path inEditorWithBundleId:appBundleId lineNumber:lineNumber columnNumber:columnNumber];
return YES;
}
}
Loading
Loading
@@ -442,7 +486,7 @@ NSString *const kSemanticHistoryWorkingDirectorySubstitutionKey = @"semanticHist
for (NSString *modifiedPossiblePath in [self pathsFromPath:trimmedPath byRemovingBadSuffixes:questionableSuffixes]) {
BOOL exists = NO;
if (workingDirectoryIsOk || [modifiedPossiblePath hasPrefix:@"/"]) {
exists = ([self getFullPath:modifiedPossiblePath workingDirectory:workingDirectory lineNumber:NULL] != nil);
exists = ([self getFullPath:modifiedPossiblePath workingDirectory:workingDirectory lineNumber:NULL columnNumber:NULL] != nil);
}
if (exists) {
if (charsTakenFromPrefixPtr) {
Loading
Loading
Loading
Loading
@@ -16,6 +16,7 @@ extern NSString *kSublimeText2Identifier;
extern NSString *kSublimeText3Identifier;
extern NSString *kMacVimIdentifier;
extern NSString *kAtomIdentifier;
extern NSString *kVSCodeIdentifier;
extern NSString *kTextmateIdentifier;
extern NSString *kTextmate2Identifier;
extern NSString *kBBEditIdentifier;
Loading
Loading
Loading
Loading
@@ -22,6 +22,7 @@ NSString *kTextmateIdentifier = @"com.macromates.TextMate";
NSString *kTextmate2Identifier = @"com.macromates.TextMate.preview";
NSString *kBBEditIdentifier = @"com.barebones.bbedit";
NSString *kAtomIdentifier = @"com.github.atom";
NSString *kVSCodeIdentifier = @"com.microsoft.VSCode";
NSString *kSemanticHistoryBestEditorAction = @"best editor";
NSString *kSemanticHistoryUrlAction = @"url";
NSString *kSemanticHistoryEditorAction = @"editor";
Loading
Loading
@@ -45,6 +46,7 @@ enum {
kSublimeText3Tag,
kAtomTag,
kTextmate2Tag,
kVSCodeTag,
// Only append to the end of the list; never delete or change.
};
 
Loading
Loading
@@ -91,7 +93,8 @@ enum {
kTextmateIdentifier: @"txmt",
kTextmate2Identifier: @"txmt",
kBBEditIdentifier: @"txmt",
kAtomIdentifier: @"atom" };
kAtomIdentifier: @"atom",
kVSCodeIdentifier: @"vscode" };
return schemes[editor];
}
 
Loading
Loading
@@ -103,7 +106,8 @@ enum {
kTextmateIdentifier,
kTextmate2Identifier,
kBBEditIdentifier,
kAtomIdentifier ];
kAtomIdentifier,
kVSCodeIdentifier ];
}
 
+ (NSString *)bestEditor {
Loading
Loading
@@ -122,7 +126,8 @@ enum {
kTextmateIdentifier,
kTextmate2Identifier,
kBBEditIdentifier,
kAtomIdentifier ];
kAtomIdentifier,
kVSCodeIdentifier ];
return [editorBundleIds containsObject:bundleId];
}
 
Loading
Loading
@@ -133,7 +138,8 @@ enum {
kTextmateIdentifier: @(kTextmateTag),
kTextmate2Identifier: @(kTextmate2Tag),
kBBEditIdentifier: @(kBBEditTag),
kAtomIdentifier: @(kAtomTag) };
kAtomIdentifier: @(kAtomTag),
kVSCodeIdentifier: @(kVSCodeTag) };
return tags;
}
 
Loading
Loading
@@ -144,7 +150,8 @@ enum {
kTextmateIdentifier: @"Textmate",
kTextmate2Identifier: @"Textmate Preview",
kBBEditIdentifier: @"BBEdit",
kAtomIdentifier: @"Atom" };
kAtomIdentifier: @"Atom",
kVSCodeIdentifier: @"VSCode" };
 
NSDictionary *tags = [[self class] identifierToTagMap];
 
Loading
Loading
@@ -199,7 +206,8 @@ enum {
@(kTextmateTag): kTextmateIdentifier,
@(kTextmate2Tag): kTextmate2Identifier,
@(kBBEditTag): kBBEditIdentifier,
@(kAtomTag): kAtomIdentifier };
@(kAtomTag): kAtomIdentifier,
@(kVSCodeTag): kVSCodeIdentifier };
return map[@([[editors_ selectedItem] tag])];
}
 
Loading
Loading
Loading
Loading
@@ -190,7 +190,8 @@
 
action.fullPath = [semanticHistoryController getFullPath:filename
workingDirectory:workingDirectory
lineNumber:NULL];
lineNumber:NULL
columnNumber:NULL];
action.workingDirectory = workingDirectory;
return action;
}
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment