>> Да что говорить - сейчас так называемые DE не поддердивают даже полноценные сессии.
> И могли бы сами пару программ допилить
> до сохранения state, если чего-то не хватает.Вопрос в сложности допиливания.
А мог бы я любую, произвольную, неизвестно какую заранее программу, ранее сессию не поддерживающую, допилить до сохранения состояния в "сессии"?
Скажем, через интроспекцию её состояние посмотреть, к событиям "состояние поменялось" прицепиться и её состояние в сессии сохранить?
Как вообще эти сессии реализуются? есть какой-то guid сессии, какие-то "контекстно-зависимые" данные приложения с состоянием, какое-то хранилище настроек. Что мешает сделать общий API, с универсальными метаданными/событиями шины/словарями? Грубо говоря, чем отличается хранение настроек внутри того же evince и epiphany или okular/konqueror, и *любого другого* неизвестно какого наперёд взятого приложения?
Вот в MacOSX/GNUstep/Etoile, например, сериализацию объектов приложений не нужно писать "под конкретный объект" -- есть интроспекция, универсальная сериализация работает через неё. Есть форматы plist/xml/nib, которые прозрачно сохраняют "freeze dryed objects", могут сохранить его в хранилище, и могут загрузить, продолжив с того же самого состояния.
http://en.wikipedia.org/wiki/Interface_Builder
Interface Builder saves an application's interface as a bundle that contains the interface objects and relationships used in the application. These objects are archived (a process also known as serialization or marshalling in other contexts) into either an XML file or a NeXT-style property list file with a .nib extension. Upon running an application, the proper NIB objects are unarchived, connected into the binary of their owning application, and awakened. Unlike almost all other GUI designer systems which generate code to construct the UI (notable exceptions being Glade, Codegear's Delphi and C++ Builder, which stream UI objects similarly), NIBs are often referred to as freeze dried because they contain the archived objects themselves, ready to run.