diff --git a/AppController.h b/AppController.h
index 202917f1..3672ed79 100755
--- a/AppController.h
+++ b/AppController.h
@@ -136,6 +136,7 @@ void outletObjectAwoke(id sender);
- (IBAction)copyNoteLink:(id)sender;
- (IBAction)exportNote:(id)sender;
- (IBAction)revealNote:(id)sender;
+- (IBAction)editNoteExternally:(id)sender;
- (IBAction)printNote:(id)sender;
- (IBAction)tagNote:(id)sender;
- (IBAction)importNotes:(id)sender;
diff --git a/AppController.m b/AppController.m
index aebdb09b..152499b0 100755
--- a/AppController.m
+++ b/AppController.m
@@ -28,6 +28,7 @@
#import "NSFileManager_NV.h"
#import "EncodingsManager.h"
#import "ExporterManager.h"
+#import "ExternalEditorListController.h"
#import "NSData_transformations.h"
#import "BufferUtils.h"
#import "LinkingEditor.h"
@@ -342,16 +343,11 @@ - (void)runDelayedUIActionsAfterLaunch {
}
}
// add elasticthreads' menuitems
- NSMenuItem *theMenuItem = [[[NSMenuItem alloc] initWithTitle:@"Open Note in TextEdit"
- action:@selector(openFileInEditor:) keyEquivalent:@"O"] autorelease];
- if ([prefsController textEditor]) {
- [theMenuItem setTitle:[@"Open Note in " stringByAppendingString:[prefsController textEditor]]];
- }
+ NSMenuItem *theMenuItem = [[[NSMenuItem alloc] init] autorelease];
[theMenuItem setTarget:self];
NSMenu *notesMenu = [[[NSApp mainMenu] itemWithTag:NOTES_MENU_ID] submenu];
- [notesMenu insertItem:theMenuItem atIndex:9];
theMenuItem = [theMenuItem copy];
- [statBarMenu insertItem:theMenuItem atIndex:4];
+// [statBarMenu insertItem:theMenuItem atIndex:4];
[theMenuItem release];
//theMenuItem = [[viewMenu itemWithTag:801] copy];
//[statBarMenu insertItem:theMenuItem atIndex:11];
@@ -637,19 +633,12 @@ - (BOOL)validateMenuItem:(NSMenuItem*)menuItem {
} else if (selector == @selector(fixFileEncoding:)) {
return (currentNote != nil && storageFormatOfNote(currentNote) == PlainTextFormat && ![currentNote contentsWere7Bit]);
+ } else if (selector == @selector(editNoteExternally:)) {
+ return (numberSelected > 0) && [[menuItem representedObject] canEditAllNotes:[notationController notesAtIndexes:[notesTableView selectedRowIndexes]]];
}
-
return YES;
}
-/*
- - (void)menuNeedsUpdate:(NSMenu *)menu {
- NSLog(@"mama needs update: %@", [menu title]);
-
- NSArray *selectedNotes = [notationController notesAtIndexes:[notesTableView selectedRowIndexes]];
- [selectedNotes setURLsInNotesForMenu:menu];
- }*/
-
- (void)updateNoteMenus {
NSMenu *notesMenu = [[[NSApp mainMenu] itemWithTag:NOTES_MENU_ID] submenu];
@@ -661,6 +650,7 @@ - (void)updateNoteMenus {
NSLocalizedString(@"Delete", nil), trailingQualifier]];
}
+ [notesMenu setSubmenu:[[ExternalEditorListController sharedInstance] addEditNotesMenu] forItem:[notesMenu itemWithTag:88]];
NSMenu *viewMenu = [[[NSApp mainMenu] itemWithTag:VIEW_MENU_ID] submenu];
menuIndex = [viewMenu indexOfItemWithTarget:notesTableView andAction:@selector(toggleNoteBodyPreviews:)];
@@ -861,6 +851,22 @@ - (IBAction)revealNote:(id)sender {
[[NSWorkspace sharedWorkspace] selectFile:path inFileViewerRootedAtPath:@""];
}
+- (IBAction)editNoteExternally:(id)sender {
+ ExternalEditor *ed = [sender representedObject];
+ if ([ed isKindOfClass:[ExternalEditor class]]) {
+ NSIndexSet *indexes = [notesTableView selectedRowIndexes];
+ if (kCGEventFlagMaskAlternate == (CGEventSourceFlagsState(kCGEventSourceStateCombinedSessionState) & NSDeviceIndependentModifierFlagsMask)) {
+ //allow changing the default editor directly from Notes menu
+ [[ExternalEditorListController sharedInstance] setDefaultEditor:ed];
+ }
+ //force-write any queued changes to disk in case notes are being stored as separate files which might be opened directly by the method below
+ [notationController synchronizeNoteChanges:nil];
+ [[notationController notesAtIndexes:indexes] makeObjectsPerformSelector:@selector(editExternallyUsingEditor:) withObject:ed];
+ } else {
+ NSBeep();
+ }
+}
+
- (IBAction)printNote:(id)sender {
NSIndexSet *indexes = [notesTableView selectedRowIndexes];
@@ -2955,75 +2961,75 @@ - (IBAction)toggleWordCount:(id)sender{
}
- (void)flagsChanged:(NSEvent *)theEvent{
- if (ModFlagger>=0) {
- if (([theEvent keyCode]==58)||([theEvent keyCode]==61)) {
- if (([theEvent modifierFlags]==524576)||([theEvent modifierFlags]==524608)) { //option down
- modifierTimer = [[NSTimer scheduledTimerWithTimeInterval:0.65
- target:self
- selector:@selector(updateModifier:)
- userInfo:@"option"
- repeats:NO] retain];
- }else if ([theEvent modifierFlags]==256) { //option up
-
- if (modifierTimer) {
- if ([modifierTimer isValid]) {
- [modifierTimer invalidate];
- }else {
- [self performSelector:@selector(popWordCount:) withObject:NO afterDelay:0.35];
- }
- modifierTimer = nil;
- [modifierTimer release];
- }
- ModFlagger = 0;
-
- }
- }else if (([theEvent keyCode]==59)||([theEvent keyCode]==62)) {
- if (([theEvent modifierFlags]==262401)||([theEvent modifierFlags]==270592)) { //control down
- modifierTimer = [[NSTimer scheduledTimerWithTimeInterval:0.70
- target:self
- selector:@selector(updateModifier:)
- userInfo:@"control"
- repeats:NO] retain];
-
- }else if ([theEvent modifierFlags]==256) { //control up
-
- if (modifierTimer) {
- if ([modifierTimer isValid]) {
- [modifierTimer invalidate];
- }else {
- [self performSelector:@selector(popPreview:) withObject:NO afterDelay:0.46];
- }
- modifierTimer = nil;
- [modifierTimer release];
- }
- ModFlagger = 0;
- }
- }else if ([theEvent modifierFlags]==256) {
- ModFlagger = 0;
- if (modifierTimer) {
- if ([modifierTimer isValid]) {
- [modifierTimer invalidate];
- }
- modifierTimer = nil;
- [modifierTimer release];
- }
-
- }else {
- ModFlagger = -1;
- if (modifierTimer) {
- if ([modifierTimer isValid]) {
- [modifierTimer invalidate];
- }
- modifierTimer = nil;
- [modifierTimer release];
- }
- NSTimer *disTimer = [NSTimer scheduledTimerWithTimeInterval:0.2f
- target:self
- selector:@selector(disableKeyMasks:)
- userInfo:@"commandorshift"
- repeats:NO];
- }
- }
+// if (ModFlagger>=0) {
+// if (([theEvent keyCode]==58)||([theEvent keyCode]==61)) {
+// if (([theEvent modifierFlags]==524576)||([theEvent modifierFlags]==524608)) { //option down
+// modifierTimer = [[NSTimer scheduledTimerWithTimeInterval:0.65
+// target:self
+// selector:@selector(updateModifier:)
+// userInfo:@"option"
+// repeats:NO] retain];
+// }else if ([theEvent modifierFlags]==256) { //option up
+//
+// if (modifierTimer) {
+// if ([modifierTimer isValid]) {
+// [modifierTimer invalidate];
+// }else {
+// [self performSelector:@selector(popWordCount:) withObject:NO afterDelay:0.35];
+// }
+// modifierTimer = nil;
+// [modifierTimer release];
+// }
+// ModFlagger = 0;
+//
+// }
+// }else if (([theEvent keyCode]==59)||([theEvent keyCode]==62)) {
+// if (([theEvent modifierFlags]==262401)||([theEvent modifierFlags]==270592)) { //control down
+// modifierTimer = [[NSTimer scheduledTimerWithTimeInterval:0.70
+// target:self
+// selector:@selector(updateModifier:)
+// userInfo:@"control"
+// repeats:NO] retain];
+//
+// }else if ([theEvent modifierFlags]==256) { //control up
+//
+// if (modifierTimer) {
+// if ([modifierTimer isValid]) {
+// [modifierTimer invalidate];
+// }else {
+// [self performSelector:@selector(popPreview:) withObject:NO afterDelay:0.46];
+// }
+// modifierTimer = nil;
+// [modifierTimer release];
+// }
+// ModFlagger = 0;
+// }
+// }else if ([theEvent modifierFlags]==256) {
+// ModFlagger = 0;
+// if (modifierTimer) {
+// if ([modifierTimer isValid]) {
+// [modifierTimer invalidate];
+// }
+// modifierTimer = nil;
+// [modifierTimer release];
+// }
+//
+// }else {
+// ModFlagger = -1;
+// if (modifierTimer) {
+// if ([modifierTimer isValid]) {
+// [modifierTimer invalidate];
+// }
+// modifierTimer = nil;
+// [modifierTimer release];
+// }
+// NSTimer *disTimer = [NSTimer scheduledTimerWithTimeInterval:0.2f
+// target:self
+// selector:@selector(disableKeyMasks:)
+// userInfo:@"commandorshift"
+// repeats:NO];
+// }
+// }
}
- (void)updateModifier:(NSTimer*)theTimer{
diff --git a/English.lproj/MainMenu.xib b/English.lproj/MainMenu.xib
index 24a73bbb..4062966e 100644
--- a/English.lproj/MainMenu.xib
+++ b/English.lproj/MainMenu.xib
@@ -342,6 +342,15 @@
+
{213, 107}
{{0, 0}, {1920, 1058}}
@@ -1897,16 +1908,18 @@
-
+
268
{163, 96}
+
+
StatusItemView
YES
-
+
274
YES
@@ -1918,32 +1931,9 @@
2322
-
- YES
-
- YES
- Apple HTML pasteboard type
- Apple PDF pasteboard type
- Apple PICT pasteboard type
- Apple PNG pasteboard type
- Apple URL pasteboard type
- CorePasteboardFlavorType 0x6D6F6F76
- NSColor pasteboard type
- NSFilenamesPboardType
- NSStringPboardType
- NeXT Encapsulated PostScript v1.2 pasteboard type
- NeXT RTFD pasteboard type
- NeXT Rich Text Format v1.0 pasteboard type
- NeXT TIFF v4.0 pasteboard type
- NeXT font pasteboard type
- NeXT ruler pasteboard type
- WebURLsWithTitlesPboardType
- public.url
-
-
{399, 14}
-
+
@@ -2034,6 +2024,7 @@
-2147479296
{{384, 0}, {15, 304}}
+
2
_doScroller:
@@ -2054,14 +2045,15 @@
{399, 304}
-
+
+
528
-
+
274
YES
@@ -2075,7 +2067,7 @@
4352
{399, 136}
-
+
YES
{399, 153}
-
+
+
528
@@ -3454,6 +3448,7 @@
+
@@ -4542,6 +4537,14 @@
+
+ 1298
+
+
+ YES
+
+
+
@@ -4728,6 +4731,7 @@
129.ImportedFromIB2
1292.IBPluginDependency
1293.IBPluginDependency
+ 1298.IBPluginDependency
130.IBPluginDependency
130.ImportedFromIB2
131.IBPluginDependency
@@ -5115,6 +5119,7 @@
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
com.apple.InterfaceBuilder.CocoaPlugin
@@ -5325,7 +5330,7 @@
- 1297
+ 1300
@@ -5340,9 +5345,11 @@
bringFocusToControlField:
copyNoteLink:
deleteNote:
+ editNoteExternally:
exportNote:
fieldAction:
importNotes:
+ lockPreview:
multiTag:
openFileInEditor:
printNote:
@@ -5398,6 +5405,8 @@
id
id
id
+ id
+ id
@@ -5407,9 +5416,11 @@
bringFocusToControlField:
copyNoteLink:
deleteNote:
+ editNoteExternally:
exportNote:
fieldAction:
importNotes:
+ lockPreview:
multiTag:
openFileInEditor:
printNote:
@@ -5448,6 +5459,10 @@
deleteNote:
id
+
+ editNoteExternally:
+ id
+
exportNote:
id
@@ -5460,6 +5475,10 @@
importNotes:
id
+
+ lockPreview:
+ id
+
multiTag:
id
@@ -5560,6 +5579,7 @@
YES
editorStatusView
field
+ lockNoteItem
mainView
multiMarkdownPreview
notesScrollView
@@ -5581,6 +5601,7 @@
YES
EmptyView
DualField
+ NSMenuItem
ETContentView
NSMenuItem
AugmentedScrollView
@@ -5605,6 +5626,7 @@
YES
editorStatusView
field
+ lockNoteItem
mainView
multiMarkdownPreview
notesScrollView
@@ -5632,6 +5654,10 @@
field
DualField
+
+ lockNoteItem
+ NSMenuItem
+
mainView
ETContentView
diff --git a/English.lproj/Preferences.xib b/English.lproj/Preferences.xib
index bf314393..621a41c4 100644
--- a/English.lproj/Preferences.xib
+++ b/English.lproj/Preferences.xib
@@ -12,26 +12,24 @@
YES
- NSColorWell
- NSMenu
- NSSliderCell
+ NSUserDefaultsController
+ NSPopUpButton
NSButton
- NSCustomObject
- NSSlider
- NSCustomView
- NSComboBox
- NSComboBoxCell
- NSTextField
- NSWindowTemplate
+ NSMenu
NSTextFieldCell
NSButtonCell
+ NSMenuItem
NSBox
+ NSColorWell
+ NSMatrix
+ NSSlider
+ NSSliderCell
+ NSCustomView
+ NSCustomObject
NSView
+ NSWindowTemplate
+ NSTextField
NSPopUpButtonCell
- NSUserDefaultsController
- NSPopUpButton
- NSMenuItem
- NSMatrix
YES
@@ -78,7 +76,7 @@
{1e+13, 1e+13}
-
+
256
YES
@@ -87,7 +85,6 @@
12
{{0, 39}, {368, 5}}
-
{0, 0}
@@ -123,8 +120,6 @@
268
{{160, 15}, {192, 14}}
-
-
YES
68288064
@@ -140,7 +135,7 @@
6
System
controlColor
-
+
3
MC42NjY2NjY2NjY3AA
@@ -161,7 +156,6 @@
264
{{34, 9}, {121, 25}}
-
YES
@@ -186,7 +180,6 @@
264
{{32, 48}, {269, 18}}
-
YES
@@ -215,7 +208,6 @@
264
{{68, 239}, {101, 17}}
-
YES
@@ -233,7 +225,6 @@
264
{{171, 233}, {95, 26}}
-
YES