LINUX.ORG.RU
Ответ на: комментарий от angel_il

поиск (f4) Найти всё

Я юмор понимаю. «Найти всё» не подсвечивает результаты поиска, а только полные строки, где искомое было найдено. Конечно, так проще было накодить с помощью какого-нибудь стандартного Match(), но наглядности и удобства такой «поиск» не прибавляет.

blexey ★★★★★
() автор топика

И, да, имеется ввиду поиск не только в mcedit, но и в mcview.

blexey ★★★★★
() автор топика
Ответ на: комментарий от blexey

я не шутил, а обозначил существующее средство, для чегото большего надо дорабатывать, но лично мне такой функционал не нужен. можно узнать о том как вы себе представляете работу с этим. заменяем кнопку «найти всё» ?

angel_il ★★★★
()
Ответ на: комментарий от angel_il

Такой функционал был бы очень удобен при работе с текстовиками с длинными строками: где там эти найденные вхождения и сколько их — в текущей реализации не разобрать.

Это, в частности, логи с длиннющими URL или путями к файлам и т.п. Не вся работа с такими файлами сводится к автоматическому парсингу скриптами. Иногда (в особенности в процессе или до написания этих самых скриптов) быстрее что-то сделать вручную, получив быстренько визуальный результат.

blexey ★★★★★
() автор топика
Ответ на: комментарий от blexey

в принципе можно было бы, может как то так

1) вызываем диалог со списком того что надо подсветить

2) появляется список тех что уже подсвечены и к нему можно добавить ещё или убавить те что есть

3) поск не производится а просто они в тексте подсвечиваются

4) профит?

angel_il ★★★★
()
Ответ на: комментарий от angel_il

4) профит?

Если в этом диалоге можно будет указать regexp для подсветки во всём файле, то замечательно. Тогда и поиск трогать не нужно.

Я так понимаю, это может быть дополнением к имеющемуся syntax highlight'у?

blexey ★★★★★
() автор топика

Я уже несколько лет таскаю за собой во все новые версии этот патч. В своё время предлагал его с кучей остальных, собранных мною, разработчикам, ещё Петру, вроде, если имя правильно помню, болгарин который. Но их он не заинтересовал. К сожалению, автора этого патча не помню. Ну и поскольку он основывается на HighLight, то и работает только в редакторе. Но это именно то, чего ты хочешь...

ose
()
Ответ на: комментарий от angel_il

Легко! ;-) Адаптирован под 4.8.1...

diff -Nura mc-4.6.1/lib/keybind.c mc-4.6.1_ho/lib/keybind.c
--- mc-4.6.1/lib/keybind.c	2009-11-06 22:37:35.000000000 +0500
+++ mc-4.6.1_ho/lib/keybind.c	2009-11-06 22:50:13.000000000 +0500
@@ -303,6 +303,8 @@
     {"ShowMargin", CK_ShowMargin},
     {"OptionsSaveMode", CK_OptionsSaveMode},
     {"About", CK_About},
+    {"Highlight_Occurences", CK_Highlight_Occurences},
+    {"Unhighlight_Occurences", CK_Unhighlight_Occurences},
     /* An action to run external script from macro */
     {"ExecuteScript", CK_PipeBlock (0)},
 #endif /* USE_INTERNAL_EDIT */
diff -Naur mc-4.6.1/src/history.h mc-4.6.1_ho/src/history.h
--- mc-4.6.1/src/history.h	2005-05-27 17:19:18.000000000 +0300
+++ mc-4.6.1_ho/src/history.h	2006-10-27 16:13:47.000000000 +0300
@@ -17,6 +17,7 @@
 #define MC_HISTORY_EDIT_SORT          "mc.edit.sort"
 #define MC_HISTORY_EDIT_PASTE_EXTCMD  "mc.edit.paste-extcmd"
 #define MC_HISTORY_EDIT_REPEAT        "mc.edit.repeat-action"
