aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBibiko <bibiko@eva.mpg.de>2011-01-21 13:05:55 +0000
committerBibiko <bibiko@eva.mpg.de>2011-01-21 13:05:55 +0000
commit28819b6ab639d29bf5e5897e7ac4c784771d3651 (patch)
tree6b370fe43d17aeb911ebb5dfb6b306fb799f9884
parent218c2e17f054f3333d15af62a4f60f41b464c849 (diff)
downloadsequelpro-28819b6ab639d29bf5e5897e7ac4c784771d3651.tar.gz
sequelpro-28819b6ab639d29bf5e5897e7ac4c784771d3651.tar.bz2
sequelpro-28819b6ab639d29bf5e5897e7ac4c784771d3651.zip
• sped up getRangeForCurrentWord
- fixes also the short interruption of the cursor blinking - for completion the old method is used, since it's fine-tuned to use it - fix will come soon - preparation for user-defined word symbols • fixed issue for soft indent if user uses deleteForward: selector (⇧⌫)
-rw-r--r--Source/SPTextView.m4
-rw-r--r--Source/SPTextViewAdditions.h1
-rw-r--r--Source/SPTextViewAdditions.m61
3 files changed, 64 insertions, 2 deletions
diff --git a/Source/SPTextView.m b/Source/SPTextView.m
index 41b5d6e4..cd6e22ff 100644
--- a/Source/SPTextView.m
+++ b/Source/SPTextView.m
@@ -606,7 +606,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse)
NSString* filter;
NSString* dbName = nil;
NSString* tableName = nil;
- NSRange completionRange = [self getRangeForCurrentWord];
+ NSRange completionRange = [self getRangeForCurrentWordForCompletion];
NSRange parseRange = completionRange;
NSString* currentWord = [[self string] substringWithRange:completionRange];
NSString* prefix = @"";
@@ -2445,7 +2445,7 @@ NSInteger alphabeticSort(id string1, id string2, void *reverse)
&& ![self selectedRange].length
&& [prefs boolForKey:SPCustomQuerySoftIndent]
&& [self isCaretAtIndentPositionIgnoreLineStart:YES]
- && ![self isCaretAdjacentToAlphanumCharWithInsertionOf:'-'])
+ && [self selectedRange].location < [[self string] length] && [[self string] characterAtIndex:[self selectedRange].location] == ' ')
{
[self shiftSelectionLeft];
return;
diff --git a/Source/SPTextViewAdditions.h b/Source/SPTextViewAdditions.h
index 013d8872..b4692aee 100644
--- a/Source/SPTextViewAdditions.h
+++ b/Source/SPTextViewAdditions.h
@@ -25,6 +25,7 @@
@interface NSTextView (SPTextViewAdditions)
- (NSRange)getRangeForCurrentWord;
+- (NSRange)getRangeForCurrentWordForCompletion;
- (IBAction)selectCurrentWord:(id)sender;
- (IBAction)selectCurrentLine:(id)sender;
diff --git a/Source/SPTextViewAdditions.m b/Source/SPTextViewAdditions.m
index 750527f1..e5a15421 100644
--- a/Source/SPTextViewAdditions.m
+++ b/Source/SPTextViewAdditions.m
@@ -41,8 +41,69 @@
if (curRange.length)
return curRange;
+ NSInteger curLocation = curRange.location;
+ NSInteger start = curLocation;
+ NSInteger end = curLocation;
+ NSUInteger strLen = [[self string] length];
+
+ NSMutableCharacterSet *wordCharSet = [NSMutableCharacterSet alphanumericCharacterSet];
+ [wordCharSet addCharactersInString:@"_."];
+ [wordCharSet removeCharactersInString:@"`"];
+
+ if(start) {
+ start--;
+ while([wordCharSet characterIsMember:[[self string] characterAtIndex:start]]) {
+ start--;
+ if(start < 0) break;
+ }
+ start++;
+ }
+
+ while(end < strLen && [wordCharSet characterIsMember:[[self string] characterAtIndex:end]]) {
+ end++;
+ }
+
+ return(NSMakeRange(start, end-start));
+
+}
+/*
+ * Returns the range of the current word.
+ * finds: [| := caret] |word wo|rd word|
+ * If | is in between whitespaces nothing will be selected.
+ */
+- (NSRange)getRangeForCurrentWordForCompletion
+{
+ NSRange curRange = [self selectedRange];
+
+ if (curRange.length)
+ return curRange;
+
NSUInteger curLocation = curRange.location;
+ NSMutableCharacterSet *wordCharSet = [NSMutableCharacterSet alphanumericCharacterSet];
+ [wordCharSet addCharactersInString:@"_."];
+ [wordCharSet removeCharactersInString:@"`"];
+
+ NSInteger start = curLocation;
+ NSInteger end = curLocation;
+
+ if(start) {
+ start--;
+ while([wordCharSet characterIsMember:[[self string] characterAtIndex:start]]) {
+ start--;
+ if(start < 0) break;
+ }
+ start++;
+ }
+
+ NSUInteger strLen = [[self string] length];
+ if(end <= strLen-1) {
+ while(end < strLen && [wordCharSet characterIsMember:[[self string] characterAtIndex:end]]) {
+ end++;
+ }
+ }
+ return(NSMakeRange(start, end-start));
+
[self moveWordLeft:self];
[self moveWordRightAndModifySelection:self];