From 7b27bd02dd1fabda02b68220f69d9e3dfdcde927 Mon Sep 17 00:00:00 2001 From: Jansen Price Date: Fri, 4 Sep 2020 11:42:01 -0500 Subject: [PATCH] Strip ANSI codes from page based on config - fixes #79 (#86) --- config/config.go | 1 + config/default.go | 3 +++ default-config.toml | 3 +++ renderer/renderer.go | 13 +++++++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/config/config.go b/config/config.go index 01f522b..4b2d6f3 100644 --- a/config/config.go +++ b/config/config.go @@ -206,6 +206,7 @@ func Init() error { viper.SetDefault("a-general.http", "default") viper.SetDefault("a-general.search", "gus.guru/search") viper.SetDefault("a-general.color", true) + viper.SetDefault("a-general.ansi", true) viper.SetDefault("a-general.bullets", true) viper.SetDefault("a-general.left_margin", 0.15) viper.SetDefault("a-general.max_width", 100) diff --git a/config/default.go b/config/default.go index f2cbda4..11cc1ef 100644 --- a/config/default.go +++ b/config/default.go @@ -33,6 +33,9 @@ search = "gemini://gus.guru/search" # Whether colors will be used in the terminal color = true +# Whether ANSI codes from the page content should be rendered +ansi = true + # Whether to replace list asterisks with unicode bullets bullets = true diff --git a/default-config.toml b/default-config.toml index 421f3e7..4242bb1 100644 --- a/default-config.toml +++ b/default-config.toml @@ -30,6 +30,9 @@ search = "gemini://gus.guru/search" # Whether colors will be used in the terminal color = true +# Whether ANSI codes from the page content should be rendered +ansi = true + # Whether to replace list asterisks with unicode bullets bullets = true diff --git a/renderer/renderer.go b/renderer/renderer.go index 7087fc2..3b1e6eb 100644 --- a/renderer/renderer.go +++ b/renderer/renderer.go @@ -7,6 +7,7 @@ package renderer import ( "fmt" urlPkg "net/url" + "regexp" "strconv" "strings" @@ -15,12 +16,17 @@ import ( "gitlab.com/tslocum/cview" ) +// Regex for identifying ANSI color codes +var ansiRegex = regexp.MustCompile(`\x1b\[[0-9;]*m`) + // RenderANSI renders plain text pages containing ANSI codes. // Practically, it is used for the text/x-ansi. func RenderANSI(s string, leftMargin int) string { s = cview.Escape(s) - if viper.GetBool("a-general.color") { + if viper.GetBool("a-general.color") && viper.GetBool("a-general.ansi") { s = cview.TranslateANSI(s) + } else { + s = ansiRegex.ReplaceAllString(s, "") } var shifted string lines := strings.Split(s, "\n") @@ -277,9 +283,12 @@ func convertRegularGemini(s string, numLinks, width int, proxied bool) (string, // If it's not a gemini:// page, set this to true. func RenderGemini(s string, width, leftMargin int, proxied bool) (string, []string) { s = cview.Escape(s) - if viper.GetBool("a-general.color") { + if viper.GetBool("a-general.color") && viper.GetBool("a-general.ansi") { s = cview.TranslateANSI(s) + } else { + s = ansiRegex.ReplaceAllString(s, "") } + lines := strings.Split(s, "\n") links := make([]string, 0)