Merge branch '3593_find_file_empty_name'

* 3593_find_file_empty_name:
  Disable some filename related checkboxes if filename is empty.
  Find file: describe "File name" input field.
  Ticket #3593: Find file: empty file name matches any file name.
This commit is contained in:
Andrew Borodin 2016-02-21 10:49:23 +03:00
commit 89bd95c300
3 changed files with 56 additions and 7 deletions

View File

@ -1414,7 +1414,12 @@ directory tree
.\"Directory Tree" .\"Directory Tree"
figure. figure.
.PP .PP
Option \"Whole words\" allows select only those files containing matches that The "File name" input field contains a filename pattern to be searched
for. It is interpeted as a shell pattern or as a regular expression
depending on the state of the "Using shell patterns" checkbox. An empty
value is valid and matches any file name.
.PP
Option "Whole words" allows select only those files containing matches that
form whole words. Like grep \-w. form whole words. Like grep \-w.
.PP .PP
You can start the search by pressing the OK button. You can start the search by pressing the OK button.

View File

@ -1500,9 +1500,14 @@ Midnight Commander создает дерево путем просмотра т
дерева каталогов\&. дерева каталогов\&.
.\"Directory Tree" .\"Directory Tree"
.PP .PP
Опция \"Только целые слова\" устанавливает, что шаблон поиска Поле "Шаблон имени" содержит маску имени файла, по которой происходит поиск.
соответствует только целым словам (например, если указано \"foo\", В зависимости от опции "Метасимволы shell" маска интерпретируется либо по тем же
не будет найдено слово \"foobar\"). правилам, что и в командной оболочке, либо как регулярное выражение. Пустое
поле также допустимо и соответствует любому имени.
.PP
Опция "Только целые слова" устанавливает, что шаблон поиска
соответствует только целым словам (например, если указано "foo",
не будет найдено слово "foobar").
.PP .PP
Для того, чтобы начать поиск, нажмите экранную кнопку <Дальше>. Для того, чтобы начать поиск, нажмите экранную кнопку <Дальше>.
Во время поиска его можно приостановить кнопкой <Приостановить> Во время поиска его можно приостановить кнопкой <Приостановить>
@ -1521,7 +1526,7 @@ Midnight Commander создает дерево путем просмотра т
.B C\-r .B C\-r
для возврата к обычному списку файлов. для возврата к обычному списку файлов.
.PP .PP
Опция \"Разрешить игнорирование каталогов\" совместно с расположенным ниже Опция "Разрешить игнорирование каталогов" совместно с расположенным ниже
полем ввода позволяет задать список каталогов, которые нужно пропускать при полем ввода позволяет задать список каталогов, которые нужно пропускать при
поиске (например, вы знаете, что искомого файла нет на CDROM или не хотите поиске (например, вы знаете, что искомого файла нет на CDROM или не хотите
искать в каталогах, подключенных через NFS по очень медленному каналу). искать в каталогах, подключенных через NFS по очень медленному каналу).

View File

@ -415,6 +415,20 @@ find_check_regexp (const char *r)
return regexp_ok; return regexp_ok;
} }
/* --------------------------------------------------------------------------------------------- */
static void
find_toggle_enable_params (void)
{
gboolean disable = in_name->buffer[0] == '\0';
widget_disable (WIDGET (file_pattern_cbox), disable);
widget_disable (WIDGET (file_case_sens_cbox), disable);
#ifdef HAVE_CHARSET
widget_disable (WIDGET (file_all_charsets_cbox), disable);
#endif
}
/* --------------------------------------------------------------------------------------------- */ /* --------------------------------------------------------------------------------------------- */
/** /**
* Callback for the parameter dialog. * Callback for the parameter dialog.
@ -424,10 +438,21 @@ find_check_regexp (const char *r)
static cb_ret_t static cb_ret_t
find_parm_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) find_parm_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
{ {
/* FIXME: HACK: use first draw of dialog to resolve widget state dependencies.
* Use this time moment to check input field content. We can't do that in MSG_INIT
* because history is not loaded yet.
* Probably, we want new MSG_ACTIVATE message as complement to MSG_VALIDATE one.
*/
static gboolean first_draw = TRUE;
WDialog *h = DIALOG (w); WDialog *h = DIALOG (w);
switch (msg) switch (msg)
{ {
case MSG_INIT:
first_draw = TRUE;
return MSG_HANDLED;
case MSG_ACTION: case MSG_ACTION:
if (sender == WIDGET (content_use_cbox)) if (sender == WIDGET (content_use_cbox))
{ {
@ -456,7 +481,6 @@ find_parm_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, voi
return MSG_NOT_HANDLED; return MSG_NOT_HANDLED;
case MSG_VALIDATE: case MSG_VALIDATE:
if (h->ret_value != B_ENTER) if (h->ret_value != B_ENTER)
return MSG_HANDLED; return MSG_HANDLED;
@ -483,6 +507,18 @@ find_parm_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, voi
return MSG_HANDLED; return MSG_HANDLED;
case MSG_POST_KEY:
if (h->current->data == in_name)
find_toggle_enable_params ();
return MSG_HANDLED;
case MSG_DRAW:
if (first_draw)
find_toggle_enable_params ();
first_draw = FALSE;
/* fall through to call MSG_DRAW default handler */
default: default:
return dlg_default_callback (w, sender, msg, parm, data); return dlg_default_callback (w, sender, msg, parm, data);
} }
@ -772,8 +808,11 @@ find_parameters (char **start_dir, ssize_t * start_dir_len,
*content = (options.content_use && in_with->buffer[0] != '\0') *content = (options.content_use && in_with->buffer[0] != '\0')
? g_strdup (in_with->buffer) : NULL; ? g_strdup (in_with->buffer) : NULL;
*start_dir = in_start->buffer[0] != '\0' ? in_start->buffer : (char *) "."; if (in_name->buffer[0] != '\0')
*pattern = g_strdup (in_name->buffer); *pattern = g_strdup (in_name->buffer);
else
*pattern = g_strdup (options.file_pattern ? "*" : ".*");
*start_dir = in_start->buffer[0] != '\0' ? in_start->buffer : (char *) ".";
if (in_start_dir != INPUT_LAST_TEXT) if (in_start_dir != INPUT_LAST_TEXT)
g_free (in_start_dir); g_free (in_start_dir);
in_start_dir = g_strdup (*start_dir); in_start_dir = g_strdup (*start_dir);