Index: DevTools/immediate.js
==================================================================
--- DevTools/immediate.js
+++ DevTools/immediate.js
@@ -49,10 +49,17 @@
 
 function macrosЗапуститьОтладчикСкриптов()
 {
     runDebugger();
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'ОткрытьОкно';
+}
+
 
 /*
  *    Обработчики событий формы
  */
 function ОбновлениеОтображения()

Index: DevTools/pflview.js
==================================================================
--- DevTools/pflview.js
+++ DevTools/pflview.js
@@ -59,10 +59,16 @@
         form = loadScriptForm(SelfScript.fullPath.replace(/js$/i, 'ssf'), SelfScript.self)
         walkProfile(profileRoot, form.ProfileTree)
     }
     form.Открыть()
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'ПоказатьПрофайл';
+}
 
 function КоманднаяПанельРазвернутьВсеГруппы(Кнопка)
 {
     for(var rowsArray = new Enumerator(form.ProfileTree.Строки);
         !rowsArray.atEnd(); rowsArray.moveNext())

Index: DevTools/scriptdev.js
==================================================================
--- DevTools/scriptdev.js
+++ DevTools/scriptdev.js
@@ -71,10 +71,17 @@
     stdcommands.Frntend.ClearMessageWindow.send(); // Очистить окно сообщений.
     Message(jsCode);
     
     return true;
 }
+ 
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'Настройка';
+}
+
  
 /* **********************************************************
  *  Реализация функционала скрипта.
  * ********************************************************* */
 

Index: DevTools/testrunner.js
==================================================================
--- DevTools/testrunner.js
+++ DevTools/testrunner.js
@@ -30,10 +30,17 @@
 
 function macrosСкрыть()
 {
     GetTestRunner().Close();
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'Показать';
+}
+
 //}
 
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ TestRunner
 ////

Index: RegExpEditor.js
==================================================================
--- RegExpEditor.js
+++ RegExpEditor.js
@@ -23,10 +23,16 @@
 SelfScript.Self['macros������������� ���������� ���������'] = function () {
     var reEditor = CreateRegExpEditor();
     reEditor.setTextWindow(GetTextWindow());    
     reEditor.open();
 }
+
+/* ���������� �������� ������� �� ��������� - ����������, ����� ������������ 
+������ ������� ����� �� �������� ������� � ���� ���������. */
+function getDefaultMacros() {
+    return '������������� ���������� ���������';
+}
 
 ////} �������
 
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ RegExpEditor
@@ -346,7 +352,5 @@
 
 _RegExpEditor.prototype.CmdBarRemoveNewLines = function (������) {
     this.form.RegExSource = this.form.RegExSource.replace(/\r|\n/g, '');
 }
 ////} RegExpEditor - ����������� ������� �����
-
-

