Командная строка

Нашли баг? Воспользуйтесь поиском чтобы убедиться что его не нашли до вас и если он не упоминается добавьте его описание (желательно пошаговое).
Чем для автора программы отличаются баги, недоработки и фичи.

Модератор: motyara

Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Командная строка

Сообщение Qwertiy »

1. При использовании Shift+Enter в командной строке в некоторых случаях стартовым каталогом оказывается System32, а не текущий. Пример такой команды dir.

2. Если в режиме консольного ввода ввести команду exit, то он закрывается (это нормально).
При повторном переходе в него (Ctlr+O) все команды уходят в никуда (а это - нет)...

3. При запуске в режиме консольного ввода программы

Код: Выделить всё

#include <cstdio>
#include <cstring>

int main(void)
{
char s[256]="Line is: ";

gets(s+strlen(s));
puts(s);

gets(s);
printf("And now the line is: %s\n", s);

fflush(stdout);

gets(s);
printf("The third line is: %s\n", s);

puts("And one special test///\b\b\b...");

return 0;
}
заметны 3 отличия по сравнению со стандартной командной строкой:
3.1. Все вводимые данные отправляютя в программу без вывода на экран.
3.2. Вывод на экран осуществляетя только при вызове ffush, а не на каждом printf'е.
3.3. Спецсимволы типа '\b' не обрабатываются, а выводятся "как есть" (сравните последнюю выводимую строку).

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

5. Было бы удобно видеть вводимые и выводимые данные разными цветами, как это сделано, например, во Фрегате.

PS: для 3.3 хотелось бы опцию... Причём с возможностью переключения без использования окна настроек и без выхода из Режима консольного ввода.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

