Por que o cmd.exe do Windows está limitado a 80 caracteres de largura?


104

Eu amo esticar meu terminal no Unix. Qual é a história ou razão por trás da linha de comando lame do Windows?


2
É uma escolha, assim como muitas outras coisas são escolhas. Se você tem um tamanho fixo, é mais fácil projetar "sua tela" porque você conhece exatamente os limites. As desvantagens são óbvias, sendo que qualquer que seja o tamanho escolhido, sempre estará errado para alguém ou algo. A tela atual do Windows CMD era na verdade a única tela naquela época. E não havia muitas resoluções disponíveis, e muito poucas de alta resolução para esse assunto.
tvCa

Respostas:


147

Não é. Você pode clicar com o botão direito do mouse na barra de título, selecionar propriedades e, na guia "Layout", alterar o tamanho do buffer da tela (largura da linha e rolar para trás) e o tamanho da janela (tamanho da janela de visualização). Se você iniciou o cmd a partir de um atalho, pode salvar essas configurações para sessões futuras.


2
Não se esqueça da fonte / cor. Nada é tão bom quanto voltar a algumas telas verdes retrô quando abro meu prompt de comando. 8 ^ D
Dillie-O

13
Quer dizer, "nada além de mudar a fonte para consolas
Jimmy

5
Eu sempre pulo e defino a largura para 180 e o scrollback para 9999. Não é como se você precisasse disso com muita frequência, mas nunca tive problemas (mesmo nos dias de máquinas de 128 MB e na única vez que você precisa, você REALMENTE ficará feliz por configurá-lo de antemão. A largura é uma preferência pessoal, não gosto de ver quebra de linha do meu compilador, exceto em condições extremas, mas outros nunca gostam de rolar.
Bill K

4
Aumentar a altura do buffer de tela é muito subestimado. Esse tipo de rolagem é muitas vezes necessário para ser capaz de ler totalmente a saída de um programa na tela (a menos que você use MAIS).
Codificação com estilo

22
Bem, sim ... mas não. Você não pode redimensionar a janela arbitrariamente arrastando a borda da janela e aqui estamos nós em 2012 e ainda não mudou.
Alex B

108

Se você tem fobia de rato, também pode simplesmente digitar isto dentro da janela cmd:

mode <cols>,<lines>
mode 80,25
mode 120,50
etc.

11
Isso foi muito útil para lidar com uma chamada de sistema para "cmd / c ..." em um aplicativo que verifica o tamanho da janela para formatar sua saída. Acabei de lançar um "modo 200,50 &&" antes da ligação e a vida está boa
Thomas

Você perde a rolagem vertical, pelo menos no Win7
golimar 01 de

44

Não é limitado.

  1. Execute cmd.exe
  2. Clique no ícone no canto superior esquerdo da tela.
  3. Selecione Propriedades
  4. Selecione a guia Layout.
  5. Defina as larguras do buffer e da janela como desejar.
  6. Clique OK
  7. Selecione Salvar propriedades para futuro ...
  8. Clique OK.

Você pode querer verificar o Console . É um aplicativo de código aberto que permite executar vários shells em um ambiente com guias. Você também pode definir a transparência alfa das cascas.


17

RE: Porque a MS valoriza a "compatibilidade com versões anteriores" em relação a muitas coisas e, neste caso, suspeito que seja uma crença equivocada que de alguma forma enervará as pessoas se elas não tiverem sua janela padrão 80 de largura.

A compatibilidade com versões anteriores funciona muito mal, no entanto. Não creio que a Microsoft tenha sido muito meticulosa quanto à sua implementação, e acredito que a Microsoft seja o garoto-propaganda por garantir que versões mais recentes não funcionem em versões mais antigas. Muitas coisas não funcionam bem no COMMAND.COM, o que sabota consideravelmente a utilidade que possui, sem mencionar que você tem que entrar no DOSONLY para fazer alguns programas rodarem corretamente, além disso, a Microsoft vem removendo comandos úteis. Honestamente, não posso imaginar que a Microsoft tenha "compatibilidade com versões anteriores" em alta conta.

Além disso, acho que a verdadeira razão pela qual o comprimento da linha está em um padrão de 80 colunas é porque a maioria dos programas de linha de comando, etc. opera sob a suposição de que o usuário está limitado a um prompt de 80 colunas, o que significa que aumentar a largura pode causar erros de formatação ou pior, possivelmente quebram os programas completamente.

Como jmucchiello mencionou, MODE funcionará bem para redimensionar a janela, se desejar.

Configura dispositivos do sistema.

Porta serial: 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]

