mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-04-20 00:18:53 +03:00

Partial implementation of #5256 This implements the core changes necessary to open urls using an apprt action rather than doing it directly from the core. Implements the open_url action in the GTK and GLFW apprts. Note that this should not be merged until a macOS-savvy developer can add an implementation of the open_url action for the macOS apprt.
818 lines
23 KiB
C
818 lines
23 KiB
C
// Ghostty embedding API. The documentation for the embedding API is
|
|
// only within the Zig source files that define the implementations. This
|
|
// isn't meant to be a general purpose embedding API (yet) so there hasn't
|
|
// been documentation or example work beyond that.
|
|
//
|
|
// The only consumer of this API is the macOS app, but the API is built to
|
|
// be more general purpose.
|
|
#ifndef GHOSTTY_H
|
|
#define GHOSTTY_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
#include <sys/types.h>
|
|
|
|
//-------------------------------------------------------------------
|
|
// Macros
|
|
|
|
#define GHOSTTY_SUCCESS 0
|
|
|
|
//-------------------------------------------------------------------
|
|
// Types
|
|
|
|
// Opaque types
|
|
typedef void* ghostty_app_t;
|
|
typedef void* ghostty_config_t;
|
|
typedef void* ghostty_surface_t;
|
|
typedef void* ghostty_inspector_t;
|
|
|
|
// All the types below are fully defined and must be kept in sync with
|
|
// their Zig counterparts. Any changes to these types MUST have an associated
|
|
// Zig change.
|
|
typedef enum {
|
|
GHOSTTY_PLATFORM_INVALID,
|
|
GHOSTTY_PLATFORM_MACOS,
|
|
GHOSTTY_PLATFORM_IOS,
|
|
} ghostty_platform_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_CLIPBOARD_STANDARD,
|
|
GHOSTTY_CLIPBOARD_SELECTION,
|
|
} ghostty_clipboard_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_CLIPBOARD_REQUEST_PASTE,
|
|
GHOSTTY_CLIPBOARD_REQUEST_OSC_52_READ,
|
|
GHOSTTY_CLIPBOARD_REQUEST_OSC_52_WRITE,
|
|
} ghostty_clipboard_request_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_MOUSE_RELEASE,
|
|
GHOSTTY_MOUSE_PRESS,
|
|
} ghostty_input_mouse_state_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_MOUSE_UNKNOWN,
|
|
GHOSTTY_MOUSE_LEFT,
|
|
GHOSTTY_MOUSE_RIGHT,
|
|
GHOSTTY_MOUSE_MIDDLE,
|
|
} ghostty_input_mouse_button_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_MOUSE_MOMENTUM_NONE,
|
|
GHOSTTY_MOUSE_MOMENTUM_BEGAN,
|
|
GHOSTTY_MOUSE_MOMENTUM_STATIONARY,
|
|
GHOSTTY_MOUSE_MOMENTUM_CHANGED,
|
|
GHOSTTY_MOUSE_MOMENTUM_ENDED,
|
|
GHOSTTY_MOUSE_MOMENTUM_CANCELLED,
|
|
GHOSTTY_MOUSE_MOMENTUM_MAY_BEGIN,
|
|
} ghostty_input_mouse_momentum_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_COLOR_SCHEME_LIGHT = 0,
|
|
GHOSTTY_COLOR_SCHEME_DARK = 1,
|
|
} ghostty_color_scheme_e;
|
|
|
|
// This is a packed struct (see src/input/mouse.zig) but the C standard
|
|
// afaik doesn't let us reliably define packed structs so we build it up
|
|
// from scratch.
|
|
typedef int ghostty_input_scroll_mods_t;
|
|
|
|
typedef enum {
|
|
GHOSTTY_MODS_NONE = 0,
|
|
GHOSTTY_MODS_SHIFT = 1 << 0,
|
|
GHOSTTY_MODS_CTRL = 1 << 1,
|
|
GHOSTTY_MODS_ALT = 1 << 2,
|
|
GHOSTTY_MODS_SUPER = 1 << 3,
|
|
GHOSTTY_MODS_CAPS = 1 << 4,
|
|
GHOSTTY_MODS_NUM = 1 << 5,
|
|
GHOSTTY_MODS_SHIFT_RIGHT = 1 << 6,
|
|
GHOSTTY_MODS_CTRL_RIGHT = 1 << 7,
|
|
GHOSTTY_MODS_ALT_RIGHT = 1 << 8,
|
|
GHOSTTY_MODS_SUPER_RIGHT = 1 << 9,
|
|
} ghostty_input_mods_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_ACTION_RELEASE,
|
|
GHOSTTY_ACTION_PRESS,
|
|
GHOSTTY_ACTION_REPEAT,
|
|
} ghostty_input_action_e;
|
|
|
|
typedef enum {
|
|
GHOSTTY_KEY_INVALID,
|
|
|
|
// a-z
|
|
GHOSTTY_KEY_A,
|
|
GHOSTTY_KEY_B,
|
|
GHOSTTY_KEY_C,
|
|
GHOSTTY_KEY_D,
|
|
GHOSTTY_KEY_E,
|
|
GHOSTTY_KEY_F,
|
|
GHOSTTY_KEY_G,
|
|
GHOSTTY_KEY_H,
|
|
GHOSTTY_KEY_I,
|
|
GHOSTTY_KEY_J,
|
|
GHOSTTY_KEY_K,
|
|
GHOSTTY_KEY_L,
|
|
GHOSTTY_KEY_M,
|
|
GHOSTTY_KEY_N,
|
|
GHOSTTY_KEY_O,
|
|
GHOSTTY_KEY_P,
|
|
GHOSTTY_KEY_Q,
|
|
GHOSTTY_KEY_R,
|
|
GHOSTTY_KEY_S,
|
|
GHOSTTY_KEY_T,
|
|
GHOSTTY_KEY_U,
|
|
GHOSTTY_KEY_V,
|
|
GHOSTTY_KEY_W,
|
|
GHOSTTY_KEY_X,
|
|
GHOSTTY_KEY_Y,
|
|
GHOSTTY_KEY_Z,
|
|
|
|
// numbers
|
|
GHOSTTY_KEY_ZERO,
|
|
GHOSTTY_KEY_ONE,
|
|
GHOSTTY_KEY_TWO,
|
|
GHOSTTY_KEY_THREE,
|
|
GHOSTTY_KEY_FOUR,
|
|
GHOSTTY_KEY_FIVE,
|
|
GHOSTTY_KEY_SIX,
|
|
GHOSTTY_KEY_SEVEN,
|
|
GHOSTTY_KEY_EIGHT,
|
|
GHOSTTY_KEY_NINE,
|
|
|
|
// puncuation
|
|
GHOSTTY_KEY_SEMICOLON,
|
|
GHOSTTY_KEY_SPACE,
|
|
GHOSTTY_KEY_APOSTROPHE,
|
|
GHOSTTY_KEY_COMMA,
|
|
GHOSTTY_KEY_GRAVE_ACCENT, // `
|
|
GHOSTTY_KEY_PERIOD,
|
|
GHOSTTY_KEY_SLASH,
|
|
GHOSTTY_KEY_MINUS,
|
|
GHOSTTY_KEY_PLUS,
|
|
GHOSTTY_KEY_EQUAL,
|
|
GHOSTTY_KEY_LEFT_BRACKET, // [
|
|
GHOSTTY_KEY_RIGHT_BRACKET, // ]
|
|
GHOSTTY_KEY_BACKSLASH, // \
|
|
|
|
// control
|
|
GHOSTTY_KEY_UP,
|
|
GHOSTTY_KEY_DOWN,
|
|
GHOSTTY_KEY_RIGHT,
|
|
GHOSTTY_KEY_LEFT,
|
|
GHOSTTY_KEY_HOME,
|
|
GHOSTTY_KEY_END,
|
|
GHOSTTY_KEY_INSERT,
|
|
GHOSTTY_KEY_DELETE,
|
|
GHOSTTY_KEY_CAPS_LOCK,
|
|
GHOSTTY_KEY_SCROLL_LOCK,
|
|
GHOSTTY_KEY_NUM_LOCK,
|
|
GHOSTTY_KEY_PAGE_UP,
|
|
GHOSTTY_KEY_PAGE_DOWN,
|
|
GHOSTTY_KEY_ESCAPE,
|
|
GHOSTTY_KEY_ENTER,
|
|
GHOSTTY_KEY_TAB,
|
|
GHOSTTY_KEY_BACKSPACE,
|
|
GHOSTTY_KEY_PRINT_SCREEN,
|
|
GHOSTTY_KEY_PAUSE,
|
|
|
|
// function keys
|
|
GHOSTTY_KEY_F1,
|
|
GHOSTTY_KEY_F2,
|
|
GHOSTTY_KEY_F3,
|
|
GHOSTTY_KEY_F4,
|
|
GHOSTTY_KEY_F5,
|
|
GHOSTTY_KEY_F6,
|
|
GHOSTTY_KEY_F7,
|
|
GHOSTTY_KEY_F8,
|
|
GHOSTTY_KEY_F9,
|
|
GHOSTTY_KEY_F10,
|
|
GHOSTTY_KEY_F11,
|
|
GHOSTTY_KEY_F12,
|
|
GHOSTTY_KEY_F13,
|
|
GHOSTTY_KEY_F14,
|
|
GHOSTTY_KEY_F15,
|
|
GHOSTTY_KEY_F16,
|
|
GHOSTTY_KEY_F17,
|
|
GHOSTTY_KEY_F18,
|
|
GHOSTTY_KEY_F19,
|
|
GHOSTTY_KEY_F20,
|
|
GHOSTTY_KEY_F21,
|
|
GHOSTTY_KEY_F22,
|
|
GHOSTTY_KEY_F23,
|
|
GHOSTTY_KEY_F24,
|
|
GHOSTTY_KEY_F25,
|
|
|
|
// keypad
|
|
GHOSTTY_KEY_KP_0,
|
|
GHOSTTY_KEY_KP_1,
|
|
GHOSTTY_KEY_KP_2,
|
|
GHOSTTY_KEY_KP_3,
|
|
GHOSTTY_KEY_KP_4,
|
|
GHOSTTY_KEY_KP_5,
|
|
GHOSTTY_KEY_KP_6,
|
|
GHOSTTY_KEY_KP_7,
|
|
GHOSTTY_KEY_KP_8,
|
|
GHOSTTY_KEY_KP_9,
|
|
GHOSTTY_KEY_KP_DECIMAL,
|
|
GHOSTTY_KEY_KP_DIVIDE,
|
|
GHOSTTY_KEY_KP_MULTIPLY,
|
|
GHOSTTY_KEY_KP_SUBTRACT,
|
|
GHOSTTY_KEY_KP_ADD,
|
|
GHOSTTY_KEY_KP_ENTER,
|
|
GHOSTTY_KEY_KP_EQUAL,
|
|
GHOSTTY_KEY_KP_SEPARATOR,
|
|
GHOSTTY_KEY_KP_LEFT,
|
|
GHOSTTY_KEY_KP_RIGHT,
|
|
GHOSTTY_KEY_KP_UP,
|
|
GHOSTTY_KEY_KP_DOWN,
|
|
GHOSTTY_KEY_KP_PAGE_UP,
|
|
GHOSTTY_KEY_KP_PAGE_DOWN,
|
|
GHOSTTY_KEY_KP_HOME,
|
|
GHOSTTY_KEY_KP_END,
|
|
GHOSTTY_KEY_KP_INSERT,
|
|
GHOSTTY_KEY_KP_DELETE,
|
|
GHOSTTY_KEY_KP_BEGIN,
|
|
|
|
// modifiers
|
|
GHOSTTY_KEY_LEFT_SHIFT,
|
|
GHOSTTY_KEY_LEFT_CONTROL,
|
|
GHOSTTY_KEY_LEFT_ALT,
|
|
GHOSTTY_KEY_LEFT_SUPER,
|
|
GHOSTTY_KEY_RIGHT_SHIFT,
|
|
GHOSTTY_KEY_RIGHT_CONTROL,
|
|
GHOSTTY_KEY_RIGHT_ALT,
|
|
GHOSTTY_KEY_RIGHT_SUPER,
|
|
} ghostty_input_key_e;
|
|
|
|
typedef struct {
|
|
ghostty_input_action_e action;
|
|
ghostty_input_mods_e mods;
|
|
uint32_t keycode;
|
|
const char* text;
|
|
bool composing;
|
|
} ghostty_input_key_s;
|
|
|
|
typedef enum {
|
|
GHOSTTY_TRIGGER_TRANSLATED,
|
|
GHOSTTY_TRIGGER_PHYSICAL,
|
|
GHOSTTY_TRIGGER_UNICODE,
|
|
} ghostty_input_trigger_tag_e;
|
|
|
|
typedef union {
|
|
ghostty_input_key_e translated;
|
|
ghostty_input_key_e physical;
|
|
uint32_t unicode;
|
|
} ghostty_input_trigger_key_u;
|
|
|
|
typedef struct {
|
|
ghostty_input_trigger_tag_e tag;
|
|
ghostty_input_trigger_key_u key;
|
|
ghostty_input_mods_e mods;
|
|
} ghostty_input_trigger_s;
|
|
|
|
typedef enum {
|
|
GHOSTTY_BUILD_MODE_DEBUG,
|
|
GHOSTTY_BUILD_MODE_RELEASE_SAFE,
|
|
GHOSTTY_BUILD_MODE_RELEASE_FAST,
|
|
GHOSTTY_BUILD_MODE_RELEASE_SMALL,
|
|
} ghostty_build_mode_e;
|
|
|
|
typedef struct {
|
|
ghostty_build_mode_e build_mode;
|
|
const char* version;
|
|
uintptr_t version_len;
|
|
} ghostty_info_s;
|
|
|
|
typedef struct {
|
|
const char* message;
|
|
} ghostty_diagnostic_s;
|
|
|
|
typedef struct {
|
|
double tl_px_x;
|
|
double tl_px_y;
|
|
uint32_t offset_start;
|
|
uint32_t offset_len;
|
|
} ghostty_selection_s;
|
|
|
|
typedef struct {
|
|
void* nsview;
|
|
} ghostty_platform_macos_s;
|
|
|
|
typedef struct {
|
|
void* uiview;
|
|
} ghostty_platform_ios_s;
|
|
|
|
typedef union {
|
|
ghostty_platform_macos_s macos;
|
|
ghostty_platform_ios_s ios;
|
|
} ghostty_platform_u;
|
|
|
|
typedef struct {
|
|
ghostty_platform_e platform_tag;
|
|
ghostty_platform_u platform;
|
|
void* userdata;
|
|
double scale_factor;
|
|
float font_size;
|
|
const char* working_directory;
|
|
const char* command;
|
|
} ghostty_surface_config_s;
|
|
|
|
typedef struct {
|
|
uint16_t columns;
|
|
uint16_t rows;
|
|
uint32_t width_px;
|
|
uint32_t height_px;
|
|
uint32_t cell_width_px;
|
|
uint32_t cell_height_px;
|
|
} ghostty_surface_size_s;
|
|
|
|
// Config types
|
|
|
|
// config.Color
|
|
typedef struct {
|
|
uint8_t r;
|
|
uint8_t g;
|
|
uint8_t b;
|
|
} ghostty_config_color_s;
|
|
|
|
// config.ColorList
|
|
typedef struct {
|
|
const ghostty_config_color_s* colors;
|
|
size_t len;
|
|
} ghostty_config_color_list_s;
|
|
|
|
// apprt.Target.Key
|
|
typedef enum {
|
|
GHOSTTY_TARGET_APP,
|
|
GHOSTTY_TARGET_SURFACE,
|
|
} ghostty_target_tag_e;
|
|
|
|
typedef union {
|
|
ghostty_surface_t surface;
|
|
} ghostty_target_u;
|
|
|
|
typedef struct {
|
|
ghostty_target_tag_e tag;
|
|
ghostty_target_u target;
|
|
} ghostty_target_s;
|
|
|
|
// apprt.action.SplitDirection
|
|
typedef enum {
|
|
GHOSTTY_SPLIT_DIRECTION_RIGHT,
|
|
GHOSTTY_SPLIT_DIRECTION_DOWN,
|
|
GHOSTTY_SPLIT_DIRECTION_LEFT,
|
|
GHOSTTY_SPLIT_DIRECTION_UP,
|
|
} ghostty_action_split_direction_e;
|
|
|
|
// apprt.action.GotoSplit
|
|
typedef enum {
|
|
GHOSTTY_GOTO_SPLIT_PREVIOUS,
|
|
GHOSTTY_GOTO_SPLIT_NEXT,
|
|
GHOSTTY_GOTO_SPLIT_UP,
|
|
GHOSTTY_GOTO_SPLIT_LEFT,
|
|
GHOSTTY_GOTO_SPLIT_DOWN,
|
|
GHOSTTY_GOTO_SPLIT_RIGHT,
|
|
} ghostty_action_goto_split_e;
|
|
|
|
// apprt.action.ResizeSplit.Direction
|
|
typedef enum {
|
|
GHOSTTY_RESIZE_SPLIT_UP,
|
|
GHOSTTY_RESIZE_SPLIT_DOWN,
|
|
GHOSTTY_RESIZE_SPLIT_LEFT,
|
|
GHOSTTY_RESIZE_SPLIT_RIGHT,
|
|
} ghostty_action_resize_split_direction_e;
|
|
|
|
// apprt.action.ResizeSplit
|
|
typedef struct {
|
|
uint16_t amount;
|
|
ghostty_action_resize_split_direction_e direction;
|
|
} ghostty_action_resize_split_s;
|
|
|
|
// apprt.action.MoveTab
|
|
typedef struct {
|
|
ssize_t amount;
|
|
} ghostty_action_move_tab_s;
|
|
|
|
// apprt.action.GotoTab
|
|
typedef enum {
|
|
GHOSTTY_GOTO_TAB_PREVIOUS = -1,
|
|
GHOSTTY_GOTO_TAB_NEXT = -2,
|
|
GHOSTTY_GOTO_TAB_LAST = -3,
|
|
} ghostty_action_goto_tab_e;
|
|
|
|
// apprt.action.Fullscreen
|
|
typedef enum {
|
|
GHOSTTY_FULLSCREEN_NATIVE,
|
|
GHOSTTY_FULLSCREEN_NON_NATIVE,
|
|
GHOSTTY_FULLSCREEN_NON_NATIVE_VISIBLE_MENU,
|
|
GHOSTTY_FULLSCREEN_NON_NATIVE_PADDED_NOTCH,
|
|
} ghostty_action_fullscreen_e;
|
|
|
|
// apprt.action.SecureInput
|
|
typedef enum {
|
|
GHOSTTY_SECURE_INPUT_ON,
|
|
GHOSTTY_SECURE_INPUT_OFF,
|
|
GHOSTTY_SECURE_INPUT_TOGGLE,
|
|
} ghostty_action_secure_input_e;
|
|
|
|
// apprt.action.Inspector
|
|
typedef enum {
|
|
GHOSTTY_INSPECTOR_TOGGLE,
|
|
GHOSTTY_INSPECTOR_SHOW,
|
|
GHOSTTY_INSPECTOR_HIDE,
|
|
} ghostty_action_inspector_e;
|
|
|
|
// apprt.action.QuitTimer
|
|
typedef enum {
|
|
GHOSTTY_QUIT_TIMER_START,
|
|
GHOSTTY_QUIT_TIMER_STOP,
|
|
} ghostty_action_quit_timer_e;
|
|
|
|
// apprt.action.DesktopNotification.C
|
|
typedef struct {
|
|
const char* title;
|
|
const char* body;
|
|
} ghostty_action_desktop_notification_s;
|
|
|
|
// apprt.action.SetTitle.C
|
|
typedef struct {
|
|
const char* title;
|
|
} ghostty_action_set_title_s;
|
|
|
|
// apprt.action.Pwd.C
|
|
typedef struct {
|
|
const char* pwd;
|
|
} ghostty_action_pwd_s;
|
|
|
|
// terminal.MouseShape
|
|
typedef enum {
|
|
GHOSTTY_MOUSE_SHAPE_DEFAULT,
|
|
GHOSTTY_MOUSE_SHAPE_CONTEXT_MENU,
|
|
GHOSTTY_MOUSE_SHAPE_HELP,
|
|
GHOSTTY_MOUSE_SHAPE_POINTER,
|
|
GHOSTTY_MOUSE_SHAPE_PROGRESS,
|
|
GHOSTTY_MOUSE_SHAPE_WAIT,
|
|
GHOSTTY_MOUSE_SHAPE_CELL,
|
|
GHOSTTY_MOUSE_SHAPE_CROSSHAIR,
|
|
GHOSTTY_MOUSE_SHAPE_TEXT,
|
|
GHOSTTY_MOUSE_SHAPE_VERTICAL_TEXT,
|
|
GHOSTTY_MOUSE_SHAPE_ALIAS,
|
|
GHOSTTY_MOUSE_SHAPE_COPY,
|
|
GHOSTTY_MOUSE_SHAPE_MOVE,
|
|
GHOSTTY_MOUSE_SHAPE_NO_DROP,
|
|
GHOSTTY_MOUSE_SHAPE_NOT_ALLOWED,
|
|
GHOSTTY_MOUSE_SHAPE_GRAB,
|
|
GHOSTTY_MOUSE_SHAPE_GRABBING,
|
|
GHOSTTY_MOUSE_SHAPE_ALL_SCROLL,
|
|
GHOSTTY_MOUSE_SHAPE_COL_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_ROW_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_N_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_E_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_S_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_W_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_NE_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_NW_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_SE_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_SW_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_EW_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_NS_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_NESW_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_NWSE_RESIZE,
|
|
GHOSTTY_MOUSE_SHAPE_ZOOM_IN,
|
|
GHOSTTY_MOUSE_SHAPE_ZOOM_OUT,
|
|
} ghostty_action_mouse_shape_e;
|
|
|
|
// apprt.action.MouseVisibility
|
|
typedef enum {
|
|
GHOSTTY_MOUSE_VISIBLE,
|
|
GHOSTTY_MOUSE_HIDDEN,
|
|
} ghostty_action_mouse_visibility_e;
|
|
|
|
// apprt.action.MouseOverLink
|
|
typedef struct {
|
|
const char* url;
|
|
size_t len;
|
|
} ghostty_action_mouse_over_link_s;
|
|
|
|
// apprt.action.SizeLimit
|
|
typedef struct {
|
|
uint32_t min_width;
|
|
uint32_t min_height;
|
|
uint32_t max_width;
|
|
uint32_t max_height;
|
|
} ghostty_action_size_limit_s;
|
|
|
|
// apprt.action.InitialSize
|
|
typedef struct {
|
|
uint32_t width;
|
|
uint32_t height;
|
|
} ghostty_action_initial_size_s;
|
|
|
|
// apprt.action.CellSize
|
|
typedef struct {
|
|
uint32_t width;
|
|
uint32_t height;
|
|
} ghostty_action_cell_size_s;
|
|
|
|
// renderer.Health
|
|
typedef enum {
|
|
GHOSTTY_RENDERER_HEALTH_OK,
|
|
GHOSTTY_RENDERER_HEALTH_UNHEALTHY,
|
|
} ghostty_action_renderer_health_e;
|
|
|
|
// apprt.action.KeySequence
|
|
typedef struct {
|
|
bool active;
|
|
ghostty_input_trigger_s trigger;
|
|
} ghostty_action_key_sequence_s;
|
|
|
|
// apprt.action.ColorKind
|
|
typedef enum {
|
|
GHOSTTY_ACTION_COLOR_KIND_FOREGROUND = -1,
|
|
GHOSTTY_ACTION_COLOR_KIND_BACKGROUND = -2,
|
|
GHOSTTY_ACTION_COLOR_KIND_CURSOR = -3,
|
|
} ghostty_action_color_kind_e;
|
|
|
|
// apprt.action.ColorChange
|
|
typedef struct {
|
|
ghostty_action_color_kind_e kind;
|
|
uint8_t r;
|
|
uint8_t g;
|
|
uint8_t b;
|
|
} ghostty_action_color_change_s;
|
|
|
|
// apprt.action.ConfigChange
|
|
typedef struct {
|
|
ghostty_config_t config;
|
|
} ghostty_action_config_change_s;
|
|
|
|
// apprt.action.ReloadConfig
|
|
typedef struct {
|
|
bool soft;
|
|
} ghostty_action_reload_config_s;
|
|
|
|
// apprt.action.OpenUrlKind
|
|
typedef enum {
|
|
GHOSTTY_ACTION_OPEN_URL_KIND_TEXT,
|
|
GHOSTTY_ACTION_OPEN_URL_KIND_UNKNOWN,
|
|
} ghostty_action_open_url_kind_e;
|
|
|
|
// apprt.action.OpenUrl.C
|
|
typedef struct {
|
|
ghostty_action_open_url_kind_e kind;
|
|
const char* url;
|
|
uintptr_t len;
|
|
} ghostty_action_open_url_s;
|
|
|
|
// apprt.Action.Key
|
|
typedef enum {
|
|
GHOSTTY_ACTION_QUIT,
|
|
GHOSTTY_ACTION_NEW_WINDOW,
|
|
GHOSTTY_ACTION_NEW_TAB,
|
|
GHOSTTY_ACTION_CLOSE_TAB,
|
|
GHOSTTY_ACTION_NEW_SPLIT,
|
|
GHOSTTY_ACTION_CLOSE_ALL_WINDOWS,
|
|
GHOSTTY_ACTION_TOGGLE_MAXIMIZE,
|
|
GHOSTTY_ACTION_TOGGLE_FULLSCREEN,
|
|
GHOSTTY_ACTION_TOGGLE_TAB_OVERVIEW,
|
|
GHOSTTY_ACTION_TOGGLE_WINDOW_DECORATIONS,
|
|
GHOSTTY_ACTION_TOGGLE_QUICK_TERMINAL,
|
|
GHOSTTY_ACTION_TOGGLE_VISIBILITY,
|
|
GHOSTTY_ACTION_MOVE_TAB,
|
|
GHOSTTY_ACTION_GOTO_TAB,
|
|
GHOSTTY_ACTION_GOTO_SPLIT,
|
|
GHOSTTY_ACTION_RESIZE_SPLIT,
|
|
GHOSTTY_ACTION_EQUALIZE_SPLITS,
|
|
GHOSTTY_ACTION_TOGGLE_SPLIT_ZOOM,
|
|
GHOSTTY_ACTION_PRESENT_TERMINAL,
|
|
GHOSTTY_ACTION_SIZE_LIMIT,
|
|
GHOSTTY_ACTION_RESET_WINDOW_SIZE,
|
|
GHOSTTY_ACTION_INITIAL_SIZE,
|
|
GHOSTTY_ACTION_CELL_SIZE,
|
|
GHOSTTY_ACTION_INSPECTOR,
|
|
GHOSTTY_ACTION_RENDER_INSPECTOR,
|
|
GHOSTTY_ACTION_DESKTOP_NOTIFICATION,
|
|
GHOSTTY_ACTION_SET_TITLE,
|
|
GHOSTTY_ACTION_PROMPT_TITLE,
|
|
GHOSTTY_ACTION_PWD,
|
|
GHOSTTY_ACTION_MOUSE_SHAPE,
|
|
GHOSTTY_ACTION_MOUSE_VISIBILITY,
|
|
GHOSTTY_ACTION_MOUSE_OVER_LINK,
|
|
GHOSTTY_ACTION_RENDERER_HEALTH,
|
|
GHOSTTY_ACTION_OPEN_CONFIG,
|
|
GHOSTTY_ACTION_QUIT_TIMER,
|
|
GHOSTTY_ACTION_SECURE_INPUT,
|
|
GHOSTTY_ACTION_KEY_SEQUENCE,
|
|
GHOSTTY_ACTION_COLOR_CHANGE,
|
|
GHOSTTY_ACTION_RELOAD_CONFIG,
|
|
GHOSTTY_ACTION_CONFIG_CHANGE,
|
|
GHOSTTY_ACTION_CLOSE_WINDOW,
|
|
GHOSTTY_ACTION_OPEN_URL,
|
|
} ghostty_action_tag_e;
|
|
|
|
typedef union {
|
|
ghostty_action_split_direction_e new_split;
|
|
ghostty_action_fullscreen_e toggle_fullscreen;
|
|
ghostty_action_move_tab_s move_tab;
|
|
ghostty_action_goto_tab_e goto_tab;
|
|
ghostty_action_goto_split_e goto_split;
|
|
ghostty_action_resize_split_s resize_split;
|
|
ghostty_action_size_limit_s size_limit;
|
|
ghostty_action_initial_size_s initial_size;
|
|
ghostty_action_cell_size_s cell_size;
|
|
ghostty_action_inspector_e inspector;
|
|
ghostty_action_desktop_notification_s desktop_notification;
|
|
ghostty_action_set_title_s set_title;
|
|
ghostty_action_pwd_s pwd;
|
|
ghostty_action_mouse_shape_e mouse_shape;
|
|
ghostty_action_mouse_visibility_e mouse_visibility;
|
|
ghostty_action_mouse_over_link_s mouse_over_link;
|
|
ghostty_action_renderer_health_e renderer_health;
|
|
ghostty_action_quit_timer_e quit_timer;
|
|
ghostty_action_secure_input_e secure_input;
|
|
ghostty_action_key_sequence_s key_sequence;
|
|
ghostty_action_color_change_s color_change;
|
|
ghostty_action_reload_config_s reload_config;
|
|
ghostty_action_config_change_s config_change;
|
|
ghostty_action_open_url_s open_url;
|
|
} ghostty_action_u;
|
|
|
|
typedef struct {
|
|
ghostty_action_tag_e tag;
|
|
ghostty_action_u action;
|
|
} ghostty_action_s;
|
|
|
|
typedef void (*ghostty_runtime_wakeup_cb)(void*);
|
|
typedef void (*ghostty_runtime_read_clipboard_cb)(void*,
|
|
ghostty_clipboard_e,
|
|
void*);
|
|
typedef void (*ghostty_runtime_confirm_read_clipboard_cb)(
|
|
void*,
|
|
const char*,
|
|
void*,
|
|
ghostty_clipboard_request_e);
|
|
typedef void (*ghostty_runtime_write_clipboard_cb)(void*,
|
|
const char*,
|
|
ghostty_clipboard_e,
|
|
bool);
|
|
typedef void (*ghostty_runtime_close_surface_cb)(void*, bool);
|
|
typedef bool (*ghostty_runtime_action_cb)(ghostty_app_t,
|
|
ghostty_target_s,
|
|
ghostty_action_s);
|
|
|
|
typedef struct {
|
|
void* userdata;
|
|
bool supports_selection_clipboard;
|
|
ghostty_runtime_wakeup_cb wakeup_cb;
|
|
ghostty_runtime_action_cb action_cb;
|
|
ghostty_runtime_read_clipboard_cb read_clipboard_cb;
|
|
ghostty_runtime_confirm_read_clipboard_cb confirm_read_clipboard_cb;
|
|
ghostty_runtime_write_clipboard_cb write_clipboard_cb;
|
|
ghostty_runtime_close_surface_cb close_surface_cb;
|
|
} ghostty_runtime_config_s;
|
|
|
|
//-------------------------------------------------------------------
|
|
// Published API
|
|
|
|
int ghostty_init(void);
|
|
void ghostty_cli_main(uintptr_t, char**);
|
|
ghostty_info_s ghostty_info(void);
|
|
const char* ghostty_translate(const char*);
|
|
|
|
ghostty_config_t ghostty_config_new();
|
|
void ghostty_config_free(ghostty_config_t);
|
|
ghostty_config_t ghostty_config_clone(ghostty_config_t);
|
|
void ghostty_config_load_cli_args(ghostty_config_t);
|
|
void ghostty_config_load_default_files(ghostty_config_t);
|
|
void ghostty_config_load_recursive_files(ghostty_config_t);
|
|
void ghostty_config_finalize(ghostty_config_t);
|
|
bool ghostty_config_get(ghostty_config_t, void*, const char*, uintptr_t);
|
|
ghostty_input_trigger_s ghostty_config_trigger(ghostty_config_t,
|
|
const char*,
|
|
uintptr_t);
|
|
uint32_t ghostty_config_diagnostics_count(ghostty_config_t);
|
|
ghostty_diagnostic_s ghostty_config_get_diagnostic(ghostty_config_t, uint32_t);
|
|
void ghostty_config_open();
|
|
|
|
ghostty_app_t ghostty_app_new(const ghostty_runtime_config_s*,
|
|
ghostty_config_t);
|
|
void ghostty_app_free(ghostty_app_t);
|
|
void ghostty_app_tick(ghostty_app_t);
|
|
void* ghostty_app_userdata(ghostty_app_t);
|
|
void ghostty_app_set_focus(ghostty_app_t, bool);
|
|
bool ghostty_app_key(ghostty_app_t, ghostty_input_key_s);
|
|
bool ghostty_app_key_is_binding(ghostty_app_t, ghostty_input_key_s);
|
|
void ghostty_app_keyboard_changed(ghostty_app_t);
|
|
void ghostty_app_open_config(ghostty_app_t);
|
|
void ghostty_app_update_config(ghostty_app_t, ghostty_config_t);
|
|
bool ghostty_app_needs_confirm_quit(ghostty_app_t);
|
|
bool ghostty_app_has_global_keybinds(ghostty_app_t);
|
|
void ghostty_app_set_color_scheme(ghostty_app_t, ghostty_color_scheme_e);
|
|
|
|
ghostty_surface_config_s ghostty_surface_config_new();
|
|
|
|
ghostty_surface_t ghostty_surface_new(ghostty_app_t, ghostty_surface_config_s*);
|
|
void ghostty_surface_free(ghostty_surface_t);
|
|
void* ghostty_surface_userdata(ghostty_surface_t);
|
|
ghostty_app_t ghostty_surface_app(ghostty_surface_t);
|
|
ghostty_surface_config_s ghostty_surface_inherited_config(ghostty_surface_t);
|
|
void ghostty_surface_update_config(ghostty_surface_t, ghostty_config_t);
|
|
bool ghostty_surface_needs_confirm_quit(ghostty_surface_t);
|
|
void ghostty_surface_refresh(ghostty_surface_t);
|
|
void ghostty_surface_draw(ghostty_surface_t);
|
|
void ghostty_surface_set_content_scale(ghostty_surface_t, double, double);
|
|
void ghostty_surface_set_focus(ghostty_surface_t, bool);
|
|
void ghostty_surface_set_occlusion(ghostty_surface_t, bool);
|
|
void ghostty_surface_set_size(ghostty_surface_t, uint32_t, uint32_t);
|
|
ghostty_surface_size_s ghostty_surface_size(ghostty_surface_t);
|
|
void ghostty_surface_set_color_scheme(ghostty_surface_t,
|
|
ghostty_color_scheme_e);
|
|
ghostty_input_mods_e ghostty_surface_key_translation_mods(ghostty_surface_t,
|
|
ghostty_input_mods_e);
|
|
bool ghostty_surface_key(ghostty_surface_t, ghostty_input_key_s);
|
|
bool ghostty_surface_key_is_binding(ghostty_surface_t, ghostty_input_key_s);
|
|
void ghostty_surface_text(ghostty_surface_t, const char*, uintptr_t);
|
|
bool ghostty_surface_mouse_captured(ghostty_surface_t);
|
|
bool ghostty_surface_mouse_button(ghostty_surface_t,
|
|
ghostty_input_mouse_state_e,
|
|
ghostty_input_mouse_button_e,
|
|
ghostty_input_mods_e);
|
|
void ghostty_surface_mouse_pos(ghostty_surface_t,
|
|
double,
|
|
double,
|
|
ghostty_input_mods_e);
|
|
void ghostty_surface_mouse_scroll(ghostty_surface_t,
|
|
double,
|
|
double,
|
|
ghostty_input_scroll_mods_t);
|
|
void ghostty_surface_mouse_pressure(ghostty_surface_t, uint32_t, double);
|
|
void ghostty_surface_ime_point(ghostty_surface_t, double*, double*);
|
|
void ghostty_surface_request_close(ghostty_surface_t);
|
|
void ghostty_surface_split(ghostty_surface_t, ghostty_action_split_direction_e);
|
|
void ghostty_surface_split_focus(ghostty_surface_t,
|
|
ghostty_action_goto_split_e);
|
|
void ghostty_surface_split_resize(ghostty_surface_t,
|
|
ghostty_action_resize_split_direction_e,
|
|
uint16_t);
|
|
void ghostty_surface_split_equalize(ghostty_surface_t);
|
|
bool ghostty_surface_binding_action(ghostty_surface_t, const char*, uintptr_t);
|
|
void ghostty_surface_complete_clipboard_request(ghostty_surface_t,
|
|
const char*,
|
|
void*,
|
|
bool);
|
|
bool ghostty_surface_has_selection(ghostty_surface_t);
|
|
uintptr_t ghostty_surface_selection(ghostty_surface_t, char*, uintptr_t);
|
|
|
|
#ifdef __APPLE__
|
|
void ghostty_surface_set_display_id(ghostty_surface_t, uint32_t);
|
|
void* ghostty_surface_quicklook_font(ghostty_surface_t);
|
|
uintptr_t ghostty_surface_quicklook_word(ghostty_surface_t,
|
|
char*,
|
|
uintptr_t,
|
|
ghostty_selection_s*);
|
|
bool ghostty_surface_selection_info(ghostty_surface_t, ghostty_selection_s*);
|
|
#endif
|
|
|
|
ghostty_inspector_t ghostty_surface_inspector(ghostty_surface_t);
|
|
void ghostty_inspector_free(ghostty_surface_t);
|
|
void ghostty_inspector_set_focus(ghostty_inspector_t, bool);
|
|
void ghostty_inspector_set_content_scale(ghostty_inspector_t, double, double);
|
|
void ghostty_inspector_set_size(ghostty_inspector_t, uint32_t, uint32_t);
|
|
void ghostty_inspector_mouse_button(ghostty_inspector_t,
|
|
ghostty_input_mouse_state_e,
|
|
ghostty_input_mouse_button_e,
|
|
ghostty_input_mods_e);
|
|
void ghostty_inspector_mouse_pos(ghostty_inspector_t, double, double);
|
|
void ghostty_inspector_mouse_scroll(ghostty_inspector_t,
|
|
double,
|
|
double,
|
|
ghostty_input_scroll_mods_t);
|
|
void ghostty_inspector_key(ghostty_inspector_t,
|
|
ghostty_input_action_e,
|
|
ghostty_input_key_e,
|
|
ghostty_input_mods_e);
|
|
void ghostty_inspector_text(ghostty_inspector_t, const char*);
|
|
|
|
#ifdef __APPLE__
|
|
bool ghostty_inspector_metal_init(ghostty_inspector_t, void*);
|
|
void ghostty_inspector_metal_render(ghostty_inspector_t, void*, void*);
|
|
bool ghostty_inspector_metal_shutdown(ghostty_inspector_t);
|
|
#endif
|
|
|
|
// APIs I'd like to get rid of eventually but are still needed for now.
|
|
// Don't use these unless you know what you're doing.
|
|
void ghostty_set_window_background_blur(ghostty_app_t, void*);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* GHOSTTY_H */
|