diff --git a/hook.zsh b/hook.zsh new file mode 100644 index 0000000..2dc77f5 --- /dev/null +++ b/hook.zsh @@ -0,0 +1,8 @@ +setopt promptsubst + +prompt_precmd() { + export PS1=`prim --ps1 --col $COLUMNS --row $LINES` + export RPS1=`prim --rps1 --col $COLUMNS --row $LINES` +} + +add-zsh-hook precmd prompt_precmd diff --git a/prim b/prim new file mode 100755 index 0000000..5642bc4 Binary files /dev/null and b/prim differ diff --git a/source/app.d b/source/app.d index c3eec7f..25bb8e9 100644 --- a/source/app.d +++ b/source/app.d @@ -1,6 +1,42 @@ import std.stdio; +import std.getopt; -void main() -{ - writeln("Edit source/app.d to start your project."); +import prompt.ps1; + +struct Opt { + bool ps1; + bool rps1; + + 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; + + GetoptResult args = getopt( + argv, + std.getopt.config.bundling, + "ps1|p", "print PS1", &opts.ps1, + "rps1|r", "print RPS1", &opts.rps1, + "col", "terminal width", &opts.col, + "row", "terminal height", &opts.row, + ); + + if (args.helpWanted) { + defaultGetoptPrinter("prim", args.options); + } + + try { + validate(opts); + } catch (Exception e) { + defaultGetoptPrinter(e.msg ~ "\n", args.options); + } + + ps1(opts.col).write(); } diff --git a/source/prompt/ps1.d b/source/prompt/ps1.d new file mode 100644 index 0000000..338afe8 --- /dev/null +++ b/source/prompt/ps1.d @@ -0,0 +1,11 @@ +module prompt.ps1; + +string ps1(int col) { + string ps; + + foreach (i; 0 .. col) { + ps ~= '—'; + } + + return ps; +}