如何在 Ace 编辑器中居中选择



我试图使光标或选择(其中一个或两个(在 ace-editor 会话中左右移动时,滚动条滚动以保持光标或选定区域位于文本区域的中心。

有一个名为 centerSelection(( 的函数

this.centerSelection = function() {
    var range = this.getSelectionRange();
    var pos = {
        row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2),
        column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2)
    }
    this.renderer.alignCursor(pos, 0.5); };

"尝试将当前所选内容居中显示在屏幕上"。

这听起来像我想要的,但它似乎没有做任何事情。

还有一个名为"CenterSelection"的命令的键绑定

{
name: "centerselection",
bindKey: bindKey(null, "Ctrl-L"),
exec: function(editor) { editor.centerSelection(); },
readOnly: true}

但它没有 Windows 的键输入,只是说 null。我没有Mac,所以我不能尝试Ctrl-L,我很好奇为什么它也没有Windows的键输入。

再玩了一会儿后,我意识到它正在工作,它只是将选择行居中而不是选择列。那么有没有办法让选择位于中心列和中心行?我认为这是因为alignCursor函数仅对齐光标行而不是列

this.alignCursor = function(cursor, alignment) {
    if (typeof cursor == "number")
        cursor = {row: cursor, column: 0};
    var pos = this.$cursorLayer.getPixelPosition(cursor);
    var h = this.$size.scrollerHeight - this.lineHeight;
    var offset = pos.top - h * (alignment || 0);
    this.session.setScrollTop(offset);
    return offset;
};

好吧,我想我想通了,下面的代码工作正常。 :)

var cursorLeft = editor.renderer.$cursorLayer.getPixelPosition(0).left;
//gets distance between cursor and left side of textarea in pixels
var scrollerWidth = editor.renderer.$size.scrollerWidth;
//gets the width of the text area (that can be seen)
editor.renderer.scrollToX(cursorLeft - scrollerWidth/2);
//moves the scroller so that the left side i at the same point as the cursor minus half the width of the area that can be seen

相关内容

  • 没有找到相关文章

最新更新