diff --git a/doc/man/es/mc.1.in b/doc/man/es/mc.1.in index bd6121352..9460d0b9f 100644 --- a/doc/man/es/mc.1.in +++ b/doc/man/es/mc.1.in @@ -395,22 +395,6 @@ en el diálogo de selección de código. usadas para seleccionar el archivo superior en un panel, el archivo central y el inferior del panel, respectivamente. .TP -.B Ctrl\-s, Alt\-s -inicia la búsqueda de un archivo en la lista de directorios (panel activo). A -partir de ese momento las teclas pulsadas se van añadiendo a la cadena en búsqueda -y no a la línea de órdenes. Si la opción de -.I Mostrar Mini\-estado -está habilitada, la cadena a buscar se podrá ver en la línea de mini\-estado. -Conforme tecleemos, dentro del panel activo la barra de selección se desplazará -al siguiente archivo o directorio cuyo nombre coincida con las letras -introducidas. Se pueden usar las teclas -.I borrar -o -.I suprimir -para corregir errores de escritura. Si pulsamos -.I Ctrl\-s -de nuevo, se busca la siguiente coincidencia. -.TP .B Alt\-t rota el listado de pantalla actual para mostrar el siguiente modo de listado. Con esto es posible intercambiar rápidamente de un listado @@ -509,6 +493,24 @@ con el ratón. muestra el historial de directorios visitados, equivale a pulsar la .I v con el ratón. +.\"NODE " Quick search" +.SH " Quick search" +.TP +.B Ctrl\-s, Alt\-s +inicia la búsqueda de un archivo en la lista de directorios (panel activo). A +partir de ese momento las teclas pulsadas se van añadiendo a la cadena en búsqueda +y no a la línea de órdenes. Si la opción de +.I Mostrar Mini\-estado +está habilitada, la cadena a buscar se podrá ver en la línea de mini\-estado. +Conforme tecleemos, dentro del panel activo la barra de selección se desplazará +al siguiente archivo o directorio cuyo nombre coincida con las letras +introducidas. Se pueden usar las teclas +.I borrar +o +.I suprimir +para corregir errores de escritura. Si pulsamos +.I Ctrl\-s +de nuevo, se busca la siguiente coincidencia. .\"NODE " Shell Command Line" .SH " Línea de Órdenes del Sistema" Esta sección enumera las teclas útiles para evitar la excesiva escritura diff --git a/doc/man/hu/mc.1.in b/doc/man/hu/mc.1.in index c0497748f..26817a56a 100644 --- a/doc/man/hu/mc.1.in +++ b/doc/man/hu/mc.1.in @@ -389,20 +389,6 @@ A panel legfelső, középső és alsó fájljának kiválasztásához használd sorban a megfelelő billentyű\-kombinációt. Linuxban M\-h a "history" bekapcsolására szolgál. .PP -.B C\-s, M\-s -Elindítja a fájl keresést a könyvtár listában. Amikor a keresés -aktív, a billentyűlenyomások hozzáadódnak a keresett szöveghez a -parancssorban. Ha a -.I Mini fájlinfó -opció engedélyezve van, a kereső szöveg a mini\-fájlinfó sorban jelenik -meg. Amikor gépelsz, a mini kiválasztó sáv átlép a következő fájlra, -amely a begépelt szöveggel egyezik. A -.IR backspace , -vagy a -.I DEL -gombokat használhatod a gépelési hibák javítására. Ha a C\-s gombokat -használod újra, új keresés kezdhető. -.PP .B M\-t Vált a jelenlegi lista megjelenítési módról a következő megjelenítési módra. Ezzel gyorsan át tudsz váltani a hosszú listáról a rendezett @@ -472,6 +458,22 @@ egérrel történő lenyomásával. .B M\-S\-h, M\-H Megjeleníti a könyvtár előzményeket, azonos a 'v' egérrel történő lenyomásával. +.\"NODE " Quick search" +.SH " Quick search" +.PP +.B C\-s, M\-s +Elindítja a fájl keresést a könyvtár listában. Amikor a keresés +aktív, a billentyűlenyomások hozzáadódnak a keresett szöveghez a +parancssorban. Ha a +.I Mini fájlinfó +opció engedélyezve van, a kereső szöveg a mini\-fájlinfó sorban jelenik +meg. Amikor gépelsz, a mini kiválasztó sáv átlép a következő fájlra, +amely a begépelt szöveggel egyezik. A +.IR backspace , +vagy a +.I DEL +gombokat használhatod a gépelési hibák javítására. Ha a C\-s gombokat +használod újra, új keresés kezdhető. .\"NODE " Shell Command Line" .SH " Shell parancssor" Ez a rész tartalamazza azokat a billentyű\-kombinációkat, diff --git a/doc/man/it/mc.1.in b/doc/man/it/mc.1.in index 2dd86ad96..1b41ded00 100644 --- a/doc/man/it/mc.1.in +++ b/doc/man/it/mc.1.in @@ -400,20 +400,6 @@ the dialog of encodings. usato per selezionare rispettivamente il file superiore, il file centrale o quello inferiore in un pannello. .TP -.B C\-s, M\-s -inizia una ricerca nella directory. Quando la ricerca è attiva i dati -immessi dall'utente vengono aggiunti alla stringa di ricerca invece -della riga di comando. Se l'opzione -.I Mostra mini\-stato -è abilitata, la stringa di ricerca viene mostrata nella riga di -mini\-stato. Scrivendo, la barra di selezione si muove al prossimo -file che comincia con le lettere battute. I tasti -.I backspace -o -.I canc -possono essere utilizzati per correggere errori di battitura. Se viene premuto -nuovamente, viene ricercata la corrispondenza successiva. -.TP .B M\-t cambia il modo di visualizzazione corrente per mostrare la modalità successiva. In questo modo è possibile cambiare velocemente da listati @@ -479,6 +465,22 @@ premere '>' con il mouse. .TP .B M\-S\-h, M\-H mostra la cronologia directory, equivalente a premere 'v' con il mouse. +.\"NODE " Quick search" +.SH " Quick search" +.TP +.B C\-s, M\-s +inizia una ricerca nella directory. Quando la ricerca è attiva i dati +immessi dall'utente vengono aggiunti alla stringa di ricerca invece +della riga di comando. Se l'opzione +.I Mostra mini\-stato +è abilitata, la stringa di ricerca viene mostrata nella riga di +mini\-stato. Scrivendo, la barra di selezione si muove al prossimo +file che comincia con le lettere battute. I tasti +.I backspace +o +.I canc +possono essere utilizzati per correggere errori di battitura. Se viene premuto +nuovamente, viene ricercata la corrispondenza successiva. .\"NODE " Shell Command Line" .SH " Shell a riga di comando" Questa sezione elenca i tasti utili ad evitare troppe battiture diff --git a/doc/man/mc.1.in b/doc/man/mc.1.in index 88e019e4d..931631bad 100644 --- a/doc/man/mc.1.in +++ b/doc/man/mc.1.in @@ -486,20 +486,6 @@ the dialog of encodings. used to select the top file in a panel, the middle file and the bottom one, respectively. .TP -.B C\-s, Alt\-s -start a filename search in the directory listing. When the search is -active, the user input will be added to the search string instead of -the command line. If the -.I Show mini\-status -option is enabled the search string is shown on the mini\-status -line. When typing, the selection bar will move to the next file -starting with the typed letters. The -.I backspace -or -.I DEL -keys can be used to correct typing mistakes. If C\-s is pressed -again, the next match is searched for. -.TP .B Alt\-t toggle the current display listing to show the next display listing mode. @@ -586,6 +572,29 @@ with the mouse. .B Alt\-Shift\-h, Alt\-H displays the directory history, equivalent to depressing the 'v' with the mouse. +.\"NODE " Quick search" +.SH " Quick search" +The Quick search mode allows to perform fast file search in file panel. +Press +.I C\-s +or +.I Alt\-s +to start a filename search in the directory listing. +.P +When the search is active, the user input will be added to the search string +instead of the command line. If the +.I Show mini\-status +option is enabled the search string is shown on the mini\-status +line. When typing, the selection bar will move to the next file +starting with the typed letters. The +.I backspace +or +.I DEL +keys can be used to correct typing mistakes. If C\-s is pressed +again, the next match is searched for. +.P +Besides the filename characters, you can also use wildcard +characters '*' and '?'. .\"NODE " Shell Command Line" .SH " Shell Command Line" This section lists keys which are useful to avoid excessive typing when diff --git a/doc/man/pl/mc.1.in b/doc/man/pl/mc.1.in index 7e57a4fa8..cc7fc83b0 100644 --- a/doc/man/pl/mc.1.in +++ b/doc/man/pl/mc.1.in @@ -317,21 +317,6 @@ the dialog of encodings. .BR M\-g ", " M\-r ", " M\-j . Używane do wybierania najwyższego, środkowego i najniższego pliku w panelu. .PP -.BR C\-s ", " M\-s . -Uruchamia szukanie pliku w katalogu na podstawie jego nazwy. Kiedy szukanie -jest aktywne, każde naciśnięcie klawisza doda jeden znak do poszukiwania -zamiast wypisania go linii poleceń. Jeśli opcja -.I "Show mini\-status" -jest włączona, szukany ciąg znaków pojawia się w linii mini\-statusu. Kiedy -wpisujemy znak, linia wyboru przemieszcza się do następnego pliku zaczynającego -się od podanych liter. Klawisze -.I backspace -lub -.I del -mogą być używane do poprawiania błędów. Jeśli C\-s zostanie naciśnięte ponownie, -Midnight Commander rozpoczyna szukanie następnego pliku -zaczynającego się od podanych znaków. -.PP .BR M\-t . Przełącza tryb wyświetlania do następnego możliwego. Używając tej opcji łatwo jest przejść szybko z długiego do krótkiego trybu wyświetlania @@ -399,6 +384,23 @@ w '>'. .BR M\-S\-h ", " M\-H . Wyświetla historię katalogów, podobne działanie do kliknięcia myszką 'v'. .PP +.\"NODE " Quick search" +.SH " Quick search" +.PP +.BR C\-s ", " M\-s . +Uruchamia szukanie pliku w katalogu na podstawie jego nazwy. Kiedy szukanie +jest aktywne, każde naciśnięcie klawisza doda jeden znak do poszukiwania +zamiast wypisania go linii poleceń. Jeśli opcja +.I "Show mini\-status" +jest włączona, szukany ciąg znaków pojawia się w linii mini\-statusu. Kiedy +wpisujemy znak, linia wyboru przemieszcza się do następnego pliku zaczynającego +się od podanych liter. Klawisze +.I backspace +lub +.I del +mogą być używane do poprawiania błędów. Jeśli C\-s zostanie naciśnięte ponownie, +Midnight Commander rozpoczyna szukanie następnego pliku +zaczynającego się od podanych znaków. .\"NODE " Shell Command Line" .SH " Linia Powłoki" Ta sekcja opisuje klawisze, które są użyteczne do efektywniejszego diff --git a/doc/man/ru/mc.1.in b/doc/man/ru/mc.1.in index 491b44821..1e6484c3b 100644 --- a/doc/man/ru/mc.1.in +++ b/doc/man/ru/mc.1.in @@ -487,21 +487,6 @@ Midnight Commander\-а. Для возврата к вашему приложен верхний, средний или нижний файл из числа отображаемых в данный момент на панели. .PP -.B C\-s, M\-s. -Инициирует режим поиска имен файлов в текущем каталоге по первым -символам имени. После нажатия одной из этих комбинаций, вводимые символы -отображаются не в командной строке, а в строке поиска. Если режим -.I "Показ мини\-статуса" -включен, эта строка отображается на месте строки мини\-статуса. В -процессе ввода последующих символов линия подсветки перемещается к -следующему файлу, название которого начинается с введенной строки -символов. Клавиши -.I backspace -или -.I DEL -могут использоваться для исправления ошибок. Если C\-s нажато снова, -осуществляется поиск следующего подходящего файла. -.PP .B M\-t Циклически переключает режимы отображения списка файлов текущего каталога. С помощью этой комбинации клавиш можно быстро переключаться из @@ -587,6 +572,31 @@ Midnight Commander\-а. Для возврата к вашему приложен .B M\-S\-h, M\-H Отображает историю перемещения по каталогам; эквивалентно нажатию мышкой на символ 'v' в верхнем углу панели. +.\"NODE " Quick search" +.SH "Быстрый поиск" +Режим быстрого поиска позволяет быстро найти нужный файл в каталоге, +отображённом в файловой панели, по первым символам имени. +Для перехода в режим быстрого поиска используются клавиатурные сочетания +.B C\-s +или +.B M\-s. +.P +После нажатия одной из этих комбинаций вводимые символы отображаются не +в командной строке, а в строке поиска. Если режим +.I "Показ мини\-статуса" +включен, эта строка отображается на месте строки мини\-статуса. В +процессе ввода последующих символов линия подсветки перемещается к +следующему файлу, название которого начинается с введенной строки +символов. Клавиши +.I Backspace +или +.I DEL +могут использоваться для исправления ошибок. Если +.I C\-s +нажато снова, осуществляется поиск следующего подходящего файла. +.P +Кроме обычных символов в имени файла также можно использовать +символы маски '*' и '?'. .\"NODE " Shell Command Line" .SH " Командная строка оболочки" В этом разделе перечислены команды, которые позволяют сократить число diff --git a/doc/man/sr/mc.1.in b/doc/man/sr/mc.1.in index 4309d0a48..2a833ba27 100644 --- a/doc/man/sr/mc.1.in +++ b/doc/man/sr/mc.1.in @@ -372,20 +372,6 @@ the dialog of encodings. користе се за бирање највише датотеке у окну, средње датотеке и најниже, тим редом. .TP -.B C\-s, M\-s -започиње претрагу назива датотека у списку директоријума. Када је -претрага укључена, кориснички унос ће бити додан на ниску за претрагу -уместо на наредбени ред. Ако је избор -.I Прикажи мини стање -укључен, ниска за претрагу се приказује у реду мини стања. При куцању, -ред за бирање ће се преместити на следећу датотеку, почевши од -укуцаних слова. Тастери -.I backspace -или -.I DEL -се могу користити за исправљање грешака у куцању. Ако се комбинација -C\-s поново притисне, тражи се следеће поклапање. -.TP .B M\-t смењује текући списак приказа на следећи режим списка приказа. Уз ово је могуће брзо прећи са дугачког списка на обичан или режим који је @@ -452,6 +438,22 @@ C\-s поново притисне, тражи се следеће поклап .TP .B M\-S\-h, M\-H приказује историју директоријума, еквивалент притиску `v' дугметом миша. +.\"NODE " Quick search" +.SH " Quick search" +.TP +.B C\-s, M\-s +започиње претрагу назива датотека у списку директоријума. Када је +претрага укључена, кориснички унос ће бити додан на ниску за претрагу +уместо на наредбени ред. Ако је избор +.I Прикажи мини стање +укључен, ниска за претрагу се приказује у реду мини стања. При куцању, +ред за бирање ће се преместити на следећу датотеку, почевши од +укуцаних слова. Тастери +.I backspace +или +.I DEL +се могу користити за исправљање грешака у куцању. Ако се комбинација +C\-s поново притисне, тражи се следеће поклапање. .\"NODE " Shell Command Line" .SH " Наредбени ред љуске" Овај одељак набраја пречице које су корисне за избегавање претераног diff --git a/src/cmd.c b/src/cmd.c index ba7b792fc..a79a797d7 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1019,7 +1019,10 @@ void edit_symlink_cmd (void) void help_cmd (void) { - interactive_display (NULL, "[main]"); + if (current_panel->searching) + interactive_display (NULL, "[Quick search]"); + else + interactive_display (NULL, "[main]"); } void diff --git a/src/screen.c b/src/screen.c index 428fe8880..dc25ce990 100644 --- a/src/screen.c +++ b/src/screen.c @@ -2193,80 +2193,82 @@ mark_file (WPanel *panel) static void do_search (WPanel *panel, int c_code) { - size_t l, max, buf_max; + size_t l; int i, sel; - int wrapped = 0; + gboolean wrapped = FALSE; char *act; + mc_search_t *search; + char *reg_exp, *esc_str; + gboolean is_found = FALSE; l = strlen (panel->search_buffer); if (c_code == KEY_BACKSPACE) { - if (l != 0) { + if (l != 0) { act = panel->search_buffer + l; str_prev_noncomb_char (&act, panel->search_buffer); act[0] = '\0'; } panel->search_chpoint = 0; } else { - if (c_code && (gsize) panel->search_chpoint < sizeof (panel->search_char)) { + if (c_code != 0 && (gsize) panel->search_chpoint < sizeof (panel->search_char)) { panel->search_char[panel->search_chpoint] = c_code; panel->search_chpoint++; - } - + } + if (panel->search_chpoint > 0) { switch (str_is_valid_char (panel->search_char, panel->search_chpoint)) { - case -2: - return; - case -1: + case -2: + return; + case -1: + panel->search_chpoint = 0; + return; + default: + if (l + panel->search_chpoint < sizeof (panel->search_buffer)) { + memcpy (panel->search_buffer + l, panel->search_char, + panel->search_chpoint); + l+= panel->search_chpoint; + (panel->search_buffer + l)[0] = '\0'; panel->search_chpoint = 0; - return; - default: - if (l + panel->search_chpoint < sizeof (panel->search_buffer)) { - memcpy (panel->search_buffer + l, panel->search_char, - panel->search_chpoint); - l+= panel->search_chpoint; - (panel->search_buffer + l)[0] = '\0'; - panel->search_chpoint = 0; } - } - } + } + } } - buf_max = panel->case_sensitive ? - str_prefix (panel->search_buffer, panel->search_buffer) : - str_caseprefix (panel->search_buffer, panel->search_buffer); - max = 0; + reg_exp = g_strdup_printf ("%s*", panel->search_buffer); + esc_str = strutils_escape (reg_exp, -1, ",|\\{}[]", TRUE); + search = mc_search_new (esc_str, -1); + search->search_type = MC_SEARCH_T_GLOB; + search->is_entire_line = TRUE; + search->is_case_sentitive = 0; + sel = panel->selected; for (i = panel->selected; !wrapped || i != panel->selected; i++) { - if (i >= panel->count) { - i = 0; - if (wrapped) - break; - wrapped = 1; - } - l = panel->case_sensitive ? - str_prefix (panel->dir.list[i].fname, panel->search_buffer) : - str_caseprefix (panel->dir.list[i].fname, panel->search_buffer); - if (l > max) { - max = l; + if (i >= panel->count) { + i = 0; + if (wrapped) + break; + wrapped = TRUE; + } + if (mc_search_run (search, panel->dir.list[i].fname, + 0, panel->dir.list[i].fnamelen, NULL)) { sel = i; - if (max == buf_max) break; - } + is_found = TRUE; + break; + } } - - unselect_item (panel); - panel->selected = sel; - select_item (panel); - - act = panel->search_buffer + strlen (panel->search_buffer); - while (max < buf_max) { - str_prev_char_safe (&act); + if (is_found) { + unselect_item (panel); + panel->selected = sel; + select_item (panel); + paint_panel (panel); + } else if (c_code != KEY_BACKSPACE) { + act = panel->search_buffer + l; + str_prev_noncomb_char (&act, panel->search_buffer); act[0] = '\0'; - buf_max = panel->case_sensitive ? - str_prefix (panel->search_buffer, panel->search_buffer) : - str_caseprefix (panel->search_buffer, panel->search_buffer); } - - paint_panel (panel); + mc_search_free (search); + g_free (reg_exp); + g_free (esc_str); } static void