aboutsummaryrefslogtreecommitdiffstats
path: root/Source
diff options
context:
space:
mode:
Diffstat (limited to 'Source')
-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];