class Chamomile::Cursor
Virtual text cursor with blink modes (blink, static, hide).
Constants
- BLINK_SPEED
- MODE_BLINK
- MODE_HIDE
- MODE_STATIC
Attributes
Public Class Methods
Source
# File lib/chamomile/components/cursor.rb, line 33 def initialize(mode: MODE_BLINK, blink_speed: BLINK_SPEED) @id = self.class.next_id @mode = mode @blink_speed = blink_speed @char = " " @blinked = false @focused = false @tag = 0 end
Source
# File lib/chamomile/components/cursor.rb, line 18 def self.next_id @id_mutex.synchronize do if Process.pid != @id_pid @id_pid = Process.pid @next_id = 0 @id_mutex = Mutex.new end @next_id += 1 "#{@id_pid}-cur-#{@next_id}" end end
Public Instance Methods
Source
# File lib/chamomile/components/cursor.rb, line 67 def blink_cmd captured_id = @id captured_tag = @tag speed = @blink_speed -> { sleep(speed) CursorBlinkMsg.new(id: captured_id, tag: captured_tag) } end
Source
# File lib/chamomile/components/cursor.rb, line 49 def blur @focused = false @blinked = true @tag += 1 nil end
Source
# File lib/chamomile/components/cursor.rb, line 43 def focus @focused = true @blinked = false @mode == MODE_BLINK ? blink_cmd : nil end
Source
# File lib/chamomile/components/cursor.rb, line 77 def handle(msg) return unless msg.is_a?(CursorBlinkMsg) return unless @mode == MODE_BLINK && @focused return unless msg.id == @id && msg.tag == @tag @blinked = !@blinked @tag += 1 blink_cmd end
Also aliased as: update
Source
# File lib/chamomile/components/cursor.rb, line 60 def mode=(new_mode) @mode = new_mode @tag += 1 @blinked = new_mode == MODE_HIDE || !@focused @mode == MODE_BLINK && @focused ? blink_cmd : nil end
Source
# File lib/chamomile/components/cursor.rb, line 89 def view return @char if @mode == MODE_HIDE return @char if @blinked "\e[7m#{@char}\e[0m" end