Browse Source

Add explicit margins option to tui

master
cancel 6 years ago
parent
commit
1caf581a57
  1. 3
      cli_main.c
  2. 54
      tui_main.c

3
cli_main.c

@ -53,6 +53,7 @@ int main(int argc, char** argv) {
input_file = argv[optind]; input_file = argv[optind];
} else if (optind < argc - 1) { } else if (optind < argc - 1) {
fprintf(stderr, "Expected only 1 file argument.\n"); fprintf(stderr, "Expected only 1 file argument.\n");
usage();
return 1; return 1;
} }
@ -62,8 +63,8 @@ int main(int argc, char** argv) {
return 1; return 1;
} }
if (ticks < 0) { if (ticks < 0) {
usage();
fprintf(stderr, "Time must be >= 0.\n"); fprintf(stderr, "Time must be >= 0.\n");
usage();
return 1; return 1;
} }

54
tui_main.c

@ -15,8 +15,9 @@ static void usage() {
fprintf(stderr, fprintf(stderr,
"Usage: tui [options] [file]\n\n" "Usage: tui [options] [file]\n\n"
"Options:\n" "Options:\n"
" --no-margins Disable terminal margins.\n" " --margins <number> Add cosmetic margins.\n"
" -h or --help Print this message and exit.\n" " Default: 0\n"
" -h or --help Print this message and exit.\n"
); );
// clang-format on // clang-format on
} }
@ -351,15 +352,15 @@ void tui_resize_grid(Field* field, Markmap_reusable* markmap, Isz delta_h,
*needs_remarking = true; *needs_remarking = true;
} }
enum { Argopt_no_margins = UCHAR_MAX + 1 }; enum { Argopt_margins = UCHAR_MAX + 1 };
int main(int argc, char** argv) { int main(int argc, char** argv) {
static struct option tui_options[] = { static struct option tui_options[] = {
{"no-margins", no_argument, 0, Argopt_no_margins}, {"margins", required_argument, 0, Argopt_margins},
{"help", no_argument, 0, 'h'}, {"help", no_argument, 0, 'h'},
{NULL, 0, NULL, 0}}; {NULL, 0, NULL, 0}};
char* input_file = NULL; char* input_file = NULL;
bool margins_enabled = true; int margin_thickness = true;
for (;;) { for (;;) {
int c = getopt_long(argc, argv, "h", tui_options, NULL); int c = getopt_long(argc, argv, "h", tui_options, NULL);
if (c == -1) if (c == -1)
@ -368,8 +369,15 @@ int main(int argc, char** argv) {
case 'h': case 'h':
usage(); usage();
return 1; return 1;
case Argopt_no_margins: case Argopt_margins:
margins_enabled = false; margin_thickness = atoi(optarg);
if (margin_thickness == 0 && strcmp(optarg, "0")) {
fprintf(stderr,
"Bad margins argument %s.\n"
"Must be 0 or positive integer.\n",
optarg);
return 1;
}
break; break;
case '?': case '?':
usage(); usage();
@ -377,6 +385,12 @@ int main(int argc, char** argv) {
} }
} }
if (margin_thickness < 0) {
fprintf(stderr, "Margins must be >= 0\n");
usage();
return 1;
}
if (optind == argc - 1) { if (optind == argc - 1) {
input_file = argv[optind]; input_file = argv[optind];
} else if (optind < argc - 1) { } else if (optind < argc - 1) {
@ -509,21 +523,23 @@ int main(int argc, char** argv) {
int content_x = 0; int content_x = 0;
int content_h = term_height; int content_h = term_height;
int content_w = term_width; int content_w = term_width;
if (margins_enabled && term_height > 4 && term_width > 4) { int margins_2 = margin_thickness * 2;
content_y += 2; if (margin_thickness > 0 && term_height > margins_2 &&
content_x += 2; term_width > margins_2) {
content_h -= 4; content_y += margin_thickness;
content_w -= 4; content_x += margin_thickness;
content_h -= margins_2;
content_w -= margins_2;
} }
if (cont_win == NULL || cont_win_h != content_h || if (cont_win == NULL || cont_win_h != content_h ||
cont_win_w != content_w) { cont_win_w != content_w) {
if (cont_win) { if (cont_win) {
delwin(cont_win); delwin(cont_win);
} }
wclear(stdscr); wclear(stdscr);
cont_win = derwin(stdscr, content_h, content_w, content_y, content_x); cont_win = derwin(stdscr, content_h, content_w, content_y, content_x);
cont_win_h = content_h; cont_win_h = content_h;
cont_win_w = content_w; cont_win_w = content_w;
} }
tdraw_field(cont_win, content_h, content_w, 0, 0, field.buffer, tdraw_field(cont_win, content_h, content_w, 0, 0, field.buffer,
markmap_r.buffer, field.height, field.width, ruler_spacing_y, markmap_r.buffer, field.height, field.width, ruler_spacing_y,

Loading…
Cancel
Save