AppleScript 脚本两个半

Author Avatar
Oᴜʏᴀɴɢ 9月 13, 2018
  • 在其它设备中阅读本文章

AppleScript 与我的需求

AppleScript 是苹果开发的一种脚本语言,语法结构和自然语言类似,主要用来控制和运行 macOS 中应用程序。在 macOS 升级与发展的同时,也逐渐兼容 JavaScript 进行操作,实现与 AppleScript 相同的功能,也方便现有开发者们(主要是前端开发者)编写更多的脚本。因此,当你对 macOS 使用有某种需求时,不必急于去学习、编写脚本,可以在网上搜索相关脚本。比如下面关于浏览器切换的脚本,就是我从 Github 上找到的😏。

目前我能使用和需要的脚本都比较简单、低级,一类脚本是将某些内容(如网址)从一个 APP 中复制、粘贴到另一个 APP 中。比如,将当前 Chrome 页面的网页,在 Safari 中打开;复制当前网页地址(如 Bilibili 或爱奇艺上视频网址),粘贴到 Downie 下载视频。常规操作无非是先选中内容,再复制、切换 APP,最后将内容粘贴到目标 APP 相应位置。另一类脚本是启动某个 APP,然后打开本地指定文件/文件夹。比如日常博客写作的流程为启动 VS Code 后,打开 Hexo 博客下 Source 文件夹,选中文章的 md 文件进行写作。这个操作连复制、粘贴都不用,甚至用鼠标连续点几个地方也能实现。

总而言之,偷懒是人类进步的生产力😛。能用一个快捷键或者命令解决的,坚决不去多那么几下操作。但是!!!这些设置不像某些 APP 可以通过 Mackup 备份。所以,写下本文作为记录和系统重装时的资料。📔

启动与调用方案

对于.AppleScirpt文件,我目前已知的启动和调用方式,有三种:Alfred、自动操作(Automator.app)和 Lacona 附加组件(Addons)中的 AppleScript 功能。迫于穷和省事😩,我目前选择、使用的是第三种方案,幸好该方案支持定义 AppleScript 脚本库,以及运行脚本。

脚本的编写、修改与测试

就好像写文章一样,脚本的编写也不是一蹴而就,需要根据实际情况进行调整、修改以及测试。网上不少朋友都是在使用 Script DeBugger 这个 APP,但它是一个收费软件,而且价格不菲。在我把 VS Code 作为文本编辑器对网上找来脚本进行修改时,它提示我从扩展商店中安装了 AppleScript 扩展。它不仅支持代码高亮,还支持代码补全、运行与测试。

目前使用脚本的内容

Hexo 写作与管理

set SourceFolder to "/Users/ouyang/Dropbox/gblog/source"

if application "Visual Studio Code" is running then
    tell application "Visual Studio Code"
        open SourceFolder
    end tell
else
    tell application "Visual Studio Code"
        activate
        open SourceFolder
    end tell
end if

Safari to Chrome

  • 目前方案 MBP 未安装 Flash 插件,为避免风扇狂转和电脑发热,就选择在 Google Chrome 中看视频和电影。所以,需要从 Safari 切换到 Google Chrome 的时候,就可以使用该插件。
tell application "Safari"
    set myURL to URL of current tab of front window
end tell

tell application "Google Chrome"
    if (count windows) is 0 then
        make new window
        set URL of tab 1 of window 1 to myURL
    else
        activate front window
        make new tab at front window
        set URL of tab (count tabs of front window) of front window to myURL
    end if
end tell
--
-- open currently open URL in Safari in Chrome
--
property theURL : ""
tell application "Safari"
    set theURL to URL of current tab of window 1
end tell

if appIsRunning("Google Chrome") then
    tell application "Google Chrome"
        if (count of (every window where visible is true)) is greater than 0 then
            -- running with a visible window, ready for new tab
        else
            -- running but no visible window, so create one
            make new window
        end if
    end tell
else
    tell application "Google Chrome"
        -- chrome app not running, so start it
        do shell script "open -a \"Google Chrome\""
    end tell
end if

-- now that we have made sure chrome is running and has a visible
-- window create a new tab in that window
-- and activate it to bring to the front
tell application "Google Chrome"
    tell front window
        make new tab with properties {URL:theURL}
    end tell
    activate
end tell

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

Chrome to Safari

适用场景 主要用于剪藏公众号文章。使用 Google Chrome 访问微信公众号文章时,所加载图片的格式均为 WebP,而印象笔记(Evernote)并不支持该格式,就会出现通过 Google Chrome 访问和剪藏到印象笔记的文章,图片内容无法加载。同时,从搜狗微信搜索中获取的公众号文章的网址为临时链接,一天后会自动失效,有时需要花不少时间去找原文章。因此,在剪藏公众号文章或者使用搜狗微信搜索时,我都会先切换到 Safari 再进行剪藏操作(Safari 加载公众号文章的图片均为 JPG 格式)。

---
--- open currently active Chrome tab with Safari
---
property theURL : ""
tell application "Google Chrome"
  set theURL to URL of active tab of window 0
end tell

if appIsRunning("Safari") then
    tell application "Safari"
        tell front window
            open location theURL
        end tell
        activate
    end tell
else
    tell application "Safari"
        -- Safari not running, so start it
        do shell script "open -a \"Safari\""
        tell front window
            open location theURL
        end tell
        activate
    end tell
end if

on appIsRunning(appName)
    tell application "System Events" to (name of processes) contains appName
end appIsRunning

如无特别声明,本博客遵循 CC BY-NC-SA 4.0 协议授权。
本文链接:https://imouyang.com/applescript-jiao-ben-liang-ge-ban/