LS_COLORSで「mi」を設定するとpostgresqlとpythonタブの補完に影響するのはなぜですか?

Aug 18 2020

だから私はカスタムLS_COLORSセットアップを持っています、そしてその中で私は以下を持っています:

mi=05;01;33:
or=05;01;33:

miは、lsのリストビューで右側の列にorある欠落ファイル用であり、通常のlsモードでは欠落しているファイル用であり、リストモードでは左側にあります。上記は、両方が明るい黄色で点滅するように設定しています。リンクがないことを自分に警告する最も明白な方法はフラッシュを使用することだと思ったので、そのように設定しました。これはうまく機能します。

私は例えば、対話モードでのpythonを実行して、タブ補完をお願いする場合でも、問題があるimport re、その後re.[tab key]。代わりに、ちょうどであるものは何でも、通常のリスト取得のmi中でLS_COLORSの提案に適用されますが。そのため、画面が点滅するテキストでいっぱいになり、境界線を妥当な速度で読むことができなくなります。

postgresqlインタラクティブモードコンソールでタブ補完を使用した場合も同じことが起こります。Pythonとまったく同じです。ただし、他のほとんどのプログラムなどは問題なく、bashの完了も問題ありません。

これらのプログラムはls、出力のフォーマットに使用していますか?私は現在mi、問題を回避するために別の何かに戻ったばかりですが、を介して壊れたリンクをまだ見ることができるので、それは実際には問題ではありませんor。しかし、なぜこれが起こっているのか、そして私がそれを止めることができるかどうかを知りたいと思います。

回答

1 Quasímodo Aug 18 2020 at 23:24

デフォルトのモジュールをリストすることで確認できるように、 GNUreadlineが使用されています。

$ python3
>>> import sys
>>> sys.modules.keys()
dict_keys([...,'readline', 'atexit', 'rlcompleter'])

Readlineは、順番に、を使用しLS_COLORSます。からman 3 readline

Colored-stats(Off)
Onに設定されている場合、readlineは、ファイルタイプを示すために異なる色を使用して可能な補完を表示します。色の定義は、LS_COLORS環境変数の値から取得されます。

確信が持てない場合は、インタラクティブなPythonセッションに戻って、次のように入力してください。

>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await
>>> import readline
>>> readline.parse_and_bind("set colored-stats off")
>>> a<TAB><TAB>
abs(     all(     and      any(     as       ascii(   assert   async    await

着色-統計を無効にした後、提案補完(bs(ll(など)は、端末の正常な色であるべきです。プレフィックスはa引き続き色を継承しLS_COLORS、同様にで無効にすることができます

readline.parse_and_bind("set colored-completion-prefix off")