Skip to content
Kward Search API index

Class: Kward::PromptInterface::EditorKillRing

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/prompt_interface/editor/kill_ring.rb

Overview

Kill buffer, kill ring, and yank-pop bookkeeping for editor buffers.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(kill_buffer: "", kill_ring: [], last_yank_range: nil, last_yank_index: nil) ⇒ EditorKillRing

Returns a new instance of EditorKillRing.



9
10
11
12
13
14
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 9

def initialize(kill_buffer: "", kill_ring: [], last_yank_range: nil, last_yank_index: nil)
  @kill_buffer = kill_buffer.to_s
  @kill_ring = kill_ring
  @last_yank_range = last_yank_range
  @last_yank_index = last_yank_index
end

Instance Attribute Details

#kill_bufferObject

Returns the value of attribute kill_buffer.



7
8
9
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 7

def kill_buffer
  @kill_buffer
end

#kill_ringObject

Returns the value of attribute kill_ring.



7
8
9
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 7

def kill_ring
  @kill_ring
end

#last_yank_indexObject

Returns the value of attribute last_yank_index.



7
8
9
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 7

def last_yank_index
  @last_yank_index
end

#last_yank_rangeObject

Returns the value of attribute last_yank_range.



7
8
9
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 7

def last_yank_range
  @last_yank_range
end

Instance Method Details

#clear_last_yankObject



72
73
74
75
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 72

def clear_last_yank
  @last_yank_range = nil
  @last_yank_index = nil
end

#first_yankObject



45
46
47
48
49
50
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 45

def first_yank
  text = @kill_ring.first.to_s
  return nil if text.empty?

  text
end

#next_yank_popObject



57
58
59
60
61
62
63
64
65
66
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 57

def next_yank_pop
  return nil unless @last_yank_range && @last_yank_index
  return nil if @kill_ring.length < 2

  @last_yank_index = (@last_yank_index + 1) % @kill_ring.length
  {
    text: @kill_ring[@last_yank_index],
    range: @last_yank_range
  }
end

#push(text) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 33

def push(text)
  text = text.to_s
  return false if text.empty?

  @kill_buffer = text
  @kill_ring.unshift(text)
  @kill_ring.uniq!
  @kill_ring = @kill_ring.first(30)
  clear_last_yank
  true
end

#record_yank(start_index, end_index) ⇒ Object



52
53
54
55
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 52

def record_yank(start_index, end_index)
  @last_yank_range = [start_index, end_index]
  @last_yank_index = 0
end

#record_yank_pop(start_index, end_index) ⇒ Object



68
69
70
# File 'lib/kward/prompt_interface/editor/kill_ring.rb', line 68

def record_yank_pop(start_index, end_index)
  @last_yank_range = [start_index, end_index]
end