英文:
GoLang: gocui border color
问题
AI机器人出现问题,所以我在这里提问:
我有这段代码,它只输出两个窗口,但是我想要将边框的颜色改为绿色,而不是背景。
我尝试了:
g.Highlight = true
根据文档,但仍然不起作用。
这是我的整个代码:
package main
import (
// "fmt"
"log"
"github.com/jroimartin/gocui"
)
func main() {
// 创建一个新的gocui视图
g, err := gocui.NewGui(gocui.OutputNormal)
if err != nil {
log.Panicln(err)
}
defer g.Close()
g.SetManagerFunc(layout)
if err := g.SetKeybinding("", 'q', gocui.ModNone, quit); err != nil {
log.Panicln(err)
}
if err := g.SetKeybinding("", '1', gocui.ModNone, view1); err != nil {
log.Panicln(err)
}
if err := g.SetKeybinding("", '2', gocui.ModNone, view2); err != nil {
log.Panicln(err)
}
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln(err)
}
}
func updateView(g *gocui.Gui, v *gocui.View) error {
// 检查视图是否处于活动状态
if v != nil && v == g.CurrentView() {
// 如果视图处于活动状态,则将其背景颜色设置为黄色
v.BgColor = gocui.ColorYellow
} else {
// 如果视图不处于活动状态,则将其背景颜色设置为默认(无)
v.BgColor = gocui.ColorDefault
}
return nil
}
func layout(g *gocui.Gui) error {
// maxX, maxY := g.Size()
g.Highlight = true
// 创建一个名为"view1"的新视图
if v, err := g.SetView("view1", 0, 0, 20, 10); err != nil {
if err != gocui.ErrUnknownView {
log.Panicln(err)
}
// 将视图的默认背景颜色设置为无
v.BgColor = gocui.ColorDefault
v.Title = "View 1"
v.Wrap = false
// fmt.Fprintln(v, "View 1")
}
// 创建一个名为"view2"的第二个视图
if v, err := g.SetView("view2", 25, 0, 45, 10); err != nil {
if err != gocui.ErrUnknownView {
log.Panicln(err)
}
// 将视图的默认背景颜色设置为无
v.BgColor = gocui.ColorDefault
v.Title = "View 2"
v.Wrap = false
// fmt.Fprintln(v, "View 2")
}
return nil
}
func view1(g *gocui.Gui, v *gocui.View) error {
if _, err := g.SetCurrentView("view1"); err != nil {
return err
}
updateHighlighting(g, v)
return nil
}
func view2(g *gocui.Gui, v *gocui.View) error {
if _, err := g.SetCurrentView("view2"); err != nil {
return err
}
updateHighlighting(g, v)
return nil
}
func updateHighlighting(g *gocui.Gui, v *gocui.View) error {
current := g.CurrentView()
for _, view := range g.Views() {
if view == current {
current.BgColor = gocui.ColorGreen
} else {
view.BgColor = gocui.ColorDefault
}
}
return nil
}
func quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}
英文:
The AI bot is acting up so I'm asking here:
I have this code which just outputs two windows and instead of the background, I want the border to be green.
I've tried:
g.Highlight = true
per docs that still doesn't work.
Here is my entire code:
package main
import (
// "fmt"
"log"
"github.com/jroimartin/gocui"
)
func main() {
// Create a new gocui view
g, err := gocui.NewGui(gocui.OutputNormal)
if err != nil {
log.Panicln(err)
}
defer g.Close()
g.SetManagerFunc(layout)
if err := g.SetKeybinding("", 'q', gocui.ModNone, quit); err != nil {
log.Panicln(err)
}
if err := g.SetKeybinding("", '1', gocui.ModNone, view1); err != nil {
log.Panicln(err)
}
if err := g.SetKeybinding("", '2', gocui.ModNone, view2); err != nil {
log.Panicln(err)
}
if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
log.Panicln(err)
}
}
func updateView(g *gocui.Gui, v *gocui.View) error {
// Check if the view is active
if v != nil && v == g.CurrentView() {
// If the view is active, set its background color to yellow
v.BgColor = gocui.ColorYellow
} else {
// If the view is not active, set its background color to default (nothing)
v.BgColor = gocui.ColorDefault
}
return nil
}
func layout(g *gocui.Gui) error {
// maxX, maxY := g.Size()
g.Highlight = true
// Create a new view with the name "myView"
if v, err := g.SetView("view1", 0, 0, 20, 10); err != nil {
if err != gocui.ErrUnknownView {
log.Panicln(err)
}
// Set the default background color of the view to nothing
v.BgColor = gocui.ColorDefault
v.Title = "View 1"
v.Wrap = false
// fmt.Fprintln(v, "View 1")
}
// Set a second view with the name "myOtherView"
if v, err := g.SetView("view2", 25, 0, 45, 10); err != nil {
if err != gocui.ErrUnknownView {
log.Panicln(err)
}
// Set the default background color of the view to nothing
v.BgColor = gocui.ColorDefault
v.Title = "View 2"
v.Wrap = false
// fmt.Fprintln(v, "View 2")
}
return nil
}
func view1(g *gocui.Gui, v *gocui.View) error {
if _, err := g.SetCurrentView("view1"); err != nil {
return err
}
updateHighlighting(g, v)
return nil
}
func view2(g *gocui.Gui, v *gocui.View) error {
if _, err := g.SetCurrentView("view2"); err != nil {
return err
}
updateHighlighting(g, v)
return nil
}
func updateHighlighting(g *gocui.Gui, v *gocui.View) error {
current := g.CurrentView()
for _, view := range g.Views() {
if view == current {
current.BgColor = gocui.ColorGreen
} else {
view.BgColor = gocui.ColorDefault
}
}
return nil
}
func quit(g *gocui.Gui, v *gocui.View) error {
return gocui.ErrQuit
}
答案1
得分: 1
一个View
的框架由渲染该框架的Gui
处理。你已经将你的Gui
的高亮设置为true,但是你没有设置SelBgColor
或者SelFgColor
。
从https://pkg.go.dev/github.com/jroimartin/gocui#Gui中可以看到:
// SelBgColor和SelFgColor允许配置当前视图的框架的背景和前景颜色。
SelBgColor, SelFgColor Attribute
// 如果Highlight为true,则Sel{Bg,Fg}Colors将用于绘制当前视图的框架。
Highlight bool
通过将你的布局的开头更改为以下内容,并添加g.SelFgColor = gocui.ColorGreen
:
func layout(g *gocui.Gui) error {
// maxX, maxY := g.Size()
g.Highlight = true
g.SelFgColor = gocui.ColorGreen
...
...
如果你不想让背景也是绿色的,请将这一行删除:
current.BgColor = gocui.ColorGreen
起初可能有点困惑,因为View
和Gui
都有SelFgColor
、SelBgColor
和Highlight
,但是View
的属性控制的是视图中选定的文本,而不是Gui中当前视图的边框。
英文:
A View
's frame is handled by the Gui
that renders that frame. You have your Gui
's highlight set to true already, but you don't set SelBgColor
or SelFgColor
.
From https://pkg.go.dev/github.com/jroimartin/gocui#Gui:
// SelBgColor and SelFgColor allow to configure the background and
// foreground colors of the frame of the current view.
SelBgColor, SelFgColor Attribute
// If Highlight is true, Sel{Bg,Fg}Colors will be used to draw the
// frame of the current view.
Highlight bool
By changing the beginning of your layout to the following, adding g.SelFgColor = gocui.ColorGreen
:
func layout(g *gocui.Gui) error {
// maxX, maxY := g.Size()
g.Highlight = true
g.SelFgColor = gocui.ColorGreen
...
...
Then you'll get a green border with black background:
If you don't want the background to be green also, take this line out:
> current.BgColor = gocui.ColorGreen
It's a little confusing at first because both View
and Gui
have SelFgColor
SelBgColor
and Highlight
, but View
's attributes control the selected text in the view, not the border of the current view in the Gui.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论