diff --git a/src/renderer/src/editor/elements/list.tsx b/src/renderer/src/editor/elements/list.tsx
index 972ec3a5..49a66b19 100644
--- a/src/renderer/src/editor/elements/list.tsx
+++ b/src/renderer/src/editor/elements/list.tsx
@@ -37,7 +37,7 @@ export const List = observer(({element, attributes, children}: ElementProps
}
- {createElement(tag, {className: 'm-list'}, children)}
+ {createElement(tag, {className: 'm-list', start: element.start}, children)}
)
}, [element, element.children, configStore.config.dragToSort])
diff --git a/src/renderer/src/editor/output/worker.ts b/src/renderer/src/editor/output/worker.ts
index b86e07ef..5cd59f9b 100644
--- a/src/renderer/src/editor/output/worker.ts
+++ b/src/renderer/src/editor/output/worker.ts
@@ -186,7 +186,8 @@ export const toMarkdown = (tree: any[], preString = '', parent: any[] = [{root:
if (p.type === 'list-item') {
const list = parent[parent.length - 2]
let pre = preString + (list.order ? (space + ' ') : space)
- const index = list.children.findIndex(c => c === p)
+ let index = list.children.findIndex(c => c === p)
+ if (list.start) index += (list.start - 1)
if (i === 0) {
str += preString
str += list.order ? `${index + 1}. ` : '- '
diff --git a/src/renderer/src/editor/parser/worker/index.ts b/src/renderer/src/editor/parser/worker/index.ts
index 954f9958..afbcb59d 100644
--- a/src/renderer/src/editor/parser/worker/index.ts
+++ b/src/renderer/src/editor/parser/worker/index.ts
@@ -138,7 +138,7 @@ const parserBlock = (nodes: Content[], top = false, parent?: Content) => {
el = {type: 'inline-katex', children: [{text: n.value}]} as InlineKatexNode
break
case 'list':
- el = {type: 'list', order: n.ordered, children: parserBlock(n.children, false, n)}
+ el = {type: 'list', order: n.ordered, start: n.start, children: parserBlock(n.children, false, n)}
break
case 'footnoteReference':
if (share) {
diff --git a/src/renderer/src/editor/plugins/elements.ts b/src/renderer/src/editor/plugins/elements.ts
index 77c857ea..2781e7a5 100644
--- a/src/renderer/src/editor/plugins/elements.ts
+++ b/src/renderer/src/editor/plugins/elements.ts
@@ -190,9 +190,11 @@ export const MdElements: Record = {
Transforms.delete(editor, {
at: path
})
+ const start = match[1].match(/^\s*(\d+)\./)
Transforms.insertNodes(editor, {
type: 'list',
- order: /^\s*\d+\./.test(match[1]),
+ order: !!start,
+ start: start ? +start[1] : undefined,
children: [
{
type: 'list-item',
diff --git a/src/renderer/src/el.d.ts b/src/renderer/src/el.d.ts
index 3ec1958d..9298698c 100644
--- a/src/renderer/src/el.d.ts
+++ b/src/renderer/src/el.d.ts
@@ -11,7 +11,7 @@ export type TableNode = {type: 'table', children: TableRowNode[]}
export type TableRowNode = {type: 'table-row', children: TableCellNode[]}
export type TableCellNode = {type: 'table-cell', title?: boolean, align?: Align, children: BaseElement['children']}
export type BlockQuoteNode = {type: 'blockquote', children: (BlockQuoteNode | ParagraphNode)[]}
-export type ListNode = {type: 'list', children: ListItemNode[], order?: boolean}
+export type ListNode = {type: 'list', children: ListItemNode[], order?: boolean, start?: number}
export type ListItemNode = {type: 'list-item', children: BaseElement['children'], checked?: boolean}
export type HeadNode = {type: 'head', children: BaseElement['children'], level: number}
export type HrNode = {type: 'hr'}
diff --git a/src/renderer/src/utils/keyboard.ts b/src/renderer/src/utils/keyboard.ts
index 20399f27..7a1222e0 100644
--- a/src/renderer/src/utils/keyboard.ts
+++ b/src/renderer/src/utils/keyboard.ts
@@ -35,7 +35,7 @@ const formatList = (editor: Editor, node: NodeEntry, type: string) => {
reverse: true,
mode: 'lowest'
}))
-
+ Transforms.setNodes(editor, {start: undefined}, {at: Path.parent(parent[1])})
for (let l of listItems) {
Transforms.setNodes(editor, {checked: task ? l[0].checked || false : undefined}, {at: l[1]})
}