Add shell prompt support

Signed-off-by: Nikolaos Karaolidis <nick@karaolidis.com>
This commit is contained in:
2025-09-12 11:16:18 +01:00
parent 8fac4841d4
commit de272212ca
3 changed files with 418 additions and 410 deletions

View File

@@ -5,22 +5,25 @@
padding: 1rem; padding: 1rem;
border-radius: 0.5rem; border-radius: 0.5rem;
overflow-x: auto; overflow-x: auto;
.line.prompt::before {
content: "$ ";
} }
/* Error */ /* Error */
.chroma .err { .err {
color: var(--accent-500); color: var(--accent-500);
} }
/* LineLink */ /* LineLink */
.chroma .lnlinks { .lnlinks {
outline: none; outline: none;
text-decoration: none; text-decoration: none;
color: inherit; color: inherit;
} }
/* LineTableTD */ /* LineTableTD */
.chroma .lntd { .lntd {
vertical-align: top; vertical-align: top;
padding: 0; padding: 0;
margin: 0; margin: 0;
@@ -28,7 +31,7 @@
} }
/* LineTable */ /* LineTable */
.chroma .lntable { .lntable {
border-spacing: 0; border-spacing: 0;
padding: 0; padding: 0;
margin: 0; margin: 0;
@@ -36,12 +39,12 @@
} }
/* LineHighlight */ /* LineHighlight */
.chroma .hl { .hl {
background-color: var(--background-200); background-color: var(--background-200);
} }
/* LineNumbersTable */ /* LineNumbersTable */
.chroma .lnt { .lnt {
white-space: pre; white-space: pre;
-webkit-user-select: none; -webkit-user-select: none;
user-select: none; user-select: none;
@@ -50,7 +53,7 @@
} }
/* LineNumbers */ /* LineNumbers */
.chroma .ln { .ln {
white-space: pre; white-space: pre;
-webkit-user-select: none; -webkit-user-select: none;
user-select: none; user-select: none;
@@ -60,358 +63,359 @@
} }
/* Line */ /* Line */
.chroma .line { .line {
display: flex; display: flex;
} }
/* Keyword */ /* Keyword */
.chroma .k { .k {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* KeywordConstant */ /* KeywordConstant */
.chroma .kc { .kc {
color: var(--primary-500); color: var(--primary-500);
} }
/* KeywordDeclaration */ /* KeywordDeclaration */
.chroma .kd { .kd {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* KeywordNamespace */ /* KeywordNamespace */
.chroma .kn { .kn {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* KeywordPseudo */ /* KeywordPseudo */
.chroma .kp { .kp {
color: var(--primary-500); color: var(--primary-500);
} }
/* KeywordReserved */ /* KeywordReserved */
.chroma .kr { .kr {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* KeywordType */ /* KeywordType */
.chroma .kt { .kt {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* Name */ /* Name */
.chroma .nc { .nc {
color: var(--accent-600); color: var(--accent-600);
font-weight: bold; font-weight: bold;
} }
/* NameConstant */ /* NameConstant */
.chroma .no { .no {
color: var(--primary-500); color: var(--primary-500);
font-weight: bold; font-weight: bold;
} }
/* NameDecorator */ /* NameDecorator */
.chroma .nd { .nd {
color: var(--secondary-700); color: var(--secondary-700);
font-weight: bold; font-weight: bold;
} }
/* NameEntity */ /* NameEntity */
.chroma .ni { .ni {
color: var(--accent-600); color: var(--accent-600);
} }
/* NameException */ /* NameException */
.chroma .ne { .ne {
color: var(--accent-600); color: var(--accent-600);
font-weight: bold; font-weight: bold;
} }
/* NameLabel */ /* NameLabel */
.chroma .nl { .nl {
color: var(--primary-500); color: var(--primary-500);
font-weight: bold; font-weight: bold;
} }
/* NameNamespace */ /* NameNamespace */
.chroma .nn { .nn {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* NameProperty */ /* NameProperty */
.chroma .py { .py {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameTag */ /* NameTag */
.chroma .nt { .nt {
color: var(--primary-600); color: var(--primary-600);
} }
/* NameVariable */ /* NameVariable */
.chroma .nv { .nv {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameVariableClass */ /* NameVariableClass */
.chroma .vc { .vc {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameVariableGlobal */ /* NameVariableGlobal */
.chroma .vg { .vg {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameVariableInstance */ /* NameVariableInstance */
.chroma .vi { .vi {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameVariableMagic */ /* NameVariableMagic */
.chroma .vm { .vm {
color: var(--primary-500); color: var(--primary-500);
} }
/* NameFunction */ /* NameFunction */
.chroma .nf { .nf {
color: var(--secondary-700); color: var(--secondary-700);
font-weight: bold; font-weight: bold;
} }
/* NameFunctionMagic */ /* NameFunctionMagic */
.chroma .fm { .fm {
color: var(--secondary-700); color: var(--secondary-700);
font-weight: bold; font-weight: bold;
} }
/* Literal */ /* Literal */
.chroma .l { .l {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralDate */ /* LiteralDate */
.chroma .ld { .ld {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralString */ /* LiteralString */
.chroma .s { .s {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringAffix */ /* LiteralStringAffix */
.chroma .sa { .sa {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralStringBacktick */ /* LiteralStringBacktick */
.chroma .sb { .sb {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringChar */ /* LiteralStringChar */
.chroma .sc { .sc {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringDelimiter */ /* LiteralStringDelimiter */
.chroma .dl { .dl {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralStringDoc */ /* LiteralStringDoc */
.chroma .sd { .sd {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringDouble */ /* LiteralStringDouble */
.chroma .s2 { .s2 {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringEscape */ /* LiteralStringEscape */
.chroma .se { .se {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralStringHeredoc */ /* LiteralStringHeredoc */
.chroma .sh { .sh {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralStringInterpol */ /* LiteralStringInterpol */
.chroma .si { .si {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringOther */ /* LiteralStringOther */
.chroma .sx { .sx {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringRegex */ /* LiteralStringRegex */
.chroma .sr { .sr {
color: var(--primary-500); color: var(--primary-500);
} }
/* LiteralStringSingle */ /* LiteralStringSingle */
.chroma .s1 { .s1 {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralStringSymbol */ /* LiteralStringSymbol */
.chroma .ss { .ss {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumber */ /* LiteralNumber */
.chroma .m { .m {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberBin */ /* LiteralNumberBin */
.chroma .mb { .mb {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberFloat */ /* LiteralNumberFloat */
.chroma .mf { .mf {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberHex */ /* LiteralNumberHex */
.chroma .mh { .mh {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberInteger */ /* LiteralNumberInteger */
.chroma .mi { .mi {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberIntegerLong */ /* LiteralNumberIntegerLong */
.chroma .il { .il {
color: var(--primary-600); color: var(--primary-600);
} }
/* LiteralNumberOct */ /* LiteralNumberOct */
.chroma .mo { .mo {
color: var(--primary-600); color: var(--primary-600);
} }
/* Operator */ /* Operator */
.chroma .o { .o {
color: var(--secondary-600); color: var(--secondary-600);
font-weight: bold; font-weight: bold;
} }
/* OperatorWord */ /* OperatorWord */
.chroma .ow { .ow {
color: var(--secondary-600); color: var(--secondary-600);
font-weight: bold; font-weight: bold;
} }
/* Comment */ /* Comment */
.chroma .c { .c {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-style: italic; font-style: italic;
} }
/* CommentHashbang */ /* CommentHashbang */
.chroma .ch { .ch {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-style: italic; font-style: italic;
} }
/* CommentMultiline */ /* CommentMultiline */
.chroma .cm { .cm {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-style: italic; font-style: italic;
} }
/* CommentSingle */ /* CommentSingle */
.chroma .c1 { .c1 {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-style: italic; font-style: italic;
} }
/* CommentSpecial */ /* CommentSpecial */
.chroma .cs { .cs {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
} }
/* CommentPreproc */ /* CommentPreproc */
.chroma .cp { .cp {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
} }
/* CommentPreprocFile */ /* CommentPreprocFile */
.chroma .cpf { .cpf {
color: color-mix(in srgb, var(--text) 50%, var(--background-50)); color: color-mix(in srgb, var(--text) 50%, var(--background-50));
font-weight: bold; font-weight: bold;
font-style: italic; font-style: italic;
} }
/* GenericDeleted */ /* GenericDeleted */
.chroma .gd { .gd {
color: var(--accent-900); color: var(--accent-900);
background-color: var(--accent-300); background-color: var(--accent-300);
} }
/* GenericEmph */ /* GenericEmph */
.chroma .ge { .ge {
font-style: italic; font-style: italic;
} }
/* GenericError */ /* GenericError */
.chroma .gr { .gr {
color: var(--accent-500); color: var(--accent-500);
} }
/* GenericHeading */ /* GenericHeading */
.chroma .gh { .gh {
color: var(--primary-500); color: var(--primary-500);
font-weight: bold; font-weight: bold;
} }
/* GenericInserted */ /* GenericInserted */
.chroma .gi { .gi {
color: var(--primary-800); color: var(--primary-800);
background-color: var(--primary-200); background-color: var(--primary-200);
} }
/* GenericOutput */ /* GenericOutput */
.chroma .go { .go {
color: color-mix(in srgb, var(--text) 70%, var(--background-50)); color: color-mix(in srgb, var(--text) 70%, var(--background-50));
} }
/* GenericPrompt */ /* GenericPrompt */
.chroma .gp { .gp {
color: color-mix(in srgb, var(--text) 70%, var(--background-50)); color: color-mix(in srgb, var(--text) 70%, var(--background-50));
} }
/* GenericStrong */ /* GenericStrong */
.chroma .gs { .gs {
font-weight: bold; font-weight: bold;
} }
/* GenericSubheading */ /* GenericSubheading */
.chroma .gu { .gu {
color: var(--primary-500); color: var(--primary-500);
} }
/* GenericTraceback */ /* GenericTraceback */
.chroma .gt { .gt {
color: var(--secondary-600); color: var(--secondary-600);
} }
/* GenericUnderline */ /* GenericUnderline */
.chroma .gl { .gl {
text-decoration: underline; text-decoration: underline;
} }
}

View File

@@ -59,6 +59,6 @@ p {
margin: 1.5rem 0 1.5rem 0; margin: 1.5rem 0 1.5rem 0;
} }
li:not(:last-child) { li {
margin-bottom: 0.5rem; margin: 0.5rem 0 0.5rem 0;
} }

View File

@@ -0,0 +1,4 @@
{{ $result := transform.HighlightCodeBlock . }}
{{ $pattern := `(?s)<span class="line"([^>]*)>(\s*<span[^>]*>)?\$ (.*?)(</span>\s*)</span>` }}
{{ $processed := replaceRE $pattern `<span class="line prompt"$1>$2$3$4</span>` $result.Wrapped }}
{{ $processed | safeHTML }}