1Writer Cycle Bullet 2
< || 1Writer Cycle Bullet 3 >
リアルタイムロギング
1Writer Cycle Bulletの複数行対応版
code:js
// 選択されている行の範囲を取得
let selectedRange = editor.getSelectedLineRange();
if (!selectedRange) {
ui.alert("Error", "No lines are selected.");
return;
}
// 元の選択範囲を保持
let originalSelection = editor.getSelectedRange();
// 選択されている行のテキストを取得
let selectedText = editor.getTextInRange(selectedRange0, selectedRange1);
if (!selectedText) {
ui.alert("Error", "No text found in the selected range.");
return;
}
// 各行ごとに処理を行うため、改行で分割
let lines = selectedText.split('\n');
// 処理前の全テキストの長さを保持(元の文字数を計算)
let originalLength = selectedText.length;
// 各行に対して処理を行う
let processedLines = lines.map(line => {
line = line.trimStart(); // 行頭の空白を除去
// 行頭の状態を確認し、次のステップに切り替え
if (line.startsWith('- x ')) {
// チェックボックス完了 -> 行頭なし
return line.replace('- x ', '');
} else if (line.startsWith('- ')) {
// チェックボックス未完了 -> チェックボックス完了
return line.replace('- ', '- x ');
} else if (line.startsWith('- ')) {
// 箇条書き -> チェックボックス未完了
return line.replace('- ', '- ');
} else {
// 行頭なし -> 箇条書き
return '- ' + line;
}
});
// 変換後の全テキストを再構築
let newText = processedLines.join('\n');
// 処理後の全テキストの長さを計算
let newLength = newText.length;
// 文字数の差分
let lengthDifference = newLength - originalLength;
// テキストをエディタに反映
editor.replaceTextInRange(selectedRange0, selectedRange1, newText);
// 選択範囲の終端位置を調整して元に戻す(長さの変動を考慮)
let newSelectionStart = originalSelection0;
let newSelectionEnd = originalSelection1 + lengthDifference;
editor.setSelectedRange(newSelectionStart, newSelectionEnd);