generated at
custom-new-page-2
Next version:custom-new-page-3
hr
切り出し元のページに残すテキストと、切り出し後に開くページに流し込むテキストを設定できる
複数のページに切り出すこともできる

custom-new-pageからの変更点
設定方法を変更した
複数の設定を簡単に追加できるようにした
libraryのupdate

script.d.ts
export function isolate(...options: { judge: (lines: string[]) => boolean; leftText: (lines: string[], options: {index: number; project: string; title: string;}) => string; newPages: (lines: string[], options: {index: number; project: string; title: string;}) => { project: string; title: string; body: string; }[]; }[]): void;
script.js
import {position} from '../scrapbox-cursor-position-6/script.js'; import {goLine, goHead} from '../scrapbox-motion-emulation/script.js'; import { getLineNo, getIndentLineCount, } from '../scrapbox-access-nodes@0.1.0/script.js'; import {press} from '../scrapbox-keyboard-emulation-2/script.js'; import {insertText} from '../scrapbox-insert-text-2/script.js'; export async function isolate(settings) { // 現在行番号を取得する const cline = position().line; const firstLineNo = getLineNo(cline); const lastLineNo = firstLineNo + getIndentLineCount(cline); // テキストを取得する const lines = scrapbox.Page.lines.slice(firstLineNo, lastLineNo + 1) .map(line => line.text); // 使用する設定を決める const {leftText, newPages} = settings .find(({judge}) => judge(lines)) // default setting ?? {leftText: getLeavingText, newPages: getNewPagesData}; const option = {index: firstLineNo, project: scrapbox.Project.name, title: scrapbox.Page.title}; // 元のページの文字を置換する goHead(); press('End', {shiftKey: true}); for(let i = firstLineNo; i < lastLineNo; i++) { press('ArrowDown', {shiftKey: true}); press('End', {shiftKey: true}); // Endをおして折返し行を確実に全て選択する } // textを編集する前にデータを作っておく const text = leftText(lines, option); const pages = newPages(lines, option); await insertText(text); // 個別のpageに切り出す for (const {project, title, body} of pages) { window.open(`https://scrapbox.io/${project}/${encodeURIComponent(title)}?body=${encodeURIComponent(body)}`); } }

defaultのカスタム函数
script.js
function getLeavingText(texts) { const link = texts[0].replace(/[\[\]]/g, '').trim(); return `${texts[0].match(/^(\s*)/)[1]}[${link}]`; } function getNewPagesData(texts, _, {project, title}) { const link = texts[0].replace(/[\[\]]/g, ''). trim(); const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)[0].length)); const body = [`from [${title}]`, ...texts.map(text => text.slice( minIndentNum > 1 ? minIndentNum - 1 : minIndentNum )), ].join('\n'); console.log([project, link, body]); return [{ project, title: link, body, }]; }
インデントを削る函数
script.js
export function cutIndent(texts) { const minIndentNum = Math.min(...texts.map(text => text.match(/^\s*/)[0].length)); return texts.map(text => text.slice(minIndentNum)); }

#2022-07-18 13:30:18
#2021-03-15 07:31:33
#2021-01-21 00:46:46
#2021-01-20 23:32:17