ScriptDocument

Veraltete anzeigen

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Nicht erstellbar
Nicht repliziert

Eine ScriptDocument Instanz ist ein Proxy des Dokumentes eines Studio-Skript-Editors. Sie ist anders als die LuaSourceContainer , die im Editor in dem öffnen, das sie den ephemeral Zustand eines offenen Dokumentes darstellt, und ihre Repräsentation in einem Format ist

Der Skript-Editor selbst existiert und ändert sich auf einem anderen Thread als irgendein DataModel , so dass die ScriptDocument Replikate den offenen Skript-Editor, aber es ist nicht der offene Editor. Aufgrund der Replikation gibt es manchmal eine leichte Verzögerung zwischen dem Ändern des Textes im

Die Existenz eines ScriptDocument zeigt an, dass ein Dokument im Skript-Editor geöffnet ist. Alle ScriptDocument Instanzen haben ScriptEditorService als übergeordnetes Teil. Jede Instanz hält sich an die folgenden Encodings-Regeln:

  • Alle Text in ScriptDocument ist in UTF-8 codiert.
  • Alle Zeilennamen sind 1-indexed.
  • Alle Charakterindizes sind 1-indexed und zählen UTF-8 Bytes, nicht Grapheme, so dass dieselbe Warnung von TextBox.CursorPosition gilt: viele Unicode-Zeichen nehmen mehr als ein Byte.
  • Alle Reichweiten sind inklusiv ihrer Startposition und exklusiv ihrer Endposition, so dass Start == Endung eine leere Reichweite impliziert.

Alle APIs für ScriptDocument sind auf Plugin-Sicherheitsniveau .

Zusammenfassung

Methoden

  • GetLine(lineIndex : number?):string
    Plugin-Sicherheit

    Gibt den Text der angegebenen Zeile zurück. Wenn kein Argent eingegeben wird, gibt es die Zeile der aktuellen Cursor-Position zurück.

  • Plugin-Sicherheit

    Zurückgibt die Anzahl der Zeilen in der Dokument.

  • Plugin-Sicherheit

    Gibt die unterliegende LuaSourceContainer Instanz zurück, wenn eine vorhanden ist, sonst nil .

  • Plugin-Sicherheit

    Erhalte den Text, der im Editor ausgewählt ist, oder eine leere Zeichenfolge, wenn es keine Auswahl gibt.

  • Plugin-Sicherheit

    Gibt die letzte bekannte Auswahl des Skript-Editors im Format: CursorLine, CursorChar, AnchorLine, AnchorChar zurück. Wenn der Skript-Editor keine Auswahl hat, CursorLine == AnchorLine und CursorChar == AnchorChar.

  • Plugin-Sicherheit

    Erhält die größere der Cursor-Position und des Anker. Wenn der Editor keine Auswahl hat, ist der Wert dieselben.

  • Plugin-Sicherheit

    Erhalten Sie die kleinere der Mausposition und des Anker. Wenn der Editor keine Auswahl hat, sind sie die gleichen Werte.

  • GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
    Plugin-Sicherheit

    Kehrt Text aus dem offenen Editor zurück.

  • Plugin-Sicherheit

    Kehre die derzeit in der Zeile angezeigten Zeilennummern im Editor-Änderung zurück.

  • Plugin-Sicherheit

    Gibt zurück, ob oder nicht der Editor irgendwelchen Text ausgewählt hat.

  • Plugin-Sicherheit

    Kehrt wahr zurück, wenn das ScriptDocument die Befehlsleiste repräsentiert.

  • Angehalten
    Plugin-Sicherheit

    Anfragen, die der Editor mit diesem Dokument in Verbindung bringt, schließen sich. Yields den aktuellen Thread, bis der Editor auf die Anfrage reagiert.

  • EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
    Angehalten
    Plugin-Sicherheit

    Ersetzt den Text in der angegebenen Reihe von ( startLine , startColumn ) zu ( endLine , 1> endColumn1> ) mit dem neuenText.

  • ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Angehalten
    Plugin-Sicherheit

    Bittet den Editor, seine Cursor-Auswahl an die Argumente zu setzen.

  • Angehalten
    Plugin-Sicherheit
  • RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Angehalten
    Plugin-Sicherheit

    Bittet den Editor, seine Cursor-Auswahl an die Argumente zu setzen.

