<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>~iany/ Automation</title><link>https://blog.iany.me/zh/tags/automation/</link><description>Automation的最新内容 «~iany/»</description><language>zh-CN</language><managingEditor>me@iany.me (Ian Yang)</managingEditor><webMaster>me@iany.me (Ian Yang)</webMaster><copyright>CC-BY-SA 4.0</copyright><lastBuildDate>Sun, 19 Mar 2017 17:54:13 +0800</lastBuildDate><atom:link href="https://blog.iany.me/zh/tags/automation/index.xml" rel="self" type="application/rss+xml"/><item><title>使用 macOS Javascript 自动化来集成各种 App 的任务收集</title><link>https://blog.iany.me/zh/2017/03/capture-anything-using-macos-javascript-automation/</link><pubDate>Sun, 19 Mar 2017 17:54:13 +0800</pubDate><author>me@iany.me (Ian Yang)</author><guid>https://blog.iany.me/zh/2017/03/capture-anything-using-macos-javascript-automation/</guid><description>&lt;p&gt;我写了不少 macOS 脚本来自动化我的工作。这个脚本可以是用的最多的。我用它来在各种 App 中，将当前选中的对象做为任务添加到 OmniFocus 中。通过捕获的链接可以在 OmniFocus 中直接打开相关的文档。&lt;/p&gt;
&lt;p&gt;目前该脚本仅支持我经常使用的一些 App，新的 App 只需要在 &lt;code&gt;capturers&lt;/code&gt; 增加相应的捕获方法即可。&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-javascript"&gt;var tasks = [];
var app = null;
// Uncomment following line to debug a specific app.
// var app = Application(&amp;quot;Evernote&amp;quot;);
(function(app, tasks) {
var bundleIdentifier;
if (app === null || app === undefined) {
var systemEvents = Application(&amp;quot;System Events&amp;quot;);
var bundleIdentifier = systemEvents.processes.whose({ frontmost: true })[0].bundleIdentifier();
app = Application(bundleIdentifier);
} else {
bundleIdentifier = app.id();
}
if (tasks === null || tasks === undefined) {
tasks = [];
}
var capturers = {
Safari: function(app, tasks) {
var tab = app.windows[0].currentTab();
tasks.push({ name: tab.name(), note: tab.url() });
},
Chromium: function(app, tasks) {
var tab = app.windows[0].activeTab();
tasks.push({ name: tab.title(), note: tab.url() });
},
Finder: function(app, tasks) {
app.selection().forEach(function(file) {
var name = file.name();
var url = file.url();
var directory = file.container().url();
tasks.push({ name: &amp;quot;[File] &amp;quot; + name, note: url + &amp;quot; in directory &amp;quot; + directory });
});
},
Contacts: function(app, tasks) {
app.selection().forEach(function(contact) {
tasks.push({ name: &amp;quot;Contact &amp;quot; + contact.name(), note: &amp;quot;addressbook://&amp;quot; + contact.id() });
});
},
Evernote: function(app, tasks) {
app.selection().forEach(function(note) {
var url = note.noteLink();
var title = note.title();
tasks.push({ name: &amp;quot;[Evernote] &amp;quot; + title, note: url });
});
},
Mail: function(app, tasks) {
app.selection().forEach(function(mail) {
var url = encodeURI(&amp;quot;message://&amp;lt;&amp;quot; + mail.messageId() + &amp;quot;&amp;gt;&amp;quot;);
var title = mail.sender() + &amp;quot;: &amp;quot; + mail.subject();
tasks.push({ name: title, note: url });
});
}
};
capturers[&amp;quot;Google Chrome&amp;quot;] = capturers.Chromium;
var fluidCapturer = function(app, tasks) {
var tab = app.browserWindows[0].selectedTab();
var name = &amp;quot;[&amp;quot; + app.name() + &amp;quot;] &amp;quot; + tab.title();
tasks.push({ name: name, note: tab.url() });
};
var defaultCapturer = function(app, tasks) {
app.includeStandardAdditions = true;
var url = encodeURI(&amp;quot;file://&amp;quot; + app.pathTo().toString());
tasks.push({ name: app.name(), note: url })
};
var capture = capturers[app.name()];
if (capture === undefined) {
if (bundleIdentifier.startsWith(&amp;quot;com.fluidapp.FluidApp.&amp;quot;)) {
capture = fluidCapturer;
} else {
capture = defaultCapturer;
}
}
capture(app, tasks);
return tasks;
})(app, tasks);
// Then send tasks to OmniFocus or other app which supported apple scripts automation.
var of = Application(&amp;quot;OmniFocus&amp;quot;);
var inbox = of.quickEntry().inboxTasks;
tasks.forEach(function(task) {
inbox.push(of.Task(task));
});
of.quickEntry().open();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;我使用的是 &lt;a href="https://www.keyboardmaestro.com/main/"&gt;Keyboard Maestro&lt;/a&gt; 通过快捷键来执行该脚本。&lt;/p&gt;</description><category domain="https://blog.iany.me/zh/">~iany/</category><category domain="https://blog.iany.me/zh/tags/automation/">Automation</category><category domain="https://blog.iany.me/zh/tags/javascript/">JavaScript</category><category domain="https://blog.iany.me/zh/tags/macos/">macOS</category></item></channel></rss>