Skip to content
On this page

input

TIP

input 是一个用于接收用户输入的基础组件。

original demo

这是一个最原始的demo,直接使用startUp 启动 input

demo

代码
go
package main

import (
	"fmt"
	"github.com/fzdwx/infinite/components"
)

func main() {
	input := components.NewInput()

	if err := components.NewStartUp(input).Start(); err != nil {
		panic(err)
	}

	fmt.Println("input:", input.Value())
}

input text

接下来就是 input text 这个组件了,之所以直接介绍这一个,是因为它完全就是 input 的功能的封装,只是把可以修改的配置用 option 的形式暴露了出来,并且修改了一些 默认配置 ,稍微改变了一下样式, 当然也提供了没有加样式的版本,你只需要添加一个text.WithPure()这个option。

demo

代码
go
package main

import (
	"fmt"
	inf "github.com/fzdwx/infinite"
	"github.com/fzdwx/infinite/components/input/text"
	"github.com/fzdwx/infinite/theme"
)

func main() {

	i := inf.NewText(
		text.WithPrompt("what's your name?"),
		text.WithPromptStyle(theme.DefaultTheme.PromptStyle),
		text.WithDefaultValue("fzdwx (maybe)"),
	)

	val, _ := i.Display()

	fmt.Printf("you input: %s\n", val)
}

options

这里是可供修改的配置项,你可以试着将它变成你的形状。

修改显示区域

TIP

Focus 就代表当前正在运行这个组件会显示,UnFocus 表示组件退出使用时才会显示。

input text 主要显示的区域有以下几个部分:

  • FocusSymbol/UnFocusSymbol: 提示符号
  • Prompt: 提示信息
  • FocusInterval/UnFocusInterval: 间隔符号
  • DefaultValue/Text: 默认值与实际值
  • Cursor: 光标

它们在 input text 中的大概位置: image

你可以向这样修改它们,并且可以修改它们的style

go
i := inf.NewText(
	text.WithPrompt("what's your name?"),
	text.WithPromptStyle(style.New().Fg(color.White).Bold()),
	text.WithDefaultValue("fzdwx (maybe)"),
	text.WithTextStyle(style.New().Fg(color.HotPink)),
	text.WithCursorStyle(style.New().Fg(color.Special)),
)

keymap

  • Confirm: 用户确认输入, 默认是 enter
  • Quit: 用户强制退出程序, 默认是 ctrl+c
go
i := inf.NewText(
	text.WithKeyMap(components.InputKeyMap{
		Confirm: key.NewBinding(
			key.WithKeys("enter"),
			key.WithHelp("enter", "confirm input value"),
		),
		Quit: key.NewBinding(
			key.WithKeys("xxx"),
			key.WithHelp("xxx", "confirm input value"),
		),
	}),
)

required

你可以通过设置 required , 让用户必须输入一些东西。

  • Required: 开启强制输入
  • RequiredMsg: 用户 Confirm 了却没有输入任何东西就会打印出来。
  • RequiredMsgKeepAliveTime: RequiredMsg 的存活时间。
go
i := inf.NewText(
	text.WithRequired(),
	text.WithRequiredMsg("请输入!!!"),
	text.WithRequiredMsgKeepAliveTime(time.Second*3),
)

default value

设置 DefaultValue, 即用户直接按下Confirm就会返回该值。

TIP

如果设置了 Required ,DefaultValue 会被忽略。

go
i := inf.NewText(
	text.WithDefaultValue("hello world"),
)

disableOutputResult

该选项是用于禁用输出结果。

go
i := inf.NewText(
	text.WithDisableOutputResult(),
)

禁用前: demo

禁用后: demo

改变text的显示模式

text 默认是输入什么就显示什么,你可以通过下面的option来修改它。

显示空白

demo

代码
go
package main

import (
	"fmt"
	inf "github.com/fzdwx/infinite"
	"github.com/fzdwx/infinite/components/input/text"
)

func main() {

	i := inf.NewText(
		text.WithEchoNone(),
	)

	val, _ := i.Display()

	fmt.Println("your input:", val)
}

显示自定义字符

demo

代码
go
package main

import (
	"fmt"
	inf "github.com/fzdwx/infinite"
	"github.com/fzdwx/infinite/components/input/text"
)

func main() {

	i := inf.NewText(
	    // 这里你也可以不输入,它默认就是 '*'
		text.WithEchoPassword('*'),
	)

	val, _ := i.Display()

	fmt.Println("your input:", val)
}