$engine JScript
$uname std-templates
$dname Авто-подключение шаблонов
$addin global
$addin stdcommands
/* (c) Александр Орефков
* Скрипт предназначен для людей "в поле", часто работающих за чужим компом.
* При запуске автоматически подключает файлы шаблонов, расположенные в каталоге скрипта,
* а также в КаталогСнегопата\templates\
* Разделение по двум каталогам из-за того, что в этом каталоге лежат "общие", публичные
* шаблоны, под версионным контролем общего репозитария скриптов, а в КаталогСнегопата\templates\
* можно разместить свои личные шаблоны.
*/
global.connectGlobals(SelfScript)
var profilePath = "TxtEdt/AutoPlacementFilesRU1"
function updateTemplates()
{
var templates = getCurrentTemplates()
processTemplateFolder(templates, profileRoot.getValue("Snegopat/MainFolder") + "templates\\")
processTemplateFolder(templates, SelfScript.fullPath.replace(/\\[^\\]+$/, '\\'))
if(templates.needUpdate)
{
// Сформируем строку для записи в настройки
var str = '{' + templates.files.length + ',\n'
for(var k in templates.files)
str += '{"' + templates.files[k] + '",0}' + (k == templates.files.length - 1 ? '' : ',') + '\n'
str += '}'
profileRoot.setValue(profilePath, str)
// Теперь надо сделать, чтобы настройки применились.
// Для этого надо открыть настройки шаблонов (при этом диалог считает новое значение из настроек)
// и нажать в нем Ок после открытия.
var v = findTemplatesView()
events.connect(windows, "onDoModal", SelfScript.self)
stdcommands.TextEdit.ConfigTemplateFiles.sendToView(v.view)
if(v.wasOpened)
v.view.close()
events.disconnect(windows, "onDoModal", SelfScript.self)
Message("Подключены шаблоны", mInfo)
if(v.prevView)
v.prevView.activate()
}
}
function getCurrentTemplates()
{
var result = {files: [], keys: {}, needUpdate: false}
// Прочитаем список файлов из настроек
var currentTemplatesInProfile = profileRoot.getValue(profilePath)
var re = /\{"(.*)",0\}/g
while(re.exec(currentTemplatesInProfile))
{
result.files.push(RegExp.$1)
result.keys[RegExp.$1.toLowerCase()] = 1
}
return result
}
function processTemplateFolder(templates, path)
{
for(var filesArray = new Enumerator(НайтиФайлы(path, "*.st", true)); !filesArray.atEnd(); filesArray.moveNext())
{
var file = filesArray.item();
var fn = "file://" + file.ПолноеИмя.toLowerCase().replace(/\\/g, '/')
if(!file.ЭтоКаталог() && !templates.keys.hasOwnProperty(fn))
{
templates.files.push(fn)
templates.keys[fn] = 1
templates.needUpdate = true
}
}
}
function findTemplatesView()
{
var result = {view: null, wasOpened: false, prevView: windows.getActiveView()}
function forall(view)
{
//if(view.title == "Шаблоны текста")
if(stdcommands.TextEdit.ConfigTemplateFiles.getState(view))
return view
var childs = view.enumChilds()
for(var i = 0; i < childs.count; i++)
{
var found = forall(childs.item(i))
if(found)
return found
}
return null
}
result.view = forall(windows.mainView)
if(!result.view)
{
stdcommands.TextEdit.Templates.send()
result.view = windows.getFocusedView()
result.wasOpened = true
}
return result
}
function onDoModal(dlgInfo)
{
if(dlgInfo.stage == openModalWnd && dlgInfo.caption == "Настройка шаблонов")
new ActiveXObject("WScript.Shell").SendKeys('~')
}
function macrosОбновитьСписокШаблонов()
{
updateTemplates()
}
updateTemplates()