class Riffer::Rig::Terminal
Constants
- BARE_SLASH
- BUILTINS
- COMMAND_HINT
- EXIT_COMMANDS
- EXIT_HINT
- FAREWELL
- HELP_COMMAND
- HELP_USAGE
- NEW_COMMAND
- NEW_USAGE
- RESUME_COMMAND
- RESUME_USAGE
Public Class Methods
(input: IO, output: IO, version: String, sessions: Riffer::Rig::Terminal::_Sessions, ?no_color: bool) → Riffer::Rig::Terminal
Source
# File lib/riffer/rig/terminal.rb, line 49 def self.for(input:, output:, version:, sessions:, no_color: false) theme = Theme.for(output, no_color: no_color) clock = -> { Process.clock_gettime(Process::CLOCK_MONOTONIC) } width = -> { Frame.measure(output)&.last } frame = Frame.new(io: output, theme: theme, loading: true) if input.tty? unless frame&.measure opening = Opening.new(io: output, theme:, version:, sessions:, width:) turns = QuietDisplay.new(io: output, theme: theme, clock: clock) return assemble(input:, renderer: Renderer.new(io: output, theme:, width:), sessions:, opening:, turns:) end pipeline = KeyPipeline.new(input: input, output: output) console = Console.new( frame: frame, pipeline: pipeline, loading: Loading.new(frame: frame, random: Random.new), idle: IdleTicker.new(footer: frame) ) asks = Queue.new #: Thread::Queue[Riffer::Rig::Terminal::Key] peek = Peek.new(frame: frame) repl = Repl.new( console: console, frame: frame, keys: pipeline.keys, asks: asks, prompter: FramePrompter.new(frame: frame, keys: asks, theme: theme), peek: peek, interrupt: -> { Process.kill('INT', Process.pid) }, builtins: BUILTINS ) opening = Opening.new( io: console, theme: theme, version: version, sessions: sessions, width: width, jobs: JobCounter.new(footer: frame), repl: repl ) turns = TickerDisplay.new(frame: frame, theme: theme, peek: peek, catalog: Riffer.config.catalog, clock: clock) renderer = Renderer.new(io: console, theme: theme, width: -> { frame.measure&.last }) assemble(input:, renderer:, sessions:, opening:, turns:, repl:) end
@rbs input: IO @rbs output: IO @rbs version: String @rbs no_color: bool @rbs sessions: Riffer::Rig::Terminal::_Sessions @rbs return: Riffer::Rig::Terminal
(input: IO, host: Riffer::Rig::Hosts::_Host, renderer: Riffer::Rig::Terminal::Renderer, opening: Riffer::Rig::Terminal::Opening, sessions: Riffer::Rig::Terminal::_Sessions, picker: Riffer::Rig::Terminal::Picker, turns: Riffer::Rig::Terminal::_TurnDisplay, ?repl: Riffer::Rig::Terminal::Repl?) → void
Source
# File lib/riffer/rig/terminal.rb, line 117 def initialize(input:, host:, renderer:, opening:, sessions:, picker:, turns:, repl: nil) @input = input @host = host @renderer = renderer @opening = opening @sessions = sessions @picker = picker @turns = turns @repl = repl @exit_armed = false end
@rbs input: IO @rbs host: Riffer::Rig::Hosts::_Host @rbs renderer: Riffer::Rig::Terminal::Renderer @rbs opening: Riffer::Rig::Terminal::Opening @rbs sessions: Riffer::Rig::Terminal::_Sessions @rbs picker: Riffer::Rig::Terminal::Picker @rbs turns: Riffer::Rig::Terminal::_TurnDisplay @rbs repl: Riffer::Rig::Terminal::Repl? @rbs return: void
Public Instance Methods
(?open_picker: bool) → Integer
Source
# File lib/riffer/rig/terminal.rb, line 131 def run(open_picker: false) # Ruby keeps a SIGINT inherited as ignored, but the idle prompt and the # picker need the Interrupt its own handler raises. inherited = Signal.trap('INT', 'DEFAULT') begin run_session(open_picker) ensure Signal.trap('INT', inherited) end end
@rbs open_picker: bool @rbs return: Integer