ScriptDocument
*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.
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
Gibt den Text der angegebenen Zeile zurück. Wenn kein Argent eingegeben wird, gibt es die Zeile der aktuellen Cursor-Position zurück.
Zurückgibt die Anzahl der Zeilen in der Dokument.
Gibt die unterliegende LuaSourceContainer Instanz zurück, wenn eine vorhanden ist, sonst nil .
Erhalte den Text, der im Editor ausgewählt ist, oder eine leere Zeichenfolge, wenn es keine Auswahl gibt.
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.
Erhält die größere der Cursor-Position und des Anker. Wenn der Editor keine Auswahl hat, ist der Wert dieselben.
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
Kehrt Text aus dem offenen Editor zurück.
Kehre die derzeit in der Zeile angezeigten Zeilennummern im Editor-Änderung zurück.
Gibt zurück, ob oder nicht der Editor irgendwelchen Text ausgewählt hat.
Kehrt wahr zurück, wenn das ScriptDocument die Befehlsleiste repräsentiert.
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
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
Bittet den Editor, seine Cursor-Auswahl an die Argumente zu setzen.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Bittet den Editor, seine Cursor-Auswahl an die Argumente zu setzen.
Ereignisse
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Feuert, wenn sich das Skriptdokument ändert, einschließlich sofort nach einem Text-Change.
Feuert, wenn die angezeigten Zeilennummern im Editor geändert werden.
Eigenschaften
Methoden
GetLine
Gibt den Text der angegebenen Zeile zurück. Wenn kein Argent eingegeben wird, gibt es die Zeile der aktuellen Cursor-Position zurück.
Parameter
Rückgaben
Code-Beispiele
--!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
Gibt die Anzahl der Zeilen im aktiven Dokument zurück.
Rückgaben
Code-Beispiele
--!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
GetScript
Gibt die unterliegende LuaSourceContainer Instanz zurück, wenn eine vorhanden ist, sonst nil .
Rückgaben
Code-Beispiele
--!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
Erhalte den Text, der im Editor ausgewählt ist, oder eine leere Zeichenfolge, wenn es keine Auswahl gibt.
Rückgaben
Code-Beispiele
--!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
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
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
--!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
Erhalten Sie die kleinere der Mausposition und des Anker. Wenn der Editor keine Auswahl hat, sind sie die gleichen Werte.
Rückgaben
Code-Beispiele
--!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
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
Rückgaben
Code-Beispiele
--!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
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
--!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
Gibt zurück, ob oder nicht der Editor irgendwelchen Text ausgewählt hat.
Rückgaben
Code-Beispiele
--!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
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
--!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
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
--!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
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
Rückgaben
ForceSetSelectionAsync
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
Rückgaben
Code-Beispiele
--!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
RequestSetSelectionAsync
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
Rückgaben
Code-Beispiele
--!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
Feuert, wenn sich das Skriptdokument ändert, einschließlich sofort nach einem Text-Change.
Parameter
Code-Beispiele
--!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
Feuert, wenn die angezeigten Zeilennummern im Editor geändert werden. Siehe ScriptDocument.GetViewport für Details.
Parameter
Code-Beispiele
--!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)