// 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/public/interfaces/file.mojom";
import "files/public/interfaces/types.mojom";
import "terminal/public/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()|).
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);
};