Ereignisse

Eigenschaften

Methoden

GetLine

Plugin-Sicherheit

Gibt den Text der angegebenen Zeile zurück. Wenn kein Argent eingegeben wird, gibt es die Zeile der aktuellen Cursor-Position zurück.

Parameter

lineIndex: number
Standardwert: "nil"

Rückgaben

Code-Beispiele

ScriptDocument.SelectionChanged and ScriptDocument:GetLine()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end

GetLineCount

Plugin-Sicherheit

Gibt die Anzahl der Zeilen im aktiven Dokument zurück.


Rückgaben

Code-Beispiele

ScriptDocument:GetLineCount()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local lineCount = scriptDocument:GetLineCount()
print(`The script has {lineCount} lines!`)
else
print("No scripts open")
end
Plugin-Sicherheit

Gibt die unterliegende LuaSourceContainer Instanz zurück, wenn eine vorhanden ist, sonst nil .


Rückgaben

Code-Beispiele

ScriptDocument:GetScript()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local openScript = scriptDocument:GetScript()
print(`Currently open script: {openScript:GetFullName()}`)
else
print("No scripts open")
end

GetSelectedText

Plugin-Sicherheit

Erhalte den Text, der im Editor ausgewählt ist, oder eine leere Zeichenfolge, wenn es keine Auswahl gibt.


Rückgaben

Code-Beispiele

ScriptDocument:HasSelectedText() and :GetSelectedText()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end

GetSelection

Plugin-Sicherheit

Gibt die letzte bekannte Auswahl des Skript-Editors im Format: CursorLine, CursorChar, AnchorLine, AnchorChar zurück. Wenn der Skript-Editor keine Auswahl hat, CursorLine == AnchorLine und CursorChar == AnchorChar.


Rückgaben

CursorLine, CursorChar, AnchorLine, AnchorChar.

GetSelectionEnd

Plugin-Sicherheit

Erhält die größere der Cursor-Position und des Anker. Wenn der Editor keine Auswahl hat, ist der Wert dieselben.


Rückgaben

Code-Beispiele

ScriptDocument:GetSelectionStart() and :GetSelectionEnd()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end

GetSelectionStart

Plugin-Sicherheit

Erhalten Sie die kleinere der Mausposition und des Anker. Wenn der Editor keine Auswahl hat, sind sie die gleichen Werte.


Rückgaben

Code-Beispiele

ScriptDocument:GetSelectionStart() and :GetSelectionEnd()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local startLine, startCharacter = scriptDocument:GetSelectionStart()
local endLine, endCharacter = scriptDocument:GetSelectionEnd()
print(`Selection start: Line {startLine}, Char {startCharacter}`)
print(`Selection end: Line {endLine}, Char {endCharacter}`)
else
print("No scripts open")
end

GetText

Plugin-Sicherheit

Gibt Text aus dem offenen Editor zurück. Muss mit 0, 2 oder 4 Argumenten aufgerufen werden:

  • Wenn mit 0 Argumenten aufgerufen wird, wird der gesamte Inhalt des offenen Editors abgerufen.
  • Wenn mit 2 Argumenten aufgerufen wird, erhält der Text des Dokuments den Text, der mit ( startLine , startColumn ) beginnt.
  • Wenn mit 4 Argumenten aufgerufen wird, erhält der Text des Dokumentes beginnend bei ( startLine , startColumn ) und endet bei( endLine , 1> endColumn1> ).

Parameter

startLine: number
Standardwert: "nil"
startCharacter: number
Standardwert: "nil"
endLine: number
Standardwert: "nil"
endCharacter: number
Standardwert: "nil"

Rückgaben

Code-Beispiele

ScriptDocument:GetText()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local text = scriptDocument:GetText()
print(`Script contents: {text}`)
else
print("No scripts open")
end

GetViewport

Plugin-Sicherheit

Kehre die derzeit im Editor angezeigten Zeilennummern in der Zeilennummer Änderung zurück. Der Editor zeigt die Zeilen zwischen startLine und endLine, einschließlich. Die erste und letzte Zeile kann nur teilweise angezeigt werden. Zum Beispiel kann nur die obere Pixel der letzten Zeile auf dem Bildschirm angezeigt werden. Darüber hinaus kann Code-Folding Zeilen zwischen startLine und endLine ausblenden.


