(Mac) EvernoteでMarkdownを書きながらMarkedを利用して自動プレビュー表示
EvernoteでMarkdownを書いてリアルタイムにプレビューを表示するためのスクリプトを作成しました。
Markdonwのプレビュー表示はMarkedを利用しています。
MacのEvernoteでは、ノートを保存したタイミングでノート(個別コンテンツ)毎のディレクトリ${HOME}/Library/Application Support/Evernote/accounts/Evernote/<アカウント名>/content/<個別コンテンツディレクトリ>
のタイムスタンプが更新されます。
最新の個別コンテンツディレクトリ内のcontent.html
のファイルを定期的に監視して、前回より更新が加わった場合にはhtml形式よりテキスト形式に変換したcontent.md
ファイルを同ディレクトリ内に作成します。
作成したcontent.md
ファイルをMarkedに渡してリフレッシュすることでMarkdownのリアルタイムプレビューを実現しています。
Evernoteに貼付けた画像ファイルについても、別途htmlのimgタグのsrcをMarkdown形式に変換することで対応しています。
元ネタはrubyで作成されたスクリプトでbashで書き直しています。
スクリプト
#!/bin/bash ACCOUNT="<ACCOUNT>" # your evernote account name CHECK_INTERVAL=2 # content update check interval (sec) MARKED_REFRESH_BG=yes # [yes/no] yes:background, no:background VERBOSE=no # [yes/no] yes:check result output, no:silent CONTENT_DIR="${HOME}/Library/Application Support/Evernote/accounts/Evernote/${ACCOUNT}/content" CONTENT_HTML=content.html # read file CONTENT_MD=content.md # write file while true; do LATEST_DIR=`stat -l -t '%FT%T' "${CONTENT_DIR}"/* | cut -d' ' -f6- | sort | tail -1 | cut -d' ' -f2-` NEW_HASH=`md5 "${LATEST_DIR}/${CONTENT_HTML}" | cut -d= -f2` if [ "${HASH}"x == "${NEW_HASH}"x ]; then test "${VERBOSE}"x == "yes"x && echo "content not been updated." sleep ${CHECK_INTERVAL} continue fi HASH=${NEW_HASH} cat "${LATEST_DIR}/${CONTENT_HTML}" | sed -e 's/<img src=\"\([^"]*\)\"[^>]*>/![](\1)/g' | textutil -stdin -convert txt -stdout >"${LATEST_DIR}/${CONTENT_MD}" test "${VERBOSE}"x == "yes"x && echo "content updated, refresh markdown." open -a Marked "${LATEST_DIR}/${CONTENT_MD}" $(test "${MARKED_REFRESH_FG}"x != "yes"x && echo '-g') sleep ${CHECK_INTERVAL} done
利用方法
以下の変数については、適切な設定に変更してください。
- ACCOUNT - Evernoteのアカウント名を入力します。
- CHECK_INTERVAL - コンテンツの更新をチェックする間隔の秒数を指定します。
- MARKED_REFRESH_BG - Markedをリフレッシュする際にウィンドウをバックグラウンドのままにする場合は”yes”、リフレッシュ毎にフォアグラウンドで表示する場合には”no”を指定します。
- VERBOSE - コンテンツの更新結果を標準出力に表示する場合は”yes”、サイレントに実行する場合は”no”を指定します。
スクリプトを保存して実行権限付与の上、実行します。(以下はVERBOSEが”yes"の場合)
$ ./everwatch.sh content updated, refresh markdown. content not been updated. content not been updated. content not been updated. content updated, refresh markdown. content not been updated. ・・・
EvernoteのアプリでいずれかのノートにMarkdown文書を作成して保存を行うと、
content updated, refresh markdown.
のメッセージが出力された際に、保存された内容でMarkedがリフレッシュされると思います。
参考サイト
Mac OSX EvernoteでMarkdownを書いてMarkedでプレビューする
Evernoteで図入りのMarkdown文書を書いてMarkedでプレビューする方法