charlax
charlax

Reputation: 26049

How to get filename without extension from Omnigraffle?

I'm trying to get the filename without the extension of the current document file in Omnigraffle Professional 5.

tell application "OmniGraffle Professional 5"
    set _document to front document
    set _path to path of _document

    -- Get filename without extension
    tell application "Finder"
        set {_filename, _extension, _ishidden} to the
             {displayed_name, name_extension, extension_hidden} of the _path
    end tell
end tell

This gives me the following error: error "Can’t get displayed_name of \"/Users/ca/Downloads/Feb 8.graffle\"." number -1728 from displayed_name of "/Users/ca/Downloads/Feb 8.graffle".

I found some related questions and pages, but I'm a bit lost and really can't understand why it does not work.

Thanks for your help!

Upvotes: 1

Views: 1180

Answers (2)

NSGod
NSGod

Reputation: 22948

You'd need to change it to the following:

tell application "OmniGraffle Professional 5"
    set _document to front document
    set _path to path of _document

    -- Get filename without extension
    tell application "Finder"
    set {_filename, _extension, _ishidden} to the ¬
               {displayed name, name extension, extension hidden} ¬
                of ((the _path as POSIX file) as alias)
    end tell
    if (_extension ≠ missing value) then
        set baseName to text 1 thru -((length of _extension) + 2) of _filename
    end if

end tell

"path of front document" returns the POSIX path of a file, which is just a plain string. To be able to get information on an item the Finder will want an alias reference to the file in question. When you pass a plain string it gets an error because a plain string won't have those properties. To get an alias, you need to coerce the plain path first to a POSIX file and then coerce the POSIX file to an alias.

Unless you have defined these variables elsewhere, you need to remove the underscores in {displayed_name, name_extension, extension_hidden}. When you look at the "compiled" code with those underscores left in, it looks like in the following image:

enter image description here

So, the AppleScript is interpreting displayed_name to be a variable, not a property. Now, that's fine if you've defined those variables elsewhere, such as at the top of your script in properties. But if not, you need to remove the underscores, as the property names of Finder items don't have underscores in them. When you remove the underscores, the coloring appears correct (properties are purple with the variables being green).

enter image description here

Note that that still won't give you the filename without an extension. To get that, you'd need to do something like I did in the added line using text n thru m

if (_extension ≠ missing value) then
    set baseName to text 1 thru -((length of _extension) + 2) of _filename
end if

Upvotes: 2

user866649
user866649

Reputation:

First, you need to use the correct labels for the properties of whatever application you are targeting - these can be found in the application scripting dictionary. The next problem is that the Finder doesn't know anything about POSIX paths, which is apparently what OmniGraffle is returning for the document path, so you need to coerce the path into something that the Finder does know about, such as an alias.

tell application "Finder"
    set {_filename, _extension, _ishidden} to the {displayed name, name extension, extension hidden} of (_path as POSIX file as alias)
end tell

Upvotes: 1

Related Questions