Почему Windows cmd.exe ограничен 80 символами в ширину? - PullRequest
101 голосов
/ 26 ноября 2008

Я люблю растягивать свой терминал на Unix. Какова история или причина командной строки windows lame?

Ответы [ 13 ]

146 голосов
/ 26 ноября 2008

Это не так. Вы можете щелкнуть правой кнопкой мыши строку заголовка, выбрать свойства и на вкладке «Макет» изменить размер буфера экрана (ширина линии и прокрутка) и размер окна (размер области просмотра). Если вы запустили cmd с ярлыка, вы можете сохранить эти настройки для будущих сеансов.

107 голосов
/ 17 декабря 2008

Если вы страдаете фобией мыши, вы можете просто ввести это в окне cmd:

mode <cols>,<lines>
mode 80,25
mode 120,50
etc.
43 голосов
/ 26 ноября 2008

Это не ограничено.

  1. Запустить cmd.exe
  2. Нажмите на значок в верхнем левом углу экрана.
  3. Выбрать свойства
  4. Выберите вкладку Layout.
  5. Установите ширину буфера и окна на ваше усмотрение.
  6. Нажмите ОК
  7. Выберите Сохранить свойства для будущего ...
  8. Нажмите ОК.

Возможно, вы захотите проверить Консоль . Это приложение с открытым исходным кодом, которое позволяет запускать несколько оболочек в среде с вкладками. Вы также можете установить альфа-прозрачность оболочек.

17 голосов
/ 30 июня 2009

RE: Потому что MS во многих случаях ценит "обратную совместимость", и в этом случае я подозреваю, что это неуместное убеждение, что это как-то нервирует людей, если у них нет стандартного окна шириной 80.

Обратная совместимость работает довольно ужасно, хотя. Я не думаю, что Microsoft достаточно тщательно отреагировала на их реализацию, и я верю, что Microsoft - это плакат для того, чтобы новые версии не работали на старых версиях. Многое не работает должным образом под COMMAND.COM, что значительно саботирует полезность, которой он обладает, не говоря уже о том, что вам нужно вводить DOSONLY, чтобы некоторые программы работали должным образом, плюс Microsoft удаляла полезные команды. Честно говоря, я не могу себе представить, что Microsoft высоко ценит «обратную совместимость».

Кроме того, я думаю, что настоящая причина, по которой длина строки составляет стандартно 80 столбцов, заключается в том, что большинство программ командной строки и т. Д. Работают в предположении, что пользователь ограничен запросом в 80 столбцов, что означает увеличение ширина может вызвать ошибки форматирования или, что еще хуже, может привести к поломке программ.

Как уже упоминал jmucchiello, MODE отлично подойдет для изменения размера окна, если вы захотите.

Configures system devices.

Serial port:       MODE COMm[:] [BAUD=b] [PARITY=p] [DATA=d] [STOP=s]
                                [to=on|off] [xon=on|off] [odsr=on|off]
                                [octs=on|off] [dtr=on|off|hs]
                                [rts=on|off|hs|tg] [idsr=on|off]

Device Status:     MODE [device] [/STATUS]

Redirect printing: MODE LPTn[:]=COMm[:]

Select code page:  MODE CON[:] CP SELECT=yyy

Code page status:  MODE CON[:] CP [/STATUS]

Display mode:      MODE CON[:] [COLS=c] [LINES=n]

Typematic rate:    MODE CON[:] [RATE=r DELAY=d]

Если вы включили DOSONLY на вашем CONFIG.NT, однако, когда вы откроете COMMAND.COM, он унаследует правильное разрешение строки в стиле DOS от cmd.exe, но вы не можете вызвать MODE изнутри COMMAND.COM. Если вы хотите изменить размер внутри COMMAND.COM, вам придется использовать 16-битные инструкции по сборке, например:

80x50 Разрешение линии (Без кадрового буфера, без SVGA, поддерживается практически повсеместно.)

DEBUG
A100
MOV AX,1112
INT 10
INT 20

G
Q

132x60 Разрешение линии (Нет кадрового буфера, требуется SVGA. Не работает на картах ATI gfx, обычно работает на картах nVidia gfx, afaict всегда работает на картах Intel интегрированных gfx.)

DEBUG
A100
MOV AX,4F02
MOV BX,010C
INT 10
INT 20

G
Q

Если вы введете это в свой COMMAND.COM, он даст вам указанное разрешение. (Предупреждение: если ваш монитор достаточно древний, чтобы не поддерживать режим, вы можете уничтожить его. Примечание: если вы можете запустить Windows, с вашим монитором все должно быть в порядке. Отказ от ответственности: акцент должен быть, и вы были предупреждены , так что это не моя проблема, если ваш монитор жарит. ;-) Однако, если вы используете это без DOSONLY, COMMAND.COM изменит размер до своего прежнего размера, как только приложение (в этом случае, если вы не записали его в файл и выполнил, DEBUG) выходит.

В качестве альтернативы вы можете использовать MODE.COM во FreeDOS, который будет правильно работать в COMMAND.COM, установленном в DOSONLY. Вы можете вытащить его с образа диска на официальном сайте (freedos.org) или получить по адресу http://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/mode/2005/.

