mirror of
https://github.com/ghostty-org/ghostty.git
synced 2026-04-18 21:40:29 +00:00
Change split, focus, close, activate window, select tab, close tab, and close window commands to accept their target object as a direct parameter instead of a named parameter. This produces natural AppleScript syntax: activate window (window 1) close tab (tab 1 of window 1) split (terminal 1) direction right instead of the awkward redundant form: activate window window (window 1) close tab tab (tab 1 of window 1) split terminal (terminal 1) direction right The implementation moves command logic from NSScriptCommand subclasses into responds-to handler methods on ScriptTerminal, ScriptWindow, and ScriptTab, which is the standard Cocoa Scripting pattern for commands whose direct parameter is an application class.
313 lines
16 KiB
XML
313 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE dictionary SYSTEM "file://localhost/System/Library/DTDs/sdef.dtd">
|
|
|
|
<dictionary title="Ghostty Scripting Dictionary">
|
|
<suite name="Ghostty Suite" code="Ghst" description="Ghostty scripting support.">
|
|
<class name="application" code="capp" description="The Ghostty application.">
|
|
<cocoa class="NSApplication"/>
|
|
<property name="name" code="pnam" type="text" access="r" description="The name of the application."/>
|
|
<property name="frontmost" code="pisf" type="boolean" access="r" description="Is this the active application?">
|
|
<cocoa key="isActive"/>
|
|
</property>
|
|
<property name="version" code="vers" type="text" access="r" description="The version number of the application."/>
|
|
<responds-to command="perform action">
|
|
<cocoa method="handlePerformActionScriptCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="new window">
|
|
<cocoa method="handleNewWindowScriptCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="new tab">
|
|
<cocoa method="handleNewTabScriptCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="new surface configuration">
|
|
<cocoa method="handleNewSurfaceConfigurationScriptCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="quit">
|
|
<cocoa method="handleQuitScriptCommand:"/>
|
|
</responds-to>
|
|
|
|
<element type="window" access="r">
|
|
<cocoa key="scriptWindows"/>
|
|
</element>
|
|
|
|
<element type="terminal" access="r">
|
|
<cocoa key="terminals"/>
|
|
</element>
|
|
</class>
|
|
|
|
<class name="window" code="Gwnd" plural="windows" description="A Ghostty window containing one or more tabs.">
|
|
<cocoa class="GhosttyScriptWindow"/>
|
|
<property name="id" code="ID " type="text" access="r" description="Stable ID for this window."/>
|
|
<property name="name" code="pnam" type="text" access="r" description="The title of the window.">
|
|
<cocoa key="title"/>
|
|
</property>
|
|
<property name="selected tab" code="GWsT" type="tab" access="r" description="The selected tab in this window.">
|
|
<cocoa key="selectedTab"/>
|
|
</property>
|
|
<responds-to command="activate window">
|
|
<cocoa method="handleActivateWindowCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="close window">
|
|
<cocoa method="handleCloseWindowCommand:"/>
|
|
</responds-to>
|
|
<element type="tab" access="r">
|
|
<cocoa key="tabs"/>
|
|
</element>
|
|
<element type="terminal" access="r">
|
|
<cocoa key="terminals"/>
|
|
</element>
|
|
</class>
|
|
|
|
<class name="tab" code="Gtab" plural="tabs" description="A tab within a Ghostty window.">
|
|
<cocoa class="GhosttyScriptTab"/>
|
|
<property name="id" code="ID " type="text" access="r" description="Stable ID for this tab."/>
|
|
<property name="name" code="pnam" type="text" access="r" description="The title of the tab.">
|
|
<cocoa key="title"/>
|
|
</property>
|
|
<property name="index" code="pidx" type="integer" access="r" description="1-based index of this tab in its window."/>
|
|
<property name="selected" code="GTsl" type="boolean" access="r" description="Whether this tab is selected in its window."/>
|
|
<responds-to command="select tab">
|
|
<cocoa method="handleSelectTabCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="close tab">
|
|
<cocoa method="handleCloseTabCommand:"/>
|
|
</responds-to>
|
|
<element type="terminal" access="r">
|
|
<cocoa key="terminals"/>
|
|
</element>
|
|
</class>
|
|
|
|
<class name="terminal" code="Gtrm" plural="terminals" description="An individual terminal surface.">
|
|
<cocoa class="GhosttyScriptTerminal"/>
|
|
<property name="id" code="ID " type="text" access="r" description="Stable ID for this terminal surface."/>
|
|
<property name="name" code="pnam" type="text" access="r" description="Current terminal title.">
|
|
<cocoa key="title"/>
|
|
</property>
|
|
<property name="working directory" code="Gwdr" type="text" access="r" description="Current working directory for the terminal process."/>
|
|
<responds-to command="split">
|
|
<cocoa method="handleSplitCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="focus">
|
|
<cocoa method="handleFocusCommand:"/>
|
|
</responds-to>
|
|
<responds-to command="close">
|
|
<cocoa method="handleCloseCommand:"/>
|
|
</responds-to>
|
|
</class>
|
|
|
|
<record-type name="surface configuration" code="GScf" description="Reusable settings applied when creating a terminal surface.">
|
|
<property name="font size" code="GScF" type="real" description="Font size in points.">
|
|
<cocoa key="fontSize"/>
|
|
</property>
|
|
<property name="initial working directory" code="GScD" type="text" description="Initial working directory for the terminal process.">
|
|
<cocoa key="workingDirectory"/>
|
|
</property>
|
|
<property name="command" code="GScC" type="text" description="Command to execute instead of the configured shell.">
|
|
<cocoa key="command"/>
|
|
</property>
|
|
<property name="initial input" code="GScI" type="text" description="Input sent to the terminal after launch.">
|
|
<cocoa key="initialInput"/>
|
|
</property>
|
|
<property name="wait after command" code="GScW" type="boolean" description="Keep the terminal open after command exit.">
|
|
<cocoa key="waitAfterCommand"/>
|
|
</property>
|
|
<property name="environment variables" code="GScE" description="Environment variables in KEY=VALUE format.">
|
|
<type type="text" list="yes"/>
|
|
<cocoa key="environmentVariables"/>
|
|
</property>
|
|
</record-type>
|
|
|
|
<enumeration name="split direction" code="GSpD" description="Direction for a new split.">
|
|
<enumerator name="right" code="GSrt" description="Split to the right."/>
|
|
<enumerator name="left" code="GSlf" description="Split to the left."/>
|
|
<enumerator name="down" code="GSdn" description="Split downward."/>
|
|
<enumerator name="up" code="GSup" description="Split upward."/>
|
|
</enumeration>
|
|
|
|
<enumeration name="input action" code="GIAc" description="Whether an input is pressed or released.">
|
|
<enumerator name="press" code="GIpr" description="Press."/>
|
|
<enumerator name="release" code="GIrl" description="Release."/>
|
|
</enumeration>
|
|
|
|
<enumeration name="mouse button" code="GMBt" description="A mouse button.">
|
|
<enumerator name="left button" code="GMlf" description="Left mouse button."/>
|
|
<enumerator name="right button" code="GMrt" description="Right mouse button."/>
|
|
<enumerator name="middle button" code="GMmd" description="Middle mouse button."/>
|
|
</enumeration>
|
|
|
|
<enumeration name="scroll momentum" code="GSMo" description="Momentum phase for inertial scrolling.">
|
|
<enumerator name="none" code="SMno" description="No momentum."/>
|
|
<enumerator name="began" code="SMbg" description="Momentum began."/>
|
|
<enumerator name="changed" code="SMch" description="Momentum changed."/>
|
|
<enumerator name="ended" code="SMen" description="Momentum ended."/>
|
|
<enumerator name="cancelled" code="SMcn" description="Momentum cancelled."/>
|
|
<enumerator name="may begin" code="SMmb" description="Momentum may begin."/>
|
|
<enumerator name="stationary" code="SMst" description="Stationary."/>
|
|
</enumeration>
|
|
|
|
<command name="perform action" code="GhstPfAc" description="Perform a Ghostty action string on a terminal.">
|
|
<direct-parameter type="text" description="The Ghostty action string."/>
|
|
<parameter name="on" code="GonT" type="terminal" description="Target terminal."/>
|
|
<result type="boolean" description="True when the action was performed."/>
|
|
</command>
|
|
|
|
<command name="new surface configuration" code="GhstNSCf" description="Create a reusable surface configuration object.">
|
|
<parameter name="from" code="GScS" type="surface configuration" optional="yes" description="Surface configuration to copy.">
|
|
<cocoa key="configuration"/>
|
|
</parameter>
|
|
<result type="surface configuration" description="The newly created surface configuration."/>
|
|
</command>
|
|
|
|
<command name="new window" code="GhstNWin" description="Create a new Ghostty window.">
|
|
<parameter name="with configuration" code="GNwS" type="surface configuration" optional="yes" description="Base surface configuration for the initial terminal.">
|
|
<cocoa key="configuration"/>
|
|
</parameter>
|
|
<result type="window" description="The newly created window."/>
|
|
</command>
|
|
|
|
<command name="new tab" code="GhstNTab" description="Create a new Ghostty tab.">
|
|
<parameter name="in" code="GNtW" type="window" optional="yes" description="Target window for the new tab.">
|
|
<cocoa key="window"/>
|
|
</parameter>
|
|
<parameter name="with configuration" code="GNtS" type="surface configuration" optional="yes" description="Base surface configuration for the initial terminal.">
|
|
<cocoa key="configuration"/>
|
|
</parameter>
|
|
<result type="tab" description="The newly created tab."/>
|
|
</command>
|
|
|
|
<command name="split" code="GhstSplt" description="Split a terminal in the given direction.">
|
|
<direct-parameter type="specifier" description="The terminal to split."/>
|
|
<parameter name="direction" code="GSpd" type="split direction" description="The direction to split.">
|
|
<cocoa key="direction"/>
|
|
</parameter>
|
|
<parameter name="with configuration" code="GSpS" type="surface configuration" optional="yes" description="Base surface configuration for the new split terminal.">
|
|
<cocoa key="configuration"/>
|
|
</parameter>
|
|
<result type="terminal" description="The newly created terminal."/>
|
|
</command>
|
|
|
|
<command name="focus" code="GhstFcus" description="Focus a terminal, bringing its window to the front.">
|
|
<direct-parameter type="specifier" description="The terminal to focus."/>
|
|
</command>
|
|
|
|
<command name="close" code="GhstClos" description="Close a terminal.">
|
|
<direct-parameter type="specifier" description="The terminal to close."/>
|
|
</command>
|
|
|
|
<command name="activate window" code="GhstAcWn" description="Activate a Ghostty window, bringing it to the front.">
|
|
<direct-parameter type="specifier" description="The window to activate."/>
|
|
</command>
|
|
|
|
<command name="select tab" code="GhstSlTb" description="Select a tab in its window.">
|
|
<direct-parameter type="specifier" description="The tab to select."/>
|
|
</command>
|
|
|
|
<command name="close tab" code="GhstClTb" description="Close a tab.">
|
|
<direct-parameter type="specifier" description="The tab to close."/>
|
|
</command>
|
|
|
|
<command name="close window" code="GhstClWn" description="Close a window.">
|
|
<direct-parameter type="specifier" description="The window to close."/>
|
|
</command>
|
|
|
|
<command name="input text" code="GhstInTx" description="Input text to a terminal as if it was pasted.">
|
|
<cocoa class="GhosttyScriptInputTextCommand"/>
|
|
<direct-parameter type="text" description="The text to input."/>
|
|
<parameter name="to" code="GItT" type="terminal" description="The terminal to input text to.">
|
|
<cocoa key="terminal"/>
|
|
</parameter>
|
|
</command>
|
|
|
|
<command name="send key" code="GhstSKey" description="Send a keyboard event to a terminal.">
|
|
<cocoa class="GhosttyScriptKeyEventCommand"/>
|
|
<direct-parameter type="text" description="The key name (e.g. "enter", "a", "space")."/>
|
|
<parameter name="action" code="GKeA" type="input action" optional="yes" description="Press or release (default: press).">
|
|
<cocoa key="action"/>
|
|
</parameter>
|
|
<parameter name="modifiers" code="GKeM" type="text" optional="yes" description="Comma-separated modifier keys: shift, control, option, command.">
|
|
<cocoa key="modifiers"/>
|
|
</parameter>
|
|
<parameter name="to" code="GKeT" type="terminal" description="The terminal to send the key event to.">
|
|
<cocoa key="terminal"/>
|
|
</parameter>
|
|
</command>
|
|
|
|
<command name="send mouse button" code="GhstSMBt" description="Send a mouse button event to a terminal.">
|
|
<cocoa class="GhosttyScriptMouseButtonCommand"/>
|
|
<direct-parameter type="mouse button" description="The mouse button."/>
|
|
<parameter name="action" code="GMbA" type="input action" optional="yes" description="Press or release (default: press).">
|
|
<cocoa key="action"/>
|
|
</parameter>
|
|
<parameter name="modifiers" code="GMbM" type="text" optional="yes" description="Comma-separated modifier keys: shift, control, option, command.">
|
|
<cocoa key="modifiers"/>
|
|
</parameter>
|
|
<parameter name="to" code="GMbT" type="terminal" description="The terminal to send the event to.">
|
|
<cocoa key="terminal"/>
|
|
</parameter>
|
|
</command>
|
|
|
|
<command name="send mouse position" code="GhstSMPs" description="Send a mouse position event to a terminal.">
|
|
<cocoa class="GhosttyScriptMousePosCommand"/>
|
|
<parameter name="x" code="GMpX" type="real" description="Horizontal position in pixels.">
|
|
<cocoa key="x"/>
|
|
</parameter>
|
|
<parameter name="y" code="GMpY" type="real" description="Vertical position in pixels.">
|
|
<cocoa key="y"/>
|
|
</parameter>
|
|
<parameter name="modifiers" code="GMpM" type="text" optional="yes" description="Comma-separated modifier keys: shift, control, option, command.">
|
|
<cocoa key="modifiers"/>
|
|
</parameter>
|
|
<parameter name="to" code="GMpT" type="terminal" description="The terminal to send the event to.">
|
|
<cocoa key="terminal"/>
|
|
</parameter>
|
|
</command>
|
|
|
|
<command name="send mouse scroll" code="GhstSMSc" description="Send a mouse scroll event to a terminal.">
|
|
<cocoa class="GhosttyScriptMouseScrollCommand"/>
|
|
<parameter name="x" code="GMsX" type="real" description="Horizontal scroll delta.">
|
|
<cocoa key="x"/>
|
|
</parameter>
|
|
<parameter name="y" code="GMsY" type="real" description="Vertical scroll delta.">
|
|
<cocoa key="y"/>
|
|
</parameter>
|
|
<parameter name="precision" code="GMsP" type="boolean" optional="yes" description="High-precision scroll (e.g. trackpad). Default: false.">
|
|
<cocoa key="precision"/>
|
|
</parameter>
|
|
<parameter name="momentum" code="GMsM" type="scroll momentum" optional="yes" description="Momentum phase for inertial scrolling. Default: none.">
|
|
<cocoa key="momentum"/>
|
|
</parameter>
|
|
<parameter name="to" code="GMsT" type="terminal" description="The terminal to send the event to.">
|
|
<cocoa key="terminal"/>
|
|
</parameter>
|
|
</command>
|
|
</suite>
|
|
|
|
<!--
|
|
The Standard Suite definition below is copied from Apple's
|
|
/System/Library/ScriptingDefinitions/CocoaStandard.sdef, trimmed to only
|
|
include what we need.
|
|
-->
|
|
<suite name="Standard Suite" code="????" description="Common classes and commands for all applications.">
|
|
<command name="count" code="corecnte" description="Return the number of elements of a particular class within an object.">
|
|
<cocoa class="NSCountCommand"/>
|
|
<access-group identifier="*"/>
|
|
<direct-parameter type="specifier" requires-access="r" description="The objects to be counted."/>
|
|
<parameter name="each" code="kocl" type="type" optional="yes" description="The class of objects to be counted." hidden="yes">
|
|
<cocoa key="ObjectClass"/>
|
|
</parameter>
|
|
<result type="integer" description="The count."/>
|
|
</command>
|
|
|
|
<command name="exists" code="coredoex" description="Verify that an object exists.">
|
|
<cocoa class="NSExistsCommand"/>
|
|
<access-group identifier="*"/>
|
|
<direct-parameter type="any" requires-access="r" description="The object(s) to check."/>
|
|
<result type="boolean" description="Did the object(s) exist?"/>
|
|
</command>
|
|
|
|
<command name="quit" code="aevtquit" description="Quit the application.">
|
|
<cocoa class="NSQuitCommand"/>
|
|
</command>
|
|
</suite>
|
|
</dictionary>
|