laughing-hipster/.atom/packages/vim-mode/lib/motions/find-motion.coffee

54 lines
1.6 KiB
CoffeeScript

{MotionWithInput} = require './general-motions'
{ViewModel} = require '../view-models/view-model'
{Point, Range} = require 'atom'
class Find extends MotionWithInput
constructor: (@editorView, @vimState) ->
super(@editorView, @vimState)
@viewModel = new ViewModel(@, class: 'find', singleChar: true, hidden: true)
@reversed = false
@offset = 0
match: (count) ->
currentPosition = @editorView.editor.getCursorBufferPosition()
line = @editorView.editor.lineForBufferRow(currentPosition.row)
if @reversed
index = currentPosition.column
for i in [0..count-1]
index = line.lastIndexOf(@input.characters, index-1)
if index != -1
point = new Point(currentPosition.row, index+@offset)
return {} =
point: point
range: new Range(point, currentPosition)
else
index = currentPosition.column
for i in [0..count-1]
index = line.indexOf(@input.characters, index+1)
if index != -1
point = new Point(currentPosition.row, index-@offset)
return {} =
point: point
range: new Range(currentPosition, point.translate([0,1]))
reverse: ->
@reversed = !@reversed
@
execute: (count=1) ->
if (match = @match(count))?
@editorView.editor.setCursorBufferPosition(match.point)
select: (count=1, {requireEOL}={}) ->
if (match = @match(count))?
@editorView.editor.setSelectedBufferRange(match.range)
return [true]
[false]
class Till extends Find
constructor: (@editorView, @vimState) ->
super(@editorView, @vimState)
@offset = 1
module.exports = {Find, Till}