2013-09-27 50 views
1

我想让它在光标或选区(两者或两者之一)在ace编辑器会话中左右移动时,滚动条会滚动以保持光标或textarea中心的选定区域。如何在Ace编辑器中居中选区

有一个名为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} 

命令键绑定,但它有窗户没有按键输入,只是说空。我没有一个mac,所以我不能尝试Ctrl-L,我很好奇它为什么没有窗口的关键输入。

玩过它之后,我意识到它正在工作,它只是居中选择行而不是选择列。那么是否有办法让选择位于中央列和中央行? 我想这是因为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; 
}; 

回答

2

嗯,我想我想通了,下面这段代码工作正常。 :)

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 
+0

标记为已解决。 :) –