View previous topic :: View next topic |
Author |
Message |
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6192 Location: Москва
|
(Separately) Posted: Thu Mar 25, 2010 22:40 Post subject: |
|
|
kadvlad wrote: | натолкните на мысль, как (и где) правильно указать нестандартный редактор для команды меню (в русифицированном варианте): "Редактировать файлы конфигурации", $245 |
Эта команда всегда вызывает только Блокнот, заставить её использовать другую программу невозможно. Вместо этого можно создать пользовательскую команду, которая будет запускать нужный редактор с нужными файлами, и прописать её в меню вместо $245.
kadvlad wrote: | Так и должно быть? Нет ли здесь ошибки? |
Так и должно быть. Ошибки нет. _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Thu Mar 25, 2010 22:52 Post subject: |
|
|
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. Склероз, однако. Я этот скрипт уже один раз на форуме выкладывал: [TC7.5pb1] Внутренние ассоциации для cm_ConfigChangeIniFiles _________________ Даже самая богатая фантазия
Не представит себе наши безобразия.
Last edited by Avada on Fri Mar 26, 2010 09:59; edited 1 time in total |
|
Back to top |
|
 |
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Fri Mar 26, 2010 00:47 Post subject: |
|
|
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 |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6192 Location: Москва
|
(Separately) Posted: Fri Mar 26, 2010 01:50 Post subject: |
|
|
kadvlad wrote: | Подозреваю, что можно сделать проще (и правильнее) через cm_ConfigChangeIniFiles=581, но не соображу, как прописать новую команду вместо цифровой (или аналогичную ей). |
Никак. Сначала меню "Запуск", а позже и пользовательские EM-команды были созданы именно для того, чтобы дать пользователям возможность самим конструировать произвольные действия. Встроенные CM-команды вшиты намертво и никак не модифицируются (не считая, конечно, вариаций поведения в зависимости от отдельных настроек Тотала).
Кстати, использование usercmd.ini — значительно более гибкий способ, чем меню "Запуск". Так что я бы рекомендовал создать именно em-команду, а не cm_UserMenuN. Во-первых, её можно будет вставить в произвольное место меню, не дублируя в меню "Запуск". Во-вторых, не придётся заботиться о том, чтобы порядок команд всегда оставался неизменным (если вставить перед этой командой новую, то она превратится в cm_UserMenu13, и придётся везде править привязки). _________________ Почему же, ё-моё, ты нигде не пишешь "ё"? |
|
Back to top |
|
 |
kadvlad
Joined: 26 Aug 2007 Posts: 81
|
(Separately) Posted: Fri Mar 26, 2010 01:58 Post subject: |
|
|
Ясно, спасибо.
Буду осваивать новые способы. |
|
Back to top |
|
 |
|
|
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
|