ScriptDocument

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Non répliqué

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

  • GetLine(lineIndex : number?):string
    Sécurité des plugins

    Renvoie le texte de la ligne spécifiée. Lorsqu'aucun argument n'est fourni, renvoie la ligne de la position du curseur actuel.

  • Sécurité des plugins

    Renvoie le nombre de lignes dans le document.

  • Sécurité des plugins

    Renvoie l'instance sous-jacente LuaSourceContainer si elle existe, sinon nil .

  • Sécurité des plugins

    Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide s'il n'y a pas de sélection.

  • Sécurité des plugins

    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 .

  • Sécurité des plugins

    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.

  • Sécurité des plugins

    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
    Sécurité des plugins

    Renvoie du texte de l'éditeur ouvert.

  • Sécurité des plugins

    Renvoie les numéros de ligne actuellement affichés dans le changement d'éditeur.

  • Sécurité des plugins

    Renvoie si l'éditeur a ou non du texte sélectionné.

  • Sécurité des plugins

    Renvoie true si le ScriptDocument représente la barre de commande.

  • Rendement
    Sécurité des plugins

    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
    Rendement
    Sécurité des plugins

    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
    Rendement
    Sécurité des plugins

    Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.

  • Rendement
    Sécurité des plugins
  • RequestSetSelectionAsync(cursorLine : number,cursorCharacter : number,anchorLine : number?,anchorCharacter : number?):Tuple
    Rendement
    Sécurité des plugins

    Demande à l'éditeur de définir sa sélection de curseur aux valeurs d'argument.

Évènements

Propriétés

Méthodes

GetLine

Sécurité des plugins

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

lineIndex: number
Valeur par défaut : "nil"

Retours

Échantillons de code

ScriptDocument.SelectionChanged and ScriptDocument:GetLine()

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

Sécurité des plugins

Renvoie le nombre de lignes dans le document actif.


Retours

Échantillons de code

ScriptDocument:GetLineCount()

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
Sécurité des plugins

Renvoie l'instance sous-jacente LuaSourceContainer si elle existe, sinon nil .


Retours

Échantillons de code

ScriptDocument:GetScript()

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

Sécurité des plugins

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()

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

Sécurité des plugins

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

Sécurité des plugins

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()

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

Sécurité des plugins

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()

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

Sécurité des plugins

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

startLine: number
Valeur par défaut : "nil"
startCharacter: number
Valeur par défaut : "nil"
endLine: number
Valeur par défaut : "nil"
endCharacter: number
Valeur par défaut : "nil"

Retours

Échantillons de code

ScriptDocument:GetText()

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

Sécurité des plugins

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

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

Sécurité des plugins

Renvoie si l'éditeur a ou non du texte sélectionné.


Retours

Échantillons de code

ScriptDocument:HasSelectedText() and :GetSelectedText()

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

Sécurité des plugins

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()

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

Rendement
Sécurité des plugins

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

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

Rendement
Sécurité des plugins

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

newText: string
Valeur par défaut : ""
startLine: number
Valeur par défaut : ""
startCharacter: number
Valeur par défaut : ""
endLine: number
Valeur par défaut : ""
endCharacter: number
Valeur par défaut : ""

Retours

ForceSetSelectionAsync

Rendement
Sécurité des plugins

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

cursorLine: number
Valeur par défaut : ""
cursorCharacter: number
Valeur par défaut : ""
anchorLine: number
Valeur par défaut : "nil"
anchorCharacter: number
Valeur par défaut : "nil"

Retours

Échantillons de code

ScriptDocument:ForceSetSelectionAsync()

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

Rendement
Sécurité des plugins

Paramètres

edits: Array
Valeur par défaut : ""

Retours

RequestSetSelectionAsync

Rendement
Sécurité des plugins

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

cursorLine: number
Valeur par défaut : ""
cursorCharacter: number
Valeur par défaut : ""
anchorLine: number
Valeur par défaut : "nil"
anchorCharacter: number
Valeur par défaut : "nil"

Retours

Échantillons de code

ScriptDocument:RequestSetSelectionAsync()

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

Sécurité des plugins

Se déclenche lorsque le ScriptDocument change, y compris immédiatement après un changement de texte.

Paramètres

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

Échantillons de code

ScriptDocument.SelectionChanged and ScriptDocument:GetLine()

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écurité des plugins

S'enflamme lorsque les numéros de ligne affichés dans l'éditeur changent. Voir ScriptDocument.GetViewport pour les détails.

Paramètres

startLine: number
endLine: number

Échantillons de code

Demonstrates using ScriptDocument.ViewportChanged to print the start and end line of the script's viewport when it changes.

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
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)