URI: 
       Add some color to the relevant filenames in terminal log - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit deff9e154bc0371af56741ddb22cb1f9e392838a
   DIR parent 889aca054a267506a1c7cfaa3992d324764d6358
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Wed, 24 Oct 2018 11:14:51 +0200
       
       Add some color to the relevant filenames in terminal log
       
       Fixes #5344
       
       Diffstat:
         M common/herrors/error_locator.go     |       8 ++++++++
         M common/loggers/loggers.go           |      17 +++++++++++++++++
         A common/terminal/colors.go           |      53 ++++++++++++++++++++++++++++++
         M go.mod                              |       2 +-
       
       4 files changed, 79 insertions(+), 1 deletion(-)
       ---
   DIR diff --git a/common/herrors/error_locator.go b/common/herrors/error_locator.go
       @@ -18,8 +18,10 @@ import (
                "fmt"
                "io"
                "io/ioutil"
       +        "os"
                "strings"
        
       +        "github.com/gohugoio/hugo/common/terminal"
                "github.com/gohugoio/hugo/helpers"
        
                "github.com/spf13/afero"
       @@ -27,6 +29,12 @@ import (
        
        var fileErrorFormat = "\"%s:%d:%d\": %s"
        
       +func init() {
       +        if terminal.IsTerminal(os.Stdout) {
       +                fileErrorFormat = terminal.Notice("\"%s:%d:%d\"") + ": %s"
       +        }
       +}
       +
        // LineMatcher contains the elements used to match an error to a line
        type LineMatcher struct {
                FileError  FileError
   DIR diff --git a/common/loggers/loggers.go b/common/loggers/loggers.go
       @@ -19,6 +19,9 @@ import (
                "io/ioutil"
                "log"
                "os"
       +        "regexp"
       +
       +        "github.com/gohugoio/hugo/common/terminal"
        
                jww "github.com/spf13/jwalterweatherman"
        )
       @@ -70,8 +73,22 @@ func NewErrorLogger() *Logger {
                return newBasicLogger(jww.LevelError)
        }
        
       +var ansiColorRe = regexp.MustCompile("(?s)\\033\\[\\d*(;\\d*)*m")
       +
       +type ansiCleaner struct {
       +        w io.Writer
       +}
       +
       +func (a ansiCleaner) Write(p []byte) (n int, err error) {
       +        return a.w.Write(ansiColorRe.ReplaceAll(p, []byte("")))
       +}
       +
        func newLogger(stdoutThreshold, logThreshold jww.Threshold, outHandle, logHandle io.Writer, saveErrors bool) *Logger {
                errorCounter := &jww.Counter{}
       +        if logHandle != ioutil.Discard && terminal.IsTerminal(os.Stdout) {
       +                // Remove any Ansi coloring from log output
       +                logHandle = ansiCleaner{w: logHandle}
       +        }
                listeners := []jww.LogListener{jww.LogCounter(errorCounter, jww.LevelError)}
                var errorBuff *bytes.Buffer
                if saveErrors {
   DIR diff --git a/common/terminal/colors.go b/common/terminal/colors.go
       @@ -0,0 +1,53 @@
       +// Copyright 2018 The Hugo Authors. All rights reserved.
       +//
       +// Licensed under the Apache License, Version 2.0 (the "License");
       +// you may not use this file except in compliance with the License.
       +// You may obtain a copy of the License at
       +// http://www.apache.org/licenses/LICENSE-2.0
       +//
       +// Unless required by applicable law or agreed to in writing, software
       +// distributed under the License is distributed on an "AS IS" BASIS,
       +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       +// See the License for the specific language governing permissions and
       +// limitations under the License.
       +
       +// Package terminal contains helper for the terminal, such as coloring output.
       +package terminal
       +
       +import (
       +        "fmt"
       +        "os"
       +        "strings"
       +
       +        isatty "github.com/mattn/go-isatty"
       +)
       +
       +const (
       +        noticeColor = "\033[1;36m%s\033[0m"
       +)
       +
       +// IsTerminal return true if the file descriptor is terminal and the TERM
       +// environment variable isn't a dumb one.
       +func IsTerminal(f *os.File) bool {
       +        fd := f.Fd()
       +        return os.Getenv("TERM") != "dumb" && (isatty.IsTerminal(fd) || isatty.IsCygwinTerminal(fd))
       +}
       +
       +// Notice colorizes the string in a noticeable color.
       +func Notice(s string) string {
       +        return colorize(s, noticeColor)
       +}
       +
       +// colorize s in color.
       +func colorize(s, color string) string {
       +        s = fmt.Sprintf(color, doublePercent(s))
       +        return singlePercent(s)
       +}
       +
       +func doublePercent(str string) string {
       +        return strings.Replace(str, "%", "%%", -1)
       +}
       +
       +func singlePercent(str string) string {
       +        return strings.Replace(str, "%%", "%", -1)
       +}
   DIR diff --git a/go.mod b/go.mod
       @@ -29,7 +29,7 @@ require (
                github.com/kyokomi/emoji v1.5.1
                github.com/magefile/mage v1.4.0
                github.com/markbates/inflect v1.0.0
       -        github.com/mattn/go-isatty v0.0.4 // indirect
       +        github.com/mattn/go-isatty v0.0.4
                github.com/mattn/go-runewidth v0.0.3 // indirect
                github.com/miekg/mmark v1.3.6
                github.com/mitchellh/hashstructure v1.0.0