0

我的目标是使用 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
4

1 回答 1

0

尝试:

    tell application "System Events"
    tell process "Finder"
        if not (exists text field 1) then click menu item "Move to Trash" of menu 1 of menu bar item "File" of menu bar 1
    end tell
end tell

另一种方法是:

       tell application "Finder"
    if selection is not {} then
        tell application "System Events" to tell process "Finder"
            if (exists text field 1) then
                keystroke (ASCII character 8)
            else
                tell application "Finder" to delete selection
            end if
        end tell
    end if
end tell
于 2012-05-26T04:18:13.353 回答