From dff2014e9551a4ff7fffa24608ed12e089b0a21b Mon Sep 17 00:00:00 2001 From: kitsunyan Date: Sat, 19 May 2018 10:00:49 +0300 Subject: Simplify help output formatter for choices --- src/format.nim | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src/format.nim') diff --git a/src/format.nim b/src/format.nim index d092153..f20eaf7 100644 --- a/src/format.nim +++ b/src/format.nim @@ -1,5 +1,5 @@ import - future, options, posix, sequtils, strutils, times, unicode, + future, macros, options, posix, sequtils, strutils, times, unicode, utils type @@ -266,9 +266,33 @@ proc printColonUserChoice*(color: bool, s: string, answers: openArray[char], else: negative -proc printUserInputHelp*(operations: varargs[tuple[answer: char, description: string]]) = - for operation in (@operations & ('?', tr"view this help")): - echo(" ", operation.answer, " - ", operation.description) +proc printColonUserChoiceWithHelp*(color: bool, s: string, + answers: openArray[tuple[c: char, help: Option[string]]], positive: char, + noconfirm: bool, default: char): char = + let c = printColonUserChoice(color, s, answers.map(a => a.c) & '?', + positive, '?', noconfirm, default) + + if c == '?': + for answer in @answers & ('?', some(tr"view this help")): + if answer.help.isSome: + echo(" ", answer.c, " - ", answer.help.unsafeGet) + printColonUserChoiceWithHelp(color, s, answers, positive, noconfirm, default) + else: + c + +macro choices*(choices: varargs[untyped]): untyped = + result = newNimNode(nnkBracket) + for choice in choices: + case choice.kind: + of nnkCharLit: + result.add(newPar(choice, newCall(ident("none"), ident("string")))) + of nnkPar: + if choice.len == 2: + result.add(newPar(choice[0], newCall(ident("some"), choice[1]))) + else: + error("error") + else: + error("error") proc printProgressFull*(bar: bool, title: string): ((string, float) -> void, () -> void) = let width = getWindowSize().width -- cgit v1.2.3-70-g09d2