+#define MC_HISTORY_EDIT_OCCURENCES    "mc.edit.highlight.occurences"
 
 #define MC_HISTORY_FM_VIEW_FILE       "mc.fm.view-file"
 #define MC_HISTORY_FM_MKDIR           "mc.fm.mkdir"
diff -Naur mc-4.6.1/src/editor/edit.c mc-4.6.1_ho/src/editor/edit.c
--- mc-4.6.1/src/editor/edit.c	2005-05-27 17:19:18.000000000 +0300
+++ mc-4.6.1_ho/src/editor/edit.c	2006-10-27 16:13:47.000000000 +0300
@@ -3973,6 +3973,14 @@
         edit->force |= REDRAW_PAGE;
         break;
 
+    case CK_Highlight_Occurences:
+        exec_highlight_occurences(edit);
+        break;
+
+    case CK_Unhighlight_Occurences:
+        exec_unhighlight_occurences(edit);
+        break;
+
     case CK_Bookmark:
         book_mark_clear (edit, edit->curs_line, BOOK_MARK_FOUND_COLOR);
         if (book_mark_query_color (edit, edit->curs_line, BOOK_MARK_COLOR))
diff -Naur mc-4.6.1/lib/keybind.h mc-4.6.1_ho/lib/keybind.h
--- mc-4.6.1/lib/keybind.h	2004-08-15 22:34:37.000000000 +0300
+++ mc-4.6.1_ho/lib/keybind.h	2006-10-27 16:13:47.000000000 +0300
@@ -254,6 +254,9 @@
     CK_MarkScrollDown,
     CK_MarkParagraphUp,
     CK_MarkParagraphDown,
+    /* Highlight occurences commands */
+    CK_Highlight_Occurences,
+    CK_Unhighlight_Occurences,
     /* column mark commands */
     CK_MarkColumnPageUp,
     CK_MarkColumnPageDown,
diff -Naur mc-4.6.1/src/editor/editmenu.c mc-4.6.1_ho/src/editor/editmenu.c
--- mc-4.6.1/src/editor/editmenu.c	2005-05-27 17:19:18.000000000 +0300
+++ mc-4.6.1_ho/src/editor/editmenu.c	2006-10-27 16:13:47.000000000 +0300
@@ -104,6 +104,8 @@
     entries = g_list_prepend (entries, menu_entry_create (_("&Mark columns"), CK_MarkColumn));
     entries = g_list_prepend (entries, menu_entry_create (_("Mark &all"), CK_MarkAll));
     entries = g_list_prepend (entries, menu_entry_create (_("Unmar&k"), CK_Unmark));
+    entries = g_list_prepend (entries, menu_entry_create (_("&Highlight occurences"), CK_Highlight_Occurences));
+    entries = g_list_prepend (entries, menu_entry_create (_("&Unhighlight occurences"), CK_Unhighlight_Occurences));
     entries = g_list_prepend (entries, menu_separator_create ());
     entries = g_list_prepend (entries, menu_entry_create (_("Cop&y"), CK_Copy));
     entries = g_list_prepend (entries, menu_entry_create (_("Mo&ve"), CK_Move));
diff -Naur mc-4.6.1/src/editor/syntax.c mc-4.6.1_ho/src/editor/syntax.c
--- mc-4.6.1/src/editor/syntax.c	2005-05-27 17:19:18.000000000 +0300
+++ mc-4.6.1_ho/src/editor/syntax.c	2006-10-27 16:13:47.000000000 +0300
@@ -58,6 +58,7 @@
 #include "lib/strutil.h"        /* utf string functions */
 #include "lib/util.h"
 #include "lib/widget.h"         /* message() */
+#include "src/history.h"
 
 #include "edit-impl.h"
 #include "edit-widget.h"
@@ -609,6 +610,71 @@
     *color = edit->rules[rule.context]->keyword[rule.keyword]->color;
 }
 
