如何为 `changes` 包中的 `\replaced` 命令编写 TeXstudio 宏?

如何为 `changes` 包中的 `\replaced` 命令编写 TeXstudio 宏?

我想使用 TeXstudio 宏来简化changes包的使用。

对于\added\deleted,很容易写出相应的宏。

// add
if (!cursor.hasSelection()) {
    editor.replaceSelectedText( "\\added{%|}", {"macro": true} )
}
// delete
if (cursor.hasSelection()) {
    editor.replaceSelectedText( "\\deleted{%< %>}", {"macro": true} )
}

请注意,TeXstudio 支持多个光标/块选择,这两个宏考虑到了该特性。

对于\replaced{}{},我想将选定的内容放在第二个花括号中,同时将光标放在第一个花括号中。

if (cursor.hasSelection()) {
    txt = cursor.selectedText();
    editor.insertSnippet("\\replaced{")
    editor.replaceSelectedText( "%|}{"+txt+"}", {"macro": true} )
}

上面的宏在只有一个游标时效果很好,但在有多个游标时会失败。我希望通过支持多个游标或使其仅在只有一个游标时处于活动状态来提高其安全性。

更新

我找到了一个只操作一个游标的解决方案(见下面的回答)。现在这个问题归结为找到一个支持多个游标的解决方案。

答案1

经过一些尝试,这里是该命令的宏\replaced;该宏仅处理一个光标并忽略其他光标。要点是cursor.*函数仅操作一个光标并editor.selectNothing()清除所有光标。

%SCRIPT
if (cursor.hasSelection()) {
    txt = cursor.selectedText()
    cursor.removeSelectedText()
    editor.selectNothing()
    cursor.insertText("\\replaced{")
    line = cursor.lineNumber()
    column = cursor.columnNumber()
    cursor.insertText("}{"+txt+"}")
    cursor.moveTo(line, column)
}

用户手册没有说明cursor.*操作哪些光标功能;在我的环境中,上述宏操作第一个光标而忽略其他光标。

希望对您有帮助。

相关内容