ScriptDocument
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
Une instance ScriptDocument est un proxy du document d'un Editeur de scriptStudio.Il est différent de la LuaSourceContainer ouvert dans l'éditeur en ce qu'il représente l'état éphémère d'un document ouvert, et sa représentation est dans un format plus adapté à la lecture et à l'édition du code que son exécution.En particulier, ScriptDocument reflète toutes les modifications apportées au script ouvert en mode brouillons, que la propriété source ne contient pas.
L'éditeur de scripts lui-même existe et change sur un autre thread que tout DataModel , donc le ScriptDocument réplique l'éditeur de scripts ouvert, mais ce n'est pas l'éditeur ouvert.En raison de la réplication, il y a parfois un léger délai entre le changement du texte dans l'éditeur et la mise à jour du ScriptDocument.Le délai se produit généralement parce que le DataModel est occupé, et il est presque toujours extrêmement petit, mais il existe toujours.
L'existence d'un ScriptDocument indique qu'un document est ouvert dans l'éditeur de scripts.Toutes les instances ScriptDocument ont ScriptEditorService comme parent.Chaque instance adhère aux conventions d'encodage suivantes :
- Tout le texte dans ScriptDocument est encodé en UTF-8.
- Tous les index de ligne sont indexés en 1.
- Tous les index de caractères sont indexés sur 1 et comptent des octets UTF-8, pas des graphèmes, donc la même avertissement de TextBox.CursorPosition s'applique : de nombreux caractères Unicode prennent plus d'un octet.
- Toutes les portées incluent leur position de départ et sont exclusives de leur position finale, donc start == end implique une portée vide.
Toutes les API pour ScriptDocument sont au niveau de sécurité plugin .
Résumé
Méthodes
Renvoie le texte de la ligne spécifiée. Lorsqu'aucun argument n'est fourni, renvoie la ligne de la position du curseur actuel.
Renvoie le nombre de lignes dans le document.
Renvoie l'instance sous-jacente LuaSourceContainer si elle existe, sinon nil .
Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide s'il n'y a pas de sélection.
Renvoie la dernière sélection connue de l'éditeur de scripts dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si l'éditeur de scripts n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .
Obtient la plus grande position du curseur et de l'ancre. Si l'éditeur n'a pas de sélection, elles ont la même valeur.
Obtient la plus petite position de curseur et d'ancre. Si l'éditeur n'a pas de sélection, elles ont la même valeur.
- GetText(startLine : number?,startCharacter : number?,endLine : number?,endCharacter : number?):string
Renvoie du texte de l'éditeur ouvert.
Renvoie les numéros de ligne actuellement affichés dans le changement d'éditeur.
Renvoie si l'éditeur a ou non du texte sélectionné.
Renvoie true si le ScriptDocument représente la barre de commande.
Les demandes que l'éditeur associé à ce document fermer. Produit le fil actuel jusqu'à ce que l'éditeur réponde à la demande.
- EditTextAsync(newText : string,startLine : number,startCharacter : number,endLine : number,endCharacter : number):Tuple
Remplace le texte dans la plage spécifiée à partir de ( startLine, startColumn ) jusqu'à ( endLine, endColumn ) avec le nouveau texte.
- ForceSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.
- RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.
Évènements
- SelectionChanged(positionLine : number,positionCharacter : number,anchorLine : number,anchorCharacter : number):RBXScriptSignal
Se déclenche lorsque le ScriptDocument change, y compris immédiatement après un changement de texte.
S'enflamme lorsque les numéros de ligne affichés dans l'éditeur changent.
Propriétés
Méthodes
GetLine
Renvoie le texte de la ligne spécifiée. Lorsqu'aucun argument n'est fourni, renvoie la ligne de la position du curseur actuel.
Paramètres
Retours
Échantillons de code
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
Renvoie le nombre de lignes dans le document actif.
Retours
Échantillons de code
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
GetScript
Renvoie l'instance sous-jacente LuaSourceContainer si elle existe, sinon nil .
Retours
Échantillons de code
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
Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide s'il n'y a pas de sélection.
Retours
Échantillons de code
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
Renvoie la dernière sélection connue de l'éditeur de scripts dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si l'éditeur de scripts n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .
Retours
CurseurLine, CurseurChar, AnchorLine, AnchorChar.
GetSelectionEnd
Obtient la plus grande position du curseur et de l'ancre. Si l'éditeur n'a pas de sélection, elles ont la même valeur.
Retours
Échantillons de code
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
Obtient la plus petite position de curseur et d'ancre. Si l'éditeur n'a pas de sélection, elles ont la même valeur.
Retours
Échantillons de code
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
Retourne du texte de l'éditeur ouvert. Doit être appelé avec 0, 2 ou 4 arguments :
- Si appelé avec 0 arguments, obtient tout le contenu de l'éditeur ouvert.
- Si appelé avec 2 arguments, obtient le texte du document commençant à ( startLine, startColumn ).
- Si appelé avec 4 arguments, obtient le texte du document commençant à ( startLine, startColumn ) et se terminant à ( endLine, endColumn ).
Paramètres
Retours
Échantillons de code
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
Renvoie les numéros de ligne actuellement affichés dans le changement d'éditeur.L'éditeur affiche les lignes entre startLine et endLine, incluses.La première et la dernière ligne peuvent ne s'afficher qu'en partie.Par exemple, seul le pixel supérieur de la dernière ligne peut être à l'écran.De plus, le pliage du code peut masquer les lignes entre startLine et endLine.
Retours
Échantillons de code
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
Renvoie si l'éditeur a ou non du texte sélectionné.
Retours
Échantillons de code
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
Renvoie true si le ScriptDocument représente la barre de commande. La barre de commande a des règles et des limites spéciales dans cette API :
- Studio crée la barre de commande avant d'exécuter les plugins, donc il ne lance pas toujours l'événement ouvert, bien que il ferme et rouvre à chaque fois que Studio passe entre les modèles de données.
- Vous ne pouvez pas modifier la barre de commande avec EditTextAsync pour des raisons de sécurité.
Retours
Échantillons de code
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
Demandes que l'éditeur associé à ce document fermer.Produit le thread actuel jusqu'à ce que l'éditeur réponde à la demande.Si la fonction réussit, elle renvoie (true, nil).Si la fonction échoue, elle renvoie (false, chaîne) comme description du problème.
Cette fonction ne peut pas fermer la barre de commande.
Retours
Échantillons de code
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
Remplace le texte dans la plage spécifiée à partir de ( startLine, startColumn ) jusqu'à ( endLine, endColumn ) avec newText.Si la portée est vide, alors la fonction insère le texte à ( startLine, startColumn ).Si le curseur texte se trouve dans la plage spécifiée, le curseur se déplace à la position de fin de l'modifier.Sinon, le curseur de texte ne se mouvementpas.Cette fonction renvoie le thread actuel jusqu'à ce qu'il reçoive une réponse de l'éditeur sur l'modifier.
Si la fonction réussit, elle renvoie ( true, nil ).
La fonction lance une erreur si :
- La portée n'est invalide.
- La portée couperait un caractère Unicode, par exemple, remplacerait seulement une partie des octets du caractère Unicode.
- Le newText lui-même contient un UTF-8 non valide.
Si la fonction échoue, elle renvoie (false, string).La chaîne est une description du problème.Le type de défaillance le plus courant est un écart de version.Cela se produit lorsque vous essayez d'appeler EditTextAsync pendant le temps où le ScriptDocument est en désaccord avec le contenu de l'éditeur.Si cela se produit, vous pouvez réessayer l'modifier.
Paramètres
Retours
ForceSetSelectionAsync
Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.Les deux arguments d'ancrage doivent être passés, ou aucun.Si aucun n'est passé, alors chacun d'entre eux est par défaut le même que l'argument curseur correspondant.L'éditeur peut refuser de mettre à jour son curseur si le contenu du texte du document a changé.Contrairement à ScriptDocument:RequestSetSelectionAsync(), l'éditeur ne refusera pas de déplacer son curseur si le curseur s'est déplacé depuis que la demande a été faite.Retourne (vrai, zéro) si le curseur a été mis à jour, et (faux, chaîne) avec une chaîne d'explication s'il n'a pas été mis à jour.Produit le thread actuel jusqu'à ce que l'éditeur réponde.
Paramètres
Retours
Échantillons de code
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
RequestSetSelectionAsync
Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.Les deux arguments d'ancrage doivent être passés, ou aucun.Si aucun n'est passé, alors chacun d'entre eux est par défaut le même que l'argument curseur correspondant.L'éditeur peut refuser de mettre à jour son curseur si le contenu du texte du document a changé ou si le curseur s'est déplacé depuis que la demande a été faite.Retourne (vrai, zéro) si le curseur a été mis à jour, et (faux, chaîne) avec une chaîne d'explication s'il n'a pas été mis à jour.Produit le thread actuel jusqu'à ce que l'éditeur réponde.
Paramètres
Retours
Échantillons de code
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
Évènements
SelectionChanged
Se déclenche lorsque le ScriptDocument change, y compris immédiatement après un changement de texte.
Paramètres
Échantillons de code
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
S'enflamme lorsque les numéros de ligne affichés dans l'éditeur changent. Voir ScriptDocument.GetViewport pour les détails.
Paramètres
Échantillons de code
Demonstrates using ScriptDocument.ViewportChanged to print the start and end line of the script's viewport when it changes.
To run:
- Ensure Output view is open
- Run the below code in the Command Bar
- Scroll up and down in the opened Script window
--!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)