Skip to content

Commit

Permalink
Add some color to the relevant filenames in terminal log
Browse files Browse the repository at this point in the history
  • Loading branch information
bep committed Oct 24, 2018
1 parent 889aca0 commit c6765cf
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 1 deletion.
8 changes: 8 additions & 0 deletions common/herrors/error_locator.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,23 @@ import (
"fmt"
"io"
"io/ioutil"
"os"
"strings"

"github.com/gohugoio/hugo/common/terminal"
"github.com/gohugoio/hugo/helpers"

"github.com/spf13/afero"
)

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
Expand Down
53 changes: 53 additions & 0 deletions common/terminal/colors.go
Original file line number Diff line number Diff line change
@@ -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)
}
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit c6765cf

Please sign in to comment.