Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » Total Commander (Часть 8)

Модерирует : gyra, Maz

articlebot (20-03-2016 21:01): Обсуждение продолжается в части 9  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

VSHY

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
// em_configChangeIniFiles.js
// Открытие файлов настройки Total Commander в указанном в параметрах запуска скрипта редакторе либо заданным в диалоге ТС "Настройка: Правка по F4"
//  
// Модификация скрипта:
//     Version: 2.0 (2014.11.17)
//     Автор: VladSh <vladsh на fromru тчк com>
//     http://forum.ru-board.com/topic.cgi?forum=5&topic=45288&start=3680#17
//  
// Оригинальный скрипт:
//     Version: 1.1
//     Автор: mozers™ <mozers@mail.ru>
//     http://forum.wincmd.ru/viewpost.php?p=61155&sid=d8cd4c2148e75a549bd0b776d864758a
// ============================================================
//  
// Параметры запуска задаются в usercmd.ini в секции с именем настроящего скрипта:
//     • editors - возможные пути к файлам текстовых редакторов через ; или ,
//     • files - перечень открываемых файлов, указанных через ; или ,
//         Поддерживаемый в настоящее время перечень см. в значениях констант ниже.
 
// Константы для определения путей и открытия файлов
var file_wincmd_ini = 'wincmd.ini';
var file_usercmd_ini = 'usercmd.ini';
var file_wcx_ftp_ini = 'wcx_ftp.ini';
var file_ftp_ini = 'ftp.ini';
var file_wincmd_mnu = 'wincmd.mnu';
 
// Инициализируем нужные нам ActiveX объекты
try {
    var WshShell = new ActiveXObject('WScript.Shell');
    var fso = new ActiveXObject('Scripting.FileSystemObject');
} catch(e) {
    WScript.Echo('Для работы скрипта необходима установка Windows Script Host (WSH)!');
    WScript.Quit();
}
try {
    var TCS = new ActiveXObject('TCScript.Helper');
} catch(e) {}
 
// Определение путей к конфигурационным файлам
var ConfigManager = {
    lstConfigs: {},
    profileDir: '',    // местоположение файлов настройки
    
    initialize: function() {
        // wincmd.ini + определение пути к профилю
        this.lstConfigs[file_wincmd_ini] = {
            path: '',
            getPath: function() {
                if (!this.path) {
                    var envvar_commander_ini = '%COMMANDER_INI%';
                    this.path = WshShell.ExpandEnvironmentStrings(envvar_commander_ini);
                    if (this.path == envvar_commander_ini) {
                        WScript.Echo('Скрипт расчитан на работу с Total Commander верcии 6.55 или выше!');
                        WScript.Quit();
                    }
                    ConfigManager.profileDir = this.path.replace(/[^\\]*$/, '');
                }
                return this.path;
            }
        };
        
        // usercmd.ini
        this.lstConfigs[file_usercmd_ini] = {
            path: '',
            getPath: function() {
                if (!this.path) {
                    this.path = ConfigManager.profileDir + file_usercmd_ini;
                }
                return this.path;
            }
        };
        
        // wcx_ftp.ini
        this.lstConfigs[file_wcx_ftp_ini] = {
            path: '',
            getPath: function() {
                if (!this.path) {
                    this.path = ConfigManager.profileDir + file_wcx_ftp_ini;
                }
                return this.path;
            }
        };
        
        // Имя пользовательского файла FTP настроек ftp.ini
        this.lstConfigs[file_ftp_ini] = {
            path: '',
            getPath: function() {
                if (!this.path) {
                    this.path = ConfigManager.profileDir + file_ftp_ini;
                    // если не будет найден, то откроется wcx_ftp.ini
                    if (!fso.FileExists(this.path))
                        this.path = ConfigManager.getPath(file_wcx_ftp_ini);
                }
                return this.path;
            }
        };
        
        // Файл меню
        this.lstConfigs[file_wincmd_mnu] = {
            path: '',
            getPath: function() {
                if (!this.path) {
                    this.path = readINI(ConfigManager.getPath(file_wincmd_ini), 'MainMenu', '');
                    if (!/\\/.test(this.path)) {
                        this.path = WshShell.ExpandEnvironmentStrings('%COMMANDER_PATH%\\LANGUAGE\\' + this.path);
                    }
                }
                return this.path;
            }
        };
        
        /* > Алгоритмы поиска каких-либо других файлов дописываем сюда < */
        
        // Обязательное получение файлов, т.к. из них будут браться настройки
        this.getPath(file_wincmd_ini);
    },
    getPath: function(filename) {
        return this.lstConfigs[filename].getPath();
    }
};
 
