Index: CfgStore.js
==================================================================
--- CfgStore.js
+++ CfgStore.js
@@ -45,10 +45,31 @@
 
         if(isEventConnected)
             events.disconnect(windows, "onDoModal", SelfScript.self, "hookCaptureCfgStoreWindow")
         if(view)
             view.activate();
+    }catch(e)
+    {
+        Message("Ошибка : " + e.description)
+    }
+
+    return true;
+}
+
+SelfScript.self['macrosПоместить объект в хранилище'] = function() {
+
+    try{ //иногда вылетают странные исключения :( при работе с элементами форм
+        view = windows.getActiveView();
+        if (!view || !view.mdObj || view.mdObj.container != metadata.current) return false;
+        
+        
+        res1 = view.mdObj.activateInTree();
+        
+        isEventConnected = true
+
+        res = stdcommands.CfgStore.StoreIntoCfgStore.send() // true если успешно
+
     }catch(e)
     {
         Message("Ошибка : " + e.description)
     }
 

Index: Libs/ScriptForm.js
==================================================================
--- Libs/ScriptForm.js
+++ Libs/ScriptForm.js
@@ -143,15 +143,22 @@
     
     loadSettings : function () {
         
         if (!this.hasSettings())
             return false;
+            
+        if (!this._defaultSettings) {
+        	this._defaultSettings = {};
+        	for(var prop in this.settings) {
+	        	this._defaultSettings[prop] = this.settings[prop];
+        	}
+        }    
             
         var sm = stdlib.require('SettingsManagement.js').SettingsManagement;
-        for (var pflType in this.settings) 
+        for (var pflType in this._defaultSettings) 
         {
-            var defaults = this.settings[pflType];
+            var defaults = this._defaultSettings[pflType];
             // Имя ключа = строка - имя значения перечисления. Выполняя строку получаем необходимое значение. 
             var pflTypeValue = eval(pflType); 
             var settings = sm.CreateManager(this.settingsRootPath, defaults, pflTypeValue);
             
             settings.LoadSettings();

Index: SessionManager.js
==================================================================
--- SessionManager.js
+++ SessionManager.js
@@ -49,10 +49,22 @@
 
     var sm = GetSessionManager();
     sm.sessionTreeClear();
     return true;
 }
+
+SelfScript.self['macrosОткрыть настройку'] = function() {
+
+    var sms = GetSessionManagerSettings();
+    sms.show(true);
+    sms = null;
+    var sm = GetSessionManager();
+    sm.reloadSettings();
+    return true;
+}
+
+
 /* Возвращает название макроса по умолчанию - вызывается, когда пользователь
 дважды щелкает мышью по названию скрипта в окне Снегопата. */
 function getDefaultMacros() {
     return 'Восстановить последнюю сессию';
 }
@@ -66,14 +78,17 @@
 
     settingsRootPath : SelfScript.uniqueName,
 
     settings : {
         pflBase : {
-            'SessionsHistory' : "", //Таблица значений.
-            'SassionSaved'     : v8New('ValueList'),
-            'AutoSave'      : false, // Автосохранение сессии.
-            'HistoryDepth'  : 15 // Количество элементов истории сессий.
+            'SessionsHistory' : "", //Таблица значений 
+            'SassionSaved'    : "",
+            'AutoSave'        : true, // Автосохранение сессии.
+            'HistoryDepth'    : 15, // Количество элементов истории сессий.
+            'AutoRestore'     : true,
+            'MarksSave'       : true,
+            'MarksRestore'    : true
 
         }
     },
 
     construct : function (isExtend) {
@@ -110,22 +125,29 @@
             this.SessionTree.Columns.Add("sortkey");
             this.SessionTree.Columns.Add("curLine");
         }
         
         try{
+
             this.SessionTree.Columns.Add("curLine");
         } catch(e){  }
 
     },
 
     restoreSession:function(sessionName){
 
         var sessionsHistory = this.SessionTree;
+        
         if (sessionsHistory.Rows.Count()==0){
             return ;
         }
+
         if (sessionName==undefined) sessionName = ""
+
+        if (!this.form.AutoRestore) {
+            return;
+        }
 
         if (sessionName.length>0){
             for (var i = 0; i<sessionsHistory.Rows.Count(); i++){
                 session  = sessionsHistory.Rows.Get(i);
                 if (session.Name == sessionName){
@@ -237,10 +259,16 @@
             newRow.prop = item.prop;
             newRow.name = item.name;
             newRow.curLine = item.curLine;
             
         }
+
+        // Не позволяем истории расти более заданной глубины.
+        while (this.SessionTree.Rows.Count() > this.form.HistoryDepth){
+            currRow = this.SessionTree.Rows.Get(0);
+            this.SessionTree.Rows.Delete(currRow);
+        }
         this.form.SessionsHistory = ValueToStringInternal(this.SessionTree);
     },
     saveSettings:function(){
         this.form.SessionsHistory = ValueToStringInternal(this.SessionTree);
         this._super();
@@ -247,12 +275,15 @@
     },
     beforeExitApp:function(){
         
         this.watcher.onTimer(1);
         this.watcher.stopWatch();
-        
-        this.saveSession();
+
+        if (this.form.AutoSave){
+            this.saveSession();    
+        }
+
         this.saveSettings();
     },
 
     expandTree : function (collapse) {
         var tree = this.form.Controls.SessionsList;
@@ -353,14 +384,86 @@
                  
     },
 
     sessionTreeClear:function(){
         this.SessionTree.Rows.Clear();
+    }, 
+    reloadSettings:function(){
+        this.loadSettings();
     }
 
 
+})
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ SessionManagerSettings - Настройки менеджера сессий. 
+////
+SessionManagerSettings = ScriptForm.extend({
+
+    settingsRootPath : SelfScript.uniqueName,
+
+    settings : {
+        pflBase : {
+            'SessionsHistory' : "", //Таблица значений 
+            'SassionSaved'    : "",
+            'AutoSave'        : false, // Автосохранение сессии.
+            'HistoryDepth'    : 15, // Количество элементов истории сессий.
+            'AutoRestore'     : true,
+            'MarksSave'       : true,
+            'MarksRestore'    : true
+
+        }
+    },
+
+    construct : function () {
+
+        this._super("scripts\\SessionManager.settings.ssf");
+
+        this.loadSettings();
+
+        SessionManagerSettings._instance = this;
+
+    },
+    loadSettings:function(){
+        this._super();
+        try{
+            this.SessionTree = ValueFromStringInternal(this.form.SessionsHistory);
+        } catch(e){
+            this.SessionTree = v8New("ValueTree");
+            this.SessionTree.Columns.Add("Name");
+            this.SessionTree.Columns.Add("path");
+            this.SessionTree.Columns.Add("uuid");
+            this.SessionTree.Columns.Add("prop");
+            this.SessionTree.Columns.Add("rootId");
+            this.SessionTree.Columns.Add("sortkey");
+            this.SessionTree.Columns.Add("curLine");
+        }
+        
+        try{
+
+            this.SessionTree.Columns.Add("curLine");
+        } catch(e){  }
+
+    },
+
+    saveSettings:function(){
+        this.form.SessionsHistory = ValueToStringInternal(this.SessionTree);
+        this._super();
+    },
+
+    Ok_Click:function(Button){
+        this.saveSettings();
+        this.form.Close();
+    }, 
+
+    Close_Click:function(Button){
+        this.form.Close();
+    }
+
 })
+
+
 
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ TextWindowsWatcher - отслеживает активизацию текстовых окон и запоминает последнее.
 ////
 
@@ -588,10 +691,17 @@
     if (!SessionManager._instance)
         new SessionManager();
 
     return SessionManager._instance;
 }
+
+function GetSessionManagerSettings() {
+    if (!SessionManagerSettings._instance)
+        new SessionManagerSettings();
+
+    return SessionManagerSettings._instance;
+}
 
 function onTimer(Id) {
 
     se = GetSessionManager();
     se.restoreSession();

ADDED   SessionManager.settings.ssf
Index: SessionManager.settings.ssf
==================================================================
--- SessionManager.settings.ssf
+++ SessionManager.settings.ssf
cannot compute difference between binary files

Index: SessionManager.ssf
==================================================================
--- SessionManager.ssf
+++ SessionManager.ssf
cannot compute difference between binary files