View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002084 | Wishes | History | public | 2012-04-23 14:11 | 2019-05-30 07:26 |
Reporter | CyberShadow | Assigned To | |||
Priority | normal | Severity | feature | Reproducibility | N/A |
Status | new | Resolution | open | ||
Product Version | 3.0 | ||||
Summary | 0002084: Локальная история команд, как в Far 2 | ||||
Description | В FAR 2, стрелки вверх/вниз искали по истории команд из текущей сессии FAR. В FAR 3, история - глобальная, и запущенная команда в одном окне сразу появляется в истории других окон. Хотя это в теории классно, мне это крайне неудобно, т.к. в подавляющем большинстве случаев работа в разных окнах идет по своим независимым направлениям (напр. в одном окне правим код и запускаем компилятор, в другом работаем с входными/выходными данными, в третьем что-то совсем иное). В FAR 2 у меня был настроен плагин AltHistory на Ctrl+X / Ctrl+E. Получалось что стрелки - прокрутка по локальной истории, а Ctrl+X/E - по глобальной. Так было намного удобнее. | ||||
Additional Information | Обсуждение #1: http://forum.farmanager.com/viewtopic.php?f=4&t=7046&p=92488 Обсуждение #2 (чего не хватает в API для реализации в плагине): http://forum.farmanager.com/viewtopic.php?f=5&t=1608&p=92489#p92489 | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Вы написали что вам неудобно, но взамен ничего конкретного не предложили. Обратите внимание, что нужное вам поведение сейчас реализуемо при таких настройках [ ] Save commands history [ ] Save folders history [ ] Save view and edit history (Естественно так невозможно сохранить историю между сессиями). |
|
Конкретные предложения не стал предлагать, так как мне неведомо сложность (и "правильность") их исполнения. Но возможностей немало: 1) Просто добавить опцию: стрелки = прокрутка по локальной истории 2) Добавить пункты меню / макрокоманды / итд. для прокрутки по локальной истории, чтобы можно было самому настроить макросы 3) Добавить в FAR API чего не хватает для реализации в плагине, например: а) передача исполняемых команд / переходов по папкам / открытие файлов плагинам, чтобы они сами могли вести локальную либо глобальную историю б) передача плагинам, считывающих историю FAR, флаг если этот пункт истории был добавлен в течении текущей сессии > (Естественно так невозможно сохранить историю между сессиями). Вариантов которые "решают" проблему взамен на другие, более весомые проблемы, тоже немало, и они никому не интересны. В обсуждении #1 было также предложено использование разных профилей, но это настолько же непрактично. |
|
Практика показывает что у тикетов сформулированных конкретно - на порядок больше шансов. 1) Очевидно что это не "просто". Например продумайте в деталях поведение фара(-ов) с этой опцией и без неё, и учтите разные состояния [ ] Save commands history. При этом не забудьте, что эти опции можно включать/выключать неоднократно в течении сеанса. |
|
в морг. |
|
Если хотите просто и конкретно - "Как в FAR 2". > Например продумайте в деталях поведение фара(-ов) с этой опцией и без неё, и учтите разные состояния [ ] Save commands history. Что тут непонятного? Ясно, что если глобальная история нигде не используется, любая фича которая различает между локальной и глобальной истории не имеет смысла. Если проще сказать: [ ] Save commands history делает недоступной гипотетическую опцию "стрелки = прокрутка по локальной истории", и когда последняя выключена или недоступна - стрелки работают как сейчас. > в морг. Мне придется форкать, что ли? Трудно поверить что я - единственный usecase. |
|
>Если хотите просто и конкретно - "Как в FAR 2". Это значит сохранять историю только того экземпляра фара, из которого мы вышли последним? Нет, спасибо. |
|
Ну так давайте спокойно обсудим как это лучше сделать. Я не хочу прислать патч который сразу же получит очередной "в морг. -- zg". Вот конкретное предложение: в таблице истории добавляем колонку "сессия", где указывается время запуска FAR с точностью до микросекунды. Оттуда, можно либо эту информацию сделать доступным плагинам (тогда это повесить на стрелки - элементарно), либо просто добавить выше-обсужденный checkbox. |
|
> Я не хочу прислать патч который сразу же получит очередной "в морг. -- zg". а можно ссылки на предыдущие _хорошие_ патчи, которые "в морг. -- zg"? > Вот конкретное предложение: в таблице истории добавляем колонку "сессия", где указывается время запуска FAR с точностью до микросекунды. Оттуда, можно либо эту информацию сделать доступным плагинам жду патч. |
|
>Вот конкретное предложение Мне нравится |
|
Проблема в том, что я не могу знать какие патчи вы посчитаете хорошими (и не только в субъективном смысле), т.к. не знаком с кодом и не слежу за разработкой (например, на этой стадии развития FAR 3 изменения схемы БД может быть табу, и мне это было бы неведомо). Обратно на тему: Я глянул в код, по всей видимости придется везде где идет поиск по истории добавить также и поиск по определенной сессии? Много копи-пасты выйдет (функции, индексы, prepared statements)... может лучше вариант с FCTL? Цитирую... > Вот если бы разработчики FAR добавили аналог ProcessPanelEventInfo/FE_COMMAND так, чтобы плагин мог получить информацию о запускаемых командах на любых панелях - тогда не вопрос. Ну, и дополнительные фишки стали бы доступны - вроде как "при запуске команды из истории перейти в каталог, откуда она выполнялась" и пр. и пр. |
|
pf_allpanelevents.diff (8,623 bytes)
Index: enc/enc_rus3.work/meta/exported_functions/openw.html =================================================================== --- enc/enc_rus3.work/meta/exported_functions/openw.html (revision 7948) +++ enc/enc_rus3.work/meta/exported_functions/openw.html (working copy) @@ -37,13 +37,13 @@ ���� ����� ��������� ������, �� ����������� ������� - �������� �������. ���� �������� ����� ����� ���������� ������ ������ ������� �� ����, ���� �������� �� ������� ������� ����� ������������ �������. ������ � ���������� �������� �� ���� �� Far Manager'� - ��� ����� ��, � �������, ������� ����������� ������ �������, ��� ������� �������� � ������ ������� ��� ��� ������ �������� ���������������, ������ �� ���. -<p>� ����� ��������� �������� ������, ����������� ������� ������ ������ <code>INVALID_HANDLE_VALUE</code>.</p> +<p>� ����� ��������� �������� ������, ����������� ������� ������ ������ <code>NULL</code>.</p> </div> <h3>�������</h3> <div class=descr> <ol> -<li>� ������ ���������� ��� ����� �� ��������� ��������, ������� ��� ������� ������ �������. ������ �������� ��� ��������� ������� � ������� INVALID_HANDLE_VALUE. +<li>� ������ ���������� ��� ����� �� ��������� ��������, ������� ��� ������� ������ �������. ������ �������� ��� ��������� ������� � ������� NULL. </ol> </div> Index: enc/enc_rus3.work/meta/structures/processpaneleventinfo.html =================================================================== --- enc/enc_rus3.work/meta/structures/processpaneleventinfo.html (revision 7948) +++ enc/enc_rus3.work/meta/structures/processpaneleventinfo.html (working copy) @@ -34,7 +34,9 @@ <div class=dfn>StructSize</div> <div class=dfndescr>��� ���� �������� ������ �������� <dfn>ProcessPanelEventInfo</dfn>.</div> <div class=dfn>hPanel</div> - <div class=dfndescr>�������� ������, ���������� ������� <a href="../exported_functions/openw.html">OpenW</a>.</div> + <div class=dfndescr>�������� ������, ���������� ������� <a href="../exported_functions/openw.html">OpenW</a>. + ����� �� NULL, ���� � PluginInfo.Flags �� ������ <a href="plugininfo.html#PF_ALLPANELEVENTS">PF_ALLPANELEVENTS</a>. + </div> <div class=dfn>Event</div> <div class=dfndescr>��� �����. ���� �� ������ ������� (����������� <a name="FAR_EVENTS">FAR_EVENTS</a>): <table class="cont"> Index: enc/enc_rus3.work/meta/structures/plugininfo.html =================================================================== --- enc/enc_rus3.work/meta/structures/plugininfo.html (revision 7948) +++ enc/enc_rus3.work/meta/structures/plugininfo.html (working copy) @@ -52,6 +52,10 @@ <tr class="cont"><td class="cont" width="40%"><a name="PF_FULLCMDLINE">PF_FULLCMDLINE</a></td> <td class="cont" width="60%">��������� Far Manager ��������� ������� �� �������� ������ ������ � ��������� <i>CommandPrefix</i>. ��������� ���������� ���� ����, ���� ������ ����� ���������� �������� ��������� <i>CommandPrefix</i>.</td></tr> + <tr class="cont"><td class="cont" width="40%"><a name="PF_ALLPANELEVENTS">PF_ALLPANELEVENTS</a></td> + <td class="cont" width="60%">��������� Far Manager ��������� ������� ��� ������� �����, ���������� ���� ����� ����������� ������-���� �������. + ����� �������� ����� �������� ����� <a href="../exported_functions/processpaneleventw.html">ProcessPanelEventW</a> � ����� hPanel ������ NULL. + �������� ����� �������� ����� �����, ������ �������� ���������� ������� ����� ������ TRUE.</td></tr> </table> </div> <div class=dfn>DiskMenu</div> Index: unicode_far/plugins.cpp =================================================================== --- unicode_far/plugins.cpp (revision 7981) +++ unicode_far/plugins.cpp (working copy) @@ -1378,8 +1378,45 @@ void *Param ) { - PluginHandle *ph = (PluginHandle*)hPlugin; - return ph->pPlugin->ProcessPanelEvent(ph->hPlugin, Event, Param); + if (!hPlugin) + { + // hPlugin==NULL �� ��������� ������ �� ��� ����� + // (�������� ���� �������� � PF_ALLPANELEVENTS) + + for (size_t i=0; i<PluginsCount; i++) + { + UINT64 PluginFlags=0; + + if (PluginsData[i]->CheckWorkFlags(PIWF_CACHED)) + { + unsigned __int64 id = PlCacheCfg->GetCacheID(PluginsData[i]->GetCacheName()); + PluginFlags = PlCacheCfg->GetFlags(id); + } + else + { + PluginInfo Info = {sizeof(Info)}; + + if (PluginsData[i]->GetPluginInfo(&Info)) + PluginFlags = Info.Flags; + else + continue; + } + + if (PluginFlags & PF_ALLPANELEVENTS) + { + Plugin *pPlugin = PluginsData[i]; + if (pPlugin->Load() && pPlugin->ProcessPanelEvent(NULL, Event, Param)) + return TRUE; + } + } + + return FALSE; + } + else + { + PluginHandle *ph = (PluginHandle*)hPlugin; + return ph->pPlugin->ProcessPanelEvent(ph->hPlugin, Event, Param); + } } Index: unicode_far/flplugin.cpp =================================================================== --- unicode_far/flplugin.cpp (revision 7981) +++ unicode_far/flplugin.cpp (working copy) @@ -1251,6 +1251,10 @@ int FileList::ProcessPluginEvent(int Event,void *Param) { + // ���� ������ ���� ��������� �� �������� ������ + if (Panel::ProcessPluginEvent(Event, Param)) + return TRUE; + if (PanelMode==PLUGIN_PANEL) return(CtrlObject->Plugins->ProcessEvent(hPlugin,Event,Param)); Index: unicode_far/panel.cpp =================================================================== --- unicode_far/panel.cpp (revision 7981) +++ unicode_far/panel.cpp (working copy) @@ -2786,3 +2786,8 @@ SrcPanel->Redraw(); return true; } + +int Panel::ProcessPluginEvent(int Event,void *Param) +{ + return(CtrlObject->Plugins->ProcessEvent(NULL,Event,Param)); +} Index: unicode_far/plugin.hpp =================================================================== --- unicode_far/plugin.hpp (revision 7981) +++ unicode_far/plugin.hpp (working copy) @@ -2275,6 +2275,7 @@ PF_VIEWER = 0x0000000000000008ULL, PF_FULLCMDLINE = 0x0000000000000010ULL, PF_DIALOG = 0x0000000000000020ULL, + PF_ALLPANELEVENTS = 0x0000000000000040ULL, PF_NONE = 0; struct PluginMenuItem Index: unicode_far/panel.hpp =================================================================== --- unicode_far/panel.hpp (revision 7981) +++ unicode_far/panel.hpp (working copy) @@ -282,7 +282,7 @@ virtual void GetOpenPanelInfo(struct OpenPanelInfo *Info) {} virtual void SetPluginMode(HANDLE hPlugin,const wchar_t *PluginFile,bool SendOnFocus=false) {} virtual void SetPluginModified() {} - virtual int ProcessPluginEvent(int Event,void *Param) {return FALSE;} + virtual int ProcessPluginEvent(int Event,void *Param); virtual HANDLE GetPluginHandle() {return nullptr;} virtual void SetTitle(); virtual string &GetTitle(string &Title,int SubLen=-1,int TruncSize=0); Index: unicode_far/PluginW.pas =================================================================== --- unicode_far/PluginW.pas (revision 7981) +++ unicode_far/PluginW.pas (working copy) @@ -2734,12 +2734,13 @@ { PLUGIN_FLAGS } const - PF_PRELOAD = $0001; - PF_DISABLEPANELS = $0002; - PF_EDITOR = $0004; - PF_VIEWER = $0008; - PF_FULLCMDLINE = $0010; - PF_DIALOG = $0020; + PF_PRELOAD = $0001; + PF_DISABLEPANELS = $0002; + PF_EDITOR = $0004; + PF_VIEWER = $0008; + PF_FULLCMDLINE = $0010; + PF_DIALOG = $0020; + PF_ALLPANELEVENTS = $0040; (* struct PluginInfo Index: plugins/common/unicode/plugin.hpp =================================================================== --- plugins/common/unicode/plugin.hpp (revision 7948) +++ plugins/common/unicode/plugin.hpp (working copy) @@ -5,7 +5,7 @@ /* plugin.hpp - Plugin API for Far Manager 3.0 build 2611 + Plugin API for Far Manager 3.0 build 2652 */ /* @@ -43,7 +43,7 @@ #define FARMANAGERVERSION_MAJOR 3 #define FARMANAGERVERSION_MINOR 0 #define FARMANAGERVERSION_REVISION 0 -#define FARMANAGERVERSION_BUILD 2611 +#define FARMANAGERVERSION_BUILD 2652 #define FARMANAGERVERSION_STAGE VS_RELEASE #ifndef RC_INVOKED @@ -2089,6 +2089,7 @@ PF_VIEWER = 0x0000000000000008ULL, PF_FULLCMDLINE = 0x0000000000000010ULL, PF_DIALOG = 0x0000000000000020ULL, + PF_ALLPANELEVENTS = 0x0000000000000040ULL, PF_NONE = 0; struct PluginMenuItem |
|
Вот патч. Обобщил до всех панельных событий. Также поправил документацию OpenW. Неужели так трудно доки вместе с API подправить? Убило 10 минут поиска бага. Плагин: https://github.com/CyberShadow/localcmdhistory/blob/master/src/localcmdhistory.cpp |
|
А зачем "время запуска"? Есть же PID - чего проще и удобнее? |
|
PID не уникальный за всё время. Эффект будет, что если стелкой докрутить после конца истории этой сессии, дальше пойдет история предыдущей сессии в которой по случайности FAR имел тот же PID. Но это уже неважно, патч по другому пути. |
|
Если от меня чего-либо ожидается для продвижения этой идеи, буду рад это исполнить. |
|
А что скажут разработчики Far'a? Текущие плагины патч не ломает. Или патч не принимается из соображений "безопасности" - можно будет перехватить всё и вся? |
|
разработчиков фара в первую очередь волнуют изменения, которые ломают текущие плагины. как с ними будет покончено, так сразу и за те, которые не ломают примемся. |
|
Вроде как ломающие изменения позади. Не пришло ли время патча? |
|
0001-Add-PF_ALLPANELEVENTS.patch (7,815 bytes)
From b5ede4cc1fdb65873f7ad2adfdb9df28662fb048 Mon Sep 17 00:00:00 2001 From: Vladimir Panteleev <vladimir@thecybershadow.net> Date: Sat, 11 Jan 2014 18:08:07 +0000 Subject: [PATCH] Add PF_ALLPANELEVENTS --- enc/enc_rus3.work/meta/structures/plugininfo.html | 4 +++ .../meta/structures/processpaneleventinfo.html | 2 +- plugins/common/unicode/plugin.hpp | 1 + unicode_far/PluginW.pas | 15 ++++---- unicode_far/flplugin.cpp | 4 +++ unicode_far/panel.cpp | 5 +++ unicode_far/panel.hpp | 2 +- unicode_far/plugin.hpp | 1 + unicode_far/plugins.cpp | 40 ++++++++++++++++++++-- 9 files changed, 63 insertions(+), 11 deletions(-) diff --git a/enc/enc_rus3.work/meta/structures/plugininfo.html b/enc/enc_rus3.work/meta/structures/plugininfo.html index be51de7..457a9fa 100644 --- a/enc/enc_rus3.work/meta/structures/plugininfo.html +++ b/enc/enc_rus3.work/meta/structures/plugininfo.html @@ -53,6 +53,10 @@ struct PluginInfo <tr class="cont"><td class="cont" width="40%"><a name="PF_FULLCMDLINE">PF_FULLCMDLINE</a></td> <td class="cont" width="60%">��������� Far Manager ��������� ������� �� �������� ������ ������ � ��������� <code>CommandPrefix</code>. ��������� ���������� ���� ����, ���� ������ ����� ���������� �������� ��������� <code>CommandPrefix</code>.</td></tr> + <tr class="cont"><td class="cont" width="40%"><a name="PF_ALLPANELEVENTS">PF_ALLPANELEVENTS</a></td> + <td class="cont" width="60%">��������� Far Manager ��������� ������� ��� ������� �����, ���������� ���� ����� ����������� ������-���� �������. + ����� �������� ����� �������� ����� <a href="../exported_functions/processpaneleventw.html">ProcessPanelEventW</a> � ����� <code>hPanel</code> ������ <code>NULL</code>. + �������� ����� �������� ����� �����, ������ �������� ���������� ������� ����� ������ TRUE.</td></tr> <tr class="cont"><td class="cont" width="40%"><a name="PF_NONE">PF_NONE</a></td> <td class="cont" width="60%">������� ����.</td></tr> </table></div> diff --git a/enc/enc_rus3.work/meta/structures/processpaneleventinfo.html b/enc/enc_rus3.work/meta/structures/processpaneleventinfo.html index a97fd81..656ef73 100644 --- a/enc/enc_rus3.work/meta/structures/processpaneleventinfo.html +++ b/enc/enc_rus3.work/meta/structures/processpaneleventinfo.html @@ -79,7 +79,7 @@ struct ProcessPanelEventInfo <div class=dfn>Param</div> <div class=dfndescr>������� �������� ������� �� ���� �����. �������� �������� ������ �� ������� ���������.</div> <div class=dfn>hPanel</div> - <div class=dfndescr>�������� ������, ���������� ������� <a href="../exported_functions/openw.html">OpenW</a>.</div> + <div class=dfndescr>�������� ������, ���������� ������� <a href="../exported_functions/openw.html">OpenW</a>. ����� �� NULL, ���� � PluginInfo.Flags �� ������ <a href="plugininfo.html#PF_ALLPANELEVENTS">PF_ALLPANELEVENTS</a>.</div> </div> <h3>�������</h3> diff --git a/plugins/common/unicode/plugin.hpp b/plugins/common/unicode/plugin.hpp index 5e99cc3..7245540 100644 --- a/plugins/common/unicode/plugin.hpp +++ b/plugins/common/unicode/plugin.hpp @@ -2188,6 +2188,7 @@ static const PLUGIN_FLAGS PF_VIEWER = 0x0000000000000008ULL, PF_FULLCMDLINE = 0x0000000000000010ULL, PF_DIALOG = 0x0000000000000020ULL, + PF_ALLPANELEVENTS = 0x0000000000000040ULL, PF_NONE = 0; struct PluginMenuItem diff --git a/unicode_far/PluginW.pas b/unicode_far/PluginW.pas index 6fcd8e0..217d8f9 100644 --- a/unicode_far/PluginW.pas +++ b/unicode_far/PluginW.pas @@ -3491,13 +3491,14 @@ type TPluginFlags = Int64; const - PF_NONE = 0; - PF_PRELOAD = $0001; - PF_DISABLEPANELS = $0002; - PF_EDITOR = $0004; - PF_VIEWER = $0008; - PF_FULLCMDLINE = $0010; - PF_DIALOG = $0020; + PF_NONE = 0; + PF_PRELOAD = $0001; + PF_DISABLEPANELS = $0002; + PF_EDITOR = $0004; + PF_VIEWER = $0008; + PF_FULLCMDLINE = $0010; + PF_DIALOG = $0020; + PF_ALLPANELEVENTS = $0040; (* struct PluginMenuItem diff --git a/unicode_far/flplugin.cpp b/unicode_far/flplugin.cpp index bfb4258..c6fee5a 100644 --- a/unicode_far/flplugin.cpp +++ b/unicode_far/flplugin.cpp @@ -1169,6 +1169,10 @@ PluginHandle* FileList::GetPluginHandle() const int FileList::ProcessPluginEvent(int Event,void *Param) { + // ���� ������ ���� ��������� �� �������� ������ + if (Panel::ProcessPluginEvent(Event, Param)) + return TRUE; + if (PanelMode==PLUGIN_PANEL) return(Global->CtrlObject->Plugins->ProcessEvent(hPlugin,Event,Param)); diff --git a/unicode_far/panel.cpp b/unicode_far/panel.cpp index e288480..af1af68 100644 --- a/unicode_far/panel.cpp +++ b/unicode_far/panel.cpp @@ -2723,3 +2723,8 @@ bool Panel::ExecShortcutFolder(string& strShortcutFolder, const GUID& PluginGuid SrcPanel->Redraw(); return true; } + +int Panel::ProcessPluginEvent(int Event,void *Param) +{ + return Global->CtrlObject->Plugins->ProcessEvent(NULL,Event,Param); +} diff --git a/unicode_far/panel.hpp b/unicode_far/panel.hpp index 51c248d..74f17be 100644 --- a/unicode_far/panel.hpp +++ b/unicode_far/panel.hpp @@ -247,7 +247,7 @@ public: virtual void GetOpenPanelInfo(struct OpenPanelInfo *Info) {} virtual void SetPluginMode(PluginHandle* hPlugin,const string& PluginFile,bool SendOnFocus=false) {} virtual void SetPluginModified() {} - virtual int ProcessPluginEvent(int Event,void *Param) {return FALSE;} + virtual int ProcessPluginEvent(int Event,void *Param); virtual PluginHandle* GetPluginHandle() const {return nullptr;} virtual void SetTitle(); virtual const string& GetTitle(string &Title); diff --git a/unicode_far/plugin.hpp b/unicode_far/plugin.hpp index 2e3f78d..1699656 100644 --- a/unicode_far/plugin.hpp +++ b/unicode_far/plugin.hpp @@ -2356,6 +2356,7 @@ static const PLUGIN_FLAGS PF_VIEWER = 0x0000000000000008ULL, PF_FULLCMDLINE = 0x0000000000000010ULL, PF_DIALOG = 0x0000000000000020ULL, + PF_ALLPANELEVENTS = 0x0000000000000040ULL, PF_NONE = 0; struct PluginMenuItem diff --git a/unicode_far/plugins.cpp b/unicode_far/plugins.cpp index 7b07bff..2e63548 100644 --- a/unicode_far/plugins.cpp +++ b/unicode_far/plugins.cpp @@ -1086,11 +1086,47 @@ int PluginManager::ProcessKey(PluginHandle* hPlugin,const INPUT_RECORD *Rec, boo int PluginManager::ProcessEvent(PluginHandle* hPlugin, int Event, void *Param) { ProcessPanelEventInfo Info = {sizeof(Info)}; - Info.hPanel = hPlugin->hPlugin; Info.Event = Event; Info.Param = Param; - return hPlugin->pPlugin->ProcessPanelEvent(&Info); + if (!hPlugin) + { + // hPlugin==NULL �� ��������� ������ �� ��� ����� + // (�������� ���� �������� � PF_ALLPANELEVENTS) + Info.hPanel = NULL; + + FOR(const auto& i, SortedPlugins) + { + UINT64 IFlags; + + if (i->CheckWorkFlags(PIWF_CACHED)) + { + unsigned __int64 id = Global->Db->PlCacheCfg()->GetCacheID(i->GetCacheName()); + IFlags = Global->Db->PlCacheCfg()->GetFlags(id); + } + else + { + PluginInfo Info = {sizeof(Info)}; + if (!i->GetPluginInfo(&Info)) + continue; + + IFlags = Info.Flags; + } + + if (IFlags & PF_ALLPANELEVENTS && i->HasProcessPanelEvent()) + { + if (i->Load() && i->ProcessPanelEvent(&Info)) + return TRUE; + } + } + + return FALSE; + } + else + { + Info.hPanel = hPlugin->hPlugin; + return hPlugin->pPlugin->ProcessPanelEvent(&Info); + } } -- 1.8.3.msysgit.0.5.gfaaeac2 |
|
Обновил патч. |
|
Оригинальная проблема отлично решается отключением истории Far и использованием плагина AltHistory. Таким образом на стрелках - локальная история, на Ctrl+X/E и AltF8 - глобальная. Предложенный патч и демо-плагин проблему решают плохо, т.к. все равно не перехватываются команды, выполненные нажатием Enter над файлом. |
|
CyberShadow Может быть не стоит торопиться и закрывать тикет? Если ваш первый комментарий (0002084:0009027) актуален, то предлагается решить 2 независимые проблемы: 3а. Передавать плагинам информацию о смене папок, открытии файлов и др. 3б. Сохранять в истории вместе с прочей информацией и идентификатор сессии Вопрос а) интересен, подымался и ранее и вроде бы никто не возражал, но делать пока некому. Вопрос б) в общем независим от а), и как я понимаю несложен в реализации Для решения задачи заявленой в описании тикета достаточно и б) Ведь если в апи будет возможность получить id сессии, то макросом несложно реализовать фильтр по истории. (Обратите внимание на недавний тикет 0002208, реализующий сохранение текущей папки, и на макрос http://forum.farmanager.com/viewtopic.php?f=60&t=8289) |
|
> 3б. Сохранять в истории вместе с прочей информацией и идентификатор сессии А в идеале ещё и различать панели, тогда появится возможность восстановить сторию переходов для каждой |
Date Modified | Username | Field | Change |
---|---|---|---|
2012-04-23 14:11 | CyberShadow | New Issue | |
2012-04-23 14:24 | JohnDoe | Note Added: 0009025 | |
2012-04-23 14:31 | CyberShadow | Note Added: 0009027 | |
2012-04-23 16:01 | JohnDoe | Note Added: 0009028 | |
2012-04-23 18:08 | zg | Note Added: 0009034 | |
2012-04-23 18:32 | CyberShadow | Note Added: 0009035 | |
2012-04-23 19:00 | JohnDoe | Note Added: 0009037 | |
2012-04-23 19:04 | CyberShadow | Note Added: 0009038 | |
2012-04-23 23:43 | zg | Note Added: 0009039 | |
2012-04-24 05:58 | JohnDoe | Note Added: 0009041 | |
2012-04-25 13:50 | CyberShadow | Note Added: 0009056 | |
2012-04-29 18:50 | CyberShadow | File Added: pf_allpanelevents.diff | |
2012-04-29 18:55 | CyberShadow | Note Added: 0009079 | |
2012-04-30 04:10 | Maximus | Note Added: 0009080 | |
2012-04-30 04:12 | CyberShadow | Note Added: 0009081 | |
2012-04-30 04:12 | CyberShadow | Note Edited: 0009081 | |
2012-05-01 16:42 | CyberShadow | Note Added: 0009082 | |
2012-05-12 09:10 | Denis | Note Added: 0009164 | |
2012-05-12 09:31 | zg | Note Added: 0009165 | |
2013-02-03 00:31 | alexy | Severity | minor => feature |
2013-02-20 22:26 | Denis | Note Added: 0010357 | |
2014-01-11 18:15 | CyberShadow | File Added: 0001-Add-PF_ALLPANELEVENTS.patch | |
2014-01-11 18:17 | CyberShadow | Note Added: 0011624 | |
2014-01-30 14:20 | CyberShadow | Note Added: 0011802 | |
2014-01-30 14:20 | CyberShadow | Status | new => resolved |
2014-02-04 12:04 | JohnDoe | Note Added: 0011818 | |
2019-05-30 07:26 | JohnDoe | Note Added: 0016513 | |
2019-05-30 07:26 | JohnDoe | Status | resolved => new |