flag, examples: add compact to flag.DocOptions (#21888)

This commit is contained in:
larpon 2024-07-18 08:19:58 +02:00 committed by GitHub
parent 6d3a2acf23
commit 3bc6d30b69
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 37 additions and 9 deletions

View File

@ -36,6 +36,8 @@ enum Edit {
description_padding
description_width
flag_indent
// DocOptions.compact
compact
// DocOptions.show flags
name
version
@ -56,6 +58,9 @@ pub fn (e Edit) next() Edit {
.flag_indent
}
.flag_indent {
.compact
}
.compact {
.name
}
.name {
@ -124,6 +129,9 @@ fn event(e &tui.Event, mut app App) {
.description_width {
app.layout.description_width += incr_decr
}
.compact {
app.options.compact = !app.options.compact
}
.name {
app.options.show.toggle(.name)
}
@ -165,6 +173,9 @@ fn frame(mut app App) {
.description_width {
'${app.layout.description_width}'
}
.compact {
if app.options.compact { 'on' } else { 'off' }
}
.name {
if app.options.show.has(.name) { 'on' } else { 'off' }
}

View File

@ -115,7 +115,8 @@ pub mut:
pub struct DocOptions {
pub mut:
flag_header string = '\nOptions:'
show Show = ~Show.zero()
compact bool
show Show = ~Show.zero()
}
// max_width returns the total width of the `DocLayout`.
@ -732,12 +733,20 @@ pub fn (fm FlagMapper) fields_docs(dc DocConfig) ![]string {
flag_line_diff := flag_line.len - pad_desc
if flag_line_diff < 0 {
diff := -flag_line_diff
docs << flag_line + ' '.repeat(diff) +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}') + '\n'
mut line := flag_line + ' '.repeat(diff) +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}')
if !dc.options.compact {
line += '\n'
}
docs << line
} else {
docs << flag_line
docs << empty_padding + keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}') +
'\n'
mut line := empty_padding +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}')
if !dc.options.compact {
line += '\n'
}
docs << line
}
}
// Look for custom flag entries starting with delimiter
@ -746,12 +755,20 @@ pub fn (fm FlagMapper) fields_docs(dc DocConfig) ![]string {
flag_line_diff := entry.len - pad_desc + indent_flags
if flag_line_diff < 0 {
diff := -flag_line_diff
docs << indent_flags_padding + entry.trim(' ') + ' '.repeat(diff) +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}') + '\n'
mut line := indent_flags_padding + entry.trim(' ') + ' '.repeat(diff) +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}')
if !dc.options.compact {
line += '\n'
}
docs << line
} else {
docs << indent_flags_padding + entry.trim(' ')
docs << empty_padding +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}') + '\n'
mut line := empty_padding +
keep_at_max(doc, desc_max).replace('\n', '\n${empty_padding}')
if !dc.options.compact {
line += '\n'
}
docs << line
}
}
}