2013-09-27 2 views
1

나는 커서 또는 선택 (하나 또는 둘 모두)이 에이스 편집기 세션에서 왼쪽에서 오른쪽으로 움직일 때 스크롤 막대를 스크롤하여 커서 또는 텍스트 영역의 가운데에있는 선택된 영역.에이스 편집기에서 선택을 가운데에 맞추는 방법

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} 

라는 명령에 대한 키 바인딩이 있지만 윈도우에 대한 키 입력이 없습니다. 나는 Ctrl-L을 시도 할 수 없기 때문에 Mac을 가지고 있지 않으며 왜 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; 
}; 

답변

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

해결 방법으로 표시. :) –

관련 문제