Ne tür diziler “\ 033]” ile başlayan kaçış dizileridir


19

Bash ile başlayarak birçok kaçış dizisi buldum \033], ama bu diziler neler ve neden başlıyorlar \033]?

Yanıtlar:


25

Dize aslında \033[ve hepsi bu değil.

Bu açılış parantezinden sonra bir dizi sayı ve sembol gelir. Bu dize bir kaçış dizisi olarak bilinir ve diğer şeylerin yanı sıra konsolun imlecini ve metin rengini kontrol etmek için kullanılır.

yazdırılmayan kaçış dizileri içine alınmalıdır \[\033[ and \]

Kaçış dizisi metin rengini kontrol ediyorsa, onu bir m.

İşte renk dizileri için bir tablo:

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   

Bu nedenle, konsol isteminizin mavi olmasını istiyorsanız, aşağıdaki çıkış sırasını kullanırsınız (unuttuğum dosya adında):

\[\033[34m\]

(Dikkat edin m)

Ancak bu kaçış dizisi sadece rengi kontrol etmekle kalmaz. Ayrıca imleç hareketini de kontrol edebilir. Hareket kodlarını ve nasıl çalıştıklarını gösteren bir tablo / liste:

  • İmleci konumlandırın:

    \033[<L>;<C>H

    Veya

    \033[<L>;<C>f

    imleci L satırına ve C sütununa getirir.

  • İmleci N satır yukarı taşı:

    \033[<N>A
  • İmleci N satır aşağı taşı:

    \033[<N>B
  • İmleci N sütun ilerlet:

    \033[<N>C
  • İmleci geriye doğru N sütun taşı:

    \033[<N>D
  • Ekranı temizleyin, (0,0) öğesine gidin:

    \033[2J
  • Satırın sonuna kadar sil:

    \033[K
  • İmleç konumunu kaydet:

    \033[s
  • İmleç konumunu geri yükle:

    \033[u

Son ikisinin kullandığınız terminal emülatöründe çalışmayabileceğini unutmayın. Görünüşe göre, sadece xtermve nxtermbu iki diziyi kullanın.

Ve bu kaçış dizilerinden birini kullanarak örnek: imleci 3. satır, sütun (karakter) 9'a yerleştirmek istiyorum diyelim. Bunun için

\[033\[3;9H]

(Sütun 0'ın ilk konum olduğunu varsayıyorum, bu yüzden 8. karakter olur).

Kaynak: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (ayrıca 6.2 okuyun)

Daha genel okuma: http://ascii-table.com/ansi-escape-sequences.php

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



2
'\ 033' değerinin sekizlik ESCAPE karakteri olduğundan, ondalık (27) veya onaltılık (0x1B) olarak verilebileceğini unutmayın. ESCAPE yazmanın başka yaygın yolları da vardır, örn. Kabuk komut dosyalarında '^ [',
cilt anahtarında

1
Bu tablodaki bazı girişlerin yanıltıcı veya yanlış olduğunu unutmayın: kalın, soluk, alt çizgi vb. Renkten bağımsız olarak ayarlanıp sıfırlanabilir ve ayrıca renklerle birlikte 0 ile sıfırlanabilir; arka plan için tamamen ayrı bir kod kümesi (40-49) vardır ve 7 bunun yerine ön plan ve arka planı değiştirir; ESC [2K, tüm satırı imleçten önce ve sonra siler. Çok daha iyi bir kaynak Wikipedia makalesi olabilir, ya da doğrudan ECMA-48 , bölüm 8.3.117 SGR - Select Graphic Rendition'a gidebilirsiniz .
deltab

Aşağıdaki cümlenin sonunda "m" karakteri bir cümle karakteri olarak kullanılır. " Cplusplus.com yazısında da biraz kafa karıştırıcıdır, çünkü aşağıdaki tabloda açık bir şekilde sonlandırılmayan komutlar bulunmaktadır. "m". Aslında burada en üstte sunulduğunda daha da yanıltıcı görünüyor.
ilkkachu

1
Teknik olarak, 0;renk dizilerinde lider olmak gereksizdir. Bu, ön planı ayarlamadan önce arka plan rengini varsayılan yapar. Arka planı ile de ayarlayabilirsiniz 4x.
Monica'nın Davası

17

Terminal için kontrol komutları.

Terminaller aslında bir seri porta bağlı aptal cihazlardı ve şu anda menülere sahip fantezi çok sekmeli GUI yazılımı değil. Yalnızca bir karakter akışı (bayt) aldıklarından, veriler (ekranda ne yazdırılacağı) ve komutlar (nasıl yazdırılacağı) arasında net bir ayrım yoktu. Bunun yerine komutlar özel kontrol karakterleriyle temsil edilir.

Belirgin kontrol karakterleri satır besleme (satırsonu), geri tuşu ve zil sesi gibi şeylerdir, ancak karakterden başlayarak karakter dizileri olarak daha spesifik komutlar verilir ESC(ondalık kod 27, onaltılık 0x1b veya 033 sekizli). Genellikle örneğinizde olduğu gibi ^[veya \033örneğinizde olduğu gibi temsil edilir .

Sekans ESC [CSI veya Kontrol sekansı tanıtıcısı olarak adlandırılır ve isteğe bağlı sayısal parametrelerle bir komut başlatır ve genellikle ana komutu tanımlayan bir harfle biter. Ortak kaçış dizilerinin çoğu bu sınıfa girer.

Kaçış kodlarının listeleri örneğin console_codes(4)man sayfasında ve ANSI kaçış kodları için Wikipedia sayfasında bulunabilir .

Bazı örnekler:

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

Komutları örneğin Bash ile test edebilirsiniz. -eBayrağı kullanarak, yerleşik echokomut karakterin \033bir temsili olarak kabul eder ESC.

Örneğin, ekranın ortasında renkli bir karşılama ve normalde orijinal imleç konumunda başka bir karşılama yazdırılır:

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

ESC ]Bahsettiğiniz sıra , çoğunlukla pencere başlığını xtermve diğerlerini ayarlamak için komutta kullanılan OSC veya İşletim Sistemi Komutudur , örneğin:

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

Daha sonra ESC ( A, bazı terminallerde ulusal karakter kümelerini potansiyel olarak komik bir etkiye ayarlayan (ve diğer harfler) de var .


8

Kaçış ve ardından sağ köşeli ayraç escape]bir işletim sistemi komutu ( OSC) eklemek için kullanılır .

Bu ise ECMA-48 , ve sen xterm'den tarafından kullanılan kontrol dizilerinin bir özetini okuyabilir XTerm kontrol sekansları terminal penceresi başlığını değiştirmek için, örneğin,.

Kaçış dizileri farklı karakterlerle başlayabilir. C1 (8-Bit) Kontrol Karakterler XTerm Kontrol Diziler bölüm Bunlardan bir kaç bahseder: CSI(siz bakın hangi escape[, APC, DCS, PM. Çifti (kaçıp çünkü farklı (ikinci) karakteri nedeni ]) a ile ilişkilidir farklı için kullanılan tek baytlık kontrol karakteri kaçış dizisi türleri .

Spesifikasyonu okuduysanız CSI, sayısal parametrelere sahip kontroller için kullanıldığını ve OSCdizelere izin verdiğini göreceksiniz . Sadece sözdizimi ötesinde, bu standardı oluşturulan komite için zihin kullanımlar vardı APCve PMhangi farklıydı DCSve OSC.



1

Diğer cevaplarda açıklanan "kaçış dizileri", hangi terminal TİPine sahip olduğunuza bağlıdır (çoğunlukla "ANSI" veya türevleri / benzerleri).

$ echo $TERM  
xterm

Termninalin (bir şekilde) BAĞIMSIZ, ancak yine de örneğin renk ve diğer özellikleri kullanan komut dosyaları yazmak istiyorsanız, içeriğine bir göz atın man terminfo.

Örneğin

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

yazdıracak .test. ile testsarımsı bir arka plan ve kırmızı ön plan rengini ve aslında aynı şekilde renkleri kullanarak yeteneğine sahip olduğunu HERHANGİ terminal için bu irade işi olan.

Neyin gerçekten yazdırıldığını görmek için od -t x1z,

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

... burada değerler onaltılık olarak gösterilir ("x" nedeniyle).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.