Есть ли в AppleScript какой-либо способ использовать «X каждого», чтобы получить несколько свойств каждого объекта для создания записи?

Скриптом можно:

tell application "Safari"
    set urls to URL of every tab of every window
end tell

при выполнении получить все URL-адреса каждой вкладки каждого окна (двумерный список)

Result:
 {{"http://domain1", "http://domain2", ...}, {"http://domain3", "http://domain4", ...}, {...}}

Но возможно ли это с:

tell application "Safari"
    set (urls & name) to URL of every tab of every window
end tell

чтобы получить запись вместо списка:

Result:
 {{{url: "http://domain1", name: "domain1 - foo"}, {url: "http://domain2", name: "domain2 - bar2"}, {...}}, {{url: "http://domain3", name: "domain3 - foo3"}, {url: "http://domain4", name: "domain4 - bar4"}, {...}}}

Возможно ли это, или я должен использовать только repeat?

Ответы (1)

Невозможно получить запись с одним спецификатором объекта, но можно получить список:

tell application "Safari"
    {URL, name} of tabs of windows
end tell
-- {{{"http://url1", "title 1"}, {"http://url2", "title 2"}}}

Для записи можно использовать цикл повтора:

set r to {}
tell application "Safari"
    repeat with t in tabs of windows
        set end of r to {|url|:URL of t, |name|:name of t}
    end repeat
end tell
r
-- {{|url|:"http://url1", |name|:"title 1"}, {|url|:"http://url2", |name|:"title 2"}}
большой! можно ли получить все это с помощью {|safari|: {{|window_1|: {|url|: "http://url1", |name|: "title 1"}, {|url|:"http://url2", |name|:"title 2"}},{|window_2|: {|url|: "http://url3", |name|: "title 3"}, {|url|:"http://url4", |name|:"title 4"}}}}? Чтобы я мог преобразовать запись в json (например, с помощью JSON Helper) и при этом иметь структуру окон сафари? Я написал скрипт для всего этого, чтобы получить строку на основе (не на основе записей/списков, что я хотел бы иметь), и это около 200 строк кода с 3 подпрограммами, и это выглядит некрасиво даже для меня
Если я тестирую так: {|safari|: {|window1|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}} & {|safari|: {|window2|: {{|url1|: "http1", |name1|: "title1"},{|url2|: "http2", |name2|: "title2"},{|url3|: "http3", |name3|: "title3"}}}}он возвращает только: {safari:{window1:{{url1:"http1", name1:"title1"}, {url2:"http2", name2:"title2"}, {url3:"http3", name3:"title3"}}}}а не объединенный вариант, где есть списокwindows
Двойные фигурные скобки (например, список): {|safari|: -->{{<-- |window1|: ...не вносят никаких изменений
извините за столько комментариев не по теме, но я почти решил это для себя: как установить ключ записи во время выполнения? так set end of w_l to {|window & "_" & window_i :t_l}?