概要
activeProcesses
)appList
)activeProcesses
中的应用来自appList
的应用创建新列表(activeEditorList
) =>第一个问题 activeEditorList
中activeProcesses
中正在运行的文本编辑器的数量
appList
上运行文本编辑器,我想返回它的名称activeEditorList
这是我的脚本的第一部分:从所有正在运行的应用程序中创建一个新列表。最后一块拼图丢失了。我的输出是:
{item 1 of {"nvALT", "FoldingText", "Byword"}, item 2 of {"nvALT", "FoldingText", "Byword"}}`
而不是
{"nvALT", "iTerm"}
这是我的剧本:
set activeEditorsList to {}
set appList to {"nvALT", "FoldingText", "Byword"}
-- Generate variable with running apps
tell application "System Events"
set activeProcesses to (name of every process)
end tell
-- Generate list of running text editors
repeat with appName in appList
if (activeProcesses contains appName) is true then
set activeEditor to appName
copy appName to the end of activeEditorsList
end if
end repeat
return activeEditorsList
问题1:第12行set activeEditor to appName
无法正常工作,我的徒劳无益的尝试也无法发挥作用。
当activeEditorsList
变量准备就绪时,我想再次使用它来查明是否只有一个文本编辑器正在运行(=>返回名称)或多个正在运行(=>提示选择)列表中的一个并返回其名称。)
这就是我想象匹配的样子:
set appList to {"nvALT", "FoldingText", "Byword"}
set activeEditorsList to {"nvALT", "Byword"}
on count_matches(this_list, this_item)
set the match_counter to 0
repeat with i from 1 to the count of this_list
if item i of this_list is this_item then ¬
set the match_counter to the match_counter + 1
end repeat
return the match_counter
end count_matches
count_matches(appList, (items of activeEditorsList))
问题2:上述代码的问题是,在最后一行(items of activeEditorsList)
没有按照我预期的方式工作 - 尽管放"nvALT"
在那里工作。
然后我需要写一些内容...... if count_matches 0 then cancel, elif 1 return name, else prompt to choose from list
。
我还不知道如何匹配计数,但我想我可以弄明白(随着时间的推移)。另一方面,提示是我已经准备好的一件小事:
set activeEditorsList to {"nvALT", "Byword"}
tell me to set selectedEditor to choose from list activeEditorsList
return selectedEditor as text
我要感谢你的一些指导。
答案 0 :(得分:0)
(根据我的评论,我只会解决你的第一个问题)
我不确定set activeEditor to appName
不起作用。您将变量activeEditor
的值设置为应用程序的名称。这对我有用。 (我也对代码进行了一些表面的编辑。)
set activeEditorsList to {}
set appList to {"Sublime Text 2"}
tell application "System Events"
set activeProcesses to (name of every process)
end tell
repeat with appName in appList
if appName is in activeProcesses then
set activeEditor to appName
set end of activeEditorsList to appName
end if
end repeat
activeEditor
--> {item 1 of {"Sublime Text 2"}}
如果您尝试实际激活该编辑器,则不是这样做的方法。同样,您只是分配给变量。
答案 1 :(得分:0)
添加第二个答案来解决整个脚本而不是单个问题。
对于脚本的第一部分,您只需要获取当前正在运行的预定义应用程序列表。您已经使该部分正常工作:
set activeEditorsList to {}
set appList to {"nvALT", "FoldingText", "Byword"}
-- Generate variable with running apps
tell application "System Events"
set activeProcesses to (name of every process)
end tell
-- Generate list of running text editors
repeat with appName in appList
if appName is in activeProcesses then
set end of activeEditorsList to appName
end if
end repeat
对于第二部分,您不需要匹配任何内容。您已经使用activeEditorsList
完成了该操作。你只需要使用Applescript的count
命令
editorCount = (count activeEditorsList)
if editorCount = 1 then
return item 1 of activeEditorsList
else if editorCount > 1 then
return choose from list activeEditorsList
else
-- Handle 0 items
end if
作为旁注,对于0编辑器的情况,听起来这个代码在子例程中。您可能要么抛出错误,要么返回空类型值(null
,missing value
,""
),并取消调用该例程的脚本。