static void view_status (WDiff *view, int ord, int width, int pos) { char buf[BUFSIZ]; int filename_width; off_t skip_offs = view->df[ord].offs; int moves = view->df[ord].move; tty_setcolor(SELECTED_COLOR); #if VERTICAL_SPLIT tty_gotoyx(0, pos); #else /* !VERTICAL_SPLIT */ tty_gotoyx(pos, 0); #endif /* !VERTICAL_SPLIT */ filename_width = width - 22; if (filename_width < 8) { filename_width = 8; } if (filename_width >= (int)sizeof(buf)) { /* abnormal, but avoid buffer overflow */ filename_width = sizeof(buf) - 1; } trim(strip_home_and_password(view->file[ord]), buf, filename_width); tty_printf("%-*s %s%-16lX ", filename_width, buf, moves ? "0x" : "--", skip_offs); }
void save_setup_cmd (void) { char *d1; const char *d2; d1 = mc_config_get_full_path (MC_CONFIG_FILE); d2 = strip_home_and_password (d1); g_free (d1); if (save_setup (TRUE, TRUE)) message (D_NORMAL, _("Setup"), _("Setup saved to %s"), d2); else message (D_ERROR, _("Setup"), _("Unable to save setup to %s"), d2); }
/* * FIXME: probably it is better to replace this with quick dialog machinery, * but actually I'm not familiar with it and have not much time :( * alex */ static replace_action_t overwrite_query_dialog (FileOpContext * ctx, enum OperationMode mode) { #define ADD_RD_BUTTON(i) \ add_widget (ui->replace_dlg, \ button_new (rd_widgets [i].ypos, rd_widgets [i].xpos, rd_widgets [i].value, \ NORMAL_BUTTON, rd_widgets [i].text, 0)) #define ADD_RD_LABEL(i, p1, p2) \ g_snprintf (buffer, sizeof (buffer), rd_widgets [i].text, p1, p2); \ add_widget (ui->replace_dlg, label_new (rd_widgets [i].ypos, rd_widgets [i].xpos, buffer)) /* dialog sizes */ const int rd_ylen = 17; int rd_xlen = 60; struct { const char *text; int ypos, xpos; int value; /* 0 for labels */ } rd_widgets[] = { /* *INDENT-OFF* */ /* 0 */ { N_("Target file already exists!"), 3, 4, 0 }, /* 1 */ { "%s", 4, 4, 0 }, /* 2 */ /* cannot use PRIuMAX here; %llu is used instead */ { N_("Source date: %s, size %llu"), 6, 4, 0 }, /* 3 */ /* cannot use PRIuMAX here; %llu is used instead */ { N_("Target date: %s, size %llu"), 7, 4, 0 }, /* 4 */ { N_("&Abort"), 14, 25, REPLACE_ABORT }, /* 5 */ { N_("If &size differs"), 12, 28, REPLACE_SIZE }, /* 6 */ { N_("Non&e"), 11, 47, REPLACE_NEVER }, /* 7 */ { N_("&Update"), 11, 36, REPLACE_UPDATE }, /* 8 */ { N_("A&ll"), 11, 28, REPLACE_ALWAYS }, /* 9 */ { N_("Overwrite all targets?"), 11, 4, 0 }, /* 10 */ { N_("&Reget"), 10, 28, REPLACE_REGET }, /* 11 */ { N_("A&ppend"), 9, 45, REPLACE_APPEND }, /* 12 */ { N_("&No"), 9, 37, REPLACE_NO }, /* 13 */ { N_("&Yes"), 9, 28, REPLACE_YES }, /* 14 */ { N_("Overwrite this target?"), 9, 4, 0 } /* *INDENT-ON* */ }; const int num = sizeof (rd_widgets) / sizeof (rd_widgets[0]); int *widgets_len; FileOpContextUI *ui = ctx->ui; char buffer[BUF_SMALL]; const char *title; const char *stripped_name = strip_home_and_password (ui->replace_filename); int stripped_name_len; int result; widgets_len = g_new0 (int, num); if (mode == Foreground) title = _("File exists"); else title = _("Background process: File exists"); stripped_name_len = str_term_width1 (stripped_name); { int i, l1, l2, l, row; for (i = 0; i < num; i++) { #ifdef ENABLE_NLS if (i != 1) /* skip filename */ rd_widgets[i].text = _(rd_widgets[i].text); #endif /* ENABLE_NLS */ widgets_len[i] = str_term_width1 (rd_widgets[i].text); } /* * longest of "Overwrite..." labels * (assume "Target date..." are short enough) */ l1 = max (widgets_len[9], widgets_len[14]); /* longest of button rows */ i = num; for (row = l = l2 = 0; i--;) if (rd_widgets[i].value != 0) { if (row != rd_widgets[i].ypos) { row = rd_widgets[i].ypos; l2 = max (l2, l); l = 0; } l += widgets_len[i] + 4; } l2 = max (l2, l); /* last row */ rd_xlen = max (rd_xlen, l1 + l2 + 8); rd_xlen = max (rd_xlen, str_term_width1 (title) + 2); rd_xlen = max (rd_xlen, min (COLS, stripped_name_len + 8)); /* Now place widgets */ l1 += 5; /* start of first button in the row */ i = num; for (l = l1, row = 0; --i > 1;) if (rd_widgets[i].value != 0) { if (row != rd_widgets[i].ypos) { row = rd_widgets[i].ypos; l = l1; } rd_widgets[i].xpos = l; l += widgets_len[i] + 4; } /* Abort button is centered */ rd_widgets[4].xpos = (rd_xlen - widgets_len[4] - 3) / 2; } /* FIXME - missing help node */ ui->replace_dlg = create_dlg (TRUE, 0, 0, rd_ylen, rd_xlen, alarm_colors, NULL, "[Replace]", title, DLG_CENTER | DLG_REVERSE); /* prompt -- centered */ add_widget (ui->replace_dlg, label_new (rd_widgets[0].ypos, (rd_xlen - widgets_len[0]) / 2, rd_widgets[0].text)); /* file name -- centered */ stripped_name = str_trunc (stripped_name, rd_xlen - 8); stripped_name_len = str_term_width1 (stripped_name); add_widget (ui->replace_dlg, label_new (rd_widgets[1].ypos, (rd_xlen - stripped_name_len) / 2, stripped_name)); /* source date and size */ ADD_RD_LABEL (2, file_date (ui->s_stat->st_mtime), (unsigned long long) ui->s_stat->st_size); /* destination date and size */ ADD_RD_LABEL (3, file_date (ui->d_stat->st_mtime), (unsigned long long) ui->d_stat->st_size); ADD_RD_BUTTON (4); /* Abort */ ADD_RD_BUTTON (5); /* If size differs */ ADD_RD_BUTTON (6); /* None */ ADD_RD_BUTTON (7); /* Update */ ADD_RD_BUTTON (8); /* All" */ ADD_RD_LABEL (9, 0, 0); /* Overwrite all targets? */ /* "this target..." widgets */ if (!S_ISDIR (ui->d_stat->st_mode)) { if ((ctx->operation == OP_COPY) && (ui->d_stat->st_size != 0) && (ui->s_stat->st_size > ui->d_stat->st_size)) ADD_RD_BUTTON (10); /* Reget */ ADD_RD_BUTTON (11); /* Append */ } ADD_RD_BUTTON (12); /* No */ ADD_RD_BUTTON (13); /* Yes */ ADD_RD_LABEL (14, 0, 0); /* Overwrite this target? */ result = run_dlg (ui->replace_dlg); destroy_dlg (ui->replace_dlg); g_free (widgets_len); return (result == B_CANCEL) ? REPLACE_ABORT : (replace_action_t) result; #undef ADD_RD_LABEL #undef ADD_RD_BUTTON }