|
Pierre Dorbais |
17f7db2 |
diff -up vifm-0.5/src/keys.c.old vifm-0.5/src/keys.c
|
|
Pierre Dorbais |
17f7db2 |
--- vifm-0.5/src/keys.c.old 2010-05-16 16:06:52.000000000 +0200
|
|
Pierre Dorbais |
17f7db2 |
+++ vifm-0.5/src/keys.c 2010-05-16 16:11:21.000000000 +0200
|
|
Pierre Dorbais |
17f7db2 |
@@ -330,6 +330,49 @@ restore_filename_filter(FileView *view)
|
|
Pierre Dorbais |
17f7db2 |
moveto_list_pos(view, view->list_pos);
|
|
Pierre Dorbais |
17f7db2 |
}
|
|
Pierre Dorbais |
17f7db2 |
|
|
Pierre Dorbais |
17f7db2 |
+/** Deselects all files.
|
|
Pierre Dorbais |
17f7db2 |
+ */
|
|
Pierre Dorbais |
17f7db2 |
+static void
|
|
Pierre Dorbais |
17f7db2 |
+deselect_all_files(FileView* view)
|
|
Pierre Dorbais |
17f7db2 |
+{
|
|
Pierre Dorbais |
17f7db2 |
+ int x;
|
|
Pierre Dorbais |
17f7db2 |
+ for(x = 0; x < view->list_rows; x++)
|
|
Pierre Dorbais |
17f7db2 |
+ view->dir_entry[x].selected = 0;
|
|
Pierre Dorbais |
17f7db2 |
+ view->selected_files = 0;
|
|
Pierre Dorbais |
17f7db2 |
+}
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+/** Selects given number of files or current file.
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+ If count == 0 and there is no selection, selects the current file.
|
|
Pierre Dorbais |
17f7db2 |
+ Otherwise, if count == 1, selects number of files specified by
|
|
Pierre Dorbais |
17f7db2 |
+ count_buf.
|
|
Pierre Dorbais |
17f7db2 |
+ */
|
|
Pierre Dorbais |
17f7db2 |
+static void
|
|
Pierre Dorbais |
17f7db2 |
+select_n_files(FileView* view, int count, char* count_buf)
|
|
Pierre Dorbais |
17f7db2 |
+{
|
|
Pierre Dorbais |
17f7db2 |
+ if (count)
|
|
Pierre Dorbais |
17f7db2 |
+ {
|
|
Pierre Dorbais |
17f7db2 |
+ int x = 0;
|
|
Pierre Dorbais |
17f7db2 |
+ int y = view->list_pos;
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+ deselect_all_files(view);
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+ for ( ; x < atoi(count_buf); x++)
|
|
Pierre Dorbais |
17f7db2 |
+ {
|
|
Pierre Dorbais |
17f7db2 |
+ view->dir_entry[y].selected = 1;
|
|
Pierre Dorbais |
17f7db2 |
+ y++;
|
|
Pierre Dorbais |
17f7db2 |
+ if (y >= view->list_rows)
|
|
Pierre Dorbais |
17f7db2 |
+ break;
|
|
Pierre Dorbais |
17f7db2 |
+ }
|
|
Pierre Dorbais |
17f7db2 |
+ view->selected_files = y - view->list_pos;
|
|
Pierre Dorbais |
17f7db2 |
+ }
|
|
Pierre Dorbais |
17f7db2 |
+ else if (!view->selected_files)
|
|
Pierre Dorbais |
17f7db2 |
+ {
|
|
Pierre Dorbais |
17f7db2 |
+ view->dir_entry[view->list_pos].selected = 1;
|
|
Pierre Dorbais |
17f7db2 |
+ view->selected_files = 1;
|
|
Pierre Dorbais |
17f7db2 |
+ }
|
|
Pierre Dorbais |
17f7db2 |
+}
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
static void
|
|
Pierre Dorbais |
17f7db2 |
yank_files(FileView *view, int count, char *count_buf)
|
|
Pierre Dorbais |
17f7db2 |
{
|
|
Pierre Dorbais |
17f7db2 |
@@ -376,6 +419,25 @@ yank_files(FileView *view, int count, ch
|
|
Pierre Dorbais |
17f7db2 |
}
|
|
Pierre Dorbais |
17f7db2 |
|
|
Pierre Dorbais |
17f7db2 |
static void
|
|
Pierre Dorbais |
17f7db2 |
+delete_files(FileView *view, int count, char *count_buf)
|
|
Pierre Dorbais |
17f7db2 |
+{
|
|
Pierre Dorbais |
17f7db2 |
+ char buf[32];
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+ select_n_files(view, count, count_buf);
|
|
Pierre Dorbais |
17f7db2 |
+ get_all_selected_files(view);
|
|
Pierre Dorbais |
17f7db2 |
+ delete_file(view);
|
|
Pierre Dorbais |
17f7db2 |
+ free_selected_file_array(view);
|
|
Pierre Dorbais |
17f7db2 |
+ count = view->selected_files;
|
|
Pierre Dorbais |
17f7db2 |
+ deselect_all_files(view);
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+ draw_dir_list(view, view->top_line, view->list_pos);
|
|
Pierre Dorbais |
17f7db2 |
+ moveto_list_pos(view, view->list_pos);
|
|
Pierre Dorbais |
17f7db2 |
+ snprintf(buf, sizeof(buf), " %d %s deleted.", count,
|
|
Pierre Dorbais |
17f7db2 |
+ count == 1 ? "file" : "files");
|
|
Pierre Dorbais |
17f7db2 |
+ status_bar_message(buf);
|
|
Pierre Dorbais |
17f7db2 |
+}
|
|
Pierre Dorbais |
17f7db2 |
+
|
|
Pierre Dorbais |
17f7db2 |
+static void
|
|
Pierre Dorbais |
17f7db2 |
tag_file(FileView *view)
|
|
Pierre Dorbais |
17f7db2 |
{
|
|
Pierre Dorbais |
17f7db2 |
if(view->dir_entry[view->list_pos].selected == 0)
|
|
Pierre Dorbais |
17f7db2 |
@@ -1077,21 +1139,7 @@ main_key_press_cb(FileView *view)
|
|
Pierre Dorbais |
17f7db2 |
if(curr_stats.last_char == 'd')
|
|
Pierre Dorbais |
17f7db2 |
{
|
|
Pierre Dorbais |
17f7db2 |
clear_num_window();
|
|
Pierre Dorbais |
17f7db2 |
- if(view->selected_files)
|
|
Pierre Dorbais |
17f7db2 |
- delete_file(view);
|
|
Pierre Dorbais |
17f7db2 |
- else if(count)
|
|
Pierre Dorbais |
17f7db2 |
- {
|
|
Pierre Dorbais |
17f7db2 |
- int x;
|
|
Pierre Dorbais |
17f7db2 |
- int y = view->list_pos;
|
|
Pierre Dorbais |
17f7db2 |
- for(x = 0; x < atoi(count_buf); x++)
|
|
Pierre Dorbais |
17f7db2 |
- {
|
|
Pierre Dorbais |
17f7db2 |
- view->dir_entry[y].selected = 1;
|
|
Pierre Dorbais |
17f7db2 |
- y++;
|
|
Pierre Dorbais |
17f7db2 |
- }
|
|
Pierre Dorbais |
17f7db2 |
- delete_file(view);
|
|
Pierre Dorbais |
17f7db2 |
- }
|
|
Pierre Dorbais |
17f7db2 |
- else
|
|
Pierre Dorbais |
17f7db2 |
- delete_file(view);
|
|
Pierre Dorbais |
17f7db2 |
+ delete_files(view, count, count_buf);
|
|
Pierre Dorbais |
17f7db2 |
reset_last_char = 1;
|
|
Pierre Dorbais |
17f7db2 |
}
|
|
Pierre Dorbais |
17f7db2 |
}
|