我的目标是使用 OSX 的 Finder 使 Delete 键(不带任何修饰符)将选定的文件移动到垃圾箱,类似于 Windows 资源管理器。我已经成功地使用了一个名为 Spark 的实用应用程序来做到这一点。Spark 允许我仅在 Finder 中分配 Delete 键来执行某些操作。我可以让它键入 Finder 快捷键(command-backspace),或者激活 File > Move to Trash 菜单项,或者运行 AppleScript。在每种情况下,文件都会成功移动到垃圾箱。它运作良好......有点太好了。
如果我正在重命名文件并按 Delete 键,则文件将被移至回收站,而不是光标前的字母被删除。我想不出任何聪明的方法来解决这个问题。我唯一能想到的是使用 AppleScript 来确定文本编辑器是否在 Finder 中打开,以便用户重命名文件……或者,简单地说,确定用户是否在 AppleScript 中重命名文件。有些东西告诉我这超出了 AppleScript 的能力。可以做到吗?任何其他建议都将受到欢迎。谢谢。
更新:
感谢 adayzdone,我现在有了一个工作脚本。在Spark中为 Finder 创建一个热键,为其分配 Delete 键,并将此脚本用作操作:
tell application "System Events"
tell process "Finder"
if not (exists text field 1) then
tell menu bar 1
tell menu bar item "File"
tell menu "File"
click menu item "Move to Trash"
end tell
end tell
end tell
end if
end tell
end tell
更新 2:
这是基于 adayzdone 的更清洁版本的更新脚本。当您重命名文件并按删除时,我添加了一行来重新发出删除键。但是它有一个问题:每删除一个字符,您就必须按两次删除键。此外,完成重命名文件后,您可能会使事情处于奇怪的状态:如果您按 delete 删除文件,它可能无法正常工作......需要在事情恢复正常之前再次按下 delete 键。我认为问题在于从 Spark 处理的事件中发出删除键。我会尝试找到解决方案。
tell application "System Events"
tell process "Finder"
if exists text field 1 then
keystroke "d" using {control down}
else
click menu item "Move to Trash" of menu 1 of menu bar item "File" of menu bar 1
end if
end tell
end tell