Editor/Viewer: Store/restore Sessions

Столкнулись с проблемой в использовании макросов? Здесь можно получить помощь.
Post Reply
siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor/Viewer: Store/restore Sessions

Post by siberia-man » Fri 20 Jan, 2017 11:00

Не помню/не знаю было ли такое сделано на макросах или плагинами. Хотелось бы иметь макрос для сохранения/восстановления сессий - сохранять/перегружать список последних открытых файлов в редакторе/просмотрщике.

Требования
1. выполнять все действия (сохранять/восстанавливать) только вручную
2. работать с текущей сессией по умолчанию
3. работать с именованной сессией (задать имя сессии для сохранения/восстановления)
4. возможно хранить сессии в sqlite или файловой системе (одна сессия - один файл-список файлов и режимов)

Заранее оговорюсь - я не знаток Luafar, поэтому rtfm это весьма общий вектор направлений. Желательно все-таки более конкретный пункт, с которого можно было бы начать работать в этом направлении.

Вопросы по теме.
1. получить список всех окрытых файлов (просмотр и редактирование)
2. в Luafar имеются встроенные средства работы с sqlite/ФС или надо что-то доустанавливать?

Возможно это уже реализовано и успешно работает и используется. Тогда уж хотелось бы узнать где подобное лежит.

Shmuel
Posts: 5158
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 15 times
Been thanked: 144 times

Editor/Viewer: Store/restore Sessions

Post by Shmuel » Fri 20 Jan, 2017 11:19

siberia-man wrote: 1. получить список всех окрытых файлов (просмотр и редактирование)
far.AdvControl, ACTL_GETWINDOWCOUNT, ACTL_GETWINDOWINFO
siberia-man wrote: 2. в Luafar имеются встроенные средства работы с sqlite/ФС или надо что-то доустанавливать?
В LuaFAR такие средства есть (смотрите в мануале раздел "Settings Control"), но LuaMacro содержит более простые в использовании функции mf.mload, mf.msave.
siberia-man wrote: Возможно это уже реализовано и успешно работает и используется. Тогда уж хотелось бы узнать где подобное лежит.
Возможно, но я не знаю.

siberia-man
Posts: 69
Joined: Sat 28 Jun, 2014 23:07
Been thanked: 1 time

Editor/Viewer: Store/restore Sessions

Post by siberia-man » Fri 27 Jan, 2017 14:02

Оставлю здесь, потом вернусь - продолжу. Очень сырая заготовка. Скорее всего все будет строится вокруг этих функций (или им подобных)

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

---------------------------------------------------------------------------

Post Reply

Return to “Нужна помощь”