Rückgaben

Code-Beispiele

ScriptDocument:GetViewport

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
local firstLine, lastLine = scriptDocument:GetViewport()
print(`Currently viewing lines {firstLine} to {lastLine}`)
else
print("No scripts open")
end

HasSelectedText

Plugin-Sicherheit

Gibt zurück, ob oder nicht der Editor irgendwelchen Text ausgewählt hat.


Rückgaben

Code-Beispiele

ScriptDocument:HasSelectedText() and :GetSelectedText()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function()
if scriptDocument:HasSelectedText() then
local selectedText = scriptDocument:GetSelectedText()
print(`Currently selected text: {selectedText}`)
else
print("No text currently selected")
end
end)
else
print("No scripts open")
end

IsCommandBar

Plugin-Sicherheit

Kehrt wahr zurück, wenn das ScriptDocument die Befehlsleiste repräsentiert. Die Befehlsleiste hat in dieser API besondere Regeln und Einschränkungen:

  • Studio erstellt die Befehlsleiste, bevor es Plugins ausführt, damit es nicht immer das geöffnete Ereignis feuert, obwohl es geschlossen und wieder geöffnet wird, wenn es zwischen DataModels wechselt.
  • Du kannst die Befehlsleiste nicht mit EditTextAsync bearbeiten, aus Sicherheitsgründen.

Rückgaben

Code-Beispiele

ScriptDocument:IsCommandBar()

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if document:IsCommandBar() then
print("Command bar document:", document)
end
end

CloseAsync

Angehalten
Plugin-Sicherheit

Anfragen, die der Editor mit diesem Dokument verbunden hat, schließen sich. Yields den aktuellen Thread, bis der Editor auf die Anfrage antwortet. Wenn die Funktion erfolgreich ist, gibt sie (true, nil) zurück. Wenn die Funktion fehlschlägt, gibt sie (false, String) als Beschreibung des Problems zurück.

Diese Funktion kann die Befehlsleiste nicht schließen.


Rückgaben

Code-Beispiele

ScriptDocument:CloseAsync

--!nocheck
-- Run the following code in the Command Bar
local ScriptEditorService = game:GetService("ScriptEditorService")
local documents = ScriptEditorService:GetScriptDocuments()
local scriptDocument
-- Find the first open script document
for _, document in documents do
-- The Command Bar can't be closed, so don't select it
if not document:IsCommandBar() then
scriptDocument = document
break
end
end
if scriptDocument then
local success, err = scriptDocument:CloseAsync()
if success then
print(`Closed {scriptDocument.Name}`)
else
warn(`Failed to close {scriptDocument.Name} because: {err}`)
end
else
print("No open scripts")
end

EditTextAsync

Angehalten
Plugin-Sicherheit

