今場所は草野が幕の内に上がれるかだな。
carbon
空行で挟まれた範囲を「ブロック」と見なし、 それをカット&ペーストするTemplaterアクションです。 地味に活躍する。 あるとないとでは雲泥の差。
使いながら改良を重ね、現在のところ選択制になりました。
carbon.md
Templaterのhotkeyに登録してお使いください。
<%* // 一時退避用のノートを設定してください。 const Stack = "@stack.md" const StackPath = app.vault.getAbstractFileByPath(Stack) block = tp.file.selection() e = app.workspace.activeLeaf.view.editor p = e.getCursor().line s = e.getLine(p) if(block || s) { if(!block) { s = tp.file.content d = s.split("\n\n") for(i=j=k=0; k<=p; i++) { j = k k+= d[i].split("\n").length + 1 } a = d.splice(i-1, 1) block = a[0] s = d.join("\n\n") await e.setValue(s) e.setCursor(j-1, 0) } if(StackPath) { await app.vault.append(StackPath, `\n\n${block}`) } else { await app.vault.create(Stack, block) } } else { if(StackPath) { s = await app.vault.read(StackPath) d = s.split("\n\n").filter(x => x) if(d.length) { if(d.length == 1) { s = d[0] content = "" } else { s = await tp.system.suggester(d, d) if(!s) return content = d.filter(x => x != s).join("\n\n") } await app.vault.modify(StackPath, content) tp.file.cursor_append(`\n${s}\n`) } else { new Notice("No stack.") } } else { new Notice("No stack file.") } } %>
変数Stackで退避先ノートを設定してください。
使い方
カーソルのあるブロックをスタック・ノートに転送します。 まるまるカットする。 これが退避先に積み上がっていきます。
範囲選択すると、その範囲をカットして退避先にスタックします。
カーソル行が空行の場合、そのスタックからブロックを貼り付けます。 ブロックが2つ以上あるときは選択メニューが出るようにしました。 どれを貼り付けるか、選ぶことができます。 タップするだけ。
ね、わかりやすくなったでしょ?
スタック・ノート
スタック・ノートをサイドバーに入れると直接編集できます。
なのでcarbonを使わず、スタックにメモして構いません。 覚え書きを貯めておける。 その覚え書きをcarbonで呼び出す。 そういう使い方もアリです。
紙のノートであれば「余白」で行っていることです。 本文に書くほどではないことを書き留める。 これは資産になります。 伏流として何らかの影響を本文に及ぼしている。
また、ノート間の転送にも使えます。 carbonを使ってからundoすれば、カットではなくコピーしたことになります。 スクリプトを貯めておき、別の場所で再利用できる。
なので、スタックの可能性はcarbonだけじゃないなあと感じてます。 スタック・ノート単独でも使い道がある。 こうするとObsidianがさらに面白い。
まとめ
Markdownはブロックを意識させる記法です。 空行に挟まれた範囲が「段落」として意味を持つ。 そこをオブジェクトとして扱いたい。
そうなって「Markdownエディタ」なのだと思う。