在 TeXstudio 脚本中移动编辑器视口

在 TeXstudio 脚本中移动编辑器视口

我正在使用来自的“查找下一个切片命令”TeXstudio 脚本TeXstudio 维基

该脚本将编辑器的光标移动到下一个分段命令,即下一个\section{}\subsection{}等。

脚本运行完美,运行脚本时光标会移动到正确的位置。但是,编辑器的视口(即正在查看的文档部分)不会更新。这意味着下一节中更新的光标位置可能位于正在查看的文档部分之外。如果通过箭头键移动光标,视图会更新。

有没有办法在脚本中更新编辑器的视口,以将视图移动到新的光标位置?我无法在脚本部分TeXstudio 用户手册。

我正在运行 TeXStudio 2.11.2 (hg 6191:c01fb289a5fe)。脚本是:

%SCRIPT
commands = ["\\part", 
            "\\chapter",
            "\\section",
            "\\subsection",
            "\\subsubsection",
            "\\paragraph"]
while (!cursor.atEnd()) {
    cursor.movePosition(1, cursorEnums.NextWord)
    if (cursor.nextChar() != '\\'.charCodeAt(0))
        continue;
    cursor.movePosition(1, cursorEnums.NextCharacter, cursorEnums.KeepAnchor);
    cursor.movePosition(1, cursorEnums.EndOfWord, cursorEnums.KeepAnchor);
    if (commands.indexOf(cursor.selectedText()) >= 0) {
        cursor.setColumnNumber(cursor.anchorColumnNumber())
        break;
    }
}

答案1

选项1:

你需要editor.scrollToFirstLine(cursor.lineNumber())。这将设置第一的编辑器窗口的行是包含\sectionetc. 命令的行。如果您希望该行位于窗口的中心,您可以尝试调整值,例如:editor.scrollToFirstLine(cursor.lineNumber()-15)

gif跳转部分

%SCRIPT
commands = ["\\part", 
            "\\chapter",
            "\\section",
            "\\subsection",
            "\\subsubsection",
            "\\paragraph"]
while (!cursor.atEnd()) {
    cursor.movePosition(1, cursorEnums.NextWord)
    if (cursor.nextChar() != '\\'.charCodeAt(0))
        continue;
    cursor.movePosition(1, cursorEnums.NextCharacter, cursorEnums.KeepAnchor);
    cursor.movePosition(1, cursorEnums.EndOfWord, cursorEnums.KeepAnchor);
    if (commands.indexOf(cursor.selectedText()) >= 0) {
        cursor.setColumnNumber(cursor.anchorColumnNumber())
        editor.scrollToFirstLine(cursor.lineNumber())
        break;
    }
}

选项 2

另外,还有editor.ensureCursorVisible()命令,但它通常会将光标(和编辑器视图)设置在屏幕底部附近。所以在我看来,它比上面的选项 1 稍微没那么有用。

gif再次跳转部分

%SCRIPT
commands = ["\\part", 
"\\chapter",
"\\section",
"\\subsection",
"\\subsubsection",
"\\paragraph"]
while (!cursor.atEnd()) {
    cursor.movePosition(1, cursorEnums.NextWord)
    if (cursor.nextChar() != '\\'.charCodeAt(0))
    continue;
    cursor.movePosition(1, cursorEnums.NextCharacter, cursorEnums.KeepAnchor);
    cursor.movePosition(1, cursorEnums.EndOfWord, cursorEnums.KeepAnchor);
    editor.ensureCursorVisible()
    if (commands.indexOf(cursor.selectedText()) >= 0) {
        cursor.setColumnNumber(cursor.anchorColumnNumber())
        break;
    }
}

相关内容