Inheritance #

TextEdit

- CodeEdit
Table of contents

TextEdit #

is_instantiable, Node, core, not_builtin_classes

A multiline text editor.

A multiline text editor. It also has limited facilities for editing code, such as syntax highlighting support. For more advanced facilities for editing code, see CodeEdit.

Note: Most viewport, caret, and edit methods contain a caret_index argument for caret_multiple support. The argument should be one of the following: -1 for all carets, 0 for the main caret, or greater than 0 for secondary carets in the order they were created.

Note: When holding down Alt, the vertical scroll wheel will scroll 5 times as fast as it would normally do. This also works in the Godot script editor.

Members #

var autowrap_mode = AUTOWRAP_WORD_SMART#

If wrap_mode is set to LINE_WRAPPING_BOUNDARY, sets text wrapping mode. To see how each mode behaves, see TextServer.AutowrapMode.

If true, makes the caret blink.

The interval at which the caret blinks (in seconds).

var caret_draw_when_editable_disabled: bool = false#

If true, caret will be visible when editable is disabled.

var caret_mid_grapheme: bool = false#

Allow moving caret, selecting and removing the individual composite character components.

Note: Backspace is always removing individual composite character components.

var caret_move_on_right_click: bool = true#

If true, a right-click moves the caret at the mouse position before displaying the context menu.

If false, the context menu ignores mouse location.

var caret_multiple: bool = true#

If true, multiple carets are allowed. Left-clicking with Alt adds a new caret. See add_caret and get_caret_count.

var caret_type = CARET_TYPE_LINE#

Set the type of caret to draw.

var clip_contents: bool = true#

var context_menu_enabled: bool = true#

If true, a right-click displays the context menu.

var custom_word_separators: String = ""#

The characters to consider as word delimiters if use_custom_word_separators is true. The characters should be defined without separation, for example #_!.

var deselect_on_focus_loss_enabled: bool = true#

If true, the selected text will be deselected when focus is lost.

var drag_and_drop_selection_enabled: bool = true#

If true, allow drag and drop of selected text. Text can still be dropped from other sources.

var draw_control_chars: bool = false#

If true, control characters are displayed.

var draw_spaces: bool = false#

If true, the "space" character will have a visible representation.

var draw_tabs: bool = false#

If true, the "tab" character will have a visible representation.

var editable: bool = true#

If false, existing text cannot be modified and new text cannot be added.

var emoji_menu_enabled: bool = true#

If true, "Emoji and Symbols" menu is enabled.

var empty_selection_clipboard_enabled: bool = true#

If true, copying or cutting without a selection is performed on all lines with a caret. Otherwise, copy and cut require a selection.

var focus_mode = FOCUS_ALL#

var highlight_all_occurrences: bool = false#

If true, all occurrences of the selected text will be highlighted.

var highlight_current_line: bool = false#

If true, the line containing the cursor is highlighted.

var indent_wrapped_lines: bool = false#

If true, all wrapped lines are indented to the same amount as the unwrapped line.

var language: String = ""#

Language code used for line-breaking and text shaping algorithms, if left empty current locale is used instead.

var middle_mouse_paste_enabled: bool = true#

If false, using middle mouse button to paste clipboard will be disabled.

Note: This method is only implemented on Linux.

var minimap_draw: bool = false#

If true, a minimap is shown, providing an outline of your source code. The minimap uses a fixed-width text size.

var minimap_width: int = 80#

The width, in pixels, of the minimap.

var mouse_default_cursor_shape = CURSOR_IBEAM#

var placeholder_text: String = ""#

Text shown when the TextEdit is empty. It is not the TextEdit's default value (see text).

var scroll_fit_content_height: bool = false#

If true, TextEdit will disable vertical scroll and fit minimum height to the number of visible lines. When both this property and scroll_fit_content_width are true, no scrollbars will be displayed.

var scroll_fit_content_width: bool = false#

If true, TextEdit will disable horizontal scroll and fit minimum width to the widest line in the text. When both this property and scroll_fit_content_height are true, no scrollbars will be displayed.

var scroll_horizontal: int = 0#

If there is a horizontal scrollbar, this determines the current horizontal scroll value in pixels.

var scroll_past_end_of_file: bool = false#

Allow scrolling past the last line into "virtual" space.

var scroll_smooth: bool = false#

Scroll smoothly over the text rather than jumping to the next location.

var scroll_v_scroll_speed: float = 80.0#

Sets the scroll speed with the minimap or when scroll_smooth is enabled.

var scroll_vertical: float = 0.0#

If there is a vertical scrollbar, this determines the current vertical scroll value in line numbers, starting at 0 for the top line.

var selecting_enabled: bool = true#

If true, text can be selected.

If false, text can not be selected by the user or by the select or select_all methods.

var shortcut_keys_enabled: bool = true#

If true, shortcut keys for context menu items are enabled, even if the context menu is disabled.

var structured_text_bidi_override = STRUCTURED_TEXT_DEFAULT#

Set BiDi algorithm override for the structured text.

var structured_text_bidi_override_options: Array = []#

Set additional options for BiDi override.

var syntax_highlighter: SyntaxHighlighter#

The syntax highlighter to use.

Note: A SyntaxHighlighter instance should not be used across multiple TextEdit nodes.

var text: String = ""#

String value of the TextEdit.

var text_direction = TEXT_DIRECTION_AUTO#

