Applescript 从码头中删除项目
Posted
技术标签:
【中文标题】Applescript 从码头中删除项目【英文标题】:Applescript to remove items from dock 【发布时间】:2019-05-13 23:28:34 【问题描述】:我正在尝试从扩展坞中移除(所有)项目。我可以像这样按名称删除它们:
tell application "System Events"
tell UI element "Launchpad" of list 1 of process "Dock"
perform action "AXShowMenu"
click menu item "Remove from Dock" of menu 1
end tell
end tell
但我想提取当前项目的列表并对其进行迭代。 This stack overflow question 似乎涵盖了如何获取列表。我想做的是调整上面的代码以在循环内运行。我猜想在循环内引用列表的当前项目将使用“thisRecord”完成。我想我误解了如何将“thisRecord”转换为我可以在系统事件中引用的东西。
set plistpath to (path to preferences folder as text) & "com.apple.dock.plist"
tell application "System Events"
set plistContents to contents of property list file plistpath
set pListItems to value of plistContents
end tell
set persistentAppsList to |persistent-apps| of pListItems
set dockAppsList to
repeat with thisRecord in persistentAppsList
set end of dockAppsList to |file-label| of |tile-data| of thisRecord
tell application "System Events"
tell UI element application thisRecord
perform action "AXShowMenu"
click menu item "Remove from Dock" of menu 1
end tell
end tell
end repeat
【问题讨论】:
【参考方案1】:作为替代方案...这是一种更直接的方法来删除 Dock 上的持久性应用程序,该应用程序位于 @987654322 的 persistent-apps
key 中@文件:
在终端中,首先备份目标文件:
cd ~/Library/Preferences
cp -a com.apple.dock.plist com.apple.dock.plist.bak
现在要删除持久性应用程序,请使用以下复合命令:
defaults delete com.apple.dock persistent-apps; killall Dock
如果以后要恢复备份,请使用以下复合命令:
cd ~/Library/Preferences; rm com.apple.dock.plist; cp -a com.apple.dock.plist.bak com.apple.dock.plist; killall Dock
如果出于某种原因您需要使用 AppleScript 执行此操作,您可以使用 do shell script
command 来运行这些 shell 命令。
注意:在您的 OP 中,您说“我正在尝试从扩展坞中移除(所有)项目。”而您提供的代码只关注persistent-apps
key下存储的应用程序。还有其他项目可以显示在Dock上,第一个是默认的persistent-others
,它有下载 堆栈 以及您添加到该部分的其他项目。然后在 macOS Mojave 中,recent-apps
显示在 Dock 上的上述两个部分(按 key 名称)之间。同样的前提也可以用于这些键,在defaults delete ...
复合命令中用persistent-others
或recent-apps
代替persistent-apps
。
【讨论】:
我知道我要求的是 applescript,但我真的很喜欢 2 行答案的简洁和简单。 @jorgus,正如我在回答中提到的......“如果出于某种原因您需要使用 AppleScript 执行此操作,您可以使用do shell script
命令来运行这些shell命令。”【参考方案2】:
最好先备份“com.apple.dock.plist”文件。以下两行 AppleScript 代码会将您当前的 com.apple.dock.plist 文件复制到您的桌面。如果您想将 Dock 图标恢复到运行本文第二个脚本之前的状态,这将派上用场。
set plistpath to (path to preferences folder as text) & "com.apple.dock.plist"
tell application "Finder" to duplicate alias plistpath to desktop
此 AppleScript 代码适用于我使用最新版本的 macOS Mojave。
set plistpath to (path to preferences folder as text) & "com.apple.dock.plist"
tell application "System Events"
set plistContents to contents of property list file plistpath
set pListItems to value of plistContents
end tell
set persistentAppsList to |persistent-apps| of pListItems
set dockAppsList to
-- Gets app names and adds them to dockAppsList
repeat with i from 1 to count of persistentAppsList
set thisItem to item i of persistentAppsList
set appName to |file-label| of |tile-data| of thisItem
set end of dockAppsList to appName
end repeat
-- Loops through each app in dockAppsList and removes each app from Dock
repeat with thisRecord in dockAppsList
tell application "System Events"
tell UI element thisRecord of list 1 of process "Dock"
try
perform action "AXShowMenu"
click menu item "Options" of menu 1
click menu item "Remove from Dock" of menu 1 of menu item "Options" of menu 1
on error
try
perform action "AXShowMenu"
click menu item "Remove from Dock" of menu 1
end try
end try
end tell
end tell
end repeat
我意识到我可以将所有内容都包含在一个大的重复循环中。我认为,为了这个脚本的目的,将两个循环事件分开会更好,以防脚本中的其他地方您可能想要参考 dockAppsList
的项目,而不是“从扩展坞中删除所有”您可能只想从扩展坞中删除 dockAppsList
的第 1 到第 5 项。
【讨论】:
如果你问我,这段代码似乎有点破坏性。最好先备份“com.apple.dock.plist”文件 ^ 谢谢,你能提供一个语法示例吗?以上是关于Applescript 从码头中删除项目的主要内容,如果未能解决你的问题,请参考以下文章
在 Apple Music 中打开/搜索 Spotify 曲目(使用 Applescript)