Index: author.js
==================================================================
--- author.js
+++ author.js
@@ -37,10 +37,16 @@
     // form - неявно определяемая глобальная переменная.
     form = loadScriptForm(SelfScript.fullPath.replace(/js$/, 'ssf'), SelfScript.self);
     form.DoModal();
     form = null;
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'Настройка';
+}
 
 ////} Макросы
 
 var MarkerTypes = {
     ADDED: "МаркерДобавлено",

Index: autosave.js
==================================================================
--- autosave.js
+++ autosave.js
@@ -50,10 +50,16 @@
     form.Включить = enabled
     form.Интервал = interval
     form.ОткрытьМодально()
     form = null
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'НастройкаАвтоСохранения';
+}
 
 // Обработчики нажатий кнопок в форме
 function ОкНажатие(Элемент)
 {
     // Прочитаем значения из формы и если они изменились, сохраним их

Index: configCaption.js
==================================================================
--- configCaption.js
+++ configCaption.js
@@ -135,10 +135,16 @@
         profileRoot.setValue(captionExprPath, captionExpr)
         setCaption(windows.mainTitle, windows.additionalTitle)
     }
     form = null
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'Настройка';
+}
 
 function КоманднаяПанель1Проверить(Кнопка)
 {
     var mainTitle = windows.mainTitle, additionalTitle = windows.additionalTitle
     var mainTitleShort = mainTitle.replace(/^Конфигуратор - /, "")

Index: extSearch.js
==================================================================
--- extSearch.js
+++ extSearch.js
@@ -60,10 +60,16 @@
 SelfScript.self['macrosПерейти к предыдущему совпадению'] = function() {
     var es = GetExtSearch();
     es.Show();
     es.moveRowCursor(false);
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'Открыть окно поиска';
+}
 
 ////} Макросы
 
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ ExtSearch - Расширенный поиск в тексте модуля.

Index: extfiles.js
==================================================================
--- extfiles.js
+++ extfiles.js
@@ -8,45 +8,152 @@
 /* Скрипт для открытия внешних файлов для Снегопата
  * Автор        : Пушин Владимир, vladnet@gmail.com
  * Дата создания: 24.08.2011
  * Описание     : Добавляет окно из которого можно открывать внешние файлы
  */
-var мВерсияСкрипта = 1.35
-
-/* Версия 1.35
- * 1. Добавлена возможность обновлять не все каталоги, а только текущий
- * 2. Косметические изменения форм
- * 3. Добавлены горячие кнопки для кнопок обновления каталогов
- * 4. Теперь при обновлении каталога позиция курсора сохраняется
- */
-
-// Зададим путь в профайле
-var pflExtFilesOpenOnStart  = "ExtFiles/OpenOnStart"
-var pflExtShowExtInName     = "ExtFiles/ShowExtInName"
-var pflExtFilesPath         = "ExtFiles/Path"
-var pflExtFilesPathBase     = "ExtFiles/PathBase"
-var pflExtOpen1CExtensions  = "ExtFiles/Open1CExtensions"
-
-// Восстановим настройки
-profileRoot.createValue(pflExtFilesOpenOnStart, false, pflSnegopat)
-profileRoot.createValue(pflExtShowExtInName, true, pflSnegopat)
-profileRoot.createValue(pflExtFilesPath, false, pflSnegopat)
-profileRoot.createValue(pflExtFilesPathBase, false, pflBase)
-profileRoot.createValue(pflExtOpen1CExtensions, СформироватьТзРасширенияФайловПоУмолчанию(), pflSnegopat)
-
-
-var мОткрыватьПриСтарте = profileRoot.getValue(pflExtFilesOpenOnStart)
-var мОтображатьРасширениеФайлаВПредставлении = profileRoot.getValue(pflExtShowExtInName)
-var мТзКаталогиОбщие = profileRoot.getValue(pflExtFilesPath)
-var мТзКаталогиБазы = profileRoot.getValue(pflExtFilesPathBase)
-var мТзРасширенияФайлов = profileRoot.getValue(pflExtOpen1CExtensions);
-var RE_EXTENSIONS = null;
-
-global.connectGlobals(SelfScript)
-
-function ТзКаталоговИнициализировать(пТзКаталоги)
-{
+var мВерсияСкрипта = 1.40
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ Макросы
+////
+
+// Макрос для вызова окна
+function macrosОткрытьОкноВнешнихФайлов() {
+
+    var pathToForm = SelfScript.fullPath.replace(/js$/, 'ssf')
+    if(!мФормаСкрипта){
+        мФормаСкрипта = loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
+        мФормаСкрипта.Заголовок="Внешние файлы" //+мВерсияСкрипта        
+        КэшКартинокТиповФайлов = ПолучитьКэшКартинокТиповФайлов(мФормаСкрипта);
+    }
+    мФормаСкрипта.Открыть()
+}
+
+function macrosСвернутьДеревоВнешнихФайлов() {
+
+    if(мАктивноДеревоВнешнихФайлов()==false) return false
+    
+    if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернут(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)==false)
+    {
+        if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель != undefined)
+            мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель
+    }
+    else
+        мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Свернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
+}
+
+function macrosРазвернутьДеревоВнешнихФайлов() {
+
+    if(мАктивноДеревоВнешнихФайлов()==false) return false
+    мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
+}
+
+////} Макросы
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ ФормаСкрипта - обработчики событий.
+////
+
+function КпШапкаОбновить(Элемент) {
+    мОбновитьФайлы()
+}
+
+function КпШапкаОбновитьТекущуюВетку(Элемент) {
+    мОбновитьФайлыТекущейВетки()
+}
+
+function ФильтрПриИзменении(Элемент) {
+    мОбновитьФайлы()
+}
+
+function ПриОткрытии() {
+    мОбновитьФайлы()
+}
+
+function КпШапкаЗакрыть(Элемент) {
+    мФормаСкрипта.Закрыть()
+}
+
+function мАктивноДеревоВнешнихФайлов() {
+    if(мФормаСкрипта==null) return false
+    if(мФормаСкрипта.ВводДоступен()!=true) return false
+    return мФормаСкрипта.ТекущийЭлемент==мФормаСкрипта.ЭлементыФормы.ДеревоФайлов
+}
+
+function КпШапкаРазвернуть(Элемент) {
+    macrosРазвернутьДеревоВнешнихФайлов();
+}
+
+function КпШапкаСправка(Кнопка) {
+    RunApp('http://snegopat.ru/scripts/wiki?name=extfiles.js');
+}
+
+function КпШапкаСвернуть(Элемент) {
+    macrosСвернутьДеревоВнешнихФайлов()
+}
+
+function ДеревоФайловПередНачаломИзменения(пЭлемент, пОтказ) {
+
+    пОтказ.val = true
+    лТекСтрока=пЭлемент.val.ТекущаяСтрока
+    if(лТекСтрока.ЭтоКаталог) return
+    
+    if (МожноОткрытьФайлВКонфигураторе(лТекСтрока.ИмяФайла))
+        stdlib.openFileIn1C(лТекСтрока.ИмяФайла)
+    else 
+        ЗапуститьПриложение(лТекСтрока.ИмяФайла);
+}
+
+function ДеревоФайловПриВыводеСтроки(пЭлемент, пОформлениеСтроки, пДанныеСтроки) {
+
+    лЯчейкаИмя=пОформлениеСтроки.val.Ячейки.Имя
+    лЯчейкаИмя.ОтображатьКартинку=true
+    if(ValueIsFilled(пДанныеСтроки.val.Родитель)==false)
+    {
+        лЯчейкаИмя.Картинка = мФормаСкрипта.ЭлементыФормы.КартинкаПапка.Картинка;
+    }
+    else if(пДанныеСтроки.val.ЭтоКаталог==true)
+    {
+        лЯчейкаИмя.Картинка = мФормаСкрипта.ЭлементыФормы.КартинкаПапка.Картинка;
+    }
+    else
+    {
+        var КартинкаПоРасширению = ПолучитьКартинкуПоРасширению(пДанныеСтроки.val.Тип);
+        лЯчейкаИмя.Картинка = КартинкаПоРасширению ? КартинкаПоРасширению : БиблиотекаКартинок.Форма;
+    }
+        
+}
+
+function КонтекстноеМенюОткрытьПроводник (Кнопка) {
+    var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
+    if (ТекущаяСтрока) 
+    {
+        var СтрокаЗапуска = 'explorer.exe "' + ПолучитьКаталогСтрокиДерева(ТекущаяСтрока) + '"';
+        ЗапуститьПриложение(СтрокаЗапуска);
+    }
+}
+
+function КонтекстноеМенюОткрытьКонсоль (Кнопка) {
+    var ТекущаяСтрока = мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущиеДанные;
+    if (ТекущаяСтрока) 
+    {
+        var Каталог = ПолучитьКаталогСтрокиДерева(ТекущаяСтрока);
+        var СтрокаЗапуска = ПолучитьКомандуЗапускаКонсоли(Каталог);
+        ЗапуститьПриложение(СтрокаЗапуска, Каталог);
+    }
+}
+
+////
+////} ФормаСкрипта - обработчики событий.
+////////////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ Вспомогательные процедуры и функции.
+////
+
+function ТзКаталоговИнициализировать(пТзКаталоги) {
+
     try{
         пТзКаталоги = ValueFromStringInternal(пТзКаталоги)
     }
     catch(e){
         пТзКаталоги = v8New("ТаблицаЗначений")
@@ -68,111 +175,12 @@
     catch(e){
     }
     return пТзКаталоги
 }
 
-мТзКаталогиОбщие = ТзКаталоговИнициализировать(мТзКаталогиОбщие)
-мТзКаталогиБазы = ТзКаталоговИнициализировать(мТзКаталогиБазы)
+function GetAbsolutePathName(pathToFile) {
 
-мФормаСкрипта=null
-мФормаНастройки=null
-
-if(мОткрыватьПриСтарте==true)
-    macrosОткрытьОкноВнешнихФайлов()
-
-// Макрос для вызова окна
-function macrosОткрытьОкноВнешнихФайлов()
-{
-    var pathToForm = SelfScript.fullPath.replace(/js$/, 'ssf')
-    if(!мФормаСкрипта){
-        мФормаСкрипта = loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
-        мФормаСкрипта.Заголовок="Внешние файлы" //+мВерсияСкрипта
-    }
-    мФормаСкрипта.Открыть()
-}
-
-function КпШапкаНастройки(Элемент)
-{
-    var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf')
-    мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
-    мФормаНастройки.ЭлементыФормы.НадписьВерсия.Заголовок="Версия скрипта:"+мВерсияСкрипта
-    мФормаНастройки.ОткрытьМодально()
-}
-
-function мЗаписатьНастройки()
-{
-    мТзКаталогиОбщие=мФормаНастройки.КаталогиОбщие
-    мТзКаталогиБазы=мФормаНастройки.КаталогиБазы
-    мОткрыватьПриСтарте=мФормаНастройки.ОткрыватьФормуПриЗагрузке
-    мТзРасширенияФайлов = мФормаНастройки.РасширенияФайлов.Скопировать();
-    RE_EXTENSIONS = null; // Регулярку надо переформировать.
-    
-    profileRoot.setValue(pflExtFilesOpenOnStart, мОткрыватьПриСтарте)
-    profileRoot.setValue(pflExtShowExtInName, мОтображатьРасширениеФайлаВПредставлении)
-    profileRoot.setValue(pflExtFilesOpenOnStart, мОткрыватьПриСтарте)
-    profileRoot.setValue(pflExtFilesPath, ValueToStringInternal(мТзКаталогиОбщие))
-    profileRoot.setValue(pflExtFilesPathBase, ValueToStringInternal(мТзКаталогиБазы))
-    profileRoot.setValue(pflExtOpen1CExtensions, мТзРасширенияФайлов)
-    
-    мОбновитьФайлы()
-}
-
-function мЗагрузитьНастройку(пТзКаталоги, пТаблицаКаталогов)
-{
-    for (var лИнд=0; лИнд<пТзКаталоги.Количество(); лИнд++)
-    {
-        лСтрокаТз=пТаблицаКаталогов.Добавить()
-        лСтрокаТз.ИмяКаталога=пТзКаталоги.Получить(лИнд).ИмяКаталога
-        лСтрокаТз.Развернуть=пТзКаталоги.Получить(лИнд).Развернуть
-    }
-}
-
-function НастройкиПриОткрытии()
-{
-    мФормаНастройки.ОткрыватьФормуПриЗагрузке=мОткрыватьПриСтарте
-    мФормаНастройки.ОтображатьРасширениеФайлаВПредставлении=мОтображатьРасширениеФайлаВПредставлении
-    мЗагрузитьНастройку(мТзКаталогиОбщие, мФормаНастройки.КаталогиОбщие);
-    мЗагрузитьНастройку(мТзКаталогиБазы, мФормаНастройки.КаталогиБазы);
-    мФормаНастройки.РасширенияФайлов = мТзРасширенияФайлов;
-}
-
-function КпШапкаЗаписатьИЗакрыть(Кнопка)
-{
-    мЗаписатьНастройки()
-    мФормаНастройки.Закрыть()
-}
-
-function КпШапкаЗаписать(Кнопка)
-{
-    мЗаписатьНастройки()
-}
-
-function мВыбратьКаталог()
-{
-    ДиалогОткрытияФайла=v8New("ДиалогВыбораФайла", РежимДиалогаВыбораФайла.ВыборКаталога)
-    ДиалогОткрытияФайла.ПолноеИмяФайла = ""
-    ДиалогОткрытияФайла.Заголовок = "Выберите каталог"
-    if(ДиалогОткрытияФайла.Выбрать()==false) return ""
-    return ДиалогОткрытияФайла.Каталог
-}
-
-function КаталогиОбщиеИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка)
-{
-    лКаталог=мВыбратьКаталог()
-    if(лКаталог=="") return
-    Элемент.val.Значение=лКаталог
-}
-
-function КаталогиБазыИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка)
-{
-    лКаталог=мВыбратьКаталог()
-    if(лКаталог=="") return
-    Элемент.val.Значение=лКаталог
-}
-
-function GetAbsolutePathName(pathToFile)
-{
     if (pathToFile.length == 0) return pathToFile
     //код взят из python для определеня abspath
     debugger; 
     backslash = "\\"
     if (pathToFile.substr(0,4)=='\\\\.\\' ||  pathToFile.substr(0,4)=='\\\\?\\') return pathToFile
@@ -253,12 +261,12 @@
     if (path.substr(path.length-1,1) != "\\" && b.substr(0,1) == "\\") {
         return path+b;
     }
 }
 
