added option for not printing ip removed unused functions
sophuwu sophie@skisiel.com
Wed, 15 Jan 2025 16:15:27 +0100
6 files changed,
64 insertions(+),
142 deletions(-)
M
README.html
→
README.html
@@ -1,4 +1,4 @@
-<h1>Bash Prompt Generator</h1> +<h1>Rainbow Bash Prompt</h1> <style> code span { font-family: inherit!important;@@ -6,19 +6,29 @@ }
</style> <h2>html estimate output:</h2> <pre><code class="terminal"><span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">0</span><span style="color: #00FFFF!important;"> </span><span style="color: #0095FF!important;">1</span><span style="color: #002BFF!important;">7</span> <span style="color: #0000FF!important;">:</span><span style="color: #6A00FF!important;">3</span><span style="color: #D400FF!important;"> </span><span style="color: #FF0095!important;">p</span><span style="color: #FF002B!important;">r</span><span style="color: #FF0000!important;">o</span><span style="color: #FF6A00!important;">j</span><span style="color: #FFD400!important;">e</span><span style="color: #FFFF00!important;">c</span><span style="color: #95FF00!important;">t</span><span style="color: #2BFF00!important;"> </span><span style="color: #00FF6A!important;">b</span><span style="color: #00FFD4!important;">a</span><span style="color: #00FFFF!important;">s</span><span style="color: #0095FF!important;">h</span><span style="color: #002BFF!important;">p</span><span style="color: #0000FF!important;">r</span><span style="color: #6A00FF!important;">o</span><span style="color: #D400FF!important;">m</span><span style="color: #FF0095!important;">p</span><span style="color: #FF002B!important;">t</span> <span style="color: #FF0000!important;">$</span> -<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">0</span><span style="color: #0000FF!important;"> </span><span style="color: #6A00FF!important;">1</span><span style="color: #D400FF!important;">8</span> <span style="color: #FF0095!important;">;</span><span style="color: #FF002B!important;">></span><span style="color: #FF0000!important;"> </span><span style="color: #FF6A00!important;">p</span><span style="color: #FFD400!important;">r</span><span style="color: #FFFF00!important;">o</span><span style="color: #95FF00!important;">j</span><span style="color: #2BFF00!important;">e</span><span style="color: #00FF6A!important;">c</span><span style="color: #00FFD4!important;">t</span><span style="color: #00FFFF!important;"> </span><span style="color: #0095FF!important;">b</span><span style="color: #002BFF!important;">a</span><span style="color: #0000FF!important;">s</span><span style="color: #6A00FF!important;">h</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">r</span><span style="color: #FF002B!important;">o</span><span style="color: #FF0000!important;">m</span><span style="color: #FF6A00!important;">p</span><span style="color: #FFD400!important;">t</span> <span style="color: #FFFF00!important;">$</span> cd build/ -<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">0</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">1</span><span style="color: #FF0000!important;">9</span> <span style="color: #FF6A00!important;">:</span><span style="color: #FFD400!important;">></span><span style="color: #FFFF00!important;"> </span><span style="color: #95FF00!important;">b</span><span style="color: #2BFF00!important;">a</span><span style="color: #00FF6A!important;">s</span><span style="color: #00FFD4!important;">h</span><span style="color: #00FFFF!important;">p</span><span style="color: #0095FF!important;">r</span><span style="color: #002BFF!important;">o</span><span style="color: #0000FF!important;">m</span><span style="color: #6A00FF!important;">p</span><span style="color: #D400FF!important;">t</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">b</span><span style="color: #FF0000!important;">u</span><span style="color: #FF6A00!important;">i</span><span style="color: #FFD400!important;">l</span><span style="color: #FFFF00!important;">d</span> <span style="color: #95FF00!important;">$</span> false -<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">1</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">2</span><span style="color: #FF6A00!important;">0</span> <span style="color: #FFD400!important;">:</span><span style="color: #FFFF00!important;">)</span><span style="color: #95FF00!important;"> </span><span style="color: #2BFF00!important;">b</span><span style="color: #00FF6A!important;">a</span><span style="color: #00FFD4!important;">s</span><span style="color: #00FFFF!important;">h</span><span style="color: #0095FF!important;">p</span><span style="color: #002BFF!important;">r</span><span style="color: #0000FF!important;">o</span><span style="color: #6A00FF!important;">m</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">t</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">b</span><span style="color: #FF6A00!important;">u</span><span style="color: #FFD400!important;">i</span><span style="color: #FFFF00!important;">l</span><span style="color: #95FF00!important;">d</span> <span style="color: #2BFF00!important;">$</span> [[ "str" == "str" ]] -<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">0</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">2</span><span style="color: #FF6A00!important;">1</span> <span style="color: #FFD400!important;">;</span><span style="color: #FFFF00!important;">P</span><span style="color: #95FF00!important;"> </span><span style="color: #2BFF00!important;">b</span><span style="color: #00FF6A!important;">a</span><span style="color: #00FFD4!important;">s</span><span style="color: #00FFFF!important;">h</span><span style="color: #0095FF!important;">p</span><span style="color: #002BFF!important;">r</span><span style="color: #0000FF!important;">o</span><span style="color: #6A00FF!important;">m</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">t</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">b</span><span style="color: #FF6A00!important;">u</span><span style="color: #FFD400!important;">i</span><span style="color: #FFFF00!important;">l</span><span style="color: #95FF00!important;">d</span> <span style="color: #2BFF00!important;">$</span> [[ "str" == "strs" ]] -<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;">|</span><span style="color: #FF5F00!important;">1</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">2</span><span style="color: #FF0000!important;">2</span> <span style="color: #FF6A00!important;">;</span><span style="color: #FFD400!important;">></span><span style="color: #FFFF00!important;"> </span><span style="color: #95FF00!important;">b</span><span style="color: #2BFF00!important;">a</span><span style="color: #00FF6A!important;">s</span><span style="color: #00FFD4!important;">h</span><span style="color: #00FFFF!important;">p</span><span style="color: #0095FF!important;">r</span><span style="color: #002BFF!important;">o</span><span style="color: #0000FF!important;">m</span><span style="color: #6A00FF!important;">p</span><span style="color: #D400FF!important;">t</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">b</span><span style="color: #FF0000!important;">u</span><span style="color: #FF6A00!important;">i</span><span style="color: #FFD400!important;">l</span><span style="color: #FFFF00!important;">d</span> <span style="color: #95FF00!important;">$</span> +<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;"> </span><span style="color: #FF5F00!important;">0</span><span style="color: #0000FF!important;"> </span><span style="color: #6A00FF!important;">1</span><span style="color: #D400FF!important;">8</span> <span style="color: #FF0095!important;">;</span><span style="color: #FF002B!important;">></span><span style="color: #FF0000!important;"> </span><span style="color: #FF6A00!important;">p</span><span style="color: #FFD400!important;">r</span><span style="color: #FFFF00!important;">o</span><span style="color: #95FF00!important;">j</span><span style="color: #2BFF00!important;">e</span><span style="color: #00FF6A!important;">c</span><span style="color: #00FFD4!important;">t</span><span style="color: #00FFFF!important;"> </span><span style="color: #0095FF!important;">b</span><span style="color: #002BFF!important;">a</span><span style="color: #0000FF!important;">s</span><span style="color: #6A00FF!important;">h</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">r</span><span style="color: #FF002B!important;">o</span><span style="color: #FF0000!important;">m</span><span style="color: #FF6A00!important;">p</span><span style="color: #FFD400!important;">t</span> <span style="color: #FFFF00!important;">$</span> cd build/ +<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;"> </span><span style="color: #FF5F00!important;">0</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">1</span><span style="color: #FF0000!important;">9</span> <span style="color: #FF6A00!important;">:</span><span style="color: #FFD400!important;">></span><span style="color: #FFFF00!important;"> </span><span style="color: #95FF00!important;">b</span><span style="color: #2BFF00!important;">a</span><span style="color: #00FF6A!important;">s</span><span style="color: #00FFD4!important;">h</span><span style="color: #00FFFF!important;">p</span><span style="color: #0095FF!important;">r</span><span style="color: #002BFF!important;">o</span><span style="color: #0000FF!important;">m</span><span style="color: #6A00FF!important;">p</span><span style="color: #D400FF!important;">t</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">b</span><span style="color: #FF0000!important;">u</span><span style="color: #FF6A00!important;">i</span><span style="color: #FFD400!important;">l</span><span style="color: #FFFF00!important;">d</span> <span style="color: #95FF00!important;">$</span> false +<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;"> </span><span style="color: #FF5F00!important;">1</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">2</span><span style="color: #FF6A00!important;">0</span> <span style="color: #FFD400!important;">:</span><span style="color: #FFFF00!important;">)</span><span style="color: #95FF00!important;"> </span><span style="color: #2BFF00!important;">b</span><span style="color: #00FF6A!important;">a</span><span style="color: #00FFD4!important;">s</span><span style="color: #00FFFF!important;">h</span><span style="color: #0095FF!important;">p</span><span style="color: #002BFF!important;">r</span><span style="color: #0000FF!important;">o</span><span style="color: #6A00FF!important;">m</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">t</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">b</span><span style="color: #FF6A00!important;">u</span><span style="color: #FFD400!important;">i</span><span style="color: #FFFF00!important;">l</span><span style="color: #95FF00!important;">d</span> <span style="color: #2BFF00!important;">$</span> [[ "str" == "str" ]] +<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;"> </span><span style="color: #FF5F00!important;">0</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">2</span><span style="color: #FF6A00!important;">1</span> <span style="color: #FFD400!important;">;</span><span style="color: #FFFF00!important;">P</span><span style="color: #95FF00!important;"> </span><span style="color: #2BFF00!important;">b</span><span style="color: #00FF6A!important;">a</span><span style="color: #00FFD4!important;">s</span><span style="color: #00FFFF!important;">h</span><span style="color: #0095FF!important;">p</span><span style="color: #002BFF!important;">r</span><span style="color: #0000FF!important;">o</span><span style="color: #6A00FF!important;">m</span><span style="color: #D400FF!important;">p</span><span style="color: #FF0095!important;">t</span><span style="color: #FF002B!important;"> </span><span style="color: #FF0000!important;">b</span><span style="color: #FF6A00!important;">u</span><span style="color: #FFD400!important;">i</span><span style="color: #FFFF00!important;">l</span><span style="color: #95FF00!important;">d</span> <span style="color: #2BFF00!important;">$</span> [[ "str" == "strs" ]] +<span style="background-color:#D7AF00!important;"><span style="color: #AFFFAF!important;">▄</span></span><span style="background-color:#D75F00!important;"><span style="color: #5F0000!important;">▄</span></span><span style="color: #875FFF!important;"> </span><span style="color: #FF5F00!important;">1</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">2</span><span style="color: #FF0000!important;">2</span> <span style="color: #FF6A00!important;">;</span><span style="color: #FFD400!important;">></span><span style="color: #FFFF00!important;"> </span><span style="color: #95FF00!important;">b</span><span style="color: #2BFF00!important;">a</span><span style="color: #00FF6A!important;">s</span><span style="color: #00FFD4!important;">h</span><span style="color: #00FFFF!important;">p</span><span style="color: #0095FF!important;">r</span><span style="color: #002BFF!important;">o</span><span style="color: #0000FF!important;">m</span><span style="color: #6A00FF!important;">p</span><span style="color: #D400FF!important;">t</span><span style="color: #FF0095!important;"> </span><span style="color: #FF002B!important;">b</span><span style="color: #FF0000!important;">u</span><span style="color: #FF6A00!important;">i</span><span style="color: #FFD400!important;">l</span><span style="color: #FFFF00!important;">d</span> <span style="color: #95FF00!important;">$</span> </code></pre> <h2>Installation</h2> <pre><code class="terminal"> make -./build/bashprompt help +sudo install ./build/bashprompt /usr/local/bin/bashprompt +/usr/local/bin/bashprompt help </code></pre> -<p>Run the output to enable the prompt.</p> <p> Ensure that the file is executable and that you use an absolute path to the file. -Copy the output to your .bashrc for automatic start up. **DO NOT** USE .bash_profile or .profile. +Copy the output to your .bashrc for automatic start up. <b>DO NOT</b> USE .bash_profile or .profile. </p> + +<h2>Options:</h2> +Environment variables can be set to customize the prompt. + +<pre><code class="terminal">IPCOLOR=alt</code></pre> +<p>IP address will be colored with an alternate color palette.</p> + +<pre><code class="terminal">IPCOLOR=none</code></pre> +<p>IP address and username will not be printed.</p> +
M
README.md
→
README.md
@@ -1,8 +1,19 @@
+# Rainbow Bash Prompt + ## Installation ```bash make -./build/bashprompt help +sudo install ./build/bashprompt /usr/local/bin/bashprompt +/usr/local/bin/bashprompt help ``` -Run the output to enable the prompt. Ensure that the file is executable and that you use an absolute path to the file. Copy the output to your .bashrc for automatic start up. **DO NOT** USE .bash_profile or .profile. + +## Options: +Environment variables can be set to customize the prompt. + +* `IPCOLOR=alt` IP address will be colored with an alternate color palette. +* `IPCOLOR=none` IP address and username will not be printed. + + +
M
src/common.cpp
→
src/common.cpp
@@ -49,35 +49,17 @@ }
ret.push_back(temp); return ret; } -str hex = "0123456789ABCDEF"; -str tohex(int n) { - str ret = ""; - for (int i = 0; i < 2; i++) { - ret = hex[n%16] + ret; - n /= 16; - } - return ret; -} int int2col(int n) { if (n>255||n<0) return 0; int col = 0; - char* env = getenv("IPCOLOR"); - if (env != NULL) col=16; + const char* env = getenv("IPCOLOR"); + if (env != NULL && (std::string(env)=="alt"||std::string(env)=="ALT")) + col=16; n=(n*(216+col)/256)+(16-col); return n; } -int avg(int a[], int n) { - int sum = 0; - for (int i = 0; i < n; i++) sum += a[i]; - return sum/n; -} - -int map10(char a) { - int x = a-'0'; - return 36*(5*x/10)+6*(5*(10-x)/10)+16; -} str color2(int top, int bot) { str ret = "48;5;";
M
src/common.hpp
→
src/common.hpp
@@ -8,7 +8,6 @@
#include <cstdio> #include <cmath> // for sin -#include <cstdlib> // for rand #include <vector> #include <string> typedef std::string str;@@ -24,11 +23,8 @@ extern str envorcmd(str env, str cmd);
extern int atoi(int &n, const char *c, int i); extern int intenv(const char* env); extern std::vector<str> split(str s, char delim); -extern str tohex(int n); extern int int2col(int n); -extern int avg(int a[], int n); -extern int map10(char a); extern str color2(int top, int bot);
M
src/prompt.cpp
→
src/prompt.cpp
@@ -11,7 +11,22 @@
void exportenv(str k, str v) {printf("export %s=\"%s\"\n", k.c_str(), v.c_str());} -int randint(int n) {return rand()%n;} +int randint(int n) { + if (n<=0) return 0; + FILE *f = fopen("/dev/urandom", "r"); + if (f == NULL) return 0; + unsigned char buf; + unsigned int ret = 0; + for (int i = 0; i < 4; i++) { + ret<<=8; + fread(&buf, 1, 1, f); + ret += buf; + } + //fread(&buf, 1, 4, f); + fclose(f); + ret = ret % n; + return (int)ret; +} str mouthlist = ")3>]DPO"; str eyelist = ";:=";@@ -50,7 +65,7 @@
rainbow rain(int wavefactor=6) { rainbow r; const char* rainenv = getenv("RAINBOW"); - if (rainenv == NULL)r.init(25-randint(15)); + if (rainenv == NULL)r.init(35 - randint(10)); else { atoi(r.s, rainenv, atoi(r.c.b, rainenv, atoi(r.c.g, rainenv,atoi(r.c.r, rainenv, 0)+1)+1)+1); r.next();@@ -88,23 +103,23 @@ return 0;
} } int lineno = intenv("LINENO"); - if (lineno == 0)printf("%s\n","export LINENO COLUMNS LINES "); + if (lineno == 0)printf("%s\n","export LINENO"); PS1.r = rain(lineno); - srand((unsigned int)(intenv("RANDOM")+lineno)); - IP ip; - ip.fromCmd(); + str user=" "; + const char* ipcol = getenv("IPCOLOR"); + if (ipcol == NULL || !(std::string(ipcol)=="none"||std::string(ipcol)=="NONE")) { + IP ip; + ip.fromCmd(); + user = envorcmd("USER", "whoami"); + user = " " + user + " "; + PS1.output+=ip.toColor()+" "; + } - str user = envorcmd("USER", "whoami"); - if (user.length()==0 || user=="sophuwu") user=" "; - else user = " "+user+" "; - PS1.output+=ip.toColor(); - PS1.add("|", "99"); PS1.add("\\${?}", "202"); PS1.rain(user); - PS1.rain(std::to_string(lineno)); - PS1.add(" "); + PS1.rain(std::to_string(lineno)+" "); PS1.rain(emote()); str pwd = getpwd(); if (pwd.back()=='/')pwd.pop_back();@@ -116,9 +131,7 @@ parts.pop_back();
} if (base.length()==0) base = "/"; PS1.rain(base); - PS1.add(" "); - PS1.rain("$"); - PS1.add(" "); + PS1.rain(" $ "); PS1.set(); return 0;
D
test/color-test.py
@@ -1,90 +0,0 @@
-#!/usr/bin/python3 -import sys -import os - - -def rain(): - r=[rg for rg in range(0, 5)] - a=[[5-i%6+i%6, i%6,0] for i in r[:-1]]+[[i%6, 5-i%6+i%6,0] for i in r[::-1]] - a=a+[i[::-1] for i in a][:-1][::-1]+[[i%6, 0, 5-i%6+i%6] for i in r[1:]]+[[5,0,j-1] for j in range(5,1,-1)] - for i in range(len(a)): - r,g,b=a[i] - a[i]=36*r+6*g+b+16 - return a - - -def avg(arr): return sum(arr)//len(arr) - - -def box(i): return str("\033[48;5;"+str(i)+"m \033[0m") - - -def ax(b,f): return box(b).replace("m ",";38;5;"+str(f)+"m▄\033[0m") - - -def boxs(ip:list()): - if len(ip) == 4: return ax(ip[0],ip[1])+ax(ip[2],ip[3]) - if len(ip) == 2: return ax(ip[0],ip[1]) - else: return "" - - -def rgb(ip): - ip=[int(i) for i in ip] - ip=[avg(ip[2:3]),0,ip[1],0,255-avg(ip[2:3]),ip[0]] - ip=[str(i) for i in ip] - s="\033[48;2;" - s+=";".join(ip[:3]) - s+=";38;2;" - s+=";".join(ip[3:]) - s+="m▄\033[0m" - return s - - -def ip2rgb(ip): - if type(ip)==type(""): ip=ip.split(".") - if not (type(ip) is type([]) and len(ip) == 4): raise TypeError - col=0 - if os.getenv("IPCOLOR")in["less","216","0","alt"]:col=16 - ip = [(int(i)*(216+col)//256)+(16-col) for i in ip] - return ip - - -HXC=[rain()[i] for i in range(len(rain())) if int(i)%6<4] -HX="0123456789abcdef" -def hx(i: int): - s="" - while i>0: - s=str(HX[i%16])+s - i=i//16 - return s - - -def hexstr(instr:str): return hx(sum([[int(j) for j in instr.split(".")][::-1][i]<<8*i for i in range(4)])) -def hexc(instr:str): - h=hexstr(instr) - a=[] - for i in h: - a+=[HXC[HX.index(i)]] - return a - -if os.getenv("IPADDR") is not None: - try: - arg=os.getenv("IPADDR") - ip=ip2rgb(arg) - o=boxs(ip) - print(o) - exit(0) - except: - exit(1) - finally: - exit(2) - - -for arg in sys.argv: - try: - ip = ip2rgb(arg) - i=[int(j) for j in arg.split(".")] - print(rgb(i)+str(arg).rjust(15)+" "+boxs(ip)) - except TypeError: - continue -