generated at
見出しのレベルを変更するショートカット
UserScript

概要
ctrl + 8 でレベルが上がる
ctrl + shift + 8 でレベルが下る

感想コーナー
gurrium こんにちはこんにちは
gurrium カーソル位置の文字列を編集するシュッとした方法がわからなかったのでかなり泥臭い方法を使ってます。良い書き方があれば教えて下さい。
これ以外に方法はないですね…takker
一応、websocketを立ち上げて書き換える方法もありますが、途中で通信が挟まって遅いので、このUserScriptには不向きでしょう。

使い方
1. UserScriptを有効にする
2. 以下のコードブロックを自分のページに貼り付ける
install.js
import '/api/code/customize/見出しのレベルを変更するショートカット/script.js';

script.js
// 見出しのレベルを変更するショートカット 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 pattern = /\[(\*+) +([^ ].*)\]/ const [, currentContent] = document .querySelector('.lines div.line.cursor-line') .textContent .match(/\s*([^ ].*)/) var newContent 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) { newContent = title } else { newContent = `[${asterisks.slice(1, asterisks.length)} ${title}]` } } else { if (pattern.test(currentContent)) { const [, asterisks, title] = currentContent.match(pattern) newContent = `${asterisks}* ${title}` } else { newContent = `* ${currentContent}` } newContent = `[${newContent}]` } deleteLine() const textInput = document.getElementById('text-input') textInput.value = newContent textInput.focus() const inputEvent = new InputEvent('input', { bubbles: true, cancelable: true }) textInput.dispatchEvent(inputEvent) } })