Base text writing direction.

var use_custom_word_separators: bool = false#

If false, using Ctrl + Left or Ctrl + Right (Cmd + Left or Cmd + Right on macOS) bindings will use the behavior of use_default_word_separators. If true, it will also stop the caret if a character within custom_word_separators is detected. Useful for subword moving. This behavior also will be applied to the behavior of text selection.

var use_default_word_separators: bool = true#

If false, using Ctrl + Left or Ctrl + Right (Cmd + Left or Cmd + Right on macOS) bindings will stop moving caret only if a space or punctuation is detected. If true, it will also stop the caret if a character is part of !"#$%&'()*+,-./:;<=>?@[\]^`{|}~, the Unicode General Punctuation table, or the Unicode CJK Punctuation table. Useful for subword moving. This behavior also will be applied to the behavior of text selection.

var virtual_keyboard_enabled: bool = true#

If true, the native virtual keyboard is shown when focused on platforms that support it.

var wrap_mode = LINE_WRAPPING_NONE#

Sets the line wrapping mode to use.

Methods #

virtual func _backspace(caret_index: int) -> void#

Override this method to define what happens when the user presses the backspace key.

virtual func _copy(caret_index: int) -> void#

Override this method to define what happens when the user performs a copy operation.

virtual func _cut(caret_index: int) -> void#

Override this method to define what happens when the user performs a cut operation.

virtual func _handle_unicode_input(caret_index: int) -> void#

Override this method to define what happens when the user types in the provided key unicode_char.

virtual func _paste(caret_index: int) -> void#

Override this method to define what happens when the user performs a paste operation.

virtual func _paste_primary_clipboard(caret_index: int) -> void#

Override this method to define what happens when the user performs a paste operation with middle mouse button.

Note: This method is only implemented on Linux.

func add_caret(column: int) -> int#

Adds a new caret at the given location. Returns the index of the new caret, or -1 if the location is invalid.

func add_caret_at_carets(below: bool) -> void#

Adds an additional caret above or below every caret. If below is true the new caret will be added below and above otherwise.

func add_gutter(at: int = -1) -> void#

Register a new gutter to this TextEdit. Use at to have a specific gutter order. A value of -1 appends the gutter to the right.

func add_selection_for_next_occurrence() -> void#

Adds a selection and a caret for the next occurrence of the current selection. If there is no active selection, selects word under caret.

func adjust_carets_after_edit(to_col: int) -> void#

This method does nothing.

func adjust_viewport_to_caret(caret_index: int = 0) -> void#

Adjust the viewport so the caret is visible.

func apply_ime() -> void#

Applies text from the Input Method Editor (IME) to each caret and closes the IME if it is open.

func backspace(caret_index: int = -1) -> void#

Called when the user presses the backspace key. Can be overridden with _backspace.

func begin_complex_operation() -> void#

Starts a multipart edit. All edits will be treated as one action until end_complex_operation is called.

func begin_multicaret_edit() -> void#

Starts an edit for multiple carets. The edit must be ended with end_multicaret_edit. Multicaret edits can be used to edit text at multiple carets and delay merging the carets until the end, so the caret indexes aren't affected immediately. begin_multicaret_edit and end_multicaret_edit can be nested, and the merge will happen at the last end_multicaret_edit.

begin_complex_operation()
begin_multicaret_edit()
for i in range(get_caret_count()):
    if multicaret_edit_ignore_caret(i):
        continue
    # Logic here.
end_multicaret_edit()
end_complex_operation()

func cancel_ime() -> void#

Closes the Input Method Editor (IME) if it is open. Any text in the IME will be lost.

func center_viewport_to_caret(caret_index: int = 0) -> void#

Centers the viewport on the line the editing caret is at. This also resets the scroll_horizontal value to 0.

func clear() -> void#

Performs a full reset of TextEdit, including undo history.

func clear_undo_history() -> void#

Clears the undo history.

func collapse_carets(inclusive: bool = false) -> void#

Collapse all carets in the given range to the from_line and from_column position.

inclusive applies to both ends.

If is_in_mulitcaret_edit is true, carets that are collapsed will be true for multicaret_edit_ignore_caret.

merge_overlapping_carets will be called if any carets were collapsed.

func copy(caret_index: int = -1) -> void#

Copies the current text selection. Can be overridden with _copy.

func cut(caret_index: int = -1) -> void#

Cut's the current selection. Can be overridden with _cut.

func delete_selection(caret_index: int = -1) -> void#

Deletes the selected text.

func deselect(caret_index: int = -1) -> void#

Deselects the current selection.

func end_action() -> void#

Marks the end of steps in the current action started with start_action.

func end_complex_operation() -> void#

Ends a multipart edit, started with begin_complex_operation. If called outside a complex operation, the current operation is pushed onto the undo/redo stack.

func end_multicaret_edit() -> void#

Ends an edit for multiple carets, that was started with begin_multicaret_edit. If this was the last end_multicaret_edit and merge_overlapping_carets was called, carets will be merged.

const func get_caret_column(caret_index: int = 0) -> int#

Returns the column the editing caret is at.

const func get_caret_count() -> int#

Returns the number of carets in this TextEdit.

const func get_caret_draw_pos(caret_index: int = 0) -> Vector2#

Returns the caret pixel draw position.

func get_caret_index_edit_order() -> PackedInt32Array#

