golang에서libvterm

9130 단어 Golibvterm
비어 있어서 구멍을 냈어요.

무엇이 libvterm입니까


libvterm은 libtermkey의 저자가 익숙한 Paul Evans에서 제작한 것으로 추상적이고 모의적인 VT220/xterm/ECMA-48 등 단말기 모의기 규격의 라이브러리에 사용된다.이 프로그램 라이브러리의 규격에 따라 프로그래밍하면 플랫폼과 GUI/CUI에 의존하지 않고 터미널 모의기를 처리할 수 있습니다.neovim과vim의:terminal 기능으로 사용됩니다.
libvterm은 껍질이 아닙니다.사용자 인터페이스도 아닙니다.순수 가상 단말기 시뮬레이터의 실현.따라서 키를 읽거나 그림을 그리지 않습니다.단말기의 단원에 대한 의미 순서 등 쓰기와 제어된 단말기의 출력 결과만 얻을 수 있다.
따라서 예를 들어 케이스를 시작하고 사용자와 대화할 수 있는 터미널 모의기를 만들 때 프로그램은 하위 프로세스 (케이스) 를 시작하여 pty 출력을 읽고 libvterm로 유입합니다.또한libvterm에서 온 리셋 이벤트와 함께 터미널의 셀 정보를 읽고 단독 UI로 렌더링합니다.

Go 언어부터 libvterm을 사용하고 싶어요.


나는 예전에 Go 언어부터libvterm을 처리하는 가방을 썼다.
이 패키지를 사용하면 80x25 단말기에 적자로'Hello'녹색으로'World'를 표시하는 프로그램을 써 보세요.
vt := vterm.New(25, 80)
defer vt.Close()

vt.SetUTF8(true)

screen := vt.ObtainScreen()
screen.Reset(true)

_, err := vt.Write([]byte("\033[31mHello \033[32mGolang\033[0m"))
if err != nil {
    log.Fatal(err)
}
screen.Flush()
이 코드를 실행하면 실제로는 어떤 내용도 표시되지 않습니다.너는 아마도'나는 이것이 어디가 좋은지 모른다'고 느낄 것이다.그럼 다음 코드를 계속 쓰세요.
    rows, cols := vt.Size()
    img := image.NewRGBA(image.Rect(0, 0, cols*7, rows*13))
    draw.Draw(img, img.Bounds(), &image.Uniform{color.Black}, image.ZP, draw.Src)

    for row := 0; row < rows; row++ {
        for col := 0; col < cols; col++ {
            cell, err := screen.GetCellAt(row, col)
            if err != nil {
                log.Fatal(err)
            }
            chars := cell.Chars()
            if len(chars) > 0 && chars[0] != 0 {
                drawChar(img, (col+1)*7, (row+1)*13, cell.Fg(), string(chars))
            }
        }
    }
    f, err := os.Create("output.png")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
    err = png.Encode(f, img)
    if err != nil {
        log.Fatal(err)
    }
이렇게 하면 80x25 단말기의 캡처를 찍을 수 있다.

전체 프로그램의 코드를 Gist에 붙여넣습니다.

go-libvterm 할 수 있는 일


응용 프로그램은 장치에 의존하지 않는 단말기용 캔버스를 내장할 수 있기 때문에 예를 들어 윈도우의 가상 단말기 설치 winpty와 함께 사용하면 명령 알림부호에 tmux와 같은 상자를 만들고 그 중에서 명령 알림부호를 거주할 수 있다.

자체 제작한 창 프로그램의 일부분에는 Visual Studio Code의 단말기 기능과Vim/neovim의 기능이 있습니다:terminal 추가 기능을 원할 때libvterm은 매우 편리하다.그리고 만약 그 응용 프로그램이 Go로 이루어진다면 go-libvterm을 사용할 수 있습니다.
가능하면 사용하세요.

좋은 웹페이지 즐겨찾기