|
|
@@ -9,26 +9,25 @@ export const useInsertPrefix = (view?: EditorView): InsertPrefix => {
|
|
|
if (view == null) {
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
const startPos = view.state.selection.main.from;
|
|
|
const endPos = view.state.selection.main.to;
|
|
|
+ const lines = [];
|
|
|
const space = ' ';
|
|
|
- const insertText = noSpaceIfPrefixExists && view.state.doc.lineAt(startPos).text.startsWith(prefix)
|
|
|
- ? prefix
|
|
|
- : prefix + space;
|
|
|
+ let lastLineTo = 0;
|
|
|
+ let insertText = '';
|
|
|
|
|
|
- for (let i = view.state.doc.lineAt(startPos).number; i <= view.state.doc.lineAt(endPos).number; i++) {
|
|
|
+ for (let i = view.state.doc.lineAt(startPos).number; i < view.state.doc.lineAt(endPos).number + 1; i++) {
|
|
|
const line = view.state.doc.line(i);
|
|
|
-
|
|
|
- view.dispatch({
|
|
|
- changes: {
|
|
|
- from: line.from,
|
|
|
- insert: insertText,
|
|
|
- },
|
|
|
- selection: { anchor: line.to + insertText.length },
|
|
|
- });
|
|
|
+ insertText = noSpaceIfPrefixExists && line.text.startsWith(prefix)
|
|
|
+ ? prefix
|
|
|
+ : prefix + space;
|
|
|
+ lines.push({ from: line.from, insert: insertText });
|
|
|
+ lastLineTo = line.to;
|
|
|
}
|
|
|
-
|
|
|
+ view.dispatch({
|
|
|
+ changes: lines,
|
|
|
+ selection: { anchor: lastLineTo + insertText.length },
|
|
|
+ });
|
|
|
view.focus();
|
|
|
}, [view]);
|
|
|
};
|