Mengapa pengaturan 'mi' di LS_COLORS mempengaruhi penyelesaian postgresql dan python tab?

Aug 18 2020

Jadi saya memiliki LS_COLORSpengaturan khusus , dan di dalamnya saya memiliki yang berikut:

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

miadalah untuk file yang hilang di kolom kanan ketika dalam tampilan daftar ls, dan oruntuk file yang hilang dalam mode ls normal, atau di sebelah kiri dalam mode daftar. Pengaturan di atas sehingga keduanya berkedip kuning cerah. Saya mengaturnya seperti itu karena saya pikir memiliki flash akan menjadi cara paling jelas untuk mengingatkan diri saya akan link yang hilang, yang berfungsi dengan baik.

Tapi masalahnya adalah ketika saya menjalankan python dalam mode interaktif dan meminta tab selesai, misalnya import rekemudian re.[tab key]. Alih-alih hanya mendapatkan daftar normal apa pun yang ada midi LS_COLORSdalamnya diterapkan pada saran. Jadi saya berakhir dengan layar yang penuh dengan teks berkedip yang membuatnya tidak mungkin untuk dibaca pada tingkat yang wajar.

Hal yang sama terjadi ketika saya menggunakan penyelesaian tab di konsol mode interaktif postgresql. Persis sama dengan python. Sebagian besar program lain atau serupa baik-baik saja, dan penyelesaian bash baik-baik saja.

Apakah program-program ini menggunakan lsuntuk memformat keluaran mereka? Saat ini saya baru saja mengubah mikembali ke sesuatu yang lain untuk mengatasi masalah tersebut, dan itu tidak terlalu penting karena saya masih dapat melihat tautan rusak lewat or. Tetapi saya akan sangat penasaran untuk mengetahui mengapa ini terjadi dan apakah saya bisa menghentikannya.

Jawaban

1 Quasímodo Aug 18 2020 at 23:24

GNU readline sedang digunakan, seperti yang dapat dikonfirmasi dengan mendaftar modul default :

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

Readline, pada gilirannya, menggunakan LS_COLORS. Dari man 3 readline,

color-stats (Off)
Jika disetel ke On, garis baca menampilkan kemungkinan penyelesaian menggunakan warna berbeda untuk menunjukkan jenis filenya. Definisi warna diambil dari nilai variabel lingkungan LS_COLORS.

Jika Anda tidak yakin, kembali ke sesi dan ketik python interaktif

>>> 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

Setelah menonaktifkan berwarna-statistik, yang penyelesaian disarankan ( bs(, ll(, dll) harus pada warna normal dari terminal. Awalan amasih mewarisi warna dari LS_COLORSdan Anda juga dapat menonaktifkannya dengan

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