mirror of
https://github.com/JanDeDobbeleer/oh-my-posh.git
synced 2025-03-05 20:49:04 -08:00
parent
6af47a61d5
commit
0692873cd4
2
.github/ISSUE_TEMPLATE/bug.yml
vendored
2
.github/ISSUE_TEMPLATE/bug.yml
vendored
|
@ -56,7 +56,7 @@ body:
|
||||||
id: logs
|
id: logs
|
||||||
attributes:
|
attributes:
|
||||||
label: Log output
|
label: Log output
|
||||||
description: Please copy and paste the output generated by `oh-my-posh debug`.
|
description: Please copy and paste the output generated by `oh-my-posh debug --plain`.
|
||||||
render: Shell
|
render: Shell
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|
|
@ -27,6 +27,7 @@ var debugCmd = &cobra.Command{
|
||||||
PWD: pwd,
|
PWD: pwd,
|
||||||
Shell: shellName,
|
Shell: shellName,
|
||||||
Version: cliVersion,
|
Version: cliVersion,
|
||||||
|
Plain: plain,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
env.Init()
|
env.Init()
|
||||||
|
@ -36,6 +37,7 @@ var debugCmd = &cobra.Command{
|
||||||
writer := &ansi.Writer{
|
writer := &ansi.Writer{
|
||||||
TerminalBackground: shell.ConsoleBackgroundColor(env, cfg.TerminalBackground),
|
TerminalBackground: shell.ConsoleBackgroundColor(env, cfg.TerminalBackground),
|
||||||
AnsiColors: writerColors,
|
AnsiColors: writerColors,
|
||||||
|
Plain: plain,
|
||||||
}
|
}
|
||||||
writer.Init(shell.GENERIC)
|
writer.Init(shell.GENERIC)
|
||||||
eng := &engine.Engine{
|
eng := &engine.Engine{
|
||||||
|
@ -51,5 +53,6 @@ var debugCmd = &cobra.Command{
|
||||||
func init() { //nolint:gochecknoinits
|
func init() { //nolint:gochecknoinits
|
||||||
debugCmd.Flags().StringVar(&pwd, "pwd", "", "current working directory")
|
debugCmd.Flags().StringVar(&pwd, "pwd", "", "current working directory")
|
||||||
debugCmd.Flags().StringVar(&shellName, "shell", "", "the shell to print for")
|
debugCmd.Flags().StringVar(&shellName, "shell", "", "the shell to print for")
|
||||||
|
debugCmd.Flags().BoolVarP(&plain, "plain", "p", false, "plain text output (no ANSI)")
|
||||||
RootCmd.AddCommand(debugCmd)
|
RootCmd.AddCommand(debugCmd)
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/ansi"
|
"github.com/jandedobbeleer/oh-my-posh/src/ansi"
|
||||||
|
"github.com/jandedobbeleer/oh-my-posh/src/log"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/platform"
|
"github.com/jandedobbeleer/oh-my-posh/src/platform"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/shell"
|
"github.com/jandedobbeleer/oh-my-posh/src/shell"
|
||||||
"github.com/jandedobbeleer/oh-my-posh/src/template"
|
"github.com/jandedobbeleer/oh-my-posh/src/template"
|
||||||
|
@ -252,9 +253,8 @@ func (e *Engine) renderBlock(block *Block, cancelNewline bool) {
|
||||||
|
|
||||||
// debug will loop through your config file and output the timings for each segments
|
// debug will loop through your config file and output the timings for each segments
|
||||||
func (e *Engine) PrintDebug(startTime time.Time, version string) string {
|
func (e *Engine) PrintDebug(startTime time.Time, version string) string {
|
||||||
var segmentTimings []*SegmentTiming
|
e.write(fmt.Sprintf("\n%s %s\n", log.Text("Version:").Green().Bold().Plain(), version))
|
||||||
e.write(fmt.Sprintf("\n\x1b[38;2;191;207;240m\x1b[1mVersion:\x1b[0m %s\n", version))
|
e.write(log.Text("\nSegments:\n\n").Green().Bold().Plain().String())
|
||||||
e.write("\n\x1b[38;2;191;207;240m\x1b[1mSegments:\x1b[0m\n\n")
|
|
||||||
// console title timing
|
// console title timing
|
||||||
titleStartTime := time.Now()
|
titleStartTime := time.Now()
|
||||||
title := e.getTitleTemplateText()
|
title := e.getTitleTemplateText()
|
||||||
|
@ -266,6 +266,7 @@ func (e *Engine) PrintDebug(startTime time.Time, version string) string {
|
||||||
duration: time.Since(titleStartTime),
|
duration: time.Since(titleStartTime),
|
||||||
}
|
}
|
||||||
largestSegmentNameLength := consoleTitleTiming.nameLength
|
largestSegmentNameLength := consoleTitleTiming.nameLength
|
||||||
|
var segmentTimings []*SegmentTiming
|
||||||
segmentTimings = append(segmentTimings, consoleTitleTiming)
|
segmentTimings = append(segmentTimings, consoleTitleTiming)
|
||||||
// cache a pointer to the color cycle
|
// cache a pointer to the color cycle
|
||||||
cycle = &e.Config.Cycle
|
cycle = &e.Config.Cycle
|
||||||
|
@ -283,19 +284,19 @@ func (e *Engine) PrintDebug(startTime time.Time, version string) string {
|
||||||
largestSegmentNameLength += 22 + 7
|
largestSegmentNameLength += 22 + 7
|
||||||
for _, segment := range segmentTimings {
|
for _, segment := range segmentTimings {
|
||||||
duration := segment.duration.Milliseconds()
|
duration := segment.duration.Milliseconds()
|
||||||
var active string
|
var active log.Text
|
||||||
if segment.active {
|
if segment.active {
|
||||||
active = "\x1b[38;2;156;231;201mtrue\x1b[0m"
|
active = log.Text("true").Yellow()
|
||||||
} else {
|
} else {
|
||||||
active = "\x1b[38;2;204;137;214mfalse\x1b[0m"
|
active = log.Text("false").Purple()
|
||||||
}
|
}
|
||||||
segmentName := fmt.Sprintf("%s(%s)", segment.name, active)
|
segmentName := fmt.Sprintf("%s(%s)", segment.name, active.Plain())
|
||||||
e.write(fmt.Sprintf("%-*s - %3d ms - %s\n", largestSegmentNameLength, segmentName, duration, segment.text))
|
e.write(fmt.Sprintf("%-*s - %3d ms - %s\n", largestSegmentNameLength, segmentName, duration, segment.text))
|
||||||
}
|
}
|
||||||
e.write(fmt.Sprintf("\n\x1b[38;2;191;207;240m\x1b[1mRun duration:\x1b[0m %s\n", time.Since(startTime)))
|
e.write(fmt.Sprintf("\n%s %s\n", log.Text("Run duration:").Green().Bold().Plain(), time.Since(startTime)))
|
||||||
e.write(fmt.Sprintf("\n\x1b[38;2;191;207;240m\x1b[1mCache path:\x1b[0m %s\n", e.Env.CachePath()))
|
e.write(fmt.Sprintf("\n%s %s\n", log.Text("Cache path:").Green().Bold().Plain(), e.Env.CachePath()))
|
||||||
e.write(fmt.Sprintf("\n\x1b[38;2;191;207;240m\x1b[1mConfig path:\x1b[0m %s\n", e.Env.Flags().Config))
|
e.write(fmt.Sprintf("\n%s %s\n", log.Text("Config path:").Green().Bold().Plain(), e.Env.Flags().Config))
|
||||||
e.write("\n\x1b[38;2;191;207;240m\x1b[1mLogs:\x1b[0m\n\n")
|
e.write(log.Text("\nLogs:\n\n").Green().Bold().Plain().String())
|
||||||
e.write(e.Env.Logs())
|
e.write(e.Env.Logs())
|
||||||
return e.string()
|
return e.string()
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,13 +8,20 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
var enabled bool
|
var (
|
||||||
var log strings.Builder
|
enabled bool
|
||||||
|
plain bool
|
||||||
|
log strings.Builder
|
||||||
|
)
|
||||||
|
|
||||||
func Enable() {
|
func Enable() {
|
||||||
enabled = true
|
enabled = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Plain() {
|
||||||
|
plain = true
|
||||||
|
}
|
||||||
|
|
||||||
func Info(message string) {
|
func Info(message string) {
|
||||||
if !enabled {
|
if !enabled {
|
||||||
return
|
return
|
||||||
|
@ -28,7 +35,7 @@ func Trace(start time.Time, args ...string) {
|
||||||
}
|
}
|
||||||
elapsed := time.Since(start)
|
elapsed := time.Since(start)
|
||||||
fn, _ := funcSpec()
|
fn, _ := funcSpec()
|
||||||
header := fmt.Sprintf("%s(%s) - \x1b[38;2;156;231;201m%s\033[0m", fn, strings.Join(args, " "), elapsed)
|
header := fmt.Sprintf("%s(%s) - %s", fn, strings.Join(args, " "), Text(elapsed.String()).Yellow().Plain())
|
||||||
printLn(trace, header)
|
printLn(trace, header)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,48 +14,98 @@ const (
|
||||||
trace
|
trace
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type Text string
|
||||||
|
|
||||||
|
func (t Text) Green() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "\x1b[38;2;191;207;240m" + t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) Red() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "\x1b[38;2;253;122;140m" + t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) Purple() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "\x1b[38;2;204;137;214m" + t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) Yellow() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "\x1b[38;2;156;231;201m" + t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) Bold() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return "\x1b[1m" + t
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) Plain() Text {
|
||||||
|
if plain {
|
||||||
|
return t
|
||||||
|
}
|
||||||
|
return t + "\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t Text) String() string {
|
||||||
|
return string(t)
|
||||||
|
}
|
||||||
|
|
||||||
func printLn(lt logType, args ...string) {
|
func printLn(lt logType, args ...string) {
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var str string
|
var str Text
|
||||||
switch lt {
|
switch lt {
|
||||||
case debug:
|
case debug:
|
||||||
str = "\x1b[38;2;191;207;240m[DEBUG] "
|
str = Text("[DEBUG] ").Green()
|
||||||
case bug:
|
case bug:
|
||||||
str = "\x1b[38;2;253;122;140m[ERROR] "
|
str = Text("[ERROR] ").Red()
|
||||||
case trace:
|
case trace:
|
||||||
str = "\x1b[38;2;204;137;214m[TRACE] "
|
str = Text("[TRACE] ").Purple()
|
||||||
}
|
}
|
||||||
// timestamp 156, 231, 201
|
// timestamp 156, 231, 201
|
||||||
str += fmt.Sprintf("\x1b[38;2;156;231;201m%s ", time.Now().Format("15:04:05.000"))
|
str += Text(time.Now().Format("15:04:05.000") + " ").Yellow().Plain()
|
||||||
str += "\033[0m"
|
str += Text(args[0])
|
||||||
str += args[0]
|
|
||||||
str += parseArgs(args...)
|
str += parseArgs(args...)
|
||||||
log.WriteString(str)
|
log.WriteString(str.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseArgs(args ...string) string {
|
func parseArgs(args ...string) Text {
|
||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
return "\n"
|
return "\n"
|
||||||
}
|
}
|
||||||
|
|
||||||
// display empty return values as NO DATA
|
// display empty return values as NO DATA
|
||||||
if len(args[1]) == 0 {
|
if len(args[1]) == 0 {
|
||||||
return " \x1b[38;2;156;231;201m\u2192\033[0m \x1b[38;2;253;122;140mNO DATA\033[0m\n"
|
text := Text(" \u2192").Yellow()
|
||||||
|
text += Text(" NO DATA\n").Red().Plain()
|
||||||
|
return text
|
||||||
}
|
}
|
||||||
|
|
||||||
// print a single line for single output
|
// print a single line for single output
|
||||||
splitted := strings.Split(args[1], "\n")
|
splitted := strings.Split(args[1], "\n")
|
||||||
if len(splitted) == 1 {
|
if len(splitted) == 1 {
|
||||||
return fmt.Sprintf(" \x1b[38;2;156;231;201m\u2192\033[0m %s\n", args[1])
|
text := Text(" \u2192").Yellow().Plain()
|
||||||
|
return Text(fmt.Sprintf("%s %s\n", text, args[1]))
|
||||||
}
|
}
|
||||||
|
|
||||||
// indent multiline output with 4 spaces
|
// indent multiline output with 4 spaces
|
||||||
var str string
|
var str Text
|
||||||
str += " \x1b[38;2;156;231;201m\u2193\033[0m\n"
|
str += Text(" \u2193\n").Yellow().Plain()
|
||||||
for _, line := range splitted {
|
for _, line := range splitted {
|
||||||
str += fmt.Sprintf(" %s\n", line)
|
str += Text(fmt.Sprintf(" %s\n", line))
|
||||||
}
|
}
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
|
@ -297,6 +297,9 @@ func (env *Shell) Init() {
|
||||||
if env.CmdFlags.Debug {
|
if env.CmdFlags.Debug {
|
||||||
log.Enable()
|
log.Enable()
|
||||||
}
|
}
|
||||||
|
if env.CmdFlags.Plain {
|
||||||
|
log.Plain()
|
||||||
|
}
|
||||||
env.fileCache = &fileCache{}
|
env.fileCache = &fileCache{}
|
||||||
env.fileCache.Init(env.CachePath())
|
env.fileCache.Init(env.CachePath())
|
||||||
env.resolveConfigPath()
|
env.resolveConfigPath()
|
||||||
|
|
Loading…
Reference in a new issue