ConfigManager.initialize();
 
var usercmd_ini = ConfigManager.getPath(file_usercmd_ini);
 
// Поиск редактора, заданного в параметрах запуска скрипта
var editorPath;
var arrEditor = readIniEx(usercmd_ini, WScript.ScriptName, 'editors', '').split(/;|,/);
if (arrEditor[0]) {
    var p = 0;
    do {
        editorPath = WshShell.ExpandEnvironmentStrings(arrEditor[p]);
        if (fso.FileExists(editorPath)) break; else editorPath = '';
        p += 1;
    }
    while (p < arrEditor.length)
}
// Если заданный вручную редактор отсутствует, то берем редактор, заданный в диалоге ТС "Настройка: Правка по F4"
if (!editorPath) {
    editorPath = readINI(ConfigManager.getPath(file_wincmd_ini), 'Editor', '').replace('none', '');
    if (editorPath) {
        if (/%1/.test(editorPath)) { // это - для тех, кто после пути к редактору дописал %1
            editorPath = editorPath.replace(/"*([^"]*)"*.*/, '$1');
        }
    }
    // Если и в настройках TC редактор не найден, пробуем взять по пути редактора Windows
    if (!editorPath || !fso.FileExists(editorPath)) {
        var editorDefault = 'notepad.exe';
        editorPath = WshShell.ExpandEnvironmentStrings('%WINDIR%\\' + editorDefault);
        if (!fso.FileExists(editorPath)) {
            WScript.Echo('Заданный редактор и ' + editorDefault + ' не найдены!');
            WScript.Quit();
        }
    }
}
// Обрамляем полный путь к редактору кавычками
if (!/^\"/.test(editorPath))
    editorPath = '"' + editorPath + '"';
 
// Определяем перечень файлов, которые нам нужно открывать
var arrFiles = readIniEx(usercmd_ini, WScript.ScriptName, 'files', file_wincmd_ini).split(/;|,/);
 
// Открываем файлы в порядке, указанном в параметрах запуска
for (var i = 0; i < arrFiles.length; i++) {
    editFile(arrFiles[i]);
}
 
// = = = = = = = =  Ф У Н К Ц И И  = = = = = = = =
// Открытие файла в редакторе
function editFile(filename) {
    var filepath = ConfigManager.getPath(filename);
    if (filepath) {
        if (fso.FileExists(filepath)) {
            WshShell.Run(editorPath + ' "' + filepath + '"', 1, false);
        }
    }
}
 
// Чтение заданного ключа из секции "Configuration"
function readINI(filepath, key, default_value) {
    return readIniEx(filepath, 'Configuration', key, default_value);
}
 
// Чтение заданного ключа из указанной секции
function readIniEx(filepath, section, key, default_value) {
    var value;
    // Если имеется установленный WSH Helper ActiveX for Total Commander (c)Volniy, то будем использовать его.
    if (TCS) {
        value = TCS.INIRead(filepath, section, key, default_value);
        value = WshShell.ExpandEnvironmentStrings(value);
    } else {
        // Если нет, то обходимся встроенными средствами
        value = default_value;
        if (fso.FileExists(filepath)) {
            if (fso.GetFile(filepath).Size > 0) {
                var file = fso.OpenTextFile(filepath, 1, false);
                var re = new RegExp('^' + key + '\s*=','i');
                while (!file.AtEndOfStream){
                    var text = file.ReadLine();
                    if (re.test(text)){
                        value = WshShell.ExpandEnvironmentStrings(text.replace(/^.*=/,''));
                        break;
                    }
                }
                file.Close();
            }
        }
    }
    return value;
}

Всего записей: 1092 | Зарегистр. 19-05-2008 | Отправлено: 14:00 17-11-2014 | Исправлено: VSHY, 04:28 18-11-2014
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Программы » Total Commander (Часть 8)
articlebot (20-03-2016 21:01): Обсуждение продолжается в части 9


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru