Set bold option

This commit is contained in:
c-bata 2017-07-19 01:16:51 +09:00
parent 256b0757ae
commit 6feb776763
4 changed files with 54 additions and 50 deletions

@ -1,27 +0,0 @@
package prompt
type Color int
const (
DefaultColor Color = iota
// Low intensity
Black
DarkRed
DarkGreen
Brown
DarkBlue
Purple
Cyan
LightGray
// High intensity
DarkGray
Red
Green
Yellow
Blue
Fuchsia
Turquoise
White
)

@ -5,6 +5,31 @@ type WinSize struct {
Col uint16 Col uint16
} }
type Color int
const (
DefaultColor Color = iota
// Low intensity
Black
DarkRed
DarkGreen
Brown
DarkBlue
Purple
Cyan
LightGray
// High intensity
DarkGray
Red
Green
Yellow
Blue
Fuchsia
Turquoise
White
)
type ConsoleParser interface { type ConsoleParser interface {
// Setup // Setup
Setup() error Setup() error
@ -57,7 +82,7 @@ type ConsoleWriter interface {
SetTitle(title string) SetTitle(title string)
ClearTitle() ClearTitle()
/* colors */ /* Font */
SetColor(fg, bg Color) (ok bool) SetColor(fg, bg Color, bold bool)
} }

@ -45,9 +45,9 @@ func (r *Render) Setup() {
} }
func (r *Render) renderPrefix() { func (r *Render) renderPrefix() {
r.out.SetColor(r.prefixTextColor, r.prefixBGColor) r.out.SetColor(r.prefixTextColor, r.prefixBGColor, false)
r.out.WriteStr(r.prefix) r.out.WriteStr(r.prefix)
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
} }
func (r *Render) TearDown() { func (r *Render) TearDown() {
@ -75,7 +75,7 @@ func (r *Render) UpdateWinSize(ws *WinSize) {
func (r *Render) renderWindowTooSmall() { func (r *Render) renderWindowTooSmall() {
r.out.CursorGoTo(0, 0) r.out.CursorGoTo(0, 0)
r.out.EraseScreen() r.out.EraseScreen()
r.out.SetColor(DarkRed, White) r.out.SetColor(DarkRed, White, false)
r.out.WriteStr("Your console window is too small...") r.out.WriteStr("Your console window is too small...")
r.out.Flush() r.out.Flush()
return return
@ -106,20 +106,20 @@ func (r *Render) renderCompletion(buf *Buffer, completions []Completion, max uin
r.out.CursorBackward(d + width - int(r.col)) r.out.CursorBackward(d + width - int(r.col))
} }
r.out.SetColor(White, Cyan) r.out.SetColor(White, Cyan, false)
for i := 0; i < l; i++ { for i := 0; i < l; i++ {
r.out.CursorDown(1) r.out.CursorDown(1)
if i == selected { if i == selected {
r.out.SetColor(r.selectedSuggestionTextColor, r.selectedSuggestionBGColor) r.out.SetColor(r.selectedSuggestionTextColor, r.selectedSuggestionBGColor, true)
} else { } else {
r.out.SetColor(r.suggestionTextColor, r.suggestionBGColor) r.out.SetColor(r.suggestionTextColor, r.suggestionBGColor, false)
} }
r.out.WriteStr(formatted[i].Text) r.out.WriteStr(formatted[i].Text)
if i == selected { if i == selected {
r.out.SetColor(r.selectedDescriptionTextColor, r.selectedDescriptionBGColor) r.out.SetColor(r.selectedDescriptionTextColor, r.selectedDescriptionBGColor, false)
} else { } else {
r.out.SetColor(r.descriptionTextColor, r.descriptionBGColor) r.out.SetColor(r.descriptionTextColor, r.descriptionBGColor, false)
} }
r.out.WriteStr(formatted[i].Description) r.out.WriteStr(formatted[i].Description)
r.out.CursorBackward(width) r.out.CursorBackward(width)
@ -132,7 +132,7 @@ func (r *Render) renderCompletion(buf *Buffer, completions []Completion, max uin
} }
r.out.CursorUp(l) r.out.CursorUp(l)
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
return return
} }
@ -152,17 +152,17 @@ func (r *Render) Render(buffer *Buffer, completions []Completion, maxCompletions
// Rendering // Rendering
r.renderPrefix() r.renderPrefix()
r.out.SetColor(r.inputTextColor, r.inputBGColor) r.out.SetColor(r.inputTextColor, r.inputBGColor, false)
r.out.WriteStr(line) r.out.WriteStr(line)
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
r.out.CursorBackward(len(line) - buffer.CursorPosition) r.out.CursorBackward(len(line) - buffer.CursorPosition)
r.renderCompletion(buffer, completions, maxCompletions, selected) r.renderCompletion(buffer, completions, maxCompletions, selected)
if selected != -1 { if selected != -1 {
c := completions[selected] c := completions[selected]
r.out.CursorBackward(len([]rune(buffer.Document().GetWordBeforeCursor()))) r.out.CursorBackward(len([]rune(buffer.Document().GetWordBeforeCursor())))
r.out.SetColor(r.previewSuggestionTextColor, r.previewSuggestionBGColor) r.out.SetColor(r.previewSuggestionTextColor, r.previewSuggestionBGColor, false)
r.out.WriteStr(c.Text) r.out.WriteStr(c.Text)
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
} }
r.out.Flush() r.out.Flush()
} }
@ -173,19 +173,19 @@ func (r *Render) BreakLine(buffer *Buffer) {
// Erasing and Render // Erasing and Render
r.out.EraseDown() r.out.EraseDown()
r.renderPrefix() r.renderPrefix()
r.out.SetColor(r.inputTextColor, r.inputBGColor) r.out.SetColor(r.inputTextColor, r.inputBGColor, false)
r.out.WriteStr(buffer.Document().Text + "\n") r.out.WriteStr(buffer.Document().Text + "\n")
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
r.out.Flush() r.out.Flush()
} }
func (r *Render) RenderResult(result string) { func (r *Render) RenderResult(result string) {
// Render Result // Render Result
if result != "" { if result != "" {
r.out.SetColor(r.outputTextColor, r.outputBGColor) r.out.SetColor(r.outputTextColor, r.outputBGColor, false)
r.out.WriteRawStr(result) r.out.WriteRawStr(result)
} }
r.out.SetColor(DefaultColor, DefaultColor) r.out.SetColor(DefaultColor, DefaultColor, false)
} }
func formatCompletions(completions []Completion, max int) (new []Completion, width int) { func formatCompletions(completions []Completion, max int) (new []Completion, width int) {

@ -188,22 +188,28 @@ func (w *VT100Writer) ClearTitle() {
return return
} }
/* colors */ /* Font */
func (w *VT100Writer) SetColor(fg, bg Color) (ok bool) { func (w *VT100Writer) SetColor(fg, bg Color, bold bool) {
f, ok := foregroundANSIColors[fg] f, ok := foregroundANSIColors[fg]
if !ok { if !ok {
return f, _ = foregroundANSIColors[DefaultColor]
} }
b, ok := backgroundANSIColors[bg] b, ok := backgroundANSIColors[bg]
if !ok { if !ok {
return b, _ = backgroundANSIColors[DefaultColor]
} }
syscall.Write(syscall.Stdout, []byte{0x1b, 0x5b, 0x33, 0x39, 0x3b, 0x34, 0x39, 0x6d}) syscall.Write(syscall.Stdout, []byte{0x1b, 0x5b, 0x33, 0x39, 0x3b, 0x34, 0x39, 0x6d})
w.WriteRaw([]byte{0x1b, 0x5b}) w.WriteRaw([]byte{0x1b, 0x5b})
if !bold {
w.WriteRaw([]byte{0x30, 0x3b})
}
w.WriteRaw(f) w.WriteRaw(f)
w.WriteRaw([]byte{0x3b}) w.WriteRaw([]byte{0x3b})
w.WriteRaw(b) w.WriteRaw(b)
if bold {
w.WriteRaw([]byte{0x3b, 0x31})
}
w.WriteRaw([]byte{0x6d}) w.WriteRaw([]byte{0x6d})
return return
} }