But there was an issue with it in terms of prompting the user to give the script access to Calendars. This version fixes that, so if Alex is still around, he might want to modify his code accordingly.
The only advantages of this method over something like Christian's approach are that it includes recurring events, it doesn't require Calendars to be running, and it's considerably faster. The disadvantages are that it's a bit more complex, and it requires Mavericks or Yosemite.
use AppleScript version "2.3.1"
use scripting additions
use framework "Foundation"
use framework "EventKit"
its titleOfTodaysEventsForCalendarsNamed:{"Work", "Home"}
on titleOfTodaysEventsForCalendarsNamed:listOfCalNames
-- create event store and get the OK to access Calendars
set theEKEventStore to current application's EKEventStore's alloc()'s init()
theEKEventStore's requestAccessToEntityType:0 completion:(missing value)
-- check if app has access; this will still occur the first time you OK authorization
set authorizationStatus to current application's EKEventStore's authorizationStatusForEntityType:0 -- work around enum bug
if authorizationStatus is not 3 then
display dialog "Access must be given in System Preferences" & linefeed & "-> Security & Privacy first." buttons {"OK"} default button 1
tell application "System Preferences"
activate
tell pane id "com.apple.preference.security" to reveal anchor "Privacy"
end tell
error number -128
end if
-- get calendars that can store events
set theCalendars to theEKEventStore's calendarsForEntityType:0
-- get the calendars whose title is in the passed list of names
set theNSPredicate to current application's NSPredicate's predicateWithFormat_("title IN %@", listOfCalNames)
set calsToSearch to theCalendars's filteredArrayUsingPredicate:theNSPredicate
-- create start date and end date for occurences
set nowDate to current application's NSDate's |date|()
-- get start of day then end of day
set startNSDate to current application's NSCalendar's currentCalendar()'s startOfDayForDate:nowDate
set endNSDate to current application's NSDate's dateWithTimeInterval:(1 * days - 1) sinceDate:startNSDate
-- find matching events
set thePred to theEKEventStore's predicateForEventsWithStartDate:startNSDate endDate:endNSDate calendars:calsToSearch
set theEvents to (theEKEventStore's eventsMatchingPredicate:thePred)
-- sort by date
set theEvents to theEvents's sortedArrayUsingSelector:"compareStartDateWithEvent:"
-- return title property, called description in AS
return (theEvents's valueForKey:"title") as list
end titleOfTodaysEventsForCalendarsNamed: