gocui中文文档

package gocui

import "github.com/jroimartin/gocui"
软件包gocui允许创建控制台用户界面。
创建一个新的GUI:

g, err := gocui.NewGui(gocui.OutputNormal)
if err != nil {
    // 处理错误
    }
    defer g.Close()

    // 设置GUI管理器和键绑定 
    // ...

    if err := g.MainLoop(); err != nil && err != gocui.ErrQuit {
        // 处理错误
        }

设置GUI管理器:

g.SetManager(mgr1, mgr2)

管理人员负责GUI的布局,并可用于构建小部件。 在GUI主循环的每次迭代中,将执行每个已配置管理器的Layout功能。 管理器用于设置和更新应用程序的主视图,可以在执行期间自由更改它们。 另外,重要的是要提到对每个报告的事件(按键,鼠标事件,窗口大小调整等)执行主循环迭代。

GUI由视图组成,您可以将其视为缓冲区。 视图实现了io.ReadWriter接口,因此,如果您要修改它们的内容,则可以只写它们。 读取同样有效。

使用绝对坐标创建和初始化视图:

if v, err := g.SetView("viewname", 2, 2, 22, 7); err != nil {
    if err != gocui.ErrUnknownView {
        // 处理错误
    }
    fmt.Fprintln(v, "This is a new view")
    // ...
}

也可以使用相对坐标创建视图:

maxX, maxY := g.Size()
if v, err := g.SetView("viewname", maxX/2-30, maxY/2, maxX/2+30, maxY/2+2); err != nil {
    // ...
}

配置按键绑定:

if err := g.SetKeybinding("viewname", gocui.KeyEnter, gocui.ModNone, fcn); err != nil {
    // 处理错误
}

gocui实现了对鼠标的完全支持,可以通过以下方式启用它:

g.Mouse = true

鼠标事件的处理方式与其他任何键绑定一样:

if err := g.SetKeybinding("viewname", gocui.MouseLeft, gocui.ModNone, fcn); err != nil {
    // 处理错误
}

重要信息:只能以三种方式创建,销毁或更新视图:从管理器中的Layout函数,从键绑定回调或通过* Gui.Update()。 原因是它允许gocui是并发安全的。 因此,如果要从goroutine更新GUI,则必须使用* Gui.Update()。 例如:

g.Update(func(g *gocui.Gui) error {
    v, err := g.View("viewname")
    if err != nil {
        // 处理错误
    }
    v.Clear()
    fmt.Fprintln(v, "Writing from different goroutines")
    return nil
})

默认情况下,gocui提供基本的编辑模式。 可以扩展和定制此模式,以创建新的编辑器并将其分配给* View.Editor

var DefaultEditor Editor = EditorFunc(simpleEditor)

func simpleEditor(v *View, key Key, ch rune, mod Modifier) {
    switch {
    case ch != 0 && mod == 0:
        v.EditWrite(ch)
    case key == KeySpace:
        v.EditWrite(' ')
    case key == KeyBackspace || key == KeyBackspace2:
        v.EditDelete(true)
    // ...
    }
}

彩色文字:
视图允许使用ANSI颜色添加彩色文本。 例如:

fmt.Fprintln(v, "\x1b[0;31mHello world")

有关更多信息,请参见文件夹_examples /中的示例。

Index

Constants(常数)

const (
    ColorDefault Attribute = Attribute(termbox.ColorDefault)
    ColorBlack             = Attribute(termbox.ColorBlack)
    ColorRed               = Attribute(termbox.ColorRed)
    ColorGreen             = Attribute(termbox.ColorGreen)
    ColorYellow            = Attribute(termbox.ColorYellow)
    ColorBlue              = Attribute(termbox.ColorBlue)
    ColorMagenta           = Attribute(termbox.ColorMagenta)
    ColorCyan              = Attribute(termbox.ColorCyan)
    ColorWhite             = Attribute(termbox.ColorWhite)
)

颜色属性:

const (
    AttrBold      Attribute = Attribute(termbox.AttrBold)
    AttrUnderline           = Attribute(termbox.AttrUnderline)
    AttrReverse             = Attribute(termbox.AttrReverse)
)

文字样式属性:

const (
    // OutputNormal提供8色终端模式。
    OutputNormal = OutputMode(termbox.OutputNormal)

    // Output256提供256色终端模式。
    Output256 = OutputMode(termbox.Output256)
)

特殊键:

const (
    KeyF1         Key = Key(termbox.KeyF1)
    KeyF2             = Key(termbox.KeyF2)
    KeyF3             = Key(termbox.KeyF3)
    KeyF4             = Key(termbox.KeyF4)
    KeyF5             = Key(termbox.KeyF5)
    KeyF6             = Key(termbox.KeyF6)
    KeyF7             = Key(termbox.KeyF7)
    KeyF8             = Key(termbox.KeyF8)
    KeyF9             = Key(termbox.KeyF9)
    KeyF10            = Key(termbox.KeyF10)
    KeyF11            = Key(termbox.KeyF11)
    KeyF12            = Key(termbox.KeyF12)
    KeyInsert         = Key(termbox.KeyInsert)
    KeyDelete         = Key(termbox.KeyDelete)
    KeyHome           = Key(termbox.KeyHome)
    KeyEnd            = Key(termbox.KeyEnd)
    KeyPgup           = Key(termbox.KeyPgup)
    KeyPgdn           = Key(termbox.KeyPgdn)
    KeyArrowUp        = Key(termbox.KeyArrowUp)
    KeyArrowDown      = Key(termbox.KeyArrowDown)
    KeyArrowLeft      = Key(termbox.KeyArrowLeft)
    KeyArrowRight     = Key(termbox.KeyArrowRight)

    MouseLeft      = Key(termbox.MouseLeft)
    MouseMiddle    = Key(termbox.MouseMiddle)
    MouseRight     = Key(termbox.MouseRight)
    MouseRelease   = Key(termbox.MouseRelease)
    MouseWheelUp   = Key(termbox.MouseWheelUp)
    MouseWheelDown = Key(termbox.MouseWheelDown)
)

按键组合

const (
    KeyCtrlTilde      Key = Key(termbox.KeyCtrlTilde)
    KeyCtrl2              = Key(termbox.KeyCtrl2)
    KeyCtrlSpace          = Key(termbox.KeyCtrlSpace)
    KeyCtrlA              = Key(termbox.KeyCtrlA)
    KeyCtrlB              = Key(termbox.KeyCtrlB)
    KeyCtrlC              = Key(termbox.KeyCtrlC)
    KeyCtrlD              = Key(termbox.KeyCtrlD)
    KeyCtrlE              = Key(termbox.KeyCtrlE)
    KeyCtrlF              = Key(termbox.KeyCtrlF)
    KeyCtrlG              = Key(termbox.KeyCtrlG)
    KeyBackspace          = Key(termbox.KeyBackspace)
    KeyCtrlH              = Key(termbox.KeyCtrlH)
    KeyTab                = Key(termbox.KeyTab)
    KeyCtrlI              = Key(termbox.KeyCtrlI)
    KeyCtrlJ              = Key(termbox.KeyCtrlJ)
    KeyCtrlK              = Key(termbox.KeyCtrlK)
    KeyCtrlL              = Key(termbox.KeyCtrlL)
    KeyEnter              = Key(termbox.KeyEnter)
    KeyCtrlM              = Key(termbox.KeyCtrlM)
    KeyCtrlN              = Key(termbox.KeyCtrlN)
    KeyCtrlO              = Key(termbox.KeyCtrlO)
    KeyCtrlP              = Key(termbox.KeyCtrlP)
    KeyCtrlQ              = Key(termbox.KeyCtrlQ)
    KeyCtrlR              = Key(termbox.KeyCtrlR)
    KeyCtrlS              = Key(termbox.KeyCtrlS)
    KeyCtrlT              = Key(termbox.KeyCtrlT)
    KeyCtrlU              = Key(termbox.KeyCtrlU)
    KeyCtrlV              = Key(termbox.KeyCtrlV)
    KeyCtrlW              = Key(termbox.KeyCtrlW)
    KeyCtrlX              = Key(termbox.KeyCtrlX)
    KeyCtrlY              = Key(termbox.KeyCtrlY)
    KeyCtrlZ              = Key(termbox.KeyCtrlZ)
    KeyEsc                = Key(termbox.KeyEsc)
    KeyCtrlLsqBracket     = Key(termbox.KeyCtrlLsqBracket)
    KeyCtrl3              = Key(termbox.KeyCtrl3)
    KeyCtrl4              = Key(termbox.KeyCtrl4)
    KeyCtrlBackslash      = Key(termbox.KeyCtrlBackslash)
    KeyCtrl5              = Key(termbox.KeyCtrl5)
    KeyCtrlRsqBracket     = Key(termbox.KeyCtrlRsqBracket)
    KeyCtrl6              = Key(termbox.KeyCtrl6)
    KeyCtrl7              = Key(termbox.KeyCtrl7)
    KeyCtrlSlash          = Key(termbox.KeyCtrlSlash)
    KeyCtrlUnderscore     = Key(termbox.KeyCtrlUnderscore)
    KeySpace              = Key(termbox.KeySpace)
    KeyBackspace2         = Key(termbox.KeyBackspace2)
    KeyCtrl8              = Key(termbox.KeyCtrl8)
)

Variables(变量)

var (
    // ErrQuit用于确定MainLoop是否成功完成。
    ErrQuit = errors.New("quit")

    // ErrUnknownView允许断言是否初始化了View。
    ErrUnknownView = errors.New("unknown view")
)

type Attribute(类型属性)

属性表示终端属性,例如颜色,字体样式等。可以使用按位或(|)进行组合。 请注意,不可能组合多个颜色属性。

type Attribute termbox.Attribute

type Editor(类型编辑器)

gocui编辑器必须满足编辑器界面。

type Editor interface {
    Edit(v *View, key Key, ch rune, mod Modifier)
}

DefaultEditor是默认编辑器。

var DefaultEditor Editor = EditorFunc(simpleEditor)

type EditorFunc (类型EditorFunc)

EditorFunc类型是一个适配器,允许将普通功能用作编辑器。 如果f是具有适当签名的函数,则EditorFunc(f)是调用f的Editor对象。

type EditorFunc func(v *View, key Key, ch rune, mod Modifier)
func (f EditorFunc) Edit(v *View, key Key, ch rune, mod Modifier)

编辑通话

func (f EditorFunc) Edit(v *View, key Key, ch rune, mod Modifier)

type Gui

Gui代表整个用户界面,包括视图,布局和键绑定。

type Gui struct {

    // BgColor和FgColor允许配置GUI的背景和前景色。
    BgColor, FgColor Attribute

    //SelBgColor和SelFgColor允许配置当前视图框架的背景和前景色。
    SelBgColor, SelFgColor Attribute

    // 如果“高光”为true,则将使用Sel {Bg,Fg} Colors绘制当前视图的框架。
    Highlight bool

    // 如果Cursor为true,则启用光标。
    Cursor bool

    // 如果Mouse为true,则将启用鼠标事件。
    Mouse bool

    // 如果InputEsc为true,则当ESC序列在缓冲区中并且与任何已知序列都不匹配时,ESC表示KeyEsc。
    InputEsc bool

    // 如果ASCII为true,则使用ASCII代替unicode绘制界面。 使用ASCII更可移植。
    ASCII bool
    //包含已过滤或未导出的字段
}
func NewGui(mode OutputMode) (*Gui, error)

NewGui返回具有给定输出模式的新Gui对象。

func NewGui(mode OutputMode) (*Gui, error)
func (g *Gui) Close()

