LINUX.ORG.RU

Можно ли назначить выполнение действия для определённой левой/правой панели? (Раньше нет — Теперь да)

 ,


0

1

Добавил кнопку для вызова фильтра файлов на панели в файл настройки /etc/mc/mc.keymap

[main]
Filter = kpslash

kpslash — знак деления на доп. клаве.

Оно работает, но немного не так как ожидалось. Окошко выбора фильтра при нажатии / вызывается и заполняется нужным значением. Но вот применяется фильтр только всегда для левой панели, а не для активной, где стоит курсор.

Это бага такая и её как-то можно исправить? Или есть настройки для файла mc.keymap чтобы выполнение действия задать для определённой левой/правой панели?

Если вызвать F9 / Правая панель / Фильтр... , то фильтр сработает для правой панели и все последующие вызовы через / будут теперь работать только для правой панели, а не для активной!

Upd 2018-02-06:

В результате перешёл на использование комбинации ctrl-a

$ egrep "\\[main\\]|^Filter" /etc/mc/mc.keymap 
[main]
Filter = ctrl-a

И починил поведение Фильтра на то, которое считаю правильным.

Патч для Fedora 26 / mc 4.8.19

$ cat ~/rpmbuild/SOURCES/mc-fix-filter-hotkey.patch

--- ../mc-4.8.19.orig/lib/global.h	2018-02-05 13:52:02.000753933 +0800
+++ lib/global.h	2018-02-06 16:12:45.471910843 +0800
@@ -211,6 +211,8 @@
         /* Ugly hack in order to distinguish between left and right panel in menubar */
         /* Set if the command is being run from the "Right" menu */
         gboolean is_right;      /* If the selected menu was the right */
+
+        gboolean is_cmd_from_menu;      /* temp hack. set only for filter_cmd*/
     } widget;
 
     /* The user's shell */
--- ../mc-4.8.19.orig/lib/global.c	2017-03-05 01:51:38.000000000 +0800
+++ lib/global.c	2018-02-06 16:17:31.583746039 +0800
@@ -76,7 +76,8 @@
     {
         .confirm_history_cleanup = TRUE,
         .show_all_if_ambiguous = FALSE,
-        .is_right = FALSE
+        .is_right = FALSE,
+        .is_cmd_from_menu = FALSE
     },
 
     .shell = NULL,
--- ../mc-4.8.19.orig/lib/widget/menu.c	2017-03-05 01:51:38.000000000 +0800
+++ lib/widget/menu.c	2018-02-06 16:32:39.266786981 +0800
@@ -341,6 +341,7 @@
         Widget *w = WIDGET (menubar);
 
         mc_global.widget.is_right = (menubar->selected != 0);
+        mc_global.widget.is_cmd_from_menu = TRUE;
         menubar_finish (menubar);
         send_message (w->owner, w, MSG_ACTION, entry->command, NULL);
         do_refresh ();
--- ../mc-4.8.19.orig/src/filemanager/cmd.c	2017-03-05 01:51:38.000000000 +0800
+++ src/filemanager/cmd.c	2018-02-06 16:48:38.732283319 +0800
@@ -947,7 +947,13 @@
     if (!SELECTED_IS_PANEL)
         return;
 
-    p = MENU_PANEL;
+    if (mc_global.widget.is_cmd_from_menu)
+        p = MENU_PANEL;
+     else
+        p = current_panel;
+
+    mc_global.widget.is_cmd_from_menu = FALSE;
+
     set_panel_filter (p);
 }
 
★★★★★

Последнее исправление: justAmoment (всего исправлений: 2)

Или есть настройки для файла mc.keymap

Да. .

Пример:

[panel]
PanelStartSearch = ctrl s
PanelMoveDown = down
PanelMoveUp = up
PanelMoveLeft = left
PanelMoveRight = right
PanelPrevPage = pgup
PanelNextPage = pgdn
PanelDoEnter = enter
И т. д.

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

Я пробовал туда прописать «Filter = kpslash» — не работает, как будто никакой записи и нет.

justAmoment ★★★★★
() автор топика
6 февраля 2018 г.
Ответ на: комментарий от justAmoment

А если внимательно посмотреть на

         send_message (w->owner, w, MSG_ACTION, entry->command, NULL);
, то можно заметить что?

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

Честно, не знаю.

Ну тоесь вы, толком не разобравшись, начали клепать патчи. Плохо.

Можешь

Можете

показать код, как его правильно применить, внутри filter_cmd()

Ну так этот код надо писать. Мне лень.

Там надо переделать по аналогии с CK_Select.

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