prim/source/app.d

77 lines
1.4 KiB
D
Raw Permalink Normal View History

2023-08-09 15:44:57 +00:00
import std.stdio;
2023-08-09 17:57:38 +00:00
import std.getopt;
2023-08-09 15:44:57 +00:00
2023-08-09 20:01:15 +00:00
import prim.opt;
2023-08-09 17:57:38 +00:00
import prompt.ps1;
2023-08-09 20:01:15 +00:00
import prompt.rps1;
2023-08-09 19:05:26 +00:00
import prompt.preexec;
2023-08-09 17:57:38 +00:00
2023-08-09 20:01:15 +00:00
import style;
import style.color;
2023-08-09 17:57:38 +00:00
2023-08-09 20:33:14 +00:00
Opts defaultOpts() {
2023-08-09 20:01:15 +00:00
Opts opts;
2023-08-09 17:57:38 +00:00
2023-08-09 20:33:14 +00:00
opts.pathlen = 3;
2023-09-26 13:00:14 +00:00
opts.pchar = "*";
2023-08-09 20:33:14 +00:00
return opts;
}
2023-08-10 15:55:20 +00:00
void printHelp(GetoptResult args) {
defaultGetoptPrinter("prim prompt:\n", args.options);
writeln("\nEnvironment:\n",
"\tNO_COLOR\tsee https://no-color.org");
}
2023-08-09 20:33:14 +00:00
void main(string[] argv) {
Opts opts = defaultOpts();
2023-08-10 15:55:20 +00:00
try {
GetoptResult args = getopt(
argv,
std.getopt.config.bundling,
"ps1|p", "print PS1", &opts.ps1,
"rps1|r", "print RPS1", &opts.rps1,
"preexec|x", "print preexec", &opts.preexec,
2023-08-09 19:05:26 +00:00
2023-08-10 15:55:20 +00:00
std.getopt.config.required,
"col", "terminal width", &opts.col,
2023-08-09 20:01:15 +00:00
2023-08-10 15:55:20 +00:00
std.getopt.config.required,
"row", "terminal height", &opts.row,
2023-08-09 20:01:15 +00:00
2023-08-10 15:55:20 +00:00
std.getopt.config.required,
"status", "previous command exit code", &opts.status,
2023-08-09 20:33:14 +00:00
2023-08-10 15:55:20 +00:00
"pathlen", "set length of displayed path", &opts.pathlen,
"pchar", "override default prompt character", &opts.pchar,
);
2023-08-09 17:57:38 +00:00
2023-08-10 15:55:20 +00:00
if (args.helpWanted) {
printHelp(args);
}
} catch (Exception e) {
writeln(e.msg);
writeln("try '--help' for more information");
2023-08-09 17:57:38 +00:00
}
2023-08-09 20:01:15 +00:00
dorun(opts);
}
void dorun(Opts opts) {
2023-08-09 19:05:26 +00:00
if (opts.ps1) {
2023-08-09 20:01:15 +00:00
ps1(opts).write();
2023-08-09 19:05:26 +00:00
}
if (opts.preexec) {
2023-08-10 15:50:57 +00:00
preexec(opts).write();
2023-08-09 17:57:38 +00:00
}
2023-08-09 20:01:15 +00:00
if (opts.rps1) {
rps1(opts).write();
}
2023-08-09 15:44:57 +00:00
}