-function мДобавитьФайлы(пПуть, пУзел)
-{
+function мДобавитьФайлы(пПуть, пУзел) {
+
     var лФайлы=FindFiles(пПуть, '*.*', false)
     for (var лИнд=0; лИнд<лФайлы.Количество(); лИнд++)
     {
         лФайл=лФайлы.Получить(лИнд)
         
@@ -283,12 +291,12 @@
         else
             лСтрокаДереваФайлов.Тип=лФайл.Расширение.substr(1)
     }
 }
 
-function ДобавитьКаталоги(пТзКаталоги)
-{
+function ДобавитьКаталоги(пТзКаталоги) {
+
     var mainFolder = profileRoot.getValue("Snegopat/MainFolder")
     try {
         var fso = new ActiveXObject ("Scripting.FileSystemObject")
     }
     catch (er) {
@@ -323,12 +331,11 @@
         лСтрокаДереваФайлов.Строки.Сортировать("ЭтоКаталог Убыв, Имя", true)
     }
     мФормаСкрипта.ДеревоФайлов.Строки.Сортировать("ЭтоКаталог Убыв, Имя", true)
 }
 
-function мОбновитьФайлы()
-{
+function мОбновитьФайлы() {
     лТекСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока
     
     // Запомним текущую строку
     лИмяФайлаТекСтроки=""
     if(лТекСтрока!=undefined) лИмяФайлаТекСтроки=лТекСтрока.ИмяФайла
@@ -350,12 +357,12 @@
         if(лСтрокаНайденная != undefined)
             мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=лСтрокаНайденная
     }
 }
 
-function мОбновитьФайлыТекущейВетки()
-{
+function мОбновитьФайлыТекущейВетки() {
+
     лТекСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока
     if(лТекСтрока==undefined) return
     
     // Запомним текущую строку
     лИмяФайлаТекСтроки=лТекСтрока.ИмяФайла
@@ -369,102 +376,21 @@
     лСтрокаНайденная=мФормаСкрипта.ДеревоФайлов.Строки.Найти(лИмяФайлаТекСтроки, "ИмяФайла", true)
     if(лСтрокаНайденная != undefined)
         мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=лСтрокаНайденная
 }
 
-function КпШапкаОбновить(Элемент)
-{
-    мОбновитьФайлы()
-}
-
-function КпШапкаОбновитьТекущуюВетку(Элемент)
-{
-    мОбновитьФайлыТекущейВетки()
-}
-
-function ФильтрПриИзменении(Элемент)
-{
-    мОбновитьФайлы()
-}
-
-function ПриОткрытии()
-{
-    мОбновитьФайлы()
-}
-
-function КпШапкаЗакрыть(Элемент)
-{
-    мФормаСкрипта.Закрыть()
-}
-
-function мАктивноДеревоВнешнихФайлов()
-{
-    if(мФормаСкрипта==null) return false
-    if(мФормаСкрипта.ВводДоступен()!=true) return false
-    return мФормаСкрипта.ТекущийЭлемент==мФормаСкрипта.ЭлементыФормы.ДеревоФайлов
-}
-
-function macrosСвернутьДеревоВнешнихФайлов()
-{
-    if(мАктивноДеревоВнешнихФайлов()==false) return false
-    
-    if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернут(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)==false)
-    {
-        if(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель != undefined)
-            мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока=мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока.Родитель
-    }
-    else
-        мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Свернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
-}
-
-function macrosРазвернутьДеревоВнешнихФайлов()
-{
-    if(мАктивноДеревоВнешнихФайлов()==false) return false
-    мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.Развернуть(мФормаСкрипта.ЭлементыФормы.ДеревоФайлов.ТекущаяСтрока)
-}
-
-function КпШапкаРазвернуть(Элемент)
-{
-    macrosРазвернутьДеревоВнешнихФайлов();
-}
-
-function КпШапкаСправка(Кнопка)
-{
-    RunApp('http://snegopat.ru/scripts/wiki?name=extfiles.js');
-}
-
-function КпШапкаСвернуть(Элемент)
-{
-    macrosСвернутьДеревоВнешнихФайлов()
-}
-
-function ДеревоФайловПередНачаломИзменения(пЭлемент, пОтказ)
-{
-    пОтказ.val = true
-    лТекСтрока=пЭлемент.val.ТекущаяСтрока
-    if(лТекСтрока.ЭтоКаталог) return
-    
-    if (МожноОткрытьФайлВКонфигураторе(лТекСтрока.ИмяФайла))
-        stdlib.openFileIn1C(лТекСтрока.ИмяФайла)
-    else 
-        ЗапуститьПриложение(лТекСтрока.ИмяФайла);
-}
-
-function ДеревоФайловПриВыводеСтроки(пЭлемент, пОформлениеСтроки, пДанныеСтроки)
-{
-    лЯчейкаИмя=пОформлениеСтроки.val.Ячейки.Имя
-    лЯчейкаИмя.ОтображатьКартинку=true
-    if(ValueIsFilled(пДанныеСтроки.val.Родитель)==false)
-        лЯчейкаИмя.Картинка=БиблиотекаКартинок.СоздатьГруппу
-    else if(пДанныеСтроки.val.ЭтоКаталог==true)
-        лЯчейкаИмя.Картинка=БиблиотекаКартинок.ОткрытьФайл
-    else
-        лЯчейкаИмя.Картинка=БиблиотекаКартинок.Форма
-}
-
-function СформироватьТзРасширенияФайловПоУмолчанию() 
-{
+function ПолучитьКаталогСтрокиДерева(СтрокаДерева) {
+    var Файл = v8New('Файл', СтрокаДерева.ИмяФайла);
+    return Файл.ЭтоФайл() ? Файл.Путь : Файл.ПолноеИмя;
+}
+
+function ПолучитьКомандуЗапускаКонсоли(Каталог) {
+    return мКомандаЗапускаКонсоли.replace(/%1/, Каталог);
+}
+
+function СформироватьТзРасширенияФайловПоУмолчанию() {
+
     var ТЗ = v8New("ТаблицаЗначений");
     ТЗ.Колонки.Добавить("Расширение");
 
     function Расш(расширение) { ТЗ.Добавить().Расширение = расширение; }
     
@@ -478,19 +404,215 @@
     Расш("ssf"); Расш("js"); Расш("vbs");
     
     return ТЗ;
 }
 
-function МожноОткрытьФайлВКонфигураторе(ИмяФайла) 
-{
+function МожноОткрытьФайлВКонфигураторе(ИмяФайла)  {
     if (!RE_EXTENSIONS) 
     {
         var ext = new Array();
         for (var i=0; i<мТзРасширенияФайлов.Количество(); i++)
             ext.push(мТзРасширенияФайлов.Get(i).Расширение);
             
-        RE_EXTENSIONS = new RegExp('\.(?:' + ext.join('|') + ' )$', 'i');
+        RE_EXTENSIONS = new RegExp('\.(?:' + ext.join('|') + ')$', 'i');
     }
     
     return RE_EXTENSIONS.test(ИмяФайла);
 }
+
+function ПолучитьКэшКартинокТиповФайлов(ФормаСкрипта) {
+    var ЭФ = ФормаСкрипта.ЭлементыФормы;  
+    var cache = {};
+  
+    function add(estr, pic) {
+        var exts = estr.split('|');
+        for (var i=0; i<exts.length; i++)
+            cache[exts[i].toLowerCase()] = pic; 
+    }
+  
+    add('doc|docx|dot|odf', ЭФ.КартинкаТипФайлаDoc.Картинка);
+    add('xls|xlsx|csv', ЭФ.КартинкаТипФайлаXls.Картинка);
+    
+    add('pps|ppsx', ЭФ.КартинкаТипФайлаPps.Картинка);
+    add('pdf|ps', ЭФ.КартинкаТипФайлаPdf.Картинка);
+        
+    add('png|jpg|jpeg|bmp|tif|dib|ico', ЭФ.КартинкаТипФайлаPng.Картинка);
+
+    add('xml', ЭФ.КартинкаТипФайлаXml.Картинка);
+    add('zip', ЭФ.КартинкаТипФайлаZip.Картинка);
+    add('rar', ЭФ.КартинкаТипФайлаRar.Картинка);
+    
+    add('exe|cmd|bat', ЭФ.КартинкаТипФайлаExe.Картинка);
+
+    add('txt', ЭФ.КартинкаТипФайлаTxt.Картинка);    
+    add('geo', ЭФ.КартинкаТипФайлаGeo.Картинка);
+    add('grs', ЭФ.КартинкаТипФайлаGrs.Картинка);
+    add('erf', ЭФ.КартинкаТипФайлаErf.Картинка);
+    add('epf', ЭФ.КартинкаТипФайлаEpf.Картинка);
+    add('mxl', ЭФ.КартинкаТипФайлаMxl.Картинка);
+    
+    add('ssf', ЭФ.КартинкаТипФайлаSsf.Картинка);
+    add('js', ЭФ.КартинкаТипФайлаTxt.Картинка);
+    add('vbs', ЭФ.КартинкаТипФайлаTxt.Картинка);
+    
+    add('unknown', ЭФ.КартинкаТипФайлаUnknown.Картинка);
+
+    return cache;
+
+}
+
+function ПолучитьКартинкуПоРасширению(Расширение) {
+
+    if (КэшКартинокТиповФайлов) {
+        var pic = КэшКартинокТиповФайлов[Расширение.toLowerCase()];
+        return pic ? pic : КэшКартинокТиповФайлов['unknown'];
+    }    
+    return null;
+}
+
+////
+////} Вспомогательные процедуры и функции.
+////////////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ ФормаНастройки - обработчики событий.
+////
+
+function КпШапкаНастройки(Элемент) {
+    var pathToForm=SelfScript.fullPath.replace(/.js$/, 'param.ssf')
+    мФормаНастройки=loadScriptForm(pathToForm, SelfScript.self) // Обработку событий формы привяжем к самому скрипту
+    мФормаНастройки.ЭлементыФормы.НадписьВерсия.Заголовок="Версия скрипта:"+мВерсияСкрипта
+    мФормаНастройки.ОткрытьМодально()
+}
+
+function мЗаписатьНастройки() {
+
+    мТзКаталогиОбщие=мФормаНастройки.КаталогиОбщие
+    мТзКаталогиБазы=мФормаНастройки.КаталогиБазы
+    мОткрыватьПриСтарте=мФормаНастройки.ОткрыватьФормуПриЗагрузке
+    мТзРасширенияФайлов = мФормаНастройки.РасширенияФайлов.Скопировать();
+    мКомандаЗапускаКонсоли = мФормаНастройки.КомандаЗапускаКонсоли;
+    RE_EXTENSIONS = null; // Регулярку надо переформировать.
+    
+    profileRoot.setValue(pflExtFilesOpenOnStart, мОткрыватьПриСтарте)
+    profileRoot.setValue(pflExtShowExtInName, мОтображатьРасширениеФайлаВПредставлении)
+    profileRoot.setValue(pflExtFilesOpenOnStart, мОткрыватьПриСтарте)
+    profileRoot.setValue(pflExtFilesPath, ValueToStringInternal(мТзКаталогиОбщие))
+    profileRoot.setValue(pflExtFilesPathBase, ValueToStringInternal(мТзКаталогиБазы))
+    profileRoot.setValue(pflExtOpen1CExtensions, мТзРасширенияФайлов)
+    profileRoot.setValue(pflExtRunConsoleCommand, мКомандаЗапускаКонсоли)
+    
+    мОбновитьФайлы()
+}
+
+function мЗагрузитьНастройку(пТзКаталоги, пТаблицаКаталогов) {
+
+    for (var лИнд=0; лИнд<пТзКаталоги.Количество(); лИнд++)
+    {
+        лСтрокаТз=пТаблицаКаталогов.Добавить()
+        лСтрокаТз.ИмяКаталога=пТзКаталоги.Получить(лИнд).ИмяКаталога
+        лСтрокаТз.Развернуть=пТзКаталоги.Получить(лИнд).Развернуть
+    }
+}
+
+function НастройкиПриОткрытии() {
+    мФормаНастройки.ОткрыватьФормуПриЗагрузке=мОткрыватьПриСтарте
+    мФормаНастройки.ОтображатьРасширениеФайлаВПредставлении=мОтображатьРасширениеФайлаВПредставлении
+    мЗагрузитьНастройку(мТзКаталогиОбщие, мФормаНастройки.КаталогиОбщие);
+    мЗагрузитьНастройку(мТзКаталогиБазы, мФормаНастройки.КаталогиБазы);
+    мФормаНастройки.РасширенияФайлов = мТзРасширенияФайлов;
+    мФормаНастройки.КомандаЗапускаКонсоли = мКомандаЗапускаКонсоли;
+}
+
+function КпШапкаЗаписатьИЗакрыть(Кнопка) {
+    мЗаписатьНастройки()
+    мФормаНастройки.Закрыть()
+}
+
+function КпШапкаЗаписать(Кнопка) {
+    мЗаписатьНастройки()
+}
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'ОткрытьОкноВнешнихФайлов';
+}
+
+function мВыбратьКаталог() {
+    ДиалогОткрытияФайла=v8New("ДиалогВыбораФайла", РежимДиалогаВыбораФайла.ВыборКаталога)
+    ДиалогОткрытияФайла.ПолноеИмяФайла = ""
+    ДиалогОткрытияФайла.Заголовок = "Выберите каталог"
+    if(ДиалогОткрытияФайла.Выбрать()==false) return ""
+    return ДиалогОткрытияФайла.Каталог
+}
+
+function КаталогиОбщиеИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка) {
+    лКаталог=мВыбратьКаталог()
+    if(лКаталог=="") return
+    Элемент.val.Значение=лКаталог
+}
+
+function КаталогиБазыИмяКаталогаНачалоВыбора(Элемент, СтандартнаяОбработка) {
+    лКаталог=мВыбратьКаталог()
+    if(лКаталог=="") return
+    Элемент.val.Значение=лКаталог
+}
+
+function НадписьCmdExeНажатие (Элемент) {
+	мФормаНастройки.КомандаЗапускаКонсоли = Элемент.val.Заголовок;
+}
+
+function НадписьFarExeНажатие (Элемент) {
+	мФормаНастройки.КомандаЗапускаКонсоли = Элемент.val.Заголовок;
+}
+
+////
+////} ФормаНастройки - обработчики событий.
+////////////////////////////////////////////////////////////////////////////////////////
+
+////////////////////////////////////////////////////////////////////////////////////////
+////{ Инициализация скрипта
+////
+
+// Зададим путь в профайле
+var pflExtFilesOpenOnStart  = "ExtFiles/OpenOnStart"
+var pflExtShowExtInName     = "ExtFiles/ShowExtInName"
+var pflExtFilesPath         = "ExtFiles/Path"
+var pflExtFilesPathBase     = "ExtFiles/PathBase"
+var pflExtOpen1CExtensions  = "ExtFiles/Open1CExtensions"
+var pflExtRunConsoleCommand = "ExtFiles/RunConsoleCommand"
+
+// Восстановим настройки
+profileRoot.createValue(pflExtFilesOpenOnStart, false, pflSnegopat)
+profileRoot.createValue(pflExtShowExtInName, true, pflSnegopat)
+profileRoot.createValue(pflExtFilesPath, false, pflSnegopat)
+profileRoot.createValue(pflExtFilesPathBase, false, pflBase)
+profileRoot.createValue(pflExtOpen1CExtensions, СформироватьТзРасширенияФайловПоУмолчанию(), pflSnegopat)
+profileRoot.createValue(pflExtRunConsoleCommand, 'cmd.exe /K cd /D "%1"', pflSnegopat)
+
+
+var мОткрыватьПриСтарте = profileRoot.getValue(pflExtFilesOpenOnStart)
+var мОтображатьРасширениеФайлаВПредставлении = profileRoot.getValue(pflExtShowExtInName)
+var мТзКаталогиОбщие = profileRoot.getValue(pflExtFilesPath)
+var мТзКаталогиБазы = profileRoot.getValue(pflExtFilesPathBase)
+var мТзРасширенияФайлов = profileRoot.getValue(pflExtOpen1CExtensions);
+var мКомандаЗапускаКонсоли = profileRoot.getValue(pflExtRunConsoleCommand);
+
+var RE_EXTENSIONS = null;
+
+var КэшКартинокТиповФайлов = {};
+
+global.connectGlobals(SelfScript)
+
+мТзКаталогиОбщие = ТзКаталоговИнициализировать(мТзКаталогиОбщие)
+мТзКаталогиБазы = ТзКаталоговИнициализировать(мТзКаталогиБазы)
+
+мФормаСкрипта=null
+мФормаНастройки=null
+
+if(мОткрыватьПриСтарте==true)
+    macrosОткрытьОкноВнешнихФайлов()
+
+////} Инициализация скрипта
+
 

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

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

Index: mdNavigator.js
==================================================================
--- mdNavigator.js
+++ mdNavigator.js
@@ -369,6 +369,12 @@
 }
 // Двойной щелчок по таблице
 function ТаблицаМетаданныхВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
 {
     doAction(function(mdObj){mdObj.activateInTree()})
+}
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros()
+{
+    return 'Открыть объект метаданных';
 }

Index: query_colors.js
==================================================================
--- query_colors.js
+++ query_colors.js
@@ -16,10 +16,16 @@
 {
     form = loadScriptForm(SelfScript.fullPath.replace(/js$/i, 'ssf'), SelfScript.self)
     form.ОткрытьМодально()
     form = null
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'ОткрытьОкно';
+}
 
 function ПриОткрытии()
 {
     var qec = profileRoot.getFolder("SelectColorCategory")
     for(var i = 0, c = qec.valuesCount; i < c; i++)

Index: snippets.js
==================================================================
--- snippets.js
+++ snippets.js
@@ -53,10 +53,16 @@
     
     var selParam = sm.selectValue(params);
     if (selParam)
         w.SetSelectedText('<%' + selParam + '>');    
 }
+
+/* Возвращает название макроса по умолчанию - вызывается, когда пользователь 
+дважды щелкает мышью по названию скрипта в окне Снегопата. */
+function getDefaultMacros() {
+    return 'ОткрытьНастройкиСкрипта';
+}
 
 ////} Макросы
 
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ SnippetsManager
@@ -64,11 +70,11 @@
 
 function SnippetsManager() {
 
     SnippetsManager._instance = this;
 
-    this.settings = SettingsManagement.CreateManager(SelfScript.uniqueName, {'TemplateFilesList':v8New('ValueList')});
+    this.settings = SettingsManagement.CreateManager(SelfScript.uniqueName, {'TemplateFilesList':getDefaultTemplatesList()});
     this.settings.LoadSettings();    
     
     this._snippets = {};
     this._snippetNames = new Array();
     
@@ -546,27 +552,32 @@
 
 SettingsManagerDialog.prototype.CmdBarAbout = function (button) {
     RunApp('http://snegopat.ru/scripts/wiki?name=snippets.js');
 }
 
-SettingsManagerDialog.prototype.CmdBarStListAddStFile = function (button) {
-    
+SettingsManagerDialog.prototype.selectTemplateFiles = function (multiselect) {
+
     var dlg = v8New('FileDialog',  FileDialogMode.Open);
-    dlg.Multiselect = true;
+    dlg.Multiselect = multiselect ? true : false;
     dlg.CheckFileExist = true;
     dlg.Filter = "Файлы шаблонов (*.st)|*.st|Все файлы|*";
     
     if (dlg.Choose())
+        return multiselect ? dlg.SelectedFiles : dlg.FullFileName;
+        
+    return null;
+}
+
+SettingsManagerDialog.prototype.CmdBarStListAddStFile = function (button) {
+
+    var selected = this.selectTemplateFiles(true);    
+    if (selected)
     {
         this.form.Modified = true;
         
-        for(var  i=0; i<dlg.SelectedFiles.Count(); i++)
-        {   
-            var path = dlg.SelectedFiles.Get(i);
-            if (!this.form.TemplateFilesList.FindByValue(path))
-                this.form.TemplateFilesList.Add(path);
-        }
+        for (var i=0; i<selected.Count(); i++)
+            this.form.TemplateFilesList.Add().Value = selected.Get(i);
     }
 }
 
 SettingsManagerDialog.prototype.CmdBarStListDeleteStFile = function (button) {
     var curRow = this.form.Controls.TemplateFilesList.CurrentRow;
@@ -574,10 +585,22 @@
     {
         this.form.TemplateFilesList.Delete(curRow);
         this.form.Modified = true;        
     }
 }
+
+SettingsManagerDialog.prototype.TemplateFilesListValueStartChoice = function (Control, DefaultHandler) {
+
+    DefaultHandler.val = false;
+
+    var fname = this.selectTemplateFiles(false);    
+    if (fname)
+    {
+        this.form.Modified = true;
+        Control.val.Value = fname;
+    }    
+}
 
 SettingsManagerDialog.prototype.OnOpen = function() {
 }
 
 SettingsManagerDialog.prototype.BeforeClose = function(Cancel, StandardHandler) {
@@ -601,18 +624,52 @@
     Cancel.val = false;
 }
 
 ////} SettingsManagerDialog 
 
+////{ Вспомогательные функции для работы с настройками. 
+function getDefaultTemplatesList() {
+    var tplList = v8New('ValueTable');
+    tplList.Columns.Add('Value');
+    return tplList;
+}
+
+function __convertSettingsFromValueListToValueTable() {
+ 
+    /* Изначально настройки хранились в СпискеЗначений. 
+    Возникла необходимость переделать на ТаблицуЗначений.
+    Данная процедура выполняет конвертацию. */
+    
+    var pflSnippets = SelfScript.uniqueName + '/TemplateFilesList';
+    var defaultTplList = getDefaultTemplatesList();
+    
+    profileRoot.createValue(SelfScript.name, defaultTplList, pflSnegopat);    
+    var tplList = profileRoot.getValue(pflSnippets);
+    
+    if (toV8Value(tplList).typeName() == 'ValueList')
+    {
+        for(var i=0; i<tplList.Count(); i++)
+            defaultTplList.Add().Value = tplList.Get(i).Value; 
+    }
+    
+    profileRoot.setValue(pflSnippets, defaultTplList);
+
+}
+////} Вспомогательные функции для работы с настройками. 
+
 ////////////////////////////////////////////////////////////////////////////////////////
 ////{ Startup
 ////
 function GetSnippetsManager() {
     if (!SnippetsManager._instance)
         new SnippetsManager();
         
     return SnippetsManager._instance;
 }
+
+//{ Конвертация значения настройки TemplateFilesList из списка значений в таблицу значений.
+__convertSettingsFromValueListToValueTable();
+//}
 
 events.connect(snegopat, "onProcessTemplate", GetSnippetsManager());
 
 ////} Startup 

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