Class: Clack::Prompts::MultilineText

Inherits:
Core::Prompt show all
Includes:
Core::TextInputHelper
Defined in:
lib/clack/prompts/multiline_text.rb

Overview

Multi-line text input prompt with line navigation.

Features:

  • Enter inserts newline, Ctrl+D submits

  • Arrow key navigation (up/down between lines, left/right within line)

  • Backspace merges lines when at line start

  • Validation support

Examples:

Basic usage

message = Clack.multiline_text(message: "Enter your commit message:")

With initial value and validation

content = Clack.multiline_text(
  message: "Description:",
  initial_value: "feat: ",
  validate: ->(v) { "Required!" if v.strip.empty? }
)

Constant Summary

Constants inherited from Core::Prompt

Core::Prompt::MIN_TERMINAL_WIDTH

Instance Attribute Summary

Attributes inherited from Core::Prompt

#error_message, #state, #value, #warning_message

Instance Method Summary collapse

Methods included from Core::TextInputHelper

#current_placeholder, #format_placeholder_with_cursor, #handle_text_input, #input_display, #placeholder_display, #value_with_cursor

Methods inherited from Core::Prompt

flush_resize, register, #request_redraw, #run, setup_signal_handler, unregister

Constructor Details

#initialize(message:, initial_value: nil, **opts) ⇒ MultilineText

Returns a new instance of MultilineText.

Parameters:

  • message (String)

    the prompt message

  • initial_value (String, nil) (defaults to: nil)

    pre-filled editable text (can contain newlines)

  • opts (Hash)

    a customizable set of options

Options Hash (**opts):

  • :validate (Proc, nil)

    validation proc returning error string or nil

  • additional (Hash)

    options passed to Core::Prompt



30
31
32
33
34
35
# File 'lib/clack/prompts/multiline_text.rb', line 30

def initialize(message:, initial_value: nil, **opts)
  super(message:, **opts)
  @lines = parse_initial_value(initial_value)
  @line_index = @lines.length - 1
  @cursor = current_line.grapheme_clusters.length
end