AskParam - диалог запроса параметров командной строки
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3 ... , 18, 19, 20  Next  :| |:
Total Commander -> Плагины Total Commander

#271:  Author: MVVLocation: Ростов-Дон PostPosted: Sat Feb 11, 2017 21:32
    —
Добавил ключ /i для установки иконки.

AskParam beta 160

#272:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Apr 17, 2018 12:06
    —
Сооружал команду для перекодировки файлов через EmEditor. Получилось вот что:
 em-команда
Длина строки параметров около 1000 символов, то есть заведомо меньше, чем 32767. Тестил на пути с пробелами и кириллицей, а именно
Code:
f:\Users\Debath\AppData\Local\Temp\явдл фукдл е уц дел
Так вот, выходит, что при длинной строке параметров ее конец откусывается, и в программу передается
Code:
...Local\Te.%2
Стоит же удалить любой из ключей первого окна, как путь к файлу-результату входит полностью. Полная длина пути к файлу 70 символов, то есть далеко не 256.
У меня есть другая em-команда с AskParam, так там длина строки параметров 1968 символов - вдвое больше, чем здесь, и там все работает. Правда, там нет параметров типа %Р - только %1.
Насколько я понимаю, EmEditor у тебя установлен

#273:  Author: MVVLocation: Ростов-Дон PostPosted: Tue Apr 17, 2018 15:49
    —
У меня вроде работает:
Code:
[em_test]
cmd=%COMMANDER_PATH%\Addons\AskParam\AskParam64.exe
param=/c"Source Encoding" /u"Cyrillic (windows-1251): 1251" /t"System Default Encoding: 65536" /t"Unicode (UTF-16LE): 65537" /t"Unicode (UTF-16BE): 65538" /t"Unicode (UTF-8): 65001" /t"Unicode (UTF-7): 65000" /t"Binary (ASCII View): 65539" /t"Binary (Hexadecimal View): 65540" /t"Cyrillic (cp866): 866" /t"Cyrillic (iso-8859-5): 28595" /t"Cyrillic (koi8-r): 20866" /t"Cyrillic (koi8-ru): 21866" /t"Detects all encodings: 1048576" /t"Detects Unicode signature (BOM): 131072" /t"Detects UTF-8: 262144" /t"Detects HTML/XML Charset: 524288" /p(h) /c"Target Encoding" /u"Cyrillic (windows-1251): 1251" /t"System Default Encoding: 65536" /t"Unicode (UTF-16LE): 65537" /t"Unicode (UTF-16BE): 65538" /t"Unicode (UTF-8): 65001" /t"Unicode (UTF-7): 65000" /p(h) /cBOM /u"With Unicode signature (BOM): +" /t"Without Unicode signature (BOM): -" /p(h) "D:\Program Files\EmEditor\EmEditor.exe" "%P%O.%E" /nr /sp /cp %%1 /cps %%2 /ss%%3 /sa "%P%O.%%2"


AskParam получает такую комстроку (смотрю в ProcessHacker):
Code:
"D:\TOTALCMD\Addons\AskParam\AskParam64.exe" /cSource Encoding " /uCyrillic (windows-1251): 1251 " /tSystem Default Encoding: 65536 " /tUnicode (UTF-16LE): 65537 " /tUnicode (UTF-16BE): 65538 " /tUnicode (UTF-8): 65001 " /tUnicode (UTF-7): 65000 " /tBinary (ASCII View): 65539 " /tBinary (Hexadecimal View): 65540 " /tCyrillic (cp866): 866 " /tCyrillic (iso-8859-5): 28595 " /tCyrillic (koi8-r): 20866 " /tCyrillic (koi8-ru): 21866 " /tDetects all encodings: 1048576 " /tDetects Unicode signature (BOM): 131072 " /tDetects UTF-8: 262144 " /tDetects HTML/XML Charset: 524288 " /p(h  /c"Target Encoding" /u"Cyrillic (windows-1251): 1251" /t"System Default Encoding: 65536" /t"Unicode (UTF-16LE): 65537" /t"Unicode (UTF-16BE): 65538" /t"Unicode (UTF-8): 65001" /t"Unicode (UTF-7): 65000" /p(h) /cBOM /u"With Unicode signature (BOM): +" /t"Without Unicode signature (BOM): -" /p(h) "D:\Program Files\EmEditor\EmEditor.exe" "D:\Users\Debath\AppData\Local\Temp\явдл фукдл е уц дел\file.txt" /nr /sp /cp %1 /cps %2 /ss%3 /sa "D:\Users\Debath\AppData\Local\Temp\явдл фукдл е у.%2"


