feat: port GTK version fallbacks, helpgen, bench modes, CLI leftovers
- apprt-gtk: Ghostty's runtime+build-time version gating (at_least) with cargo features adw_1_3/adw_1_4/adw_1_5/gtk_4_16 (default on) and the fallbacks for older libraries: MessageDialog (adw < 1.5), clipboard dialog without SwitchRow, pre-Banner debug warning and child-exited widgets, the old about dialog, GTK 4.16 CSS error source bytes. The minimum stays GTK 4.14 / libadwaita 1.5 (Ghostty's floor). The root build links with -z lazy so version-gated symbols don't keep older libraries from loading. - ghostty-helpgen (port of helpgen.zig) generates CLI action help and keybinding action docs from doc comments at build time, replacing the checked-in help/*.txt; +help and +list-actions --docs stay byte-identical to Ghostty 1.3.1. - ghostty-bench: libc wcwidth mode and separate simd/table and uucode/table code paths like Zig. - ghostty-cli: Windows branches of edit-config, list-colors, list-keybinds and boo; ssh-cache DiskCache flock locking (no-op on Windows, as in Zig) with an exclusivity test. Test Plan: - cargo test --workspace - diff <(cargo run -q -- +list-actions --docs) \ <(ghostty +list-actions --docs)
This commit is contained in:
1 parent
020beb2d75
commit
4787565397
51 files changed
+2426
-1621
No files matched your search
@@ -406,553 +406,553 @@ impl Action {
|
||||
/// is available through [`Action::docs`] / [`ActionKey::docs`].
|
||||
#[derive(Debug, Clone, PartialEq)]
|
||||
pub enum Action {
|
||||
// Ignore this key combination.
|
||||
//
|
||||
// Ghostty will not process this combination nor forward it to the child
|
||||
// process within the terminal, but it may still be processed by the OS or
|
||||
// other applications.
|
||||
/// Ignore this key combination.
|
||||
///
|
||||
/// Ghostty will not process this combination nor forward it to the child
|
||||
/// process within the terminal, but it may still be processed by the OS or
|
||||
/// other applications.
|
||||
Ignore,
|
||||
// Unbind a previously bound key binding.
|
||||
//
|
||||
// This cannot unbind bindings that were not bound by Ghostty or the user
|
||||
// (e.g. bindings set by the OS or some other application).
|
||||
/// Unbind a previously bound key binding.
|
||||
///
|
||||
/// This cannot unbind bindings that were not bound by Ghostty or the user
|
||||
/// (e.g. bindings set by the OS or some other application).
|
||||
Unbind,
|
||||
// Send a CSI sequence.
|
||||
//
|
||||
// The value should be the CSI sequence without the CSI header (`ESC [` or
|
||||
// `\x1b[`).
|
||||
//
|
||||
// For example, `csi:0m` can be sent to reset all styles of the current text.
|
||||
/// Send a CSI sequence.
|
||||
///
|
||||
/// The value should be the CSI sequence without the CSI header (`ESC [` or
|
||||
/// `\x1b[`).
|
||||
///
|
||||
/// For example, `csi:0m` can be sent to reset all styles of the current text.
|
||||
Csi(String),
|
||||
// Send an `ESC` sequence.
|
||||
/// Send an `ESC` sequence.
|
||||
Esc(String),
|
||||
// Send the specified text.
|
||||
//
|
||||
// Uses Zig string literal syntax. This is currently not validated.
|
||||
// If the text is invalid (i.e. contains an invalid escape sequence),
|
||||
// the error will currently only show up in logs.
|
||||
/// Send the specified text.
|
||||
///
|
||||
/// Uses Zig string literal syntax. This is currently not validated.
|
||||
/// If the text is invalid (i.e. contains an invalid escape sequence),
|
||||
/// the error will currently only show up in logs.
|
||||
Text(String),
|
||||
// Send data to the pty depending on whether cursor key mode is enabled
|
||||
// (`application`) or disabled (`normal`).
|
||||
/// Send data to the pty depending on whether cursor key mode is enabled
|
||||
/// (`application`) or disabled (`normal`).
|
||||
CursorKey(CursorKey),
|
||||
// Reset the terminal.
|
||||
//
|
||||
// This can fix a lot of issues when a running program puts the terminal
|
||||
// into a broken state, equivalent to running the `reset` command.
|
||||
//
|
||||
// If you do this while in a TUI program such as vim, this may break
|
||||
// the program. If you do this while in a shell, you may have to press
|
||||
// enter after to get a new prompt.
|
||||
/// Reset the terminal.
|
||||
///
|
||||
/// This can fix a lot of issues when a running program puts the terminal
|
||||
/// into a broken state, equivalent to running the `reset` command.
|
||||
///
|
||||
/// If you do this while in a TUI program such as vim, this may break
|
||||
/// the program. If you do this while in a shell, you may have to press
|
||||
/// enter after to get a new prompt.
|
||||
Reset,
|
||||
// Copy the selected text to the clipboard.
|
||||
/// Copy the selected text to the clipboard.
|
||||
CopyToClipboard(CopyToClipboard),
|
||||
// Paste the contents of the default clipboard.
|
||||
/// Paste the contents of the default clipboard.
|
||||
PasteFromClipboard,
|
||||
// Paste the contents of the selection clipboard.
|
||||
/// Paste the contents of the selection clipboard.
|
||||
PasteFromSelection,
|
||||
// If there is a URL under the cursor, copy it to the default clipboard.
|
||||
/// If there is a URL under the cursor, copy it to the default clipboard.
|
||||
CopyUrlToClipboard,
|
||||
// Copy the terminal title to the clipboard. If the terminal title is not
|
||||
// set or is empty this has no effect.
|
||||
/// Copy the terminal title to the clipboard. If the terminal title is not
|
||||
/// set or is empty this has no effect.
|
||||
CopyTitleToClipboard,
|
||||
// Increase the font size by the specified amount in points (pt).
|
||||
//
|
||||
// For example, `increase_font_size:1.5` will increase the font size
|
||||
// by 1.5 points.
|
||||
/// Increase the font size by the specified amount in points (pt).
|
||||
///
|
||||
/// For example, `increase_font_size:1.5` will increase the font size
|
||||
/// by 1.5 points.
|
||||
IncreaseFontSize(f32),
|
||||
// Decrease the font size by the specified amount in points (pt).
|
||||
//
|
||||
// For example, `decrease_font_size:1.5` will decrease the font size
|
||||
// by 1.5 points.
|
||||
/// Decrease the font size by the specified amount in points (pt).
|
||||
///
|
||||
/// For example, `decrease_font_size:1.5` will decrease the font size
|
||||
/// by 1.5 points.
|
||||
DecreaseFontSize(f32),
|
||||
// Reset the font size to the original configured size.
|
||||
/// Reset the font size to the original configured size.
|
||||
ResetFontSize,
|
||||
// Set the font size to the specified size in points (pt).
|
||||
//
|
||||
// For example, `set_font_size:14.5` will set the font size
|
||||
// to 14.5 points.
|
||||
/// Set the font size to the specified size in points (pt).
|
||||
///
|
||||
/// For example, `set_font_size:14.5` will set the font size
|
||||
/// to 14.5 points.
|
||||
SetFontSize(f32),
|
||||
// Start a search for the given text. If the text is empty, then
|
||||
// the search is canceled. A canceled search will not disable any GUI
|
||||
// elements showing search. For that, the explicit end_search binding
|
||||
// should be used.
|
||||
//
|
||||
// If a previous search is active, it is replaced.
|
||||
/// Start a search for the given text. If the text is empty, then
|
||||
/// the search is canceled. A canceled search will not disable any GUI
|
||||
/// elements showing search. For that, the explicit end_search binding
|
||||
/// should be used.
|
||||
///
|
||||
/// If a previous search is active, it is replaced.
|
||||
Search(String),
|
||||
// Start a search for the current text selection. If there is no
|
||||
// selection, this does nothing. If a search is already active, this
|
||||
// changes the search terms.
|
||||
/// Start a search for the current text selection. If there is no
|
||||
/// selection, this does nothing. If a search is already active, this
|
||||
/// changes the search terms.
|
||||
SearchSelection,
|
||||
// Navigate the search results. If there is no active search, this
|
||||
// is not performed.
|
||||
/// Navigate the search results. If there is no active search, this
|
||||
/// is not performed.
|
||||
NavigateSearch(NavigateSearch),
|
||||
// Start a search if it isn't started already. This doesn't set any
|
||||
// search terms, but opens the UI for searching.
|
||||
/// Start a search if it isn't started already. This doesn't set any
|
||||
/// search terms, but opens the UI for searching.
|
||||
StartSearch,
|
||||
// End the current search if any and hide any GUI elements.
|
||||
/// End the current search if any and hide any GUI elements.
|
||||
EndSearch,
|
||||
// Clear the screen and all scrollback.
|
||||
/// Clear the screen and all scrollback.
|
||||
ClearScreen,
|
||||
// Select all text on the screen.
|
||||
/// Select all text on the screen.
|
||||
SelectAll,
|
||||
// Scroll to the top of the screen.
|
||||
/// Scroll to the top of the screen.
|
||||
ScrollToTop,
|
||||
// Scroll to the bottom of the screen.
|
||||
/// Scroll to the bottom of the screen.
|
||||
ScrollToBottom,
|
||||
// Scroll to the selected text.
|
||||
/// Scroll to the selected text.
|
||||
ScrollToSelection,
|
||||
// Scroll to the given absolute row in the screen with 0 being
|
||||
// the first row.
|
||||
/// Scroll to the given absolute row in the screen with 0 being
|
||||
/// the first row.
|
||||
ScrollToRow(usize),
|
||||
// Scroll the screen up by one page.
|
||||
/// Scroll the screen up by one page.
|
||||
ScrollPageUp,
|
||||
// Scroll the screen down by one page.
|
||||
/// Scroll the screen down by one page.
|
||||
ScrollPageDown,
|
||||
// Scroll the screen by the specified fraction of a page.
|
||||
//
|
||||
// Positive values scroll downwards, and negative values scroll upwards.
|
||||
//
|
||||
// For example, `scroll_page_fractional:0.5` would scroll the screen
|
||||
// downwards by half a page, while `scroll_page_fractional:-1.5` would
|
||||
// scroll it upwards by one and a half pages.
|
||||
/// Scroll the screen by the specified fraction of a page.
|
||||
///
|
||||
/// Positive values scroll downwards, and negative values scroll upwards.
|
||||
///
|
||||
/// For example, `scroll_page_fractional:0.5` would scroll the screen
|
||||
/// downwards by half a page, while `scroll_page_fractional:-1.5` would
|
||||
/// scroll it upwards by one and a half pages.
|
||||
ScrollPageFractional(f32),
|
||||
// Scroll the screen by the specified amount of lines.
|
||||
//
|
||||
// Positive values scroll downwards, and negative values scroll upwards.
|
||||
//
|
||||
// For example, `scroll_page_lines:3` would scroll the screen downwards
|
||||
// by 3 lines, while `scroll_page_lines:-10` would scroll it upwards by 10
|
||||
// lines.
|
||||
/// Scroll the screen by the specified amount of lines.
|
||||
///
|
||||
/// Positive values scroll downwards, and negative values scroll upwards.
|
||||
///
|
||||
/// For example, `scroll_page_lines:3` would scroll the screen downwards
|
||||
/// by 3 lines, while `scroll_page_lines:-10` would scroll it upwards by 10
|
||||
/// lines.
|
||||
ScrollPageLines(i16),
|
||||
// Adjust the current selection in the given direction or position,
|
||||
// relative to the cursor.
|
||||
//
|
||||
// WARNING: This does not create a new selection, and does nothing when
|
||||
// there currently isn't one.
|
||||
//
|
||||
// Valid arguments are:
|
||||
//
|
||||
// - `left`, `right`
|
||||
//
|
||||
// Adjust the selection one cell to the left or right respectively.
|
||||
//
|
||||
// - `up`, `down`
|
||||
//
|
||||
// Adjust the selection one line upwards or downwards respectively.
|
||||
//
|
||||
// - `page_up`, `page_down`
|
||||
//
|
||||
// Adjust the selection one page upwards or downwards respectively.
|
||||
//
|
||||
// - `home`, `end`
|
||||
//
|
||||
// Adjust the selection to the top-left or the bottom-right corner
|
||||
// of the screen respectively.
|
||||
//
|
||||
// - `beginning_of_line`, `end_of_line`
|
||||
//
|
||||
// Adjust the selection to the beginning or the end of the line
|
||||
// respectively.
|
||||
//
|
||||
/// Adjust the current selection in the given direction or position,
|
||||
/// relative to the cursor.
|
||||
///
|
||||
/// WARNING: This does not create a new selection, and does nothing when
|
||||
/// there currently isn't one.
|
||||
///
|
||||
/// Valid arguments are:
|
||||
///
|
||||
/// - `left`, `right`
|
||||
///
|
||||
/// Adjust the selection one cell to the left or right respectively.
|
||||
///
|
||||
/// - `up`, `down`
|
||||
///
|
||||
/// Adjust the selection one line upwards or downwards respectively.
|
||||
///
|
||||
/// - `page_up`, `page_down`
|
||||
///
|
||||
/// Adjust the selection one page upwards or downwards respectively.
|
||||
///
|
||||
/// - `home`, `end`
|
||||
///
|
||||
/// Adjust the selection to the top-left or the bottom-right corner
|
||||
/// of the screen respectively.
|
||||
///
|
||||
/// - `beginning_of_line`, `end_of_line`
|
||||
///
|
||||
/// Adjust the selection to the beginning or the end of the line
|
||||
/// respectively.
|
||||
///
|
||||
AdjustSelection(AdjustSelection),
|
||||
// Jump the viewport forward or back by the given number of prompts.
|
||||
//
|
||||
// Requires shell integration.
|
||||
//
|
||||
// Positive values scroll downwards, and negative values scroll upwards.
|
||||
/// Jump the viewport forward or back by the given number of prompts.
|
||||
///
|
||||
/// Requires shell integration.
|
||||
///
|
||||
/// Positive values scroll downwards, and negative values scroll upwards.
|
||||
JumpToPrompt(i16),
|
||||
// Write the entire scrollback into a temporary file with the specified
|
||||
// action. The action determines what to do with the filepath.
|
||||
//
|
||||
// Valid actions are:
|
||||
//
|
||||
// - `copy`
|
||||
//
|
||||
// Copy the file path into the clipboard.
|
||||
//
|
||||
// - `paste`
|
||||
//
|
||||
// Paste the file path into the terminal.
|
||||
//
|
||||
// - `open`
|
||||
//
|
||||
// Open the file in the default OS editor for text files.
|
||||
//
|
||||
// The default OS editor is determined by using `open` on macOS
|
||||
// and `xdg-open` on Linux.
|
||||
//
|
||||
/// Write the entire scrollback into a temporary file with the specified
|
||||
/// action. The action determines what to do with the filepath.
|
||||
///
|
||||
/// Valid actions are:
|
||||
///
|
||||
/// - `copy`
|
||||
///
|
||||
/// Copy the file path into the clipboard.
|
||||
///
|
||||
/// - `paste`
|
||||
///
|
||||
/// Paste the file path into the terminal.
|
||||
///
|
||||
/// - `open`
|
||||
///
|
||||
/// Open the file in the default OS editor for text files.
|
||||
///
|
||||
/// The default OS editor is determined by using `open` on macOS
|
||||
/// and `xdg-open` on Linux.
|
||||
///
|
||||
WriteScrollbackFile(WriteScreen),
|
||||
// Write the contents of the screen into a temporary file with the
|
||||
// specified action.
|
||||
//
|
||||
// See `write_scrollback_file` for possible actions.
|
||||
/// Write the contents of the screen into a temporary file with the
|
||||
/// specified action.
|
||||
///
|
||||
/// See `write_scrollback_file` for possible actions.
|
||||
WriteScreenFile(WriteScreen),
|
||||
// Write the currently selected text into a temporary file with the
|
||||
// specified action.
|
||||
//
|
||||
// See `write_scrollback_file` for possible actions.
|
||||
//
|
||||
// Does nothing when no text is selected.
|
||||
/// Write the currently selected text into a temporary file with the
|
||||
/// specified action.
|
||||
///
|
||||
/// See `write_scrollback_file` for possible actions.
|
||||
///
|
||||
/// Does nothing when no text is selected.
|
||||
WriteSelectionFile(WriteScreen),
|
||||
// Open a new window.
|
||||
//
|
||||
// If the application isn't currently focused,
|
||||
// this will bring it to the front.
|
||||
/// Open a new window.
|
||||
///
|
||||
/// If the application isn't currently focused,
|
||||
/// this will bring it to the front.
|
||||
NewWindow,
|
||||
// Open a new tab.
|
||||
/// Open a new tab.
|
||||
NewTab,
|
||||
// Go to the previous tab.
|
||||
/// Go to the previous tab.
|
||||
PreviousTab,
|
||||
// Go to the next tab.
|
||||
/// Go to the next tab.
|
||||
NextTab,
|
||||
// Go to the last tab.
|
||||
/// Go to the last tab.
|
||||
LastTab,
|
||||
// Go to the tab with the specific index, starting from 1.
|
||||
//
|
||||
// If the tab number is higher than the number of tabs,
|
||||
// this will go to the last tab.
|
||||
/// Go to the tab with the specific index, starting from 1.
|
||||
///
|
||||
/// If the tab number is higher than the number of tabs,
|
||||
/// this will go to the last tab.
|
||||
GotoTab(usize),
|
||||
// Moves a tab by a relative offset.
|
||||
//
|
||||
// Positive values move the tab forwards, and negative values move it
|
||||
// backwards. If the new position is out of bounds, it is wrapped around
|
||||
// cyclically within the tab list.
|
||||
//
|
||||
// For example, `move_tab:1` moves the tab one position forwards, and if
|
||||
// it was already the last tab in the list, it wraps around and becomes
|
||||
// the first tab in the list. Likewise, `move_tab:-1` moves the tab one
|
||||
// position backwards, and if it was the first tab, then it will become
|
||||
// the last tab.
|
||||
/// Moves a tab by a relative offset.
|
||||
///
|
||||
/// Positive values move the tab forwards, and negative values move it
|
||||
/// backwards. If the new position is out of bounds, it is wrapped around
|
||||
/// cyclically within the tab list.
|
||||
///
|
||||
/// For example, `move_tab:1` moves the tab one position forwards, and if
|
||||
/// it was already the last tab in the list, it wraps around and becomes
|
||||
/// the first tab in the list. Likewise, `move_tab:-1` moves the tab one
|
||||
/// position backwards, and if it was the first tab, then it will become
|
||||
/// the last tab.
|
||||
MoveTab(isize),
|
||||
// Toggle the tab overview.
|
||||
//
|
||||
// This is only supported on Linux and when the system's libadwaita
|
||||
// version is 1.4 or newer. The current libadwaita version can be
|
||||
// found by running `ghostty +version`.
|
||||
/// Toggle the tab overview.
|
||||
///
|
||||
/// This is only supported on Linux and when the system's libadwaita
|
||||
/// version is 1.4 or newer. The current libadwaita version can be
|
||||
/// found by running `ghostty +version`.
|
||||
ToggleTabOverview,
|
||||
// Change the title of the current focused surface via a pop-up prompt.
|
||||
/// Change the title of the current focused surface via a pop-up prompt.
|
||||
PromptSurfaceTitle,
|
||||
// Change the title of the current tab via a pop-up prompt. The
|
||||
// title set via this prompt overrides any title set by the terminal
|
||||
// and persists across focus changes within the tab.
|
||||
/// Change the title of the current tab via a pop-up prompt. The
|
||||
/// title set via this prompt overrides any title set by the terminal
|
||||
/// and persists across focus changes within the tab.
|
||||
PromptTabTitle,
|
||||
// Set the title for the current focused surface.
|
||||
//
|
||||
// If the title is empty, the surface title is reset to an empty title.
|
||||
/// Set the title for the current focused surface.
|
||||
///
|
||||
/// If the title is empty, the surface title is reset to an empty title.
|
||||
SetSurfaceTitle(String),
|
||||
// Set the title for the current focused tab.
|
||||
//
|
||||
// If the title is empty, the tab title override is cleared.
|
||||
/// Set the title for the current focused tab.
|
||||
///
|
||||
/// If the title is empty, the tab title override is cleared.
|
||||
SetTabTitle(String),
|
||||
// Create a new split in the specified direction.
|
||||
//
|
||||
// Valid arguments:
|
||||
//
|
||||
// - `right`, `down`, `left`, `up`
|
||||
//
|
||||
// Creates a new split in the corresponding direction.
|
||||
//
|
||||
// - `auto`
|
||||
//
|
||||
// Creates a new split along the larger direction.
|
||||
// For example, if the parent split is currently wider than it is tall,
|
||||
// then a left-right split would be created, and vice versa.
|
||||
//
|
||||
/// Create a new split in the specified direction.
|
||||
///
|
||||
/// Valid arguments:
|
||||
///
|
||||
/// - `right`, `down`, `left`, `up`
|
||||
///
|
||||
/// Creates a new split in the corresponding direction.
|
||||
///
|
||||
/// - `auto`
|
||||
///
|
||||
/// Creates a new split along the larger direction.
|
||||
/// For example, if the parent split is currently wider than it is tall,
|
||||
/// then a left-right split would be created, and vice versa.
|
||||
///
|
||||
NewSplit(SplitDirection),
|
||||
// Focus on a split either in the specified direction (`right`, `down`,
|
||||
// `left` and `up`), or in the adjacent split in the order of creation
|
||||
// (`previous` and `next`).
|
||||
/// Focus on a split either in the specified direction (`right`, `down`,
|
||||
/// `left` and `up`), or in the adjacent split in the order of creation
|
||||
/// (`previous` and `next`).
|
||||
GotoSplit(SplitFocusDirection),
|
||||
// Focus on either the previous window or the next one ('previous', 'next')
|
||||
/// Focus on either the previous window or the next one ('previous', 'next')
|
||||
GotoWindow(GotoWindow),
|
||||
// Zoom in or out of the current split.
|
||||
//
|
||||
// When a split is zoomed into, it will take up the entire space in
|
||||
// the current tab, hiding other splits. The tab or tab bar would also
|
||||
// reflect this by displaying an icon indicating the zoomed state.
|
||||
/// Zoom in or out of the current split.
|
||||
///
|
||||
/// When a split is zoomed into, it will take up the entire space in
|
||||
/// the current tab, hiding other splits. The tab or tab bar would also
|
||||
/// reflect this by displaying an icon indicating the zoomed state.
|
||||
ToggleSplitZoom,
|
||||
// Toggle read-only mode for the current surface.
|
||||
//
|
||||
// When a surface is in read-only mode:
|
||||
// - No input is sent to the PTY (mouse events, key encoding)
|
||||
// - Input can still be used at the terminal level to make selections,
|
||||
// copy/paste (keybinds), scroll, etc.
|
||||
// - Warn before quit is always enabled in this state even if an active
|
||||
// process is not running
|
||||
/// Toggle read-only mode for the current surface.
|
||||
///
|
||||
/// When a surface is in read-only mode:
|
||||
/// - No input is sent to the PTY (mouse events, key encoding)
|
||||
/// - Input can still be used at the terminal level to make selections,
|
||||
/// copy/paste (keybinds), scroll, etc.
|
||||
/// - Warn before quit is always enabled in this state even if an active
|
||||
/// process is not running
|
||||
ToggleReadonly,
|
||||
// Resize the current split in the specified direction and amount in
|
||||
// pixels. The two arguments should be joined with a comma (`,`),
|
||||
// like in `resize_split:up,10`.
|
||||
/// Resize the current split in the specified direction and amount in
|
||||
/// pixels. The two arguments should be joined with a comma (`,`),
|
||||
/// like in `resize_split:up,10`.
|
||||
ResizeSplit(SplitResizeParameter),
|
||||
// Equalize the size of all splits in the current window.
|
||||
/// Equalize the size of all splits in the current window.
|
||||
EqualizeSplits,
|
||||
// Reset the window to the default size. The "default size" is the
|
||||
// size that a new window would be created with. This has no effect
|
||||
// if the window is fullscreen.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Reset the window to the default size. The "default size" is the
|
||||
/// size that a new window would be created with. This has no effect
|
||||
/// if the window is fullscreen.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
ResetWindowSize,
|
||||
// Control the visibility of the terminal inspector.
|
||||
//
|
||||
// Valid arguments: `toggle`, `show`, `hide`.
|
||||
/// Control the visibility of the terminal inspector.
|
||||
///
|
||||
/// Valid arguments: `toggle`, `show`, `hide`.
|
||||
Inspector(InspectorMode),
|
||||
// Show the GTK inspector.
|
||||
//
|
||||
// Has no effect on macOS.
|
||||
/// Show the GTK inspector.
|
||||
///
|
||||
/// Has no effect on macOS.
|
||||
ShowGtkInspector,
|
||||
// Show the on-screen keyboard if one is present.
|
||||
//
|
||||
// Only implemented on Linux (GTK). On GNOME, the "Screen Keyboard"
|
||||
// accessibility feature must be turned on, which can be found under
|
||||
// Settings > Accessibility > Typing. Other platforms are as of now
|
||||
// untested.
|
||||
/// Show the on-screen keyboard if one is present.
|
||||
///
|
||||
/// Only implemented on Linux (GTK). On GNOME, the "Screen Keyboard"
|
||||
/// accessibility feature must be turned on, which can be found under
|
||||
/// Settings > Accessibility > Typing. Other platforms are as of now
|
||||
/// untested.
|
||||
ShowOnScreenKeyboard,
|
||||
// Open the configuration file in the default OS editor.
|
||||
//
|
||||
// If your default OS editor isn't configured then this will fail.
|
||||
// Currently, any failures to open the configuration will show up only in
|
||||
// the logs.
|
||||
/// Open the configuration file in the default OS editor.
|
||||
///
|
||||
/// If your default OS editor isn't configured then this will fail.
|
||||
/// Currently, any failures to open the configuration will show up only in
|
||||
/// the logs.
|
||||
OpenConfig,
|
||||
// Reload the configuration.
|
||||
//
|
||||
// The exact meaning depends on the app runtime in use, but this usually
|
||||
// involves re-reading the configuration file and applying any changes
|
||||
// Note that not all changes can be applied at runtime.
|
||||
/// Reload the configuration.
|
||||
///
|
||||
/// The exact meaning depends on the app runtime in use, but this usually
|
||||
/// involves re-reading the configuration file and applying any changes
|
||||
/// Note that not all changes can be applied at runtime.
|
||||
ReloadConfig,
|
||||
// Close the current "surface", whether that is a window, tab, split, etc.
|
||||
//
|
||||
// This might trigger a close confirmation popup, depending on the value
|
||||
// of the `confirm-close-surface` configuration setting.
|
||||
/// Close the current "surface", whether that is a window, tab, split, etc.
|
||||
///
|
||||
/// This might trigger a close confirmation popup, depending on the value
|
||||
/// of the `confirm-close-surface` configuration setting.
|
||||
CloseSurface,
|
||||
// Close the current tab and all splits therein, close all other tabs, or
|
||||
// close every tab to the right of the current one depending on the mode.
|
||||
//
|
||||
// If the mode is not specified, defaults to closing the current tab.
|
||||
//
|
||||
// This might trigger a close confirmation popup, depending on the value
|
||||
// of the `confirm-close-surface` configuration setting.
|
||||
/// Close the current tab and all splits therein, close all other tabs, or
|
||||
/// close every tab to the right of the current one depending on the mode.
|
||||
///
|
||||
/// If the mode is not specified, defaults to closing the current tab.
|
||||
///
|
||||
/// This might trigger a close confirmation popup, depending on the value
|
||||
/// of the `confirm-close-surface` configuration setting.
|
||||
CloseTab(CloseTabMode),
|
||||
// Close the current window and all tabs and splits therein.
|
||||
//
|
||||
// This might trigger a close confirmation popup, depending on the value
|
||||
// of the `confirm-close-surface` configuration setting.
|
||||
/// Close the current window and all tabs and splits therein.
|
||||
///
|
||||
/// This might trigger a close confirmation popup, depending on the value
|
||||
/// of the `confirm-close-surface` configuration setting.
|
||||
CloseWindow,
|
||||
// Close all windows.
|
||||
//
|
||||
// WARNING: This action has been deprecated and has no effect on either
|
||||
// Linux or macOS. Users are instead encouraged to use `all:close_window`
|
||||
// instead.
|
||||
/// Close all windows.
|
||||
///
|
||||
/// WARNING: This action has been deprecated and has no effect on either
|
||||
/// Linux or macOS. Users are instead encouraged to use `all:close_window`
|
||||
/// instead.
|
||||
CloseAllWindows,
|
||||
// Maximize or unmaximize the current window.
|
||||
//
|
||||
// This has no effect on macOS as it does not have the concept of
|
||||
// maximized windows.
|
||||
/// Maximize or unmaximize the current window.
|
||||
///
|
||||
/// This has no effect on macOS as it does not have the concept of
|
||||
/// maximized windows.
|
||||
ToggleMaximize,
|
||||
// Fullscreen or unfullscreen the current window.
|
||||
/// Fullscreen or unfullscreen the current window.
|
||||
ToggleFullscreen,
|
||||
// Toggle window decorations (titlebar, buttons, etc.) for the current window.
|
||||
//
|
||||
// Only implemented on Linux.
|
||||
/// Toggle window decorations (titlebar, buttons, etc.) for the current window.
|
||||
///
|
||||
/// Only implemented on Linux.
|
||||
ToggleWindowDecorations,
|
||||
// Toggle whether the terminal window should always float on top of other
|
||||
// windows even when unfocused.
|
||||
//
|
||||
// Terminal windows always start as normal (not float-on-top) windows.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Toggle whether the terminal window should always float on top of other
|
||||
/// windows even when unfocused.
|
||||
///
|
||||
/// Terminal windows always start as normal (not float-on-top) windows.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
ToggleWindowFloatOnTop,
|
||||
// Toggle secure input mode.
|
||||
//
|
||||
// This is used to prevent apps from monitoring your keyboard input
|
||||
// when entering passwords or other sensitive information.
|
||||
//
|
||||
// This applies to the entire application, not just the focused terminal.
|
||||
// You must manually untoggle it or quit Ghostty entirely to disable it.
|
||||
//
|
||||
// Only implemented on macOS, as this uses a built-in system API.
|
||||
/// Toggle secure input mode.
|
||||
///
|
||||
/// This is used to prevent apps from monitoring your keyboard input
|
||||
/// when entering passwords or other sensitive information.
|
||||
///
|
||||
/// This applies to the entire application, not just the focused terminal.
|
||||
/// You must manually untoggle it or quit Ghostty entirely to disable it.
|
||||
///
|
||||
/// Only implemented on macOS, as this uses a built-in system API.
|
||||
ToggleSecureInput,
|
||||
// Toggle mouse reporting on or off.
|
||||
//
|
||||
// When mouse reporting is disabled, mouse events will not be reported to
|
||||
// terminal applications even if they request it. This allows you to always
|
||||
// use the mouse for selection and other terminal UI interactions without
|
||||
// applications capturing mouse input.
|
||||
//
|
||||
// This can also be controlled via the `mouse-reporting` configuration
|
||||
// option.
|
||||
/// Toggle mouse reporting on or off.
|
||||
///
|
||||
/// When mouse reporting is disabled, mouse events will not be reported to
|
||||
/// terminal applications even if they request it. This allows you to always
|
||||
/// use the mouse for selection and other terminal UI interactions without
|
||||
/// applications capturing mouse input.
|
||||
///
|
||||
/// This can also be controlled via the `mouse-reporting` configuration
|
||||
/// option.
|
||||
ToggleMouseReporting,
|
||||
// Toggle the command palette.
|
||||
//
|
||||
// The command palette is a popup that lets you see what actions
|
||||
// you can perform, their associated keybindings (if any), a search bar
|
||||
// to filter the actions, and the ability to then execute the action.
|
||||
//
|
||||
// This requires libadwaita 1.5 or newer on Linux. The current libadwaita
|
||||
// version can be found by running `ghostty +version`.
|
||||
/// Toggle the command palette.
|
||||
///
|
||||
/// The command palette is a popup that lets you see what actions
|
||||
/// you can perform, their associated keybindings (if any), a search bar
|
||||
/// to filter the actions, and the ability to then execute the action.
|
||||
///
|
||||
/// This requires libadwaita 1.5 or newer on Linux. The current libadwaita
|
||||
/// version can be found by running `ghostty +version`.
|
||||
ToggleCommandPalette,
|
||||
// Toggle the quick terminal.
|
||||
//
|
||||
// The quick terminal, also known as the "Quake-style" or drop-down
|
||||
// terminal, is a terminal window that appears on demand from a keybinding,
|
||||
// often sliding in from a screen edge such as the top. This is useful for
|
||||
// quick access to a terminal without having to open a new window or tab.
|
||||
//
|
||||
// The terminal state is preserved between appearances, so showing the
|
||||
// quick terminal after it was already hidden would display the same
|
||||
// window instead of creating a new one.
|
||||
//
|
||||
// As quick terminals are often useful when other windows are currently
|
||||
// focused, they are best used with *global* keybinds. For example, one
|
||||
// can define the following key bind to toggle the quick terminal from
|
||||
// anywhere within the system by pressing `` Cmd+` ``:
|
||||
//
|
||||
// ```ini
|
||||
// keybind = global:cmd+backquote=toggle_quick_terminal
|
||||
// ```
|
||||
//
|
||||
// The quick terminal has some limitations:
|
||||
//
|
||||
// - Only one quick terminal instance can exist at a time.
|
||||
//
|
||||
// - Unlike normal terminal windows, the quick terminal will not be
|
||||
// restored when the application is restarted on systems that support
|
||||
// window restoration like macOS.
|
||||
//
|
||||
// - On Linux, the quick terminal is only supported on Wayland and not
|
||||
// X11, and only on Wayland compositors that support the `wlr-layer-shell-v1`
|
||||
// protocol. In practice, this means that only GNOME users would not be
|
||||
// able to use this feature.
|
||||
//
|
||||
// - On Linux, slide-in animations are only supported on KDE, and when
|
||||
// the "Sliding Popups" KWin plugin is enabled.
|
||||
//
|
||||
// If you do not have this plugin enabled, open System Settings > Apps
|
||||
// & Windows > Window Management > Desktop Effects, and enable the
|
||||
// plugin in the plugin list. Ghostty would then need to be restarted
|
||||
// fully for this to take effect.
|
||||
//
|
||||
// - Quick terminal tabs are only supported on Linux and not on macOS.
|
||||
// This is because tabs on macOS require a title bar.
|
||||
//
|
||||
// - On macOS, a fullscreened quick terminal will always be in non-native
|
||||
// fullscreen mode. This is a requirement due to how the quick terminal
|
||||
// is rendered.
|
||||
//
|
||||
// See the various configurations for the quick terminal in the
|
||||
// configuration file to customize its behavior.
|
||||
/// Toggle the quick terminal.
|
||||
///
|
||||
/// The quick terminal, also known as the "Quake-style" or drop-down
|
||||
/// terminal, is a terminal window that appears on demand from a keybinding,
|
||||
/// often sliding in from a screen edge such as the top. This is useful for
|
||||
/// quick access to a terminal without having to open a new window or tab.
|
||||
///
|
||||
/// The terminal state is preserved between appearances, so showing the
|
||||
/// quick terminal after it was already hidden would display the same
|
||||
/// window instead of creating a new one.
|
||||
///
|
||||
/// As quick terminals are often useful when other windows are currently
|
||||
/// focused, they are best used with *global* keybinds. For example, one
|
||||
/// can define the following key bind to toggle the quick terminal from
|
||||
/// anywhere within the system by pressing `` Cmd+` ``:
|
||||
///
|
||||
/// ```ini
|
||||
/// keybind = global:cmd+backquote=toggle_quick_terminal
|
||||
/// ```
|
||||
///
|
||||
/// The quick terminal has some limitations:
|
||||
///
|
||||
/// - Only one quick terminal instance can exist at a time.
|
||||
///
|
||||
/// - Unlike normal terminal windows, the quick terminal will not be
|
||||
/// restored when the application is restarted on systems that support
|
||||
/// window restoration like macOS.
|
||||
///
|
||||
/// - On Linux, the quick terminal is only supported on Wayland and not
|
||||
/// X11, and only on Wayland compositors that support the `wlr-layer-shell-v1`
|
||||
/// protocol. In practice, this means that only GNOME users would not be
|
||||
/// able to use this feature.
|
||||
///
|
||||
/// - On Linux, slide-in animations are only supported on KDE, and when
|
||||
/// the "Sliding Popups" KWin plugin is enabled.
|
||||
///
|
||||
/// If you do not have this plugin enabled, open System Settings > Apps
|
||||
/// & Windows > Window Management > Desktop Effects, and enable the
|
||||
/// plugin in the plugin list. Ghostty would then need to be restarted
|
||||
/// fully for this to take effect.
|
||||
///
|
||||
/// - Quick terminal tabs are only supported on Linux and not on macOS.
|
||||
/// This is because tabs on macOS require a title bar.
|
||||
///
|
||||
/// - On macOS, a fullscreened quick terminal will always be in non-native
|
||||
/// fullscreen mode. This is a requirement due to how the quick terminal
|
||||
/// is rendered.
|
||||
///
|
||||
/// See the various configurations for the quick terminal in the
|
||||
/// configuration file to customize its behavior.
|
||||
ToggleQuickTerminal,
|
||||
// Show or hide all windows. If all windows become shown, we also ensure
|
||||
// Ghostty becomes focused. When hiding all windows, focus is yielded
|
||||
// to the next application as determined by the OS.
|
||||
//
|
||||
// Note: When the focused surface is fullscreen, this method does nothing.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Show or hide all windows. If all windows become shown, we also ensure
|
||||
/// Ghostty becomes focused. When hiding all windows, focus is yielded
|
||||
/// to the next application as determined by the OS.
|
||||
///
|
||||
/// Note: When the focused surface is fullscreen, this method does nothing.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
ToggleVisibility,
|
||||
// Toggle the window background opacity between transparent and opaque.
|
||||
//
|
||||
// This does nothing when `background-opacity` is set to 1 or above.
|
||||
//
|
||||
// When `background-opacity` is less than 1, this action will either make
|
||||
// the window transparent or not depending on its current transparency state.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Toggle the window background opacity between transparent and opaque.
|
||||
///
|
||||
/// This does nothing when `background-opacity` is set to 1 or above.
|
||||
///
|
||||
/// When `background-opacity` is less than 1, this action will either make
|
||||
/// the window transparent or not depending on its current transparency state.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
ToggleBackgroundOpacity,
|
||||
// Check for updates.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Check for updates.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
CheckForUpdates,
|
||||
// Undo the last undoable action for the focused surface or terminal,
|
||||
// if possible. This can undo actions such as closing tabs or
|
||||
// windows.
|
||||
//
|
||||
// Not every action in Ghostty can be undone or redone. The list
|
||||
// of actions support undo/redo is currently limited to:
|
||||
//
|
||||
// - New window, close window
|
||||
// - New tab, close tab
|
||||
// - New split, close split
|
||||
//
|
||||
// All actions are only undoable/redoable for a limited time.
|
||||
// For example, restoring a closed split can only be done for
|
||||
// some number of seconds since the split was closed. The exact
|
||||
// amount is configured with the `undo-timeout` configuration settings.
|
||||
//
|
||||
// The undo/redo actions being limited ensures that there is
|
||||
// bounded memory usage over time, closed surfaces don't continue running
|
||||
// in the background indefinitely, and the keybinds become available
|
||||
// for terminal applications to use.
|
||||
//
|
||||
// Only implemented on macOS.
|
||||
/// Undo the last undoable action for the focused surface or terminal,
|
||||
/// if possible. This can undo actions such as closing tabs or
|
||||
/// windows.
|
||||
///
|
||||
/// Not every action in Ghostty can be undone or redone. The list
|
||||
/// of actions support undo/redo is currently limited to:
|
||||
///
|
||||
/// - New window, close window
|
||||
/// - New tab, close tab
|
||||
/// - New split, close split
|
||||
///
|
||||
/// All actions are only undoable/redoable for a limited time.
|
||||
/// For example, restoring a closed split can only be done for
|
||||
/// some number of seconds since the split was closed. The exact
|
||||
/// amount is configured with the `undo-timeout` configuration settings.
|
||||
///
|
||||
/// The undo/redo actions being limited ensures that there is
|
||||
/// bounded memory usage over time, closed surfaces don't continue running
|
||||
/// in the background indefinitely, and the keybinds become available
|
||||
/// for terminal applications to use.
|
||||
///
|
||||
/// Only implemented on macOS.
|
||||
Undo,
|
||||
// Redo the last undoable action for the focused surface or terminal,
|
||||
// if possible. See "undo" for more details on what can and cannot
|
||||
// be undone or redone.
|
||||
/// Redo the last undoable action for the focused surface or terminal,
|
||||
/// if possible. See "undo" for more details on what can and cannot
|
||||
/// be undone or redone.
|
||||
Redo,
|
||||
// End the currently active key sequence, if any, and flush the
|
||||
// keys up to this point to the terminal, excluding the key that
|
||||
// triggered this action.
|
||||
//
|
||||
// For example: `ctrl+w>escape=end_key_sequence` would encode
|
||||
// `ctrl+w` to the terminal and exit the key sequence.
|
||||
//
|
||||
// Normally, an invalid sequence will reset the key sequence and
|
||||
// flush all data including the invalid key. This action allows
|
||||
// you to flush only the prior keys, which is useful when you want
|
||||
// to bind something like a control key (`ctrl+w`) but not send
|
||||
// additional inputs.
|
||||
/// End the currently active key sequence, if any, and flush the
|
||||
/// keys up to this point to the terminal, excluding the key that
|
||||
/// triggered this action.
|
||||
///
|
||||
/// For example: `ctrl+w>escape=end_key_sequence` would encode
|
||||
/// `ctrl+w` to the terminal and exit the key sequence.
|
||||
///
|
||||
/// Normally, an invalid sequence will reset the key sequence and
|
||||
/// flush all data including the invalid key. This action allows
|
||||
/// you to flush only the prior keys, which is useful when you want
|
||||
/// to bind something like a control key (`ctrl+w`) but not send
|
||||
/// additional inputs.
|
||||
EndKeySequence,
|
||||
// Activate a named key table (see `keybind` configuration documentation).
|
||||
// The named key table will remain active until `deactivate_key_table`
|
||||
// is called. If you want a one-shot key table activation, use the
|
||||
// `activate_key_table_once` action instead.
|
||||
//
|
||||
// If the named key table does not exist, this action has no effect
|
||||
// and performable will report false.
|
||||
//
|
||||
// If the named key table is already the currently active key table,
|
||||
// this action has no effect and performable will report false.
|
||||
/// Activate a named key table (see `keybind` configuration documentation).
|
||||
/// The named key table will remain active until `deactivate_key_table`
|
||||
/// is called. If you want a one-shot key table activation, use the
|
||||
/// `activate_key_table_once` action instead.
|
||||
///
|
||||
/// If the named key table does not exist, this action has no effect
|
||||
/// and performable will report false.
|
||||
///
|
||||
/// If the named key table is already the currently active key table,
|
||||
/// this action has no effect and performable will report false.
|
||||
ActivateKeyTable(String),
|
||||
// Same as activate_key_table, but the key table will only be active
|
||||
// until the first valid keybinding from that table is used (including
|
||||
// any defined `catch_all` bindings).
|
||||
//
|
||||
// The "once" check is only done if this is the currently active
|
||||
// key table. If another key table is activated later, then this
|
||||
// table will remain active until it pops back out to being the
|
||||
// active key table.
|
||||
/// Same as activate_key_table, but the key table will only be active
|
||||
/// until the first valid keybinding from that table is used (including
|
||||
/// any defined `catch_all` bindings).
|
||||
///
|
||||
/// The "once" check is only done if this is the currently active
|
||||
/// key table. If another key table is activated later, then this
|
||||
/// table will remain active until it pops back out to being the
|
||||
/// active key table.
|
||||
ActivateKeyTableOnce(String),
|
||||
// Deactivate the currently active key table, if any. The next most
|
||||
// recently activated key table (if any) will become active again.
|
||||
// If no key table is active, this action has no effect.
|
||||
/// Deactivate the currently active key table, if any. The next most
|
||||
/// recently activated key table (if any) will become active again.
|
||||
/// If no key table is active, this action has no effect.
|
||||
DeactivateKeyTable,
|
||||
// Deactivate all active key tables. If no active key table exists,
|
||||
// this will report performable as false.
|
||||
/// Deactivate all active key tables. If no active key table exists,
|
||||
/// this will report performable as false.
|
||||
DeactivateAllKeyTables,
|
||||
// Quit Ghostty.
|
||||
/// Quit Ghostty.
|
||||
Quit,
|
||||
// Crash Ghostty in the desired thread for the focused surface.
|
||||
//
|
||||
// WARNING: This is a hard crash (panic) and data can be lost.
|
||||
//
|
||||
// The purpose of this action is to test crash handling. For some
|
||||
// users, it may be useful to test crash reporting functionality in
|
||||
// order to determine if it all works as expected.
|
||||
//
|
||||
// The value determines the crash location:
|
||||
//
|
||||
// - `main`
|
||||
//
|
||||
// Crash on the main (GUI) thread.
|
||||
//
|
||||
// - `io`
|
||||
//
|
||||
// Crash on the IO thread for the focused surface.
|
||||
//
|
||||
// - `render`
|
||||
//
|
||||
// Crash on the render thread for the focused surface.
|
||||
//
|
||||
/// Crash Ghostty in the desired thread for the focused surface.
|
||||
///
|
||||
/// WARNING: This is a hard crash (panic) and data can be lost.
|
||||
///
|
||||
/// The purpose of this action is to test crash handling. For some
|
||||
/// users, it may be useful to test crash reporting functionality in
|
||||
/// order to determine if it all works as expected.
|
||||
///
|
||||
/// The value determines the crash location:
|
||||
///
|
||||
/// - `main`
|
||||
///
|
||||
/// Crash on the main (GUI) thread.
|
||||
///
|
||||
/// - `io`
|
||||
///
|
||||
/// Crash on the IO thread for the focused surface.
|
||||
///
|
||||
/// - `render`
|
||||
///
|
||||
/// Crash on the render thread for the focused surface.
|
||||
///
|
||||
Crash(CrashThread),
|
||||
}
|
||||
|
||||
@@ -1236,729 +1236,11 @@ impl ActionKey {
|
||||
d.strip_suffix('\n').unwrap_or(d)
|
||||
}
|
||||
|
||||
/// The doc comment of the action (Zig `help_strings.KeybindAction`),
|
||||
/// The doc comment of the action (Zig `help_strings.KeybindAction`, generated
|
||||
/// at build time from the `///` docs of [`Action`] by `ghostty-helpgen`),
|
||||
/// each literal ending in one extra newline.
|
||||
pub fn docs(self) -> &'static str {
|
||||
match self {
|
||||
ActionKey::Ignore => {
|
||||
r##"Ignore this key combination.
|
||||
|
||||
Ghostty will not process this combination nor forward it to the child
|
||||
process within the terminal, but it may still be processed by the OS or
|
||||
other applications.
|
||||
"##
|
||||
}
|
||||
ActionKey::Unbind => {
|
||||
r##"Unbind a previously bound key binding.
|
||||
|
||||
This cannot unbind bindings that were not bound by Ghostty or the user
|
||||
(e.g. bindings set by the OS or some other application).
|
||||
"##
|
||||
}
|
||||
ActionKey::Csi => {
|
||||
r##"Send a CSI sequence.
|
||||
|
||||
The value should be the CSI sequence without the CSI header (`ESC [` or
|
||||
`\x1b[`).
|
||||
|
||||
For example, `csi:0m` can be sent to reset all styles of the current text.
|
||||
"##
|
||||
}
|
||||
ActionKey::Esc => {
|
||||
r##"Send an `ESC` sequence.
|
||||
"##
|
||||
}
|
||||
ActionKey::Text => {
|
||||
r##"Send the specified text.
|
||||
|
||||
Uses Zig string literal syntax. This is currently not validated.
|
||||
If the text is invalid (i.e. contains an invalid escape sequence),
|
||||
the error will currently only show up in logs.
|
||||
"##
|
||||
}
|
||||
ActionKey::CursorKey => {
|
||||
r##"Send data to the pty depending on whether cursor key mode is enabled
|
||||
(`application`) or disabled (`normal`).
|
||||
"##
|
||||
}
|
||||
ActionKey::Reset => {
|
||||
r##"Reset the terminal.
|
||||
|
||||
This can fix a lot of issues when a running program puts the terminal
|
||||
into a broken state, equivalent to running the `reset` command.
|
||||
|
||||
If you do this while in a TUI program such as vim, this may break
|
||||
the program. If you do this while in a shell, you may have to press
|
||||
enter after to get a new prompt.
|
||||
"##
|
||||
}
|
||||
ActionKey::CopyToClipboard => {
|
||||
r##"Copy the selected text to the clipboard.
|
||||
"##
|
||||
}
|
||||
ActionKey::PasteFromClipboard => {
|
||||
r##"Paste the contents of the default clipboard.
|
||||
"##
|
||||
}
|
||||
ActionKey::PasteFromSelection => {
|
||||
r##"Paste the contents of the selection clipboard.
|
||||
"##
|
||||
}
|
||||
ActionKey::CopyUrlToClipboard => {
|
||||
r##"If there is a URL under the cursor, copy it to the default clipboard.
|
||||
"##
|
||||
}
|
||||
ActionKey::CopyTitleToClipboard => {
|
||||
r##"Copy the terminal title to the clipboard. If the terminal title is not
|
||||
set or is empty this has no effect.
|
||||
"##
|
||||
}
|
||||
ActionKey::IncreaseFontSize => {
|
||||
r##"Increase the font size by the specified amount in points (pt).
|
||||
|
||||
For example, `increase_font_size:1.5` will increase the font size
|
||||
by 1.5 points.
|
||||
"##
|
||||
}
|
||||
ActionKey::DecreaseFontSize => {
|
||||
r##"Decrease the font size by the specified amount in points (pt).
|
||||
|
||||
For example, `decrease_font_size:1.5` will decrease the font size
|
||||
by 1.5 points.
|
||||
"##
|
||||
}
|
||||
ActionKey::ResetFontSize => {
|
||||
r##"Reset the font size to the original configured size.
|
||||
"##
|
||||
}
|
||||
ActionKey::SetFontSize => {
|
||||
r##"Set the font size to the specified size in points (pt).
|
||||
|
||||
For example, `set_font_size:14.5` will set the font size
|
||||
to 14.5 points.
|
||||
"##
|
||||
}
|
||||
ActionKey::Search => {
|
||||
r##"Start a search for the given text. If the text is empty, then
|
||||
the search is canceled. A canceled search will not disable any GUI
|
||||
elements showing search. For that, the explicit end_search binding
|
||||
should be used.
|
||||
|
||||
If a previous search is active, it is replaced.
|
||||
"##
|
||||
}
|
||||
ActionKey::SearchSelection => {
|
||||
r##"Start a search for the current text selection. If there is no
|
||||
selection, this does nothing. If a search is already active, this
|
||||
changes the search terms.
|
||||
"##
|
||||
}
|
||||
ActionKey::NavigateSearch => {
|
||||
r##"Navigate the search results. If there is no active search, this
|
||||
is not performed.
|
||||
"##
|
||||
}
|
||||
ActionKey::StartSearch => {
|
||||
r##"Start a search if it isn't started already. This doesn't set any
|
||||
search terms, but opens the UI for searching.
|
||||
"##
|
||||
}
|
||||
ActionKey::EndSearch => {
|
||||
r##"End the current search if any and hide any GUI elements.
|
||||
"##
|
||||
}
|
||||
ActionKey::ClearScreen => {
|
||||
r##"Clear the screen and all scrollback.
|
||||
"##
|
||||
}
|
||||
ActionKey::SelectAll => {
|
||||
r##"Select all text on the screen.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollToTop => {
|
||||
r##"Scroll to the top of the screen.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollToBottom => {
|
||||
r##"Scroll to the bottom of the screen.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollToSelection => {
|
||||
r##"Scroll to the selected text.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollToRow => {
|
||||
r##"Scroll to the given absolute row in the screen with 0 being
|
||||
the first row.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollPageUp => {
|
||||
r##"Scroll the screen up by one page.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollPageDown => {
|
||||
r##"Scroll the screen down by one page.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollPageFractional => {
|
||||
r##"Scroll the screen by the specified fraction of a page.
|
||||
|
||||
Positive values scroll downwards, and negative values scroll upwards.
|
||||
|
||||
For example, `scroll_page_fractional:0.5` would scroll the screen
|
||||
downwards by half a page, while `scroll_page_fractional:-1.5` would
|
||||
scroll it upwards by one and a half pages.
|
||||
"##
|
||||
}
|
||||
ActionKey::ScrollPageLines => {
|
||||
r##"Scroll the screen by the specified amount of lines.
|
||||
|
||||
Positive values scroll downwards, and negative values scroll upwards.
|
||||
|
||||
For example, `scroll_page_lines:3` would scroll the screen downwards
|
||||
by 3 lines, while `scroll_page_lines:-10` would scroll it upwards by 10
|
||||
lines.
|
||||
"##
|
||||
}
|
||||
ActionKey::AdjustSelection => {
|
||||
r##"Adjust the current selection in the given direction or position,
|
||||
relative to the cursor.
|
||||
|
||||
WARNING: This does not create a new selection, and does nothing when
|
||||
there currently isn't one.
|
||||
|
||||
Valid arguments are:
|
||||
|
||||
- `left`, `right`
|
||||
|
||||
Adjust the selection one cell to the left or right respectively.
|
||||
|
||||
- `up`, `down`
|
||||
|
||||
Adjust the selection one line upwards or downwards respectively.
|
||||
|
||||
- `page_up`, `page_down`
|
||||
|
||||
Adjust the selection one page upwards or downwards respectively.
|
||||
|
||||
- `home`, `end`
|
||||
|
||||
Adjust the selection to the top-left or the bottom-right corner
|
||||
of the screen respectively.
|
||||
|
||||
- `beginning_of_line`, `end_of_line`
|
||||
|
||||
Adjust the selection to the beginning or the end of the line
|
||||
respectively.
|
||||
|
||||
"##
|
||||
}
|
||||
ActionKey::JumpToPrompt => {
|
||||
r##"Jump the viewport forward or back by the given number of prompts.
|
||||
|
||||
Requires shell integration.
|
||||
|
||||
Positive values scroll downwards, and negative values scroll upwards.
|
||||
"##
|
||||
}
|
||||
ActionKey::WriteScrollbackFile => {
|
||||
r##"Write the entire scrollback into a temporary file with the specified
|
||||
action. The action determines what to do with the filepath.
|
||||
|
||||
Valid actions are:
|
||||
|
||||
- `copy`
|
||||
|
||||
Copy the file path into the clipboard.
|
||||
|
||||
- `paste`
|
||||
|
||||
Paste the file path into the terminal.
|
||||
|
||||
- `open`
|
||||
|
||||
Open the file in the default OS editor for text files.
|
||||
|
||||
The default OS editor is determined by using `open` on macOS
|
||||
and `xdg-open` on Linux.
|
||||
|
||||
"##
|
||||
}
|
||||
ActionKey::WriteScreenFile => {
|
||||
r##"Write the contents of the screen into a temporary file with the
|
||||
specified action.
|
||||
|
||||
See `write_scrollback_file` for possible actions.
|
||||
"##
|
||||
}
|
||||
ActionKey::WriteSelectionFile => {
|
||||
r##"Write the currently selected text into a temporary file with the
|
||||
specified action.
|
||||
|
||||
See `write_scrollback_file` for possible actions.
|
||||
|
||||
Does nothing when no text is selected.
|
||||
"##
|
||||
}
|
||||
ActionKey::NewWindow => {
|
||||
r##"Open a new window.
|
||||
|
||||
If the application isn't currently focused,
|
||||
this will bring it to the front.
|
||||
"##
|
||||
}
|
||||
ActionKey::NewTab => {
|
||||
r##"Open a new tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::PreviousTab => {
|
||||
r##"Go to the previous tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::NextTab => {
|
||||
r##"Go to the next tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::LastTab => {
|
||||
r##"Go to the last tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::GotoTab => {
|
||||
r##"Go to the tab with the specific index, starting from 1.
|
||||
|
||||
If the tab number is higher than the number of tabs,
|
||||
this will go to the last tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::MoveTab => {
|
||||
r##"Moves a tab by a relative offset.
|
||||
|
||||
Positive values move the tab forwards, and negative values move it
|
||||
backwards. If the new position is out of bounds, it is wrapped around
|
||||
cyclically within the tab list.
|
||||
|
||||
For example, `move_tab:1` moves the tab one position forwards, and if
|
||||
it was already the last tab in the list, it wraps around and becomes
|
||||
the first tab in the list. Likewise, `move_tab:-1` moves the tab one
|
||||
position backwards, and if it was the first tab, then it will become
|
||||
the last tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleTabOverview => {
|
||||
r##"Toggle the tab overview.
|
||||
|
||||
This is only supported on Linux and when the system's libadwaita
|
||||
version is 1.4 or newer. The current libadwaita version can be
|
||||
found by running `ghostty +version`.
|
||||
"##
|
||||
}
|
||||
ActionKey::PromptSurfaceTitle => {
|
||||
r##"Change the title of the current focused surface via a pop-up prompt.
|
||||
"##
|
||||
}
|
||||
ActionKey::PromptTabTitle => {
|
||||
r##"Change the title of the current tab via a pop-up prompt. The
|
||||
title set via this prompt overrides any title set by the terminal
|
||||
and persists across focus changes within the tab.
|
||||
"##
|
||||
}
|
||||
ActionKey::SetSurfaceTitle => {
|
||||
r##"Set the title for the current focused surface.
|
||||
|
||||
If the title is empty, the surface title is reset to an empty title.
|
||||
"##
|
||||
}
|
||||
ActionKey::SetTabTitle => {
|
||||
r##"Set the title for the current focused tab.
|
||||
|
||||
If the title is empty, the tab title override is cleared.
|
||||
"##
|
||||
}
|
||||
ActionKey::NewSplit => {
|
||||
r##"Create a new split in the specified direction.
|
||||
|
||||
Valid arguments:
|
||||
|
||||
- `right`, `down`, `left`, `up`
|
||||
|
||||
Creates a new split in the corresponding direction.
|
||||
|
||||
- `auto`
|
||||
|
||||
Creates a new split along the larger direction.
|
||||
For example, if the parent split is currently wider than it is tall,
|
||||
then a left-right split would be created, and vice versa.
|
||||
|
||||
"##
|
||||
}
|
||||
ActionKey::GotoSplit => {
|
||||
r##"Focus on a split either in the specified direction (`right`, `down`,
|
||||
`left` and `up`), or in the adjacent split in the order of creation
|
||||
(`previous` and `next`).
|
||||
"##
|
||||
}
|
||||
ActionKey::GotoWindow => {
|
||||
r##"Focus on either the previous window or the next one ('previous', 'next')
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleSplitZoom => {
|
||||
r##"Zoom in or out of the current split.
|
||||
|
||||
When a split is zoomed into, it will take up the entire space in
|
||||
the current tab, hiding other splits. The tab or tab bar would also
|
||||
reflect this by displaying an icon indicating the zoomed state.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleReadonly => {
|
||||
r##"Toggle read-only mode for the current surface.
|
||||
|
||||
When a surface is in read-only mode:
|
||||
- No input is sent to the PTY (mouse events, key encoding)
|
||||
- Input can still be used at the terminal level to make selections,
|
||||
copy/paste (keybinds), scroll, etc.
|
||||
- Warn before quit is always enabled in this state even if an active
|
||||
process is not running
|
||||
"##
|
||||
}
|
||||
ActionKey::ResizeSplit => {
|
||||
r##"Resize the current split in the specified direction and amount in
|
||||
pixels. The two arguments should be joined with a comma (`,`),
|
||||
like in `resize_split:up,10`.
|
||||
"##
|
||||
}
|
||||
ActionKey::EqualizeSplits => {
|
||||
r##"Equalize the size of all splits in the current window.
|
||||
"##
|
||||
}
|
||||
ActionKey::ResetWindowSize => {
|
||||
r##"Reset the window to the default size. The "default size" is the
|
||||
size that a new window would be created with. This has no effect
|
||||
if the window is fullscreen.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::Inspector => {
|
||||
r##"Control the visibility of the terminal inspector.
|
||||
|
||||
Valid arguments: `toggle`, `show`, `hide`.
|
||||
"##
|
||||
}
|
||||
ActionKey::ShowGtkInspector => {
|
||||
r##"Show the GTK inspector.
|
||||
|
||||
Has no effect on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::ShowOnScreenKeyboard => {
|
||||
r##"Show the on-screen keyboard if one is present.
|
||||
|
||||
Only implemented on Linux (GTK). On GNOME, the "Screen Keyboard"
|
||||
accessibility feature must be turned on, which can be found under
|
||||
Settings > Accessibility > Typing. Other platforms are as of now
|
||||
untested.
|
||||
"##
|
||||
}
|
||||
ActionKey::OpenConfig => {
|
||||
r##"Open the configuration file in the default OS editor.
|
||||
|
||||
If your default OS editor isn't configured then this will fail.
|
||||
Currently, any failures to open the configuration will show up only in
|
||||
the logs.
|
||||
"##
|
||||
}
|
||||
ActionKey::ReloadConfig => {
|
||||
r##"Reload the configuration.
|
||||
|
||||
The exact meaning depends on the app runtime in use, but this usually
|
||||
involves re-reading the configuration file and applying any changes
|
||||
Note that not all changes can be applied at runtime.
|
||||
"##
|
||||
}
|
||||
ActionKey::CloseSurface => {
|
||||
r##"Close the current "surface", whether that is a window, tab, split, etc.
|
||||
|
||||
This might trigger a close confirmation popup, depending on the value
|
||||
of the `confirm-close-surface` configuration setting.
|
||||
"##
|
||||
}
|
||||
ActionKey::CloseTab => {
|
||||
r##"Close the current tab and all splits therein, close all other tabs, or
|
||||
close every tab to the right of the current one depending on the mode.
|
||||
|
||||
If the mode is not specified, defaults to closing the current tab.
|
||||
|
||||
This might trigger a close confirmation popup, depending on the value
|
||||
of the `confirm-close-surface` configuration setting.
|
||||
"##
|
||||
}
|
||||
ActionKey::CloseWindow => {
|
||||
r##"Close the current window and all tabs and splits therein.
|
||||
|
||||
This might trigger a close confirmation popup, depending on the value
|
||||
of the `confirm-close-surface` configuration setting.
|
||||
"##
|
||||
}
|
||||
ActionKey::CloseAllWindows => {
|
||||
r##"Close all windows.
|
||||
|
||||
WARNING: This action has been deprecated and has no effect on either
|
||||
Linux or macOS. Users are instead encouraged to use `all:close_window`
|
||||
instead.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleMaximize => {
|
||||
r##"Maximize or unmaximize the current window.
|
||||
|
||||
This has no effect on macOS as it does not have the concept of
|
||||
maximized windows.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleFullscreen => {
|
||||
r##"Fullscreen or unfullscreen the current window.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleWindowDecorations => {
|
||||
r##"Toggle window decorations (titlebar, buttons, etc.) for the current window.
|
||||
|
||||
Only implemented on Linux.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleWindowFloatOnTop => {
|
||||
r##"Toggle whether the terminal window should always float on top of other
|
||||
windows even when unfocused.
|
||||
|
||||
Terminal windows always start as normal (not float-on-top) windows.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleSecureInput => {
|
||||
r##"Toggle secure input mode.
|
||||
|
||||
This is used to prevent apps from monitoring your keyboard input
|
||||
when entering passwords or other sensitive information.
|
||||
|
||||
This applies to the entire application, not just the focused terminal.
|
||||
You must manually untoggle it or quit Ghostty entirely to disable it.
|
||||
|
||||
Only implemented on macOS, as this uses a built-in system API.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleMouseReporting => {
|
||||
r##"Toggle mouse reporting on or off.
|
||||
|
||||
When mouse reporting is disabled, mouse events will not be reported to
|
||||
terminal applications even if they request it. This allows you to always
|
||||
use the mouse for selection and other terminal UI interactions without
|
||||
applications capturing mouse input.
|
||||
|
||||
This can also be controlled via the `mouse-reporting` configuration
|
||||
option.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleCommandPalette => {
|
||||
r##"Toggle the command palette.
|
||||
|
||||
The command palette is a popup that lets you see what actions
|
||||
you can perform, their associated keybindings (if any), a search bar
|
||||
to filter the actions, and the ability to then execute the action.
|
||||
|
||||
This requires libadwaita 1.5 or newer on Linux. The current libadwaita
|
||||
version can be found by running `ghostty +version`.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleQuickTerminal => {
|
||||
r##"Toggle the quick terminal.
|
||||
|
||||
The quick terminal, also known as the "Quake-style" or drop-down
|
||||
terminal, is a terminal window that appears on demand from a keybinding,
|
||||
often sliding in from a screen edge such as the top. This is useful for
|
||||
quick access to a terminal without having to open a new window or tab.
|
||||
|
||||
The terminal state is preserved between appearances, so showing the
|
||||
quick terminal after it was already hidden would display the same
|
||||
window instead of creating a new one.
|
||||
|
||||
As quick terminals are often useful when other windows are currently
|
||||
focused, they are best used with *global* keybinds. For example, one
|
||||
can define the following key bind to toggle the quick terminal from
|
||||
anywhere within the system by pressing `` Cmd+` ``:
|
||||
|
||||
```ini
|
||||
keybind = global:cmd+backquote=toggle_quick_terminal
|
||||
```
|
||||
|
||||
The quick terminal has some limitations:
|
||||
|
||||
- Only one quick terminal instance can exist at a time.
|
||||
|
||||
- Unlike normal terminal windows, the quick terminal will not be
|
||||
restored when the application is restarted on systems that support
|
||||
window restoration like macOS.
|
||||
|
||||
- On Linux, the quick terminal is only supported on Wayland and not
|
||||
X11, and only on Wayland compositors that support the `wlr-layer-shell-v1`
|
||||
protocol. In practice, this means that only GNOME users would not be
|
||||
able to use this feature.
|
||||
|
||||
- On Linux, slide-in animations are only supported on KDE, and when
|
||||
the "Sliding Popups" KWin plugin is enabled.
|
||||
|
||||
If you do not have this plugin enabled, open System Settings > Apps
|
||||
& Windows > Window Management > Desktop Effects, and enable the
|
||||
plugin in the plugin list. Ghostty would then need to be restarted
|
||||
fully for this to take effect.
|
||||
|
||||
- Quick terminal tabs are only supported on Linux and not on macOS.
|
||||
This is because tabs on macOS require a title bar.
|
||||
|
||||
- On macOS, a fullscreened quick terminal will always be in non-native
|
||||
fullscreen mode. This is a requirement due to how the quick terminal
|
||||
is rendered.
|
||||
|
||||
See the various configurations for the quick terminal in the
|
||||
configuration file to customize its behavior.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleVisibility => {
|
||||
r##"Show or hide all windows. If all windows become shown, we also ensure
|
||||
Ghostty becomes focused. When hiding all windows, focus is yielded
|
||||
to the next application as determined by the OS.
|
||||
|
||||
Note: When the focused surface is fullscreen, this method does nothing.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::ToggleBackgroundOpacity => {
|
||||
r##"Toggle the window background opacity between transparent and opaque.
|
||||
|
||||
This does nothing when `background-opacity` is set to 1 or above.
|
||||
|
||||
When `background-opacity` is less than 1, this action will either make
|
||||
the window transparent or not depending on its current transparency state.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::CheckForUpdates => {
|
||||
r##"Check for updates.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::Undo => {
|
||||
r##"Undo the last undoable action for the focused surface or terminal,
|
||||
if possible. This can undo actions such as closing tabs or
|
||||
windows.
|
||||
|
||||
Not every action in Ghostty can be undone or redone. The list
|
||||
of actions support undo/redo is currently limited to:
|
||||
|
||||
- New window, close window
|
||||
- New tab, close tab
|
||||
- New split, close split
|
||||
|
||||
All actions are only undoable/redoable for a limited time.
|
||||
For example, restoring a closed split can only be done for
|
||||
some number of seconds since the split was closed. The exact
|
||||
amount is configured with the `undo-timeout` configuration settings.
|
||||
|
||||
The undo/redo actions being limited ensures that there is
|
||||
bounded memory usage over time, closed surfaces don't continue running
|
||||
in the background indefinitely, and the keybinds become available
|
||||
for terminal applications to use.
|
||||
|
||||
Only implemented on macOS.
|
||||
"##
|
||||
}
|
||||
ActionKey::Redo => {
|
||||
r##"Redo the last undoable action for the focused surface or terminal,
|
||||
if possible. See "undo" for more details on what can and cannot
|
||||
be undone or redone.
|
||||
"##
|
||||
}
|
||||
ActionKey::EndKeySequence => {
|
||||
r##"End the currently active key sequence, if any, and flush the
|
||||
keys up to this point to the terminal, excluding the key that
|
||||
triggered this action.
|
||||
|
||||
For example: `ctrl+w>escape=end_key_sequence` would encode
|
||||
`ctrl+w` to the terminal and exit the key sequence.
|
||||
|
||||
Normally, an invalid sequence will reset the key sequence and
|
||||
flush all data including the invalid key. This action allows
|
||||
you to flush only the prior keys, which is useful when you want
|
||||
to bind something like a control key (`ctrl+w`) but not send
|
||||
additional inputs.
|
||||
"##
|
||||
}
|
||||
ActionKey::ActivateKeyTable => {
|
||||
r##"Activate a named key table (see `keybind` configuration documentation).
|
||||
The named key table will remain active until `deactivate_key_table`
|
||||
is called. If you want a one-shot key table activation, use the
|
||||
`activate_key_table_once` action instead.
|
||||
|
||||
If the named key table does not exist, this action has no effect
|
||||
and performable will report false.
|
||||
|
||||
If the named key table is already the currently active key table,
|
||||
this action has no effect and performable will report false.
|
||||
"##
|
||||
}
|
||||
ActionKey::ActivateKeyTableOnce => {
|
||||
r##"Same as activate_key_table, but the key table will only be active
|
||||
until the first valid keybinding from that table is used (including
|
||||
any defined `catch_all` bindings).
|
||||
|
||||
The "once" check is only done if this is the currently active
|
||||
key table. If another key table is activated later, then this
|
||||
table will remain active until it pops back out to being the
|
||||
active key table.
|
||||
"##
|
||||
}
|
||||
ActionKey::DeactivateKeyTable => {
|
||||
r##"Deactivate the currently active key table, if any. The next most
|
||||
recently activated key table (if any) will become active again.
|
||||
If no key table is active, this action has no effect.
|
||||
"##
|
||||
}
|
||||
ActionKey::DeactivateAllKeyTables => {
|
||||
r##"Deactivate all active key tables. If no active key table exists,
|
||||
this will report performable as false.
|
||||
"##
|
||||
}
|
||||
ActionKey::Quit => {
|
||||
r##"Quit Ghostty.
|
||||
"##
|
||||
}
|
||||
ActionKey::Crash => {
|
||||
r##"Crash Ghostty in the desired thread for the focused surface.
|
||||
|
||||
WARNING: This is a hard crash (panic) and data can be lost.
|
||||
|
||||
The purpose of this action is to test crash handling. For some
|
||||
users, it may be useful to test crash reporting functionality in
|
||||
order to determine if it all works as expected.
|
||||
|
||||
The value determines the crash location:
|
||||
|
||||
- `main`
|
||||
|
||||
Crash on the main (GUI) thread.
|
||||
|
||||
- `io`
|
||||
|
||||
Crash on the IO thread for the focused surface.
|
||||
|
||||
- `render`
|
||||
|
||||
Crash on the render thread for the focused surface.
|
||||
|
||||
"##
|
||||
}
|
||||
}
|
||||
include!(concat!(env!("OUT_DIR"), "/keybind_action_docs.rs"))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user