View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0002442 | Far Manager | Command Line/Execute | public | 2013-07-03 18:58 | 2013-08-22 12:15 |
Reporter | Smitis | Assigned To | vskirdin | ||
Priority | normal | Severity | feature | Reproducibility | have not tried |
Status | closed | Resolution | fixed | ||
Product Version | 3.0 | ||||
Fixed in Version | 3.0 | ||||
Summary | 0002442: Добавить поддержку TakeCommand | ||||
Description | ФАР, передавая командную строку на выполнение командному процессору, заключает её в кавычки. Выяснилась несовместимость такого подхода при использовании TCC - в некоторых случаях интерпретация такой, заключённой в кавычки, командной строки вызывает ошибку или результат, отличный от CMD. Опыт показывает, для получения одинаковых (в пределах их совместимости) результов, для CMD комстроку лучше всегда заключать в кавычки, а для TCC не заключать никогда. Предлагаю следующее: - Добавить строковую опцию System.Executor.NotQuotedShell, в которой будут перечислены имена исполняемых файлов командных процессоров, для которых командную строку не надо заключать в кавычки. - В параметрах System.Executor.BatchType и System.Executor.ExcludeCmds раскрывать переменные среды (для возможности гибкой настройки при запуске из-под разных командных процессоров). - При запуске проверять текущий %comspec% - если exe-файл есть в списке NotQuotedShell, в кавычки не заключать. Предлагаю опробованый вариант решения в виде diff файла (используется постоянно под разными командными процессорами, последняя модифицированная версия - 3489) | ||||
Additional Information | Обсуждение http://forum.farmanager.com/viewtopic.php?f=6&t=8019 | ||||
Tags | No tags attached. | ||||
Build | 3614 | ||||
|
|
|
для хэлпа тоже нужен патч. |
|
|
|
сделал |
|
Эээ... может тогда сюда добавить ататч для tcc, аналогичный addons\SetUp\Executor.CMD.farconfig ? |
|
В принципе, есть конфиг для TCCLE. Сейчас сделаю для полного TCC. Сами конфиги из Addons требуют доработки: - Содержат уже несуществующий System.Executor.Type - Executor.COMMAND.farconfig, видимо, уже совсем не актуален в связи с тем, что 9x не поддерживается. - Executor.4NT.farconfig, пожалуй, тоже не актуален, так как давно уже переименован в TCC - Для CMD есть новая (с Висты) команда MKLINK. - Для CMD: ERRORLEVEL, EXIST и NOT не являются командами. |
|
|
|
Добавил файлы конфигурации для CMD, TCC/LE и TCC. Для сравнения, количество команд получилось, соответственно 41 / 108 / 185 (а для TCC/LE и TCC пришлось ещё добавить варианты команд, ничинающихся с *) Надеюсь, ничего не пропустил. Все файлы в UTF-8 (в оригинале почему-то 1251). Для TCC/LE и TCC добавлен параметр System.Executor.BatchType |
|
BatchType это немного не о том (возможно название не очень удачное). Фактически это то что по Enter будет исполняться в консольном окне фар. Здесь вполне может быть .pl, .py, .lua, здесь же может быть и .btm, если ftype и assoc прописаны, даже если COMSPEC=CMD.EXE |
|
Да, но по умолчанию BatchType = .bat;.cmd. У TCC добавляется ещё один тип: .btm Там вообще запутано получается. Если нажали ENTER и нет ФАРовской ассоциации, но расширение есть в BatchType, ищется ассоциация в реестре. Если введено в командной строке и расширение есть в BatchType, строка передаётся ком. процессору, ассоциации в реестре не ищутся, ком. процессор уже сам разбирается, что с таким файлом делать. |
|
build 3611 |
|
Тестю. Можно немного сократить код, если использовать функцию PointToName: заменить LPCWSTR lpCmdProcName = wcsrchr(strComspec.c_str(),L'\\'); if (lpCmdProcName != nullptr) lpCmdProcName++; bool bQuotedShell = !(std::any_of(CONST_RANGE(NotQuotedShellList, i) { return !StrCmpI(i,lpCmdProcName); })); на bool bQuotedShell = !(std::any_of(CONST_RANGE(NotQuotedShellList, i) { return !StrCmpI(i,PointToName(strComspec.data())); })); В мой diff это не попало, потому что я эту возможность после нашёл. Но в своих патчах использовал, решение рабочее. |
|
build 3614 |
|
Глюков не замечаю. Работает как задумано. Закрываем. |
Date Modified | Username | Field | Change |
---|---|---|---|
2013-07-03 18:58 | Smitis | New Issue | |
2013-07-03 18:58 | Smitis | File Added: executor.diff.7z | |
2013-07-03 22:48 | 2useven10 | Note Added: 0011243 | |
2013-07-04 07:39 | Smitis | File Added: executor_help.7z | |
2013-07-04 07:39 | Smitis | Note Added: 0011244 | |
2013-07-06 06:52 | vskirdin | Note Added: 0011251 | |
2013-07-06 14:34 | Smitis | Note Added: 0011252 | |
2013-07-06 18:40 | Smitis | File Added: executor.farconfig.7z | |
2013-07-06 18:50 | Smitis | Note Added: 0011253 | |
2013-07-06 19:39 | 2useven10 | Note Added: 0011254 | |
2013-07-06 23:16 | Smitis | Note Added: 0011255 | |
2013-07-07 00:00 | Smitis | Note Edited: 0011255 | |
2013-08-14 16:09 | vskirdin | Note Added: 0011333 | |
2013-08-14 16:09 | vskirdin | Assigned To | => vskirdin |
2013-08-14 16:09 | vskirdin | Status | new => feedback |
2013-08-15 07:49 | Smitis | Note Added: 0011334 | |
2013-08-15 07:49 | Smitis | Status | feedback => assigned |
2013-08-15 10:03 | vskirdin | Note Added: 0011335 | |
2013-08-15 10:03 | vskirdin | Status | assigned => feedback |
2013-08-18 08:44 | Smitis | Note Added: 0011340 | |
2013-08-18 08:44 | Smitis | Status | feedback => assigned |
2013-08-22 12:15 | alexy | Build | => 3614 |
2013-08-22 12:15 | alexy | Status | assigned => closed |
2013-08-22 12:15 | alexy | Resolution | open => fixed |
2013-08-22 12:15 | alexy | Fixed in Version | => 3.0 |