golang에서libvterm
무엇이 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을 사용할 수 있습니다.
가능하면 사용하세요.
Reference
이 문제에 관하여(golang에서libvterm), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mattn/items/5aed718a65d21ca7855c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
나는 예전에 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을 사용할 수 있습니다.
가능하면 사용하세요.
Reference
이 문제에 관하여(golang에서libvterm), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mattn/items/5aed718a65d21ca7855c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(golang에서libvterm), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mattn/items/5aed718a65d21ca7855c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)