nvremind + Day One and more
In case you missed it this weekend, I wrote a little script called “nvremind” (pronounced “nevermind”). It scans folders of text files for occurrences of @remind(YYYY-mm-dd) tags and triggers reminders for you in Reminders.app, by email, in Notification Center, or any combination of those.
I published a big nvremind update (official 1.0) today. It turned into a semi-serious project somewhere along the way. This, however, will likely be the last major feature update to it, as I’ve taken the idea and started working on a more general version of the concept as a commercial app. I think there’s a lot of potential for it. In the meantime, this update makes the script robust enough to fulfill the original mission quite well.
The biggest deal (to me) is Day One support. You can stick reminders into any entry now, and they’ll be picked up (even on older entries if the remind date is new). You just need to use the path to your entries folder as the last argument. Be sure to quote it if it has spaces. If you store your Journal in iCloud and want a shortcut to finding it, run this command in Terminal (copy/paste the whole line) to search for it and copy it to your clipboard:
curl -sS https://raw.github.com/gist/5733480 | ruby
In order to work around Day One’s automatic parsing of @handles, nvremind can now use any prefix. There just needs to be a non-whitespace character before the “remind()” string, so “$remind()”, “!remind()”, “*remind()” will all work.
In Day One, if a reminder is on its own line and has no override title, the first 30 characters of the first line of the entry will be used as the reminder title. This is necessary because Day One entries don’t have titles and the filenames are just UUID strings. Leading “#” and “>” marks are stripped from the output in case your first line is a Markdown headline. The only changes nvremind will make to your Day One entries (or any file) is changing “remind” to “reminded” within tags so they don’t trigger again. Note that you can disable all changes to your file with the
Day One support also means Slogger support. If you use Slogger, you can include a reminder in any social network post and have it remind you after Slogger runs. You can even call nvremind as part of your scheduled Slogger task to have reminders posted immediately after the run. As an example, you could include
$remind(2013-06-08 "Check out nvremind") anywhere in a Pinboard bookmark description and get a reminder called “Check out nvremind” posted later on. (See the notes below for how the “title” override syntax works).
You can also use multiple paths separated by commas (no spaces) and search in several folders at once. For example, here’s how my command in LaunchControl looks when running on both nvALT and Day One and creating Reminder.app reminders:
/usr/bin/ruby /usr/local/bin/nvremind.rb -m "~/Dropbox/nvALT2.2,~/Library/Mobile Documents/2U8NG8S4G2~com~dayoneapp~dayone/Documents/Journal_dayone/entries"
Here’s the whole changelog:
- Works with any prefix, not just “@”. This is to allow use in apps like Day One that have different uses for @tags. Any character will work (!remind, $remind), there just has to be something immediately before “remind”
- Works with Day One, just pass it the path to the entries folder within your Journal
- If the tag is inside of quotes or brackets, those will be stripped from the reminder title
If you include a double-quoted string at the end of the remind tag value, it will override the default reminder title.
@remind(2013-06-06 09:00 "This is the override")would create a reminder called This is the override, ignoring any other text on the line or the name of the file.
Additional text on the line or the entire note (in the case of a @remind tag on its own line) will still be included in the note, if the notification method supports that.
- You can specify a list for Reminders.app using
--reminder-list "List name". If you leave this blank, it will default to “Reminders” or fall back to the first list available.
- Won’t schedule the reminder if the same line contains @done or @canceled (also recognizes @cancelled)
- Removes leading -, * or + so you can use it within Markdown lists and still get nicely-formatted reminder messages
- Don’t include line number in file link (that just breaks it for 90% of the population)
- Use a remind date 1 minute in the future to allow iOS notifications when using Reminders.app
That should cover it. Grab the update below, and see the project page for more info. Feel free to leave issues/requests on GitHub, but I can’t promise I’ll be quick in responding. Never hurts to try.
A background utility to scan text files for reminder tags with timestamps and generate a variety of notifications for them.
Updated 01/15/14. Changelog