Returns a list of caret indexes in their edit order, this done from bottom to top. Edit order refers to the way actions such as insert_text_at_caret are applied.

const func get_caret_line(caret_index: int = 0) -> int#

Returns the line the editing caret is on.

const func get_caret_wrap_index(caret_index: int = 0) -> int#

Returns the wrap index the editing caret is on.

const func get_first_non_whitespace_column(line: int) -> int#

Returns the first column containing a non-whitespace character on the given line. If there is only whitespace, returns the number of characters.

const func get_first_visible_line() -> int#

Returns the first visible line.

const func get_gutter_count() -> int#

Returns the number of gutters registered.

const func get_gutter_name(gutter: int) -> String#

Returns the name of the gutter at the given index.

const func get_gutter_type(gutter: int) -> intTextEdit.GutterType#

Returns the type of the gutter at the given index. Gutters can contain icons, text, or custom visuals. See TextEdit.GutterType for options.

const func get_gutter_width(gutter: int) -> int#

Returns the width of the gutter at the given index.

const func get_h_scroll_bar() -> HScrollBar#

Returns the HScrollBar used by TextEdit.

const func get_indent_level(line: int) -> int#

Returns the indent level of the given line. This is the number of spaces and tabs at the beginning of the line, with the tabs taking the tab size into account (see get_tab_size).

const func get_last_full_visible_line() -> int#

Returns the last visible line. Use get_last_full_visible_line_wrap_index for the wrap index.

const func get_last_full_visible_line_wrap_index() -> int#

Returns the last visible wrap index of the last visible line.

const func get_last_unhidden_line() -> int#

Returns the last unhidden line in the entire TextEdit.

const func get_line(line: int) -> String#

Returns the text of a specific line.

const func get_line_background_color(line: int) -> Color#

Returns the custom background color of the given line. If no color is set, returns Color(0, 0, 0, 0).

const func get_line_column_at_pos(clamp_column: bool = true) -> Vector2i#

Returns the line and column at the given position. In the returned vector, x is the column and y is the line.

If clamp_line is false and position is below the last line, Vector2i(-1, -1) is returned.

If clamp_column is false and position is outside the column range of the line, Vector2i(-1, -1) is returned.

const func get_line_count() -> int#

Returns the number of lines in the text.

const func get_line_gutter_icon(gutter: int) -> Texture2D#

Returns the icon currently in gutter at line. This only works when the gutter type is GUTTER_TYPE_ICON (see set_gutter_type).

const func get_line_gutter_item_color(gutter: int) -> Color#

Returns the color currently in gutter at line.

const func get_line_gutter_metadata(gutter: int) -> Variant#

Returns the metadata currently in gutter at line.

const func get_line_gutter_text(gutter: int) -> String#

Returns the text currently in gutter at line. This only works when the gutter type is GUTTER_TYPE_STRING (see set_gutter_type).

const func get_line_height() -> int#

Returns the maximum value of the line height among all lines.

Note: The return value is influenced by line_spacing and font_size. And it will not be less than 1.

const func get_line_ranges_from_carets(merge_adjacent: bool = true) -> Vector2i[]#

Returns an Array of line ranges where x is the first line and y is the last line. All lines within these ranges will have a caret on them or be part of a selection. Each line will only be part of one line range, even if it has multiple carets on it.

If a selection's end column (get_selection_to_column) is at column 0, that line will not be included. If a selection begins on the line after another selection ends and merge_adjacent is true, or they begin and end on the same line, one line range will include both selections.

const func get_line_width(wrap_index: int = -1) -> int#

Returns the width in pixels of the wrap_index on line.

const func get_line_with_ime(line: int) -> String#

Returns line text as it is currently displayed, including IME composition string.

const func get_line_wrap_count(line: int) -> int#

Returns the number of times the given line is wrapped.

const func get_line_wrap_index_at_column(column: int) -> int#

Returns the wrap index of the given column on the given line. This ranges from 0 to get_line_wrap_count.

const func get_line_wrapped_text(line: int) -> PackedStringArray#

Returns an array of Strings representing each wrapped index.

const func get_local_mouse_pos() -> Vector2#

Returns the local mouse position adjusted for the text direction.

const func get_menu() -> PopupMenu#

Returns the PopupMenu of this TextEdit. By default, this menu is displayed when right-clicking on the TextEdit.

You can add custom menu items or remove standard ones. Make sure your IDs don't conflict with the standard ones (see MenuItems). For example:

GDScript

func _ready():
    var menu = get_menu()
    # Remove all items after "Redo".
    menu.item_count = menu.get_item_index(MENU_REDO) + 1
    # Add custom items.
    menu.add_separator()
    menu.add_item("Insert Date", MENU_MAX + 1)
    # Connect callback.
    menu.id_pressed.connect(_on_item_pressed)

func _on_item_pressed(id):
    if id == MENU_MAX + 1:
        insert_text_at_caret(Time.get_date_string_from_system())

C#

public override void _Ready()
{
    var menu = GetMenu();
    // Remove all items after "Redo".
    menu.ItemCount = menu.GetItemIndex(TextEdit.MenuItems.Redo) + 1;
    // Add custom items.
    menu.AddSeparator();
    menu.AddItem("Insert Date", TextEdit.MenuItems.Max + 1);
    // Add event handler.
    menu.IdPressed += OnItemPressed;
}

