blob: 52fe0c90d141946b5d7c7641222c183f038d3cdb [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.terminal;
using fuchsia.fonts;
using fuchsia.ui.types;
const MAX_PROFILE_NAME_LENGTH int32 = 128;
const MAX_ALLOWED_PROFILES int32 = 24;
const MAX_ID_LENGTH int32 = 36;
/// An alias to a profile's id.
alias ProfileId = string:MAX_ID_LENGTH;
/// Common error code used across different settings.
type ProfileError = strict enum {
/// Indicates that the requested profile does not exist.
NOT_FOUND = 1;
/// Indicates that the profile with a given name already exists.
NAME_ALREADY_EXISTS = 2;
};
/// A service which provides profile information for the terminal.
@discoverable
closed protocol Profiles {
/// Returns the list of [ProfileEntry] objects.
strict GetProfileList() -> (struct {
profile_list vector<ProfileEntry>:MAX_ALLOWED_PROFILES;
});
/// Sets the profile with the given id as the default.
///
/// This method can fail if a profile with the given id does not exist.
strict SetDefault(struct {
id ProfileId;
}) -> () error ProfileError;
/// Event which is triggered when the list of profiles have been updated.
///
/// Note: this method will not be called if properties of an individual
/// profile are updated.
strict -> OnProfileListUpdated(struct {
profile_entries vector<ProfileEntry>:MAX_ALLOWED_PROFILES;
});
/// Returns the profile with the given [id].
///
/// If there is no profile with the given [name] an error will be returned.
strict GetProfile(struct {
id ProfileId;
}) -> (struct {
profile Profile;
}) error ProfileError;
/// Updates the profile with the given id.
///
/// This method will fail if a profile with the given id does not already
/// exist. A Profile must be created with a call to [CreateProfile].
strict UpdateProfile(struct {
id ProfileId;
profile Profile;
}) -> () error ProfileError;
/// Creates a new profile.
///
/// After the profile is created it can be updated with a call to [Update].
strict CreateNew() -> (struct {
id ProfileId;
profile Profile;
});
/// Deletes the profile with the given id.
///
/// If no profile with [id] exists this method does nothing. If the
/// default profile is deleted then a new profile will be set as the
/// default. However, which profile is chosen as the new profile is not
/// defined and it is up to the implementor to choose. The new default
/// profile can be retrieved by listening for the OnProfileListUpdated
/// event.
strict Delete(struct {
id ProfileId;
});
/// Triggered when a given profile is updated.
strict -> OnProfileUpdated(struct {
id ProfileId;
profile Profile;
});
};
/// The [ProfileEntry] is a readonly value which represents
/// a profile that has been saved.
type ProfileEntry = struct {
/// A unique identifier for this profile represented as a UUID V4 string.
id ProfileId;
/// The user visible name of the profile.
name string:MAX_PROFILE_NAME_LENGTH;
/// Indicates if this is the users chosen default profile.
is_default bool;
};
/// A table representing the values stored in the profile.
type Profile = table {
/// The visible name for this profile.
1: name string:MAX_PROFILE_NAME_LENGTH;
/// The font family used in text rendering.
2: font_family fuchsia.fonts.FamilyName;
/// The point size to render text.
3: point_size float32;
/// The color to render the background;
4: background_color fuchsia.ui.types.ColorRgb;
/// The normal text color.
5: foreground_color fuchsia.ui.types.ColorRgb;
/// A color used to render bold text.
6: bold_color fuchsia.ui.types.ColorRgb;
/// The color of the selected text.
7: selected_background_color fuchsia.ui.types.ColorRgb;
/// The color of the selected text.
8: selected_foreground_color fuchsia.ui.types.ColorRgb;
/// If true, bold characters will use the bright color variant as well.
9: use_bright_for_bold bool;
10: ansi_colors array<fuchsia.ui.types.ColorRgb, 16>;
/// A struct representing the cursor.
11: cursor Cursor;
};
/// A description of the terminal's cursor.
type Cursor = struct {
/// The color to render the cursor.
color fuchsia.ui.types.ColorRgb;
/// The cursors style.
style CursorStyle;
/// whether the cursor should blink or not.
blink bool;
};
type CursorStyle = strict enum {
/// Renders the terminal's cursor as a block.
BLOCK = 1;
/// Renders the terminal's cursor as a single underline.
UNDERLINE = 2;
/// Renders the terminal's cursor as a single vertical bar.
VERTICAL_BAR = 3;
};