Não é possível desligar margens automáticas por termcap em Mac
Pergunta
Eu preciso transformar margens automáticas off de acordo com a seguinte declaração de Tela manual em meu Mac
Se o seu terminal é um "verdadeiro" terminal de auto-margem (que não permite a última posição na tela a ser atualizado sem rolagem da tela) considerar o uso de uma versão de seus terminais de TERMCAP que tem margens automáticas desligado.
Como você pode transformar margens automáticas fora por termcap do seu terminal?
Solução
De acordo com a XTerm controle Seqüências , esta seqüência deve fazer o que foi perguntado:
CSI ? 7 l
Isto é,
printf '\033[?7l'
O 7 é documentado como
Ps = 7 -> Wraparound Mode (DECAWM).
eo caráter final l
(L minúsculo) denota isso como um reset em vez de um set controle.
Por alguma razão, o nome terminfo para isso é mais obscuro: "margens automáticas". Esses recursos terminfo lidar com o recurso (ver terminfo (5) ):
auto_right_margin am am terminal has auto‐
matic margins
enter_am_mode smam SA turn on automatic
margins
exit_am_mode rmam RA turn off automatic
margins
Curiosamente, descrição dos terminais da vt100-nam em ncurses (que, aparentemente, ninguém usa) inicializa o terminal para use automargins margens usando essa string:
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
(os conjuntos \E[?7h
), e afirma que o terminal não use margens automáticas cancelando am
. Ele também tem a rmam
capacidades terminfo e smam
. Então, você poderia fazer isso para provar que ele funciona:
tput rmam
stty columns 999
ps -efwwwwwl
e (para o usuário comum) ver a ps
anúncio bem truncado contra a margem direita da janela do terminal.
O outro variantes vt220-nam e VT320-nam parece correcto ...
A propósito, para Mac , você usaria o terminfo nomes como rmcup
em vez do termcap RA
, porque OSX usa ncurses' tput (terminfo) em vez da variante BSD.
Além disso leitura:
-
tput
,reset
- inicializar um terminal ou consulta terminfo banco de dados - seção de história para
tput
- seção de história para
tset
Ocasionalmente alguém pergunta sobre como suprimir automargins porque eles supõem que os terminais podem pan / deslocamento para a esquerda / direita para mostrar a informação que não foi envolvido em uma nova linha. Terminais que fazem isso são raros, e OSX Terminal não é um dos os . Ele comporta-se como um subconjunto de xterm, que se emula a série de terminais DEC VT52 / VT100 / VT220 / etc. Em este pergunta, OP está preocupado / confundido sobre este parágrafo da screen
manual:
Se o seu terminal é um "verdadeiro" terminal de auto-margem (que não permite que o última posição na tela para ser atualizado sem rolagem da tela) considerar o uso de uma versão do termcap do seu terminal que tem automático margens desligado. Isso irá garantir uma atualização precisa e optimizada dos a tela em todas as circunstâncias. A maioria dos terminais têm hoje em dia "mágica" margens (margens automáticas além de última coluna utilizável). Este é o VT100 Tipo de estilo e perfeitamente adequado para a tela. Se tudo que você tem é um "Verdadeira" tela do terminal auto-margem será conteúdo para usá-lo, mas atualizar um put personagem na última posição na tela não pode ser possível até que o ecrã se desloca ou o personagem é movido para um posição segura de alguma outra forma. Este atraso pode ser encurtado usando um terminal com capacidade de inserção de caracteres.
Isso última posição na tela refere-se ao canto inferior direito dao terminal. No caso normal, se o seu cursor estiver no canto inferior direito e você imprimir um personagem, você esperaria que o visor para rolar para cima por uma linha e mostrar o caráter na linha seguinte. Também (porque os terminais podem ser implementadas de diferentes maneiras), alguns pode rolar para cima quando você imprime um caráter no última posição . faz o VT100 não fazer isso. Não só não se deslocar para cima nesse caso, mas ignora caracteres não-impressão, enquanto em a margem (ver xterm FAQ Essa descrição da embalagem é estranho, dizer mais? ). Há uma xenl
bandeira terminfo que está definida para mostrar quando o terminal faz este comportamento especial. Cerca de um terço das descrições do terminal no banco de dados do terminal tem essa bandeira. Enquanto a maioria dos que são para terminais que você provavelmente nunca encontro, ter em mente que o conselho na página de manual foi escrito para trás em uma era quando esses outros terminais eram tão provável de ser encontrado como um VT100-sósia. A mudança história inicial para a tela é pobre, mas o texto estava em segundo postagem de tela para Usenet em 1992. O lançamento inicial em 1987, disse algo parecido:
Tela Nunca escreve na última posição da tela, a menos que o boolean capacidade
LP
é encontrado na entrada do termcap do terminal. Usualmente, ecrã Não podemos prever se ou não um determinado pergaminhos terminal quando um personagem é escrito na última coluna da última linha;LP
indica que é seguro para escrever nesta posição. Note que oLP
capacidade é independente doam
(automática margens); para determinados terminais, como o VT100, é razoável a setam
, bem comoLP
na entrada termcap correspondente (O VT100 não move o cursor quando um personagem é escrito em a última coluna de cada linha).
A formulação mais tarde reflete o fato de que o sistema terminfo
foi prevalente, eo nome LP
não foi termcap nome escolhido para corresponder com xenl
(é xn
).
O ponto de tudo isso é que as tentativas screen
para converter entre programas de escrita para diferentes tipos de terminais e torná-los todos aparecem como um tipo de terminal - o que significa que ele tenta colocar um texto no visor do terminal de em todos os locais . O canto inferior direito é um problema porque alguns terminais iria rolar para cima, estragar a tentativa de escrever lá. Como solução, alguns terminais forneceu uma alternativa:
- usando um modo diferente (de inserção),
- colocar o cursor sobre o ao lado última posição do visor,
- caracteres de escrita para preencher, empurrando um personagem para a última posição, e
- sua vez insert-mode off uma vez que é feito (caso contrário um incômodo).
Cerca de dois terços das descrições no banco de dados do terminal tem a capacidade de fazer isso inserir-mode ( smir
). Que ainda não era perfeito, mas certamente valeu a pena mencionar, em 1992. Cerca de um quarto implementar um recurso semelhante semelhante ich1
. Alguns implementar ambos (e vi
poderia ficar confuso por aqueles, tentando fazer ambos os métodos).
VT100-sósias fornecer uma terceira maneira de escrever essa última posição; cheques screen
para e usa o que estiver lá.
Outras dicas
A maioria dos emuladores de terminais, incluindo o terminal mac padrão, não são "verdadeiros terminais de auto-margem", no sentido que está sendo discutido aqui - eles emular um terminal da série VT100, que teve envolvente "inteligente". Você pode verificar executando cat
e digitação até o fim da última linha -. Após digitar o último caractere, os restos cursor no final da linha (com destaque para o personagem que você acabou de digitar) até que você digite outro personagem
A única conseqüência de um 'verdadeiro terminal de auto-margem' é que um personagem não pode ser exibida no canto inferior direito (embora alguns programas são capazes de trabalhar em torno disso, deslocando um personagem no lugar com ich
/ ich1
)
Se eu entendi você está olhando para definir o recurso Autowrap de NO utilizando terminfo base de dados. Se assim for eu acredito que você pode usar o sinalizador -nam para desligá-lo - algo como vt100-nam deve fazê-lo. Você também pode verificar olhando para as páginas man para terminfo.
Se isso resolver o problema, marque isso. (^_^) Se não ... bem comentar de volta e eu vou verificar novamente para você. Felicidades!
Update: Há também um atalho que pode se aplicar a você para alternar o envoltório e desligando. Confira a folha de atalho aqui . E informações adicionais para o ecrã pode ser encontrada aqui (procurar envoltório). Você também pode verificar aqui sobre como utilizar setterm (seção 17.14 Mudando a Configurações de terminal). Verifique também aqui para exemplos de como alterar as configurações.
Boa sorte novamente. (^ _ ^)