generated at
選択範囲無しでページを切り出すUserScript
カーソル行があるインデントブロックをNew page (Scrapbox)するUserScript
選択範囲を選ばずに切り出せる

実装
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 = texts[0].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