mirror of
https://github.com/mickael-kerjean/filestash
synced 2025-12-19 14:56:22 +01:00
The idea here is to be able to use curl and have Filestash to render image in a terminal friendly fashion
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package terminal
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/mattn/go-isatty"
|
|
terminal "github.com/wayneashleyberry/terminal-dimensions"
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
const (
|
|
charWidthWindows = 0.714
|
|
charWidthOther = 0.5
|
|
)
|
|
|
|
// NewTerminalAccessor create a new terminal accessor
|
|
func NewTerminalAccessor() Terminal {
|
|
return Accessor{}
|
|
}
|
|
|
|
// Terminal get the terminal basic information
|
|
type Terminal interface {
|
|
CharWidth() float64
|
|
ScreenSize() (width, height int, err error)
|
|
IsWindows() bool
|
|
}
|
|
|
|
// Accessor implement the Terminal interface and
|
|
// fetch the terminal basic information
|
|
type Accessor struct {
|
|
}
|
|
|
|
// CharWidth get the terminal char width
|
|
func (accessor Accessor) CharWidth() float64 {
|
|
if accessor.IsWindows() {
|
|
return charWidthWindows
|
|
}
|
|
return charWidthOther
|
|
}
|
|
|
|
// IsWindows check if current system is windows
|
|
func (accessor Accessor) IsWindows() bool {
|
|
return runtime.GOOS == "windows"
|
|
}
|
|
|
|
// ScreenSize get the terminal screen size
|
|
func (accessor Accessor) ScreenSize() (newWidth, newHeight int, err error) {
|
|
if !isatty.IsTerminal(os.Stdout.Fd()) && !isatty.IsCygwinTerminal(os.Stdout.Fd()) {
|
|
return 0, 0,
|
|
errors.New("can not detect the terminal")
|
|
}
|
|
|
|
x, _ := terminal.Width()
|
|
y, _ := terminal.Height()
|
|
|
|
return int(x), int(y), nil
|
|
}
|