【追加情報】markedを用いてEvernote上でMarkdown記法の即時プレビュを実現する

【追加情報】markedを用いてEvernote上でMarkdown記法の即時プレビュを実現する

仕組みを作りこんでる場合は、用意にappのアップデートはできないな。

困ったこと

以前用意したEvernote + markedの環境がOSやappをアップデートした関係で動かなくなった。

環境

原因

ネット上に情報がなかったのだが、潜って見るといろいろわかった。簡単に言うとEvernoteにおけるノートのローカル保管場所等が変更になったことが原因。具体的には、

  • ${HOME}/Library/Application Support/com.evernote.Evernote/accounts/www.evernote.com/${ACCOUNT}/content
  • 上記${ACCOUNT}は以前はユーザ名だったが、数字7文字に置き換わった(セキュリテイの関係)
  • 以前はcontent.htmlだったのが、content.enmlに変更になった。

修正方法

以前作成したシェルを以下の用に修正する。あとはAutomatorでapp化して終了

ACCOUNT=“数字7桁"         # 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/com.evernote.Evernote/accounts/www.evernote.com/${ACCOUNT}/content"
CONTENT_HTML=content.enml # 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 -format html -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

ちなみにtextutil -stdin -format html -convert txt -stdoutの箇所も修正した。textutilのオプションで、-format htmlを明示している。enmlファイルはhtmlとは微妙に違うみたいだ。

おまけ そもそもenmlってなに?

ENML

 ENML とは、Evernote ノートの記述に使用されるマークアップ言語です。ENML は XHTM ベースの言語るため、Evernote ノート内のリッチコンテキストを容易に表現できます。

以上です。