我尝试使用AppleScript从Mac app Things输出待办事项列表。
但是我收到语法错误: 预期的表达但发现“到”。
由于Things使用名称“to dos”而AppleScript不喜欢这样,因为to
是保留关键字。如果重复代码直接位于tell
语句内而不是函数处理程序中,则它没有问题。
有什么方法吗?
set output to ""
on getTodos(listName)
repeat with todo in to dos of list listName
set todoName to the name of todo
set output to output & todoName
end repeat
end getTodos
tell application "Things"
getTodos("Inbox")
getTodos("Today")
end tell
甚至可以这样做吗?
还有更好的方法吗?
答案 0 :(得分:4)
当然,这很容易实现。问题是在tell application "Things" ... end tell
块之外,AppleScript不知道它内部会有什么特别之处,甚至两者都看不出来。您需要做的就是将tell
块移到on getTodos(listName) ... end getTodos
:
on getTodos(listName)
tell application "Things"
repeat with todo in to dos of list "Inbox"
set todoName to the name of todo
set output to output & todoName
end repeat
end tell
end getTodos
您也可以将tell
替换为using terms from
;我认为这应该有效。此外,您永远不会使用listName
- 您的意思是将"Inbox"
替换为listName
吗?
但是,您应该能够用单行替换getTodos
on getTodos(listName)
tell application "Things" to get the name of the to dos of list listName
end getTodos
这种快捷方式是AppleScript擅长的事情之一。另请注意,此新版本不会修改output
,只会返回列表;无论如何,我认为这是一个更好的决定,但你总是可以做set output to output & ...
。
答案 1 :(得分:0)
我认为问题在于AppleScript不知道您正在尝试在处理程序中使用特定于事物的术语。尝试将repeat
放在using terms from application Things
块中,如下所示:
on getTodos(listName)
using terms from application "Things"
repeat with todo in to dos of list "Inbox"
set todoName to the name of todo
set output to output & todoName
end repeat
end using terms from
end getTodos