mirror of
https://github.com/makeworld-the-better-one/amfora.git
synced 2024-11-21 23:19:15 +03:00
Text and element colors of default theme change to be black on white terminals
Ref #181
This commit is contained in:
parent
2e1049b8ab
commit
6666ef2584
@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Specifying `default` in the theme config uses the terminal's default background color, including transparency (#244, #245)
|
- Specifying `default` in the theme config uses the terminal's default background color, including transparency (#244, #245)
|
||||||
- Redirects occur automatically if it only adds a trailing slash (#271)
|
- Redirects occur automatically if it only adds a trailing slash (#271)
|
||||||
- Non-gemini links are underlined by default to help color blind users (#189)
|
- Non-gemini links are underlined by default to help color blind users (#189)
|
||||||
|
- Text and element colors of default theme change to be black on white terminals (#181)
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- Bookmarks are stored using XML in the XBEL format, old bookmarks are transferred (#68)
|
- Bookmarks are stored using XML in the XBEL format, old bookmarks are transferred (#68)
|
||||||
@ -24,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- The user's terminal theme colors are used by default (#181)
|
- The user's terminal theme colors are used by default (#181)
|
||||||
|
|
||||||
## Removed
|
## Removed
|
||||||
- Favicon support removed (#199)
|
- Favicon support (#199)
|
||||||
- The default Amfora theme, get it back [here](https://github.com/makeworld-the-better-one/amfora/blob/master/contrib/themes/amfora.toml)
|
- The default Amfora theme, get it back [here](https://github.com/makeworld-the-better-one/amfora/blob/master/contrib/themes/amfora.toml)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
1
NOTES.md
1
NOTES.md
@ -6,7 +6,6 @@
|
|||||||
## Upstream Bugs
|
## Upstream Bugs
|
||||||
- Bookmark keys aren't deleted, just set to `""`
|
- Bookmark keys aren't deleted, just set to `""`
|
||||||
- Waiting on [this viper PR](https://github.com/spf13/viper/pull/519) to be merged
|
- Waiting on [this viper PR](https://github.com/spf13/viper/pull/519) to be merged
|
||||||
- [cview.Styles not being used](https://code.rocketnine.space/tslocum/cview/issues/47) - issue is circumvented in Amfora
|
|
||||||
- [ANSI conversion is messed up](https://code.rocketnine.space/tslocum/cview/issues/48)
|
- [ANSI conversion is messed up](https://code.rocketnine.space/tslocum/cview/issues/48)
|
||||||
- [WordWrap is broken in some cases](https://code.rocketnine.space/tslocum/cview/issues/27) - close #156 if this is fixed
|
- [WordWrap is broken in some cases](https://code.rocketnine.space/tslocum/cview/issues/27) - close #156 if this is fixed
|
||||||
- [Prevent panic when reformatting](https://code.rocketnine.space/tslocum/cview/issues/50) - can't reliably reproduce or debug
|
- [Prevent panic when reformatting](https://code.rocketnine.space/tslocum/cview/issues/50) - can't reliably reproduce or debug
|
||||||
|
@ -15,6 +15,7 @@ import (
|
|||||||
"github.com/gdamore/tcell/v2"
|
"github.com/gdamore/tcell/v2"
|
||||||
"github.com/makeworld-the-better-one/amfora/cache"
|
"github.com/makeworld-the-better-one/amfora/cache"
|
||||||
homedir "github.com/mitchellh/go-homedir"
|
homedir "github.com/mitchellh/go-homedir"
|
||||||
|
"github.com/muesli/termenv"
|
||||||
"github.com/rkoesters/xdg/basedir"
|
"github.com/rkoesters/xdg/basedir"
|
||||||
"github.com/rkoesters/xdg/userdirs"
|
"github.com/rkoesters/xdg/userdirs"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
@ -59,6 +60,11 @@ var MediaHandlers = make(map[string]MediaHandler)
|
|||||||
// Defaults to ScrollBarAuto on an invalid value
|
// Defaults to ScrollBarAuto on an invalid value
|
||||||
var ScrollBar cview.ScrollBarVisibility
|
var ScrollBar cview.ScrollBarVisibility
|
||||||
|
|
||||||
|
// Whether the user's terminal is dark or light
|
||||||
|
// Defaults to dark, but is determined in Init()
|
||||||
|
// Used to prevent white text on a white background with the default theme
|
||||||
|
var hasDarkTerminalBackground bool
|
||||||
|
|
||||||
func Init() error {
|
func Init() error {
|
||||||
|
|
||||||
// *** Set paths ***
|
// *** Set paths ***
|
||||||
@ -370,7 +376,14 @@ func Init() error {
|
|||||||
}
|
}
|
||||||
if viper.GetBool("a-general.color") {
|
if viper.GetBool("a-general.color") {
|
||||||
cview.Styles.PrimitiveBackgroundColor = GetColor("bg")
|
cview.Styles.PrimitiveBackgroundColor = GetColor("bg")
|
||||||
} // Otherwise it's black by default
|
} else {
|
||||||
|
// No colors allowed, set backgroud to black instead of default
|
||||||
|
themeMu.Lock()
|
||||||
|
theme["bg"] = tcell.ColorBlack
|
||||||
|
cview.Styles.PrimitiveBackgroundColor = tcell.ColorBlack
|
||||||
|
}
|
||||||
|
|
||||||
|
hasDarkTerminalBackground = termenv.HasDarkBackground()
|
||||||
|
|
||||||
// Parse HTTP command
|
// Parse HTTP command
|
||||||
HTTPCommand = viper.GetStringSlice("a-general.http")
|
HTTPCommand = viper.GetStringSlice("a-general.http")
|
||||||
|
@ -11,27 +11,43 @@ import (
|
|||||||
// UI element tcell.Colors are mapped to a string key, such as "error" or "tab_bg"
|
// UI element tcell.Colors are mapped to a string key, such as "error" or "tab_bg"
|
||||||
// These are the same keys used in the config file.
|
// These are the same keys used in the config file.
|
||||||
|
|
||||||
|
// Special color with no real color value
|
||||||
|
// Used for a default foreground color
|
||||||
|
// White is the terminal background is black, black if the terminal background is white
|
||||||
|
// Converted to a real color in this file before being sent out to other modules
|
||||||
|
const ColorFg = tcell.ColorSpecial | 2
|
||||||
|
|
||||||
|
// The same as ColorFg, but inverted
|
||||||
|
const ColorBg = tcell.ColorSpecial | 3
|
||||||
|
|
||||||
var themeMu = sync.RWMutex{}
|
var themeMu = sync.RWMutex{}
|
||||||
var theme = map[string]tcell.Color{
|
var theme = map[string]tcell.Color{
|
||||||
|
// Map these for special uses in code
|
||||||
|
"ColorBg": ColorBg,
|
||||||
|
"ColorFg": ColorFg,
|
||||||
|
|
||||||
// Default values below
|
// Default values below
|
||||||
// Only the 16 Xterm system tcell.Colors are used, because those are the tcell.Colors overrided
|
// Only the 16 Xterm system tcell.Colors are used, because those are the tcell.Colors overrided
|
||||||
// by the user's default terminal theme
|
// by the user's default terminal theme
|
||||||
|
|
||||||
// Used for cview.Styles.PrimitiveBackgroundColor
|
// Used for cview.Styles.PrimitiveBackgroundColor
|
||||||
// Set to tcell.ColorDefault because that allows transparent terminals to work
|
// Set to tcell.ColorDefault because that allows transparent terminals to work
|
||||||
// The rest of this theme assumes that the background is equivalent to tcell.Color zero, or black.
|
// The rest of this theme assumes that the background is equivalent to black, but
|
||||||
|
// white colors switched to black later if the background is determined to be white.
|
||||||
|
//
|
||||||
|
// Also, this is set to tcell.ColorBlack in config.go if colors are disabled in the config.
|
||||||
"bg": tcell.ColorDefault,
|
"bg": tcell.ColorDefault,
|
||||||
|
|
||||||
"tab_num": tcell.ColorTeal,
|
"tab_num": tcell.ColorTeal,
|
||||||
"tab_divider": tcell.ColorWhite,
|
"tab_divider": ColorFg,
|
||||||
"bottombar_label": tcell.ColorTeal,
|
"bottombar_label": tcell.ColorTeal,
|
||||||
"bottombar_text": tcell.ColorBlack,
|
"bottombar_text": ColorBg,
|
||||||
"bottombar_bg": tcell.ColorWhite,
|
"bottombar_bg": ColorFg,
|
||||||
"scrollbar": tcell.ColorWhite,
|
"scrollbar": ColorFg,
|
||||||
|
|
||||||
// Modals
|
// Modals
|
||||||
"btn_bg": tcell.ColorTeal, // All modal buttons
|
"btn_bg": tcell.ColorTeal, // All modal buttons
|
||||||
"btn_text": tcell.ColorWhite,
|
"btn_text": tcell.ColorWhite, // White instead of ColorFg because background is known to be Teal
|
||||||
|
|
||||||
"dl_choice_modal_bg": tcell.ColorOlive,
|
"dl_choice_modal_bg": tcell.ColorOlive,
|
||||||
"dl_choice_modal_text": tcell.ColorWhite,
|
"dl_choice_modal_text": tcell.ColorWhite,
|
||||||
@ -65,10 +81,10 @@ var theme = map[string]tcell.Color{
|
|||||||
"amfora_link": tcell.ColorBlue,
|
"amfora_link": tcell.ColorBlue,
|
||||||
"foreign_link": tcell.ColorPurple,
|
"foreign_link": tcell.ColorPurple,
|
||||||
"link_number": tcell.ColorSilver,
|
"link_number": tcell.ColorSilver,
|
||||||
"regular_text": tcell.ColorWhite,
|
"regular_text": ColorFg,
|
||||||
"quote_text": tcell.ColorWhite,
|
"quote_text": ColorFg,
|
||||||
"preformatted_text": tcell.ColorWhite,
|
"preformatted_text": ColorFg,
|
||||||
"list_text": tcell.ColorWhite,
|
"list_text": ColorFg,
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetColor(key string, color tcell.Color) {
|
func SetColor(key string, color tcell.Color) {
|
||||||
@ -83,7 +99,23 @@ func SetColor(key string, color tcell.Color) {
|
|||||||
func GetColor(key string) tcell.Color {
|
func GetColor(key string) tcell.Color {
|
||||||
themeMu.RLock()
|
themeMu.RLock()
|
||||||
defer themeMu.RUnlock()
|
defer themeMu.RUnlock()
|
||||||
return theme[key]
|
|
||||||
|
color := theme[key]
|
||||||
|
|
||||||
|
if color == ColorFg {
|
||||||
|
if hasDarkTerminalBackground {
|
||||||
|
return tcell.ColorWhite
|
||||||
|
}
|
||||||
|
return tcell.ColorBlack
|
||||||
|
}
|
||||||
|
if color == ColorBg {
|
||||||
|
if hasDarkTerminalBackground {
|
||||||
|
return tcell.ColorBlack
|
||||||
|
}
|
||||||
|
return tcell.ColorWhite
|
||||||
|
}
|
||||||
|
|
||||||
|
return color
|
||||||
}
|
}
|
||||||
|
|
||||||
// colorToString converts a color to a string for use in a cview tag
|
// colorToString converts a color to a string for use in a cview tag
|
||||||
@ -92,6 +124,19 @@ func colorToString(color tcell.Color) string {
|
|||||||
return "-"
|
return "-"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if color == ColorFg {
|
||||||
|
if hasDarkTerminalBackground {
|
||||||
|
return "white"
|
||||||
|
}
|
||||||
|
return "black"
|
||||||
|
}
|
||||||
|
if color == ColorBg {
|
||||||
|
if hasDarkTerminalBackground {
|
||||||
|
return "black"
|
||||||
|
}
|
||||||
|
return "white"
|
||||||
|
}
|
||||||
|
|
||||||
if color&tcell.ColorIsRGB == 0 {
|
if color&tcell.ColorIsRGB == 0 {
|
||||||
// tcell.Color is not RGB/TrueColor, it's a tcell.Color from the default terminal
|
// tcell.Color is not RGB/TrueColor, it's a tcell.Color from the default terminal
|
||||||
// theme as set above
|
// theme as set above
|
||||||
@ -99,6 +144,7 @@ func colorToString(color tcell.Color) string {
|
|||||||
return ColorToColorName[color]
|
return ColorToColorName[color]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Color set by user, must be respected exactly so hex code is used
|
||||||
return fmt.Sprintf("#%06x", color.Hex())
|
return fmt.Sprintf("#%06x", color.Hex())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -96,8 +96,6 @@ func Init(version, commit, builtBy string) {
|
|||||||
layout.AddItem(bottomBar, 1, 1, false)
|
layout.AddItem(bottomBar, 1, 1, false)
|
||||||
|
|
||||||
if viper.GetBool("a-general.color") {
|
if viper.GetBool("a-general.color") {
|
||||||
layout.SetBackgroundColor(config.GetColor("bg"))
|
|
||||||
|
|
||||||
bottomBar.SetBackgroundColor(config.GetColor("bottombar_bg"))
|
bottomBar.SetBackgroundColor(config.GetColor("bottombar_bg"))
|
||||||
bottomBar.SetLabelColor(config.GetColor("bottombar_label"))
|
bottomBar.SetLabelColor(config.GetColor("bottombar_label"))
|
||||||
bottomBar.SetFieldBackgroundColor(config.GetColor("bottombar_bg"))
|
bottomBar.SetFieldBackgroundColor(config.GetColor("bottombar_bg"))
|
||||||
@ -106,7 +104,7 @@ func Init(version, commit, builtBy string) {
|
|||||||
browser.SetTabBackgroundColor(config.GetColor("bg"))
|
browser.SetTabBackgroundColor(config.GetColor("bg"))
|
||||||
browser.SetTabBackgroundColorFocused(config.GetColor("tab_num"))
|
browser.SetTabBackgroundColorFocused(config.GetColor("tab_num"))
|
||||||
browser.SetTabTextColor(config.GetColor("tab_num"))
|
browser.SetTabTextColor(config.GetColor("tab_num"))
|
||||||
browser.SetTabTextColorFocused(config.GetTextColor("bg", "tab_num"))
|
browser.SetTabTextColorFocused(config.GetColor("ColorBg"))
|
||||||
browser.SetTabSwitcherDivider(
|
browser.SetTabSwitcherDivider(
|
||||||
"",
|
"",
|
||||||
fmt.Sprintf("[%s:%s]|[-]", config.GetColorString("tab_divider"), config.GetColorString("bg")),
|
fmt.Sprintf("[%s:%s]|[-]", config.GetColorString("tab_divider"), config.GetColorString("bg")),
|
||||||
|
1
go.mod
1
go.mod
@ -13,6 +13,7 @@ require (
|
|||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/mitchellh/mapstructure v1.3.1 // indirect
|
github.com/mitchellh/mapstructure v1.3.1 // indirect
|
||||||
github.com/mmcdole/gofeed v1.1.2
|
github.com/mmcdole/gofeed v1.1.2
|
||||||
|
github.com/muesli/termenv v0.9.0
|
||||||
github.com/pelletier/go-toml v1.8.0 // indirect
|
github.com/pelletier/go-toml v1.8.0 // indirect
|
||||||
github.com/rkoesters/xdg v0.0.0-20181125232953-edd15b846f9b
|
github.com/rkoesters/xdg v0.0.0-20181125232953-edd15b846f9b
|
||||||
github.com/schollz/progressbar/v3 v3.8.0
|
github.com/schollz/progressbar/v3 v3.8.0
|
||||||
|
4
go.sum
4
go.sum
@ -143,6 +143,8 @@ github.com/makeworld-the-better-one/go-gemini v0.11.0/go.mod h1:F+3x+R1xeYK90jMt
|
|||||||
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
|
||||||
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
|
github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA=
|
||||||
|
github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
github.com/mattn/go-runewidth v0.0.10/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
|
||||||
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU=
|
||||||
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
|
||||||
@ -171,6 +173,8 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
|
|||||||
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
|
github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI=
|
||||||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||||
|
github.com/muesli/termenv v0.9.0 h1:wnbOaGz+LUR3jNT0zOzinPnyDaCZUQRZj9GxK8eRVl8=
|
||||||
|
github.com/muesli/termenv v0.9.0/go.mod h1:R/LzAKf+suGs4IsO95y7+7DpFHO0KABgnZqtlyx2mBw=
|
||||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
|
Loading…
Reference in New Issue
Block a user