readline - 行末に達したときに改行ではなくキャリッジリターンだけを実行するのはなぜですか?

readline - 行末に達したときに改行ではなくキャリッジリターンだけを実行するのはなぜですか?

私は以下を使用してPythonアプリケーションを開発しました。ガイドライン対話型コマンドラインインターフェイスを作成するモジュール。これガイドラインモジュールの目的読書船コマンドライン管理:完了、履歴...

私の問題は、私のコンピュータでアプリケーションを使用しようとしていますが、長すぎる行を入力すると、行の先頭に戻って新しい行を追加しないことです。だから私はその行自体に書いた。これにより、ナビゲーションと編集履歴コマンドが本当に難しくなりました。それでも私の開発ボックスではうまくいきます。

Pythonを起動するシェルをbashからshに変更しようとしましたが、違いはありませんでした。使用する端末をターミネーターからXTermまたはUXTermに変更してみましたが、違いはありませんでした。

その起源についてどのように推測し、この問題を解決するには?

編集する: これはスクリーンショットです。エラーの原因が見つかりましたが、端末行の長さと比較して色文字がうまく処理されていないために発生すると推測されます。

スクリーンショット

スクリーンショットの最初の部分(緑色の線の上)では、色付きの先端(ピンク/が見える)を使用し、行の終わりに達すると先端を上書きし始めます。書き続けると、元の最初の行を完全に上書きし、行全体を書き込んでから新しい行を入力し始めることができます。

2番目の部分(緑色の線の下)では、行の最後まで書きましたが、適切な瞬間に改行が表示されます。

この行動の理由は何ですか? (前述したように、すべての構成でこの現象が発生するわけではありません。)どのように解決しますか?

答え1

これは私の色の使用から来ています。次の文字列を使用してテキストに色を割り当てます。

class colors:
    HEADER = '\033[95m'
    OKBLUE = '\033[94m'
    OKGREEN = '\033[92m'
    WARNING = '\033[93m'
    FAIL = '\033[91m'
    ENDC = '\033[0m'

\001と文字を追加しましたが、\002今動作します!

class colors:
    HEADER = '\001\033[95m\002'
    OKBLUE = '\001\033[94m\002'
    OKGREEN = '\001\033[92m\002'
    WARNING = '\001\033[93m\002'
    FAIL = '\001\033[91m\002'
    ENDC = '\001\033[0m\002'

関連ソリューションの投稿:https://stackoverflow.com/questions/8806643/colorized-output-breaks-linewrapping-with-readline/8916332#8916332

関連情報