日記
明日は六甲山上たあとキャノボのほんの最初だけ試走して返ってくることにした
今日書いたコード
できた
// タイトルのレベルをctrl (+ shift) + 8で変えるUser Script const pattern = /\[(\*+) +(\S+)\]/ function deleteLine() { var eventToMoveToStartOfLine = new KeyboardEvent('keydown', { ctrlKey: true, keyCode: '69', // e bubbles: true, cancelable: true, }) document.getElementById('text-input').dispatchEvent(eventToMoveToStartOfLine) var eventToMoveToEndOfLine = new KeyboardEvent('keydown', { ctrlKey: true, shiftKey: true, keyCode: '65', // a bubbles: true, cancelable: true, }) document.getElementById('text-input').dispatchEvent(eventToMoveToEndOfLine) var eventToDelete = new KeyboardEvent('keydown', { keyCode: '8', // Backspace bubbles: true, cancelable: true, }) document.getElementById('text-input').dispatchEvent(eventToDelete) } document.addEventListener('keydown', e => { if (e.ctrlKey && e.key == '8') { const currentContent = document.querySelector('.lines div.line.cursor-line').textContent var content if (e.shiftKey) { if (!pattern.test(currentContent)) { return } const [, asterisks, title] = currentContent.match(pattern) const slicedAsterisks = asterisks.slice(1, asterisks.length) if (asterisks.length == 1) { content = title } else { content = `[${asterisks.slice(1, asterisks.length)} ${title}]` } } else { if (pattern.test(currentContent)) { const [, asterisks, title] = currentContent.match(pattern) content = `${asterisks}* ${title}` } else { content = `* ${currentContent}` } content = `[${content}]` } deleteLine() const textInput = document.getElementById('text-input') textInput.value = content textInput.focus() const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true }) textInput.dispatchEvent(inputEvent) } })
感想
KeyboardEvent
のコンストラクタに渡すオプション、key
だとだめでkeyCode
だとよかった。あとcancelable
をtrueにしておくのがお作法?
置換するところはもっとうまい書き方がありそうだけど動けばいいので