Brett Terpstra just posted a very nice tool for inserting dates using Natural Language. His post is definitely worth a read.
Given my preference for Python and my previous experience with Natural Language Processing, I decided to implement something similar through a Keyboard Maestro trigger.
I have a macro that pops up a text box and asks for the date language you would like to interpret. Apparently KBM does have a leg up on TextExpander, in that it can accept input to a shell script or applescript. KBM truly is a fantastic tool.
I ended up with a really easy workflow that seems to work everywhere.
If I type "ndate" I get a pop-up:
I type a string and hit return.
There is no step 3.
I then get the string "2011-09-02 09:00:00" dropped in as a replacement.
Here's the macro design:
Here's the shell script (mostly python) that does all of the work. Don't forget the hash-bang at the beginning.
#!/usr/bin/env python import os import sys import re import parsedatetime.parsedatetime as pdt import parsedatetime.parsedatetime_consts as pdc import datetime # Define Globals pyDate = os.getenv('KMVAR_myDate') # Function for parsing a string and returning a datetime value def datetimeFromString( s ): c = pdc.Constants() p = pdt.Calendar(c) result, what = p.parse( s ) dt = 0 # See: http://stackoverflow.com/questions/1810432/handling-the-different-results-from-parsedatetime # what was returned (see http://code-bear.com/code/parsedatetime/docs/) # 0 = failed to parse # 1 = date (with current time, as a struct_time) # 2 = time (with current date, as a struct_time) # 3 = datetime if what in (1,2,3): # result is struct_time dt = datetime.datetime( *result[:6] ) if what == 0: # Failed to parse raise ValueError, ("Don't understand date '"+s+"'") dt = "Unrecognized Date" return dt NLPDate = datetimeFromString(pyDate) print NLPDate