blob: 3ff25f54ab663df3147243f6954e32292caf50aa [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 int32 MAX_PROFILE_NAME_LENGTH = 128;
const int32 MAX_ALLOWED_PROFILES = 24;
const int32 MAX_ID_LENGTH = 36;
/// An alias to a profile's id.
alias ProfileId = string:MAX_ID_LENGTH;
/// Common error code used across different settings.
enum ProfileError {
/// 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]
protocol Profiles {
/// Returns the list of [ProfileEntry] objects.
GetProfileList() -> (vector<ProfileEntry>:MAX_ALLOWED_PROFILES profile_list);
/// Sets the profile with the given id as the default.
///
/// This method can fail if a profile with the given id does not exist.
SetDefault(ProfileId id) -> () 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.
-> OnProfileListUpdated(vector<ProfileEntry>:MAX_ALLOWED_PROFILES profile_entries);
/// Returns the profile with the given [id].
///
/// If there is no profile with the given [name] an error will be returned.
GetProfile(ProfileId id) -> (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].
UpdateProfile(ProfileId id, Profile profile) -> () error ProfileError;
/// Creates a new profile.
///
/// After the profile is created it can be updated with a call to [Update].
CreateNew() -> (ProfileId id, 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.
Delete(ProfileId id);
/// Triggered when a given profile is updated.
-> OnProfileUpdated(ProfileId id, Profile profile);
};
/// The [ProfileEntry] is a readonly value which represents
/// a profile that has been saved.
struct ProfileEntry {
/// A unique identifier for this profile represented as a UUID V4 string.
ProfileId id;
/// The user visible name of the profile.
string:MAX_PROFILE_NAME_LENGTH name;
/// Indicates if this is the users chosen default profile.
bool is_default;
};
/// A table representing the values stored in the profile.
table Profile {
/// The visible name for this profile.
1: string:MAX_PROFILE_NAME_LENGTH name;
/// The font family used in text rendering.
2: fuchsia.fonts.FamilyName font_family;
/// The point size to render text.
3: float32 point_size;
/// The color to render the background;
4: fuchsia.ui.types.ColorRgb background_color;
/// The normal text color.
5: fuchsia.ui.types.ColorRgb foreground_color;
/// A color used to render bold text.
6: fuchsia.ui.types.ColorRgb bold_color;
/// The color of the selected text.
7: fuchsia.ui.types.ColorRgb selected_background_color;
/// The color of the selected text.
8: fuchsia.ui.types.ColorRgb selected_foreground_color;
/// If true, bold characters will use the bright color variant as well.
9: bool use_bright_for_bold;
10: array<fuchsia.ui.types.ColorRgb>:16 ansi_colors;
/// A struct representing the cursor.
11: Cursor cursor;
};
/// A description of the terminal's cursor.
struct Cursor {
/// The color to render the cursor.
fuchsia.ui.types.ColorRgb color;
/// The cursors style.
CursorStyle style;
/// whether the cursor should blink or not.
bool blink;
};
enum CursorStyle {
/// 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;
};