prompt.v

1.0 KB · raw

1//! The strict confirm prompt, shared by destructive commands.2//!3//! Before anything that rewrites the working tree, Koh shows what will happen4//! and asks one question. Only `y` or `Y` confirms: `yes`, or a5//! padded ` y ` all cancel. `--yes` skips the question; without a terminal and6//! without `--yes` the command refuses rather than hanging.78module cli910import os1112pub fn interactive() bool {13	return os.is_atty(0) != 014}1516pub fn confirm(yes bool) !bool {17	if yes {18		return true19	}20	if !interactive() {21		return error('needs --yes when not interactive')22	}23	done_working()24	eprint('  continue? [y/N] ')25	answer := os.get_line()26	eprintln('')27	return answer.trim_right('\r') in ['y', 'Y']28}2930// typed_confirm is confirm for a second, stricter question: the answer has to31// match `expected` exactly. `strip` uses it for the typed path.32pub fn typed_confirm(prompt_text string, expected string) bool {33	done_working()34	eprint('  ${prompt_text} ')35	answer := os.get_line()36	eprintln('')37	return answer.trim_right('\r') == expected38}