109 int available_width = term_width - indent_width;
110 if (available_width > 130)
111 available_width = 130;
112 if (available_width < 20)
113 available_width = 20;
115 const char *line_start = text;
116 const char *last_space = NULL;
117 const char *p = text;
118 bool inside_metadata =
false;
124 int text_len = p - line_start;
126 char seg[BUFFER_SIZE_MEDIUM];
127 SAFE_STRNCPY(seg, line_start, text_len + 1);
128 layout_print_colored_segment(stream, seg);
131 fprintf(stream,
"\n");
133 for (
int i = 0; i < indent_width; i++)
134 fprintf(stream,
" ");
139 inside_metadata =
false;
145 if (!inside_metadata && is_metadata_start(p)) {
146 inside_metadata =
true;
151 if (inside_metadata && *p ==
')') {
152 inside_metadata =
false;
156 if (*p ==
' ' && !inside_metadata) {
163 if (char_bytes <= 0) {
172 int actual_width = calculate_segment_display_width(line_start, p - line_start);
175 if (actual_width >= available_width && last_space && last_space > line_start) {
177 int text_len = last_space - line_start;
178 char seg[BUFFER_SIZE_MEDIUM];
179 SAFE_STRNCPY(seg, line_start, text_len + 1);
180 layout_print_colored_segment(stream, seg);
182 fprintf(stream,
"\n");
183 for (
int i = 0; i < indent_width; i++)
184 fprintf(stream,
" ");
194 if (p > line_start) {
195 char seg[BUFFER_SIZE_MEDIUM];
196 int text_len = p - line_start;
197 SAFE_STRNCPY(seg, line_start, text_len + 1);
198 layout_print_colored_segment(stream, seg);
208 if (!stream || !first_column || !second_column)
224 int fixed_first_col_width = (first_col_len > 0) ? first_col_len : 35;
225 int max_first_col_width = (term_width * 6) / 10;
226 if (max_first_col_width < 40)
227 max_first_col_width = 40;
228 if (fixed_first_col_width > max_first_col_width) {
229 fixed_first_col_width = max_first_col_width;
234 int second_col_start = 2 + fixed_first_col_width + 2;
237 bool force_single_column = (term_width <= 90);
243 bool fits_in_first_column_width = (
display_width <= fixed_first_col_width);
246 if (fits_in_first_column_width && !force_single_column) {
248 fprintf(stream,
" %s", first_column);
251 int padding = second_col_start - first_col_end;
253 fprintf(stream,
"%*s", padding,
"");
255 fprintf(stream,
" ");
260 fprintf(stream,
"\n");
261 }
else if (force_single_column) {
263 fprintf(stream,
" %s\n", first_column);
266 if (second_column && second_column[0] !=
'\0') {
267 int description_indent = 4;
268 for (
int i = 0; i < description_indent; i++)
269 fprintf(stream,
" ");
272 fprintf(stream,
"\n");
277 fprintf(stream,
" %s\n", first_column);
280 if (second_column && second_column[0] !=
'\0') {
282 for (
int i = 0; i < second_col_start; i++)
283 fprintf(stream,
" ");
285 fprintf(stream,
"\n");