public void OnItemPressed(int id)
{
    if (id == TextEdit.MenuItems.Max + 1)
    {
        InsertTextAtCaret(Time.GetDateStringFromSystem());
    }
}

Warning: This is a required internal node, removing and freeing it may cause a crash. If you wish to hide it or any of its children, use their Window.visible property.

const func get_minimap_line_at_pos(position: Vector2i) -> int#

Returns the equivalent minimap line at position.

const func get_minimap_visible_lines() -> int#

Returns the number of lines that may be drawn on the minimap.

const func get_next_visible_line_index_offset_from(visible_amount: int) -> Vector2i#

Similar to get_next_visible_line_offset_from, but takes into account the line wrap indexes. In the returned vector, x is the line, y is the wrap index.

const func get_next_visible_line_offset_from(visible_amount: int) -> int#

Returns the count to the next visible line from line to line + visible_amount. Can also count backwards. For example if a TextEdit has 5 lines with lines 2 and 3 hidden, calling this with line = 1, visible_amount = 1 would return 3.

const func get_pos_at_line_column(column: int) -> Vector2i#

Returns the local position for the given line and column. If x or y of the returned vector equal -1, the position is outside of the viewable area of the control.

Note: The Y position corresponds to the bottom side of the line. Use get_rect_at_line_column to get the top side position.

const func get_rect_at_line_column(column: int) -> Rect2i#

Returns the local position and size for the grapheme at the given line and column. If x or y position of the returned rect equal -1, the position is outside of the viewable area of the control.

Note: The Y position of the returned rect corresponds to the top side of the line, unlike get_pos_at_line_column which returns the bottom side.

const func get_saved_version() -> int#

Returns the last tagged saved version from tag_saved_version.

const func get_scroll_pos_for_line(wrap_index: int = 0) -> float#

Returns the scroll position for wrap_index of line.

func get_selected_text(caret_index: int = -1) -> String#

Returns the text inside the selection of a caret, or all the carets if caret_index is its default value -1.

const func get_selection_at_line_column(only_selections: bool = true) -> int#

Returns the caret index of the selection at the given line and column, or -1 if there is none.

If include_edges is false, the position must be inside the selection and not at either end. If only_selections is false, carets without a selection will also be considered.

const func get_selection_column(caret_index: int = 0) -> int#

Returns the original start column of the selection.

const func get_selection_from_column(caret_index: int = 0) -> int#

Returns the selection begin column. Returns the caret column if there is no selection.

const func get_selection_from_line(caret_index: int = 0) -> int#

Returns the selection begin line. Returns the caret line if there is no selection.

const func get_selection_line(caret_index: int = 0) -> int#

Returns the original start line of the selection.

const func get_selection_mode() -> intTextEdit.SelectionMode#

Returns the current selection mode.

const func get_selection_origin_column(caret_index: int = 0) -> int#

Returns the origin column of the selection. This is the opposite end from the caret.

const func get_selection_origin_line(caret_index: int = 0) -> int#

Returns the origin line of the selection. This is the opposite end from the caret.

const func get_selection_to_column(caret_index: int = 0) -> int#

Returns the selection end column. Returns the caret column if there is no selection.

const func get_selection_to_line(caret_index: int = 0) -> int#

Returns the selection end line. Returns the caret line if there is no selection.

const func get_sorted_carets(include_ignored_carets: bool = false) -> PackedInt32Array#

Returns the carets sorted by selection beginning from lowest line and column to highest (from top to bottom of text).

If include_ignored_carets is false, carets from multicaret_edit_ignore_caret will be ignored.

const func get_tab_size() -> int#

Returns the TextEdit's' tab size.

const func get_total_gutter_width() -> int#

Returns the total width of all gutters and internal padding.

const func get_total_visible_line_count() -> int#

Returns the total number of lines in the text. This includes wrapped lines and excludes folded lines. If wrap_mode is set to LINE_WRAPPING_NONE and no lines are folded (see CodeEdit.is_line_folded) then this is equivalent to get_line_count. See get_visible_line_count_in_range for a limited range of lines.

const func get_v_scroll_bar() -> VScrollBar#

Returns the VScrollBar of the TextEdit.

const func get_version() -> int#

Returns the current version of the TextEdit. The version is a count of recorded operations by the undo/redo history.

const func get_visible_line_count() -> int#

Returns the number of lines that can visually fit, rounded down, based on this control's height.

const func get_visible_line_count_in_range(to_line: int) -> int#

Returns the total number of lines between from_line and to_line (inclusive) in the text. This includes wrapped lines and excludes folded lines. If the range covers all lines it is equivalent to get_total_visible_line_count.

const func get_word_at_pos(position: Vector2) -> String#

Returns the word at position.

const func get_word_under_caret(caret_index: int = -1) -> String#

Returns a String text with the word under the caret's location.

const func has_ime_text() -> bool#

Returns true if the user has text in the Input Method Editor (IME).

const func has_redo() -> bool#

Returns true if a "redo" action is available.

const func has_selection(caret_index: int = -1) -> bool#

Returns true if the user has selected text.

const func has_undo() -> bool#

Returns true if an "undo" action is available.

func insert_line_at(text: String) -> void#

Inserts a new line with text at line.

func insert_text(before_selection_end: bool = false) -> void#

Inserts the text at line and column.

