Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: [TC7.5pb1] Внутренние ассоциации для cm_ConfigChangeIniFiles 
Author Message
Avada



PostPosted: Fri Apr 17, 2009 15:13    Post subject: Reply with quote

D1P wrote:
Внутренние ассоциации для cm_ConfigChangeIniFiles не работают.

А это Гислером и не планировалось (и, ЕМНИП, никем не запрашивалось). Для меня этот вопрос не особенно актуален, поскольку давно уже пользуюсь скриптом от mozers™.
Code:

// em_configChangeIniFiles.js
// Version: 1.1
// Открытие файлов настройки Total Commander в редакторе, заданном в диалоге ТС "Настройка: Правка по F4"
// mozers™ <mozers@mail.ru> (Вопросы, предложения...)
// ============================================================

// Желающие использовать редактор, отличный от заданного в диалоге ТС "Настройка: Правка по F4"
// могут указать его тут:
var editor = '%ProgramFiles%\\SciTE\\SciTE.exe';

// Имя пользовательского файла FTP настроек (если не будет найден, то откроется wcx_ftp.ini)
var ftp_ini_name = 'ftp.ini';

// Инициализируем нужные нам 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) {}

// Находим местоположение wincmd.ini
var wincmd_ini = WshShell.ExpandEnvironmentStrings('%COMMANDER_INI%');
if (wincmd_ini == '%COMMANDER_INI%') {
   WScript.Echo('Скрипт расчитан на работу с Total Commander верcии 6.55 или выше!');
   WScript.Quit();
}

// Если заданный вручную редактор отсутствует, то берем редактор, заданный в диалоге ТС "Настройка: Правка по F4"
if (editor != ''){
   editor = WshShell.ExpandEnvironmentStrings(editor);
   if (!fso.FileExists(editor)){editor = ''}
   }
if (editor == ''){
   // Находим путь к редактору
   editor = ReadINI (wincmd_ini, 'Editor', 'notepad.exe')
   if (editor == 'none') {
      editor = 'notepad.exe'
   } else {
      if (/%1/.test(editor)) { // это - для тех, кто после пути к редактору дописал %1
         editor = editor.replace(/"*([^"]*)"*.*/,'$1')
      }
   }
}
if (!fso.FileExists(editor)){
   WScript.Echo('Заданный редактор\N' + editor + '\nне найден!');
   WScript.Quit();
}
// Обрамляем editor в кавычки
if (!/^\"/.test(editor)) {editor = '"' + editor + '"'}

// Находим местоположение файлов настройки
var profile_path = wincmd_ini.replace(/[^\\]*$/,'');
var ftp_ini = profile_path + ftp_ini_name;
if (!fso.FileExists(ftp_ini)) {ftp_ini = profile_path + 'wcx_ftp.ini'}
var usercmd_ini = profile_path + 'usercmd.ini';

// Находим местоположение файла меню
var wincmd_mnu = ReadINI (wincmd_ini, 'MainMenu','');
if (!/\\/.test(wincmd_mnu)) {
   wincmd_mnu = WshShell.ExpandEnvironmentStrings('%COMMANDER_PATH%\\LANGUAGE\\' + wincmd_mnu)
}

// Открываем файлы в заданном редакторе
EditFile (wincmd_mnu);
EditFile (usercmd_ini);
EditFile (ftp_ini);
EditFile (wincmd_ini);
WScript.Quit();


// = = = = = = = =  Ф У Н К Ц И И  = = = = = = = =
// Открытие файла в редакторе
function EditFile (filename){
   if (fso.FileExists(filename)){
      WshShell.Run(editor + ' "' + filename + '"', 1, false)
   }
}

// Чтение заданного ключа из файла
function ReadINI (filename, key, default_key){
   // Если имеется установленный WSH Helper ActiveX for Total Commander (c)Volniy, то будем использовать его.
   if (TCS) {
      var value = TCS.INIRead(filename, 'Configuration', key, default_key);
      value = WshShell.ExpandEnvironmentStrings(value);
      return value;
   } else {
   // Если нет, то обходимся встроенными средствами
      var value = default_key;
      if (fso.FileExists(filename)) {
         if (fso.GetFile(filename).Size > 0) {
            var file = fso.OpenTextFile(filename, 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;
   }
}

Редактор указывается свой, вешается на кнопку - и все дела.
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group