diff --git a/hook.zsh b/hook.zsh index 2dc77f5..999b689 100644 --- a/hook.zsh +++ b/hook.zsh @@ -5,4 +5,9 @@ prompt_precmd() { export RPS1=`prim --rps1 --col $COLUMNS --row $LINES` } +prompt_preexec() { + print -P `prim --preexec --col $COLUMNS --row $LINES` +} + add-zsh-hook precmd prompt_precmd +add-zsh-hook preexec prompt_preexec diff --git a/prim b/prim index 5642bc4..9fbb91d 100755 Binary files a/prim and b/prim differ diff --git a/source/app.d b/source/app.d index 25bb8e9..ca934fa 100644 --- a/source/app.d +++ b/source/app.d @@ -2,20 +2,18 @@ import std.stdio; import std.getopt; import prompt.ps1; +import prompt.preexec; +import style.color; struct Opt { bool ps1; bool rps1; + bool preexec; int col; int row; } -void validate(Opt opts) { - if (!opts.col || !opts.row) - throw new Exception("--col and --row required"); -} - void main(string[] argv) { Opt opts; @@ -24,7 +22,11 @@ void main(string[] argv) { std.getopt.config.bundling, "ps1|p", "print PS1", &opts.ps1, "rps1|r", "print RPS1", &opts.rps1, + "preexec|x", "print preexec", &opts.preexec, + + std.getopt.config.required, "col", "terminal width", &opts.col, + std.getopt.config.required, "row", "terminal height", &opts.row, ); @@ -32,11 +34,13 @@ void main(string[] argv) { defaultGetoptPrinter("prim", args.options); } - try { - validate(opts); - } catch (Exception e) { - defaultGetoptPrinter(e.msg ~ "\n", args.options); + if (opts.ps1) { + ps1(opts.col).setColor(Color.black).write(); } - ps1(opts.col).write(); + if (opts.preexec) { + preexec(opts.col).setColor(Color.black).write(); + } + + write(setColor("", Color.reset)); } diff --git a/source/comp/hr.d b/source/comp/hr.d new file mode 100644 index 0000000..fa4d32b --- /dev/null +++ b/source/comp/hr.d @@ -0,0 +1,11 @@ +module comp.hr; + +string hr(int col) { + string ps; + + foreach (i; 0 .. col) { + ps ~= '—'; + } + + return ps; +} diff --git a/source/prompt/preexec.d b/source/prompt/preexec.d new file mode 100644 index 0000000..eb2d365 --- /dev/null +++ b/source/prompt/preexec.d @@ -0,0 +1,7 @@ +module prompt.preexec; + +import comp.hr; + +string preexec(int col) { + return hr(col); +} diff --git a/source/prompt/ps1.d b/source/prompt/ps1.d index 338afe8..9bf8021 100644 --- a/source/prompt/ps1.d +++ b/source/prompt/ps1.d @@ -1,11 +1,14 @@ module prompt.ps1; +import comp.hr; +import style.color; + string ps1(int col) { string ps; - foreach (i; 0 .. col) { - ps ~= '—'; - } + ps ~= hr(col); + + ps ~= "> ".setColor(Color.magenta); return ps; } diff --git a/source/style/color.d b/source/style/color.d new file mode 100644 index 0000000..3d788b8 --- /dev/null +++ b/source/style/color.d @@ -0,0 +1,20 @@ +module style.color; + +import std.conv; + +enum Color { + black = 30, + red, + green, + yellow, + blue, + magenta, + cyan, + white, + def, + reset = 0 +} + +string setColor(string s, int code) { + return "%{\x1b[" ~ to!string(code) ~ "m%}" ~ s; +}