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 

"Редактировать файлы конфигурации": как указать редактор?

 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Thu Mar 25, 2010 22:38    Post subject: "Редактировать файлы конфигурации": как указать редактор? Reply with quote

Друзья,
натолкните на мысль, как (и где) правильно указать нестандартный редактор для команды меню (в русифицированном варианте): "Редактировать файлы конфигурации", $245

У меня для редактора установлено:
Code:
Editor=%COMMANDER_PATH%\..\akelpad.exe

cm_Edit=904
cm_EditConfig=496

По F4 редактирует файлы нормально (в т.ч. wincmd.ini), а вот при вызове команды из вышеуказанного меню получаю ошибку "Файл не найден".
Пробовал указывать относительный путь к редактору X:\akelpad.exe, но ошибка так и осталась..

Кстати, в процессе изучения русифицированного WCMD_EXT_RUS.LNG обнаружил такое:
 Hidden text

Так и должно быть? Нет ли здесь ошибки?
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6192
Location: Москва

Post (Separately) Posted: Thu Mar 25, 2010 22:40    Post subject: Reply with quote

kadvlad wrote:
натолкните на мысль, как (и где) правильно указать нестандартный редактор для команды меню (в русифицированном варианте): "Редактировать файлы конфигурации", $245

Эта команда всегда вызывает только Блокнот, заставить её использовать другую программу невозможно. Вместо этого можно создать пользовательскую команду, которая будет запускать нужный редактор с нужными файлами, и прописать её в меню вместо $245.

kadvlad wrote:
Так и должно быть? Нет ли здесь ошибки?

Так и должно быть. Ошибки нет.
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10415
Location: Россия, Саратов

Post (Separately) Posted: Thu Mar 25, 2010 22:52    Post subject: Reply with quote

kadvlad
http://forum.wincmd.ru/viewpost.php?p=24760. Скрипт от mozers™. Но там этот скрипт не качается. Вот его текст в варианте, используемом мною. Имя файла указано в первой строке.
Code:
// em_configChangeIniFiles.js
// Version: 1.1
// Открытие файлов настройки Total Commander в редакторе, заданном в диалоге ТС "Настройка: Правка по F4"
// mozers™ <mozers@mail.ru> (Вопросы, предложения...)
// ============================================================

// Желающие использовать редактор, отличный от заданного в диалоге ТС "Настройка: Правка по F4"
// могут указать его тут:
var editor = '%ProgramFiles%\\EmEditor\\EmEditor.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 (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;
   }
}

В строке с var editor заменить указанный редактор на свой.

P.S. Склероз, однако. Wink Я этот скрипт уже один раз на форуме выкладывал: [TC7.5pb1] Внутренние ассоциации для cm_ConfigChangeIniFiles
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.


Last edited by Avada on Fri Mar 26, 2010 09:59; edited 1 time in total
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Fri Mar 26, 2010 00:47    Post subject: Reply with quote

CaptainFlint,
спасибо за разъяснения

Avada,
большое спасибо за скрипт, работает.
А можно ли обойтись без usercmd.ini ?

К примеру, я сделал ещё вариант таким образом:
1. Создал для скрипта команду в пользовательском меню
totalcmd.inc > cm_UserMenu12: %COMMANDER_PATH%\Language\em_configChangeIniFiles.js

2. Эту команду добавил в меню Wcmd_rus.mnu
MENUITEM "Изм&енить настройки", cm_UserMenu12

Подозреваю, что можно сделать проще (и правильнее) через cm_ConfigChangeIniFiles=581, но не соображу, как прописать новую команду вместо цифровой (или аналогичную ей).
/?


Last edited by kadvlad on Fri Mar 26, 2010 01:58; edited 1 time in total
Back to top
View user's profile Send private message
CaptainFlint



Joined: 14 Dec 2004
Posts: 6192
Location: Москва

Post (Separately) Posted: Fri Mar 26, 2010 01:50    Post subject: Reply with quote

kadvlad wrote:
Подозреваю, что можно сделать проще (и правильнее) через cm_ConfigChangeIniFiles=581, но не соображу, как прописать новую команду вместо цифровой (или аналогичную ей).

Никак. Сначала меню "Запуск", а позже и пользовательские EM-команды были созданы именно для того, чтобы дать пользователям возможность самим конструировать произвольные действия. Встроенные CM-команды вшиты намертво и никак не модифицируются (не считая, конечно, вариаций поведения в зависимости от отдельных настроек Тотала).

Кстати, использование usercmd.ini — значительно более гибкий способ, чем меню "Запуск". Так что я бы рекомендовал создать именно em-команду, а не cm_UserMenuN. Во-первых, её можно будет вставить в произвольное место меню, не дублируя в меню "Запуск". Во-вторых, не придётся заботиться о том, чтобы порядок команд всегда оставался неизменным (если вставить перед этой командой новую, то она превратится в cm_UserMenu13, и придётся везде править привязки).
_________________
Почему же, ё-моё, ты нигде не пишешь "ё"?
Back to top
View user's profile Send private message
kadvlad



Joined: 26 Aug 2007
Posts: 81

Post (Separately) Posted: Fri Mar 26, 2010 01:58    Post subject: Reply with quote

Ясно, спасибо.
Буду осваивать новые способы.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group