Skip to content

Commit 7b7bc46

Browse files
committed
Merge branch 'release/2.1.1'
2 parents 3a39095 + 4bb0227 commit 7b7bc46

File tree

4 files changed

+83
-21
lines changed

4 files changed

+83
-21
lines changed

TodoTxtMac/TTMFieldEditor.m

Lines changed: 69 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -107,17 +107,35 @@ - (void)doCompletion:(NSTimer*)timer {
107107
* addresses (with "@").
108108
*/
109109
- (void)keyUp:(NSEvent*)event {
110-
// Start the completion timer if the user types an "@" or "+".
111-
if ([[event characters] isEqualToString:@"@"] || [[event characters] isEqualToString:@"+"]) {
112-
[self startCompletionTimer];
113-
} else {
114-
[self stopCompletionTimer];
110+
// Start the completion timer if the range for user completion starts with "@" or "+".
111+
NSString *partialRange = [[self string] substringWithRange:self.rangeForUserCompletion];
112+
if ([partialRange hasPrefix:@"@"] || [partialRange hasPrefix:@"+"]) {
113+
114+
// Don't trigger autocompletion time if user is pressing a deletion key or pressing Enter
115+
unichar keyChar = [self keyCharFromEvent:event];
116+
if (![self keyCharIsADeletionKey:keyChar] && ![self keyCharIsEnterKey:keyChar]) {
117+
[self startCompletionTimer];
118+
}
115119
}
116120

117121
// Call the super so we don't override any other behaviors.
118122
[super keyUp:event];
119123
}
120124

125+
- (BOOL)keyCharIsADeletionKey:(unichar)keyChar {
126+
return (keyChar == NSBackspaceCharacter || keyChar == NSDeleteCharacter);
127+
}
128+
129+
- (BOOL)keyCharIsEnterKey:(unichar)keyChar {
130+
return (keyChar == NSEnterCharacter || keyChar == '\r');
131+
}
132+
133+
- (unichar)keyCharFromEvent:(NSEvent*)event {
134+
NSString *passedChar = [event charactersIgnoringModifiers];
135+
unichar keyChar = [passedChar characterAtIndex:0];
136+
return keyChar;
137+
}
138+
121139
/*!
122140
* @method completionsForPartialWordRange:indexOfSelectedItem:
123141
* @abstract This method returns autocompletion suggestions based on the range it receives.
@@ -130,16 +148,31 @@ - (NSArray*)completionsForPartialWordRange:(NSRange)charRange
130148
NSString *partialString = [[self string] substringWithRange:charRange];
131149

132150
if ([partialString hasPrefix:@"+"]) {
133-
return self.projectsArray;
151+
return [self partialCompletionsFromSourceArray:self.projectsArray partialString:partialString];
134152
} else if ([partialString hasPrefix:@"@"]) {
135-
return self.contextsArray;
153+
return [self partialCompletionsFromSourceArray:self.contextsArray partialString:partialString];
136154
} else {
137155
// Call the super method to get the default behavior.
138156
// This allows for the user to type Esc and still trigger autocompletion.
139157
return [super completionsForPartialWordRange:charRange indexOfSelectedItem:index];
140158
}
141159
}
142160

161+
- (NSArray*)partialCompletionsFromSourceArray:(NSArray*)sourceArray
162+
partialString:(NSString*)partialString{
163+
if (sourceArray == nil) {
164+
return nil;
165+
}
166+
167+
NSMutableArray *returnArray = [[NSMutableArray alloc] init];
168+
for (NSString *str in sourceArray) {
169+
if ([[str uppercaseString] hasPrefix:[partialString uppercaseString]]) {
170+
[returnArray addObject:str];
171+
}
172+
}
173+
return returnArray;
174+
}
175+
143176
/*!
144177
* @method rangeForUserCompletion:
145178
* @abstract This method returns the range to be replaced by autocompletion.
@@ -161,9 +194,38 @@ - (NSRange)rangeForUserCompletion {
161194
superRange.length = 1;
162195
}
163196

197+
// Look 1 character back from the superRange.
198+
// If it is a "@" or "+", extend the superRange back to include that character.
199+
// This is necessary for autocompletion to work properly for contexts and projects.
200+
NSString *leadingCharacter = [self leadingCharacterToLeftOfRange:superRange];
201+
if ([leadingCharacter isEqualToString:@"@"] || [leadingCharacter isEqualToString:@"+"]) {
202+
if (superRange.location > 0) {
203+
superRange.location -= 1;
204+
superRange.length += 1;
205+
}
206+
}
207+
164208
return superRange;
165209
}
166210

211+
- (NSString*)leadingCharacterToLeftOfRange:(NSRange)range {
212+
if (range.location == 0) {
213+
return [[self string] substringWithRange:range];
214+
}
215+
216+
NSRange newRange = NSMakeRange(range.location - 1, 1);
217+
return [[self string] substringWithRange:newRange];
218+
}
219+
220+
- (NSString*)stringForRangeWithAdditionalLeadingCharacter:(NSRange)range {
221+
if (range.location == 0) {
222+
return [[self string] substringWithRange:range];
223+
}
224+
225+
NSRange newRange = NSMakeRange(range.location - 1, range.length + 1);
226+
return [[self string] substringWithRange:newRange];
227+
}
228+
167229
/*!
168230
* @method: cancelOperation:
169231
* @abstract This method undoes all changes of the text field being edited when the user hits Esc,

TodoTxtMac/TTMFilters.xib

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2-
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9532" systemVersion="15D21" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
2+
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="10116" systemVersion="15E65" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
33
<dependencies>
44
<deployment identifier="macosx"/>
5-
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9532"/>
5+
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="10116"/>
66
</dependencies>
77
<objects>
88
<customObject id="-2" userLabel="File's Owner" customClass="TTMFiltersController">
@@ -524,7 +524,7 @@
524524
<autoresizingMask key="autoresizingMask"/>
525525
</scroller>
526526
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="tcy-Zc-P6i">
527-
<rect key="frame" x="477" y="1" width="15" height="258"/>
527+
<rect key="frame" x="476" y="1" width="16" height="258"/>
528528
<autoresizingMask key="autoresizingMask"/>
529529
</scroller>
530530
</scrollView>
@@ -1016,7 +1016,7 @@
10161016
<autoresizingMask key="autoresizingMask"/>
10171017
</scroller>
10181018
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="vAx-J9-pQC">
1019-
<rect key="frame" x="477" y="1" width="15" height="258"/>
1019+
<rect key="frame" x="476" y="1" width="16" height="258"/>
10201020
<autoresizingMask key="autoresizingMask"/>
10211021
</scroller>
10221022
</scrollView>
@@ -1508,7 +1508,7 @@
15081508
<autoresizingMask key="autoresizingMask"/>
15091509
</scroller>
15101510
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="ues-cY-hv0">
1511-
<rect key="frame" x="477" y="1" width="15" height="258"/>
1511+
<rect key="frame" x="476" y="1" width="16" height="258"/>
15121512
<autoresizingMask key="autoresizingMask"/>
15131513
</scroller>
15141514
</scrollView>
@@ -2000,7 +2000,7 @@
20002000
<autoresizingMask key="autoresizingMask"/>
20012001
</scroller>
20022002
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="Dn2-oy-WkD">
2003-
<rect key="frame" x="477" y="1" width="15" height="258"/>
2003+
<rect key="frame" x="476" y="1" width="16" height="258"/>
20042004
<autoresizingMask key="autoresizingMask"/>
20052005
</scroller>
20062006
</scrollView>
@@ -2492,7 +2492,7 @@
24922492
<autoresizingMask key="autoresizingMask"/>
24932493
</scroller>
24942494
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="Xch-za-6Nr">
2495-
<rect key="frame" x="477" y="1" width="15" height="258"/>
2495+
<rect key="frame" x="476" y="1" width="16" height="258"/>
24962496
<autoresizingMask key="autoresizingMask"/>
24972497
</scroller>
24982498
</scrollView>
@@ -2984,7 +2984,7 @@
29842984
<autoresizingMask key="autoresizingMask"/>
29852985
</scroller>
29862986
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="2bq-D6-2te">
2987-
<rect key="frame" x="477" y="1" width="15" height="258"/>
2987+
<rect key="frame" x="476" y="1" width="16" height="258"/>
29882988
<autoresizingMask key="autoresizingMask"/>
29892989
</scroller>
29902990
</scrollView>
@@ -3476,7 +3476,7 @@
34763476
<autoresizingMask key="autoresizingMask"/>
34773477
</scroller>
34783478
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="JkQ-8M-KaS">
3479-
<rect key="frame" x="477" y="1" width="15" height="258"/>
3479+
<rect key="frame" x="476" y="1" width="16" height="258"/>
34803480
<autoresizingMask key="autoresizingMask"/>
34813481
</scroller>
34823482
</scrollView>
@@ -3968,7 +3968,7 @@
39683968
<autoresizingMask key="autoresizingMask"/>
39693969
</scroller>
39703970
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="h5H-Ye-21u">
3971-
<rect key="frame" x="477" y="1" width="15" height="258"/>
3971+
<rect key="frame" x="476" y="1" width="16" height="258"/>
39723972
<autoresizingMask key="autoresizingMask"/>
39733973
</scroller>
39743974
</scrollView>
@@ -4460,7 +4460,7 @@
44604460
<autoresizingMask key="autoresizingMask"/>
44614461
</scroller>
44624462
<scroller key="verticalScroller" verticalHuggingPriority="750" horizontal="NO" id="uW2-e6-tfL">
4463-
<rect key="frame" x="477" y="1" width="15" height="258"/>
4463+
<rect key="frame" x="476" y="1" width="16" height="258"/>
44644464
<autoresizingMask key="autoresizingMask"/>
44654465
</scroller>
44664466
</scrollView>

TodoTxtMac/TTMTableView.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ - (void)keyDown:(NSEvent *)theEvent {
135135

136136
// update task (send Enter/Return to super)
137137
if (keyChar == NSEnterCharacter || keyChar == '\r' || keyChar == 'u') {
138-
[self translateKeyDownEvent:theEvent toKeyDown:'u' sendToControl:self];
138+
[self translateKeyDownEvent:theEvent toKeyDown:'u' sendToControl:[self window]];
139139
return;
140140
}
141141

TodoTxtMac/TodoTxtMac-Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
<key>CFBundlePackageType</key>
3939
<string>APPL</string>
4040
<key>CFBundleShortVersionString</key>
41-
<string>2.1.0</string>
41+
<string>2.1.1</string>
4242
<key>CFBundleSignature</key>
4343
<string>????</string>
4444
<key>CFBundleVersion</key>
45-
<string>2006</string>
45+
<string>2010</string>
4646
<key>LSApplicationCategoryType</key>
4747
<string>public.app-category.productivity</string>
4848
<key>LSMinimumSystemVersion</key>

0 commit comments

Comments
 (0)