package main import "fmt" type exit struct { props *properties env environmentInfo } const ( //ErrorIcon represents icon to display in case of error ErrorIcon Property = "error_icon" //DisplayErrorCode shows or hides the error code DisplayErrorCode Property = "display_error_code" //AlwaysEnabled decides whether or not to always display the exitcode info AlwaysEnabled Property = "always_enabled" //ErrorColor specify a different foreground color for the error text when using always_show = true ErrorColor Property = "error_color" ) func (e *exit) enabled() bool { if e.props.getBool(AlwaysEnabled, false) { return true } return e.env.lastErrorCode() != 0 } func (e *exit) string() string { return e.getFormattedText() } func (e *exit) init(props *properties, env environmentInfo) { e.props = props e.env = env } func (e *exit) getFormattedText() string { errorIcon := e.props.getString(ErrorIcon, "X") exitCode := e.getMeaningFromExitCode() colorBackground := e.props.getBool(ColorBackground, false) if e.env.lastErrorCode() != 0 && !colorBackground { e.props.foreground = e.props.getColor(ErrorColor, e.props.foreground) } if e.env.lastErrorCode() != 0 && colorBackground { e.props.background = e.props.getColor(ErrorColor, e.props.background) } return fmt.Sprintf("%s%s", errorIcon, exitCode) } func (e *exit) getMeaningFromExitCode() string { if !e.props.getBool(DisplayErrorCode, true) { return "" } switch e.env.lastErrorCode() { case 1: return "ERROR" case 2: return "USAGE" case 126: return "NOPERM" case 127: return "NOTFOUND" case 128 + 1: return "SIGHUP" case 128 + 2: return "SIGINT" case 128 + 3: return "SIGQUIT" case 128 + 4: return "SIGILL" case 128 + 5: return "SIGTRAP" case 128 + 6: return "SIGIOT" case 128 + 7: return "SIGBUS" case 128 + 8: return "SIGFPE" case 128 + 9: return "SIGKILL" case 128 + 10: return "SIGUSR1" case 128 + 11: return "SIGSEGV" case 128 + 12: return "SIGUSR2" case 128 + 13: return "SIGPIPE" case 128 + 14: return "SIGALRM" case 128 + 15: return "SIGTERM" case 128 + 16: return "SIGSTKFLT" case 128 + 17: return "SIGCHLD" case 128 + 18: return "SIGCONT" case 128 + 19: return "SIGSTOP" case 128 + 20: return "SIGTSTP" case 128 + 21: return "SIGTTIN" case 128 + 22: return "SIGTTOU" default: return fmt.Sprintf("%d", e.env.lastErrorCode()) } }