Class: Search

Inherits:
Object
  • Object
show all
Defined in:
lib/vimamsa/search.rb

Instance Method Summary collapse

Constructor Details

#initializeSearch

Returns a new instance of Search.



18
19
20
21
# File 'lib/vimamsa/search.rb', line 18

def initialize()
  @cur_search_i = -1
  @search_indexes = []
end

Instance Method Details

#jump_to_nextObject



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/vimamsa/search.rb', line 61

def jump_to_next()

  return if @cur_search_i < 0
  # TODO: optimize, update only after buffer changed
  # or search only for the next match
  update_search
  
  return if !@search_indexes.any?

  # if @search_indexes.size > @cur_search_i + 1
  # @cur_search_i = @cur_search_i + 1
  # else
  # @cur_search_i = 0
  # end
  @buffer.set_pos(@search_indexes[@cur_search_i])
end

#jump_to_previousObject



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# File 'lib/vimamsa/search.rb', line 78

def jump_to_previous()
  return if @cur_search_i < 0

  update_search
  return if !@search_indexes.any?
  
  # TODO: hack 
  2.times {
    if @cur_search_i - 1 < 0
      @cur_search_i = @search_indexes.size - 1
    else
      @cur_search_i = @cur_search_i - 1
    end
    break if @buffer.pos != @search_indexes[@cur_search_i]
  }
  @buffer.set_pos(@search_indexes[@cur_search_i])
end

#set(search_str, search_type, buffer) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/vimamsa/search.rb', line 23

def set(search_str, search_type, buffer)
  @search_str = search_str
  @search_type = search_type
  @buffer = buffer
  regex = Regexp.escape(search_str)
  if /.*\p{Upper}.*/ =~ regex
    @reg = Regexp.new(regex)
  else
    # if does not contain uppercase characters, ignore case
    @reg = Regexp.new(regex, Regexp::IGNORECASE)
  end
  @search_indexes = scan_indexes(buffer, @reg)
  debug @search_indexes.inspect
  @cur_search_i = -1
  if @search_indexes.any?
    @cur_search_i = 0
    startpos = @search_indexes.select { |x| x > @buffer.pos }.min
    if startpos != nil
      @cur_search_i = @search_indexes.find_index(startpos)
    end
    @buffer.set_pos(@search_indexes[@cur_search_i])
  else
    return false
  end
  
  return nil
end

#update_searchObject



51
52
53
54
55
56
57
58
59
# File 'lib/vimamsa/search.rb', line 51

def update_search()
  @search_indexes = scan_indexes(@buffer, @reg)

  @cur_search_i = 0
  startpos = @search_indexes.select { |x| x > @buffer.pos }.min
  if startpos != nil
    @cur_search_i = @search_indexes.find_index(startpos)
  end
end