1 - такие команды запускаются через командный интерпретатор (cmd.exe), в связи с чем я почему-то предполагал что надо передавать путь к нему, а каталог должен ставиться текущим. Проверил и пришел к выводу что действительно нужно передавать текущий каталог в качестве пути, исправлено. Спасибо за информацию.
2 - посмотрю что можно сделать в этом плане.
3 - фактически окно консольного ввода было сделано лишь для того чтобы можно было без особых извращений скопировать результаты вывода консольных программ, соответственно далеко не вся функциональность командного интерпретатора была реализована, лишь то что удалось сделать.
4 - я в курсе, по возможности это будет добавлено.
5 - раскраска предполагала бы наличие назначения дополнительных цветов в настройках, а там их судя по всему и без того уже много...
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):2 - посмотрю что можно сделать в этом плане.
Может просто проверить, что указатель на соответствующий процесс не null, и если null, то запустить новый?
Max Diesel писал(а):3 - фактически окно консольного ввода было сделано лишь для того чтобы можно было без особых извращений скопировать результаты вывода консольных программ, соответственно далеко не вся функциональность командного интерпретатора была реализована, лишь то что удалось сделать.
Интересная идея - копировать только вывод. Полезная возможность!
Max Diesel писал(а):4 - я в курсе, по возможности это будет добавлено.
Как насчёт добавления отдельной (но не заменяющей) панели инструментов к окну консольного ввода? Предлагаю поместить туда следующие кнопки:
1. Сохранить - сохранение текущего содержимого в txt или rtf файл;
2. Печать;
3. Separator;
4. Выделить всё;
5. Вырезать;
6. Копировать;
7. Вставить - в командную строку, а не в поле;
8. Separator;
9. Поиск - поиск текста в окне;
10. Separator;
11. Увеличить шрифт;
12. Уменьшить шрифт;
13. Separator;
14. Перенос строк (флажок, default=true);
15. Все символы (флажок) - если стоит то делать как сейчас, если нет - то обработка '\b', '\r' и т. д. как в cmd;
16. Показывать вводимый текст (флажок, default=true) - при переключении этого флажка показывается или скрывается весь текст, введённый с клавиатуры (та его часть, которая сейчас не отображается никогда);
17. Показывать выводимый текст (флажок, default=true) - аналогично предыдущему;
18. Separator;
19. Показывать покомандно (флажок, default=false) - показывать только одну команду и относящийся к ней ввод/вывод, при нажатии или вводе новой команды переходить на последнюю;
20. На начало - доступно, если стоит 17;
21. Предыдущая команда - доступно, если стоит 17;
22. Следующая команда - доступно, если стоит 17;
23. На конец - доступно, если стоит 17;
24. Separator;
25. Аварийное прерывание активного процесса (kill) - разумеется, с подтверждением;
26. Закрытие активного процесса (close) - без подтверждения.
Примечание: кнопки предложены на основе панели инструментов в NPP, с некоторыми изменениями, но с сохранением логической группировки и последовательности; кнопка закрытия самая правая по аналогии со стандартным расположением кнопки выхода (креста).
Max Diesel писал(а):5 - раскраска предполагала бы наличие назначения дополнительных цветов в настройках, а там их судя по всему и без того уже много...
Нагдлядность - большой плюс...
А вообще, моё мнение про настройки Вы знаете...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Может просто проверить, что указатель на соответствующий процесс не null, и если null, то запустить новый?
Есть вариант проще - окно консольного ввода в такой ситуации не будет отображаться до перезапуска программы.
Qwertiy писал(а):Как насчёт добавления отдельной (но не заменяющей) панели инструментов к окну консольного ввода?
Предложенные 26-ть кнопок по сути своей абсолютно надуманные... копирование возможно и без кнопок панели инструментов, вырезание вообще лишено смысла, сохранение в файл предполагает еще две кнопки - проставить маркер начала и маркер конца для текста который нужно сохранить, печать - весьма маловостребованная функция если речь идет о результатах вывода консольных программ. Не нужно забывать о том что Unreal Commander является файловым менеджером, а не продвинутой заменой командному интерпретатору.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):
Qwertiy писал(а):Может просто проверить, что указатель на соответствующий процесс не null, и если null, то запустить новый?
Есть вариант проще - окно консольного ввода в такой ситуации не будет отображаться до перезапуска программы.
Конечно проще, но не к месту. Перезапустить можно и так, а хотелось бы чтобы открывался чистенький работающий cmd.
Max Diesel писал(а):Предложенные 26-ть кнопок по сути своей абсолютно надуманные... копирование возможно и без кнопок панели инструментов, вырезание вообще лишено смысла, сохранение в файл предполагает еще две кнопки - проставить маркер начала и маркер конца для текста который нужно сохранить, печать - весьма маловостребованная функция если речь идет о результатах вывода консольных программ. Не нужно забывать о том что Unreal Commander является файловым менеджером, а не продвинутой заменой командному интерпретатору.
Копирование и вставка кнопкой иногда бывают удобнее... Вырезание - действительно ерунда. Когда смотришь на панель текстового редактора и не такое напишешь :)

Сохранить - всё то, что отображается в поле в данный момент. Никаких маркеров. Печать - согласен, что маловостребованная. Думал что не помешает, но можно и файл потом напечатать, поэтому вычёркиваем.

Из оставшихся 24 кнопок 6 являются разделителями. На мой взгляд надуманными можно назвать команды 10-11.

На первый взгляд такими могут показаться 19-23 (кстати, 20-23 зависят от 19, а не от 17), но лично мне они бы пригодились, думаю пригодятся и другим, особенно для сохранения... Также полезны и 14-17...

Самые важные кнопки 25 и 26 в любом случае надо куда-то пристроить...

Ещё вопрос: что с командой cls?

PS: А сама идея добавить именно панель инструментов?
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Конечно проще, но не к месту. Перезапустить можно и так, а хотелось бы чтобы открывался чистенький работающий cmd.
Если с точки зрения реализации проблем не возникнет, то сделаю перезапуск интерпретатора.
Qwertiy писал(а):Самые важные кнопки 25 и 26 в любом случае надо куда-то пристроить...

Ещё вопрос: что с командой cls?

PS: А сама идея добавить именно панель инструментов?
Cls несет минимум смысла и не обрабатывается программой как команда очистки. Панель инструментов для консольного ввода на мой взгляд лишняя.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):Если с точки зрения реализации проблем не возникнет, то сделаю перезапуск интерпретатора.
Спасибо. Надеюсь, что проблем не возникнет...

