golang常用库之-pkg/term包、moby.term包 | 返回用户终端的当前宽度和高度

golang常用库之-pkg/term包

pkg/term包

https://github.com/pkg/term

Package term manages POSIX terminals. As POSIX terminals are connected to, or emulate, a UART, this package also provides control over the various UART and serial line parameters.

term包管理 POSIX 终端。此程序包还提供了对各种UART和串行线参数的控制。

moby.term包

官网:https://github.com/moby/term

term provides structures and helper functions to work with terminal (state, sizes).
term 提供结构体和helper函数关于终端(状态,大小)。

官方demo:打印终端大小。

package main

import (
	"log"
	"os"

	"github.com/moby/term"
)

func main() {
    
    
	fd := os.Stdin.Fd()
	if term.IsTerminal(fd) {
    
    
		ws, err := term.GetWinsize(fd)
		if err != nil {
    
    
			log.Fatalf("term.GetWinsize: %s", err)
		}
		log.Printf("%d:%d\n", ws.Height, ws.Width)
	}
}

使用场景

常用于命令行程序最大给定列数打印给定名称命令行标志集。

根据终端列长度,调试命令行打印的格式。

demo:返回用户终端的当前宽度和高度

package main

import (
	"fmt"
	"io"
	"os"

	"github.com/moby/term"
)

// TerminalSize returns the current width and height of the user's terminal. If it isn't a terminal,
// nil is returned. On error, zero values are returned for width and height.
// Usually w must be the stdout of the process. Stderr won't work.
func TerminalSize(w io.Writer) (int, int, error) {
    
    
	//GetFdInfo返回操作系统的文件描述符。文件并指示该文件是否表示终端。
	outFd, isTerminal := term.GetFdInfo(w)
	if !isTerminal {
    
    
		return 0, 0, fmt.Errorf("given writer is no terminal")
	}
	//GetWinsize根据指定的文件描述符返回窗口大小。
	winsize, err := term.GetWinsize(outFd)
	if err != nil {
    
    
		return 0, 0, err
	}
	return int(winsize.Width), int(winsize.Height), nil
}

func main() {
    
    
	cols, height, _ := TerminalSize(os.Stdout)
	fmt.Printf("Width: %v, Height: %v", cols, height)
}

代码解释:
TerminalSize返回用户终端的当前宽度和高度。如果它不是终端,返回nil。出错时,宽度和高度返回零值。通常w必须是进程的标准输出。Stderr不起作用。
程序返回终端的宽度和高度。

猜你喜欢

转载自blog.csdn.net/inthat/article/details/123667309