generated at
scrapbox-editor-insert-prev-line

動機
理由を書いている最中にすでに脳内に結論がある時、さっと結論を先に書きたい。
OmniOutlinerのshift+enterと同じ挙動にしたい。

機能
編集中に shift+enter を押すと、上に空行を追加する。

設定方法
自分のページに下記を貼り付ける。
scrapbox-shortcutを導入していない場合は先に下記を貼り付ける。
自分のページ(js)
code:script.js import '/api/code/foldrr/scrapbox-shortcut/script.js'
上記よりも後の部分で下記を貼り付ける。
自分のページ(js)
code:script.js import '/api/code/foldrr/scrapbox-editor-insert-prev-line/script.js' scrapboxShortcut.onEdit('shift+enter', scrapboxEditorInsertPrevLine);

コード
script.js
window.scrapboxEditorInsertPrevLineRunning = false; window.scrapboxEditorInsertPrevLine = e => { let keydown = (keyCode, modifiers) => { modifiers = modifiers || {}; let ev = document.createEvent('Events'); ev.initEvent('keydown', true, true); ev.keyCode = keyCode; ev.shiftKey = !!(modifiers.shift); ev.ctrlKey = !!(modifiers.ctrl); ev.metaKey = !!(modifiers.meta); $('#text-input')[0].dispatchEvent(ev); } if (scrapboxEditorInsertPrevLineRunning) return; scrapboxEditorInsertPrevLineRunning = true; let indentText = $('.cursor-line .indent-mark .pad').text(); let lineText = $('.cursor-line .indent').text(); e.preventDefault(); (() => { let defer = new $.Deferred; keydown(35); // end keydown(36); // home keydown(13); // enter defer.resolve(); return defer.promise(); })() .then(() => { let defer = new $.Deferred; setTimeout(() => { keydown(38); // arrow-up defer.resolve(); }, 20); return defer.promise(); }) .then(() => { if (lineText == '') { let textInput = document.getElementById('text-input'); textInput.value = textInput.value + indentText; let ev = document.createEvent('Event'); ev.initEvent('input', true, true); textInput.dispatchEvent(ev); } scrapboxEditorInsertPrevLineRunning = false; }); return false; };