
Emacsモードでctrl+キーボードの組み合わせを使用して行の末尾に移動し、同時にeキーEndを使用して同じことを行うにはどうすればよいですか? sttyでどのように設定しますか? Linux端末からコピーした組み合わせを試しました。
stty eol M-^?
ただし、押すとキーボードEndに入ります。F
システムはminicom端末の既存のATT System Vです。私の用語は386ATです。これがterminfo定義です。
# Reconstructed via infocmp from file: /usr/share/lib/terminfo/3/386AT
AT386|at386|386AT|386at|at/386 console @(#)386.ti 1.4,
am, bw, eo, xon,
colors#8, cols#80, lines#25, ncv#3, pairs#64,
acsc=``aaffggjYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[2J\E[H,
cr=\r, cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB,
cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%02d;%p2%02dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[1M,
ed=\E[J, el=\E[K, flash=^G, home=\E[H, ht=\t,
ich=\E[%p1%d@, ich1=\E[1@, il=\E[%p1%dL, il1=\E[1L,
ind=\E[S, indn=\E[%p1%dS, invis=\E[9m, is2=\E[0;10m,
kbs=\b, kcbt=^], kclr=\E[2J, kcub1=\E[D, kcud1=\E[B,
kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kend=\E[Y,
kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ,
kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV,
kf8=\EOW, kf9=\EOX, khome=\E[H, kich1=\E[@, knp=\E[U,
kpp=\E[V, krmir=\E0, op=\E[0m,
pfx=\EQ%p1%{1}%-%d'%p2%s', rev=\E[7m, rin=\E[S,
rmacs=\E[10m, rmso=\E[m, rmul=\E[m, setab=\E[4%p1%dm,
setaf=\E[3%p1%dm,
setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p6%t;1%;%?%p9%t;12%;%?%p7%t;9%;m,
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
答え1
このeol
設定は、一部の行編集バッファの末尾に移動するキーではなく、tty行規則の設定です。
独自の行エディタ(例:cat
このsed
エディタにはカーソル位置決め機能はありません。編集するstty erase
バックスペース()、Ctrl + W(stty werase
)、Ctrl + U()を使用して実行できstty kill
、一部のシステムではより多くのキーを使用することもできます。
これはカーネルのttyデバイスドライバ自体で行われ、これらの文字はアプリケーション(cat
、...)sed
には表示されません。
このeol
設定では、ドライバは^J
改行文字(または改行文字とも呼ばれる)内の他の(追加)文字を行末文字として認識するように指示します。文字が入力されると、Line Rulesはこれまで入力した文字を読み取りアプリケーションに送信します。
たとえば、一度に1行ずつ入力するのではなく、一度に1単語ずつテキストを入力するには、次のようにします。
stty eol ' '; cat
スペースバーを押すたびに、cat
入力したテキスト(スペース文字を含む)が出力されることがわかります。
独自の行エディタを実装するコマンドプロンプトにある場合、Endカーソルを現在のバッファの末尾に移動することは、stty
そのコマンドの特定の構成(存在する場合)ではなく実行されます。
たとえば、zsh
シェルの場合は、次のように実行できます。
bindkey '^[[F' end-of-line
bindkey '^[OF' end-of-line
「F」が提案したようにキーを押すと、端末が<ESC>[F
文字シーケンスを送信すると仮定します。<ESC>OF
End
End一部のアプリケーションは行末操作に自動的にバインドされます。これを行うには、ローカルのtermcapまたはterminfo端末データベースを照会して、キーが押されたときに端末から送信された文字シーケンスを見つけます。
そのためには、$TERM
変数を使用します。そのデータベースの対応するキーエントリが端末から送信されたものと一致しない場合、この操作は機能しません。
あなたは試すことができます:
tput kend | sed -n l
キーが送信されたデータベースの内容を表示するにはEnd(tputがterminfoを使用している場合)、または/ etc / termcapで$ TERMエントリを確認してください(termcapを使用している場合)。ミニコム(またはそれをホストするターミナルエミュレータ)の動作とよりよく一致するものを見つけることができます。
新しい情報に基づいて編集
したがって、おそらくminicom
最新の端末と同じデバイスで実行され、xterm
シリアルを介して通信しています。シリアルラインのもう一方の端でgetty
at386コンソール(実際には古いPCベースのAT&Tシステム用の内部コンソールドライバだと思います)を実行しているとしましょう。これは現代のxtermとは遠い。
多くの点で、従来のAT&Tシステムと同じくらい現代的なSolarisシステムを見ると、xterm
terminfoには項目がありますが、そのkend
機能が欠けています。
あなたができることは、端末のterminfo定義をminicom(infocmp > file
)を実行しているマシンにアップロードし、それをSysVマシンに転送してそこでコンパイルすることです(そしてそこと同じ値にtic
設定し、環境変数を事前にのように設定します。 Curssバージョンが古すぎて機能しない場合は、AT&Tシステム用のvt100エントリを代わりに使用できます。端末で編集して名前を変更してから、もう一度使用してください。$TERM
TERMINFO
~/.terminfo
kend=\EOF
tic
良い:
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
そして、以下を追加してください:
if [ "`tty`" = "the-serial-device" ] && [ "$TERM" = at386 ]; then
TERMINFO=$HOME/.terminfo
TERM=my-term
export TERM TERMINFO
fi
~/.profile
(シリアル経由でログインしたときのthe-serial-device
出力はどこにありますか?)tty