netologist / theme-lambda

lambda theme for oh my fish
MIT License
61 stars 43 forks source link

The “╭─'” prompt can be too dark #28

Open alexislefebvre opened 6 months ago

alexislefebvre commented 6 months ago

I use the dark GNOME theme in gnome-terminal.

Capture d’écran du 2023-12-31 20-12-11

Lines 1 and 2 use the default theme, so hostcolor is used:

https://github.com/netologist/theme-lambda/blob/f47786e1019b965d55d5433fb604593bbdaeed69/functions/fish_prompt.fish#L19

As you can see on the screenshot, the name of the machine is “serveur”, and it causes the issue.

The colour of the prompt is the same as the result of this command:

echo "serveur" | md5sum | cut -f1 -d' ' | tr -d '\n' | tail -c6
1d410f

Lines 3 and 4 use a patch

I forced the colour on this environment:

diff --git a/functions/fish_prompt.fish b/functions/fish_prompt.fish
index 68b8125..7de249f 100644
--- a/functions/fish_prompt.fish
+++ b/functions/fish_prompt.fish
@@ -16,7 +16,7 @@ function fish_prompt
   end

   # Setup colors
-  set -l hostcolor (set_color (uname -n | md5sum | cut -f1 -d' ' | tr -d '\n' | tail -c6))
+  set -l hostcolor (set_color 803080)

Proposals

I don't have any idea to solve this, hostcolor may only use a color than is not too light or dark. Or a background may be used so that the prompt always have some contrast.

davidbstein commented 5 days ago

A quick and dirty fix would be to replace the 0, 1, and 2s with 3s...

set -l hostcolor (set_color (uname -n | md5sum | cut -f1 -d' ' | tr -d '\n' | tail -c6 | sed 's/[0-2]/3/g'))

but that would change the color of some servers, which might cause some users of the theme to worry they're on the wrong server.

A more heavyweight solution that would retain the same unique colors currently assigned to each server would be to check for dark colors and brighten them.

set -l _hostcolor_rgb (uname -n | md5sum | cut -f1 -d' ' | tr -d '\n' | tail -c6 | sed 's/\([0-9a-f][0-9a-f]\)/0x\1 /g')
set -l _hostcolor_value ''
if test (math (string replace -a " 0x" " + 0x" $_hostcolor_rgb) ) -le (math 0x99) # true when darker than #333333
  for _color in (string split " " (string trim $_hostcolor_rgb))
    set _hostcolor_value "$_hostcolor_value"(math -b16 0x33 + $_color | sed 's/0x//g' | sed 's/[0-9a-f][0-9a-f][0-9a-f]/ff/g')
  end
else
  set _hostcolor_value (echo $_hostcolor_rgb | sed 's/\(0x\| \)//g')
end
set -l hostcolor (set_color $_hostcolor_value)