module Chamomile
Event-driven Ruby TUI framework.
Constants
- BOTTOM
- BorderDef
- CENTER
- CancelCmd
- CancelCommand
-
Internal compound/control command types
- ClearScreenMsg
- CursorBlinkMsg
- CursorPositionCmd
- CursorPositionCommand
- CursorShapeCmd
- CursorShapeCommand
- CursorVisibilityCmd
- CursorVisibilityCommand
- DisableBracketedPasteMsg
- DisableMouseMsg
- DisableReportFocusMsg
- EnableBracketedPasteMsg
- EnableMouseAllMotionMsg
- EnableMouseCellMotionMsg
- EnableReportFocusMsg
- EnterAltScreenMsg
-
Runtime mode-toggle messages (returned as Cmd from update, intercepted by Program)
- ExecCmd
- ExecCommand
- ExitAltScreenMsg
- FilePickerReadDirMsg
- FilterMatchesMsg
- KeyEvent
- LEFT
- ListStatusTimeoutMsg
- Options
-
Immutable configuration for a Program run.
- POSITION_MAP
-
Symbol-to-float position map
- PrintlnCmd
- PrintlnCommand
- ProgressFrameMsg
- QuitEvent
- QuitMsg
- RIGHT
- RequestWindowSizeMsg
- ResizeEvent
- ShellResult
-
Typed envelope for shell command results
- SpinnerTickMsg
- SpinnerType
- StopwatchTickMsg
- StreamCmd
- StreamCommand
- TOP
-
Position constants
- TimerTick
-
Typed envelope for timer ticks
- TimerTickMsg
- TimerTimeoutMsg
- VALID_MOUSE_MODES
- VERSION
- WindowSizeMsg
- WindowTitleCmd
- WindowTitleCommand
-
Internal command types intercepted by Program (not delivered to model)
Public Class Methods
Source
# File lib/chamomile/logging.rb, line 28 def self.close_log @log_mutex.synchronize do @logger&.close @logger = nil end end
Source
# File lib/chamomile.rb, line 113 def horizontal(strs = nil, align: :top, &block) strs = block.call if block && strs.nil? strs = Array(strs) Join.horizontal(resolve_position(align), *strs) end
New primary API — accepts array or block, keyword align
Source
# File lib/chamomile.rb, line 142 def join_horizontal(position, *strs) Join.horizontal(resolve_position(position), *strs) end
Old API — kept for backward compat
Source
# File lib/chamomile.rb, line 147 def join_vertical(position, *strs) Join.vertical(resolve_position(position), *strs) end
Old API — kept for backward compat
Source
# File lib/chamomile/logging.rb, line 20 def self.log(msg, level: :debug) @log_mutex.synchronize do return unless @logger @logger.send(level, msg) end end
Source
# File lib/chamomile/logging.rb, line 10 def self.log_to_file(path) @log_mutex.synchronize do @logger&.close @logger = Logger.new(path) @logger.formatter = proc { |severity, time, _, msg| "#{time.strftime("%Y-%m-%d %H:%M:%S.%L")} [#{severity}] #{msg}\n" } end end
Source
# File lib/chamomile.rb, line 128 def place(first, second = nil, third = nil, fourth = nil, fifth = nil, width: nil, height: nil, align: :left, valign: :top, content: nil) if fifth # Old 5-arg form: place(width, height, h_pos, v_pos, str) Place.place(first, second, resolve_position(third), resolve_position(fourth), fifth.to_s) else # New keyword form: place(content, width:, height:, align:, valign:) content = (content || first).to_s Place.place(width || 80, height || 24, resolve_position(align), resolve_position(valign), content) end end
New primary API — content first, keyword args Also supports old positional form for backward compat
Source
# File lib/chamomile.rb, line 151 def place_horizontal(width, pos, str) Place.place_horizontal(width, resolve_position(pos), str) end
Source
# File lib/chamomile.rb, line 155 def place_vertical(height, pos, str) Place.place_vertical(height, resolve_position(pos), str) end
Source
# File lib/chamomile.rb, line 161 def resolve_position(val) case val when Symbol POSITION_MAP.fetch(val) { raise ArgumentError, "Unknown position: #{val.inspect}" } when Numeric val.to_f else raise ArgumentError, "Expected a Symbol or Numeric position, got #{val.inspect}" end end
Convert symbol positions to float values. Accepts symbols (:top, :left, :center, :bottom, :right) or floats.
Source
# File lib/chamomile.rb, line 91 def run(model, **opts, &block) if block config = Configuration.new block.call(config) opts = config.to_h.merge(opts) end Program.new(model, **opts).run end
Source
# File lib/chamomile.rb, line 120 def vertical(strs = nil, align: :left, &block) strs = block.call if block && strs.nil? strs = Array(strs) Join.vertical(resolve_position(align), *strs) end
New primary API — accepts array or block, keyword align