...

Source file src/github.com/gdamore/tcell/v2/tty.go

Documentation: github.com/gdamore/tcell/v2

     1  // Copyright 2021 The TCell Authors
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use file except in compliance with the License.
     5  // You may obtain a copy of the license at
     6  //
     7  //    http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package tcell
    16  
    17  import "io"
    18  
    19  // Tty is an abstraction of a tty (traditionally "teletype").  This allows applications to
    20  // provide for alternate backends, as there are situations where the traditional /dev/tty
    21  // does not work, or where more flexible handling is required.  This interface is for use
    22  // with the terminfo-style based API.  It extends the io.ReadWriter API.  It is reasonable
    23  // that the implementation might choose to use different underlying files for the Reader
    24  // and Writer sides of this API, as part of it's internal implementation.
    25  type Tty interface {
    26  	// Start is used to activate the Tty for use.  Upon return the terminal should be
    27  	// in raw mode, non-blocking, etc.  The implementation should take care of saving
    28  	// any state that is required so that it may be restored when Stop is called.
    29  	Start() error
    30  
    31  	// Stop is used to stop using this Tty instance.  This may be a suspend, so that other
    32  	// terminal based applications can run in the foreground.  Implementations should
    33  	// restore any state collected at Start(), and return to ordinary blocking mode, etc.
    34  	// Drain is called first to drain the input.  Once this is called, no more Read
    35  	// or Write calls will be made until Start is called again.
    36  	Stop() error
    37  
    38  	// Drain is called before Stop, and ensures that the reader will wake up appropriately
    39  	// if it was blocked.  This workaround is required for /dev/tty on certain UNIX systems
    40  	// to ensure that Read() does not block forever.  This typically arranges for the tty driver
    41  	// to send data immediately (e.g. VMIN and VTIME both set zero) and sets a deadline on input.
    42  	// Implementations may reasonably make this a no-op.  There will still be control sequences
    43  	// emitted between the time this is called, and when Stop is called.
    44  	Drain() error
    45  
    46  	// NotifyResize is used register a callback when the tty thinks the dimensions have
    47  	// changed.  The standard UNIX implementation links this to a handler for SIGWINCH.
    48  	// If the supplied callback is nil, then any handler should be unregistered.
    49  	NotifyResize(cb func())
    50  
    51  	// WindowSize is called to determine the terminal dimensions.  This might be determined
    52  	// by an ioctl or other means.
    53  	WindowSize() (width int, height int, err error)
    54  
    55  	io.ReadWriteCloser
    56  }
    57  

View as plain text