关闭完成库。 在成功初始化之后并且不再需要gocui时应调用它。

func (g *Gui) Close()
func (g *Gui) CurrentView() *View

CurrentView返回当前焦点视图,如果没有视图拥有焦点,则返回nil。

func (g *Gui) CurrentView() *View
func (g *Gui) DeleteKeybinding(viewname string, key interface{}, mod Modifier) error

func (*Gui) DeleteKeybinding(删除绑定键)
DeleteKeybinding删除一个键绑定。

func (g *Gui) DeleteKeybinding(viewname string, key interface{}, mod Modifier) error
func (g *Gui) DeleteKeybindings(viewname string)

删除键绑定删除视图的所有键绑定。

func (g *Gui) DeleteKeybindings(viewname string)
func (g *Gui) DeleteView(name string) error

DeleteView按名称删除视图。

func (g *Gui) DeleteView(name string) error
func (g *Gui) MainLoop() error

MainLoop运行主循环,直到返回错误。 成功完成后应返回ErrQuit。

func (g *Gui) MainLoop() error
func (g *Gui) Rune(x, y int) (rune, error)

符文返回给定位置的单元格中包含的符文。 它检查位置是否有效。

func (g *Gui) Rune(x, y int) (rune, error)
func (g *Gui) SetCurrentView(name string) (*View, error)

SetCurrentView将焦点赋予给定视图。

func (g *Gui) SetCurrentView(name string) (*View, error)
func (g *Gui) SetKeybinding(viewname string, key interface{}, mod Modifier, handler func(*Gui, *View) error) error

SetKeybinding创建一个新的键绑定。 如果viewname等于“”(空字符串),则绑定将应用于所有视图。 密钥必须是符文或密钥。

func (g *Gui) SetKeybinding(viewname string, key interface{}, mod Modifier, handler func(*Gui, *View) error) error
func (g *Gui) SetManager(managers …Manager)

SetManager设置给定的GUI管理器。 它将删除所有视图和键绑定。

func (g *Gui) SetManager(managers ...Manager)
func (g *Gui) SetManagerFunc(manager func(*Gui) error)

SetManagerFunc设置给定的管理器功能。 它将删除所有视图和键绑定。

func (g *Gui) SetManagerFunc(manager func(*Gui) error)
func (g *Gui) SetRune(x, y int, ch rune, fgColor, bgColor Attribute) error

SetRune在相对于终端左上角的给定点写入一个符文。 它检查该位置是否有效并应用给定的颜色。

func (g *Gui) SetRune(x, y int, ch rune, fgColor, bgColor Attribute) error
func (g *Gui) SetView(name string, x0, y0, x1, y1 int) (*View, error)

SetView创建一个新视图,其左上角为(x0,y0),右下角为(x1,y1)。 如果已经存在相同名称的视图,则其尺寸将更新; 否则,返回错误ErrUnknownView,该错误允许断言View是否必须初始化。 它检查位置是否有效。

func (g *Gui) SetView(name string, x0, y0, x1, y1 int) (*View, error)
func (g *Gui) SetViewOnBottom(name string) (*View, error)

SetViewOnBottom将给定视图设置在现有视图的底部。

func (g *Gui) SetViewOnBottom(name string) (*View, error)
func (g *Gui) SetViewOnTop(name string) (*View, error)

SetViewOnTop将给定视图设置在现有视图之上。

func (g *Gui) SetViewOnTop(name string) (*View, error)
func (g *Gui) Size() (x, y int)

Size返回终端的大小。

func (g *Gui) Size() (x, y int)
func (g *Gui) Update(f func(*Gui) error)

Update执行传递的函数。 可以从goroutine安全地调用此方法以更新GUI。 重要的是要注意,传递的函数不会立即执行,而是会添加到用户事件队列中。 鉴于Update产生了一个goroutine,因此不能保证处理用户事件的顺序。

func (g *Gui) Update(f func(*Gui) error)
func (g *Gui) View(name string) (*View, error)

