diff --git a/doc/man/mc.1.in b/doc/man/mc.1.in index 3d92a6381..56292beb2 100644 --- a/doc/man/mc.1.in +++ b/doc/man/mc.1.in @@ -3177,6 +3177,13 @@ don't need to quote those characters in the middle of the command line. On the other hand, you cannot use them to change selection when the command line is not empty. .TP +.I reverse_files_only +Allow revert selection of files only. This variable is on by default. +If on, the reverse selection is applied to files only, not to directories. +The selection of directories is untouched. If off, the reverse +selection is applied to files as well to directories: all unselected +items become selected, and vice versa. +.TP .I panel_scroll_pages If set (the default), panel will scroll by half the display when the cursor reaches the end or the beginning of the panel, otherwise it diff --git a/doc/man/ru/mc.1.in b/doc/man/ru/mc.1.in index 08f31818a..f5ca3459f 100644 --- a/doc/man/ru/mc.1.in +++ b/doc/man/ru/mc.1.in @@ -3551,7 +3551,7 @@ router). Эта опция работает только в том случае, .PP .I only_leading_plus_minus .IP -устанавливает специальный режим обработки символов '+', '-', '*' в +Устанавливает специальный режим обработки символов '+', '-', '*' в командной строке. Эти символы используются для выбора, отмены выбора и инвертирования выбора, но выполняют такую функцию только если командная строка пуста. В середине командной строки эти символы уже не вызывают @@ -3559,6 +3559,13 @@ router). Эта опция работает только в том случае, использовать эти символы для таких операций, если командная строка не пуста. .PP +.I reverse_files_only +.IP +Если опция установлена (по умолчанию она установлена), инвертирование +выбора применяется только к файлам, но не к каталогам. Выбор каталогов +не изменяется. Если не установлена, производится инвертирование как файлов, +так и каталогов. Все невыбранные объекты становятся выбранными и наоборот. +.PP .I panel_scroll_pages .IP Если опция установлена (по умолчанию она установлена), то когда курсор diff --git a/src/cmd.c b/src/cmd.c index 47a2fb2b6..b8f9911f3 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -53,6 +53,8 @@ #include "../src/search/search.h" +#include "../src/mcconfig/mcconfig.h" + #include "cmd.h" /* Our definitions */ #include "fileopctx.h" #include "file.h" /* file operation routines */ @@ -73,8 +75,7 @@ #include "layout.h" /* get_current_type() */ #include "ext.h" /* regex_command() */ #include "boxes.h" /* cd_dialog() */ -#include "setup.h" /* save_setup() */ -#include "../src/mcconfig/mcconfig.h" +#include "setup.h" #include "execute.h" /* toggle_panels() */ #include "history.h" #include "strutil.h" @@ -97,6 +98,9 @@ int use_internal_edit = 1; /* Automatically fills name with current selected item name on mkdir */ int auto_fill_mkdir_name = 1; +/* if set, only selection of files is inverted */ +int reverse_files_only = 1; + /* selection flags */ typedef enum { SELECT_FILES_ONLY = 1 << 0, @@ -494,9 +498,13 @@ void reverse_selection_cmd (void) { int i; + file_entry *file; - for (i = 0; i < current_panel->count; i++) - do_file_mark (current_panel, i, !current_panel->dir.list [i].f.marked); + for (i = 0; i < current_panel->count; i++) { + file = ¤t_panel->dir.list [i]; + if ((reverse_files_only == 0) || !S_ISDIR (file->st.st_mode)) + do_file_mark (current_panel, i, !file->f.marked); + } } static void diff --git a/src/setup.c b/src/setup.c index eb58948ce..8e6028304 100644 --- a/src/setup.c +++ b/src/setup.c @@ -236,6 +236,7 @@ static const struct { { "horizontal_split", &horizontal_split }, { "mcview_remember_file_position", &mcview_remember_file_position }, { "auto_fill_mkdir_name", &auto_fill_mkdir_name }, + { "reverse_files_only", &reverse_files_only }, { 0, 0 } }; diff --git a/src/setup.h b/src/setup.h index 88b655ed2..7872365d2 100644 --- a/src/setup.h +++ b/src/setup.h @@ -32,6 +32,7 @@ extern int startup_right_mode; extern int verbose; extern int mouse_close_dialog; +extern int reverse_files_only; #define PROFILE_NAME ".mc/ini" #define HOTLIST_FILENAME ".mc/hotlist"