fix(tui): preserve unordered user list markers (closes #5657)
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed inherited user-message transcript rendering so standalone `+` messages no longer render as `-` ([#5657](https://github.com/earendil-works/pi/issues/5657)).
|
||||||
- Fixed `--model` resolution for authenticated custom model IDs whose slash prefix matches an unauthenticated built-in provider ([#5643](https://github.com/earendil-works/pi/issues/5643)).
|
- Fixed `--model` resolution for authenticated custom model IDs whose slash prefix matches an unauthenticated built-in provider ([#5643](https://github.com/earendil-works/pi/issues/5643)).
|
||||||
- Fixed `/fork` to keep session parent chains connected when the forked path contains labels ([#5669](https://github.com/earendil-works/pi/issues/5669)).
|
- Fixed `/fork` to keep session parent chains connected when the forked path contains labels ([#5669](https://github.com/earendil-works/pi/issues/5669)).
|
||||||
- Fixed `/share` and `/export` HTML exports to use the active fallback theme when the configured custom theme no longer exists ([#5596](https://github.com/earendil-works/pi/issues/5596)).
|
- Fixed `/share` and `/export` HTML exports to use the active fallback theme when the configured custom theme no longer exists ([#5596](https://github.com/earendil-works/pi/issues/5596)).
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed Markdown source list marker preservation to include unordered markers, so standalone `+` user messages no longer render as `-` ([#5657](https://github.com/earendil-works/pi/issues/5657)).
|
||||||
- Fixed slash-separated fuzzy queries so provider/model completions remain matchable after insertion.
|
- Fixed slash-separated fuzzy queries so provider/model completions remain matchable after insertion.
|
||||||
- Fixed WezTerm inline Kitty image rendering so reserved row clears do not erase all but the top strip of tool image previews ([#5618](https://github.com/earendil-works/pi/issues/5618)).
|
- Fixed WezTerm inline Kitty image rendering so reserved row clears do not erase all but the top strip of tool image previews ([#5618](https://github.com/earendil-works/pi/issues/5618)).
|
||||||
|
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ export interface MarkdownTheme {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface MarkdownOptions {
|
export interface MarkdownOptions {
|
||||||
/** Preserve source ordered-list markers instead of normalizing them from the list start. */
|
/** Preserve source list markers instead of normalizing them. */
|
||||||
preserveOrderedListMarkers?: boolean;
|
preserveOrderedListMarkers?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -561,6 +561,11 @@ export class Markdown implements Component {
|
|||||||
return match ? `${match[1]} ` : undefined;
|
return match ? `${match[1]} ` : undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private getUnorderedListMarker(item: Tokens.ListItem): string | undefined {
|
||||||
|
const match = /^(?: {0,3})([-+*])(?:[ \t]+|(?=\r?\n|$))/.exec(item.raw);
|
||||||
|
return match ? `${match[1]} ` : undefined;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Render a list with proper nesting support
|
* Render a list with proper nesting support
|
||||||
*/
|
*/
|
||||||
@@ -577,7 +582,9 @@ export class Markdown implements Component {
|
|||||||
? this.options.preserveOrderedListMarkers
|
? this.options.preserveOrderedListMarkers
|
||||||
? (this.getOrderedListMarker(item) ?? `${startNumber + i}. `)
|
? (this.getOrderedListMarker(item) ?? `${startNumber + i}. `)
|
||||||
: `${startNumber + i}. `
|
: `${startNumber + i}. `
|
||||||
: "- ";
|
: this.options.preserveOrderedListMarkers
|
||||||
|
? (this.getUnorderedListMarker(item) ?? "- ")
|
||||||
|
: "- ";
|
||||||
const taskMarker = item.task ? `[${item.checked ? "x" : " "}] ` : "";
|
const taskMarker = item.task ? `[${item.checked ? "x" : " "}] ` : "";
|
||||||
const marker = bullet + taskMarker;
|
const marker = bullet + taskMarker;
|
||||||
const firstPrefix = indent + this.theme.listBullet(marker);
|
const firstPrefix = indent + this.theme.listBullet(marker);
|
||||||
|
|||||||
@@ -112,9 +112,9 @@ describe("Markdown component", () => {
|
|||||||
assert.deepStrictEqual(lines, ["1. alpha", "2. beta", "3. gamma"]);
|
assert.deepStrictEqual(lines, ["1. alpha", "2. beta", "3. gamma"]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should preserve source ordered list markers when configured", () => {
|
it("should preserve source list markers when configured", () => {
|
||||||
const markdown = new Markdown(
|
const markdown = new Markdown(
|
||||||
" 4. forth\n 3. third\n\n10) ten\n7) seven",
|
" 4. forth\n 3. third\n\n10) ten\n7) seven\n\n+ plus\n* star\n- minus\n+",
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
defaultMarkdownTheme,
|
defaultMarkdownTheme,
|
||||||
@@ -126,7 +126,18 @@ describe("Markdown component", () => {
|
|||||||
|
|
||||||
const lines = markdown.render(80).map((line) => stripAnsi(line).trimEnd());
|
const lines = markdown.render(80).map((line) => stripAnsi(line).trimEnd());
|
||||||
|
|
||||||
assert.deepStrictEqual(lines, ["4. forth", "3. third", "", "10) ten", "7) seven"]);
|
assert.deepStrictEqual(lines, [
|
||||||
|
"4. forth",
|
||||||
|
"3. third",
|
||||||
|
"",
|
||||||
|
"10) ten",
|
||||||
|
"7) seven",
|
||||||
|
"",
|
||||||
|
"+ plus",
|
||||||
|
"* star",
|
||||||
|
"- minus",
|
||||||
|
"+",
|
||||||
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should render mixed ordered and unordered nested lists", () => {
|
it("should render mixed ordered and unordered nested lists", () => {
|
||||||
|
|||||||
Reference in New Issue
Block a user