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 Studio Editeur de script. Il est différent de la LuaSourceContainer ouvert dans l'éditeur dans lequel il représente l'état éphémère d'un ouvert le document, et sa représentation est dans un format qui est plus adapté à la lecture et à l'édition

L'éditeur de scripts lui-même existe et change sur un autre fil que n'importe lequel DataModel , donc le ScriptDocument réplique l'éditeur de Editeur de scriptouvert, mais ce n'est pas l'éditeur ouvert. En raison de la réplication, il y a parfois un léger

L'existence d'un ScriptDocument indique que le document est ouvert dans le Editeur de script. Toutes les instances ScriptDocument ont ScriptEditorService comme parent. Chaque instance adhère aux conventions de suivi suivantes :

  • Tout le texte dans ScriptDocument est codé en UTF-8.
  • Tous les indexes de ligne sont indexés 1.
  • Tous les indexes de personnages sont 1-indexés et comptent des octets UTF-8, pas des грамmes, donc la même avertissement de TextBox.CursorPosition s'applique : de nombreux personnages Unicode prennent plus d'un octet.
  • Toutes les portées incluent leur position de départ et excluent leur position finale, donc start == end suppose 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'il n'y a pas d'argument fourni, renvoie la ligne de la position actuelle de l' curseur.

  • Sécurité des plugins

    Renvoie le nombre de lignes dans le document.

  • Sécurité des plugins

    Retourne la instance de base LuaSourceContainer, si une telle existe, sinon nil.

  • Sécurité des plugins

    Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide si aucune sélection n'est disponible.

  • Sécurité des plugins

    Retourne la dernière sélection du Script Editor dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si le Script Editor n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .

  • Sécurité des plugins

    Obtient la position et l'ancrage de la ancredu curseur. Si l'éditeur n'a pas de sélection, ils sont la même valeur.

  • Sécurité des plugins

    Obtient la position et l'ancrage de la ancredu curseur plus petit. Si l'éditeur n'a pas de sélection, ils sont 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 oui ou non l'éditeur a sélectionné du texte.

  • Sécurité des plugins

    Retourne vrai si le ScriptDocument représente la barre de commande.

  • Rendement
    Sécurité des plugins

    Les demandes que l'éditeur a associées à ce document se fermer. Génère la colonne actuelle 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 tranche spécifiée de ( startLine , startColumn ) à ( endLine , 1> endColumn1> ) 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 sur les 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 sur les 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'il n'y a pas d'argument fourni, renvoie la ligne de la position actuelle de l' curseur.

Paramètres

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

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

Sécurité des plugins

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

Retourne la instance de base LuaSourceContainer, si une telle 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

Sécurité des plugins

Obtient le texte sélectionné dans l'éditeur, ou une chaîne vide si aucune sélection n'est disponible.


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

Sécurité des plugins

Retourne la dernière sélection du Script Editor dans le format : CursorLine, CursorChar, AnchorLine, AnchorChar . Si le Script Editor n'a pas de sélection, CursorLine == AnchorLine et CursorChar == AnchorChar .


Retours

CursorLine, CursorChar, AnchorLine, AnchorChar.

GetSelectionEnd

Sécurité des plugins

Obtient la position et l'ancrage de la ancredu curseur. Si l'éditeur n'a pas de sélection, ils sont 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

Sécurité des plugins

Obtient la position et l'ancrage de la ancredu curseur plus petit. Si l'éditeur n'a pas de sélection, ils sont 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

Sécurité des plugins

Renvoie du texte de l'éditeur ouvert. Il doit être appelé avec 0, 2 ou 4 arguments :

  • Si on l'appelle avec 0 arguments, on obtient le contenu entier de l'éditeur ouvert.
  • Si on l'appelle avec 2 arguments, il obtient le texte du document à partir de ( startLine , startColumn ).
  • Si appelé avec 4 arguments, obtient le texte du document à partir de ( startLine , startColumn ) et se terminant par ( endLine , 1> endColumn1> ).

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

--!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, y compris. La première et dernière ligne peut seulement afficher partiellement. Par exemple, seul le pixel supérieur de la dernière ligne peut être sur l'écran. De plus, le code de pliage 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

Sécurité des plugins

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


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

Sécurité des plugins

Retourne vrai 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, afin qu'il ne ferme pas toujours l'événement ouvert, bien que Studio ferme et réouvre lorsque 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

Rendement
Sécurité des plugins

Les demandes que l'éditeur a associées à ce document se fermer. Génère le fil actuel jusqu'à ce que l'éditeur réponde à la demande. Si la fonction réussit, il renvoie (oui, zéro). Si la fonction échoue, il renvoie (non, chaîne) comme une 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

Rendement
Sécurité des plugins

Remplace le texte dans la tranche spécifiée de ( startLine , startColumn ) à ( endLine , 1> endColumn1>

Si la fonction réussit, il renvoie ( true , nil ).

La fonction lance une erreur si :

  • La portée est invalide.
  • La portée couperait un caractère unicode, par exemple, ne remplacerait que quelques-uns des octets du personnage unicode.
  • Le newText lui-même contient un UTF-8 non valide.

Si la fonctionne échoue, elle renvoie (faux, chaîne). La string est une description du problème. Le type de rupture de version le plus courant est un décalage de version. Cela se produit lorsque vous essayez d'appeler EditTextAsync pendant le temps où le ScriptDocument n'est pas en phase avec le contenu de l'éditeur. Si cela se produit, vous pouvez réessayer l'modifier.

Paramètres

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

Retours

ForceSetSelectionAsync

Rendement
Sécurité des plugins

Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument. Les deux arguments d'ancrage doivent être passés, ou aucun. Si aucun n'est passé, alors ils s'ajustent tous les deux à être les mêmes que l'argument de curseur correspondant. L'éditeur peut refuser de met

Paramètres

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

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

MultiEditTextAsync

Rendement
Sécurité des plugins

Paramètres

edits: Array

Retours

RequestSetSelectionAsync

Rendement
Sécurité des plugins

Demande à l'éditeur de définir sa sélection de curseur sur les valeurs d'argument. Les deux arguments d'ancrage doivent être passés, ou aucun. Si aucun n'est passé, alors ils s'appliquent tous les deux par défaut à être le même que l'argument de curseur correspondant. L'éditeur peut refuser de mettre à jour son curseur si le contenu du texte du document a changé, ou si le curseur a déplac

Paramètres

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

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

Sécurité des plugins

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

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

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

Paramètres

startLine: number
endLine: number

Échantillons de code

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)