Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidianにスクラッチバッファーを作る

ようするに「チラシの裏」。

localStorage

データの保存ができる。 ということで、もう少し緻密なバージョンを考えてみました。 カーソル位置も記憶します。

scratch.md

setCursorを使ってみます。

<%*
e = app.workspace.activeLeaf.view.editor
c = e.getCursor()
f = tp.file.folder(true) + "/" + tp.file.title + ".md"
if(f != "//_scratch.md"){
  localStorage.scratch = f
  localStorage.scratch_cursor = JSON.stringify(c)
  f = "_scratch.md"
  p = app.vault.getAbstractFileByPath(f)
  if(!p) p = await app.vault.create(f, "")
  app.workspace.activeLeaf.openFile(p)
}else{
  f = localStorage.scratch
  c = JSON.parse(localStorage.scratch_cursor)
  p = app.vault.getAbstractFileByPath(f)
  await app.workspace.activeLeaf.openFile(p)
  e.setCursor(c)
}
%>

ルートに_scratch.mdというファイルを自動で作ります。

使い方

スクリプトを実行すると作業用のファイルが開く。 もう一度実行すると元のファイルに戻る。 そういう挙動をします。

解説

codeMirrorのgetCursorはオブジェクトを返してくるので、そのままlocalStorageで書き込んではいけないのでした。 stringifyで文字列化する必要があった。 ここになかなか気付けなくて、作るまでに時間がかかりました。

まとめ

実は2本指でスワイプすると元のファイルに戻れるので、このスクリプト自体はあまり意味がないことに後で気づいた。