Text Transporterプラグインを使わない版。
carbon
Markdownは「ブロック」がオブジェクトの単位だと思います。 空行で挟まれた範囲。 それが「段落」として意味を持っている。 これを手軽に扱いたい。
carbonはもともと、そのブロックをコピペするために開発しました。 でもここのところ「スタック」を扱ってきたじゃないですか。 これと合体した方が「書きやすくなる」と直感したわけです。
carbon.md
ということでTemplaterスクリプトです。
<%* // 一時退避用のノートを設定してください。const Stack ="@@memo.md"const StackPath = app.vault.getAbstractFileByPath(Stack) e = app.workspace.activeLeaf.view.editor p = e.getCursor().line s = e.getLine(p)if(s){ 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 =`\n\n${a[0]}`if(StackPath){await app.vault.append(StackPath, block)}else{await app.vault.create(Stack, block)} content = d.join("\n\n")await e.setValue(content) e.setCursor(j-1,0)}else{if(StackPath){ s =await app.vault.read(StackPath) d = s.split("\n\n") s = d.pop().replace(/^\n/,"")}else{ s =""}if(s){ content = d.join("\n\n")await app.vault.modify(StackPath, content) tp.file.cursor_append(`\n${s}\n`)}else{newNotice("No stack.")}} %>
変数Stackに、スタックに使うノート名を書き込んでください。
使い方
カーソル行を含むブロックがスタックに転送されます。
carbonを実行すると@@memo.md
にブロックが追加されます。
カーソル行が空行のときは、スタックからブロックが取り除かれ、カーソル行に貼り付けます。 つまり、ブロック単位の出し入れが簡単にできる。
唐突にネタを思いついたとき、スタックに上げて頭を空にするがよろし。
ブロックをスタックする
Obsidianは行単位の移動をサポートしています。 「上の行と入れ替える」「下の行と入れ替える」がコマンドとして用意されている。
セクション単位の移動も「アウトライン」を使えば対応できます。 見出しをドラッグ&ドロップで入れ替えればスムーズです。
ブロックは、その間にある単位ですね。 セクションを「見出し+ブロック群」と見なすことで取り出される。 結構この単位でカットしたり移動したりする場面は多い。 でも今ままでそのための操作がありませんでした。 範囲指定でコピペしていた。
今回それがワンボタンになりました。 すると書き方が変わってきます。 空行を多用するようになります。 スタックしたい部分をブロック化する。 それまでは箇条書きしてから空行を入れていたのですが、空行を入れながら箇条書きするように変わりました。
これが悪くない。 なかなか書きやすいのです。
リズムがあるというか、空行のところでそこまでを読み返しますね。 息継ぎが入る。 アウトライナーを使っていたときも、空行を作ることに何か意味を感じていましたが、それは平文の場合でも同じです。 空気の通りがよくなる。
テキストの網目に隙間ができる感じで、そこがクッションとして機能する。 柔軟な印象がします。 たぶん空行に「無用の用」があるのでしょう。 いつでもそこに、新しいブロックを書き込める。 無いけどある。 それが論の飛躍を許容する余白になっています。
まとめ
もちろんText Transporterと併用すると、もっと面白いかもしれない。