Как получить имя файла без расширения от Omnigraffle? - PullRequest
1 голос
/ 09 февраля 2012

Я пытаюсь получить имя файла без расширения текущего файла документа в 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

Это дает мне следующую ошибку: 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".

Я нашел несколько связанных вопросов и страниц, но я немного растерялся и действительно не могу понять, почему это не работает.

Спасибо за вашу помощь!

Ответы [ 2 ]

2 голосов
/ 09 февраля 2012

Вам нужно изменить его на следующее:

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

«путь к переднему документу» возвращает POSIX-путь к файлу, который является простой строкой. Чтобы иметь возможность получить информацию об элементе, Finder будет хотеть ссылаться на псевдоним файла, о котором идет речь. Когда вы передаете простую строку, она получает ошибку, потому что простая строка не имеет этих свойств. Чтобы получить псевдоним, необходимо сначала ввести простой путь к файлу POSIX, а затем принудительно привести файл POSIX к псевдониму.

Если вы не определили эти переменные где-либо еще, вам необходимо удалить подчеркивания в {displayed_name, name_extension, extension_hidden}. Когда вы смотрите на «скомпилированный» код с оставленными подчеркиваниями, он выглядит следующим образом:

enter image description here

Итак, AppleScript интерпретирует displayed_name как переменную, а не свойство. Теперь хорошо, если вы определили эти переменные в другом месте, например в верхней части вашего скрипта в свойствах. Но если нет, вам нужно удалить подчеркивания, так как имена свойств элементов Finder не имеют подчеркивания. При удалении подчеркиваний окраска выглядит правильно (свойства имеют фиолетовый цвет, а переменные - зеленый).

enter image description here

Обратите внимание, что это все равно не даст вам имя файла без расширения. Чтобы получить это, вам нужно сделать что-то похожее на то, что я сделал в добавленной строке, используя text n thru m

if (_extension ≠ missing value) then
    set baseName to text 1 thru -((length of _extension) + 2) of _filename
end if
1 голос
/ 09 февраля 2012

Во-первых, вам нужно использовать правильные метки для свойств любого приложения, на которое вы нацеливаетесь - их можно найти в словаре сценариев приложения. Следующая проблема заключается в том, что Finder ничего не знает о путях POSIX, что, по-видимому, то, что OmniGraffle возвращает для пути к документу, поэтому вам нужно привести этот путь к чему-то, что Finder знает, например, псевдоним.

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