I'm new to Keyboard Maestro and so I'm sharing this macro for feedback, and in case anyone might find it useful.
I use NVAlt as a hub to my notes, organising them in Dropbox, but also syncing to Simplenote (not sure why these days…). While NVAlt is akin to my notes database, I don't like starting new notes in NVAlt, and prefer to start them in BBEdit.
I wrote this macro to simplify saving a new file as a note in the style where the note title begins as the first line (à la Simplenote), but ultimately is saved as the file name on disk.
I have this macro mapped to ⌘S since I often save new files as notes. The AppleScript determines whether the file is on disk. If it is, it exits, and KBM triggers the normal BBEdit 'Save' menu. If it is not, it saves the text of the first line, then prompts whether to save as a note or normal file.
In the case of a note, first an AppleScript deletes the first two lines of the file, then KBM triggers the 'Save As…' menu item, types a ~ to get the Go To panel. It enters the Notes folder of my Dropbox, then sets the name of the file to the first line/title with a .txt extension. The user is then left to press the final 'Save' button.
Any feedback would be greatly appreciated; there's still tons left for me to learn with Keyboard Maestro. Cheers.
Save Note.kmmacros (10.5 KB)
Hello Ryan,
I would go about that a little differently myself.
This will instantly save as a note-file if unsaved — if already on-disk it will save.
There is error-checking to prevent overwriting an existing document.
------------------------------------------------------------
# Auth: Christopher Stone
# dCre: 2015/08/30 12:55
# dMod: 2015/08/30 13:07
# Appl: BBEdit
# Task: Save as note file for nvAlt.
# Tags: @Applescript, @Script, @BBEdit, @Save, @Note, @nvAlt
------------------------------------------------------------
try
set dropBoxNoteFolder to "~/Dropbox/Notes/"
set homeFolderPosix to POSIX path of (path to home folder)
if dropBoxNoteFolder starts with "~/" then set dropBoxNoteFolder to homeFolderPosix & (text 3 thru -1 of dropBoxNoteFolder)
if not exTant(dropBoxNoteFolder) then
do shell script "mkdir -p " & quoted form of dropBoxNoteFolder
end if
tell application "BBEdit"
tell front document
if on disk then
save
else
set line1Text to contents of line 1
if length of line1Text > 70 then set line1Text to text 1 thru 70 of line1Text
set line1Text to line1Text & ".txt"
set fileCheckPath to dropBoxNoteFolder & line1Text
if exTant(fileCheckPath) of me then
error "A file at this path already exists:" & return & return & fileCheckPath
else
save it to POSIX file fileCheckPath
delete text of (lines 1 thru 2)
end if
end if
end tell
end tell
on error e number n
set e to e & return & return & "Num: " & n
if n ≠ -128 then
try
tell application (path to frontmost application as text) to set ddButton to button returned of ¬
(display dialog e with title "ERROR!" buttons {"Copy Error Message", "Cancel", "OK"} ¬
default button "OK" giving up after 30)
if ddButton = "Copy Error Message" then set the clipboard to e
end try
end if
end try
------------------------------------------------------------
--» HANDLERS
------------------------------------------------------------
on exTant(_path) # Takes an HFS, Posix, or ~/Posix path as input.
try
if _path is "~" or _path is "~/" then
set _path to (POSIX path of (path to home folder as text))
else if _path starts with "~/" then
set _path to (POSIX path of (path to home folder as text)) & text 3 thru -1 of _path
end if
if _path starts with "/" then
alias POSIX file _path
else
alias _path
end if
return true
on error
return false
end try
end exTant
------------------------------------------------------------
I would give it a hotkey like Cmd-Shift-Ctrl-N (for note) instead of hijacking the Cmd-S key.
Instead of a simple error-check for an existing document name I would use a date-time stamp to create a unique new document name.
-Chris
Thanks for the feedback! I’m relatively new to AppleScript, so I can learn a lot from your script; I appreciate it.