Essa configuração de eol
não é para a chave que levaria você ao fim de algum buffer de edição de linha, essa é uma configuração da disciplina de linha tty.
É pelo seu editor de linhas muito básico, aquele usado ao inserir entrada para aplicativos (como cat
, sed
) que não possuem seu próprio editor de linhas. Esse editor não tem posicionamento de cursor, a única edição que ele pode fazer é através de backspace ( stty erase
), Ctrl + W ( stty werase
) e Ctrl + U ( stty kill
) possivelmente mais em alguns sistemas.
Isso é feito no próprio driver de dispositivo tty no kernel, os aplicativos ( cat
, sed
...) não vêem esses caracteres.
A configuração eol
é apenas para informar que o driver reconhece um caractere diferente (adicional) do avanço de linha (aka newline aka ^J
) como o caractere de término de linha. Ao inserir esse caractere, a disciplina de linha enviaria os caracteres inseridos até o aplicativo de leitura.
Por exemplo, para inserir texto uma palavra por vez, em vez de uma linha por vez, você poderia fazer:
stty eol ' '; cat
E você veria que cada vez que você pressionasse espaço, cat
produziria o texto digitado (incluindo esse caractere de espaço).
Se você está no prompt de um comando que implementa seu próprio editor de linhas, fazer End mover o cursor para o final do buffer atual não seria feito via stty
, mas por configuração específica desse comando (se houver).
Por exemplo, com o shell zsh
, isso seria feito com:
bindkey '^[[F' end-of-line
bindkey '^[OF' end-of-line
Assumindo que seu terminal envia a seqüência de caracteres <ESC>[F
ou <ESC>OF
quando você pressiona a tecla End como seu "F" sugere.
Algumas aplicações ligam automaticamente End à sua ação _end-of_line_. Para isso, eles consultam os bancos de dados de terminais termcap ou terminfo locais para descobrir qual sequência de caracteres seu terminal envia quando pressiona a tecla.
Para isso, eles usam a variável $TERM
. Se a entrada para aquela chave naquele banco de dados não corresponder ao que o seu terminal envia, então isso não funcionará.
Você pode tentar:
tput kend | sed -n l
Para ver o que as coisas do banco de dados a chave End envia se seu tput usa terminfo ou verifica sua entrada $ TERM em / etc / termcap se estiver usando termcap. Você pode encontrar uma entrada que corresponda melhor ao seu comportamento do minicom (ou do emulador de terminal que o hospeda).
Editar com base em novas informações
Portanto, o mais provável é que você esteja executando minicom
em um terminal xterm
-like moderno e se comunicando por serial. Na outra extremidade da linha serial, getty
assume que você está executando um console at386 (que, na minha opinião, é o driver do console interno dos antigos sistemas AT & T baseados em PC). Isso está muito longe de um xtermo moderno.
Olhando para um sistema Solaris aqui que, em muitos aspectos, é tão moderno quanto seu antigo sistema AT & T, há uma entrada xterm
no terminfo, mas não possui a capacidade kend
.
O que você pode fazer é carregar a definição terminográfica do seu terminal na máquina em que você executa o minicom ( infocmp > file
), transferi-lo para a máquina SysV e tentar compilá-lo com tic
(e set $TERM
com o mesmo valor de lá, defina a variável de ambiente TERMINFO
de antemão para algo como ~/.terminfo
se você não for administrador lá). Se isso não funcionar, porque a versão curses é muito antiga, você poderia usar a entrada vt100 do sistema AT & T, e apenas editar no kend=\EOF
do seu terminal, mudar o nome e usar tic
novamente.
Como:
cat > my-term.info << \EOF
my-term|My VT100 compatible terminal with an end-key,
am, mir, msgr, xenl, xon,
cols#80, it#8, lines#24, vt#3,
acsc=''aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
clear=\E[H\E[J$<50>, cr=\r, csr=\E[%i%p1%d;%p2%dr,
cub=\E[%p1%dD, cub1=\b, cud=\E[%p1%dB, cud1=\n,
cuf=\E[%p1%dC, cuf1=\E[C$<2>,
cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>,
el1=\E[1K$<3>, enacs=\E(B\E)0, home=\E[H, ht=\t,
hts=\EH, ind=\n, ka1=\EOq, ka3=\EOs, kb2=\EOr, kbs=\b,
kc1=\EOp, kc3=\EOn, kcub1=\EOD, kcud1=\EOB,
kcuf1=\EOC, kcuu1=\EOA, kent=\EOM, kf0=\EOy, kf1=\EOP,
kf10=\EOx, kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt,
kf6=\EOu, kf7=\EOv, kf8=\EOl, kf9=\EOw, rc=\E8,
rev=\E[7m$<2>, ri=\EM$<5>, rmacs=^O, rmkx=\E[?1l\E>,
rmso=\E[m$<2>, rmul=\E[m$<2>,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t^N%e^O%;,
sgr0=\E[m^O$<2>, smacs=^N, smkx=\E[?1h\E=,
smso=\E[1;7m$<2>, smul=\E[4m$<2>, tbc=\E[3g, kend=\EOF
EOF
TERMINFO="$HOME/.terminfo" export TERMINFO
mkdir -p "$TERMINFO"
tic my-term.info
E adicione:
if [ "'tty'" = "the-serial-device" ] && [ "$TERM" = at386 ]; then
TERMINFO=$HOME/.terminfo
TERM=my-term
export TERM TERMINFO
fi
para o seu ~/.profile
(onde the-serial-device
é o que quer que tty
produza quando você faz o login pela serial.