From 74732506dcffa0c65869e67e13b2abb11b2931e7 Mon Sep 17 00:00:00 2001 From: Jonathan Dowland Date: Wed, 14 Feb 2024 22:21:35 +0000 Subject: [PATCH 1/4] ;feat: ui: redefine default theme in terms of fixed colors Define the default theme in terms of colors from the fixed 240-color (almost 8-bit) palette. This should ensure consistency between different terminal applications. If a terminal does not support the 240-color palette (very unlikely these days. Simulate with TERM=xterm-color) the UI is unusable. To mitigate this, selections are also marked as "reverse video", which will ensure they are differentiated even with colours disabled. Signed-off-by: Jonathan Dowland --- hledger-ui/Hledger/UI/Theme.hs | 67 +++++++++++++++++++--------------- 1 file changed, 37 insertions(+), 30 deletions(-) diff --git a/hledger-ui/Hledger/UI/Theme.hs b/hledger-ui/Hledger/UI/Theme.hs index fefd74deeea..1a172614587 100644 --- a/hledger-ui/Hledger/UI/Theme.hs +++ b/hledger-ui/Hledger/UI/Theme.hs @@ -59,39 +59,46 @@ themeNames :: [String] themeNames = map fst themesList (&) = withStyle -active = fg brightWhite & bold -selectbg = yellow -select = black `on` selectbg + +-- colors from the 8-bit (ish) 240-colour palette (see +-- , subtract +-- 16 to correct the offset from the 4-bit color palette). These colors +-- should appear the same in all supported terminals. +white8 = Color240 (253 - 16) +black8 = Color240 (232 - 16) +red8 = Color240 (124 - 16) +yellow8 = Color240 (178 - 16) +blue8 = Color240 (25 - 16) +active8 = fg (Color240 (255 - 16)) & bold +-- we use reverseVideo here to have a legible fallback if the terminal does +-- not support the colors (and falls back to black/white) +select8 = yellow8 `on` black8 & reverseVideo +selectNeg = yellow8 `on` red8 & reverseVideo -- & bold themesList :: [(String, AttrMap)] themesList = [ - ("default", attrMap (black `on` white) [ - (attrName "border" , white `on` black & dim) - ,(attrName "border" <> attrName "bold" , currentAttr & bold) - ,(attrName "border" <> attrName "depth" , active) - ,(attrName "border" <> attrName "filename" , currentAttr) - ,(attrName "border" <> attrName "key" , active) - ,(attrName "border" <> attrName "minibuffer" , white `on` black & bold) - ,(attrName "border" <> attrName "query" , active) - ,(attrName "border" <> attrName "selected" , active) - ,(attrName "error" , fg red) - ,(attrName "help" , white `on` black & dim) - ,(attrName "help" <> attrName "heading" , fg yellow) - ,(attrName "help" <> attrName "key" , active) - -- ,(attrName "list" , black `on` white) - -- ,(attrName "list" <> attrName "amount" , currentAttr) - ,(attrName "list" <> attrName "amount" <> attrName "decrease" , fg red) - -- ,(attrName "list" <> attrName "amount" <> attrName "increase" , fg green) - ,(attrName "list" <> attrName "amount" <> attrName "decrease" <> attrName "selected" , red `on` selectbg & bold) - -- ,(attrName "list" <> attrName "amount" <> attrName "increase" <> attrName "selected" , green `on` selectbg & bold) - ,(attrName "list" <> attrName "balance" , currentAttr & bold) - ,(attrName "list" <> attrName "balance" <> attrName "negative" , fg red) - ,(attrName "list" <> attrName "balance" <> attrName "positive" , fg black) - ,(attrName "list" <> attrName "balance" <> attrName "negative" <> attrName "selected" , red `on` selectbg & bold) - ,(attrName "list" <> attrName "balance" <> attrName "positive" <> attrName "selected" , select & bold) - ,(attrName "list" <> attrName "selected" , select) - -- ,(attrName "list" <> attrName "accounts" , white `on` brightGreen) - -- ,(attrName "list" <> attrName "selected" , black `on` brightYellow) + -- the default theme, "light", defined in terms of the 240-color palette + ("default", attrMap (black8 `on` white8) [ + (attrName "border" , white8 `on` black8 & dim) + , (attrName "border" <> attrName "bold" , currentAttr & bold) + , (attrName "border" <> attrName "depth" , active8) + , (attrName "border" <> attrName "filename" , currentAttr) + , (attrName "border" <> attrName "key" , active8) + , (attrName "border" <> attrName "minibuffer" , white8 `on` black8 & bold) + , (attrName "border" <> attrName "query" , active8) + , (attrName "border" <> attrName "selected" , active8) + , (attrName "error" , fg red8) + , (attrName "help" , white8 `on` black8 & dim) + , (attrName "help" <> attrName "heading" , fg yellow8) + , (attrName "help" <> attrName "key" , active8) + , (attrName "list" <> attrName "amount" <> attrName "decrease" , fg red8) + , (attrName "list" <> attrName "amount" <> attrName "decrease" <> attrName "selected" , selectNeg) + , (attrName "list" <> attrName "balance" , currentAttr & bold) + , (attrName "list" <> attrName "balance" <> attrName "negative" , fg red8) + , (attrName "list" <> attrName "balance" <> attrName "positive" , fg black8) + , (attrName "list" <> attrName "balance" <> attrName "negative" <> attrName "selected" , selectNeg) + , (attrName "list" <> attrName "balance" <> attrName "positive" <> attrName "selected" , select8) + , (attrName "list" <> attrName "selected" , select8) ]) ,("greenterm", attrMap (green `on` black) [ From 5cc6e1408db663443f0a83a6dcb45dff9537b0ee Mon Sep 17 00:00:00 2001 From: Jonathan Dowland Date: Sat, 17 Feb 2024 22:07:49 +0000 Subject: [PATCH 2/4] ;feat: ui: delete old comment --- hledger-ui/Hledger/UI/Theme.hs | 7 ------- 1 file changed, 7 deletions(-) diff --git a/hledger-ui/Hledger/UI/Theme.hs b/hledger-ui/Hledger/UI/Theme.hs index 1a172614587..a6b5db098a8 100644 --- a/hledger-ui/Hledger/UI/Theme.hs +++ b/hledger-ui/Hledger/UI/Theme.hs @@ -135,10 +135,3 @@ themesList = [ ]) ] - --- halfbrightattr = defAttr & dim --- reverseattr = defAttr & reverseVideo --- redattr = defAttr `withForeColor` red --- greenattr = defAttr `withForeColor` green --- reverseredattr = defAttr & reverseVideo `withForeColor` red --- reversegreenattr= defAttr & reverseVideo `withForeColor` green From d0adc7d5fedfbeccecdd70614ef5ebd82ab57e1f Mon Sep 17 00:00:00 2001 From: Jonathan Dowland Date: Thu, 22 Feb 2024 21:14:09 +0000 Subject: [PATCH 3/4] ;feat: ui: redefine dark theme in fixed colors Signed-off-by: Jonathan Dowland --- hledger-ui/Hledger/UI/Theme.hs | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/hledger-ui/Hledger/UI/Theme.hs b/hledger-ui/Hledger/UI/Theme.hs index a6b5db098a8..faba7f7c136 100644 --- a/hledger-ui/Hledger/UI/Theme.hs +++ b/hledger-ui/Hledger/UI/Theme.hs @@ -112,26 +112,26 @@ themesList = [ ]) ,("dark", attrMap (white `on` black & dim) [ - (attrName "border" , white `on` black) + (attrName "border" , white8 `on` black8) , (attrName "border" <> attrName "bold" , currentAttr & bold) - , (attrName "border" <> attrName "depth" , active) + , (attrName "border" <> attrName "depth" , active8) , (attrName "border" <> attrName "filename" , currentAttr) - , (attrName "border" <> attrName "key" , active) - , (attrName "border" <> attrName "minibuffer" , white `on` black & bold) - , (attrName "border" <> attrName "query" , active) - , (attrName "border" <> attrName "selected" , active) - , (attrName "error" , fg red) + , (attrName "border" <> attrName "key" , active8) + , (attrName "border" <> attrName "minibuffer" , white8 `on` black8 & bold) + , (attrName "border" <> attrName "query" , active8) + , (attrName "border" <> attrName "selected" , active8) + , (attrName "error" , fg red8) , (attrName "help" , currentAttr & bold) - , (attrName "help" <> attrName "heading" , fg blue) - , (attrName "help" <> attrName "key" , active) - , (attrName "list" <> attrName "amount" <> attrName "decrease" , fg red) - , (attrName "list" <> attrName "amount" <> attrName "decrease" <> attrName "selected" , red `on` black & bold) + , (attrName "help" <> attrName "heading" , fg blue8) + , (attrName "help" <> attrName "key" , active8) + , (attrName "list" <> attrName "amount" <> attrName "decrease" , fg red8) + , (attrName "list" <> attrName "amount" <> attrName "decrease" <> attrName "selected" , red8 `on` black8 & bold) , (attrName "list" <> attrName "balance" , currentAttr) - , (attrName "list" <> attrName "balance" <> attrName "negative" , fg red) - , (attrName "list" <> attrName "balance" <> attrName "positive" , fg white) - , (attrName "list" <> attrName "balance" <> attrName "negative" <> attrName "selected" , red `on` black & bold) - , (attrName "list" <> attrName "balance" <> attrName "positive" <> attrName "selected" , yellow `on` black & bold) - , (attrName "list" <> attrName "selected" , yellow `on` black & bold) + , (attrName "list" <> attrName "balance" <> attrName "negative" , fg red8) + , (attrName "list" <> attrName "balance" <> attrName "positive" , fg white8) + , (attrName "list" <> attrName "balance" <> attrName "negative" <> attrName "selected" , red8 `on` black8 & bold) + , (attrName "list" <> attrName "balance" <> attrName "positive" <> attrName "selected" , yellow8 `on` black8 & bold) + , (attrName "list" <> attrName "selected" , yellow8 `on` black8 & bold) ]) ] From c2dd3b73f5df1071549b455111fdbab93d756b86 Mon Sep 17 00:00:00 2001 From: Jonathan Dowland Date: Thu, 22 May 2025 08:53:41 +0100 Subject: [PATCH 4/4] ;feat: ui: Rename the default theme 'light' (#2168) Fixes: #2168. Signed-off-by: Jonathan Dowland --- hledger-ui/Hledger/UI/Theme.hs | 2 +- hledger-ui/hledger-ui.1 | 2 +- hledger-ui/hledger-ui.info | 2 +- hledger-ui/hledger-ui.m4.md | 2 +- hledger-ui/hledger-ui.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hledger-ui/Hledger/UI/Theme.hs b/hledger-ui/Hledger/UI/Theme.hs index faba7f7c136..3949b98a608 100644 --- a/hledger-ui/Hledger/UI/Theme.hs +++ b/hledger-ui/Hledger/UI/Theme.hs @@ -78,7 +78,7 @@ selectNeg = yellow8 `on` red8 & reverseVideo -- & bold themesList :: [(String, AttrMap)] themesList = [ -- the default theme, "light", defined in terms of the 240-color palette - ("default", attrMap (black8 `on` white8) [ + ("light", attrMap (black8 `on` white8) [ (attrName "border" , white8 `on` black8 & dim) , (attrName "border" <> attrName "bold" , currentAttr & bold) , (attrName "border" <> attrName "depth" , active8) diff --git a/hledger-ui/hledger-ui.1 b/hledger-ui/hledger-ui.1 index 9816cfc7fa4..aef3c2c173d 100644 --- a/hledger-ui/hledger-ui.1 +++ b/hledger-ui/hledger-ui.1 @@ -53,7 +53,7 @@ hledger\-ui provides the following options: Flags: \-w \-\-watch watch for data and date changes and reload automatically - \-\-theme=THEME use this custom display theme (default, + \-\-theme=THEME use this custom display theme (light, greenterm, terminal, dark) \-\-cash start in the cash accounts screen \-\-bs start in the balance sheet accounts screen diff --git a/hledger-ui/hledger-ui.info b/hledger-ui/hledger-ui.info index ea5a52d1fa8..a2f2602d566 100644 --- a/hledger-ui/hledger-ui.info +++ b/hledger-ui/hledger-ui.info @@ -66,7 +66,7 @@ hledger-ui provides the following options: Flags: -w --watch watch for data and date changes and reload automatically - --theme=THEME use this custom display theme (default, + --theme=THEME use this custom display theme (light, greenterm, terminal, dark) --cash start in the cash accounts screen --bs start in the balance sheet accounts screen diff --git a/hledger-ui/hledger-ui.m4.md b/hledger-ui/hledger-ui.m4.md index f8b98a855c5..343496fb1c2 100644 --- a/hledger-ui/hledger-ui.m4.md +++ b/hledger-ui/hledger-ui.m4.md @@ -58,7 +58,7 @@ hledger-ui provides the following options: Flags: -w --watch watch for data and date changes and reload automatically - --theme=THEME use this custom display theme (default, + --theme=THEME use this custom display theme (light, greenterm, terminal, dark) --cash start in the cash accounts screen --bs start in the balance sheet accounts screen diff --git a/hledger-ui/hledger-ui.txt b/hledger-ui/hledger-ui.txt index 0bf4f6dabde..e8667c41d82 100644 --- a/hledger-ui/hledger-ui.txt +++ b/hledger-ui/hledger-ui.txt @@ -44,7 +44,7 @@ OPTIONS Flags: -w --watch watch for data and date changes and reload automatically - --theme=THEME use this custom display theme (default, + --theme=THEME use this custom display theme (light, greenterm, terminal, dark) --cash start in the cash accounts screen --bs start in the balance sheet accounts screen