Skip to content

[201_98] 实现shift+tab 反缩进,优化缩进能力#3101

Merged
da-liii merged 3 commits intomainfrom
hongwei/201_98/shift_tab_indent
Apr 13, 2026
Merged

[201_98] 实现shift+tab 反缩进,优化缩进能力#3101
da-liii merged 3 commits intomainfrom
hongwei/201_98/shift_tab_indent

Conversation

@GatsbyUSTC
Copy link
Copy Markdown
Collaborator

No description provided.

@GatsbyUSTC GatsbyUSTC changed the title Hongwei/201 98/shift tab indent [201_98]实现shift+tab 反缩进,优化缩进能力 Apr 3, 2026
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Apr 3, 2026

Greptile Summary

本 PR 实现了列表的 Shift+Tab 反缩进功能,并对 Tab 缩进功能进行了重构和优化,包括:复用已有子列表、合并跟随子列表、保留精确列表样式变体(如 itemize-dot)等。同时扩展了 enumerate-tag-list 以涵盖更多有序列表变体,并在 tree-insert 中新增了对 tree? 类型的直接支持。

Confidence Score: 4/5

主体逻辑正确,Shift+Tab 反缩进与 Tab 缩进互为逆操作,可以合并;但 enumerate-1~4 的兼容性遗漏建议修复后再合并。

所有剩余问题均为 P2 级别(无 P0/P1),但其中 enumerate-1~4 的标签遗漏会在现实中造成旧文档 Tab 功能静默失效,属于易于修复的向后兼容性回归,建议处理后再合并,故评分 4 而非 5。

TeXmacs/progs/generic/generic-edit.scm — enumerate-tag-list 的兼容性调整和反缩进 trailing sublist 边界情况。

Important Files Changed

Filename Overview
TeXmacs/progs/generic/generic-edit.scm 核心改动文件:重构 Tab 缩进逻辑并新增 Shift+Tab 反缩进实现;新增 list-item-node?、list-node?、list-family 等辅助函数;enumerate-tag-list 扩展后移除了 enumerate-1~4 旧标签,可能影响旧文档兼容性。
TeXmacs/progs/utils/library/tree.scm 为 tree-insert 新增 tree? 分支,允许直接传入 tree 对象;改动小且向后兼容。
TeXmacs/tests/tmu/201_98.tmu 新增手工测试文档,包含多层嵌套有序列表,供 Tab/Shift+Tab 回归测试使用。
devel/201_98.md 更新开发文档,详细记录 Tab/Shift+Tab 功能的设计思路和两种反缩进 case 的处理逻辑。

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
    A["kbd-variant 触发\n(focus-tree = item/item*)"] --> B{forwards?}
    B -->|true - Tab 缩进| C{item-index > 0?}
    B -->|false - Shift+Tab 反缩进| D{outer-list 存在?}

    C -->|No| C1["无操作\n(没有前一个 item)"]
    C -->|Yes| E{前一个 item\n已有子列表?}
    E -->|Yes| F["复用已有子列表\n(find-following-list-index)"]
    E -->|No| G["插入新空子列表"]
    F --> H{当前 item 后\n紧跟同类子列表?}
    G --> H
    H -->|Yes| I["合并跟随子列表内容\n(attached-items)"]
    H -->|No| J["仅移动当前 item"]
    I --> K["append-strees-to-document\n更新 target-doc"]
    J --> K
    K --> L["删除旧节点\n(从右往左避免漂移)"]
    L --> M["定位光标到 moved-item"]

    D -->|No - 已在最外层| D1["无操作\n(阻止继续反缩进)"]
    D -->|Yes| N{item 是\n子列表首个?}
    N -->|No - Case 1| O["保留原子列表\n移除 item 及后续节点\n插入到 sublist 之后"]
    N -->|Yes - Case 2| P["删除原子列表\n插入到原 sublist 位置"]
    O --> Q{有后续节点?}
    P --> Q
    Q -->|Yes| R["重建同类型 trailing sublist"]
    Q -->|No| S["定位光标到提升后的 item"]
    R --> S
Loading

Reviews (2): Last reviewed commit: "resolve comments" | Re-trigger Greptile

Copy link
Copy Markdown
Contributor

@da-liii da-liii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Copy Markdown
Contributor

@da-liii da-liii left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@da-liii da-liii changed the title [201_98]实现shift+tab 反缩进,优化缩进能力 [201_98] 实现shift+tab 反缩进,优化缩进能力 Apr 13, 2026
@da-liii da-liii merged commit 03d6eb5 into main Apr 13, 2026
1 check passed
@da-liii da-liii deleted the hongwei/201_98/shift_tab_indent branch April 13, 2026 09:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants