BBEdit and Markdown: Insert End Reference Script
As mentioned previously, I have a love-hate relationship with AppleScript.1 It's an insanely bad language for the importance it has garnered on my system. But sometimes it's all I've got. In this case, I wanted a pop-up menu of all of my end references in the current BBEdit document. I took it a bit further and ended up with something that I truly like.
try tell application "BBEdit" set results to find "^\\[.*?\\]: http(s?):\\/\\/.*" options {search mode:grep, starting at top:true, wrap around:true, returning results:true} searching in {text of front text document} set ResultList to found matches of results set choiceList to {} repeat with refLink in ResultList set end of choiceList to refLink's match_string end repeat set pasteLink to (choose from list choiceList with prompt "Choose a Link:") as text set startDelim to AppleScript's text item delimiters set AppleScript's text item delimiters to {":"} set linkName to text item 1 of pasteLink set AppleScript's text item delimiters to startDelim set selection to linkName end tell end try
The script leverages BBEdit's grep search to get a list of all Markdown reference style links. A popup menu is then displayed.

Selecting the appropriate item inserts the reference marker at the current cursor in BBEdit. This is perfect for the way I write. I typically gather a large number of references first and then start writing. As I write, I can now quickly insert the reference pointer inline.

Update: If you replace find string with this line the script now works for footnotes instead.
set results to find "(^\\[\\^.*?\\]):(.*)" options {search mode:grep, starting at top:true, wrap around:true, returning results:true} searching in {text of front text document}
Update 2: Sorry for the messy code. I've cleaned it up a bit. Did I mention I have a day job, a three year-old and a wife in Law School (night school). Excuses, excuses.
- Mostly hate. ↩