見出しのレベルを変更するショートカット
概要
ctrl + 8
でレベルが上がる
ctrl + shift + 8
でレベルが下る
感想コーナー
こんにちはこんにちは
カーソル位置の文字列を編集するシュッとした方法がわからなかったのでかなり泥臭い方法を使ってます。良い書き方があれば教えて下さい。
これ以外に方法はないですね…
一応、websocketを立ち上げて書き換える方法もありますが、途中で通信が挟まって遅いので、このUserScriptには不向きでしょう。
使い方
1. UserScriptを有効にする
install.jsimport '/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)
}
})