scriptからscrapboxに文字を流し込んだときの挙動を調べる
しかし、scrapboxの自動入力が邪魔してうまく行かない場合がある
確認済みの現象
引用文中で挿入すると、改行の前に勝手に >
が入る
どんな場合にどんな不具合が生じるのかを調べておこうと思う
目的
不具合の発生条件を洗い出し、それへの対策を試みる
方法
1. 次のコードをUserScriptに入れる
jsimport '/api/code/takker/scrapbox-insert-text/test1.js';
developper toolから insertText()
が使えるようになる
2. consoleから様々なcursor位置で insertText()
を実行して調べる
調査結果
改行なし
本文に挿入
コードブロックに挿入
アイコン記法の途中に挿入
折返しのある行の途中に挿入
展開すると折返しが発生するほど長い外部リンク記法の内外で挿入
改行あり
インデントなしの文中に挿入
インデントありの文中に挿入
インデントは維持されなかった
Shift
+ Enter
の挙動と同じ
空白のみの行
空白が維持された
Shift
+ Enter
の挙動と同じ
折返しのある行の途中に挿入
インデントは維持されなかった
Shift
+ Enter
の挙動と同じ
引用文中に挿入
インデント及び引用を維持して改行された
2020-12-30 07:44:18 コードブロックの空白行に挿入
コードブロックとインデントを維持して改行された
ここまでの調査を踏まえた暫定の結論
\n
を挿入されたとき、インデントは維持されない
引用文中に挿入されると、インデントと引用が維持される
コードブロックの空白行中に挿入されると、インデントとコードブロックが維持される
対処
目標
どんな場所であっても、インデントや引用を無視して文字列を挿入する
方法
カーソルが引用文中にあるかどうかで処理を切り替える
DOMの親要素に span.quote
がいたら、改行を Enter
で代用する
いなかったら普通に挿入する
cons: 挿入のたびにcursorの位置計算が必要になる?
すべての改行を Shift
+ Enter
で代用する
多分無理
前にキーボード代行をやったとき、 Shift
+ Enter
だけ動かなかった覚えがある
もしできたとしても、引用文中は Enter
を使わないと引用を無視できないので、どのみち引用文中にカーソルがあるかどうかの判定が必要になる
.*\n
まで入力したあと、カーソルがどの位置にいるかを都度確認する
先頭にいなかったら、インデントetc.が挿入されたとみなして Home
Home
Shift+End
Del
を実行する