New FreeDOS MODE by Eric Auer 2003-2005. License: GPL.   (version 12may2005)
MODE [device] [/STA[TUS]]                (show status of one or all devices)
MODE LPTn[:] cols[,[lines][,retry]]     (cols or cpi, 6/8 lpi, retry p or n)
MODE LPTn[:] [COLS=...] [LINES=...] [RETRY=...] (retry: p infinite / n none)
MODE LPTn[:]=[COMn[:]|NUL]     (redirect printer data to serial port or NUL)
MODE COMn[:] baud,parity,data,stop,retry              (empty values allowed)
MODE COMn[:] [BAUD[HARD]=...] [PARITY=...] [DATA=...] [STOP=...] [RETRY=...]
  Baud can be abbreviated to unique prefix,  parity can be o/e/n/s/m,  the
  latter 2 mean space/mark, data can be 5..8, stop 1..2. Retry is IGNORED!
  PLANNED: Retry b/e/r -> busy/error/ready if busy, p/n infinite/no retry.
MODE CON[:] [CP|CODEPAGE] [/STA[TUS]]       (FreeDOS DISPLAY must be loaded)
MODE CON[:] [CP|CODEPAGE] REF[RESH]                          (needs DISPLAY)
MODE CON[:] [CP|CODEPAGE] SEL[ECT]=number                    (needs DISPLAY)
MODE CON[:] [CP|CODEPAGE] PREP[ARE]=((codepage) filename)    (needs DISPLAY)
  Use PREP=((,cp2,cp3,,cp5) ...) to prep codepages in other buffers.
MODE [40|80|BW40|BW80|CO40|CO80|MONO][,rows]  (rows can be 25, 28, 43 or 50)
  Use 8, 14 or 16 as 'rows' value if you only want to change the font.
MODE [CO40|CO80|...],[R|L][,T] (shift CGA left/right, T is interactive mode)
MODE CON[:] [NUMLOCK|CAPSLOCK|SCROLLLOCK|SWITCHAR]=value
  Value can be: + or - for the locks or a character for switchar.
MODE CON[:] [COLS=...] [LINES=...] (possible values depend on your hardware)
MODE CON[:] [RATE=...] [DELAY=...]        (default rate 20, default delay 1)
  Rate can be 1..32 for 2..30 char/sec,  delay can be 1..4 for 1/4..4/4 sec.

По тем же причинам, что и с предоставленным мною кодом ASM, если вы не выполните его в COMMAND.COM с добавлением DOSONLY в ваш файл CONFIG.NT, окно сразу же восстановится до своего прежнего размера после выхода из MODE.COM.

Наконец, как уже говорили другие, можно также изменить эти настройки, просто щелкнув правой кнопкой мыши на строке заголовка командной строки и изменив Свойства -> Макет. Точно так же вы можете установить разрешение для любых ярлыков CMD.EXE и пакетных файлов (щелкните правой кнопкой мыши ярлык -> Свойства -> Макет). Это работает только для CMD.EXE, но не для COMMAND.COM.

13 голосов
/ 10 февраля 2016

Простая команда для исправления размера окна, который я использую все время:

wmic

Откроется командная строка инструментария управления Windows и будут удалены ограничения по размеру. Затем просто закройте его с помощью Ctrl + C .

6 голосов
/ 26 ноября 2008

Хотя ширина не ограничена, как показывают другие ответы, мне всегда было странно, что можно перетащить и изменить размер height с помощью мыши, но не width .

Я думаю, что ширина по умолчанию в 80 символов связана с совместимостью со старыми программами, которые предполагают, что ширина терминала не превышает 80 символов. Я не думаю, что это было реальной причиной в течение десятилетия или около того.

6 голосов
/ 26 ноября 2008

Я не знаю историю, стоящую за этим, но этот элемент списка пожеланий от автора PuTTy - интересный пост, объясняющий технические препятствия, связанные с заменой любого типа cmd.exe, который не является хромым:

http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/win-command-prompt.html

Вы не упоминаете, что ищете замену, но если это так, вы также можете проверить некоторые замены cmd.exe, такие как Консоль 2 или Команда принятия программного обеспечения JP и т. Д. Я ' У нас также был хороший опыт работы с PuTTy-Cyg, который позволяет использовать PuTTy в качестве оболочки Cygwin.

4 голосов
/ 26 ноября 2008

Как уже отмечали другие, он не ограничен 80 символами в ширину, но я думаю, что по умолчанию он равен 80 символам, это то, что он остался со времен DOS, когда CRT-дисплеи имели ширину 80 символов.

См. Также

2 голосов
/ 01 июля 2009

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

1 голос
/ 17 декабря 2008

ограничено. Проверьте это. (Я имею в виду размер окна, а не буфера)

Вы обнаружите, что максимальная ширина, которую вы можете установить, ограничена, но зависит от вашего разрешения экрана. Если ваше разрешение установлено в 1024 x 768, вы обнаружите, что вы можете получить только 128 в ширине командной строки. 128/1024 = 0,125

вы найдете, что это соотношение будет одинаковым по всем направлениям. У меня сеанс RDP, работающий с разрешением 2000x768 (на двух из трех моих мониторов) и максимальная ширина 250.

Теперь, это actaully, оказывается, немного больше, чем ваш размер монитора actaul, но у меня есть три монитора, на которых запущены отдельные рабочие столы. (по сути, 3 разрешения 1024x768), и если я хочу сделать что-то настолько простое, как растянуть командную строку на 2 или более мониторов, я не могу. (Я хочу, чтобы при работе с очень длинными путями (diruse.exe / etc.) ...

-c

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...