If before_selection_begin is true, carets and selections that begin at line and column will moved to the end of the inserted text, along with all carets after it.

If before_selection_end is true, selections that end at line and column will be extended to the end of the inserted text. These parameters can be used to insert text inside of or outside of selections.

func insert_text_at_caret(caret_index: int = -1) -> void#

Insert the specified text at the caret position.

const func is_caret_after_selection_origin(caret_index: int = 0) -> bool#

Returns true if the caret of the selection is after the selection origin. This can be used to determine the direction of the selection.

const func is_caret_visible(caret_index: int = 0) -> bool#

Returns true if the caret is visible, false otherwise. A caret will be considered hidden if it is outside the scrollable area when scrolling is enabled.

Note: is_caret_visible does not account for a caret being off-screen if it is still within the scrollable area. It will return true even if the caret is off-screen as long as it meets TextEdit's own conditions for being visible. This includes uses of scroll_fit_content_width and scroll_fit_content_height that cause the TextEdit to expand beyond the viewport's bounds.

const func is_dragging_cursor() -> bool#

Returns true if the user is dragging their mouse for scrolling, selecting, or text dragging.

const func is_gutter_clickable(gutter: int) -> bool#

Returns true if the gutter at the given index is clickable. See set_gutter_clickable.

const func is_gutter_drawn(gutter: int) -> bool#

Returns true if the gutter at the given index is currently drawn. See set_gutter_draw.

const func is_gutter_overwritable(gutter: int) -> bool#

Returns true if the gutter at the given index is overwritable. See set_gutter_overwritable.

const func is_in_mulitcaret_edit() -> bool#

Returns true if a begin_multicaret_edit has been called and end_multicaret_edit has not yet been called.

const func is_line_gutter_clickable(gutter: int) -> bool#

Returns true if the gutter at the given index on the given line is clickable. See set_line_gutter_clickable.

const func is_line_wrapped(line: int) -> bool#

Returns if the given line is wrapped.

const func is_menu_visible() -> bool#

Returns true if the menu is visible. Use this instead of get_menu().visible to improve performance (so the creation of the menu is avoided). See get_menu.

const func is_mouse_over_selection(caret_index: int = -1) -> bool#

Returns true if the mouse is over a selection. If edges is true, the edges are considered part of the selection.

const func is_overtype_mode_enabled() -> bool#

Returns true if overtype mode is enabled. See set_overtype_mode_enabled.

Executes a given action as defined in the MenuItems enum.

func merge_gutters(to_line: int) -> void#

Merge the gutters from from_line into to_line. Only overwritable gutters will be copied. See set_gutter_overwritable.

func merge_overlapping_carets() -> void#

Merges any overlapping carets. Will favor the newest caret, or the caret with a selection.

If is_in_mulitcaret_edit is true, the merge will be queued to happen at the end of the multicaret edit. See begin_multicaret_edit and end_multicaret_edit.

Note: This is not called when a caret changes position but after certain actions, so it is possible to get into a state where carets overlap.

const func multicaret_edit_ignore_caret(caret_index: int) -> bool#

Returns true if the given caret_index should be ignored as part of a multicaret edit. See begin_multicaret_edit and end_multicaret_edit. Carets that should be ignored are ones that were part of removed text and will likely be merged at the end of the edit, or carets that were added during the edit.

It is recommended to continue within a loop iterating on multiple carets if a caret should be ignored.

func paste(caret_index: int = -1) -> void#

Paste at the current location. Can be overridden with _paste.

func paste_primary_clipboard(caret_index: int = -1) -> void#

Pastes the primary clipboard.

func redo() -> void#

Perform redo operation.

func remove_caret(caret: int) -> void#

Removes the given caret index.

Note: This can result in adjustment of all other caret indices.

func remove_gutter(gutter: int) -> void#

Removes the gutter at the given index.

func remove_line_at(move_carets_down: bool = true) -> void#

Removes the line of text at line. Carets on this line will attempt to match their previous visual x position.

If move_carets_down is true carets will move to the next line down, otherwise carets will move up.

func remove_secondary_carets() -> void#

Removes all additional carets.

func remove_text(to_column: int) -> void#

Removes text between the given positions.

Perform a search inside the text. Search flags can be specified in the SearchFlags enum.

In the returned vector, x is the column, y is the line. If no results are found, both are equal to -1.

GDScript

var result = search("print", SEARCH_WHOLE_WORDS, 0, 0)
if result.x != -1:
    # Result found.
    var line_number = result.y
    var column_number = result.x

C#

Vector2I result = Search("print", (uint)TextEdit.SearchFlags.WholeWords, 0, 0);
if (result.X != -1)
{
    // Result found.
    int lineNumber = result.Y;
    int columnNumber = result.X;
}

func select(caret_index: int = 0) -> void#

Selects text from origin_line and origin_column to caret_line and caret_column for the given caret_index. This moves the selection origin and the caret. If the positions are the same, the selection will be deselected.

If selecting_enabled is false, no selection will occur.

Note: If supporting multiple carets this will not check for any overlap. See merge_overlapping_carets.

func select_all() -> void#

Select all the text.

If selecting_enabled is false, no selection will occur.

func select_word_under_caret(caret_index: int = -1) -> void#

Selects the word under the caret.

func set_caret_column(caret_index: int = 0) -> void#

Moves the caret to the specified column index.

If adjust_viewport is true, the viewport will center at the caret position after the move occurs.

