本文整理汇总了Golang中github.com/docker/docker/pkg/term.GetWinsize函数的典型用法代码示例。如果您正苦于以下问题:Golang GetWinsize函数的具体用法?Golang GetWinsize怎么用?Golang GetWinsize使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了GetWinsize函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: Shell
func (client *NativeClient) Shell(args ...string) error {
var (
termWidth, termHeight int
)
conn, err := ssh.Dial("tcp", net.JoinHostPort(client.Hostname, strconv.Itoa(client.Port)), &client.Config)
if err != nil {
return err
}
defer closeConn(conn)
session, err := conn.NewSession()
if err != nil {
return err
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
modes := ssh.TerminalModes{
ssh.ECHO: 1,
}
fd := os.Stdin.Fd()
if term.IsTerminal(fd) {
oldState, err := term.MakeRaw(fd)
if err != nil {
return err
}
defer term.RestoreTerminal(fd, oldState)
winsize, err := term.GetWinsize(fd)
if err != nil {
termWidth = 80
termHeight = 24
} else {
termWidth = int(winsize.Width)
termHeight = int(winsize.Height)
}
}
if err := session.RequestPty("xterm", termHeight, termWidth, modes); err != nil {
return err
}
if len(args) == 0 {
if err := session.Shell(); err != nil {
return err
}
session.Wait()
} else {
session.Run(strings.Join(args, " "))
}
return nil
}
开发者ID:flavio,项目名称:machine,代码行数:60,代码来源:client.go
示例2: GetWindowWidth
func (t *DockerTerminal) GetWindowWidth() (uint16, error) {
winsize, err := term.GetWinsize(os.Stdout.Fd())
if err != nil {
return 0, err
}
return winsize.Width, nil
}
开发者ID:davidwadden,项目名称:lattice-release,代码行数:7,代码来源:docker_terminal.go
示例3: GetWinsize
func (*DockerTerm) GetWinsize(fd uintptr) (width, height int) {
winSize, err := term.GetWinsize(fd)
if err != nil {
return 80, 43
}
return int(winSize.Width), int(winSize.Height)
}
开发者ID:davidwadden,项目名称:lattice-release,代码行数:8,代码来源:term.go
示例4: GetSize
// GetSize returns the current size of the terminal associated with fd.
func GetSize(fd uintptr) *Size {
winsize, err := term.GetWinsize(fd)
if err != nil {
runtime.HandleError(fmt.Errorf("unable to get terminal size: %v", err))
return nil
}
return &Size{Width: winsize.Width, Height: winsize.Height}
}
开发者ID:RyanBinfeng,项目名称:kubernetes,代码行数:10,代码来源:resize.go
示例5: Shell
func (client NativeClient) Shell() error {
var (
termWidth, termHeight int
)
conn, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", client.Hostname, client.Port), &client.Config)
if err != nil {
return err
}
session, err := conn.NewSession()
if err != nil {
return err
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
modes := ssh.TerminalModes{
ssh.ECHO: 1,
}
fd := os.Stdin.Fd()
if term.IsTerminal(fd) {
oldState, err := term.MakeRaw(fd)
if err != nil {
return err
}
defer term.RestoreTerminal(fd, oldState)
winsize, err := term.GetWinsize(fd)
if err != nil {
termWidth = 80
termHeight = 24
} else {
termWidth = int(winsize.Width)
termHeight = int(winsize.Height)
}
}
if err := session.RequestPty("xterm", termHeight, termWidth, modes); err != nil {
return err
}
if err := session.Shell(); err != nil {
return err
}
session.Wait()
return nil
}
开发者ID:jkingyens,项目名称:machine,代码行数:56,代码来源:client.go
示例6: resizePty
func (p *process) resizePty() error {
if p.pty == nil {
return nil
}
ws, err := term.GetWinsize(os.Stdin.Fd())
if err != nil {
return err
}
return term.SetWinsize(p.pty.Fd(), ws)
}
开发者ID:robinmonjo,项目名称:dock,代码行数:10,代码来源:process.go
示例7: resize
func (t *tty) resize() error {
if t.console == nil {
return nil
}
ws, err := term.GetWinsize(os.Stdin.Fd())
if err != nil {
return err
}
return term.SetWinsize(t.console.Fd(), ws)
}
开发者ID:alena1108,项目名称:kubernetes,代码行数:10,代码来源:tty.go
示例8: GetTTYSize
// GetTTYSize
func GetTTYSize(fd uintptr) (int, int) {
ws, err := term.GetWinsize(fd)
if err != nil {
config.Fatal("[util/server/exec] term.GetWinsize() failed", err.Error())
}
//
return int(ws.Width), int(ws.Height)
}
开发者ID:rubysolo,项目名称:nanobox,代码行数:11,代码来源:terminal.go
示例9: String
func (p *JSONProgress) String() string {
var (
width = 200
pbBox string
numbersBox string
timeLeftBox string
)
ws, err := term.GetWinsize(p.terminalFd)
if err == nil {
width = int(ws.Width)
}
if p.Current <= 0 && p.Total <= 0 {
return ""
}
current := units.HumanSize(float64(p.Current))
if p.Total <= 0 {
return fmt.Sprintf("%8v", current)
}
total := units.HumanSize(float64(p.Total))
percentage := int(float64(p.Current)/float64(p.Total)*100) / 2
if percentage > 50 {
percentage = 50
}
if width > 110 {
// this number can't be negetive gh#7136
numSpaces := 0
if 50-percentage > 0 {
numSpaces = 50 - percentage - 1
}
pbBox = fmt.Sprintf("[%s%s%s] ", strings.Repeat("~", percentage), p.Animal, strings.Repeat("~", numSpaces))
}
numbersBox = fmt.Sprintf("%8v/%v", current, total)
if p.Current > p.Total {
// remove total display if the reported current is wonky.
numbersBox = fmt.Sprintf("%8v", current)
}
if p.Current > 0 && p.Start > 0 && percentage < 50 {
fromStart := time.Now().UTC().Sub(time.Unix(p.Start, 0))
perEntry := fromStart / time.Duration(p.Current)
left := time.Duration(p.Total-p.Current) * perEntry
left = (left / time.Second) * time.Second
if width > 50 {
timeLeftBox = " " + left.String()
}
}
return pbBox + numbersBox + timeLeftBox
}
开发者ID:waterytowers,项目名称:global-hack-day-3,代码行数:54,代码来源:jsonmessage.go
示例10: getTtySize
func (cli *DockerCli) getTtySize() (int, int) {
if !cli.isTerminalOut {
return 0, 0
}
ws, err := term.GetWinsize(cli.outFd)
if err != nil {
logrus.Debugf("Error getting size: %s", err)
if ws == nil {
return 0, 0
}
}
return int(ws.Height), int(ws.Width)
}
开发者ID:circular-dark,项目名称:docker,代码行数:13,代码来源:utils.go
示例11: GetTtySize
// GetTtySize returns the height and width in characters of the tty
func (o *OutStream) GetTtySize() (uint, uint) {
if !o.isTerminal {
return 0, 0
}
ws, err := term.GetWinsize(o.fd)
if err != nil {
logrus.Debugf("Error getting size: %s", err)
if ws == nil {
return 0, 0
}
}
return uint(ws.Height), uint(ws.Width)
}
开发者ID:SUSE,项目名称:docker.mirror,代码行数:14,代码来源:out.go
示例12: getTtySize
func (builder *Builder) getTtySize() (int, int) {
if !builder.isTerminalOut {
return 0, 0
}
ws, err := term.GetWinsize(builder.fdOut)
if err != nil {
fmt.Fprintf(builder.OutStream, "Error getting TTY size: %s\n", err)
if ws == nil {
return 0, 0
}
}
return int(ws.Height), int(ws.Width)
}
开发者ID:tyrken,项目名称:rocker,代码行数:13,代码来源:tty.go
示例13: ResizeTTY
// ResizeTTY resizes the tty size of docker connection so output looks normal
func (c *DockerClient) ResizeTTY(execID string) error {
ws, err := term.GetWinsize(os.Stdout.Fd())
if err != nil {
c.logger.Debugln("Error getting term size: %s", err)
return err
}
err = c.ResizeExecTTY(execID, int(ws.Height), int(ws.Width))
if err != nil {
c.logger.Debugln("Error resizing term: %s", err)
return err
}
return nil
}
开发者ID:rlugojr,项目名称:wercker,代码行数:14,代码来源:docker.go
示例14: resizeTty
func resizeTty(master *os.File) {
if master == nil {
return
}
ws, err := term.GetWinsize(os.Stdin.Fd())
if err != nil {
return
}
if err := term.SetWinsize(master.Fd(), ws); err != nil {
return
}
}
开发者ID:JianfuLi,项目名称:docker,代码行数:14,代码来源:exec.go
示例15: resize
func resize(id, pid string, c types.APIClient) error {
ws, err := term.GetWinsize(os.Stdin.Fd())
if err != nil {
return err
}
if _, err := c.UpdateProcess(netcontext.Background(), &types.UpdateProcessRequest{
Id: id,
Pid: "init",
Width: uint32(ws.Width),
Height: uint32(ws.Height),
}); err != nil {
return err
}
return nil
}
开发者ID:carriercomm,项目名称:containerd,代码行数:15,代码来源:container.go
示例16: TestProgress
func TestProgress(t *testing.T) {
termsz, err := term.GetWinsize(0)
if err != nil {
// we can safely ignore the err here
termsz = nil
}
jp := JSONProgress{}
if jp.String() != "" {
t.Fatalf("Expected empty string, got '%s'", jp.String())
}
expected := " 1 B"
jp2 := JSONProgress{Current: 1}
if jp2.String() != expected {
t.Fatalf("Expected %q, got %q", expected, jp2.String())
}
expectedStart := "[==========> ] 20 B/100 B"
if termsz != nil && termsz.Width <= 110 {
expectedStart = " 20 B/100 B"
}
jp3 := JSONProgress{Current: 20, Total: 100, Start: time.Now().Unix()}
// Just look at the start of the string
// (the remaining time is really hard to test -_-)
if jp3.String()[:len(expectedStart)] != expectedStart {
t.Fatalf("Expected to start with %q, got %q", expectedStart, jp3.String())
}
expected = "[=========================> ] 50 B/100 B"
if termsz != nil && termsz.Width <= 110 {
expected = " 50 B/100 B"
}
jp4 := JSONProgress{Current: 50, Total: 100}
if jp4.String() != expected {
t.Fatalf("Expected %q, got %q", expected, jp4.String())
}
// this number can't be negative gh#7136
expected = "[==================================================>] 50 B"
if termsz != nil && termsz.Width <= 110 {
expected = " 50 B"
}
jp5 := JSONProgress{Current: 50, Total: 40}
if jp5.String() != expected {
t.Fatalf("Expected %q, got %q", expected, jp5.String())
}
}
开发者ID:CadeLaRen,项目名称:docker-3,代码行数:47,代码来源:jsonmessage_test.go
示例17: getTtySize
func (c *DockerClient) getTtySize(out io.Writer) (int, int) {
var (
fdOut, isTerminalOut = term.GetFdInfo(out)
)
if !isTerminalOut {
return 0, 0
}
ws, err := term.GetWinsize(fdOut)
if err != nil {
log.Errorf("Error getting TTY size: %s\n", err)
if ws == nil {
return 0, 0
}
}
return int(ws.Height), int(ws.Width)
}
开发者ID:romank87,项目名称:rocker,代码行数:19,代码来源:client_tty.go
示例18: String
func (p *JSONProgress) String() string {
var (
width = 200
pbBox string
numbersBox string
timeLeftBox string
)
ws, err := term.GetWinsize(p.terminalFd)
if err == nil {
width = int(ws.Width)
}
if p.Current <= 0 && p.Total <= 0 {
return ""
}
current := units.HumanSize(int64(p.Current))
if p.Total <= 0 {
return fmt.Sprintf("%8v", current)
}
total := units.HumanSize(int64(p.Total))
percentage := int(float64(p.Current)/float64(p.Total)*100) / 2
if width > 110 {
pbBox = fmt.Sprintf("[%s>%s] ", strings.Repeat("=", percentage), strings.Repeat(" ", 50-percentage))
}
numbersBox = fmt.Sprintf("%8v/%v", current, total)
if p.Current > 0 && p.Start > 0 && percentage < 50 {
fromStart := time.Now().UTC().Sub(time.Unix(int64(p.Start), 0))
perEntry := fromStart / time.Duration(p.Current)
left := time.Duration(p.Total-p.Current) * perEntry
left = (left / time.Second) * time.Second
if width > 50 {
timeLeftBox = " " + left.String()
}
}
return pbBox + numbersBox + timeLeftBox
}
开发者ID:r0n22,项目名称:docker,代码行数:39,代码来源:jsonmessage.go
示例19: sshConnect
func sshConnect(user string, host string, method ssh.AuthMethod) error {
sshc := &ssh.ClientConfig{
User: user,
Auth: []ssh.AuthMethod{method},
}
conn, err := ssh.Dial("tcp", host, sshc)
if err != nil {
return err
}
defer conn.Close()
session, err := conn.NewSession()
if err != nil {
return err
}
defer session.Close()
session.Stdout = os.Stdout
session.Stderr = os.Stderr
session.Stdin = os.Stdin
var (
termWidth, termHeight int
)
fd := os.Stdin.Fd()
oldState, err := term.MakeRaw(fd)
if err != nil {
return err
}
defer term.RestoreTerminal(fd, oldState)
winsize, err := term.GetWinsize(fd)
if err != nil {
termWidth = 80
termHeight = 24
} else {
termWidth = int(winsize.Width)
termHeight = int(winsize.Height)
}
modes := ssh.TerminalModes{
ssh.ECHO: 1,
}
if err := session.RequestPty("xterm", termWidth, termHeight, modes); err != nil {
return err
}
if err == nil {
err = session.Shell()
}
if err != nil {
return err
}
err = session.Wait()
if _, ok := err.(*ssh.ExitError); ok {
return nil
}
if err == io.EOF {
return nil
}
return err
}
开发者ID:neurodrone,项目名称:doit,代码行数:64,代码来源:doit.go
示例20: runRun
func runRun(cmd *Command, args []string) {
if len(args) == 0 {
cmd.PrintUsage()
os.Exit(2)
}
appname := mustApp()
w, err := term.GetWinsize(inFd)
if err != nil {
// If syscall.TIOCGWINSZ is not supported by the device, we're
// probably trying to run tests. Set w to some sensible default.
if err.Error() == "operation not supported by device" {
w = &term.Winsize{
Height: 20,
Width: 80,
}
} else {
printFatal(err.Error())
}
}
attached := !detachedRun
opts := heroku.DynoCreateOpts{Attach: &attached}
if attached {
env := map[string]string{
"COLUMNS": strconv.Itoa(int(w.Width)),
"LINES": strconv.Itoa(int(w.Height)),
"TERM": os.Getenv("TERM"),
}
opts.Env = &env
}
if dynoSize != "" {
if !strings.HasSuffix(dynoSize, "X") {
cmd.PrintUsage()
os.Exit(2)
}
opts.Size = &dynoSize
}
command := strings.Join(args, " ")
if detachedRun {
dyno, err := client.DynoCreate(appname, command, &opts)
must(err)
log.Printf("Ran `%s` on %s as %s, detached.", dyno.Command, appname, dyno.Name)
return
}
params := struct {
Command string `json:"command"`
Attach *bool `json:"attach,omitempty"`
Env *map[string]string `json:"env,omitempty"`
Size *string `json:"size,omitempty"`
}{
Command: command,
Attach: opts.Attach,
Env: opts.Env,
Size: opts.Size,
}
req, err := client.NewRequest("POST", "/apps/"+appname+"/dynos", params)
must(err)
u, err := url.Parse(apiURL)
must(err)
proto, address := dialParams(u)
var dial net.Conn
if proto == "tls" {
dial, err = tlsDial("tcp", address, &tls.Config{})
if err != nil {
printFatal(err.Error())
}
} else {
dial, err = net.Dial(proto, address)
if err != nil {
printFatal(err.Error())
}
}
clientconn := httputil.NewClientConn(dial, nil)
defer clientconn.Close()
_, err = clientconn.Do(req)
if err != nil && err != httputil.ErrPersistEOF {
printFatal(err.Error())
}
rwc, br := clientconn.Hijack()
defer rwc.Close()
if isTerminalIn && isTerminalOut {
state, err := term.SetRawTerminal(inFd)
if err != nil {
printFatal(err.Error())
}
defer term.RestoreTerminal(inFd, state)
}
errChanOut := make(chan error, 1)
errChanIn := make(chan error, 1)
exit := make(chan bool)
//.........这里部分代码省略.........
开发者ID:intfrr,项目名称:empire,代码行数:101,代码来源:run.go
注:本文中的github.com/docker/docker/pkg/term.GetWinsize函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论