Status do dispositivo: MODE [dispositivo] [/ STATUS]

Impressão de redirecionamento: MODE LPTn [:] = COMm [:]

Selecione a página de código: MODE CON [:] CP SELECT = yyy

Status da página de código: MODE CON [:] CP [/ STATUS]

Modo de exibição: MODE CON [:] [COLS = c] [LINES = n]

Taxa de digitação: MODE CON [:] [RATE = r DELAY = d]

Se você tiver o DOSONLY habilitado em seu CONFIG.NT, entretanto, quando você abrir o COMMAND.COM, ele herdará uma resolução de linha no estilo DOS apropriada do cmd.exe, mas você não pode chamar MODE de dentro do COMMAND.COM. Se desejar redimensionar dentro de COMMAND.COM, você terá que usar instruções de montagem de 16 bits, assim:

Resolução de linha de 80 x 50 (sem framebuffer, sem SVGA, com suporte virtualmente universal).

DEPURAR
A100
MOV AX, 1112
INT 10
INT 20

G
Q

Resolução de linha 132x60 (Sem framebuffer, requer SVGA. Não funciona em placas ATI gfx, geralmente funciona em placas nVidia gfx, afaict sempre funciona em placas gfx integradas da Intel.)

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

G Q

Se você inserir isso em seu COMMAND.COM, ele fornecerá a resolução especificada. (Aviso: se o seu monitor for antigo o suficiente para não suportar o modo, você pode acabar destruindo-o. Observação lateral: se você pode executar o Windows, seu monitor deve funcionar bem. Aviso de isenção de responsabilidade: Ênfase em deveria, e você foi avisado , portanto, não é meu problema se o seu monitor falhar. ;-) No entanto, se você usar isso sem DOSONLY habilitado, COMMAND.COM irá redimensionar de volta ao tamanho anterior assim que o aplicativo (neste caso, a menos que você o tenha escrito em um arquivo e executado isso, DEBUG) sai.

Alternativamente, você pode usar o MODE.COM do FreeDOS, que será executado corretamente no COMMAND.COM definido como DOSONLY. Você pode extraí-lo da imagem do disco no site oficial (freedos.org) ou obtê-lo emhttp://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/dos/mode/2005/ .

Novo modo FreeDOS de Eric Auer 2003-2005. Licença: GPL. (versão 12 de maio de 2005)
MODE [dispositivo] [/ STA [TUS]] (mostra o status de um ou todos os dispositivos)
MODE LPTn [:] cols [, [linhas] [, repetir]] (cols ou cpi, 6/8 lpi, repetir p ou n)
MODE LPTn [:] [COLS = ...] [LINES = ...] [RETRY = ...] (repetir: p infinito / n nenhum)
MODE LPTn [:] = [COMn [:] | NUL] (redirecionar os dados da impressora para a porta serial ou NUL)
MODE COMn [:] baud, paridade, dados, parar, tentar novamente (valores vazios permitidos)
MODE COMn [:] [BAUD [HARD] = ...] [PARIDADE = ...] [DADOS = ...] [PARAR = ...] [TENTAR NOVAMENTE = ...]
  O baud pode ser abreviado para um prefixo exclusivo, a paridade pode ser o / e / n / s / m, o
  os 2 últimos significam espaço / marca, os dados podem ser 5..8, parada 1..2. A nova tentativa foi IGNORADA!
  PLANEJADO: Tentar novamente b / e / r -> ocupado / erro / pronto se ocupado, p / n infinito / sem nova tentativa.