EmEditor получает такую комстроку (чтобы успеть её увидеть, можно попробовать перекодировать файл в UTF-16 без BOM из 1251 в UTF-16 - тогда EmEditor покажет сообщение о нулевых символах в файле):
Code:
"D:\Program Files\EmEditor\EmEditor.exe" "D:\Users\Debath\AppData\Local\Temp\явдл фукдл е уц дел\file.txt" /nr /sp /cp 1251 /cps 65537 /ss+ /sa "D:\Users\Debath\AppData\Local\Temp\явдл фукдл е у.65537"


Проверь у себя комстроку AskParam, когда нажимаешь кнопку и он показывает окно.

#274:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Tue Apr 17, 2018 16:10
    —
Вот эта строка не работает:
 плохо
В первом окне я выбираю 1251 (понятное дело, текущий файл должен иметь эту кодировку), потом - все равно (у меня "Unicode (UTF-16LE)"). Перекодировки не происходит, исходный файл открывается в EmEditor'е.
Вот эта строка:
 хорошо
работает отлично - создается перекодированный файл.
Разница в строках со словом "Cyrillic" во втором окне.
Твоя строка (первая) у меня не делает ничего.

Добавлено
Quote:
Проверь у себя комстроку AskParam, когда нажимаешь кнопку и он показывает окно
Проверил. Не через ProcessHacker, правда, а через ShowCmdLine, но реально несколько символов (около 20) из конца имени пропадают: усекается часть пути, до имени файла дело не доходит.

Еще добавлено
Еще бы твоя строка что-то делала, если у нее хвост тоже усекается.
Попробуй искусственно "нарастить" длину строки за счет многократного указания одних и тех же ключей.

Еще немного поэкпериментировал. Вот результаты:
1) Если строка усекается "на этапе" имени-источника (%P%O.%E): перекодировка не происходит, а файл-результат с усеченным именем EmEditor предлагает открыть и в случае согласия юзверя создает пустой файл.
2) Если усечение происходит между %P%O.%E и %P%O.%%2, то есть на этапе ключей, то результат вообще может быть каким угодно в зависимости от того, какая часть какого ключа пропала. Как правило, не происходит ничего. Иногда - исходный файл просто открывается в EmEditor'е.
3) Если же усекается файл-результат, то не происходит ничего.

И еще добавлено
Создал суперлайт-версию для тестирования:
Code:
cmd=%COMMANDER_PATH%\AskParam\AskParam64.exe
param=/u"Cyrillic (windows-1251): 1251" /p(h) /u"Unicode (UTF-16LE): 65537" /p(h) /u"With Unicode signature (BOM): +" /p(h) "f:\Utils\Text\EmEditor\EmEditor.exe" "%P%O.%E" /nr /sp /cp %%1 /cps %%2 /ss%%3 /sa "%P%O.%%2"
Исходная версия рабочая.
Теперь ставим курсор внутрь любого ключа (между /u и /p) и тупо бьем по клаве. Когда суммарная длина строки параметров оказывается около 1000 символов, команда работать перестает, а строка усекается с конца.
Отсюда вывод - дело именно в длине всей строки, а не в числе ключей и уж тем более в их содержании.
Вот такие пироги...

#275:  Author: MVVLocation: Ростов-Дон PostPosted: Wed Apr 18, 2018 10:49
    —
Тут в первую очередь надо понять, где происходит усечение - в тотале при вызове AskParam (в частности, из-за ограничения на длину параметра в файле и поле ввода в диалоге) или в AskParam при вызове EmEditor, и мне пока этого не ясно.
Чтобы проверить, виноват ли тотал, надо посмотреть командную строку AskParam и проверить, всё ли в неё передано, что должно быть передано. И если виноват тотал, остается только сообщить о баге и ждать (или укоротить командную строку, например, с помощью выноса длинной части со списком кодировок в переменную окружения, устанавливаемую с помощью плагина Autorun).
Чтобы проверить, что EmEditor в некоторой ситуации получает не всю команду, надо смотреть его комстроку (это несложно, если редактор открывается и ждет, и сложнее, если он выполняет команду и сразу закрывается).
В любом случае, странно, что команда в ~1000 символов не работает, а в ~2000 символов работает.

Сейчас дописал к своей команде в конец в диалоге редактирования EM-команды кучу мусора (более 1400 символов), в конце которых "SOS SOS SOS". Посмотрел в комстроке AskParam, в конце три SOS присутствуют.
Проверил комстроку EmEditor (вынудив его показать диалог).
Конец комстроки тоже не обрезается.
А взял глубоковложенный тестовый файл:
Code:
D:\Temp\012345678901234567890123456789012345678901234567890123456789\012345678901234567890123456789012345678901234567890123456789\012345678901234567890123456789012345678901234567890123456789\явдл фукдл е уц дел\z