PS: Надеюсь, что случай когда cmd.exe закрывают не командой exit, а убивают как процесс из диспетчера задач тоже попадёт под обработку.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Пробел после имени в кавычках

Сообщение Qwertiy »

Если я пишу в командной строке что-то типа

Код: Выделить всё

"someprg"somearg
то фактически выполняется

Код: Выделить всё

"someprg" omearg
Т. е. символ после кавычек заменяется пробелом. Если выполнить такую команду в cmd, то получается сообщение об ошибке

Код: Выделить всё

""someprg"somearg" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
но я считаю, что в такой ситуации пробел надо вставлять.
В любом случае, замена первого символа на пробел - сомнительный вариант. Можно даже не догадаться, что ошибся...
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Если я пишу в командной строке что-то типа

Код: Выделить всё

"someprg"somearg
то фактически выполняется

Код: Выделить всё

"someprg" omearg
Т. е. символ после кавычек заменяется пробелом. Если выполнить такую команду в cmd, то получается сообщение об ошибке

Код: Выделить всё

""someprg"somearg" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.
но я считаю, что в такой ситуации пробел надо вставлять.
В любом случае, замена первого символа на пробел - сомнительный вариант. Можно даже не догадаться, что ошибся...
Исправлено, спасибо за информацию. В следующем билде предположительно будет корректно.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Смена текущего пути

Сообщение Qwertiy »

Не поддерживается команда chdir

Код: Выделить всё

chdir ..
и ключ /d в команде cd

Код: Выделить всё

cd /d c:\
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Не поддерживается команда chdir

Код: Выделить всё

chdir ..
Она упразднена в связи с поддержкой команды "cd".
Qwertiy писал(а):и ключ /d в команде cd

Код: Выделить всё

cd /d c:\
Обработка команды производится не средствами ДОС, а потому поддержка всех возможных ключей отсутствует (тем более смена диска производится и без этого ключа).
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Командная строка и Панель консолного ввода

Сообщение Qwertiy »

1. В командной строке не поддерживается команда for.

2. В панели консольного ввода получил такой результат:

Код: Выделить всё

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

c:\program files 2\Unreal Commander>cd /d "D:\Temp\Supertemp\1\"

D:\Temp\Supertemp\1>
help >q.txt

D:\Temp\Supertemp\1>
for /l %q in (1,1,15) do type q.txt >>q.txt

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>
Что-то странно выглялит расположение пустых строк...

3. Нельзя ли писать команду на одной строке с текущим каталогом?
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):1. В командной строке не поддерживается команда for.

2. В панели консольного ввода получил такой результат:

Код: Выделить всё

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

c:\program files 2\Unreal Commander>cd /d "D:\Temp\Supertemp\1\"

D:\Temp\Supertemp\1>
help >q.txt

D:\Temp\Supertemp\1>
for /l %q in (1,1,15) do type q.txt >>q.txt

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt 

D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>type q.txt  1>>q.txt
D:\Temp\Supertemp\1>
Что-то странно выглялит расположение пустых строк...

3. Нельзя ли писать команду на одной строке с текущим каталогом?
1 - добавлю к следующему билду,
2 - предположительно при факте восприятия for'а как команды расположение будет другим,
3 - фактически путь остается от предыдущей операции, поэтому команда идет новой строкой.
Аватара пользователя
Qwertiy
Охотник за багами
Сообщения: 1199
Зарегистрирован: Вс янв 31, 2010 12:12 am

Сообщение Qwertiy »

Max Diesel писал(а):2 - предположительно при факте восприятия for'а как команды расположение будет другим[/color]
Я имел в виду, что сначала строки идут через одну пустую, но в конце сначала идут 2 строки без пустой между ними, а затем 3...
Не очень представляю, пичём тут восприятие как команды.
Аватара пользователя
Max Diesel
Автор программы
Сообщения: 3431
Зарегистрирован: Пт окт 12, 2007 3:26 pm
Контактная информация:

Сообщение Max Diesel »

Qwertiy писал(а):Не очень представляю, пичём тут восприятие как команды.
Для ДОС-команд запуск несколько иной - через командный интерпретатор.
Ответить