選択範囲無しでページを切り出すUserScript
カーソル行があるインデントブロックをNew page (Scrapbox)するUserScript
選択範囲を選ばずに切り出せる
実装
Tritaskの記録を別ページに切り出すscriptを参考にする
code:script.js
import {cursor} from '/api/code/takker/scrapbox-cursor-position-4/script.js';
import {goLine, goHeadWithoutBlank} from '/api/code/takker/scrapbox-edit-emulation/script.js';
import {press} from '/api/code/takker/scrapbox-keyboard-emulation-2/script.js';
import {insertText} from '/api/code/takker/scrapbox-insert-text/script.js';
export async function isolate({project}) {
// 現在行番号を取得する
const cline = cursor().line;
const firstLineNo = cline.index;
const lastLineNo = firstLineNo + cline.indentBlockLength;
// テキストを取得する
const texts = scrapbox.Page.lines.slice(firstLineNo, lastLineNo + 1)
.map(line => line.text);
const title = texts0.replace(/[\\\n]/g, '').trim();
// 余計なインデントを削る
const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)0.length));
const bodies = [from [${scrapbox.Page.title}],
...texts.map(text => text.slice(
minIndentNum > 1 ? minIndentNum - 1 : minIndentNum
)),
];
// リンクにする
// リンクを入れる行はインデントをそのままにする
goLine(cline.id);
goHeadWithoutBlank();
press('End', {shiftKey: true});
for(let i = firstLineNo; i < lastLineNo; i++) {
press('ArrowDown', {shiftKey: true});
press('End', {shiftKey: true}); // Endをおして折返し行を確実に全て選択する
}
insertText({text: [${title}]});
// 個別のpageに切り出す
const body = encodeURIComponent(bodies.join('\n'));
window.open(https://scrapbox.io/${project}/${title}?body=${body});
}
#2021-01-19 13:56:52
#2021-01-18 19:24:36
#2021-01-16 23:00:42