视图返回指向给定名称的视图的指针,如果不存在具有该名称的视图,则返回错误ErrUnknownView。

func (g *Gui) View(name string) (*View, error)
func (g *Gui) ViewByPosition(x, y int) (*View, error)

ViewByPosition返回指向与给定位置匹配的视图的指针,如果该位置的视图不存在,则返回错误ErrUnknownView。

func (g *Gui) ViewByPosition(x, y int) (*View, error)
func (g *Gui) ViewPosition(name string) (x0, y0, x1, y1 int, err error)

ViewPosition返回具有给定名称的视图的坐标,如果不存在具有该名称的视图,则返回ErrUnknownView。

func (g *Gui) ViewPosition(name string) (x0, y0, x1, y1 int, err error)
func (g *Gui) Views() []*View

视图返回GUI中的所有视图。

func (g *Gui) Views() []*View

type Key

键代表特殊键或组合键。

type Key termbox.Key

type Manager

经理负责GUI的布局,可用于构建小部件。

type Manager interface {
        // 每次重新绘制GUI时都会调用布局,该布局必须包含基本视图及其初始化。
        Layout(*Gui) error
        }

type ManagerFunc

ManagerFunc类型是一种适配器,允许将普通功能用作Manager。 如果f是具有适当签名的函数,则ManagerFunc(f)是调用f的Manager对象。

type ManagerFunc func(*Gui) error
func (f ManagerFunc) Layout(g *Gui) error

布局调用f(g)

func (f ManagerFunc) Layout(g *Gui) error

type Modifier

修饰符允许定义特殊的按键组合。 定义新的键绑定时,可以将它们与“键”或“符文”结合使用。

type Modifier termbox.Modifier

修饰符。

const (
    ModNone Modifier = Modifier(0)
    ModAlt           = Modifier(termbox.ModAlt)
    )

type OutputMode

OutputMode表示终端的输出模式(8或256色)。

type OutputMode termbox.OutputMode

type View

视图是一个窗口。 它维护自己的内部缓冲区和光标位置。

type View struct {
    // BgColor和FgColor允许配置视图的背景和前景色。
    BgColor, FgColor Attribute

    // SelBgColor和SelFgColor用于配置选定线的突出显示时的背景色和前景色。
    SelBgColor, SelFgColor Attribute

    // 如果Editable为true,则击键将添加到视图的内部缓冲区的光标位置。
    Editable bool

    // 编辑器允许定义管理版本模式的编辑器,包括键绑定或光标行为。 默认情况下使用DefaultEditor。
    Editor Editor

    // 覆盖启用或禁用视图的覆盖模式。
    Overwrite bool

    // 如果“高光”为true,则Sel {Bg,Fg} Colors将用于光标位置下方的行。
    Highlight bool

    // 如果Frame为true,则将在视图周围绘制边框。
    Frame bool

    // 如果Wrap为true,则写入到此View的内容长于其宽度时将自动进行包装。 如果为true,则将忽略视图的x起点。
    Wrap bool

    // 如果Autoscroll为true,则在文本溢出时,视图将自动向下滚动。 如果为true,则将忽略视图的y起点。
    Autoscroll bool

    // 如果Frame为true,则Title可以为视图配置标题。
    Title string

    // 如果Mask为true,则View将显示遮罩而不是实际内容
    Mask rune

    // 包含过滤或未导出的字段
}
func (v *View) Buffer() string

Buffer返回一个字符串,其中包含视图内部缓冲区的内容。

func (v *View) Buffer() string
func (v *View) BufferLines() []string

BufferLines返回视图内部缓冲区中的行。

func (v *View) BufferLines() []string
func (v *View) Clear()

清除清空视图的内部缓冲区。

func (v *View) Clear()
func (v *View) Cursor() (x, y int)

光标返回视图的光标位置。

func (v *View) Cursor() (x, y int)
func (v *View) EditDelete(back bool)

