From a65347187c7b1119a794cabd26bca95f3e77e0ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=8D=EA=B7=9C=EC=A7=84?= Date: Fri, 7 Mar 2025 18:23:25 +0900 Subject: [PATCH 1/2] feat: add editor hotkeys --- src/components/write/WriteMarkdownEditor.tsx | 58 ++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/components/write/WriteMarkdownEditor.tsx b/src/components/write/WriteMarkdownEditor.tsx index eba9ff47..427b592b 100644 --- a/src/components/write/WriteMarkdownEditor.tsx +++ b/src/components/write/WriteMarkdownEditor.tsx @@ -201,6 +201,64 @@ export default class WriteMarkdownEditor extends React.Component< e.preventDefault(); } }) as any); + + this.codemirror.on('keydown', (cm, e) => { + const { key, ctrlKey, metaKey, shiftKey } = e; + const doc = cm.getDoc(); + const selection = doc.getSelection(); + + if (!selection) return; + + if (key === '`' && !ctrlKey && !metaKey) { + if (selection.length > 0) { + e.preventDefault(); + doc.replaceSelection(`\`${selection}\``); + return; + } + } + + if ((ctrlKey || metaKey) && key === 'b') { + e.preventDefault(); + doc.replaceSelection(`**${selection}**`); + return; + } + + if ((ctrlKey || metaKey) && key === 'i') { + e.preventDefault(); + doc.replaceSelection(`*${selection}*`); + return; + } + + if ((ctrlKey || metaKey) && shiftKey && key === 's') { + e.preventDefault(); + doc.replaceSelection(`~~${selection}~~`); + return; + } + + if (key === '[') { + e.preventDefault(); + doc.replaceSelection(`[${selection}]`); + return; + } + + if (key === '(') { + e.preventDefault(); + doc.replaceSelection(`(${selection})`); + return; + } + + if (key === '{') { + e.preventDefault(); + doc.replaceSelection(`{${selection}}`); + return; + } + + if (key === '<') { + e.preventDefault(); + doc.replaceSelection(`<${selection}>`); + return; + } + }); }; stickToBottomIfNeeded = () => { From 2842b458744e45e31ef47db630f7406073bcfb03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=ED=99=8D=EA=B7=9C=EC=A7=84?= Date: Fri, 7 Mar 2025 19:10:20 +0900 Subject: [PATCH 2/2] fix: fix Italic font style hot key --- src/components/write/WriteMarkdownEditor.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/write/WriteMarkdownEditor.tsx b/src/components/write/WriteMarkdownEditor.tsx index 427b592b..3d26c1e5 100644 --- a/src/components/write/WriteMarkdownEditor.tsx +++ b/src/components/write/WriteMarkdownEditor.tsx @@ -225,7 +225,7 @@ export default class WriteMarkdownEditor extends React.Component< if ((ctrlKey || metaKey) && key === 'i') { e.preventDefault(); - doc.replaceSelection(`*${selection}*`); + doc.replaceSelection(`_${selection}_`); return; }