+/*
+    Section related to highlighting of occurences
+ */
+
+#define HIGHLIGHT_DLG_WIDTH 58
+#define HIGHLIGHT_DLG_HEIGHT 8
+#define B_REPLACE_ALL (B_USER+1)
+#define B_REPLACE_ONE (B_USER+2)
+#define B_SKIP_REPLACE (B_USER+3)
+
+int option_highlight_occurences = 0;
+
+#define HW_LEN	512
+char highlight_word[HW_LEN];
+int  highlight_word_length = 0;
+
+int need_highlighing(WEdit* edit, long byte_index)
+{
+    char token[highlight_word_length+1];
+    token[highlight_word_length] = 0;
+    int i = 0;
+    for ( ; i < highlight_word_length; i++)
+        token[i] = edit_get_byte(edit, byte_index++);
+
+    int ret = !strncmp(token, highlight_word, highlight_word_length);
+
+    if ( ret )
+        ret = highlight_word_length;
+
+    return ret;
+}
+
+void exec_highlight_occurences(WEdit *edit)
+{
+    char *text = input_expand_dialog (_("Highlight occurences"),
+                             _(" Text:"), MC_HISTORY_EDIT_OCCURENCES, "");
+
+    if ( text )
+    {
+        option_highlight_occurences = 1;
+        highlight_word_length = strlen(text);
+
+#ifdef HAVE_CHARSET
+        GString *tmp;
+        tmp = str_convert_to_input (text);
+        if (tmp && tmp->len)
+            text = tmp->str;
+        g_string_free (tmp, FALSE);
+#endif /* HAVE_CHARSET */
+
+        strcpy(highlight_word, text); // TODO: Check for Unicode
+        g_free(text);
+        edit_refresh_cmd(edit);
+    }
+}
+
+void exec_unhighlight_occurences(WEdit *edit)
+{
+    option_highlight_occurences = 0;
+    highlight_word_length = 0;
+    memset(highlight_word, 0, HW_LEN);
+    edit_refresh_cmd(edit);
+}
+
+static int hword_symbols_left = 0;
 
 /* --------------------------------------------------------------------------------------------- */
 /**
@@ -1417,6 +1483,22 @@
 void
 edit_get_syntax_color (WEdit * edit, long byte_index, int *color)
 {
+    if ( option_highlight_occurences && tty_use_colors ())
+    {
+        if ( hword_symbols_left )
+        {
+            --hword_symbols_left;
+            *color = EDITOR_BOLD_COLOR;
+            return;
+        }
+        else if (( hword_symbols_left = need_highlighing(edit, byte_index) ))
+        {
+            --hword_symbols_left;
+            *color = EDITOR_BOLD_COLOR;
+            return;
+        }
+    }
+
     if (!tty_use_colors ())
         *color = 0;
     else if (edit->rules && byte_index < edit->last_byte && option_syntax_highlighting)
diff -Naur mc-4.6.1/po/ru.po.ose mc-4.6.1_ho/po/ru.po
--- mc-4.6.1/po/ru.po		Tue Oct 31 19:45:17 2006
+++ mc-4.6.1_ho/po/ru.po	Tue Oct 31 19:50:09 2006
@@ -1254,6 +1254,18 @@
 msgid "Unmar&k"
 msgstr "Сн&ять отметку"
 
+msgid "&Highlight occurences"
+msgstr "Выделить вхо&ждения"
+
+msgid "&Unhighlight occurences"
+msgstr "Скр&ыть вхождения"
+
+msgid "Highlight occurences"
+msgstr "Выделить вхождения"
+
+msgid " Text:"
+msgstr " Текст:"
+
 msgid "Cop&y"
 msgstr "&Копировать блок"
 
ose
()
Ответ на: комментарий от ose

О спасибо, чутка грязновато но работает исправно.

вот тут только странновато

+ else if (( hword_symbols_left = need_highlighing(edit, byte_index) ))

angel_il ★★★★
()
Ответ на: комментарий от ose

т.е. автор тот, кто приложил патч? я в принципе его вписал в качестве автора в бранче..

angel_il ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.