Невозможно выровнять окна при использовании переменной → Невозможно превратить {\"string\"} в тип integer
Я пытаюсь выучить AppleScript. То, что вы видите ниже, часть моего первого амбициозного проекта. Он изменен так, чтобы его можно было проверить в редакторе AppleScript, если у вас также открыто окно TextEdit.
Что делает скрипт:
- выбрать редактор из списка
- выровняйте два открытых окна
Моя проблема:
Выравнивание окон работает, только если я отклоняю переменную. Как только я заменяю переменную, возвращенную из списка (selectedEditor
) со строкой tell process "TextEdit"
оно работает.
Я надеюсь, что кто-то может обнаружить ошибку.
Код ошибки из журнала событий:
System Events got an error: Can’t make {"TextEdit"} into type integer.
Вот код:
property myEditors : {"TextEdit", "Sublime Text 2"}
set the editorList to myEditors as list
set selectedEditor to choose from list the editorList
set lngWidth to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width")
set lngHeight to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height")
set lngHalf to lngWidth / 2
set lngHeight to lngHeight - 22
tell application id "sevs"
tell process selectedEditor to tell window 1 to set {position, size} to {{lngHalf, 22}, {lngHalf, lngHeight}}
tell process "AppleScript Editor" to tell window 1 to set {position, size} to {{0, 22}, {lngHalf, lngHeight}}
end tell
2 ответа
Ошибка "Системные события получили ошибку: невозможно преобразовать {"TextEdit"} в тип integer." говорит вам проблему. {"TextEdit"} - это список с одним элементом. Это то, что вы получите от выражения "выбрать из списка". Поэтому измените это утверждение на это...
set selectedEditor to item 1 of (choose from list the editorList)
Это даст вам "TextEdit", который является строкой, в отличие от {"TextEdit"}, который является списком.
Кроме того, в этом утверждении нет необходимости, поскольку myEditors уже является списком, о чем свидетельствуют квадратные скобки. Просто используйте myEditors непосредственно в команде "выбрать из списка".
set the editorList to myEditors as list
Единственная подсказка, которую я вижу для этой ошибки, - то, что это:
msgstr "errAEIllegalIndex: индекс находится вне диапазона в операции пут"
У меня нет / собственный Marked, поэтому я не знаю его ограничений / потенциала с AppleScript. Поскольку вы новичок в AppleScript, я спрошу вас, уверены ли вы, что Marked.app не поддерживает скрипты, то есть если вы уверены, что у него нет подходящего скриптового словаря (вообще). Перетаскивание файла приложения в редактор скриптов AppleScript скажет вам об этом (либо он показывает вам словарь приложения, либо говорит, что не может его прочитать). Единственная причина использовать системные события - это то, что приложение не доступно для сценариев или очень ограничено. Большинство приложений с ограниченной скриптовостью имеют оконные объекты со свойствами.
Например, Firefox (который я сейчас использую) имеет ограниченную возможность написания сценариев и позволяет мне устанавливать границы его окон:
tell application "Firefox"
set bounds of window 1 to {137, 22, 1345, 809}
properties of window 1
end tell
... а также получить свойства своих окон (2-я строка в сообщении).
Извините, если это очевидно для вас, и вы уже определили, что у Marked нет этих функций, но это первое, что нужно проверить, и, как я уже сказал, у меня нет Marked.