void dirsizes_cmd (void) { WPanel *panel = current_panel; int i; ComputeDirSizeUI *ui; ui = compute_dir_size_create_ui (); for (i = 0; i < panel->count; i++) if (S_ISDIR (panel->dir.list[i].st.st_mode) && ((panel->dirs_marked && panel->dir.list[i].f.marked) || !panel->dirs_marked) && strcmp (panel->dir.list[i].fname, "..") != 0) { size_t marked = 0; uintmax_t total = 0; if (compute_dir_size (panel->dir.list[i].fname, ui, compute_dir_size_update_ui, &marked, &total, TRUE) != FILE_CONT) break; panel->dir.list[i].st.st_size = (off_t) total; panel->dir.list[i].f.dir_size_computed = 1; } compute_dir_size_destroy_ui (ui); recalculate_panel_summary (panel); if (current_panel->sort_info.sort_field->sort_routine == (sortfn *) sort_size) panel_re_sort (panel); panel->dirty = 1; }
void single_dirsize_cmd (void) { WPanel *panel = current_panel; file_entry *entry; entry = &(panel->dir.list[panel->selected]); if (S_ISDIR (entry->st.st_mode) && strcmp (entry->fname, "..") != 0) { size_t marked = 0; uintmax_t total = 0; ComputeDirSizeUI *ui; ui = compute_dir_size_create_ui (); if (compute_dir_size (entry->fname, ui, compute_dir_size_update_ui, &marked, &total, TRUE) == FILE_CONT) { entry->st.st_size = (off_t) total; entry->f.dir_size_computed = 1; } compute_dir_size_destroy_ui (ui); } if (panels_options.mark_moves_down) send_message ((Widget *) panel, WIDGET_COMMAND, CK_Down); recalculate_panel_summary (panel); if (current_panel->sort_info.sort_field->sort_routine == (sortfn *) sort_size) panel_re_sort (panel); panel->dirty = 1; }
void single_dirsize_cmd (void) { WPanel *panel = current_panel; file_entry_t *entry; entry = &(panel->dir.list[panel->selected]); if (S_ISDIR (entry->st.st_mode) && !DIR_IS_DOTDOT (entry->fname)) { size_t dir_count = 0; size_t count = 0; uintmax_t total = 0; dirsize_status_msg_t dsm; vfs_path_t *p; p = vfs_path_from_str (entry->fname); memset (&dsm, 0, sizeof (dsm)); status_msg_init (STATUS_MSG (&dsm), _("Directory scanning"), 1.0, dirsize_status_init_cb, dirsize_status_update_cb, dirsize_status_deinit_cb); if (compute_dir_size (p, &dsm, &dir_count, &count, &total, TRUE) == FILE_CONT) { entry->st.st_size = (off_t) total; entry->f.dir_size_computed = 1; } vfs_path_free (p); status_msg_deinit (STATUS_MSG (&dsm)); } if (panels_options.mark_moves_down) send_message (panel, NULL, MSG_ACTION, CK_Down, NULL); recalculate_panel_summary (panel); if (current_panel->sort_field->sort_routine == (GCompareFunc) sort_size) panel_re_sort (panel); panel->dirty = 1; }
void dirsizes_cmd (void) { WPanel *panel = current_panel; int i; dirsize_status_msg_t dsm; memset (&dsm, 0, sizeof (dsm)); status_msg_init (STATUS_MSG (&dsm), _("Directory scanning"), 1.0, dirsize_status_init_cb, dirsize_status_update_cb, dirsize_status_deinit_cb); for (i = 0; i < panel->dir.len; i++) if (S_ISDIR (panel->dir.list[i].st.st_mode) && ((panel->dirs_marked && panel->dir.list[i].f.marked) || !panel->dirs_marked) && !DIR_IS_DOTDOT (panel->dir.list[i].fname)) { vfs_path_t *p; size_t dir_count = 0; size_t count = 0; uintmax_t total = 0; gboolean ok; p = vfs_path_from_str (panel->dir.list[i].fname); ok = compute_dir_size (p, &dsm, &dir_count, &count, &total, TRUE) != FILE_CONT; vfs_path_free (p); if (ok) break; panel->dir.list[i].st.st_size = (off_t) total; panel->dir.list[i].f.dir_size_computed = 1; } status_msg_deinit (STATUS_MSG (&dsm)); recalculate_panel_summary (panel); if (current_panel->sort_field->sort_routine == (GCompareFunc) sort_size) panel_re_sort (panel); panel->dirty = 1; }
void dirsizes_cmd (void) { WPanel *panel = current_panel; int i; off_t marked; double total; for (i = 0; i < panel->count; i++) if (S_ISDIR (panel->dir.list [i].st.st_mode) && ((panel->dirs_marked && panel->dir.list [i].f.marked) || !panel->dirs_marked) && strcmp (panel->dir.list [i].fname, "..") != 0) { total = 0.0l; compute_dir_size (panel->dir.list [i].fname, &marked, &total); panel->dir.list [i].st.st_size = (off_t) total; panel->dir.list [i].f.dir_size_computed = 1; } recalculate_panel_summary (panel); panel_re_sort (panel); panel->dirty = 1; }
void swap_panels (void) { WPanel *panel1, *panel2; Widget *tmp_widget; panel1 = PANEL (panels[0].widget); panel2 = PANEL (panels[1].widget); if (panels[0].type == view_listing && panels[1].type == view_listing && !mc_config_get_bool (mc_main_config, CONFIG_PANELS_SECTION, "simple_swap", FALSE)) { WPanel panel; #define panelswap(x) panel.x = panel1->x; panel1->x = panel2->x; panel2->x = panel.x; #define panelswapstr(e) strcpy (panel.e, panel1->e); \ strcpy (panel1->e, panel2->e); \ strcpy (panel2->e, panel.e); /* Change content and related stuff */ panelswap (dir); panelswap (active); panelswap (cwd_vpath); panelswap (lwd_vpath); panelswap (marked); panelswap (dirs_marked); panelswap (total); panelswap (top_file); panelswap (selected); panelswap (is_panelized); panelswap (dir_stat); #undef panelswapstr #undef panelswap panel1->searching = FALSE; panel2->searching = FALSE; if (current_panel == panel1) current_panel = panel2; else current_panel = panel1; /* if sort options are different -> resort panels */ if (memcmp (&panel1->sort_info, &panel2->sort_info, sizeof (dir_sort_options_t)) != 0) { panel_re_sort (other_panel); panel_re_sort (current_panel); } if (widget_is_active (panels[0].widget)) dlg_select_widget (panels[1].widget); else if (widget_is_active (panels[1].widget)) dlg_select_widget (panels[0].widget); } else { WPanel *tmp_panel; int x, y, cols, lines; int tmp_type; tmp_panel = right_panel; right_panel = left_panel; left_panel = tmp_panel; if (panels[0].type == view_listing) { if (strcmp (panel1->panel_name, get_nth_panel_name (0)) == 0) { g_free (panel1->panel_name); panel1->panel_name = g_strdup (get_nth_panel_name (1)); } } if (panels[1].type == view_listing) { if (strcmp (panel2->panel_name, get_nth_panel_name (1)) == 0) { g_free (panel2->panel_name); panel2->panel_name = g_strdup (get_nth_panel_name (0)); } } x = panels[0].widget->x; y = panels[0].widget->y; cols = panels[0].widget->cols; lines = panels[0].widget->lines; panels[0].widget->x = panels[1].widget->x; panels[0].widget->y = panels[1].widget->y; panels[0].widget->cols = panels[1].widget->cols; panels[0].widget->lines = panels[1].widget->lines; panels[1].widget->x = x; panels[1].widget->y = y; panels[1].widget->cols = cols; panels[1].widget->lines = lines; tmp_widget = panels[0].widget; panels[0].widget = panels[1].widget; panels[1].widget = tmp_widget; tmp_type = panels[0].type; panels[0].type = panels[1].type; panels[1].type = tmp_type; /* force update formats because of possible changed sizes */ if (panels[0].type == view_listing) set_panel_formats (PANEL (panels[0].widget)); if (panels[1].type == view_listing) set_panel_formats (PANEL (panels[1].widget)); } }