Jenis urutan apa yang merupakan urutan pelarian yang dimulai dengan “\ 033]”

19

Saya menemukan banyak urutan melarikan diri di Bash dimulai dengan \033], tetapi apa urutan ini dan mengapa mereka mulai \033]?

Sessho
sumber

Jawaban:

25

Tali itu sebenarnya \033[dan bukan itu masalahnya.

Setelah itu braket pembuka datang serangkaian angka dan simbol. String ini dikenal sebagai urutan pelarian dan digunakan untuk mengontrol kursor dan warna teks konsol, antara lain.

urutan pelarian non-cetak harus disertakan \[\033[ and \]

Jika urutan escape mengendalikan warna teks, maka itu akan diikuti oleh m.

Berikut adalah tabel untuk urutan warna:

Black       0;30     Dark Gray     1;30  
Blue        0;34     Light Blue    1;34  
Green       0;32     Light Green   1;32  
Cyan        0;36     Light Cyan    1;36  
Red         0;31     Light Red     1;31  
Purple      0;35     Light Purple  1;35  
Brown       0;33     Yellow        1;33  
Light Gray  0;37     White         1;37   

Jadi, jika Anda ingin prompt konsol Anda berwarna biru, Anda akan menggunakan urutan escape berikut (dalam nama file yang saya lupa):

\[\033[34m\]

(Perhatikan m)

Namun, urutan pelarian ini tidak hanya mengontrol warna. Itu juga dapat mengontrol pergerakan kursor. Berikut adalah tabel / daftar dengan kode gerakan dan cara kerjanya:

  • Posisikan kursor:

    \033[<L>;<C>H

    Atau

    \033[<L>;<C>f

    menempatkan kursor pada baris L dan kolom C.

  • Pindahkan kursor ke atas garis N:

    \033[<N>A
  • Pindahkan kursor ke bawah garis N:

    \033[<N>B
  • Pindahkan kursor ke depan kolom N:

    \033[<N>C
  • Pindahkan kursor ke belakang kolom N:

    \033[<N>D
  • Bersihkan layar, pindah ke (0,0):

    \033[2J
  • Hapus ke akhir baris:

    \033[K
  • Simpan posisi kursor:

    \033[s
  • Kembalikan posisi kursor:

    \033[u

Perlu diketahui bahwa dua yang terakhir mungkin tidak berfungsi di emulator terminal yang Anda gunakan. Ternyata, hanya xtermdan nxtermmenggunakan dua urutan.

Dan contoh menggunakan salah satu dari urutan pelarian ini: katakan saya ingin memposisikan kursor saya di baris 3, kolom (karakter) 9. Untuk itu, saya akan menggunakan

\[033\[3;9H]

(Saya mengasumsikan bahwa kolom 0 adalah posisi pertama, sehingga akan menjadi karakter ke-8).

Sumber: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (baca juga 6.2)

Bacaan yang lebih umum: http://ascii-table.com/ansi-escape-afterences.php

Wikipedia: https://en.wikipedia.org/wiki/ANSI_escape_code

Petualang
sumber
2
pertimbangkan juga menautkan ke en.wikipedia.org/wiki/ANSI_escape_code
cat
2
Perhatikan bahwa '\ 033' adalah karakter ESCAPE dalam oktal, sehingga dapat diberikan dalam desimal (27) atau hex (0x1B). Ada cara umum lainnya untuk menulis ESCAPE, misalnya '^ [' dalam skrip shell, "\ e" dalam bindkey, dll.
jamesqf
1
Harap dicatat bahwa sejumlah entri dalam tabel itu menyesatkan atau tidak akurat: tebal, pingsan, garis bawah dll. Dapat diatur dan diatur ulang secara terpisah dari warna, dan juga diatur ulang oleh 0 bersamaan dengan warna; ada satu set kode yang terpisah (40-49) untuk latar belakang, dan 7 sebagai gantinya menukar latar depan dan latar belakang; ESC [2Kmenghapus seluruh baris sebelum dan sesudah kursor. Sumber yang jauh lebih baik adalah artikel Wikipedia, atau Anda dapat langsung menuju ECMA-48 , bagian 8.3.117 SGR - Pilih Graphic Rendition .
deltab
Frasa "'m' karakter di akhir setiap kalimat berikut digunakan sebagai karakter berhenti" pada posting cplusplus.com juga agak membingungkan, karena tabel di bawah ini berisi perintah yang jelas tidak diakhiri oleh sebuah "m". Sebenarnya sepertinya lebih menyesatkan di sini ketika disajikan tepat di atas.
ilkkachu
1
Secara teknis, yang terdepan 0;dalam urutan warna tidak perlu. Itu hanya membuat warna latar belakang default sebelum mengatur latar depan. Anda juga dapat mengatur latar belakang dengan 4x.
Dana Gugatan Monica
17

Mereka mengendalikan perintah untuk terminal.

Terminal pada awalnya adalah perangkat yang agak bodoh yang terhubung ke port serial, dan bukan perangkat lunak GUI multi-tab yang mewah dengan menu yang kita miliki sekarang. Karena mereka hanya menerima aliran karakter (byte), tidak ada pemisahan yang jelas antara data (apa yang akan dicetak di layar) dan perintah (cara mencetaknya). Sebaliknya perintah diwakili dengan karakter kontrol khusus.

Karakter kontrol yang jelas adalah hal-hal seperti umpan baris (baris baru), backspace dan bel bip, tetapi perintah yang lebih spesifik diberikan sebagai urutan karakter, dimulai dengan ESCkarakter (kode 27 dalam desimal, 0x1b dalam hex, atau 033 oktal). Ini sering direpresentasikan sebagai ^[, atau \033seperti dalam contoh Anda.

Urutannya ESC [disebut CSI, atau Pengontrol urutan pengantar, dan ia memulai perintah dengan parameter numerik opsional, yang berakhir dengan huruf yang mendefinisikan perintah utama. Sebagian besar urutan pelarian umum termasuk dalam kelas ini.

Daftar kode pelarian dapat ditemukan misalnya di console_codes(4)halaman manual, dan pada halaman Wikipedia untuk kode pelarian ANSI .

Beberapa contoh:

ESC [ 4 A             move cursor 4 lines up (4 can be any number)
ESC [ 5 B             move cursor 5 lines down
ESC [ 2 K             erase current line 
ESC [ 30;46 m         set black text (30) on cyan background (46)
ESC [ 0 m             reset color and attributes

Anda dapat menguji perintah dengan misalnya Bash. Menggunakan -eflag, echoperintah builtin menerima \033sebagai representasi ESCkarakter.

Misalnya ini akan mencetak warna ucapan di tengah layar dan yang lainnya biasanya di posisi kursor asli:

echo -e '\033[s\033[12;30f\033[30;46m  Hello!  \033[0m\033[uhello'

Urutan ESC ]yang Anda sebutkan adalah OSC atau Perintah Sistem Operasi, yang sebagian besar digunakan dalam perintah untuk mengatur judul jendela xtermdan lain-lain, misalnya:

echo -e '\033]0;new window title\a'

Lalu ada juga ESC ( A(dan surat-surat lain) yang mengatur set karakter nasional pada beberapa terminal, ke efek berpotensi lucu .

ilkkachu
sumber
8

Escape diikuti oleh braket kotak kanan escape]digunakan untuk memperkenalkan perintah sistem operasi ( OSC).

Itu ada di ECMA-48 , dan Anda bisa membaca ringkasan dari urutan kontrol yang digunakan oleh xterm di XTerm Control Sequences , misalnya, untuk mengubah judul jendela terminal.

Urutan melarikan diri dapat dimulai dengan karakter yang berbeda. The C1 (8-Bit) Karakter Kontrol bagian dalam xterm Kontrol Urutan menyebutkan beberapa dari mereka: CSI(yang Anda lihat sebagai escape[, APC, DCS, PM. Alasan untuk karakter yang berbeda (kedua) adalah karena pasangan (melarikan diri dan ]) dikaitkan dengan karakter kontrol byte tunggal yang digunakan untuk berbagai jenis urutan pelarian.

Jika Anda membaca spesifikasi, Anda akan melihat bahwa CSIini digunakan untuk kontrol dengan parameter numerik, sementara OSCmemungkinkan string. Selain sintaksis, komite yang menciptakan standar ini ada dalam pikiran menggunakan untuk APCdan PMyang berbeda dari DCSdan OSC.

Thomas Dickey
sumber
7

Ini disebut kode pelarian ANSI , dan mereka terdaftar di halaman manual untuk console_codes . Mereka tidak spesifik-Bash, melainkan bekerja di aplikasi konsol apa pun selama terminal mendukungnya (kebanyakan emulator terminal melakukannya).

Joey Marianer
sumber
1

"Urutan melarikan diri" yang dijelaskan dalam jawaban lain bergantung pada JENIS terminal mana yang Anda miliki (paling sering "ANSI" atau turunan / yang serupa).

$ echo $TERM  
xterm

Jika Anda ingin menulis skrip yang (agak) INDEPENDEN dari termninal, tetapi masih menggunakan misalnya warna dan fitur-fitur khusus lainnya, maka lihatlah isi man terminfo.

misalnya

$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."

akan mencetak .test.dengan testlatar belakang kekuningan dan warna latar depan merah, dan ini akan bekerja untuk terminal APAPUN yang sebenarnya mampu menggunakan warna dengan cara yang sama.

Untuk melihat apa yang sebenarnya dicetak, masukkan ke dalam od -t x1zseperti

$ tput sgr0 | od -t x1z  
0000000 1b 28 42 1b 5b 6d                                >.(B.[m<  
0000006

... di mana nilainya ditampilkan dalam heksadesimal (karena "x").

Hannu
sumber