MODE CON [:] [CP | CODEPAGE] [/ STA [TUS]] (FreeDOS DISPLAY deve ser carregado)
MODE CON [:] [CP | CODEPAGE] REF [RESH] (precisa de DISPLAY)
MODE CON [:] [CP | CODEPAGE] SEL [ECT] = número (precisa de DISPLAY)
MODE CON [:] [CP | CODEPAGE] PREP [ARE] = ((página de códigos) nome do arquivo) (precisa de DISPLAY)
  Use PREP = ((, cp2, cp3,, cp5) ...) para preparar páginas de código em outros buffers.
MODO [40 | 80 | BW40 | BW80 | CO40 | CO80 | MONO] [, linhas] (as linhas podem ser 25, 28, 43 ou 50)
  Use 8, 14 ou 16 como valor de 'linhas' se quiser apenas alterar a fonte.
MODO [CO40 | CO80 | ...], [R | L] [, T] (deslocar CGA para a esquerda / direita, T é o modo interativo)
MODE CON [:] [NUMLOCK | CAPSLOCK | SCROLLLOCK | SWITCHAR] = valor
  O valor pode ser: + ou - para os bloqueios ou um caractere para switchar.
MODE CON [:] [COLS = ...] [LINES = ...] (os valores possíveis dependem do seu hardware)
MODE CON [:] [RATE = ...] [DELAY = ...] (taxa padrão 20, atraso padrão 1)
  A taxa pode ser 1..32 para 2..30 car / seg, o atraso pode ser 1..4 para 1/4..4 / 4 seg.

Pelas mesmas razões que com o código ASM que forneci, a menos que você execute-o em COMMAND.COM com DOSONLY adicionado ao seu arquivo CONFIG.NT, a janela retornará imediatamente ao seu tamanho anterior assim que MODE.COM sair.

Por último, como outros afirmaram, também é possível modificar essas configurações simplesmente clicando com o botão direito do mouse na barra de título do prompt de comando e modificando Propriedades -> Layout. Da mesma forma, você pode definir a resolução de qualquer atalho para CMD.EXE e arquivos em lote (clique com o botão direito no atalho -> Propriedades -> Layout). Isso só funciona para CMD.EXE, mas não para COMMAND.COM.


14

Um comando simples para corrigir o tamanho da janela que uso o tempo todo:

wmic

Isso abrirá a linha de comando da Instrumentação de gerenciamento do Windows e removerá os limites de tamanho. Em seguida, basta fechá-lo com Ctrl+ C.


6

Não sei a história por trás disso, mas este item da lista de desejos do autor do PuTTy é uma postagem interessante que explica os obstáculos técnicos envolvidos com qualquer tipo de substituição de cmd.exe que não seja coxo:

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

Você não mencionou que está procurando por um substituto, mas se sim, você também pode verificar algumas das substituições de cmd.exe como Console 2 ou JP Software's Take Command etc. Eu também tive algumas boas experiências com PuTTy- Cyg, que permite usar o PuTTy como um shell cygwin.


6

Embora a largura não seja limitada como mostram outras respostas, sempre achei estranho que se possa arrastar e redimensionar a altura com o mouse, mas não a largura .

Acho que a largura padrão de 80 caracteres está relacionada à compatibilidade com programas antigos que presumem que o terminal não terá mais do que 80 caracteres. Não acho que esse seja um motivo realista por mais ou menos uma década.


9
Tanto a largura quanto a altura podem ser redimensionadas, apenas acontece que a largura padrão da janela é igual à largura do buffer. Você não pode tornar a janela maior do que o buffer, então a única opção (com a configuração padrão de 80 colunas) é reduzir a largura.
efotinis

4

Como outros apontaram, ele não está limitado a 80 caracteres de largura, mas meu palpite sobre o motivo do padrão de 80 caracteres é que ele sobrou da época do DOS, em que os monitores CRT tinham 80 caracteres de largura.

Veja também


