LINUX.ORG.RU

a dir not empty dialog patch


0

1

Предлагаю для обсуждения заплатку, которая смещает окно запроса «Каталог не пуст» чуть ниже, чтоб оно не закрывало количество файлов, которые содержит каталог. Достиг этого путём введения нового флага для окон диалога D_LOWER (имя лучше не подобрал). При наличии данного флага окно опускается чуть ниже (смещение подобрано под конкретную ситуацию). Хотел вообще-то, чтоб запрос выводился на фоне суммарного размера файлов каталога (окошко появляется и исчезает перед запросом), но не смог. Прошу ногами не бить :-) Просто недавно лишь чудом смог восстановить кучу случайно удалённых архивов, и поэтому теперь удаление — очень чувствительная тема.

PS: в MC давно есть фича восстановления файлов с ext2 разделов. Как она в нынешнем MC? Раньше не очень. Я файлы восстанавливал с помощью ext3grep. Прога очень трудная для использования и в бета-состоянии.

diff -urN mc-4.8.12.old/lib/widget/wtools.c mc-4.8.12/lib/widget/wtools.c
--- mc-4.8.12.old/lib/widget/wtools.c   2014-06-16 17:59:52.000000000 +0400
+++ mc-4.8.12/lib/widget/wtools.c       2014-06-16 17:59:18.000000000 +0400
@@ -277,6 +277,9 @@
     int i;
     int result = -1;
     int cols, lines;
+    int lxx = 0;
+    int lyy = 0;
+
     const int *query_colors = (flags & D_ERROR) != 0 ? alarm_colors : dialog_colors;
     dlg_flags_t dlg_flags = (flags & D_CENTER) != 0 ? (DLG_CENTER | DLG_TRYUP) : DLG_NONE;

@@ -301,9 +304,16 @@
     cols = 6 + max (win_len, max (str_term_width1 (header), cols));
     lines += 4 + (count > 0 ? 2 : 0);

+    if (flags & D_LOWER)
+    {
+       lxx = (COLS  - cols) /  2;
+       lyy = (LINES - lines + 8) / 2;
+       dlg_flags = DLG_NONE;
+    }
+
     /* prepare dialog */
     query_dlg =
