class Diakonos::LineMover

Public Class Methods

new(buffer:) click to toggle source
# File lib/diakonos/line-mover.rb, line 3
def initialize(buffer:)
  @buffer = buffer
end

Public Instance Methods

move_selected_lines(direction:) click to toggle source
# File lib/diakonos/line-mover.rb, line 7
def move_selected_lines(direction:)
  case direction
  when :up
    from_row = start_row-1
    return  if from_row < 0
    to_row = end_row-1
    selection_delta = 0
  when :down
    from_row = end_row
    to_row = start_row
    return  if to_row > @buffer.lines.count - 2
    selection_delta = @buffer.selecting? ? 1 : 0
  end

  @buffer.take_snapshot Buffer::TYPING
  @buffer.lines.insert(
    to_row,
    @buffer.lines.delete_at(from_row)
  )
  if @buffer.selecting?
    @buffer.set_selection to_row+selection_delta, 0, from_row+1+selection_delta, 0
    @buffer.anchor_selection to_row+selection_delta
  end
  @buffer.go_to_line from_row+selection_delta
  @buffer.set_modified
end

Private Instance Methods

end_row() click to toggle source
# File lib/diakonos/line-mover.rb, line 38
        def end_row
  @buffer.selection_mark&.end_row || @buffer.last_row+1
end
start_row() click to toggle source
# File lib/diakonos/line-mover.rb, line 34
        def start_row
  @buffer.selection_mark&.start_row || @buffer.current_row
end