73 lines
2.3 KiB
Lua
73 lines
2.3 KiB
Lua
-- desktop.lua --- session desktop-save wiring (Arc 3 phase 2).
|
|
--
|
|
-- The Rust `pmacs.session.{save_desktop,restore_desktop,arm_restore,
|
|
-- is_daemon}` primitives do the load-bearing work (layout serde +
|
|
-- structural rebuild). This thin layer adds the opt-in `desktop_mode`
|
|
-- switch and the manual commands.
|
|
--
|
|
-- Opt-in: nothing happens unless init.lua calls
|
|
-- `pmacs.session.desktop_mode(true)`. Local-only in v1 (Q#DS9) — a
|
|
-- no-op under a daemon, where each attached frontend has its own layout.
|
|
--
|
|
-- Framing: docs/desktop-save-framing.md.
|
|
|
|
local enabled = false
|
|
|
|
-- Enable (or disable) desktop-save. When enabled in local mode:
|
|
-- * arm restore-on-startup (the RunLocal trigger fires it), and
|
|
-- * save the session on quit (editor.before-quit).
|
|
function pmacs.session.desktop_mode(on)
|
|
on = (on ~= false)
|
|
if on and pmacs.session.is_daemon() then
|
|
-- Local-only in v1; keep quiet rather than half-enable.
|
|
return false
|
|
end
|
|
enabled = on
|
|
-- Arm (or, when disabling, unarm) restore-on-startup, so an
|
|
-- enable-then-disable in init.lua does not still restore.
|
|
pmacs.session.arm_restore(on)
|
|
return enabled
|
|
end
|
|
|
|
-- Save on quit. before-quit is short-circuit; returning nil never
|
|
-- vetoes, and a save failure must not block quitting (Q#DS8).
|
|
pmacs.hook.add("editor.before-quit", function()
|
|
if enabled then
|
|
pcall(pmacs.session.save_desktop)
|
|
end
|
|
end)
|
|
|
|
pmacs.command.define {
|
|
name = "desktop-save",
|
|
description = "Save the current session (buffers + layout) to disk.",
|
|
fn = function()
|
|
if pmacs.session.is_daemon() then
|
|
pmacs.editor.set_status("desktop-save: local-only in v1")
|
|
return
|
|
end
|
|
local ok, wrote_or_err = pcall(pmacs.session.save_desktop)
|
|
if not ok then
|
|
pmacs.editor.set_status("desktop-save: " .. tostring(wrote_or_err))
|
|
elseif wrote_or_err then
|
|
pmacs.editor.set_status("desktop saved")
|
|
else
|
|
pmacs.editor.set_status("desktop-save: nothing to save")
|
|
end
|
|
end,
|
|
}
|
|
|
|
pmacs.command.define {
|
|
name = "desktop-restore",
|
|
description = "Restore the saved session (buffers + layout) from disk.",
|
|
fn = function()
|
|
if pmacs.session.is_daemon() then
|
|
pmacs.editor.set_status("desktop-restore: local-only in v1")
|
|
return
|
|
end
|
|
local ok, err = pcall(pmacs.session.restore_desktop)
|
|
if not ok then
|
|
pmacs.editor.set_status("desktop-restore: " .. tostring(err))
|
|
end
|
|
end,
|
|
}
|