Note: If supporting multiple carets this will not check for any overlap. See merge_overlapping_carets.

func set_caret_line(caret_index: int = 0) -> void#

Moves the caret to the specified line index. The caret column will be moved to the same visual position it was at the last time set_caret_column was called, or clamped to the end of the line.

If adjust_viewport is true, the viewport will center at the caret position after the move occurs.

If can_be_hidden is true, the specified line can be hidden.

If wrap_index is -1, the caret column will be clamped to the line's length. If wrap_index is greater than -1, the column will be moved to attempt to match the visual x position on the line's wrap_index to the position from the last time set_caret_column was called.

Note: If supporting multiple carets this will not check for any overlap. See merge_overlapping_carets.

func set_gutter_clickable(clickable: bool) -> void#

If true, the mouse cursor will change to a pointing hand (Control.CURSOR_POINTING_HAND) when hovering over the gutter at the given index. See is_gutter_clickable and set_line_gutter_clickable.

func set_gutter_custom_draw(draw_callback: Callable) -> void#

Set a custom draw callback for the gutter at the given index. draw_callback must take the following arguments: A line index int, a gutter index int, and an area Rect2. This callback only works when the gutter type is GUTTER_TYPE_CUSTOM (see set_gutter_type).

func set_gutter_draw(draw: bool) -> void#

If true, the gutter at the given index is drawn. The gutter type (set_gutter_type) determines how it is drawn. See is_gutter_drawn.

func set_gutter_name(name: String) -> void#

Sets the name of the gutter at the given index.

func set_gutter_overwritable(overwritable: bool) -> void#

If true, the line data of the gutter at the given index can be overridden when using merge_gutters. See is_gutter_overwritable.

func set_gutter_type(type: int enumTextEdit.GutterType) -> void#

Sets the type of gutter at the given index. Gutters can contain icons, text, or custom visuals. See TextEdit.GutterType for options.

func set_gutter_width(width: int) -> void#

Set the width of the gutter at the given index.

func set_line(new_text: String) -> void#

Sets the text for a specific line.

Carets on the line will attempt to keep their visual x position.

func set_line_as_center_visible(wrap_index: int = 0) -> void#

Positions the wrap_index of line at the center of the viewport.

func set_line_as_first_visible(wrap_index: int = 0) -> void#

Positions the wrap_index of line at the top of the viewport.

func set_line_as_last_visible(wrap_index: int = 0) -> void#

Positions the wrap_index of line at the bottom of the viewport.

func set_line_background_color(color: Color) -> void#

Sets the custom background color of the given line. If transparent, this color is applied on top of the default background color (See background_color). If set to Color(0, 0, 0, 0), no additional color is applied.

func set_line_gutter_clickable(clickable: bool) -> void#

If clickable is true, makes the gutter on the given line clickable. This is like set_gutter_clickable, but for a single line. If is_gutter_clickable is true, this will not have any effect. See is_line_gutter_clickable and gutter_clicked.

func set_line_gutter_icon(icon: Texture2D) -> void#

Sets the icon for gutter on line to icon. This only works when the gutter type is GUTTER_TYPE_ICON (see set_gutter_type).

func set_line_gutter_item_color(color: Color) -> void#

Sets the color for gutter on line to color.

func set_line_gutter_metadata(metadata: Variant) -> void#

Sets the metadata for gutter on line to metadata.

func set_line_gutter_text(text: String) -> void#

Sets the text for gutter on line to text. This only works when the gutter type is GUTTER_TYPE_STRING (see set_gutter_type).

func set_overtype_mode_enabled(enabled: bool) -> void#

If true, enables overtype mode. In this mode, typing overrides existing text instead of inserting text. The ProjectSettings.input/ui_text_toggle_insert_mode action toggles overtype mode. See is_overtype_mode_enabled.

func set_search_flags(flags: int) -> void#

Sets the search flags. This is used with set_search_text to highlight occurrences of the searched text. Search flags can be specified from the SearchFlags enum.

func set_search_text(search_text: String) -> void#

Sets the search text. See set_search_flags.

func set_selection_mode(mode: int enumTextEdit.SelectionMode) -> void#

Sets the current selection mode.

func set_selection_origin_column(caret_index: int = 0) -> void#

Sets the selection origin column to the column for the given caret_index. If the selection origin is moved to the caret position, the selection will deselect.

func set_selection_origin_line(caret_index: int = 0) -> void#

Sets the selection origin line to the line for the given caret_index. If the selection origin is moved to the caret position, the selection will deselect.

If can_be_hidden is false, The line will be set to the nearest unhidden line below or above.

If wrap_index is -1, the selection origin column will be clamped to the line's length. If wrap_index is greater than -1, the column will be moved to attempt to match the visual x position on the line's wrap_index to the position from the last time set_selection_origin_column or select was called.

func set_tab_size(size: int) -> void#

Sets the tab size for the TextEdit to use.

func set_tooltip_request_func(callback: Callable) -> void#

Provide custom tooltip text. The callback method must take the following args: hovered_word: String.

func skip_selection_for_next_occurrence() -> void#

Moves a selection and a caret for the next occurrence of the current selection. If there is no active selection, moves to the next occurrence of the word under caret.

func start_action(action: int enumTextEdit.EditAction) -> void#

Starts an action, will end the current action if action is different.

