Class reference
TextEdit
Inherits Control
A multiline text editor.
Description
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. While entering text, it is possible to insert special characters using Unicode, OEM or Windows alt codes: - To enter Unicode codepoints, hold Alt and type the codepoint on the numpad. For example, to enter the character á (U+00E1), hold Alt and type +E1 on the numpad (the leading zeroes can be omitted). - To enter OEM codepoints, hold Alt and type the code on the numpad. For example, to enter the character á (OEM 160), hold Alt and type 160 on the numpad. - To enter Windows codepoints, hold Alt and type the code on the numpad. For example, to enter the character á (Windows 0225), hold Alt and type 0, 2, 2, 5 on the numpad. The leading zero here must not be omitted, as this is how Windows codepoints are distinguished from OEM codepoints. 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 Redot script editor.
Properties
int autowrap_mode = 3
int autowrap_mode = 3If wrap_mode is set to LINE_WRAPPING_BOUNDARY, sets text wrapping mode.
bool backspace_deletes_composite_character_enabled = false
bool backspace_deletes_composite_character_enabled = falseIf true and caret_mid_grapheme is false, backspace deletes an entire composite character such as ❤️🩹, instead of deleting part of the composite character.
bool caret_blink = false
bool caret_blink = falseIf true, makes the caret blink.
float caret_blink_interval = 0.65
float caret_blink_interval = 0.65The interval at which the caret blinks (in seconds).
bool caret_draw_when_editable_disabled = false
bool caret_draw_when_editable_disabled = falseIf true, caret will be visible when editable is disabled.
bool caret_mid_grapheme = false
bool caret_mid_grapheme = falseAllow moving caret, selecting and removing the individual composite character components. Note: Backspace is always removing individual composite character components.
bool caret_move_on_right_click = true
bool caret_move_on_right_click = trueIf true, a right-click moves the caret at the mouse position before displaying the context menu. If false, the context menu ignores mouse location.
bool caret_multiple = true
bool caret_multiple = trueIf true, multiple carets are allowed. Left-clicking with Alt adds a new caret. See add_caret() and get_caret_count().
int caret_type = 0
int caret_type = 0Set the type of caret to draw.
bool clip_contents = true
bool clip_contents = truebool context_menu_enabled = true
bool context_menu_enabled = trueIf true, a right-click displays the context menu.
String custom_word_separators = ""
String custom_word_separators = ""The characters to consider as word delimiters if use_custom_word_separators is true. The characters should be defined without separation, for example #_!.
bool deselect_on_focus_loss_enabled = true
bool deselect_on_focus_loss_enabled = trueIf true, the selected text will be deselected when focus is lost.
bool drag_and_drop_selection_enabled = true
bool drag_and_drop_selection_enabled = trueIf true, allow drag and drop of selected text. Text can still be dropped from other sources.
bool draw_control_chars = false
bool draw_control_chars = falseIf true, control characters are displayed.
bool draw_spaces = false
bool draw_spaces = falseIf true, the "space" character will have a visible representation.
bool draw_tabs = false
bool draw_tabs = falseIf true, the "tab" character will have a visible representation.
bool editable = true
bool editable = trueIf false, existing text cannot be modified and new text cannot be added.
bool emoji_menu_enabled = true
bool emoji_menu_enabled = trueIf true, "Emoji and Symbols" menu is enabled.
bool empty_selection_clipboard_enabled = true
bool empty_selection_clipboard_enabled = trueIf true, copying or cutting without a selection is performed on all lines with a caret. Otherwise, copy and cut require a selection.
int focus_mode = 2
int focus_mode = 2bool highlight_all_occurrences = false
bool highlight_all_occurrences = falseIf true, all occurrences of the selected text will be highlighted.
bool highlight_current_line = false
bool highlight_current_line = falseIf true, the line containing the cursor is highlighted.
bool indent_wrapped_lines = false
bool indent_wrapped_lines = falseIf true, all wrapped lines are indented to the same amount as the unwrapped line.
String language = ""
String language = ""Language code used for line-breaking and text shaping algorithms, if left empty current locale is used instead.
bool middle_mouse_paste_enabled = true
bool middle_mouse_paste_enabled = trueIf false, using middle mouse button to paste clipboard will be disabled. Note: This method is only implemented on Linux.
bool minimap_draw = false
bool minimap_draw = falseIf true, a minimap is shown, providing an outline of your source code. The minimap uses a fixed-width text size.
int minimap_width = 80
int minimap_width = 80The width, in pixels, of the minimap.
int mouse_default_cursor_shape = 1
int mouse_default_cursor_shape = 1String placeholder_text = ""
String placeholder_text = ""Text shown when the TextEdit is empty. It is not the TextEdit's default value (see text).
bool scroll_fit_content_height = false
bool scroll_fit_content_height = falseIf 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.
bool scroll_fit_content_width = false
bool scroll_fit_content_width = falseIf 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.
int scroll_horizontal = 0
int scroll_horizontal = 0If there is a horizontal scrollbar, this determines the current horizontal scroll value in pixels.
bool scroll_past_end_of_file = false
bool scroll_past_end_of_file = falseAllow scrolling past the last line into "virtual" space.
bool scroll_smooth = false
bool scroll_smooth = falseScroll smoothly over the text rather than jumping to the next location.
float scroll_v_scroll_speed = 80.0
float scroll_v_scroll_speed = 80.0Sets the scroll speed with the minimap or when scroll_smooth is enabled.
float scroll_vertical = 0.0
float scroll_vertical = 0.0If there is a vertical scrollbar, this determines the current vertical scroll value in line numbers, starting at 0 for the top line.
bool selecting_enabled = true
bool selecting_enabled = trueIf true, text can be selected. If false, text can not be selected by the user or by the select() or select_all() methods.
bool shortcut_keys_enabled = true
bool shortcut_keys_enabled = trueIf true, shortcut keys for context menu items are enabled, even if the context menu is disabled.
int structured_text_bidi_override = 0
int structured_text_bidi_override = 0Set BiDi algorithm override for the structured text.
Array structured_text_bidi_override_options = []
Array structured_text_bidi_override_options = []Set additional options for BiDi override.
SyntaxHighlighter syntax_highlighter
SyntaxHighlighter syntax_highlighterThe syntax highlighter to use. Note: A SyntaxHighlighter instance should not be used across multiple TextEdit nodes.
bool tab_input_mode = true
bool tab_input_mode = trueIf true, ProjectSettings.input/ui_text_indent input Tab character, otherwise it moves keyboard focus to the next Control in the scene.
String text = ""
String text = ""String value of the TextEdit.
int text_direction = 0
int text_direction = 0Base text writing direction.
bool use_custom_word_separators = false
bool use_custom_word_separators = falseIf 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.
bool use_default_word_separators = true
bool use_default_word_separators = trueIf 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.
bool virtual_keyboard_enabled = true
bool virtual_keyboard_enabled = trueIf true, the native virtual keyboard is enabled on platforms that support it.
bool virtual_keyboard_show_on_focus = true
bool virtual_keyboard_show_on_focus = trueIf true, the native virtual keyboard is shown on focus events on platforms that support it.
int wrap_mode = 0
int wrap_mode = 0Sets the line wrapping mode to use.
Methods
void _backspace(int caret_index) virtual
int caret_index) virtualOverride this method to define what happens when the user presses the backspace key.
void _copy(int caret_index) virtual
int caret_index) virtualOverride this method to define what happens when the user performs a copy operation.
void _cut(int caret_index) virtual
int caret_index) virtualOverride this method to define what happens when the user performs a cut operation.
void _handle_unicode_input(int unicode_char, int caret_index) virtual
int unicode_char, int caret_index) virtualOverride this method to define what happens when the user types in the provided key unicode_char.
void _paste(int caret_index) virtual
int caret_index) virtualOverride this method to define what happens when the user performs a paste operation.
void _paste_primary_clipboard(int caret_index) virtual
int caret_index) virtualOverride 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.
int add_caret(int line, int column)
int add_caret(int line, int column)Adds a new caret at the given location. Returns the index of the new caret, or -1 if the location is invalid.
void add_caret_at_carets(bool below)
bool below)Adds an additional caret above or below every caret. If below is true the new caret will be added below and above otherwise.
void add_gutter(int at = -1)
int at = -1)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.
void add_selection_for_next_occurrence()
Adds a selection and a caret for the next occurrence of the current selection. If there is no active selection, selects word under caret.
void adjust_carets_after_edit(int caret, int from_line, int from_col, int to_line, int to_col)
int caret, int from_line, int from_col, int to_line, int to_col)No longer necessary since methods now adjust carets themselves.
This method does nothing.
void adjust_viewport_to_caret(int caret_index = 0)
int caret_index = 0)Adjust the viewport so the caret is visible.
void apply_ime()
Applies text from the Input Method Editor (IME) to each caret and closes the IME if it is open.
void backspace(int caret_index = -1)
int caret_index = -1)Called when the user presses the backspace key. Can be overridden with _backspace().
void begin_complex_operation()
Starts a multipart edit. All edits will be treated as one action until end_complex_operation() is called.
void begin_multicaret_edit()
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()
void cancel_ime()
Closes the Input Method Editor (IME) if it is open. Any text in the IME will be lost.
void center_viewport_to_caret(int caret_index = 0)
int caret_index = 0)Centers the viewport on the line the editing caret is at. This also resets the scroll_horizontal value to 0.
void clear()
Performs a full reset of TextEdit, including undo history.
void clear_undo_history()
Clears the undo history.
void collapse_carets(int from_line, int from_column, int to_line, int to_column, bool inclusive = false)
int from_line, int from_column, int to_line, int to_column, bool inclusive = false)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.
void copy(int caret_index = -1)
int caret_index = -1)Copies the current text selection. Can be overridden with _copy().
void cut(int caret_index = -1)
int caret_index = -1)Cut's the current selection. Can be overridden with _cut().
void delete_selection(int caret_index = -1)
int caret_index = -1)Deletes the selected text.
void deselect(int caret_index = -1)
int caret_index = -1)Deselects the current selection.
void end_action()
Marks the end of steps in the current action started with start_action().
void end_complex_operation()
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.
void end_multicaret_edit()
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.
int get_caret_column(int caret_index = 0) const
int get_caret_column(int caret_index = 0) constReturns the column the editing caret is at.
int get_caret_count() const
int get_caret_count() constReturns the number of carets in this TextEdit.
Vector2 get_caret_draw_pos(int caret_index = 0) const
Vector2 get_caret_draw_pos(int caret_index = 0) constReturns the caret pixel draw position.
PackedInt32Array get_caret_index_edit_order()
PackedInt32Array get_caret_index_edit_order()Carets no longer need to be edited in any specific order. If the carets need to be sorted, use get_sorted_carets() instead.
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.
int get_caret_line(int caret_index = 0) const
int get_caret_line(int caret_index = 0) constReturns the line the editing caret is on.
int get_caret_wrap_index(int caret_index = 0) const
int get_caret_wrap_index(int caret_index = 0) constReturns the wrap index the editing caret is on.
int get_first_non_whitespace_column(int line) const
int get_first_non_whitespace_column(int line) constReturns the first column containing a non-whitespace character on the given line. If there is only whitespace, returns the number of characters.
int get_first_visible_line() const
int get_first_visible_line() constReturns the first visible line.
int get_gutter_count() const
int get_gutter_count() constReturns the number of gutters registered.
String get_gutter_name(int gutter) const
String get_gutter_name(int gutter) constReturns the name of the gutter at the given index.
int get_gutter_type(int gutter) const
int get_gutter_type(int gutter) constReturns the type of the gutter at the given index. Gutters can contain icons, text, or custom visuals.
int get_gutter_width(int gutter) const
int get_gutter_width(int gutter) constReturns the width of the gutter at the given index.
HScrollBar get_h_scroll_bar() const
HScrollBar get_h_scroll_bar() constReturns the HScrollBar used by TextEdit.
int get_indent_level(int line) const
int get_indent_level(int line) constReturns 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()).
int get_last_full_visible_line() const
int get_last_full_visible_line() constReturns the last visible line. Use get_last_full_visible_line_wrap_index() for the wrap index.
int get_last_full_visible_line_wrap_index() const
int get_last_full_visible_line_wrap_index() constReturns the last visible wrap index of the last visible line.
int get_last_unhidden_line() const
int get_last_unhidden_line() constReturns the last unhidden line in the entire TextEdit.
String get_line(int line) const
String get_line(int line) constReturns the text of a specific line.
Color get_line_background_color(int line) const
Color get_line_background_color(int line) constReturns the custom background color of the given line. If no color is set, returns Color(0, 0, 0, 0).
Vector2i get_line_column_at_pos(Vector2i position, bool clamp_line = true, bool clamp_column = true) const
Vector2i get_line_column_at_pos(Vector2i position, bool clamp_line = true, bool clamp_column = true) constReturns 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.
int get_line_count() const
int get_line_count() constReturns the number of lines in the text.
Texture2D get_line_gutter_icon(int line, int gutter) const
Texture2D get_line_gutter_icon(int line, int gutter) constReturns the icon currently in gutter at line. This only works when the gutter type is GUTTER_TYPE_ICON (see set_gutter_type()).
Color get_line_gutter_item_color(int line, int gutter) const
Color get_line_gutter_item_color(int line, int gutter) constReturns the color currently in gutter at line.
Variant get_line_gutter_metadata(int line, int gutter) const
Variant get_line_gutter_metadata(int line, int gutter) constReturns the metadata currently in gutter at line.
String get_line_gutter_text(int line, int gutter) const
String get_line_gutter_text(int line, int gutter) constReturns the text currently in gutter at line. This only works when the gutter type is GUTTER_TYPE_STRING (see set_gutter_type()).
int get_line_height() const
int get_line_height() constReturns 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.
Vector2i[] get_line_ranges_from_carets(bool only_selections = false, bool merge_adjacent = true) const
bool only_selections = false, bool merge_adjacent = true) constReturns 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.
int get_line_width(int line, int wrap_index = -1) const
int get_line_width(int line, int wrap_index = -1) constReturns the width in pixels of the wrap_index on line.
String get_line_with_ime(int line) const
String get_line_with_ime(int line) constReturns line text as it is currently displayed, including IME composition string.
int get_line_wrap_count(int line) const
int get_line_wrap_count(int line) constReturns the number of times the given line is wrapped.
int get_line_wrap_index_at_column(int line, int column) const
int get_line_wrap_index_at_column(int line, int column) constReturns the wrap index of the given column on the given line. This ranges from 0 to get_line_wrap_count().
PackedStringArray get_line_wrapped_text(int line) const
PackedStringArray get_line_wrapped_text(int line) constReturns an array of Strings representing each wrapped index.
Vector2 get_local_mouse_pos() const
Vector2 get_local_mouse_pos() constReturns the local mouse position adjusted for the text direction.
PopupMenu get_menu() const
PopupMenu get_menu() constReturns 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:
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())
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.
int get_minimap_line_at_pos(Vector2i position) const
int get_minimap_line_at_pos(Vector2i position) constReturns the equivalent minimap line at position.
int get_minimap_visible_lines() const
int get_minimap_visible_lines() constReturns the number of lines that may be drawn on the minimap.
int get_next_composite_character_column(int line, int column) const
int get_next_composite_character_column(int line, int column) constReturns the correct column at the end of a composite character like ❤️🩹 (mending heart; Unicode: U+2764 U+FE0F U+200D U+1FA79) which is comprised of more than one Unicode code point, if the caret is at the start of the composite character. Also returns the correct column with the caret at mid grapheme and for non-composite characters. Note: To check at caret location use get_next_composite_character_column(get_caret_line(), get_caret_column())
Vector2i get_next_visible_line_index_offset_from(int line, int wrap_index, int visible_amount) const
Vector2i get_next_visible_line_index_offset_from(int line, int wrap_index, int visible_amount) constSimilar 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.
int get_next_visible_line_offset_from(int line, int visible_amount) const
int get_next_visible_line_offset_from(int line, int visible_amount) constReturns 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.
Vector2i get_pos_at_line_column(int line, int column) const
Vector2i get_pos_at_line_column(int line, int column) constReturns 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.
int get_previous_composite_character_column(int line, int column) const
int get_previous_composite_character_column(int line, int column) constReturns the correct column at the start of a composite character like ❤️🩹 (mending heart; Unicode: U+2764 U+FE0F U+200D U+1FA79) which is comprised of more than one Unicode code point, if the caret is at the end of the composite character. Also returns the correct column with the caret at mid grapheme and for non-composite characters. Note: To check at caret location use get_previous_composite_character_column(get_caret_line(), get_caret_column())
Rect2i get_rect_at_line_column(int line, int column) const
Rect2i get_rect_at_line_column(int line, int column) constReturns 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.
int get_saved_version() const
int get_saved_version() constReturns the last tagged saved version from tag_saved_version().
float get_scroll_pos_for_line(int line, int wrap_index = 0) const
float get_scroll_pos_for_line(int line, int wrap_index = 0) constReturns the scroll position for wrap_index of line.
String get_selected_text(int caret_index = -1)
String get_selected_text(int caret_index = -1)Returns the text inside the selection of a caret, or all the carets if caret_index is its default value -1.
int get_selection_at_line_column(int line, int column, bool include_edges = true, bool only_selections = true) const
int get_selection_at_line_column(int line, int column, bool include_edges = true, bool only_selections = true) constReturns 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.
int get_selection_column(int caret_index = 0) const
int get_selection_column(int caret_index = 0) constUse get_selection_origin_column() instead.
Returns the original start column of the selection.
int get_selection_from_column(int caret_index = 0) const
int get_selection_from_column(int caret_index = 0) constReturns the selection begin column. Returns the caret column if there is no selection.
int get_selection_from_line(int caret_index = 0) const
int get_selection_from_line(int caret_index = 0) constReturns the selection begin line. Returns the caret line if there is no selection.
int get_selection_line(int caret_index = 0) const
int get_selection_line(int caret_index = 0) constUse get_selection_origin_line() instead.
Returns the original start line of the selection.
int get_selection_mode() const
int get_selection_mode() constReturns the current selection mode.
int get_selection_origin_column(int caret_index = 0) const
int get_selection_origin_column(int caret_index = 0) constReturns the origin column of the selection. This is the opposite end from the caret.
int get_selection_origin_line(int caret_index = 0) const
int get_selection_origin_line(int caret_index = 0) constReturns the origin line of the selection. This is the opposite end from the caret.
int get_selection_to_column(int caret_index = 0) const
int get_selection_to_column(int caret_index = 0) constReturns the selection end column. Returns the caret column if there is no selection.
int get_selection_to_line(int caret_index = 0) const
int get_selection_to_line(int caret_index = 0) constReturns the selection end line. Returns the caret line if there is no selection.
PackedInt32Array get_sorted_carets(bool include_ignored_carets = false) const
PackedInt32Array get_sorted_carets(bool include_ignored_carets = false) constReturns 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.
int get_tab_size() const
int get_tab_size() constReturns the TextEdit's' tab size.
int get_total_gutter_width() const
int get_total_gutter_width() constReturns the total width of all gutters and internal padding.
int get_total_visible_line_count() const
int get_total_visible_line_count() constReturns 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.
VScrollBar get_v_scroll_bar() const
VScrollBar get_v_scroll_bar() constReturns the VScrollBar of the TextEdit.
int get_version() const
int get_version() constReturns the current version of the TextEdit. The version is a count of recorded operations by the undo/redo history.
int get_visible_line_count() const
int get_visible_line_count() constReturns the number of lines that can visually fit, rounded down, based on this control's height.
int get_visible_line_count_in_range(int from_line, int to_line) const
int get_visible_line_count_in_range(int from_line, int to_line) constReturns 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().
String get_word_at_pos(Vector2 position) const
String get_word_at_pos(Vector2 position) constReturns the word at position.
String get_word_under_caret(int caret_index = -1) const
String get_word_under_caret(int caret_index = -1) constReturns a String text with the word under the caret's location.
bool has_ime_text() const
bool has_ime_text() constReturns true if the user has text in the Input Method Editor (IME).
bool has_redo() const
bool has_redo() constReturns true if a "redo" action is available.
bool has_selection(int caret_index = -1) const
bool has_selection(int caret_index = -1) constReturns true if the user has selected text.
bool has_undo() const
bool has_undo() constReturns true if an "undo" action is available.
void insert_line_at(int line, String text)
int line, String text)Inserts a new line with text at line.
void insert_text(String text, int line, int column, bool before_selection_begin = true, bool before_selection_end = false)
String text, int line, int column, bool before_selection_begin = true, bool before_selection_end = false)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.
void insert_text_at_caret(String text, int caret_index = -1)
String text, int caret_index = -1)Insert the specified text at the caret position.
bool is_caret_after_selection_origin(int caret_index = 0) const
bool is_caret_after_selection_origin(int caret_index = 0) constReturns true if the caret of the selection is after the selection origin. This can be used to determine the direction of the selection.
bool is_caret_visible(int caret_index = 0) const
bool is_caret_visible(int caret_index = 0) constReturns 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.
bool is_dragging_cursor() const
bool is_dragging_cursor() constReturns true if the user is dragging their mouse for scrolling, selecting, or text dragging.
bool is_gutter_clickable(int gutter) const
bool is_gutter_clickable(int gutter) constReturns true if the gutter at the given index is clickable. See set_gutter_clickable().
bool is_gutter_drawn(int gutter) const
bool is_gutter_drawn(int gutter) constReturns true if the gutter at the given index is currently drawn. See set_gutter_draw().
bool is_gutter_overwritable(int gutter) const
bool is_gutter_overwritable(int gutter) constReturns true if the gutter at the given index is overwritable. See set_gutter_overwritable().
bool is_in_mulitcaret_edit() const
bool is_in_mulitcaret_edit() constReturns true if a begin_multicaret_edit() has been called and end_multicaret_edit() has not yet been called.
bool is_line_gutter_clickable(int line, int gutter) const
bool is_line_gutter_clickable(int line, int gutter) constReturns true if the gutter at the given index on the given line is clickable. See set_line_gutter_clickable().
bool is_line_wrapped(int line) const
bool is_line_wrapped(int line) constReturns if the given line is wrapped.
bool is_menu_visible() const
bool is_menu_visible() constReturns 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().
bool is_mouse_over_selection(bool edges, int caret_index = -1) const
bool is_mouse_over_selection(bool edges, int caret_index = -1) constReturns true if the mouse is over a selection. If edges is true, the edges are considered part of the selection.
bool is_overtype_mode_enabled() const
bool is_overtype_mode_enabled() constReturns true if overtype mode is enabled. See set_overtype_mode_enabled().
void menu_option(int option)
int option)Executes a given action as defined in the MenuItems enum.
void merge_gutters(int from_line, int to_line)
int from_line, int to_line)Merge the gutters from from_line into to_line. Only overwritable gutters will be copied. See set_gutter_overwritable().
void merge_overlapping_carets()
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.
bool multicaret_edit_ignore_caret(int caret_index) const
bool multicaret_edit_ignore_caret(int caret_index) constReturns 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.
void paste(int caret_index = -1)
int caret_index = -1)Paste at the current location. Can be overridden with _paste().
void paste_primary_clipboard(int caret_index = -1)
int caret_index = -1)Pastes the primary clipboard.
void redo()
Perform redo operation.
void remove_caret(int caret)
int caret)Removes the given caret index. Note: This can result in adjustment of all other caret indices.
void remove_gutter(int gutter)
int gutter)Removes the gutter at the given index.
void remove_line_at(int line, bool move_carets_down = true)
int line, bool move_carets_down = true)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.
void remove_secondary_carets()
Removes all additional carets.
void remove_text(int from_line, int from_column, int to_line, int to_column)
int from_line, int from_column, int to_line, int to_column)Removes text between the given positions.
Vector2i search(String text, int flags, int from_line, int from_column) const
Vector2i search(String text, int flags, int from_line, int from_column) constPerform 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.
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
Vector2I result = Search("print", (uint)TextEdit.SearchFlags.WholeWords, 0, 0);
if (result.X != -1)
{
// Result found.
int lineNumber = result.Y;
int columnNumber = result.X;
}
void select(int origin_line, int origin_column, int caret_line, int caret_column, int caret_index = 0)
int origin_line, int origin_column, int caret_line, int caret_column, int caret_index = 0)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().
void select_all()
Select all the text. If selecting_enabled is false, no selection will occur.
void select_word_under_caret(int caret_index = -1)
int caret_index = -1)Selects the word under the caret.
void set_caret_column(int column, bool adjust_viewport = true, int caret_index = 0)
int column, bool adjust_viewport = true, int caret_index = 0)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().
void set_caret_line(int line, bool adjust_viewport = true, bool can_be_hidden = true, int wrap_index = 0, int caret_index = 0)
int line, bool adjust_viewport = true, bool can_be_hidden = true, int wrap_index = 0, int caret_index = 0)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().
void set_gutter_clickable(int gutter, bool clickable)
int gutter, bool clickable)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().
void set_gutter_custom_draw(int column, Callable draw_callback)
int column, Callable draw_callback)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()).
void set_gutter_draw(int gutter, bool draw)
int gutter, bool draw)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().
void set_gutter_name(int gutter, String name)
int gutter, String name)Sets the name of the gutter at the given index.
void set_gutter_overwritable(int gutter, bool overwritable)
int gutter, bool overwritable)If true, the line data of the gutter at the given index can be overridden when using merge_gutters(). See is_gutter_overwritable().
void set_gutter_type(int gutter, int type)
int gutter, int type)Sets the type of gutter at the given index. Gutters can contain icons, text, or custom visuals.
void set_gutter_width(int gutter, int width)
int gutter, int width)Set the width of the gutter at the given index.
void set_line(int line, String new_text)
int line, String new_text)Sets the text for a specific line. Carets on the line will attempt to keep their visual x position.
void set_line_as_center_visible(int line, int wrap_index = 0)
int line, int wrap_index = 0)Positions the wrap_index of line at the center of the viewport.
void set_line_as_first_visible(int line, int wrap_index = 0)
int line, int wrap_index = 0)Positions the wrap_index of line at the top of the viewport.
void set_line_as_last_visible(int line, int wrap_index = 0)
int line, int wrap_index = 0)Positions the wrap_index of line at the bottom of the viewport.
void set_line_background_color(int line, Color color)
int line, Color color)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.
void set_line_gutter_clickable(int line, int gutter, bool clickable)
int line, int gutter, bool clickable)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.
void set_line_gutter_icon(int line, int gutter, Texture2D icon)
int line, int gutter, Texture2D icon)Sets the icon for gutter on line to icon. This only works when the gutter type is GUTTER_TYPE_ICON (see set_gutter_type()).
void set_line_gutter_item_color(int line, int gutter, Color color)
int line, int gutter, Color color)Sets the color for gutter on line to color.
void set_line_gutter_metadata(int line, int gutter, Variant metadata)
int line, int gutter, Variant metadata)Sets the metadata for gutter on line to metadata.
void set_line_gutter_text(int line, int gutter, String text)
int line, int gutter, String text)Sets the text for gutter on line to text. This only works when the gutter type is GUTTER_TYPE_STRING (see set_gutter_type()).
void set_overtype_mode_enabled(bool enabled)
bool enabled)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().
void set_search_flags(int flags)
int flags)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.
void set_search_text(String search_text)
String search_text)Sets the search text. See set_search_flags().
void set_selection_mode(int mode)
int mode)Sets the current selection mode.
void set_selection_origin_column(int column, int caret_index = 0)
int column, int caret_index = 0)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.
void set_selection_origin_line(int line, bool can_be_hidden = true, int wrap_index = -1, int caret_index = 0)
int line, bool can_be_hidden = true, int wrap_index = -1, int caret_index = 0)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.
void set_tab_size(int size)
int size)Sets the tab size for the TextEdit to use.
void set_tooltip_request_func(Callable callback)
Callable callback)Provide custom tooltip text. The callback method must take the following args: hovered_word: String.
void skip_selection_for_next_occurrence()
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.
void start_action(int action)
int action)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.
void swap_lines(int from_line, int to_line)
int from_line, int to_line)Swaps the two lines. Carets will be swapped with the lines.
void tag_saved_version()
Tag the current version as saved.
void undo()
Perform undo operation.
Signals
caret_changed()
Emitted when any caret changes position.
gutter_added()
Emitted when a gutter is added.
gutter_clicked(int line, int gutter)
int line, int gutter)Emitted when a gutter is clicked.
gutter_removed()
Emitted when a gutter is removed.
lines_edited_from(int from_line, int to_line)
int from_line, int to_line)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.
text_changed()
Emitted when the text changes.
text_set()
Constants
MENU_CUT = 0
Cuts (copies and clears) the selected text.
MENU_COPY = 1
Copies the selected text.
MENU_PASTE = 2
Pastes the clipboard text over the selected text (or at the cursor's position).
MENU_CLEAR = 3
Erases the whole TextEdit text.
MENU_SELECT_ALL = 4
Selects the whole TextEdit text.
MENU_UNDO = 5
Undoes the previous action.
MENU_REDO = 6
Redoes the previous action.
MENU_SUBMENU_TEXT_DIR = 7
ID of "Text Writing Direction" submenu.
MENU_DIR_INHERITED = 8
Sets text direction to inherited.
MENU_DIR_AUTO = 9
Sets text direction to automatic.
MENU_DIR_LTR = 10
Sets text direction to left-to-right.
MENU_DIR_RTL = 11
Sets text direction to right-to-left.
MENU_DISPLAY_UCC = 12
Toggles control character display.
MENU_SUBMENU_INSERT_UCC = 13
ID of "Insert Control Character" submenu.
MENU_INSERT_LRM = 14
Inserts left-to-right mark (LRM) character.
MENU_INSERT_RLM = 15
Inserts right-to-left mark (RLM) character.
MENU_INSERT_LRE = 16
Inserts start of left-to-right embedding (LRE) character.
MENU_INSERT_RLE = 17
Inserts start of right-to-left embedding (RLE) character.
MENU_INSERT_LRO = 18
Inserts start of left-to-right override (LRO) character.
MENU_INSERT_RLO = 19
Inserts start of right-to-left override (RLO) character.
MENU_INSERT_PDF = 20
Inserts pop direction formatting (PDF) character.
MENU_INSERT_ALM = 21
Inserts Arabic letter mark (ALM) character.
MENU_INSERT_LRI = 22
Inserts left-to-right isolate (LRI) character.
MENU_INSERT_RLI = 23
Inserts right-to-left isolate (RLI) character.
MENU_INSERT_FSI = 24
Inserts first strong isolate (FSI) character.
MENU_INSERT_PDI = 25
Inserts pop direction isolate (PDI) character.
MENU_INSERT_ZWJ = 26
Inserts zero width joiner (ZWJ) character.
MENU_INSERT_ZWNJ = 27
Inserts zero width non-joiner (ZWNJ) character.
MENU_INSERT_WJ = 28
Inserts word joiner (WJ) character.
MENU_INSERT_SHY = 29
Inserts soft hyphen (SHY) character.
MENU_EMOJI_AND_SYMBOL = 30
Opens system emoji and symbol picker.
MENU_MAX = 31
Represents the size of the MenuItems enum.
ACTION_NONE = 0
No current action.
ACTION_TYPING = 1
A typing action.
ACTION_BACKSPACE = 2
A backwards delete action.
ACTION_DELETE = 3
A forward delete action.
SEARCH_MATCH_CASE = 1
Match case when searching.
SEARCH_WHOLE_WORDS = 2
Match whole words when searching.
SEARCH_BACKWARDS = 4
Search from end to beginning.
CARET_TYPE_LINE = 0
Vertical line caret.
CARET_TYPE_BLOCK = 1
Block caret.
SELECTION_MODE_NONE = 0
Not selecting.
SELECTION_MODE_SHIFT = 1
Select as if shift is pressed.
SELECTION_MODE_POINTER = 2
Select single characters as if the user single clicked.
SELECTION_MODE_WORD = 3
Select whole words as if the user double clicked.
SELECTION_MODE_LINE = 4
Select whole lines as if the user triple clicked.
LINE_WRAPPING_NONE = 0
Line wrapping is disabled.
LINE_WRAPPING_BOUNDARY = 1
Line wrapping occurs at the control boundary, beyond what would normally be visible.
GUTTER_TYPE_STRING = 0
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.
GUTTER_TYPE_ICON = 1
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.
GUTTER_TYPE_CUSTOM = 2
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.
Theme properties
Color background_color = Color(0, 0, 0, 0)
Color background_color = Color(0, 0, 0, 0)Color caret_background_color = Color(0, 0, 0, 1)
Color caret_background_color = Color(0, 0, 0, 1)Color of the text behind the caret when using a block caret.
Color caret_color = Color(0.875, 0.875, 0.875, 1)
Color caret_color = Color(0.875, 0.875, 0.875, 1)Color of the caret. This can be set to a fully transparent color to hide the caret entirely.
Color current_line_color = Color(0.25, 0.25, 0.26, 0.8)
Color current_line_color = Color(0.25, 0.25, 0.26, 0.8)Background Color of the line containing the caret.
Color font_color = Color(0.875, 0.875, 0.875, 1)
Color font_color = Color(0.875, 0.875, 0.875, 1)Sets the font Color.
Color font_outline_color = Color(0, 0, 0, 1)
Color font_outline_color = Color(0, 0, 0, 1)The tint of text outline of the TextEdit.
Color font_placeholder_color = Color(0.875, 0.875, 0.875, 0.6)
Color font_placeholder_color = Color(0.875, 0.875, 0.875, 0.6)Font color for placeholder_text.
Color font_readonly_color = Color(0.875, 0.875, 0.875, 0.5)
Color font_readonly_color = Color(0.875, 0.875, 0.875, 0.5)Color font_selected_color = Color(0, 0, 0, 0)
Color font_selected_color = Color(0, 0, 0, 0)Sets the Color of the selected text. If equal to Color(0, 0, 0, 0), it will be ignored.
Color search_result_border_color = Color(0.3, 0.3, 0.3, 0.4)
Color search_result_border_color = Color(0.3, 0.3, 0.3, 0.4)Color of the border around text that matches the search query.
Color search_result_color = Color(0.3, 0.3, 0.3, 1)
Color search_result_color = Color(0.3, 0.3, 0.3, 1)Color behind the text that matches the search query.
Color selection_color = Color(0.5, 0.5, 0.5, 1)
Color selection_color = Color(0.5, 0.5, 0.5, 1)Sets the highlight Color of text selections.
Color word_highlighted_color = Color(0.5, 0.5, 0.5, 0.25)
Color word_highlighted_color = Color(0.5, 0.5, 0.5, 0.25)Sets the highlight Color of multiple occurrences. highlight_all_occurrences has to be enabled.
int caret_width = 1
int caret_width = 1The 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.
int line_spacing = 4
int line_spacing = 4Additional vertical spacing between lines (in pixels), spacing is added to line descent. This value can be negative.
int outline_size = 0
int outline_size = 0The 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.
Font font
Font fontSets the default Font.
int font_size
int font_sizeSets default font size.
Texture2D space
Texture2D spaceSets a custom Texture2D for space text characters.
Texture2D tab
Texture2D tabSets a custom Texture2D for tab text characters.
StyleBox focus
StyleBox focusSets 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.
StyleBox normal
StyleBox normalStyleBox read_only
StyleBox read_onlySets the StyleBox of this TextEdit when editable is disabled.