mirror of
https://github.com/atom/atom.git
synced 2026-01-23 13:58:08 -05:00
Support selecting editor lines from the gutter
Mouse events that occur in the gutter are forwarded to the rendered lines with the y-coordinate translated to be the leftmost pixel of the editor to simulate the event originating from column 0 of the current line row. Closes #287
This commit is contained in:
@@ -2225,21 +2225,44 @@ describe "Editor", ->
|
||||
runs ->
|
||||
expect(editor.getText()).toBe(originalPathText)
|
||||
|
||||
describe "when clicking a gutter line", ->
|
||||
describe "when clicking in the gutter", ->
|
||||
beforeEach ->
|
||||
rootView.attachToDom()
|
||||
editor.attachToDom()
|
||||
|
||||
it "moves the cursor to the start of the selected line", ->
|
||||
expect(editor.getCursorScreenPosition()).toEqual [0,0]
|
||||
editor.gutter.find(".line-number:eq(1)").trigger 'click'
|
||||
expect(editor.getCursorScreenPosition()).toEqual [1,0]
|
||||
describe "when single clicking", ->
|
||||
it "moves the cursor to the start of the selected line", ->
|
||||
expect(editor.getCursorScreenPosition()).toEqual [0,0]
|
||||
event = $.Event("mousedown")
|
||||
event.pageY = editor.gutter.find(".line-number:eq(1)").offset().top
|
||||
event.originalEvent = {detail: 1}
|
||||
editor.gutter.find(".line-number:eq(1)").trigger event
|
||||
expect(editor.getCursorScreenPosition()).toEqual [1,0]
|
||||
|
||||
it "selects to the start of the selected line when shift is pressed", ->
|
||||
expect(editor.getSelection().getScreenRange()).toEqual [[0,0], [0,0]]
|
||||
event = $.Event("click")
|
||||
event.shiftKey = true
|
||||
editor.gutter.find(".line-number:eq(1)").trigger event
|
||||
expect(editor.getSelection().getScreenRange()).toEqual [[0,0], [1,0]]
|
||||
describe "when shift-clicking", ->
|
||||
it "selects to the start of the selected line", ->
|
||||
expect(editor.getSelection().getScreenRange()).toEqual [[0,0], [0,0]]
|
||||
event = $.Event("mousedown")
|
||||
event.pageY = editor.gutter.find(".line-number:eq(1)").offset().top
|
||||
event.originalEvent = {detail: 1}
|
||||
event.shiftKey = true
|
||||
editor.gutter.find(".line-number:eq(1)").trigger event
|
||||
expect(editor.getSelection().getScreenRange()).toEqual [[0,0], [1,0]]
|
||||
|
||||
describe "when mousing down and then moving across multiple lines before mousing up", ->
|
||||
it "selects the lines", ->
|
||||
mousedownEvent = $.Event("mousedown")
|
||||
mousedownEvent.pageY = editor.gutter.find(".line-number:eq(1)").offset().top
|
||||
mousedownEvent.originalEvent = {detail: 1}
|
||||
editor.gutter.find(".line-number:eq(1)").trigger mousedownEvent
|
||||
|
||||
mousemoveEvent = $.Event("mousemove")
|
||||
mousemoveEvent.pageY = editor.gutter.find(".line-number:eq(5)").offset().top
|
||||
mousemoveEvent.originalEvent = {detail: 1}
|
||||
editor.gutter.find(".line-number:eq(5)").trigger mousemoveEvent
|
||||
|
||||
$(document).trigger 'mouseup'
|
||||
|
||||
expect(editor.getSelection().getScreenRange()).toEqual [[1,0], [5,30]]
|
||||
|
||||
describe "when clicking below the last line", ->
|
||||
beforeEach ->
|
||||
|
||||
@@ -385,7 +385,7 @@ class Editor extends View
|
||||
@destroyFold($(e.currentTarget).attr('fold-id'))
|
||||
false
|
||||
|
||||
@renderedLines.on 'mousedown', (e) =>
|
||||
onMouseDown = (e) =>
|
||||
clickCount = e.originalEvent.detail
|
||||
|
||||
screenPosition = @screenPositionFromMouseEvent(e)
|
||||
@@ -403,6 +403,8 @@ class Editor extends View
|
||||
|
||||
@selectOnMousemoveUntilMouseup()
|
||||
|
||||
@renderedLines.on 'mousedown', onMouseDown
|
||||
|
||||
@on "textInput", (e) =>
|
||||
@insertText(e.originalEvent.data)
|
||||
false
|
||||
@@ -419,6 +421,10 @@ class Editor extends View
|
||||
@gutter.widthChanged = (newWidth) =>
|
||||
@scrollView.css('left', newWidth + 'px')
|
||||
|
||||
@gutter.on 'mousedown', (e) =>
|
||||
e.pageX = @renderedLines.offset().left
|
||||
onMouseDown(e)
|
||||
|
||||
@subscribe syntax, 'grammars-loaded', =>
|
||||
@reloadGrammar()
|
||||
for session in @editSessions
|
||||
|
||||
@@ -23,13 +23,6 @@ class Gutter extends View
|
||||
highlightLines = => @highlightLines()
|
||||
editor.on 'cursor:moved', highlightLines
|
||||
editor.on 'selection:changed', highlightLines
|
||||
@on 'click', '.line-number', (e) =>
|
||||
row = parseInt($(e.target).text()) - 1
|
||||
position = new Point(row, 0)
|
||||
if e.shiftKey
|
||||
@editor().selectToScreenPosition(position)
|
||||
else
|
||||
@editor().setCursorScreenPosition(position)
|
||||
|
||||
@calculateWidth()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user