Mengapa xterm menampilkan 256 warna (bukan xterm-256color)?

11

Bisakah seseorang menjelaskan ini? Saya menggunakan gnome-terminal. Pertama, beberapa informasi:

# echo $TERM
xterm

# infocmp xterm
Reconstructed via infocmp from file: /lib/terminfo/x/xterm
colors#8, cols#80, it#8, lines#24, pairs#64

# tput colors
8

Saya menulis skrip sederhana untuk membuat kode untuk rangkaian warna yang diperluas:

# Output file (current directory) and text.
OFILE='xterm256_colors_test.sh'
OFILE_COLORS='terminal_256_colors'
OTEXT='Sed ut perspiciatis unde omnis iste natus error sit voluptatem...'

# Clearing the contents from previous runs.
if [ -e $OFILE ] || [ -e $OFILE_COLORS ]
then
  > $OFILE
  > $OFILE_COLORS
fi

# Bang!
echo -e '#!/bin/bash\n' | tee --append $OFILE $OFILE_COLORS &> /dev/null
echo -e "\necho -e \"" | tee --append $OFILE &> /dev/null

# \x1b is a control character changing behaviour of the shell.
# It is also the <Ctrl+V><Esc> sequence.
for i in {016..255}; do
  echo -e "\x1b[38;5;${i}m $OTEXT $i \x1b[0m" >> $OFILE
  echo -e "color${i}=\"\[\033[38;5;${i}m\]\"" >> $OFILE_COLORS
done

# End of echo.
echo '"' | tee --append $OFILE &> /dev/null

# The file should be executable.
chmod +x $OFILE

Meskipun xtermterminal emulator dasar ketika saya menjalankan skrip yang dihasilkan saya bisa melihat semua 240 warna. Mengapa? Saya pikir saya harus berubah $TERMmenjadi yang xterm-256colorpertama.

Kamil
sumber

Jawaban:

18

The TERMvariabel lingkungan adalah cara yang Anda, pengguna, dapat memberitahu program (misalnya, emacs, grep, less, ls, dan vim) jenis terminal mereka berjalan pada, sehingga mereka akan tahu parameternya, termasuk apa kemampuan yang dimilikinya dan apa escape sequence mereka perlu mengeluarkan untuk mengaksesnya. Ini ada karena terlalu sulit, secara umum, bagi perangkat lunak untuk menentukan ini untuk dirinya sendiri (dan sangat tidak mungkin ketika pengguna berinteraksi dengan komputer melalui terminal yang eksternal, dan hanya terhubung ke komputer dengan kabel data).

gnome-terminaladalah program yang menyediakan layanan seperti terminal untuk pengguna dan program yang dijalankan pengguna di dalam terminal.  gnome-terminalmungkin menyadari variabel lingkungan yang ditetapkan dalam nya lingkungan, sebelum dipanggil ( DISPLAYmenjadi contoh nyata), tetapi tidak memiliki pengetahuan tentang variabel lingkungan yang ditetapkan di dalam proses yang sedang berjalan di bawahnya.

Jadi, gnome-terminalmemiliki kemampuan apa pun yang dimilikinya. Dimungkinkan untuk menyesuaikan / membatasi ini secara eksternal, misalnya, melalui opsi baris perintah, lingkungan yang sudah ada sebelumnya, file konfigurasi, dan dialog dalam bingkai jendela, tetapi tidak dengan mengubah TERMshell di jendela. Jika itu mampu menampilkan 256 warna, maka itu mampu menampilkan 256 warna, dan Anda akan dapat membuatnya melakukannya dengan mengirimkannya urutan pelarian yang sesuai. Tetapi, selama Anda TERMmengaturnya xterm, program yang Anda jalankan akan percaya bahwa Anda memberi tahu mereka bahwa mereka menjalankan terminal berkemampuan delapan warna, dan karenanya mereka akan membatasi permintaan mereka (urutan sekuens) untuk kemampuan itu . Anda perlu diatur TERMke xterm-256color, bukan untuk mengaktifkangnome-terminaluntuk menampilkan 256 warna, tapi untuk memberitahu program-program seperti grepdan lsuntuk meminta untuk menggunakan lebih dari 8 warna.

G-Man Mengatakan 'Reinstate Monica'
sumber
Terkait samar-samar: Di mana variabel lingkungan TERM standar dapat ditetapkan?
G-Man Mengatakan 'Reinstate Monica'