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