// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

[DartPackage="mojo_services"]
module mojo.terminal;

import "files/interfaces/file.mojom";
import "files/interfaces/types.mojom";
import "terminal/interfaces/terminal_client.mojom";

// Interface for actual terminal programs, in particular, for a single terminal
// display. For terminals that display output and are embeddable, this will
// typically be a service provided by the |ViewManagerClient| (see |OnEmbed()|).
[ServiceName="mojo::terminal::Terminal"]
interface Terminal {
  // Connects to the terminal. If |force| is true, it will terminate any
  // existing connection. The reply is sent when |terminal| is no longer
  // connected. It is not successful only on "synchronous"/immediate failure,
  // e.g., if something else is already connected (|force| is false).
  Connect(mojo.files.File& terminal_file, bool force)
      => (mojo.files.Error error);

  // Asks the terminal to connect to the given client. (|force| and response as
  // are for |Connect()|.)
  ConnectToClient(TerminalClient terminal_client, bool force)
      => (mojo.files.Error error);

  // Gets the size of terminal (in number of rows/columns of text). (|rows| and
  // |columns| are valid only on success.)
  GetSize() => (mojo.files.Error error, uint32 rows, uint32 columns);

  // Sets the size of terminal (in number of rows/columns of text); 0 for
  // rows or columns means to compute that automatically. If |reset| is true, it
  // will reset (clear) the terminal. Note that it may not set exactly the
  // requested size. (On success, the response will provide the actual set
  // size.)
  SetSize(uint32 rows, uint32 columns, bool reset)
      => (mojo.files.Error error, uint32 rows, uint32 columns);
};
