quoteSelectionInScrapbox
scrapbox上で引用したい文章を選択 → Command + Shift + uでclipboradにcopyできるUserScript sample
結局、「未着手」「進行中」「処理済み」「完了」といったstatusは、粗いstep分解でしかない
・step分解の粒度はひとそれぞれ異なるので、共通の用語を使う効果がどこまであるか
・「pull requestを上げたら処理済みにする」といった明確なruleがあるときは、そのstepを意識するという点で効果がある
・ただstatusではなく、「pull requestを上げる」というstepが明記されており、それが完了したかどうかがわかるほうがきれい
・直前に「testが通っていることを確認する」といったstepが完了しているかも同時に確認できるから
・だから愚直にstep分解していくことだけに集中するほうが生産的だと思う
script
code:script.js
document.addEventListener('keydown', (e) => {
var name = e.code;
// meta (windows or command) + shift + uで動く
if (e.metaKey && e.shiftKey && name == "KeyU"){
// デフォルトの挙動(uの入力を停止)
e.preventDefault();
const selectedLines = window.getSelection().toString();
// 引用したい行が選択されてない場合は終了
if (!selectedLines) return;
const quotesLines = addScrapboxQuotationMarkToLines(selectedLines);
const quotesLink = getLinkOfCursorLine();
const clipboardText = arrengeQuotesFormat(quotesLines, quotesLink);
// コピー内容をクリップボードにコピー
navigator.clipboard.writeText(clipboardText);
}
});
export function addScrapboxQuotationMarkToLines(Lines) {
return Lines.split(/\n/g).map(function(line){
// 引用記法内ではspaceに・がつかないので、・をつけて見やすくする
// 先頭文字の直前のspaceのみ置換
line = line.replace(/(?<!\S+\s*)\s(?!\s)/, '・');
// 半角spaceでのindentが見にくいので、tab indentに変更
// 行の間のspaceは除く
line = line.replace(/(?<!\S+\s*)\s/g, '\t');
return '> ' + line
});
}
export function getLinkOfCursorLine() {
const cursorLine = document.getElementsByClassName("cursor-line")0; const cursorLineId = cursorLine.id.slice(1);
const scrapboxProjectName = location.href.split("/")3; const scrapboxPageTitle = scrapbox.Page.title;
return "+ scrapboxProjectName + "/" + scrapboxPageTitle + "#"+ cursorLineId + "";
}
export function arrengeQuotesFormat(quotesLines, quotesLink) {
return quotesLines.join('\n') + "\r " + quotesLink + "\r ";
}