@xzzpig/pi-starline 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +223 -0
- package/extensions/starline/config.ts +1317 -0
- package/extensions/starline/editor-cursor.ts +55 -0
- package/extensions/starline/editor-factory-marker.ts +49 -0
- package/extensions/starline/editor-metadata-format.ts +259 -0
- package/extensions/starline/extension-status.ts +88 -0
- package/extensions/starline/footer-format.ts +279 -0
- package/extensions/starline/footer.ts +744 -0
- package/extensions/starline/format.ts +473 -0
- package/extensions/starline/git.ts +467 -0
- package/extensions/starline/icons.ts +294 -0
- package/extensions/starline/index.ts +651 -0
- package/extensions/starline/live-context.ts +75 -0
- package/extensions/starline/mouse/capabilities.ts +207 -0
- package/extensions/starline/mouse/component-tree.ts +230 -0
- package/extensions/starline/mouse/editor-caret.ts +498 -0
- package/extensions/starline/mouse/editor-hit-test.ts +133 -0
- package/extensions/starline/mouse/editor-mouse.ts +142 -0
- package/extensions/starline/mouse/editor-scroll.ts +119 -0
- package/extensions/starline/mouse/editor-text-cursor.ts +209 -0
- package/extensions/starline/mouse/editor-text-edit.ts +90 -0
- package/extensions/starline/mouse/hint.ts +14 -0
- package/extensions/starline/mouse/hit-test.ts +144 -0
- package/extensions/starline/mouse/index.ts +1119 -0
- package/extensions/starline/mouse/selection-state.ts +68 -0
- package/extensions/starline/mouse/tool-box.ts +290 -0
- package/extensions/starline/mouse/transcript-copy.ts +166 -0
- package/extensions/starline/mouse/word-select.ts +145 -0
- package/extensions/starline/package-version.ts +650 -0
- package/extensions/starline/paste-collapse.ts +312 -0
- package/extensions/starline/pill-config.ts +122 -0
- package/extensions/starline/pill.ts +295 -0
- package/extensions/starline/project-refresh.ts +104 -0
- package/extensions/starline/project-state.ts +66 -0
- package/extensions/starline/prototype-patch-registry.ts +136 -0
- package/extensions/starline/runtime.ts +841 -0
- package/extensions/starline/selector-border.ts +77 -0
- package/extensions/starline/session-lifecycle.ts +60 -0
- package/extensions/starline/settings-command.ts +925 -0
- package/extensions/starline/state.ts +65 -0
- package/extensions/starline/style.ts +528 -0
- package/extensions/starline/ui.ts +611 -0
- package/extensions/starline/user-message.ts +267 -0
- package/package.json +60 -0
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Icon mode defaults and resolvers.
|
|
3
|
+
*
|
|
4
|
+
* Nerd defaults must stay byte-identical to historical `defaultConfig.icons`,
|
|
5
|
+
* except where intentionally changed to match the Starship Nerd Font preset.
|
|
6
|
+
* User string overrides always win over mode defaults.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export type IconMode = "auto" | "nerd" | "ascii";
|
|
10
|
+
|
|
11
|
+
export type IconGlyphs = {
|
|
12
|
+
cwd: string;
|
|
13
|
+
git: string;
|
|
14
|
+
ahead: string;
|
|
15
|
+
behind: string;
|
|
16
|
+
diverged: string;
|
|
17
|
+
conflicted: string;
|
|
18
|
+
untracked: string;
|
|
19
|
+
stashed: string;
|
|
20
|
+
modified: string;
|
|
21
|
+
staged: string;
|
|
22
|
+
renamed: string;
|
|
23
|
+
deleted: string;
|
|
24
|
+
typechanged: string;
|
|
25
|
+
cacheHit: string;
|
|
26
|
+
editorPrompt: string;
|
|
27
|
+
rail: string;
|
|
28
|
+
username: string;
|
|
29
|
+
time: string;
|
|
30
|
+
os: string;
|
|
31
|
+
package: string;
|
|
32
|
+
/**
|
|
33
|
+
* Segments upstream draws without an icon. Default to empty in every mode so
|
|
34
|
+
* the text footer is unchanged; set one to opt in (most useful in pill mode).
|
|
35
|
+
*/
|
|
36
|
+
model: string;
|
|
37
|
+
thinking: string;
|
|
38
|
+
context: string;
|
|
39
|
+
cost: string;
|
|
40
|
+
tokens: string;
|
|
41
|
+
/** Forge logos for the branch segment, used only when gitHostIcon is on. */
|
|
42
|
+
gitHostGithub: string;
|
|
43
|
+
gitHostGitlab: string;
|
|
44
|
+
gitHostBitbucket: string;
|
|
45
|
+
gitHostGeneric: string;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
export type ResolvedIcons = IconGlyphs & { mode: IconMode };
|
|
49
|
+
|
|
50
|
+
export const ICON_GLYPH_KEYS = [
|
|
51
|
+
"cwd",
|
|
52
|
+
"git",
|
|
53
|
+
"ahead",
|
|
54
|
+
"behind",
|
|
55
|
+
"diverged",
|
|
56
|
+
"conflicted",
|
|
57
|
+
"untracked",
|
|
58
|
+
"stashed",
|
|
59
|
+
"modified",
|
|
60
|
+
"staged",
|
|
61
|
+
"renamed",
|
|
62
|
+
"deleted",
|
|
63
|
+
"typechanged",
|
|
64
|
+
"cacheHit",
|
|
65
|
+
"editorPrompt",
|
|
66
|
+
"rail",
|
|
67
|
+
"username",
|
|
68
|
+
"time",
|
|
69
|
+
"os",
|
|
70
|
+
"package",
|
|
71
|
+
"model",
|
|
72
|
+
"thinking",
|
|
73
|
+
"context",
|
|
74
|
+
"cost",
|
|
75
|
+
"tokens",
|
|
76
|
+
"gitHostGithub",
|
|
77
|
+
"gitHostGitlab",
|
|
78
|
+
"gitHostBitbucket",
|
|
79
|
+
"gitHostGeneric",
|
|
80
|
+
] as const satisfies readonly (keyof IconGlyphs)[];
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Nerd Font defaults.
|
|
84
|
+
*
|
|
85
|
+
* The `cwd` icon is intentionally empty — Starship's `directory` module
|
|
86
|
+
* has no default symbol. Other defaults match historical values; new
|
|
87
|
+
* additions (e.g. `package`) come from the Starship Nerd Font preset
|
|
88
|
+
* (https://starship.rs/presets/nerd-font).
|
|
89
|
+
*/
|
|
90
|
+
export const NERD_DEFAULT_ICONS: IconGlyphs = {
|
|
91
|
+
cwd: "",
|
|
92
|
+
git: "",
|
|
93
|
+
ahead: "↑",
|
|
94
|
+
behind: "↓",
|
|
95
|
+
diverged: "⇕",
|
|
96
|
+
conflicted: "=",
|
|
97
|
+
untracked: "?",
|
|
98
|
+
stashed: "$",
|
|
99
|
+
modified: "!",
|
|
100
|
+
staged: "+",
|
|
101
|
+
renamed: "»",
|
|
102
|
+
deleted: "✘",
|
|
103
|
+
typechanged: "T",
|
|
104
|
+
cacheHit: "",
|
|
105
|
+
editorPrompt: "",
|
|
106
|
+
rail: "│",
|
|
107
|
+
username: "",
|
|
108
|
+
time: "",
|
|
109
|
+
os: "",
|
|
110
|
+
// Starship Nerd Font preset — `package` module glyph.
|
|
111
|
+
package: "",
|
|
112
|
+
model: "",
|
|
113
|
+
thinking: "",
|
|
114
|
+
context: "",
|
|
115
|
+
cost: "",
|
|
116
|
+
tokens: "",
|
|
117
|
+
gitHostGithub: "",
|
|
118
|
+
gitHostGitlab: "",
|
|
119
|
+
gitHostBitbucket: "",
|
|
120
|
+
gitHostGeneric: "",
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
export const ASCII_DEFAULT_ICONS: IconGlyphs = {
|
|
124
|
+
cwd: "",
|
|
125
|
+
git: "*",
|
|
126
|
+
ahead: "^",
|
|
127
|
+
behind: "v",
|
|
128
|
+
diverged: "^v",
|
|
129
|
+
conflicted: "=",
|
|
130
|
+
untracked: "?",
|
|
131
|
+
stashed: "$",
|
|
132
|
+
modified: "!",
|
|
133
|
+
staged: "+",
|
|
134
|
+
renamed: ">",
|
|
135
|
+
deleted: "x",
|
|
136
|
+
typechanged: "T",
|
|
137
|
+
cacheHit: "c",
|
|
138
|
+
editorPrompt: "",
|
|
139
|
+
rail: "|",
|
|
140
|
+
username: "@",
|
|
141
|
+
time: "t",
|
|
142
|
+
os: "o",
|
|
143
|
+
package: "pkg",
|
|
144
|
+
model: "",
|
|
145
|
+
thinking: "",
|
|
146
|
+
context: "",
|
|
147
|
+
cost: "",
|
|
148
|
+
tokens: "",
|
|
149
|
+
// gitHostIcon is a Nerd Font feature; it disables itself in ascii mode.
|
|
150
|
+
gitHostGithub: "",
|
|
151
|
+
gitHostGitlab: "",
|
|
152
|
+
gitHostBitbucket: "",
|
|
153
|
+
gitHostGeneric: "",
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
export const OS_PLATFORM_ICONS_NERD: Record<string, string> = {
|
|
157
|
+
darwin: "\uf179",
|
|
158
|
+
linux: "\uf17c",
|
|
159
|
+
win32: "\uf17a",
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export const OS_PLATFORM_ICONS_ASCII: Record<string, string> = {
|
|
163
|
+
darwin: "mac",
|
|
164
|
+
linux: "linux",
|
|
165
|
+
win32: "win",
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
/** Short ASCII labels keyed by runtime `name`. */
|
|
169
|
+
export const RUNTIME_ASCII_SYMBOLS: Record<string, string> = {
|
|
170
|
+
xmake: "xm",
|
|
171
|
+
maven: "mvn",
|
|
172
|
+
gradle: "grd",
|
|
173
|
+
bun: "bun",
|
|
174
|
+
deno: "deno",
|
|
175
|
+
lua: "lua",
|
|
176
|
+
nodejs: "node",
|
|
177
|
+
python: "py",
|
|
178
|
+
golang: "go",
|
|
179
|
+
rust: "rs",
|
|
180
|
+
java: "java",
|
|
181
|
+
ruby: "rb",
|
|
182
|
+
php: "php",
|
|
183
|
+
buf: "buf",
|
|
184
|
+
cmake: "cmake",
|
|
185
|
+
cpp: "c++",
|
|
186
|
+
c: "c",
|
|
187
|
+
cobol: "cob",
|
|
188
|
+
conda: "conda",
|
|
189
|
+
crystal: "cr",
|
|
190
|
+
dart: "dart",
|
|
191
|
+
dotnet: ".net",
|
|
192
|
+
elixir: "ex",
|
|
193
|
+
elm: "elm",
|
|
194
|
+
erlang: "erl",
|
|
195
|
+
fennel: "fnl",
|
|
196
|
+
fortran: "f90",
|
|
197
|
+
gleam: "glm",
|
|
198
|
+
guix_shell: "guix",
|
|
199
|
+
haskell: "hs",
|
|
200
|
+
haxe: "hx",
|
|
201
|
+
helm: "helm",
|
|
202
|
+
julia: "jl",
|
|
203
|
+
kotlin: "kt",
|
|
204
|
+
meson: "meson",
|
|
205
|
+
mojo: "mojo",
|
|
206
|
+
nim: "nim",
|
|
207
|
+
nix_shell: "nix",
|
|
208
|
+
ocaml: "ml",
|
|
209
|
+
odin: "odin",
|
|
210
|
+
opa: "opa",
|
|
211
|
+
perl: "pl",
|
|
212
|
+
pixi: "pixi",
|
|
213
|
+
pulumi: "pul",
|
|
214
|
+
purescript: "purs",
|
|
215
|
+
raku: "raku",
|
|
216
|
+
red: "red",
|
|
217
|
+
rlang: "R",
|
|
218
|
+
scala: "scala",
|
|
219
|
+
solidity: "sol",
|
|
220
|
+
spack: "spack",
|
|
221
|
+
swift: "swift",
|
|
222
|
+
terraform: "tf",
|
|
223
|
+
typst: "typ",
|
|
224
|
+
vagrant: "vag",
|
|
225
|
+
vlang: "v",
|
|
226
|
+
zig: "zig",
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
export function isIconMode(value: unknown): value is IconMode {
|
|
230
|
+
return value === "auto" || value === "nerd" || value === "ascii";
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export function normalizeIconMode(value: unknown): IconMode {
|
|
234
|
+
return isIconMode(value) ? value : "auto";
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export function modeDefaultIcons(mode: IconMode): IconGlyphs {
|
|
238
|
+
return mode === "ascii" ? { ...ASCII_DEFAULT_ICONS } : { ...NERD_DEFAULT_ICONS };
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export function resolveConfiguredIcons(
|
|
242
|
+
mode: IconMode,
|
|
243
|
+
overrides: Partial<IconGlyphs> = {},
|
|
244
|
+
): ResolvedIcons {
|
|
245
|
+
const base = modeDefaultIcons(mode);
|
|
246
|
+
const rail =
|
|
247
|
+
typeof overrides.rail === "string" && overrides.rail.trim().length > 0
|
|
248
|
+
? overrides.rail
|
|
249
|
+
: base.rail;
|
|
250
|
+
return {
|
|
251
|
+
mode,
|
|
252
|
+
...base,
|
|
253
|
+
...overrides,
|
|
254
|
+
rail,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Honor a custom `icons.os` when it differs from the mode default.
|
|
260
|
+
* Otherwise map by platform for the active mode.
|
|
261
|
+
*/
|
|
262
|
+
export function resolveOsIcon(
|
|
263
|
+
configuredOsIcon: string,
|
|
264
|
+
mode: IconMode = "auto",
|
|
265
|
+
platform: string = process.platform,
|
|
266
|
+
): string {
|
|
267
|
+
const modeDefault = modeDefaultIcons(mode).os;
|
|
268
|
+
if (configuredOsIcon !== modeDefault) return configuredOsIcon;
|
|
269
|
+
const platformMap = mode === "ascii" ? OS_PLATFORM_ICONS_ASCII : OS_PLATFORM_ICONS_NERD;
|
|
270
|
+
return platformMap[platform] ?? configuredOsIcon;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
export function resolveRuntimeSymbol(
|
|
274
|
+
name: string,
|
|
275
|
+
nerdSymbol: string,
|
|
276
|
+
mode: IconMode = "auto",
|
|
277
|
+
): string {
|
|
278
|
+
if (mode !== "ascii") return nerdSymbol;
|
|
279
|
+
return RUNTIME_ASCII_SYMBOLS[name] ?? (name.slice(0, 3) || "*");
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Resolve the package-version segment icon for the active mode.
|
|
284
|
+
*
|
|
285
|
+
* Honors a configured `icons.package` override; otherwise falls back to the
|
|
286
|
+
* mode default (Nerd Font preset / ASCII label).
|
|
287
|
+
*/
|
|
288
|
+
export function resolvePackageIcon(configuredPackageIcon: string, mode: IconMode = "auto"): string {
|
|
289
|
+
const modeDefault = modeDefaultIcons(mode).package;
|
|
290
|
+
if (typeof configuredPackageIcon === "string" && configuredPackageIcon.length > 0) {
|
|
291
|
+
return configuredPackageIcon;
|
|
292
|
+
}
|
|
293
|
+
return modeDefault;
|
|
294
|
+
}
|