O monitor moderno pode ter mais de 80 caracteres no modo de texto?
macropas

talvez você precise estar executando um modo framebuffer para fazer isso funcionar (mas posso estar errado, já faz um tempo).
andersop

Existem alguns modos SVGA com 132 caracteres de largura sem usar um modo framebuffer, mas eles são suportados de forma bastante aleatória. Um desses modos está listado em minha resposta.
Codificação com estilo

3
É mais do que isso: o motivo pelo qual a IBM fez seus monitores CRT com 80 colunas de largura era que seus cartões perfurados tinham 80 colunas de largura.
dan04,

2

Você também pode usar um aplicativo de terminal diferente, como o Console2 , que permite redimensionar a janela o quanto quiser (entre outras coisas, como transparência e a capacidade de usar qualquer fonte que desejar). É um ótimo aplicativo, mudei para ele e agora só uso cmd.exequando absolutamente necessário.


1

Como ele vai rolar da esquerda para a direita e também para cima e para baixo, a primeira coisa que faço em um sistema é definir minha largura como 180 e salvá-la. Isso geralmente é o suficiente para que os rastreamentos de pilha não precisem ser agrupados na maior parte, mas não tanto que você esteja perdendo um monte de espaço.

Enquanto você está nisso, defina o tamanho vertical (buffer de rolagem) para todos os 9's. Você ficará feliz por ter feito isso algum dia.


1

Porque a MS valoriza a "compatibilidade com versões anteriores" em relação a muitas coisas e, neste caso, suspeito que seja uma crença equivocada que, de alguma forma, enervará as pessoas se elas não tiverem sua janela padrão 80 de largura.

É claro que pode ser que ele tenha sido programado para uma largura fixa de 80 caracteres, quando isso era praticamente universal, e as configurações de propriedade adicionais eram um pouco complicadas.


1

É limitado. Confira. (Quero dizer tamanho da janela NÃO buffer)

Você descobrirá que a largura máxima que pode definir é limitada, mas varia de acordo com a resolução da tela. Se sua resolução for definida para 1024 x 768, você descobrirá que só pode chegar a 128 na largura do prompt de comando. 128/1024 = 0,125

você descobrirá que essa proporção é consistente em todas as áreas. Eu tenho uma sessão RDP rodando em 2.000 x 768 (em dois dos meus três monitores) e obtenho uma largura máxima de 250.

Agora, isso na verdade acabou sendo um pouco maior do que o tamanho do seu monitor real, mas eu tenho três monitores, todos executando desktops individuais. (em essência, 3 resoluções de 1024x768) e se eu quiser fazer algo TÃO SIMPLES como esticar um prompt de comando em 2 ou mais monitores, NÃO POSSO. (Eu quero ao fazer coisas com caminhos muito longos (diruse.exe / etc.) ...

-c


2
Se você diminuir o tamanho da fonte, poderá obter tamanhos de janela (relativamente) maiores. Acabei de obter 300 de largura em uma tela de 1600x1200.
Michael Myers

Você ainda pode aumentar a largura da linha e rolar a janela. Eu fiz o meu de 160 ou 180 de largura desde os dias de VGA.
Bill K

0

-1

Porque melhorar a usabilidade e funcionalidade de qualquer coisa que o desenvolvimento do tipo Unix / GNU requer irá prejudicar o Windows como uma plataforma comercial para parceiros da Microsoft. Evitar isso significa que os produtos de outras grandes empresas para desenvolvedores, como terminais aprimorados, e outros produtos gerais de terceiros, como processadores de texto, reprodutores de vídeo, etc., não estão competindo com o software Unix / GNU existente. Sem isso, o Windows não seria uma plataforma lucrativa e a Microsoft perderia seu monopólio de desktop.

É por isso que o terminal é uma merda, não há API POSIX, não há suporte C99 no MSVC e a lista continua. Para esclarecer, as tecnologias e desenvolvimento Unix / GNU comuns são intencionalmente sem suporte, de modo que as grandes empresas de software comercial não precisam competir com elas.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.