Ersetzt den Text in der angegebenen Reihe von ( startLine , startColumn ) zu ( endLine , 1> endColumn1>

Wenn die Funktion erfolgreich ist, gibt sie ( true , nil ) zurück.

Die Funktion einen Fehler wirft, wenn:

  • Die Reichweite ist ungültig.
  • Die Reichweite würde einen unicode-Charakter schneiden, zum Beispiel nur einige der Bytes des unicode-Charakters ersetzen.
  • Das newText selbst enthält ungültiges UTF-8.

Wenn die Funktion fehlscht, gibt sie (false, string) zurück. Die Strings ist eine Beschreibung des Problems. Der häufigste Fehlertyp ist eine Version des Missverständnisses. Dies tritt auf, wenn Sie versuchen, EditTextAsync während der Zeit, in der der ScriptDocument mit den Inhalten des bearbeitennicht in Einklang steht. Wenn dies geschieht, können Sie den Editor erneut versuchen.

Parameter

newText: string
startLine: number
startCharacter: number
endLine: number
endCharacter: number

Rückgaben

ForceSetSelectionAsync

Angehalten
Plugin-Sicherheit

Bittet den Editor, seine Cursor-Auswahl an die Argumente zu setzen. Beide Anker-Argumente müssen übergeben werden, oder nicht. Wenn keines übergeben wird, dann wird es standardmäßig auf das entsprechende Cursor-Argument gesetzt. Der Editor lehnt nicht ab, sein Cursor zu aktualisieren, wenn der Text-Inhalt des D

Parameter

cursorLine: number
cursorCharacter: number
anchorLine: number
Standardwert: "nil"
anchorCharacter: number
Standardwert: "nil"

Rückgaben

Code-Beispiele

ScriptDocument:ForceSetSelectionAsync()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:ForceSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end

MultiEditTextAsync

Angehalten
Plugin-Sicherheit

Parameter

edits: Array

Rückgaben

RequestSetSelectionAsync

Angehalten
Plugin-Sicherheit

Bittet den Editor, seine Cursor-Auswahl auf die Argumente zu setzen. Beide Anker-Argumente müssen übergeben werden, oder nicht. Wenn keines übergeben wird, dann wird der Cursor standardmäßig auf das entsprechende Cursor-Argument gesetzt. Der Editor lehnt die Aktualisierung seines Cursors ab, wenn der Text-Inhalt des Dokuments geändert wurde, oder der Cursor seit der Anfrage bewegt wurde. Wird nichts ge

Parameter

cursorLine: number
cursorCharacter: number
anchorLine: number
Standardwert: "nil"
anchorCharacter: number
Standardwert: "nil"

Rückgaben

Code-Beispiele

ScriptDocument:RequestSetSelectionAsync()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
-- Get the text on the cursor's current line
local cursorLine = scriptDocument:GetSelection()
local lineText = scriptDocument:GetLine(cursorLine)
-- Force select the entire line of text
local success, err = scriptDocument:RequestSetSelectionAsync(cursorLine, 1, cursorLine, #lineText + 1)
if success then
print("Set selection!")
else
print(`Failed to set selection because: {err}`)
end
else
print("No scripts open")
end

Ereignisse

SelectionChanged

Plugin-Sicherheit

Feuert, wenn sich das Skriptdokument ändert, einschließlich sofort nach einem Text-Change.

Parameter

positionLine: number
positionCharacter: number
anchorLine: number
anchorCharacter: number

Code-Beispiele

ScriptDocument.SelectionChanged and ScriptDocument:GetLine()

--!nocheck
-- Run the following code in the Command Bar while a script is open
local ScriptEditorService = game:GetService("ScriptEditorService")
local function getFirstOpenDocument()
local documents = ScriptEditorService:GetScriptDocuments()
for _, document in documents do
if not document:IsCommandBar() then
return document
end
end
return nil
end
local scriptDocument = getFirstOpenDocument()
if scriptDocument then
scriptDocument.SelectionChanged:Connect(function(positionLine, positionCharacter, anchorLine, anchorCharacter)
print(`Selected: Line {positionLine}, Char {positionCharacter}`)
print(`Anchor: Line {anchorLine}, Char {anchorCharacter}`)
local lineText = scriptDocument:GetLine(positionLine)
print(`Selected line text: {lineText}`)
end)
else
print("No scripts open")
end

ViewportChanged

Plugin-Sicherheit

Feuert, wenn die angezeigten Zeilennummern im Editor geändert werden. Siehe ScriptDocument.GetViewport für Details.

Parameter

startLine: number
endLine: number

Code-Beispiele

Connecting to ScriptDocument.ViewportChanged

--!nocheck
--[[
To run:
1. Ensure Output view is open
2. Run the below code in the Command Bar
3. Scroll up and down in the opened Script window
Print statements from the ViewportChanged event will appear in the Output
]]
local Workspace = game:GetService("Workspace")
local ScriptEditorService = game:GetService("ScriptEditorService")
-- Create text that spans many lines
local dummyText = string.rep("-- Dummy Text\n", 60)
-- Create a script containing the dummy text and open it
local otherScript = Instance.new("Script")
otherScript.Source = dummyText
otherScript.Parent = Workspace
local success, err = ScriptEditorService:OpenScriptDocumentAsync(otherScript)
if not success then
warn(`Failed to open script because: {err}`)
return
end
-- Get a reference to the opened script
local scriptDocument = ScriptEditorService:FindScriptDocument(otherScript)
local function onViewportChanged(startLine: number, endLine: number)
print(`Script Viewport Changed - startLine: {startLine}, endLine: {endLine}`)
end
-- Connect the ViewportChanged event to the function above that prints the start and end line of the updated viewport
scriptDocument.ViewportChanged:Connect(onViewportChanged)