Fix rendering issues + add git comp
This commit is contained in:
parent
db53ee6c3b
commit
26ba41d08f
2
dub.json
2
dub.json
@ -3,6 +3,8 @@
|
|||||||
"zerocool"
|
"zerocool"
|
||||||
],
|
],
|
||||||
"copyright": "Copyright © 2023, zerocool",
|
"copyright": "Copyright © 2023, zerocool",
|
||||||
|
"dependencies": {
|
||||||
|
},
|
||||||
"description": "A minimal D application.",
|
"description": "A minimal D application.",
|
||||||
"license": "proprietary",
|
"license": "proprietary",
|
||||||
"name": "prim"
|
"name": "prim"
|
||||||
|
11
hook.zsh
11
hook.zsh
@ -1,13 +1,14 @@
|
|||||||
setopt promptsubst
|
|
||||||
|
|
||||||
prompt_precmd() {
|
prompt_precmd() {
|
||||||
export PS1=`prim --ps1 --col $COLUMNS --row $LINES --status $?`
|
export PS1=$'`prim --ps1 --col $COLUMNS --row $LINES --status $?`'
|
||||||
export RPS1=`prim --rps1 --col $COLUMNS --row $LINES --status $?`
|
export RPS1=$'`prim --rps1 --col $COLUMNS --row $LINES --status $?`'
|
||||||
}
|
}
|
||||||
|
|
||||||
prompt_preexec() {
|
prompt_preexec() {
|
||||||
print -P `prim --preexec --col $COLUMNS --row $LINES --status $?`
|
# print -P `prim --preexec --col $COLUMNS --row $LINES --status $?`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
autoload -Uz add-zsh-hook
|
||||||
|
setopt promptsubst
|
||||||
|
|
||||||
add-zsh-hook precmd prompt_precmd
|
add-zsh-hook precmd prompt_precmd
|
||||||
add-zsh-hook preexec prompt_preexec
|
add-zsh-hook preexec prompt_preexec
|
||||||
|
@ -53,7 +53,7 @@ void dorun(Opts opts) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (opts.preexec) {
|
if (opts.preexec) {
|
||||||
preexec(opts.col).write();
|
// preexec(opts).write();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opts.rps1) {
|
if (opts.rps1) {
|
||||||
|
28
source/comp/git.d
Normal file
28
source/comp/git.d
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
module comp.git;
|
||||||
|
|
||||||
|
import std.stdio;
|
||||||
|
import std.file : dirEntries, SpanMode;
|
||||||
|
import std.process;
|
||||||
|
import std.string : strip;
|
||||||
|
|
||||||
|
string gitBranch() {
|
||||||
|
auto result = execute(["git", "rev-parse", "--abbrev-ref", "HEAD"]);
|
||||||
|
|
||||||
|
if (result.status != 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return result.output.strip();
|
||||||
|
}
|
||||||
|
|
||||||
|
string gitStatus() {
|
||||||
|
auto result = execute(["git", "status", "--porcelain"]);
|
||||||
|
|
||||||
|
if (result.status != 0)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
if (result.output.length >= 1) {
|
||||||
|
return "*";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
@ -4,7 +4,7 @@ string hr(int col) {
|
|||||||
string ps;
|
string ps;
|
||||||
|
|
||||||
foreach (i; 0 .. col) {
|
foreach (i; 0 .. col) {
|
||||||
ps ~= '—';
|
ps ~= '─';
|
||||||
}
|
}
|
||||||
|
|
||||||
return ps;
|
return ps;
|
||||||
|
33
source/comp/path.d
Normal file
33
source/comp/path.d
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
module comp.path;
|
||||||
|
|
||||||
|
import std.conv;
|
||||||
|
import std.regex;
|
||||||
|
import std.array;
|
||||||
|
|
||||||
|
import std.file : getcwd;
|
||||||
|
import std.path : expandTilde;
|
||||||
|
import std.algorithm : reverse;
|
||||||
|
|
||||||
|
string path(int pathlen) {
|
||||||
|
string ps;
|
||||||
|
|
||||||
|
string home = expandTilde("~");
|
||||||
|
string path = replaceFirst(getcwd(), regex(home), "~");
|
||||||
|
|
||||||
|
string[] splitPath = path.split("/").reverse();
|
||||||
|
|
||||||
|
string[] revSplitPath;
|
||||||
|
for (int i = 0; i < pathlen; i++) {
|
||||||
|
if (i >= splitPath.length)
|
||||||
|
break;
|
||||||
|
|
||||||
|
revSplitPath ~= splitPath[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
splitPath = revSplitPath.reverse();
|
||||||
|
|
||||||
|
ps ~= splitPath.join("/");
|
||||||
|
|
||||||
|
return ps ~ "/";
|
||||||
|
|
||||||
|
}
|
@ -1,10 +1,11 @@
|
|||||||
module prompt.preexec;
|
module prompt.preexec;
|
||||||
|
|
||||||
|
import prim.opt;
|
||||||
import comp.hr;
|
import comp.hr;
|
||||||
|
|
||||||
import style;
|
import style;
|
||||||
import style.color;
|
import style.color;
|
||||||
|
|
||||||
string preexec(int col) {
|
string preexec(Opts opt) {
|
||||||
return hr(col).set(Color.black);
|
return "";
|
||||||
}
|
}
|
||||||
|
@ -3,7 +3,9 @@ module prompt.ps1;
|
|||||||
import std.conv;
|
import std.conv;
|
||||||
|
|
||||||
import prim.opt;
|
import prim.opt;
|
||||||
|
|
||||||
import comp.hr;
|
import comp.hr;
|
||||||
|
import comp.path;
|
||||||
|
|
||||||
import style;
|
import style;
|
||||||
import style.color;
|
import style.color;
|
||||||
@ -12,14 +14,13 @@ import style.font;
|
|||||||
string ps1(Opts opt) {
|
string ps1(Opts opt) {
|
||||||
string ps;
|
string ps;
|
||||||
|
|
||||||
// divider
|
string pathstr = path(opt.pathlen);
|
||||||
ps ~= hr(opt.col).set(Color.black);
|
|
||||||
|
|
||||||
// previous command status
|
ps ~= "\n";
|
||||||
ps ~= ("(" ~ to!string(opt.status) ~ ") ").set(Color.black);
|
ps ~= (",-(" ~ pathstr ~ ")").set(Color.black);
|
||||||
|
ps ~= "\n";
|
||||||
|
|
||||||
// prompt char
|
ps ~= ("'-(" ~ to!string(opt.status) ~ ") ").set(Color.black); // prompt char
|
||||||
ps ~= "|> ".set(Font.bold).set(opt.status == 0 ? Color.green : Color.red);
|
ps ~= "|> ".set(Font.bold).set(opt.status == 0 ? Color.green : Color.red);
|
||||||
|
|
||||||
return ps;
|
return ps;
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,10 @@
|
|||||||
module prompt.rps1;
|
module prompt.rps1;
|
||||||
|
|
||||||
import std.conv;
|
|
||||||
import std.regex;
|
|
||||||
import std.array;
|
|
||||||
|
|
||||||
import std.file : getcwd;
|
|
||||||
import std.path : expandTilde;
|
|
||||||
import std.algorithm : reverse;
|
|
||||||
|
|
||||||
import prim.opt;
|
import prim.opt;
|
||||||
|
|
||||||
|
import comp.path;
|
||||||
|
import comp.git;
|
||||||
|
|
||||||
import style;
|
import style;
|
||||||
import style.color;
|
import style.color;
|
||||||
import style.font;
|
import style.font;
|
||||||
@ -17,22 +12,8 @@ import style.font;
|
|||||||
string rps1(Opts opt) {
|
string rps1(Opts opt) {
|
||||||
string ps;
|
string ps;
|
||||||
|
|
||||||
string home = expandTilde("~");
|
ps ~= (gitBranch()).set(Font.bold).set(Color.cyan);
|
||||||
string path = replaceFirst(getcwd(), regex(home), "~");
|
ps ~= (gitStatus());
|
||||||
|
|
||||||
string[] splitPath = path.split("/").reverse();
|
return ps;
|
||||||
|
|
||||||
string[] revSplitPath;
|
|
||||||
for (int i = 0; i < opt.pathlen; i++) {
|
|
||||||
if (i >= splitPath.length)
|
|
||||||
break;
|
|
||||||
|
|
||||||
revSplitPath ~= splitPath[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
splitPath = revSplitPath.reverse();
|
|
||||||
|
|
||||||
ps ~= splitPath.join("/");
|
|
||||||
|
|
||||||
return ps.set(Font.italic).set(Color.yellow);
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user