И редактору передалась битая комстрока (середина вырезана)... Причём, в комстроке AskParam так и указано! Похоже, баг в тотале!

 Примеры комстрок для сравнения


Добавлено спустя 1 час:

Сообщил о баге, заодно заметил важную вещь: суммарная длина комстроки, с которой запускается программа, при обрезании одинакова, т.е. где-то тотал упирается в какое-то внутреннее ограничение.

#276:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat May 19, 2018 09:31
    —
Еще баг, аналогичный предыдущему, причем здесь спихнуть вину на EmEditor точно не получится.
Речь вот об этом нововведении:
history.txt wrote:
13.03.18 Added: Command line: support switching to virtual folders via GUID, e.g. for drive list, use cd ::{20D04FE0-3AEA-1069-A2D8-08002B30309D} (32/64)
(хотя, конечно, подобные команды работали и раньше, в том числе и у меня, но... не в таком количестве и не в связке с AskParam)
 Строка параметров AskParam
Длина строки около 2000 символов. Так вот, при отработке команды производится попытка запустить новую копию Тотала, потому что ключ /o откусывается (для моих путей - до состояния ".../s /"). Стоит убрать любой /t-ключ, и все пучком.
MVV, моя команда изменения кодировки теперь работает отлично. То есть похоже, что граница ошибки просто сдвинулась с 1k символов на 2k, но при этом осталась. И похоже, дело не в %O. Это так?

#277:  Author: FlasherLocation: Москва PostPosted: Sat May 19, 2018 11:36
    —
Вахмурка
 Из твоего списка толк есть только от:
 Эти GUID на Win 7 вообще никуда не ведут:
Остальное — пустые папки. Так стоит ли с длиной заморачиваться?

#278:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat May 19, 2018 12:12
    —
Дело не в конкретных путях, а в возможных ошибках в AskParam (или в TC, что вероятнее)

#279:  Author: FlasherLocation: Москва PostPosted: Sat May 19, 2018 12:19
    —
Вахмурка wrote:
или в TC, что вероятнее
Вот и проверь без AskParam.

#280:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat May 19, 2018 12:22
    —
Проверял - работает. Как и с кодировками ранее. А косяк оказался не в EmEditor'е и даже не в AskParam'е, а как раз в ТС

#281:  Author: MVVLocation: Ростов-Дон PostPosted: Sat May 19, 2018 12:58
    —
Вахмурка wrote:
Длина строки около 2000 символов.

Забавляет, что я эту строчку даже в поле параметров кнопки вставить не могу, она обрезается после "/s /". Very Happy А когда нажал ОК, в BAR-файле строка закончилась так: "/s "...


Last edited by MVV on Sat May 19, 2018 13:02; edited 2 times in total

#282:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat May 19, 2018 13:01
    —
2MVV
Я использовал em_команду.
Так ты воспроизвел проблему? Каковы первые впечатления?

#283:  Author: MVVLocation: Ростов-Дон PostPosted: Sat May 19, 2018 13:03
    —
Вручную дописал остаток строки в BAR-файл, нажал кнопку, посмотрел комстроку AskParam: обрезается после "/s /".

Полагаю, в тотале просто есть ограничение на длину читаемой из INI-файла строки, из-за чего она обрезается. И, учитывая позицию обрезки, это ограничение равно 2048.

#284:  Author: ВахмуркаLocation: Большая деревня Москва PostPosted: Sat May 19, 2018 13:13
    —
Тогда это баг, ибо
TC help wrote:
The maximum length of the command line is limited to 2047 characters on Windows 2000, and 8191 characters on Windows XP (the maximum supported by these operating systems)
Не знаю как у тебя, а у меня Win7x64, то есть явно не 2000.
Зарепортишь на англофоруме?
Получается, что Тоталу все равно, откуда брать параметры - из *.bar или из usercmd.ini. Разве это логично?

#285:  Author: MVVLocation: Ростов-Дон PostPosted: Sat May 19, 2018 14:16
    —
Это с трудом можно назвать багом, это скорее старое ограничение. Сделал запрос.

Quote:
Получается, что Тоталу все равно, откуда брать параметры - из *.bar или из usercmd.ini. Разве это логично?

А это как раз абсолютно логично, ведь смысл параметров одинаков.



Total Commander -> Плагины Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3 ... , 18, 19, 20  Next  :| |:
Page 19 of 20

Powered by phpBB © 2001, 2005 phpBB Group