diff --git a/EcProcess.h b/EcProcess.h index 281fbbe..f465642 100644 --- a/EcProcess.h +++ b/EcProcess.h @@ -415,10 +415,13 @@ extern NSString* cmdVersion(NSString *ver); * If the same default name is registered more than once, the values * from the last registration are used, except for the case where the * cmd argument is NULL, in that case the previous selector is kept - * in the new rfegistration.
+ * in the new registration.
* This method should be called in your +initialize method, so that all * supported defaults are already registered by the time your process - * tries to respond to being started with a --help command line argument. + * tries to respond to being started with a --help command line argument.
+ * NB. defaults keys do not have to be registered (and can still be updated + * using the 'defaults' command), but registration provides a more user + * friendly interface. */ + (void) ecRegisterDefault: (NSString*)name withTypeText: (NSString*)type diff --git a/EcProcess.m b/EcProcess.m index 2a0f9a2..be319d5 100644 --- a/EcProcess.m +++ b/EcProcess.m @@ -2272,7 +2272,11 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval); - (void) ecNewDay: (NSCalendarDate*)when { - NSString *sub; + static NSDictionary *defs = nil; + NSString *sub; + NSDictionary *d; + NSEnumerator *e; + NSString *k; /* New day ... archive debug/log files into a subdirectory based on * the current date. This is yesterday's debug, so we use yesterday. @@ -2280,6 +2284,21 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval); sub = [[when dateByAddingYears: 0 months: 0 days: -1 hours: 0 minutes: 0 seconds: 0] descriptionWithCalendarFormat: @"%Y-%m-%d"]; NSLog(@"%@", [self cmdArchive: sub]); + + /* Check information left in the EcCommand domain. + */ + d = [cmdDefs volatileDomainForName: @"EcCommand"]; + e = [[d allKeys] objectEnumerator]; + while (nil != (k = [e nextObject])) + { + if ([[d objectForKey: k] isEqual: [defs objectForKey: k]]) + { + [self cmdError: @"Console defaults '%@' left for over a day." + @" Please reset ('tell %@ defaults delete %@') after updating" + @" Control.plist as required.", k, [self cmdName], k]; + } + } + ASSIGNCOPY(defs, d); } - (void) ecNewHour: (NSCalendarDate*)when @@ -2960,6 +2979,72 @@ NSLog(@"Ignored attempt to set timer interval to %g ... using 10.0", interval); } } +- (void) cmdMesgdefaults: (NSArray*)msg +{ + if ([msg count] == 0) + { + [self cmdPrintf: + @"temporarily overrides defaults/Control.plist settings"]; + } + else + { + if ([[msg objectAtIndex: 0] caseInsensitiveCompare: @"help"] + == NSOrderedSame) + { + [self cmdPrintf: @"\nWithout parameters, the defaults command is "]; + [self cmdPrintf: @"used to list the current defaults overrides.\n"]; + [self cmdPrintf: @"With the 'delete' parameter followed by a name,"]; + [self cmdPrintf: @"the command is used to revert a default.\n"]; + [self cmdPrintf: @"With the 'write' parameter followed by a name"]; + [self cmdPrintf: @"and value, the command sets a default.\n"]; + [self cmdPrintf: @"With the 'read' parameter followed by a name,"]; + [self cmdPrintf: @"the command is used to show a default.\n"]; + } + else if ([msg count] > 2) + { + NSString *mode = (NSString*)[msg objectAtIndex: 1]; + NSString *key = (NSString*)[msg objectAtIndex: 2]; + id val; + + if ([mode caseInsensitiveCompare: @"delete"] == NSOrderedSame) + { + [cmdDefs setCommand: nil forKey: key]; + } + else if ([msg count] > 2 + && [mode caseInsensitiveCompare: @"set"] == NSOrderedSame) + { + val = [msg objectAtIndex: 3]; + [cmdDefs setCommand: val forKey: key]; + } + val = [cmdDefs objectForKey: key]; + [self cmdPrintf: @"The default setting for '%@' is now\n%@\n", val]; + } + else + { + NSDictionary *d = [cmdDefs volatileDomainForName: @"EcCommand"]; + NSEnumerator *e = [d keyEnumerator]; + NSString *k; + + [self cmdPrintf: @"Console default settings:\n"]; + k = [e nextObject]; + if (nil == k) + { + [self cmdPrintf: @" None.\n"]; + } + else + { + while (nil != k) + { + id v = [d objectForKey: k]; + + [self cmdPrintf: @" %@ = %@\n", k, v]; + k = [e nextObject]; + } + } + } + } +} + - (void) cmdMesghelp: (NSArray*)msg { NSEnumerator *e;