...

Source file src/github.com/c-bata/go-prompt/output_posix.go

Documentation: github.com/c-bata/go-prompt

     1  // +build !windows
     2  
     3  package prompt
     4  
     5  import (
     6  	"syscall"
     7  )
     8  
     9  const flushMaxRetryCount = 3
    10  
    11  // PosixWriter is a ConsoleWriter implementation for POSIX environment.
    12  // To control terminal emulator, this outputs VT100 escape sequences.
    13  type PosixWriter struct {
    14  	VT100Writer
    15  	fd int
    16  }
    17  
    18  // Flush to flush buffer
    19  func (w *PosixWriter) Flush() error {
    20  	l := len(w.buffer)
    21  	offset := 0
    22  	retry := 0
    23  	for {
    24  		n, err := syscall.Write(w.fd, w.buffer[offset:])
    25  		if err != nil {
    26  			if retry < flushMaxRetryCount {
    27  				retry++
    28  				continue
    29  			}
    30  			return err
    31  		}
    32  		offset += n
    33  		if offset == l {
    34  			break
    35  		}
    36  	}
    37  	w.buffer = []byte{}
    38  	return nil
    39  }
    40  
    41  var _ ConsoleWriter = &PosixWriter{}
    42  
    43  var (
    44  	// NewStandardOutputWriter returns ConsoleWriter object to write to stdout.
    45  	// This generates VT100 escape sequences because almost terminal emulators
    46  	// in POSIX OS built on top of a VT100 specification.
    47  	// Deprecated: Please use NewStdoutWriter
    48  	NewStandardOutputWriter = NewStdoutWriter
    49  )
    50  
    51  // NewStdoutWriter returns ConsoleWriter object to write to stdout.
    52  // This generates VT100 escape sequences because almost terminal emulators
    53  // in POSIX OS built on top of a VT100 specification.
    54  func NewStdoutWriter() ConsoleWriter {
    55  	return &PosixWriter{
    56  		fd: syscall.Stdout,
    57  	}
    58  }
    59  
    60  // NewStderrWriter returns ConsoleWriter object to write to stderr.
    61  // This generates VT100 escape sequences because almost terminal emulators
    62  // in POSIX OS built on top of a VT100 specification.
    63  func NewStderrWriter() ConsoleWriter {
    64  	return &PosixWriter{
    65  		fd: syscall.Stderr,
    66  	}
    67  }
    68  

View as plain text