Невозможно выровнять окна при использовании переменной → Невозможно превратить {\"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.

Другие вопросы по тегам