Index: enc/enc_lua/luafar_manual.tsi
===================================================================
--- enc/enc_lua/luafar_manual.tsi (revision 11273)
+++ enc/enc_lua/luafar_manual.tsi (working copy)
@@ -6233,6 +6233,7 @@
#_* [`Get`](420.html)
#_* [`OpenSubkey`](442.html)
#_* [`Set`](421.html)
+#_* [`DeleteHistoryItem`](554.html)
#_
@@ -6385,6 +6386,7 @@
#_ File: string
#_ Time: number (number of milliseconds elapsed since January 1, 1601)
#_ Lock: boolean
+#_ Id: number (ID of the entry in the history DB; is only filled for history items -- commands, folders etc.)
#_
#_**Far API used:**
#_ SettingsControl
@@ -6507,6 +6509,33 @@
+id=554
+lv=2
+dt=Text
+nm=obj:DeleteHistoryItem
+ctime=3507637642
+mtime=3576228671
+
+Removes an item from the history. If the item is locked it is not removed.
+#_result = obj:DeleteHistoryItem (HistoryType, ItemId)
+#_
+#_**Parameters:**
+#_ HistoryType: string, one of "FSSF_HISTORY_CMD", "FSSF_HISTORY_FOLDER", "FSSF_HISTORY_VIEW" or "FSSF_HISTORY_EDIT"
+#_ ItemId: number. The ID can be retrieved via a call to 'Enum.'
+#_
+#_**Returns:**
+#_ result: boolean true if the item has been really deleted, false otherwise
+#_
+#_**Far API used:**
+#_ SettingsControl
+#_
+#_@@@
+#_
+
+
+
+
+
id=82
lv=1
dt=Text
Index: plugins/common/unicode/plugin.hpp
===================================================================
--- plugins/common/unicode/plugin.hpp (revision 11273)
+++ plugins/common/unicode/plugin.hpp (working copy)
@@ -1724,6 +1724,7 @@
SCTL_DELETE = 5,
SCTL_CREATESUBKEY = 6,
SCTL_OPENSUBKEY = 7,
+ SCTL_DELETE_HISTORY_ITEM = 8, // Param1 is the history type (see FSSF_HISTORY_xyz), Param2 is a pointer to the ID of the item to delete
};
enum FARSETTINGSTYPES
@@ -1812,6 +1813,7 @@
const wchar_t* File;
FILETIME Time;
BOOL Lock;
+ unsigned __int64 Id;
};
struct FarSettingsEnum
Index: plugins/luamacro/farapi.lua
===================================================================
--- plugins/luamacro/farapi.lua (revision 11273)
+++ plugins/luamacro/farapi.lua (working copy)
@@ -1692,6 +1692,7 @@
SCTL_DELETE = 5,
SCTL_CREATESUBKEY = 6,
SCTL_OPENSUBKEY = 7,
+ SCTL_DELETE_HISTORY_ITEM = 8, // Param1 is the history type (see FSSF_HISTORY_xyz), Param2 is a pointer to the ID of the item to delete
};
enum FARSETTINGSTYPES
@@ -1780,6 +1781,7 @@
const wchar_t* File;
FILETIME Time;
BOOL Lock;
+ unsigned __int64 Id;
};
struct FarSettingsEnum
Index: plugins/luamacro/luafar/service.c
===================================================================
--- plugins/luamacro/luafar/service.c (revision 11273)
+++ plugins/luamacro/luafar/service.c (working copy)
@@ -5343,6 +5343,17 @@
return 1;
}
+static int Settings_deletehistoryitem(lua_State *L)
+{
+ FarSettingsUdata* udata = CheckSettings(L, 1);
+ int historyType = (int)check_env_flag(L, 2);
+ unsigned __int64 itemId = (unsigned __int64)luaL_checkinteger(L,3);
+ int deleted = GetPluginData(L)->Info->SettingsControl(udata->Handle, SCTL_DELETE_HISTORY_ITEM, historyType, &itemId);
+ lua_pushinteger(L, deleted);
+
+ return 1;
+}
+
static int Settings_enum(lua_State *L)
{
struct FarSettingsEnum fse;
@@ -5373,7 +5384,7 @@
if(udata->IsFarSettings)
{
const struct FarSettingsHistory *fsh = fse.Value.Histories + i;
- lua_createtable(L, 0, 6);
+ lua_createtable(L, 0, 7);
if(fsh->Name) PutWStrToTable(L, "Name", fsh->Name, -1);
@@ -5386,6 +5397,7 @@
pushFileTime(L, &fsh->Time);
lua_setfield(L, -2, "Time");
PutBoolToTable(L, "Lock", fsh->Lock);
+ PutNumToTable(L, "Id", (double)fsh->Id);
}
else
{
@@ -5518,6 +5530,7 @@
{"Set", Settings_set},
{"CreateSubkey", Settings_createsubkey},
{"OpenSubkey", Settings_opensubkey},
+ {"DeleteHistoryItem", Settings_deletehistoryitem},
{NULL, NULL},
};
Index: unicode_far/plugapi.cpp
===================================================================
--- unicode_far/plugapi.cpp (revision 11273)
+++ unicode_far/plugapi.cpp (working copy)
@@ -2387,6 +2387,8 @@
case SCTL_CREATESUBKEY:
case SCTL_OPENSUBKEY:
return CheckStructSize((const FarSettingsValue*)Param2)?settings->SubKey(*(const FarSettingsValue*)Param2, Command==SCTL_CREATESUBKEY):0;
+ case SCTL_DELETE_HISTORY_ITEM:
+ return (unsigned __int64*)Param2 ? settings->DeleteHistoryItem((int)Param1, *(unsigned __int64*)Param2) : FALSE;
}
return FALSE;
Index: unicode_far/plugin.hpp
===================================================================
--- unicode_far/plugin.hpp (revision 11273)
+++ unicode_far/plugin.hpp (working copy)
@@ -1876,6 +1876,7 @@
SCTL_DELETE = 5,
SCTL_CREATESUBKEY = 6,
SCTL_OPENSUBKEY = 7,
+ SCTL_DELETE_HISTORY_ITEM = 8, // Param1 is the history type (see FSSF_HISTORY_xyz), Param2 is a pointer to the ID of the item to delete
};
enum FARSETTINGSTYPES
@@ -1970,6 +1971,7 @@
const wchar_t* File;
FILETIME Time;
BOOL Lock;
+ unsigned __int64 Id;
};
struct FarSettingsEnum
Index: unicode_far/plugsettings.cpp
===================================================================
--- unicode_far/plugsettings.cpp (revision 11273)
+++ unicode_far/plugsettings.cpp (working copy)
@@ -295,6 +295,11 @@
return result;
}
+int PluginSettings::DeleteHistoryItem(int HistoryType, unsigned __int64 itemId)
+{
+ return FALSE;
+}
+
int FarSettings::Set(const FarSettingsItem& Item)
{
return FALSE;
@@ -444,6 +449,37 @@
return Save? Global->Db->HistoryCfg().get() : Global->Db->HistoryCfgMem().get();
}
+static History* getHistory(FARSETTINGS_SUBFOLDERS HistoryType)
+{
+ History *result;
+ switch(HistoryType)
+ {
+ case FSSF_HISTORY_CMD:
+ result = Global->CtrlObject->CmdHistory;
+ break;
+ case FSSF_HISTORY_FOLDER:
+ result = Global->CtrlObject->FolderHistory;
+ break;
+ case FSSF_HISTORY_VIEW:
+ case FSSF_HISTORY_EDIT:
+ result = Global->CtrlObject->ViewHistory;
+ break;
+ default:
+ result = nullptr;
+ break;
+ }
+ return result;
+}
+
+int FarSettings::DeleteHistoryItem(int HistoryType, unsigned __int64 itemId)
+{
+ History *history = getHistory((FARSETTINGS_SUBFOLDERS)HistoryType);
+ if (!history)
+ return FALSE;
+
+ return history->DeleteIfUnlocked(itemId);
+}
+
int FarSettings::FillHistory(int Type,const string& HistoryName,FarSettingsEnum& Enum,HistoryFilter Filter)
{
m_Enum.emplace_back(std::make_unique());
@@ -463,6 +499,7 @@
item.Lock=HLock;
GUID Guid;
if(strGuid.empty()||!StrToGuid(strGuid,Guid)) Guid=FarGuid;
+ item.Id=id;
AddItem(m_Enum.back().get(),item,strName,strData,Guid,strFile);
}
}
Index: unicode_far/plugsettings.hpp
===================================================================
--- unicode_far/plugsettings.hpp (revision 11273)
+++ unicode_far/plugsettings.hpp (working copy)
@@ -50,6 +50,8 @@
virtual int Enum(FarSettingsEnum& Enum)=0;
virtual int Delete(const FarSettingsValue& Value)=0;
virtual int SubKey(const FarSettingsValue& Value, bool bCreate)=0;
+ // Deletes the history item if it is not locked. Returns TRUE if the item was really deleted and FALSE otherwise.
+ virtual int DeleteHistoryItem(int HistoryType, unsigned __int64 itemId)=0;
};
class FarSettingsNameItems
@@ -80,6 +82,7 @@
int Enum(FarSettingsEnum& Enum);
int Delete(const FarSettingsValue& Value);
int SubKey(const FarSettingsValue& Value, bool bCreate);
+ int DeleteHistoryItem(int HistoryType, unsigned __int64 itemId);
};
class FarSettingsHistoryItems
@@ -110,4 +113,5 @@
int Enum(FarSettingsEnum& Enum);
int Delete(const FarSettingsValue& Value);
int SubKey(const FarSettingsValue& Value, bool bCreate);
+ int DeleteHistoryItem(int HistoryType, unsigned __int64 itemId);
};