user: Describe Text(ID) from the Blender manual or Python API, including usage steps and snippets.

assistant: # Text(ID)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`ID`](bpy.types.ID.html#bpy.types.ID "bpy.types.ID")

*class* bpy.types.Text(*ID*)
:   Text data-block referencing an external or packed text file

    current_character
    :   Index of current character in current line, and also start index of character in selection if one exists

        Type:
        :   int in [0, inf], default 0

    current_line
    :   Current line, and start line of selection if one exists

        Type:
        :   [`TextLine`](bpy.types.TextLine.html#bpy.types.TextLine "bpy.types.TextLine"), (readonly, never None)

    current_line_index
    :   Index of current TextLine in TextLine collection

        Type:
        :   int in [-inf, inf], default 0

    filepath
    :   Filename of the text file

        Type:
        :   string, default “”, (never None)

    indentation
    :   Use tabs or spaces for indentation

        - `TABS`
          Tabs – Indent using tabs.
        - `SPACES`
          Spaces – Indent using spaces.

        Type:
        :   enum in [`'TABS'`, `'SPACES'`], default `'TABS'`

    is_dirty
    :   Text file has been edited since last save

        Type:
        :   boolean, default False, (readonly)

    is_in_memory
    :   Text file is in memory, without a corresponding file on disk

        Type:
        :   boolean, default False, (readonly)

    is_modified
    :   Text file on disk is different than the one in memory

        Type:
        :   boolean, default False, (readonly)

    lines
    :   Lines of text

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`TextLine`](bpy.types.TextLine.html#bpy.types.TextLine "bpy.types.TextLine"), (readonly)

    select_end_character
    :   Index of character after end of selection in the selection end line

        Type:
        :   int in [0, inf], default 0

    select_end_line
    :   End line of selection

        Type:
        :   [`TextLine`](bpy.types.TextLine.html#bpy.types.TextLine "bpy.types.TextLine"), (readonly, never None)

    select_end_line_index
    :   Index of last TextLine in selection

        Type:
        :   int in [-inf, inf], default 0

    use_module
    :   Run this text as a Python script on loading

        Type:
        :   boolean, default False

    clear()
    :   clear the text block

    write(*text*)
    :   write text at the cursor location and advance to the end of the text block

        Parameters:
        :   **text** (*string**,* *(**never None**)*) – New text for this data-block

    from_string(*text*)
    :   Replace text with this string.

    as_string()
    :   Return the text as a string

        Return type:
        :   string, (never None)

    is_syntax_highlight_supported()
    :   Returns True if the editor supports syntax highlighting for the current text data-block

        Return type:
        :   boolean

    select_set(*line_start*, *char_start*, *line_end*, *char_end*)
    :   Set selection range by line and character index

        Parameters:
        :   - **line_start** (*int in* *[**-inf**,* *inf**]*) – Start Line
            - **char_start** (*int in* *[**-inf**,* *inf**]*) – Start Character
            - **line_end** (*int in* *[**-inf**,* *inf**]*) – End Line
            - **char_end** (*int in* *[**-inf**,* *inf**]*) – End Character

    cursor_set(*line*, *\**, *character=0*, *select=False*)
    :   Set cursor by line and (optionally) character index

        Parameters:
        :   - **line** (*int in* *[**0**,* *inf**]*) – Line
            - **character** (*int in* *[**0**,* *inf**]**,* *(**optional**)*) – Character
            - **select** (*boolean**,* *(**optional**)*) – Select when moving the cursor

    as_module()

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type

    region_as_string(*\**, *range=None*)
    :   Parameters:
        :   **range** (*tuple**[**tuple**[**int**,* *int**]**,* *tuple**[**int**,* *int**]**]*) – The region of text to be returned, defaulting to the selection when no range is passed.
            Each int pair represents a line and column: ((start_line, start_column), (end_line, end_column))
            The values match Python’s slicing logic (negative values count backwards from the end, the end value is not inclusive).

        Returns:
        :   The specified region as a string.

        Return type:
        :   str

    region_from_string(*body*, */*, *\**, *range=None*)
    :   Parameters:
        :   - **body** (*str*) – The text to be inserted.
            - **range** (*tuple**[**tuple**[**int**,* *int**]**,* *tuple**[**int**,* *int**]**]*) – The region of text to be returned, defaulting to the selection when no range is passed.
              Each int pair represents a line and column: ((start_line, start_column), (end_line, end_column))
              The values match Python’s slicing logic (negative values count backwards from the end, the end value is not inclusive).