I have been trying to build an Applescript to save a file from Byword to a specific file that I have created. The bit that creates the folder and the file within it works fine. But I can’t seem to get Byword to save it.
theFile
definitely exists and is writable.
I’ve tried
tell application "Byword"
activate
save document 1 in theFile as text
end tell
and save document 1 in theFile
and save document 1 as theFile
The error I get is
Can’t make «class docf» "item.md" of «class cfol» "test-the-script--again" of «class cfol» "03.blog" of «class cfol» "pages" of «class cfol» "user" of «class cfol» "grav-admin" of «class cfol» "htdocs" of «class cfol» "MAMP" of «class cfol» "Applications" of «class sdsk» of application "Finder" into the expected type.
I’d prefer to keep using Byword if possible, but if the only answer is to use some other Markdown editor, I suppose I would have to consider that.
All suggestions gratefully received.
Thanks
You’re passing it a Finder file reference, which only Finder understands.
Using what you’ve already got, you can coerce the value of theFile
to text
, which will give you an HFS path. From this, you can obtain a posix path using POSIX path of ...
.
That is probably what ByWord is expecting, although I can’t be sure as I’ve never used it. If it doesn’t like a plain file path, you can use the POSIX file
specifier to create a file object reference that isn’t specific to any particular application.
Here’s all of that in AppleScript:
set filepath to the POSIX path of (theFile as text)
tell application "Byword" to save document 1 in the filepath
--OR: save document 1 in the POSIX file filepath
Normally, you shouldn’t need to create the file beforehand. There may also be sandboxing issues if you try to save it at a location to which ByWord has no write access.
If it prefers an alias
file reference, then this is one that does have to refer to a file that already exists. You can coerce a Finder file reference directly to alias
:
set theFile to theFile as alias
tell application "Byword" to save document 1 in theFile
If possible, I’d suggest doing it using either a plain posix path, or with a POSIX file
specifier, because that will allow you to remove the part of your script that utilises Finder, which is rarely anything more than a curse on all AppleScripts and all of their children.
This works for me, saving a file to a couple of files using HFS and POSIX paths.
tell application "Byword"
--test1.md need not exist first
save document 1 in file "Macintosh HD:Users:stephen:Desktop:test1.md"
--test2.md must exist first to create an alias to it
set strPath to POSIX file "/Users/stephen/Desktop/test2.md" as alias
save document 1 in file strPath
end tell
Hope that helps.
Thank you both very much indeed. In the end, I went with chri.sk second solution, because the first gave me an error about the file being locked. The script I have, thanks to both of you, now does what I need it to do.
I confess, though, that my script still uses Finder to create the file. It may be an abomination, but it works. So, getting theText
from the clipboard and massaging it, the working script is
tell application "Finder"
set thePath to alias ":Applications:MAMP:htdocs:grav-admin:user:pages:03.blog:"
make new folder at thePath with properties {name:theText}
set newPath to thePath & theText & ":" as string
set theFile to make new file at newPath with properties {name:"item.md"}
end tell
set theFile to theFile as alias
tell application "Byword"
activate
save document 1 in the theFile
end tell