次のbash
関数を使用して、コマンドの後に新しい行を確保します。
user at terra in ~
$ echo "m"
m
user at terra in ~
$ echo -n "m"
m↵
そして、.bashrc
の関数自体:
function Prompt_command {
# get cursor position and add new line if we're not in first column
echo -en "\033[6n" && read -sdR CURPOS
[[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$Prompt_reset"
}
Prompt_COMMAND=Prompt_command
Prompt_COMMAND
を設定すると、MCは10〜30秒で起動しますが、コメントするとほぼ瞬時に起動します。
はなぜですか。また、この問題を無効にせずにこれを修正するにはどうすればよいですか。
strace
、13:59:06
を見回したほうがいいですが、そこには9秒の遅延があります...(通常 strace
比較のために)
MCは端末でbashを実行します。 TERM
は、MCが実行されている端末と同じ値に設定されたままですが、下位シェルと端末の間のいくつかの交換をバッファリングまたはフィルタリングしているように見えます。
BashがMCの直接サブプロセスとして実行されている場合は、さまざまなカスタマイズを使用することをお勧めします。 MCの下位シェルにはプロンプト行しか表示されないため、カーソル位置を気にする必要はありません。体系的に改行を追加するだけです。
if [[ "$(ps -o comm= -p $PPID)" == "mc" ]]; then
PS1=$'\n'$PS1
else
function Prompt_command {
# get cursor position and add new line if we're not in first column
echo -en "\033[6n" && read -sdR CURPOS
[[ ${CURPOS##*;} -gt 1 ]] && echo "$(tput setab 1)↵$Prompt_reset"
}
Prompt_COMMAND=Prompt_command
fi
私の知る限り、stdinからの入力を待っています。
`3021 13:58:57 read(0, <unfinished ...>
3019 13:59:06 <... select resumed> ) = 0 (Timeout)`
あなたはそれが何をしているのかを見つける必要があります。しかし私の推測:
read -sdR CURPOS
このread
を削除して、問題の修正やタイムアウトの変更を試みることができます