-        dlg_create (TRUE, 0, 0, lines, cols, query_colors, query_default_callback, NULL,
+        dlg_create (TRUE, lyy, lxx, lines, cols, query_colors, query_default_callback, NULL,
                     "[QueryBox]", header, dlg_flags);

     if (count > 0)
@@ -335,7 +345,7 @@
         va_end (ap);

         /* do resize before running and selecting any widget */
-        send_message (query_dlg, NULL, MSG_RESIZE, 0, NULL);
+        if ((flags & D_LOWER) == 0) send_message (query_dlg, NULL, MSG_RESIZE, 0, NULL);

         if (defbutton != NULL)
             dlg_select_widget (defbutton);
diff -urN mc-4.8.12.old/lib/widget/wtools.h mc-4.8.12/lib/widget/wtools.h
--- mc-4.8.12.old/lib/widget/wtools.h   2014-06-16 17:56:33.000000000 +0400
+++ mc-4.8.12/lib/widget/wtools.h       2014-06-16 17:58:10.000000000 +0400
@@ -20,7 +20,8 @@
 {
     D_NORMAL = 0,
     D_ERROR = (1 << 0),
-    D_CENTER = (1 << 1)
+    D_CENTER = (1 << 1),
+    D_LOWER  = (1 << 2)
 } /* dialog options */ ;

 /*** structures declarations (and typedefs of structures)*****************************************/
diff -urN mc-4.8.12.old/src/filemanager/file.c mc-4.8.12/src/filemanager/file.c
--- mc-4.8.12.old/src/filemanager/file.c        2014-06-16 17:56:33.000000000 +0400
+++ mc-4.8.12/src/filemanager/file.c    2014-06-16 18:02:22.000000000 +0400
@@ -679,7 +679,7 @@
             query_set_sel (1);

         ctx->recursive_result =
-            (FileCopyMode) query_dialog (op_names[OP_DELETE], text, D_ERROR, 5,
+            (FileCopyMode) query_dialog (op_names[OP_DELETE], text, D_ERROR | D_LOWER, 5,
                                          _("&Yes"), _("&No"), _("A&ll"), _("Non&e"), _("&Abort"));
         g_free (text);




Форум - Midnight Commander

Похоже я что-то пропустил.

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

Закрывать информацию не хорошо

Ну тогда не надо выводить окошко с начальной информацией по удалению. А то как-то не хорошо: что-то выведено, а нормально прочитать нельзя. В TurboVision окошки можно было перемешать при желании самому. Тут-то такого функционала нет...

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

двигать окошки

MC в своём виде хорош. А в идеале (новое воплощение) наверно командер надо на основе tmux делать — это позволит разделить окошки и функционал. Окошки — на основе TurboVision (там на самом деле не так много кода именно для вывода) без использования ncurses или slang. Поскольку нынче консоль часто framebuffer, то можно будет и графику добавить. В Acronis Boot Loader несложный аналог TVision — графический (логотип выводит). Для кодирования использовать nimrod. В смысле постепенно части с или с++ кода заменять на nimrod. Он возвращает обратно c или c++. Это позволит избежать тупой зависимости от компиляторов. Вот как-то так...

seyko2
() автор топика

есть фича восстановления файлов с ext2 разделов

ext2 - не ext3 или, тем более, ext4. Сложностей добавляется.

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

В общем перетащили

Называется он везде одинаково. На gcc он используется в RHIDE (среда разработки аля Борланд). В общем есть несколько разных версий для gcc с окошками типа Борланд.

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

Сложности

Ext3 — это Ext2 с журналом. Может монтироваться как Ext2. Поэтому для восстановления удалённых файлов способ для Ext2 должен подходить. На Ext3 даже легче: там есть журнал, поэтому имена восстанавливать не придётся. ext3grep сканирует журнал, собирает имена удалённых файлов и потом даёт возможность их восстановить. Если правильно указать период времени, в который удалили файлы (там это самое трудное), то с восстановление проблем быть не должно. Иначе старая информция мешает восстановить недавно удалённые файлы.

PS: по-хорошему восстановление надо бы в отдельную программу переместить. А в MC можно оставить только интерфейс.

seyko2
() автор топика
Ответ на: двигать окошки от seyko2

А в идеале (новое воплощение) наверно командер надо на основе tmux делать

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

[↕][×]

в правом верхнем окне

angel_il ★★★★
()
Последнее исправление: angel_il (всего исправлений: 2)
Ответ на: комментарий от angel_il

надо попробовать

У меня всю жизнь поддержка мыши в MC выключена. Чем-то она меня не устроила. Может потому, что выделять текст мышью в gpm-clipboard мешала.

А на счёт времени: нынешний MC никто ломать не будет. Функциональность, которую можно добавить, добавят. Но есть специфика реализации, которую уже не исправить. Например, заменить ncurses или slang на TurboVision скорее всего не получится.

seyko2
() автор топика
Ответ на: надо попробовать от seyko2

Но есть специфика реализации, которую уже не исправить. Например, заменить ncurses или slang на TurboVision скорее всего не получится.

и на QT тоже не получится... и на GTK...

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

Про GTK я не так уверен

В MC с самого начала был вариант под X с использованием чего-то гномовского типа этого самого GTK

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

Хорошая статья

В исходниках её нету, а на ссылку я не обратил внимания...

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

Что уникального в MC?

Думаю, это vfs. Остальное, что очень плохо получается в Linux — консольные окошки — реализовано в TurboVision. Где-то лет 15 назад набросал скелет командера на TurboVision. Оставалось только этот самый vfs приделать. Но пришлось прерваться. Теперь тот код нынешними компиляторами не собирается (тогда последним был gcc 2.95). А теперь и сам c++ 2.95 собрать не просто. Поэтому хочется иметь свой небольшой по объёму (исходников) набор разработчика типа tiny_c_compiler+nimrod или dmd v1 (второй — это уже слишком сложно). А уж потом начинать по новой. Трогать работающий MC — не тот путь.

PS: второе, чего не хватало в своё время — это tmux. Разобраться в screen не смог, а tmux выглядит попонятнее.

PPS: для реализации своих хотелок пришлось патчить ядро. Например, чтоб можно было выводить все символы фонта без исключений, чтоб можно было мышью верезать прямоугольные области, xterm mouse in console и т.д.

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

Неполная точность

Для Ext3 запись в каталоге удаляется (сливается с предыдущей), а сам inode вставляется в список удалённых inode-ов. Вполне вероятно при вставке используются поля-указатели на информационные блоки и эта информация теряется. Для ext2 возможно такого списка нет (не изучал). Так что да, способ восстановления файлов для ext2 на ext3 работать, скорее всего, не будет.

Про ext3grep вычитал, что в нём не реализован алгоритм поиска в журнале самой свежей копии удалённого inode. А реализация этого, на мой взгляд, избавила бы от необходимости указывать время удаления.

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