diff options
author | Bibiko <bibiko@eva.mpg.de> | 2010-01-28 22:40:28 +0000 |
---|---|---|
committer | Bibiko <bibiko@eva.mpg.de> | 2010-01-28 22:40:28 +0000 |
commit | 5e6610549483e09d47ef8c0432673393f5abc349 (patch) | |
tree | 9c561bcdfa7bea64c0ed3cf796f0a86876329f55 /Source/CMTextView.m | |
parent | 35678468fac4fe5bd954f4f640aadf235f83686d (diff) | |
download | sequelpro-5e6610549483e09d47ef8c0432673393f5abc349.tar.gz sequelpro-5e6610549483e09d47ef8c0432673393f5abc349.tar.bz2 sequelpro-5e6610549483e09d47ef8c0432673393f5abc349.zip |
• text macro improvements
- added dynamically set SP variables $SP_SELECTED_TABLE and $SP_SELECTED_DATABASE available in each ${x:…} snippet to allow to create a query fav à la:
SELECT ${1:$SP_SELECTED_TABLE.} FROM ${1:$SP_SELECTED_TABLE}
whereby for the first snippet one can press ESC to insert one or by holding down the CTRL key while inserting more field names from the current table
- improved snippet range detection for current caret position
- reduced the border width of snippet highlighting and changed slightly the colour for the current selected snippet
Diffstat (limited to 'Source/CMTextView.m')
-rw-r--r-- | Source/CMTextView.m | 49 |
1 files changed, 44 insertions, 5 deletions
diff --git a/Source/CMTextView.m b/Source/CMTextView.m index 6bd6f315..cccbc6e8 100644 --- a/Source/CMTextView.m +++ b/Source/CMTextView.m @@ -571,7 +571,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) inView:self dictMode:isDictMode dbMode:dbBrowseMode - tabTriggerMode:((snippetControlCounter > -1) ? YES : NO) + tabTriggerMode:[self isSnippetMode] fuzzySearch:fuzzySearch backtickMode:backtickMode withDbName:dbName @@ -994,14 +994,51 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) if(snipCnt>snippetControlMax) snippetControlMax = snipCnt; - [snip replaceCharactersInRange:snipRange withString:[snip substringWithRange:hintRange]]; + // Replace internal variables + NSMutableString *theHintString = [[NSMutableString alloc] initWithCapacity:hintRange.length]; + [theHintString setString:[snip substringWithRange:hintRange]]; + if([theHintString isMatchedByRegex:@"(?<!\\\\)\\$SP_"]) { + NSRange r; + NSString *currentTable = nil; + if ([[[[self window] delegate] valueForKeyPath:@"tablesListInstance"] valueForKey:@"tableName"] != nil) + currentTable = [[[[self window] delegate] valueForKeyPath:@"tablesListInstance"] valueForKeyPath:@"tableName"]; + NSString *currentDb = nil; + if ([[[[self window] delegate] valueForKeyPath:@"tablesListInstance"] valueForKey:@"selectedDatabase"] != nil) + currentDb = [[[[self window] delegate] valueForKeyPath:@"tablesListInstance"] valueForKeyPath:@"selectedDatabase"]; + + while([theHintString isMatchedByRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLE"]) { + r = [theHintString rangeOfRegex:@"(?<!\\\\)\\$SP_SELECTED_TABLE"]; + if(r.length) { + if(currentTable && [currentTable length]) + [theHintString replaceCharactersInRange:r withString:[currentTable backtickQuotedString]]; + else + [theHintString replaceCharactersInRange:r withString:@"<table>"]; + } + [theHintString flushCachedRegexData]; + } + + while([theHintString isMatchedByRegex:@"(?<!\\\\)\\$SP_SELECTED_DATABASE"]) { + r = [theHintString rangeOfRegex:@"(?<!\\\\)\\$SP_SELECTED_DATABASE"]; + if(r.length) { + if(currentDb && [currentDb length]) + [theHintString replaceCharactersInRange:r withString:[currentDb backtickQuotedString]]; + else + [theHintString replaceCharactersInRange:r withString:@"<database>"]; + } + [theHintString flushCachedRegexData]; + } + } + + [snip replaceCharactersInRange:snipRange withString:theHintString]; [snip flushCachedRegexData]; // Store found snippet range snippetControlArray[snipCnt][0] = snipRange.location + targetRange.location; - snippetControlArray[snipCnt][1] = snipRange.length-4-((snipCnt>9)?2:1); + snippetControlArray[snipCnt][1] = [theHintString length]; snippetControlArray[snipCnt][2] = 0; + [theHintString release]; + // Adjust successive snippets for(i=0; i<20; i++) if(snippetControlArray[i][0] > -1 && i != snipCnt && snippetControlArray[i][0] > snippetControlArray[snipCnt][0]) @@ -1064,6 +1101,8 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) return NO; } + [[self textStorage] ensureAttributesAreFixedInRange:[self selectedRange]]; + NSInteger caretPos = [self selectedRange].location; NSInteger i, j; NSInteger foundSnippetIndices[20]; // array to hold nested snippets @@ -2880,11 +2919,11 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse) boundingRect = NSInsetRect(boundingRect, -4, 0.2); NSBezierPath *aBezierPath = [NSBezierPath bezierPathWithRoundedRect:boundingRect xRadius:6 yRadius:10]; if(i == currentSnippetIndex) - [[NSColor colorWithCalibratedRed:1.0 green:0.3 blue:0.0 alpha:0.7] setFill]; + [[NSColor colorWithCalibratedRed:1.0 green:0.6 blue:0.0 alpha:0.7] setFill]; else [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:0.0 alpha:0.4] setFill]; [aBezierPath fill]; - boundingRect = NSInsetRect(boundingRect, 2, 2); + boundingRect = NSInsetRect(boundingRect, 1.3, 1.3); aBezierPath = [NSBezierPath bezierPathWithRoundedRect:boundingRect xRadius:6 yRadius:10]; [[NSColor colorWithCalibratedRed:1.0 green:1.0 blue:1.0 alpha:0.8] setFill]; [aBezierPath fill]; |