AutomatorでEvernoteのノートリンクを置き換える
まとめ
- シェルスクリプトをAlfredから直接実行すると無駄にターミナルが立ち上がる
- Automatorならターミナルを立ち上げずにスクリプトを実行できる
Automatorでスクリプトを実行する
前回(Evernoteのノートリンクが仕様変更で使い物にならないので何とかしようとした)
では、
スクリプトの実行方法が微妙たったのでもう少し修正してみました。
結論としては、Macと標準で入っているAutomatorを使うことで、
ターミナルアプリを立ち上げずにシェルスクリプトを実行できます。
Automatorのワークフローを作る
単体のアプリケーションとして実行するため、
Automatorを立ち上げアプリケーションを選択します。
実行ディレクトリの取得
私の環境では、clipboardのインストール先はグローバルではなく、
スクリプトのあるフォルダにbundler専用のディレクトリを作り、
そこにインストールしています。
そのため、スクリプトを実行するためにはそのパスに移動しないといけません。
ですが、Automatorを実行した場合、
カレントパスはユーザのホームディレクトリになり、
実行したファイルのディレクトリではありません。
参考: iNSTANTWiNE or Wine.framework と Automator の連携
そのため、Apple Scriptを先に実行し、
Automatorの実行ファイルがあるパスを求め、
そこに移動するようにしています。
自分自身のパスを求めるApple Script
on run {input, parameters}
set p to POSIX path of (path to me)
return {p}
return input
end run
AutomatorのAppleScriptを実行を選び、
このスクリプトを後述するシェルスクリプトの前に実行するようにします。
これでシェルスクリプトに引数としてパスを渡せます。
Evernote URLを置換するスクリプト
内容はほぼ前回と同じです。
ただし、各種環境設定は読み込んでくれないため、
sourceで読み込む必要があります。
また、Automator側で引数の引き渡し方法を
引数として
に設定する必要もあります。
source .zshrc
pushd $(dirname $1)
bundle exec ruby -e "
require 'clipboard'
url = Clipboard.paste
r = Regexp.new(\"https://www.evernote.com/shard/s2/nl/([0-9]*)/(.*)/\")
result = r.match url
if result
new_url = \"evernote:///view/#{result[1]}/s2/#{result[2]}/#{result[2]}/\"
p new_url
Clipboard.copy new_url
end
"
popd
こうして作ったアプリケーションを.appに書き出し、
Alfredから実行することでターミナルを立ち上げることなく、
クリップボードのノートリンクを置換できます。
完成品
できあがったスクリプトは
https://github.com/ota42y/dotfiles/tree/master/home/.scripts/evernote_url_replace
にあります。
github上では.appがフォルダとして扱われていますが、
Mac上ではアプリケーションとして扱われます。