An action will also end after a call to end_action, after ProjectSettings.gui/timers/text_edit_idle_detect_sec is triggered or a new undoable step outside the start_action and end_action calls.

func swap_lines(to_line: int) -> void#

Swaps the two lines. Carets will be swapped with the lines.

func tag_saved_version() -> void#

Tag the current version as saved.

func undo() -> void#

Perform undo operation.

Annotations #

Constants #

Cuts (copies and clears) the selected text.

Copies the selected text.

Pastes the clipboard text over the selected text (or at the cursor's position).

Erases the whole TextEdit text.

Selects the whole TextEdit text.

Undoes the previous action.

Redoes the previous action.

ID of "Text Writing Direction" submenu.

Sets text direction to inherited.

Sets text direction to automatic.

Sets text direction to left-to-right.

Sets text direction to right-to-left.

Toggles control character display.

ID of "Insert Control Character" submenu.

Inserts left-to-right mark (LRM) character.

Inserts right-to-left mark (RLM) character.

Inserts start of left-to-right embedding (LRE) character.

Inserts start of right-to-left embedding (RLE) character.

Inserts start of left-to-right override (LRO) character.

Inserts start of right-to-left override (RLO) character.

Inserts pop direction formatting (PDF) character.

Inserts Arabic letter mark (ALM) character.

Inserts left-to-right isolate (LRI) character.

Inserts right-to-left isolate (RLI) character.

Inserts first strong isolate (FSI) character.

Inserts pop direction isolate (PDI) character.

Inserts zero width joiner (ZWJ) character.

Inserts zero width non-joiner (ZWNJ) character.

Inserts word joiner (WJ) character.

Inserts soft hyphen (SHY) character.

Opens system emoji and symbol picker.

Represents the size of the MenuItems enum.

const ACTION_NONE = 0 enum EditAction#

No current action.

const ACTION_TYPING = 1 enum EditAction#

A typing action.

const ACTION_BACKSPACE = 2 enum EditAction#

A backwards delete action.

const ACTION_DELETE = 3 enum EditAction#

A forward delete action.

const SEARCH_MATCH_CASE = 1 enum SearchFlags#

Match case when searching.

const SEARCH_WHOLE_WORDS = 2 enum SearchFlags#

Match whole words when searching.

const SEARCH_BACKWARDS = 4 enum SearchFlags#

Search from end to beginning.

const CARET_TYPE_LINE = 0 enum CaretType#

Vertical line caret.

const CARET_TYPE_BLOCK = 1 enum CaretType#

Block caret.

const SELECTION_MODE_NONE = 0 enum SelectionMode#

Not selecting.

const SELECTION_MODE_SHIFT = 1 enum SelectionMode#

Select as if shift is pressed.

const SELECTION_MODE_POINTER = 2 enum SelectionMode#

Select single characters as if the user single clicked.

const SELECTION_MODE_WORD = 3 enum SelectionMode#

Select whole words as if the user double clicked.

const SELECTION_MODE_LINE = 4 enum SelectionMode#

Select whole lines as if the user triple clicked.

const LINE_WRAPPING_NONE = 0 enum LineWrappingMode#

Line wrapping is disabled.

const LINE_WRAPPING_BOUNDARY = 1 enum LineWrappingMode#

Line wrapping occurs at the control boundary, beyond what would normally be visible.

const GUTTER_TYPE_STRING = 0 enum GutterType#

When a gutter is set to string using set_gutter_type, it is used to contain text set via the set_line_gutter_text method.

const GUTTER_TYPE_ICON = 1 enum GutterType#

When a gutter is set to icon using set_gutter_type, it is used to contain an icon set via the set_line_gutter_icon method.

const GUTTER_TYPE_CUSTOM = 2 enum GutterType#

When a gutter is set to custom using set_gutter_type, it is used to contain custom visuals controlled by a callback method set via the set_gutter_custom_draw method.

Constructors #

Enums #

enum MenuItems { MENU_CUT = 0, MENU_COPY = 1, MENU_PASTE = 2, MENU_CLEAR = 3, MENU_SELECT_ALL = 4, MENU_UNDO = 5, MENU_REDO = 6, MENU_SUBMENU_TEXT_DIR = 7, MENU_DIR_INHERITED = 8, MENU_DIR_AUTO = 9, MENU_DIR_LTR = 10, MENU_DIR_RTL = 11, MENU_DISPLAY_UCC = 12, MENU_SUBMENU_INSERT_UCC = 13, MENU_INSERT_LRM = 14, MENU_INSERT_RLM = 15, MENU_INSERT_LRE = 16, MENU_INSERT_RLE = 17, MENU_INSERT_LRO = 18, MENU_INSERT_RLO = 19, MENU_INSERT_PDF = 20, MENU_INSERT_ALM = 21, MENU_INSERT_LRI = 22, MENU_INSERT_RLI = 23, MENU_INSERT_FSI = 24, MENU_INSERT_PDI = 25, MENU_INSERT_ZWJ = 26, MENU_INSERT_ZWNJ = 27, MENU_INSERT_WJ = 28, MENU_INSERT_SHY = 29, MENU_EMOJI_AND_SYMBOL = 30, MENU_MAX = 31, }

EditAction#

enum EditAction { ACTION_NONE = 0, ACTION_TYPING = 1, ACTION_BACKSPACE = 2, ACTION_DELETE = 3, }

SearchFlags#

enum SearchFlags { SEARCH_MATCH_CASE = 1, SEARCH_WHOLE_WORDS = 2, SEARCH_BACKWARDS = 4, }

CaretType#

enum CaretType { CARET_TYPE_LINE = 0, CARET_TYPE_BLOCK = 1, }

SelectionMode#

enum SelectionMode { SELECTION_MODE_NONE = 0, SELECTION_MODE_SHIFT = 1, SELECTION_MODE_POINTER = 2, SELECTION_MODE_WORD = 3, SELECTION_MODE_LINE = 4, }

LineWrappingMode#

enum LineWrappingMode { LINE_WRAPPING_NONE = 0, LINE_WRAPPING_BOUNDARY = 1, }

GutterType#

enum GutterType { GUTTER_TYPE_STRING = 0, GUTTER_TYPE_ICON = 1, GUTTER_TYPE_CUSTOM = 2, }

Operators #

Signals #

signal caret_changed()#

Emitted when any caret changes position.

signal gutter_added()#

Emitted when a gutter is added.

signal gutter_clicked(gutter: int)#

Emitted when a gutter is clicked.

signal gutter_removed()#

Emitted when a gutter is removed.

signal lines_edited_from(to_line: int)#

Emitted immediately when the text changes.

When text is added from_line will be less than to_line. On a remove to_line will be less than from_line.

signal text_changed()#

Emitted when the text changes.

signal text_set()#

Emitted when clear is called or text is set.

Theme Items #

self["theme_override_colors/background_color"] = Color(0, 0, 0, 0) as Color#

Sets the background Color of this TextEdit.

self["theme_override_colors/caret_background_color"] = Color(0, 0, 0, 1) as Color#

Color of the text behind the caret when using a block caret.

self["theme_override_colors/caret_color"] = Color(0.875, 0.875, 0.875, 1) as Color#

Color of the caret. This can be set to a fully transparent color to hide the caret entirely.

self["theme_override_colors/current_line_color"] = Color(0.25, 0.25, 0.26, 0.8) as Color#

Background Color of the line containing the caret.

self["theme_override_colors/font_color"] = Color(0.875, 0.875, 0.875, 1) as Color#

Sets the font Color.

self["theme_override_colors/font_outline_color"] = Color(0, 0, 0, 1) as Color#

The tint of text outline of the TextEdit.

self["theme_override_colors/font_placeholder_color"] = Color(0.875, 0.875, 0.875, 0.6) as Color#

Font color for placeholder_text.

self["theme_override_colors/font_readonly_color"] = Color(0.875, 0.875, 0.875, 0.5) as Color#

Sets the font Color when editable is disabled.

self["theme_override_colors/font_selected_color"] = Color(0, 0, 0, 0) as Color#

Sets the Color of the selected text. If equal to Color(0, 0, 0, 0), it will be ignored.

self["theme_override_colors/search_result_border_color"] = Color(0.3, 0.3, 0.3, 0.4) as Color#

Color of the border around text that matches the search query.

self["theme_override_colors/search_result_color"] = Color(0.3, 0.3, 0.3, 1) as Color#

Color behind the text that matches the search query.

self["theme_override_colors/selection_color"] = Color(0.5, 0.5, 0.5, 1) as Color#

Sets the highlight Color of text selections.

self["theme_override_colors/word_highlighted_color"] = Color(0.5, 0.5, 0.5, 0.25) as Color#

Sets the highlight Color of multiple occurrences. highlight_all_occurrences has to be enabled.

self["theme_override_constants/caret_width"] = 1 as int#

The caret's width in pixels. Greater values can be used to improve accessibility by ensuring the caret is easily visible, or to ensure consistency with a large font size. If set to 0 or lower, the caret width is automatically set to 1 pixel and multiplied by the display scaling factor.

self["theme_override_constants/line_spacing"] = 4 as int#

Additional vertical spacing between lines (in pixels), spacing is added to line descent. This value can be negative.

self["theme_override_constants/outline_size"] = 0 as int#

The size of the text outline.

Note: If using a font with FontFile.multichannel_signed_distance_field enabled, its FontFile.msdf_pixel_range must be set to at least twice the value of outline_size for outline rendering to look correct. Otherwise, the outline may appear to be cut off earlier than intended.

self["theme_override_fonts/font"] = font as Font#

Sets the default Font.

self["theme_override_font_sizes/font_size"] = font_size as int#

Sets default font size.

self["theme_override_icons/space"] = icon as Texture2D#

Sets a custom Texture2D for space text characters.

self["theme_override_icons/tab"] = icon as Texture2D#

Sets a custom Texture2D for tab text characters.

self["theme_override_styles/focus"] = style as StyleBox#

Sets the StyleBox when in focus. The focus StyleBox is displayed over the base StyleBox, so a partially transparent StyleBox should be used to ensure the base StyleBox remains visible. A StyleBox that represents an outline or an underline works well for this purpose. To disable the focus visual effect, assign a StyleBoxEmpty resource. Note that disabling the focus visual effect will harm keyboard/controller navigation usability, so this is not recommended for accessibility reasons.

self["theme_override_styles/normal"] = style as StyleBox#

Sets the StyleBox of this TextEdit.

self["theme_override_styles/read_only"] = style as StyleBox#

Sets the StyleBox of this TextEdit when editable is disabled.

Tutorials #