tcellのscreen.SetContentメソッドについて

tcellで何らかのアプリケーションを開発する際に

func (b *baseScreen) SetContent(x, y int, mainc rune, combc []rune, st Style)

https://github.com/gdamore/tcell/blob/main/screen.go#L404

のメソッドが重要になります。


今回はSetContentの引数の内、combc []runeについて見ていきます。


細かい説明の前にcombcに値を挿入して、実行結果を見てみます。


package main

import (
	"github.com/gdamore/tcell/v2"
)

func main() {
	screen, err := tcell.NewScreen()
	if err != nil {
		panic(err)
	}
	if err := screen.Init(); err != nil {
		panic(err)
	}
	defer screen.Fini()

	runes := []rune{'a', 'b', 'c'}

	// maincには何らかのrune(一文字の文字)の値を指定する必要があるため、スペースを入れておく
	screen.SetContent(0, 0, ' ', runes, tcell.StyleDefault)
	screen.Show()

	// Escでプログラムを終了できるようにする
	for {
		ev := screen.PollEvent() // イベントを取得する
		switch ev := ev.(type) {
		case *tcell.EventKey:
			switch ev.Key() { // 何のキーが押されたか?を調べる
			case tcell.KeyEscape: // ESCキーが押されたら終了する
				return
			}
		default:
			//
		}
	}
}

combcにはruneのスライスを指定する必要があるため、

runes := []rune{'a', 'b', 'c'}

の値を挿入します。


このコードを実行してみると、



スペースが一つあり、その後に指定した abc が出力されました。


更に挙動を確認するために、

screen.SetContent(0, 0, ' ', runes, tcell.StyleDefault)

screen.SetContent(0, 0, 'z', runes, tcell.StyleDefault)

のように mainc にrune型の z の値を挿入してみます。


実行結果は



のように、mainc + combc のrune型から構成される文字列が出力されました。

同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。