prompt.v

1.0 KB · raw

1//! The strict confirm prompt, carried over from Koh 2 unchanged.2//!3//! Before anything that rewrites the working tree, Koh shows what will happen4//! and asks one question. Only a lowercase `y` confirms: `Y`, `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	print('  continue? [y/N] ')25	answer := os.get_line()26	println('')27	return answer.trim_right('\r') == 'y'28}2930// require_true 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	print('  ${prompt_text} ')35	answer := os.get_line()36	println('')37	return answer.trim_right('\r') == expected38}