-
-
Notifications
You must be signed in to change notification settings - Fork 5.5k
/
Copy pathtldr.ts
140 lines (132 loc) · 3.62 KB
/
tldr.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
const tldrRc = `~/.tldrc/tldr`;
const android = `${tldrRc}/pages/android/`;
const common = `${tldrRc}/pages/common/`;
const linux = `${tldrRc}/pages/linux/`;
const osx = `${tldrRc}/pages/osx/`;
const sunos = `${tldrRc}/pages/sunos/`;
const windows = `${tldrRc}/pages/windows/`;
const isMarkDownRegex = new RegExp(/^.*\.md$/);
const wholeTldrPages: Fig.Generator = {
custom: async (tokens, executeShellCommand, context) => {
const { stdout } = await executeShellCommand({
command: "ls",
// eslint-disable-next-line @withfig/fig-linter/no-useless-arrays
args: [
"-Al",
...[android, common, linux, osx, sunos, windows].map((path) =>
path.replace(/^~/, context.environmentVariables["HOME"])
),
],
});
return stdout
.split("\n")
.filter((line) => isMarkDownRegex.test(line))
.map((line) => {
return {
name: line.split(" ").at(-1).slice(0, -3),
description: "Tldr page",
icon: "fig://icon?type=string",
};
});
},
};
const linuxTldrPages: Fig.Generator = {
script: ["bash", "-c", `command ls -Al ${linux} 2>/dev/null`],
postProcess: (out) => {
return out
.split("\n")
.filter((line) => isMarkDownRegex.test(line))
.map((line) => {
return {
name: line.split(" ").at(-1).slice(0, -3),
description: "Tldr page",
icon: "fig://icon?type=string",
};
});
},
};
const osxTldrPages: Fig.Generator = {
script: ["bash", "-c", `command ls -l ${osx} 2>/dev/null`],
postProcess: (out) => {
return out
.split("\n")
.filter((line) => isMarkDownRegex.test(line))
.map((line) => {
return {
name: line.split(" ").at(-1).slice(0, -3),
description: "Tldr page",
icon: "fig://icon?type=string",
};
});
},
};
const sunosTldrPages: Fig.Generator = {
script: ["bash", "-c", `command ls -l ${sunos} 2>/dev/null`],
postProcess: (out) => {
return out
.split("\n")
.filter((line) => isMarkDownRegex.test(line))
.map((line) => {
return {
name: line.split(" ").at(-1).slice(0, -3),
description: "Tldr page",
icon: "fig://icon?type=string",
};
});
},
};
const platformSuggestions = ["linux", "osx", "sunos", "windows", "common"];
const completionSpec: Fig.Spec = {
name: "tldr",
description: "A simpler man page than the existing man page",
args: { generators: wholeTldrPages },
options: [
{
name: ["-h", "--help"],
description: "Display help for command",
},
{
name: ["-s", "--search"],
description: "Search all pages for the query",
args: {
name: "query",
},
},
{
name: "--linux",
description: "Show command page for Linux",
args: { generators: linuxTldrPages },
},
{
name: "--osx",
description: "Show command page for OSX",
args: { generators: osxTldrPages },
},
{
name: "--sunos",
description: "Show command page for SunOS",
args: { generators: sunosTldrPages },
},
{
name: ["-l", "--list"],
description: "Show all pages for current platform",
},
{
name: ["-u", "--update"],
description: "Download the latest pages and generate search index",
},
{
name: ["-c", "--clear-cache"],
description: "Delete the entire local cache",
},
{
name: ["--platform", "-p"],
description: "Select platform",
args: {
name: "platform",
suggestions: platformSuggestions,
},
},
],
};
export default completionSpec;