tcellansi の紹介

Posted on:

概要

tcellansi は Go言語向けのライブラリで、tcellで描画した画面のスタイルをANSIエスケープシーケンスに変換して扱いやすくすることを目的としています。

主な特長

  • tcellのスタイルをANSIエスケープシーケンスに変換
  • tcellの画面範囲を指定してANSIエスケープシーケンス付きの文字列に変換も可能

インストール

Go Modules を使っている場合の例:

go get github.com/noborus/tcellansi@latest

もしくは、必要なパッケージを go.mod に追加してください。

簡単な使い方

以下は雛形のサンプルです。実際の関数名や使い方はリポジトリのドキュメントやソースコードを確認して適宜置き換えてください。

tcellスタイル変換の例

package main

import (
	"github.com/gdamore/tcell/v3"
	"github.com/noborus/tcellansi"
)

func main() {
	style := tcell.StyleDefault.Foreground(tcell.ColorRed).Background(tcell.ColorBlue)
	ansiSeq := tcellansi.ToAnsi(style)
	println(ansiSeq + "Hello world!")
}

赤い文字で青い背景の “Hello world!” が表示されます。 スタイルの変換例 スタイルの変換例

画面範囲指定の例

package main

import (
	"github.com/gdamore/tcell/v3"
	"github.com/noborus/tcellansi"
)

func main() {
	screen, err := tcell.NewScreen()
	if err != nil {
		panic(err)
	}
	screen.Init()
	var scrStr []string
	screen.PutStrStyled(0, 0, "Hello World!", tcell.StyleDefault.Foreground(tcell.ColorRed).Background(tcell.ColorBlue))
	screen.Show()
	scrStr = tcellansi.ScreenContentToStrings(screen, 0, 80, 0, 1)

	event := screen.EventQ()
mainloop:
	for {
		switch (<-event).(type) {
		case *tcell.EventKey:
			break mainloop
		}
	}
	screen.Fini()

	println("----- Screen Content as ANSI -----")
	for _, line := range scrStr {
		print(line)
	}
}

tcellの画面表示後、なにかキーを押したら終了し、その後tcellの画面をANSIエスケープシーケンス付きで出力します。 画面範囲指定の例 画面範囲指定の例

リンク