Не помню/не знаю было ли такое сделано на макросах или плагинами. Хотелось бы иметь макрос для сохранения/восстановления сессий - сохранять/перегружать список последних открытых файлов в редакторе/просмотрщике.
Требования
1. выполнять все действия (сохранять/восстанавливать) только вручную
2. работать с текущей сессией по умолчанию
3. работать с именованной сессией (задать имя сессии для сохранения/восстановления)
4. возможно хранить сессии в sqlite или файловой системе (одна сессия - один файл-список файлов и режимов)
Заранее оговорюсь - я не знаток Luafar, поэтому rtfm это весьма общий вектор направлений. Желательно все-таки более конкретный пункт, с которого можно было бы начать работать в этом направлении.
Вопросы по теме.
1. получить список всех окрытых файлов (просмотр и редактирование)
2. в Luafar имеются встроенные средства работы с sqlite/ФС или надо что-то доустанавливать?
Возможно это уже реализовано и успешно работает и используется. Тогда уж хотелось бы узнать где подобное лежит.
Editor/Viewer: Store/restore Sessions
-
- Posts: 131
- Joined: Sat 28 Jun, 2014 23:07
- Has thanked: 2 times
- Been thanked: 9 times
-
- Posts: 6839
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Editor/Viewer: Store/restore Sessions
far.AdvControl, ACTL_GETWINDOWCOUNT, ACTL_GETWINDOWINFO
В LuaFAR такие средства есть (смотрите в мануале раздел "Settings Control"), но LuaMacro содержит более простые в использовании функции mf.mload, mf.msave.
Возможно, но я не знаю.
-
- Posts: 131
- Joined: Sat 28 Jun, 2014 23:07
- Has thanked: 2 times
- Been thanked: 9 times
Editor/Viewer: Store/restore Sessions
Оставлю здесь, потом вернусь - продолжу. Очень сырая заготовка. Скорее всего все будет строится вокруг этих функций (или им подобных)
Code: Select all
---------------------------------------------------------------------------
local F = far.Flags
---------------------------------------------------------------------------
local function get_current_session()
local t = {}
local wc = far.AdvControl(F.ACTL_GETWINDOWCOUNT)
for i = 1, wc do
local wi = far.AdvControl(F.ACTL_GETWINDOWINFO, i)
local wt = wi.Type
if wt == F.WTYPE_PANELS then
local LPanel = APanel.Left and APanel or PPanel
local RPanel = APanel.Left and PPanel or APanel
t[#t + 1] = {
mode = wt;
lpath = LPanel.Path0;
rpath = RPanel.Path0;
}
elseif wt == F.WTYPE_EDITOR or wt == F.WTYPE_VIEWER then
t[#t + 1] = {
mode = wt;
name = wi.Name;
}
end
end
return t
end
---------------------------------------------------------------------------
local FAR_SESSIONS = {
ROOTNAME = "FarSessions";
LISTNAME = "FarSessionsList";
DEFAULT = "default";
}
local function load_sessions()
return mf.mload(FAR_SESSIONS.ROOTNAME, FAR_SESSIONS.LISTNAME) or {}
end
local function save_sessions(sessions)
mf.msave(FAR_SESSIONS.ROOTNAME, FAR_SESSIONS.LISTNAME, sessions)
end
local function del_sessions()
mf.mdelete(FAR_SESSIONS.ROOTNAME, FAR_SESSIONS.LISTNAME)
end
---------------------------------------------------------------------------