EditDelete删除光标位置的符文。 back确定方向。

func (v *View) EditDelete(back bool)
func (v *View) EditNewLine()

EditNewLine在光标下插入新行。

func (v *View) EditWrite(ch rune)
func (v *View) EditWrite(ch rune)

EditWrite在光标位置写入一个符文。

func (v *View) EditWrite(ch rune)
func (v *View) Line(y int) (string, error)

Line返回一个字符串,该字符串的视图内部缓冲区的线位于与点(x,y)对应的位置。

func (v *View) Line(y int) (string, error)
func (v *View) MoveCursor(dx, dy int, writeMode bool)

MoveCursor会考虑线/视图的宽度来移动光标,并在必要时替换原点。

func (v *View) MoveCursor(dx, dy int, writeMode bool)
func (v *View) Name() string

名称返回视图的名称。

func (v *View) Name() string
func (v *View) Origin() (x, y int)

原点返回视图的原点位置。

func (v *View) Origin() (x, y int)
func (v *View) Read(p []byte) (n int, err error)

读取将数据读入p。 它返回读入p的字节数。 在EOF,err将为io.EOF。 在Rewind()之后调用Read()可使高速缓存用视图的内容刷新。

func (v *View) Read(p []byte) (n int, err error)
func (v *View) Rewind()

Rewind将下一个Read的偏移量设置为0,这也会刷新read缓存。

func (v *View) Rewind()
func (v *View) SetCursor(x, y int) error

SetCursor设置视图在给定点相对于视图的光标位置。 它检查位置是否有效。

func (v *View) SetCursor(x, y int) error
func (v *View) SetOrigin(x, y int) error

SetOrigin设置视图内部缓冲区的原点位置,因此从此点开始打印缓冲区,这意味着它已与原点连接。 它可以用于仅通过增加和减少ox和oy来实现水平和垂直滚动。

func (v *View) SetOrigin(x, y int) error
func (v *View) Size() (x, y int)

大小返回视图中可见列和行的数量。

func (v *View) Size() (x, y int)
func (v *View) ViewBuffer() string

ViewBuffer返回一个字符串,其中包含显示给用户的视图缓冲区的内容。

func (v *View) ViewBufferLines() []string
func (v *View) ViewBufferLines() []string

ViewBufferLines返回视图的内部缓冲区中显示给用户的行。

func (v *View) ViewBufferLines() []string
func (v *View) Word(x, y int) (string, error)

Word返回一个字符串,该字符串的视图内部缓冲区的单词位于与点(x,y)对应的位置。

func (v *View) Word(x, y int) (string, error)
func (v *View) Write(p []byte) (n int, err error)

写操作将字节切片追加到视图的内部缓冲区中。 由于View实现io.Writer接口,因此可以将其作为fmt.Fprintf,fmt.Fprintln,io.Copy等函数的参数传递。必须调用Clear来清除视图的缓冲区。

func (v *View) Write(p []byte) (n int, err error)

gocui 是一个 Go 语言用来开发控制台应用的 UI 工具包。手工翻译自GoDoc,如有错误,欢迎及时提出。致谢~~
GoDoc: https://github.com/jroimartin/gocui
项目地址: https://github.com/jroimartin/gocui


  转载请注明: So Cold gocui中文文档

 上一篇
Hexo+Github搭建教程 Hexo+Github搭建教程
Hexo和Github的搭建hexo的初级搭建还有部署到github page上,以及个人域名的绑定。 Hexo搭建步骤 安装Git 安装Node.js 安装Hexo GitHub创建个人仓库 生成SSH添加到GitHub 将hexo部署到
2020-02-15
下一篇 
markdow语法教程 markdow语法教程
Hexo+Material主题配置测试markdown的标题写法一到六级标题写法标题用“#+空格”来写,一级标题一个#号,二级标题##,最多支持六级标题。一点要记得在#后面加上一个空格。代码如下: # 一级标题 ## 二级标题 ### 三级
2020-01-01
  目录