Aracılığıyla paylaş


Konsol Sanal Terminal Dizileri

Sanal terminal dizileri, çıkış akışına yazıldığında imleç hareketini, konsol rengini ve diğer işlemleri denetleyebilen denetim karakter dizileridir. Sıralar, çıkış akışı sorgu bilgileri dizisine yanıt olarak veya uygun mod ayarlandığında kullanıcı girişinin kodlaması olarak giriş akışında da alınabilir.

Bu davranışı yapılandırmak için GetConsoleMode ve SetConsoleMode işlevlerini kullanabilirsiniz. Bu belgenin sonuna sanal terminal davranışlarını etkinleştirmenin önerilen yolunun bir örneği eklenmiştir.

Aşağıdaki dizilerin davranışı, VT100 ve türetilmiş terminal öykünücüsü teknolojilerini, özellikle de xterm terminal öykünücüsünün davranışını temel alır. Terminal dizileri hakkında daha fazla bilgiyi adresinde http://vt100.net ve konumunda http://invisible-island.net/xterm/ctlseqs/ctlseqs.htmlbulabilirsiniz.

Çıkış Dizileri

SetConsoleMode işlevi kullanılarak ekran arabelleğinde ENABLE_VIRTUAL_TERMINAL_PROCESSING bayrağı ayarlandıysa, aşağıdaki terminal dizileri çıkış akışına yazıldığında konsol konağı tarafından kesilir. DISABLE_NEWLINE_AUTO_RETURN bayrağının, herhangi bir satırdaki son sütuna yazılan karakterlerle ilişkili olarak diğer terminal öykünücülerinin imleç konumlandırma ve kaydırma davranışını öykünmede de yararlı olabileceğini unutmayın.

Basit İmleç Konumlandırma

Aşağıdaki açıklamaların tamamında, ESC her zaman 0x1B onaltılık değerdir. Terminal sıralarına boşluk eklenmez. Tek tek terminal dizileri, herhangi bir karakter veya bayt konumunda, WriteFile veya WriteConsole'a birden çok sıralı çağrı arasında bölünebilir, ancak tüm sırayı tek bir çağrıya dahil etmek en iyi yöntemdir. Bu dizilerin uygulamada nasıl kullanıldığına ilişkin bir örnek için lütfen bu konunun sonundaki örniğe bakın.

Aşağıdaki tabloda, esc karakterinden hemen sonra tek bir eylem komutuyla basit kaçış dizileri açıklanmaktadır. Bu dizilerin parametresi yoktur ve hemen etkinleşir.

Bu tablodaki tüm komutlar genellikle imleci yerleştirmek için SetConsoleCursorPosition konsol API'sini çağırmaya eşdeğerdir.

İmleç hareketi geçerli görünüm penceresi tarafından arabelleğe sınırlanır. Kaydırma (varsa) gerçekleşmez.

Sıra Stenografi Davranış
ESC M Ters Dizin – \nters işlemini gerçekleştirir, imleci bir satır yukarı taşır, yatay konumu korur, gerekirse arabelleğinde kaydırma yapar*
ESC 7 DECSC İmleç Konumunu Belleğe Kaydet**
ESC 8 DECSR İmleç Konumunu Bellekten Geri Yükle**

Uyarı

* Ayarlanmış kaydırma kenar boşlukları varsa, kenar boşluklarının içindeki RI yalnızca kenar boşluklarının içeriğini kaydıracak ve görünüm penceresi değişmeden bırakacaktır. (Bkz. Kaydırma Kenar Boşlukları)

**Kaydet komutunun ilk kullanımına kadar belleğe kaydedilmiş bir değer olmayacaktır. Kaydedilen değere erişmenin tek yolu geri yükleme komutudur.

İmleç Konumlandırma

Aşağıdaki tablolar Control Sequence Introducer (CSI) tür dizilerini kapsar. Tüm CSI dizileri ESC (0x1B) ile başlar ve ardından [ (sol köşeli ayraç, 0x5B) gelir ve her işlem için daha fazla bilgi belirtmek için değişken uzunlukta parametreler içerebilir. Bu, kısaltma <n> ile gösterilir. Aşağıdaki her tablo, her tablonun altında grubun nasıl çalıştığını açıklayan notlar içeren işlevlere göre gruplandırılır.

Aksi belirtilmediği sürece tüm parametreler için aşağıdaki kurallar geçerlidir:

  • <n> , taşınacak uzaklığı temsil eder ve isteğe bağlı bir parametredir
  • n> atlanırsa veya 0'a eşitse<, 1 olarak değerlendirilir
  • <n> , 32.767'den büyük olamaz (en büyük kısa değer)
  • <n> negatif olamaz

Bu bölümdeki tüm komutlar genellikle SetConsoleCursorPosition konsol API'sini çağırmaya eşdeğerdir.

İmleç hareketi geçerli görünüm penceresi tarafından arabelleğe sınırlanır. Kaydırma (varsa) gerçekleşmez.

Sıra Kod Açıklama Davranış
ESC [ <n> A CUU İmleç Yukarı İmleç n yukarı <>
ESC [ <n> B CUD İmleç Aşağı İmleç n aşağı <>
ESC [ <n> C CUF İleri İmleç İmleç ileri (Sağ) n <>
ESC [ <n> D YAVRUSU geriye doğru imleç İmleç geriye (Sol) <n>
ESC [ <n> E CNL İmleç Sonraki Satır Geçerli konumdan n> satır aşağı <imleç
ESC [ <n> F CPL İmleç Önceki Satır Geçerli konumdan n> satır yukarı <imleç
ESC [ <n> G CHA İmleç Yatay Mutlak İmleç geçerli satırda yatay olarak n>. konuma taşınır <
ESC [ <n> d VPA Dikey Çizgi Konumu Mutlak İmleç geçerli sütunda <dikey olarak n>. konuma taşınır
ESC [ <y> ; <x> H FİNCAN İmleç Konumu *İmleç x'e <>taşınır; <y> koordinatı görünüm penceresi içindedir; burada <x>, y> satırının <sütunudur
ESC [ <y> ; <x> f HVP Yatay Dikey Konum *İmleç x'e <>taşınır; <y> koordinatı görünüm penceresi içindedir; burada <x>, y> satırının <sütunudur
ESC [ s ANSISYSSC İmleci Kaydet – öykünme Ansi.sys **Parametre olmadan DECSC gibi bir kaydetme imleci işlemi gerçekleştirir
ESC [ u ANSISYSRC Geri Yükleme İmleci – Ansi.sys öykünmesi **Parametre olmadan DECRC gibi bir geri yükleme imleci işlemi gerçekleştirir

Uyarı

*<x> ve <y> parametreleri yukarıdaki n> ile aynı sınırlamalara <sahiptir. <x> ve <y> atlanırsa, 1;1 olarak ayarlanır.

**ANSI.sys geçmiş belge bulunabilir https://msdn.microsoft.com/library/cc722862.aspx ve kolaylık/uyumluluk için uygulanır.

İmleç Görünürlüğü

Aşağıdaki komutlar imlecin görünürlüğünü ve yanıp sönme durumunu denetler. DECTCEM dizileri genellikle imleç görünürlüğünü değiştirmek için SetConsoleCursorInfo konsol API'sini çağırmaya eşdeğerdir.

Sıra Kod Açıklama Davranış
ESC [ ? 12 sa ATT160 Metin İmleci Yanıp Sönme özelliğini etkinleştirme İmleci yanıp sönerek başlatma
ESC [ ? 12 l ATT160 Metin İmleci Yanıp Sönme özelliğini devre dışı bırakma İmleci yanıp sönmeyi durdurma
ESC [ ? 25 s DECTCEM Metin İmleci Etkinleştirme Modu Gösterisi İmleci gösterme
ESC [ ? 25 l DECTCEM Metin İmleci Modu Gizlemeyi Etkinleştir İmleci gizleme

Tavsiye

Etkinleştirme dizileri küçük bir H karakteriyle (h) biter ve devre dışı bırakma dizileri küçük harf L karakteriyle (l) biter.

İmleç Şekli

Aşağıdaki komutlar imleç şeklini denetler ve özelleştirmeye izin verir.

Sıra Kod Açıklama Davranış
ESC [ 0 SP q DECSCUSR Kullanıcı Şekli Kullanıcı tarafından yapılandırılan varsayılan imleç şekli
ESC [ 1 SP q DECSCUSR Yanıp Sönen Blok Yanıp sönen blok imleç şekli
ESC [ 2 SP q DECSCUSR Sabit Blok Sabit blok imleç şekli
ESC [ 3 SP q DECSCUSR Yanıp Sönen Alt Çizgi Yanıp sönen alt çizgi imleç şekli
ESC [ 4 SP q DECSCUSR Sabit Alt Çizgi Sabit alt çizgi imleç şekli
ESC [ 5 SP q DECSCUSR Yanıp Sönen Çubuk Yanıp sönen çubuk imleç şekli
ESC [ 6 SP q DECSCUSR Sabit Çubuk Sabit çubuk imleç şekli

Uyarı

SP , ara konumda sabit bir boşluk karakteridir (0x20) ve son konumda (0x71) onu izler q .

Görünüm Penceresi Konumlandırma

Bu bölümdeki tüm komutlar genellikle, konsol arabelleğinin içeriğini taşımak için ScrollConsoleScreenBuffer konsol API'sini çağırmaya eşdeğerdir.

Dikkat Komut adları yanıltıcıdır. Kaydırma işlemi sırasında metnin hangi yönde hareket ettiği anlamına gelir; görünüm penceresi hangi yönde hareket ediyormuş gibi görünmez.

Sıra Kod Açıklama Davranış
ESC [ <n> S SU Yukarı Kaydır Metni n> yukarı <kaydır. Aşağı kaydırma olarak da bilinir, ekranın alt kısmından yeni çizgiler doldurulur
ESC [ <n> T SD Aşağı Kaydır N'ye <>kadar aşağı kaydırın. Yukarı kaydırma olarak da bilinen yeni çizgiler ekranın üst kısmından doldurulur

Metin, imlecin açık olduğu çizgiden başlayarak taşınır. İmleç görünüm penceresinin orta satırındaysa yukarı kaydırmak görünüm penceresinin alt yarısını hareket ettirir ve alta boş çizgiler ekler. Aşağı kaydır seçeneği görünüm penceresinin satırlarının üst yarısını taşır ve üste yeni satırlar ekler.

Ayrıca, yukarı ve aşağı kaydırmanın kaydırma kenar boşluklarından da etkilendiğini unutmayın. Yukarı ve aşağı kaydırma, kaydırma kenar boşluklarının dışındaki satırları etkilemez.

n> için <varsayılan değer 1'dir ve değer isteğe bağlı olarak atlanabilir.

Metin Değişikliği

Bu bölümdeki tüm komutlar genellikle metin arabelleği içeriğini değiştirmek için FillConsoleOutputCharacter, FillConsoleOutputAttribute ve ScrollConsoleScreenBuffer konsol API'lerini çağırmaya eşdeğerdir.

Sıra Kod Açıklama Davranış
ESC [ <n> @ ICH Karakter Ekle Mevcut tüm metni sağa kaydırarak geçerli imleç konumuna n> boşluk ekleyin<. Sağ tarafta ekrandan çıkan metin kaldırılır.
ESC [ <n> P DCH Karakter Sil Geçerli imleç konumundaki n> karakteri silip <ekranın sağ kenarından boşluk karakterleri arasında geçiş yapın.
ESC [ <n> X ECH Karakteri Sil Geçerli imleç konumundaki n> karakterin üzerine boşluk karakteri yazarak silin<.
ESC [ <n> L Illinois Satır Ekle <İmleç konumunda arabelleğe n> satır ekler. İmlecin açık olduğu çizgi ve altındaki çizgiler aşağı doğru kaydırılır.
ESC [ <n> M DL Satırı Sil <İmlecin açık olduğu satırdan başlayarak arabellekten n> satırı siler.

Uyarı

IL ve DL için yalnızca kaydırma kenar boşluklarındaki çizgiler (bkz. Kaydırma Kenar Boşlukları) etkilenir. Hiçbir kenar boşluğu ayarlı değilse, varsayılan kenar boşluğu kenarlıkları geçerli görünüm penceresidir. Satırlar kenar boşluklarının altına kaydırılırsa atılır. Satırlar silindiğinde, kenar boşluklarının altına boş satırlar eklenir, görünüm penceresinin dışındaki satırlar hiçbir zaman etkilenmez.

Dizilerin her biri için, atlanırsa n> için <varsayılan değer 0'dır.

Aşağıdaki komutlar için n> parametresi <3 geçerli değere sahiptir:

  • 0, geçerli imleç konumundan (dahil) satırın/ekranın sonuna kadar siler
  • 1, satırın başından/görüntüden geçerli imleç konumuna kadar ve dahil olmak üzere siler
  • 2, çizginin/ekranın tamamını siler
Sıra Kod Açıklama Davranış
ESC [ <n> J Erektil Disfonksiyon Ekranda Sil n> ile belirtilen <geçerli görünüm penceresi/ekrandaki tüm metni boşluk karakterleriyle değiştirme
ESC [ <n> K EL Satırda Sil Satırdaki tüm metni n> ile belirtilen <imleçle boşluk karakterleriyle değiştirme

Metin Biçimlendirme

Bu bölümdeki tüm komutlar, gelecekteki tüm yazmaların biçimlendirmesini konsol çıkış metin arabelleğine ayarlamak için SetConsoleTextAttribute konsol API'lerini çağırmaya eşdeğerdir.

Bu komut, aşağıdaki n> konumunun <noktalı virgülle ayrılmış 0 ile 16 arasında parametre kabul etmesinde özeldir.

Hiçbir parametre belirtilmediğinde, tek bir 0 parametresiyle aynı şekilde değerlendirilir.

Sıra Kod Açıklama Davranış
ESC [ <n> m SGR Grafik İşlemeyi Ayarla Ekranın ve metnin biçimini n ile <belirtilen şekilde ayarlayın>

Aşağıdaki değerler tablosu, farklı biçimlendirme modlarını temsil etmek için n> içinde <kullanılabilir.

Biçimlendirme modları soldan sağa uygulanır. Rakip biçimlendirme seçeneklerinin uygulanması, en doğru seçeneğin öncelikli olmasıyla sonuçlanır.

Renkleri belirten seçenekler için, renkler konsol renk tablosunda tanımlandığı şekilde kullanılır ve bu tablo SetConsoleScreenBufferInfoEx API'sini kullanarak değiştirilebilir. Tablo, tablodaki "mavi" konumun kırmızı rgb tonunu görüntülemesini sağlayacak şekilde değiştirilirse, Ön Plan Mavi'ye yapılan tüm çağrılar aksi değişene kadar bu kırmızı rengi görüntüler.

Değer Açıklama Davranış
0 Varsayılan Değişiklik yapılmadan önce tüm öznitelikleri varsayılan duruma döndürür
1 Kalın/Parlak Ön plan rengine parlaklık/yoğunluk bayrağı uygular
22 Kalın/parlak yok Ön plan renginden parlaklık/yoğunluk bayrağını kaldırır
4 Altını çizmek Altı çizili ekler
yirmi dört Altı çizili yok Alt çizgi kaldırır
7 Olumsuz Ön plan ve arka plan renklerini değiştirir
27 Pozitif (Negatif yok) Ön plan/arka planı normale döndürür
30 Ön Plan Siyahı Ön plana kalın/parlak olmayan siyah uygular
31 Ön Plan Kırmızısı Ön plana kalın/parlak olmayan kırmızı uygular
32 Ön Plan Yeşili Ön plana kalın/parlak olmayan yeşil uygular
33 Ön Plan Sarısı Ön plana kalın/parlak olmayan sarı uygular
34 Ön Plan Mavisi Ön plana kalın/parlak olmayan mavi uygular
35 Ön Plan Eflatun Ön plana kalın/parlak olmayan eflatun uygular
36 Ön Plan Mavisi Ön plana kalın/parlak olmayan bir mavi uygular
37 Ön Plan Beyazı Ön plana kalın/parlak olmayan beyaz uygular
38 Ön Plan Genişletilmiş Genişletilmiş renk değerini ön plana uygular (aşağıdaki ayrıntılara bakın)
39 Ön Plan Varsayılanı Varsayılanların yalnızca ön plan bölümünü uygular (bkz. 0)
40 Arka Plan Siyahı Arka plana kalın/parlak olmayan siyah uygular
41 Arka Plan Kırmızısı Arka plana kalın/parlak olmayan kırmızı uygular
42 Arka Plan Yeşili Arka plana kalın/parlak olmayan yeşil uygular
43 Arka Plan Sarısı Arka plana kalın/parlak olmayan sarı uygular
44 Arka Plan Mavisi Arka plana kalın/parlak olmayan mavi uygular
45 Arka Plan Eflatun Arka plana kalın/parlak olmayan eflatun uygular
46 Arka Plan Mavisi Arka plana kalın/parlak olmayan mavi uygular
47 Arka Plan Beyazı Arka plana kalın/parlak olmayan beyaz uygular
48 Arka Plan Genişletilmiş Arka plana genişletilmiş renk değeri uygular (aşağıdaki ayrıntılara bakın)
49 Arka Plan Varsayılanı Varsayılanların yalnızca arka plan kısmını uygular (bkz. 0)
90 Parlak Ön Plan Siyahı Ön plana kalın/parlak siyah uygular
91 Parlak Ön Plan Kırmızısı Ön plana kalın/parlak kırmızı uygular
92 Parlak Ön Plan Yeşili Ön plana kalın/parlak yeşil uygular
93 Parlak Ön Plan Sarısı Ön plana kalın/parlak sarı uygular
94 Parlak Ön Plan Mavisi Ön plana kalın/parlak mavi uygular
95 Parlak Ön Plan Eflatun Ön plana kalın/parlak eflatun uygular
96 Parlak Ön Plan Mavisi Ön plana kalın/parlak mavi uygular
97 Parlak Ön Plan Beyazı Ön plana kalın/parlak beyaz uygular
100 Parlak Arka Plan Siyahı Arka plana kalın/parlak siyah uygular
101 Parlak Arka Plan Kırmızısı Arka plana kalın/parlak kırmızı uygular
102 Parlak Arka Plan Yeşili Arka plana kalın/parlak yeşil uygular
103 Parlak Arka Plan Sarısı Arka plana kalın/parlak sarı uygular
104 Parlak Arka Plan Mavisi Arka plana kalın/parlak mavi uygular
105 Parlak Arka Plan Eflatun Arka plana kalın/parlak eflatun uygular
106 Parlak Arka Plan Mavisi Arka plana kalın/parlak mavi uygular
107 Parlak Arka Plan Beyazı Arka plana kalın/parlak beyaz uygular

Genişletilmiş Renkler

Bazı sanal terminal öykünücüleri, Windows Konsolu tarafından sağlanan 16 renkten daha büyük bir renk paletini destekler. Bu genişletilmiş renkler için Windows Konsolu, görüntü için mevcut 16 renk tablosundan en yakın uygun rengi seçer. Yukarıdaki tipik SGR değerlerinden farklı olarak, genişletilmiş değerler aşağıdaki tabloya göre ilk göstergeden sonra ek parametreler tüketir.

SGR Alt Sorgu Açıklama
38 ; 2 ; <r> ; <g> ; <b> Ön plan rengini r>, g>, <<b> parametrelerinde <belirtilen RGB değerine ayarlayın*
48 ; 2 ; <r> ; <g> ; <b> Arka plan rengini r>, g>, <<b> parametrelerinde <belirtilen RGB değerine ayarlayın*
38 ; 5 ; <s> Ön plan rengini <> 88 veya 256 renkli tabloda s dizinine ayarla*
48 ; 5 ; <s> 88 veya 256 renk tablosunda arka plan rengini <s> dizinine ayarlama*

*Karşılaştırma için dahili olarak tutulan 88 ve 256 renk paletleri xterm terminal öykünücüsundan temel alınmaktadır. Karşılaştırma/yuvarlama tabloları şu anda değiştirilemez.

Ekran Renkleri

Aşağıdaki komut, uygulamanın ekran renkleri paleti değerlerini herhangi bir RGB değerine ayarlamasını sağlar.

RGB değerleri ile ffarasında 0 onaltılık değerler olmalı ve eğik çizgi karakteriyle (ör. rgb:1/24/86) ayrılmalıdır.

Bu sıranın bir OSC "İşletim sistemi komutu" dizisi olduğunu ve listelenen diğer dizilerin çoğu gibi bir CSI olmadığını ve "\x1b[" değil "\x1b]" ile başladığını unutmayın. OSC dizileri olarak, ile temsil edilen <ST> ve ile iletilen bir Dize Sonlandırıcı ile ESC \0x1B 0x5Csonlandırılır. BEL (0x7) yerine sonlandırıcı olarak kullanılabilir, ancak daha uzun form tercih edilir.

Sıra Açıklama Davranış
ESC ] 4 ; <i> ; rgb : <r> / <g> / <b><ST> Ekran Renklerini Değiştir i ekran rengi paleti dizinini><r>, g>, <<b içinde <belirtilen RGB değerlerine ayarlar>

Mod Değişiklikleri

Bunlar giriş modlarını denetleen dizilerdir. İki farklı giriş modu kümesi vardır: İmleç Tuşları Modu ve Tuş Takımı Tuşları Modu. İmleç Tuşları Modu, giriş ve bitiş tuşlarının yanı sıra ok tuşları tarafından yayılan dizileri denetlerken, Tuş Takımı Tuşları Modu ise öncelikle numpad'de tuşların yaydığı dizileri ve işlev tuşlarını denetler.

Bu modların her biri basit boole ayarlarıdır; İmleç Tuşları Modu Normal (varsayılan) veya Uygulama ve Tuş Takımı Tuş Modu ise Sayısal (varsayılan) veya Uygulama'dır.

Bu modlarda yayılan sıralar için İmleç Tuşları ve Numpad ve İşlev Tuşları bölümlerine bakın.

Sıra Kod Açıklama Davranış
ESC = DECKPAM Tuş Takımı Uygulama Modunu Etkinleştirme Tuş takımı tuşları, Uygulama Modu dizilerini yayar.
ESC > DECKPNM Tuş Takımı Sayısal Modunu Etkinleştirme Tuş takımı tuşları Sayısal Mod dizilerini yayar.
ESC [ ? 1 s DECCKM İmleç Tuşları Uygulama Modunu Etkinleştir Tuş takımı tuşları, Uygulama Modu dizilerini yayar.
ESC [ ? 1 l DECCKM İmleç Tuşları Uygulama Modunu Devre Dışı Bırak (Normal Modu kullan) Tuş takımı tuşları Sayısal Mod dizilerini yayar.

Sorgu Durumu

Bu bölümdeki tüm komutlar genellikle geçerli konsol arabellek durumuyla ilgili durum bilgilerini almak için Get* konsol API'lerini çağırmaya eşdeğerdir.

Uyarı

Bu sorgular, ENABLE_VIRTUAL_TERMINAL_PROCESSING ayarlanırken çıkış akışında tanındıktan hemen sonra yanıtlarını konsol giriş akışına yayar. ENABLE_VIRTUAL_TERMINAL_INPUT bayrağı sorgu komutlarına uygulanmaz. Sorguyu yapan bir uygulamanın her zaman yanıtı almak isteyeceği varsayılır.

Sıra Kod Açıklama Davranış
ESC [ 6 n DECXCPR Rapor İmleci Konumu İmleç konumunu şu şekilde yayar: ESC [ <r> ; <c> R Burada <r> = imleç satırı ve <c> = imleç sütunu
ESC [ 0 c DA Cihaz Öznitelikleri Terminal kimliğini bildirin. "\x1b[?1; 0c", "Seçenekler Olmadan VT101" seçeneğini gösterir.

Sekmeler

Windows konsolu geleneksel olarak sekmelerin yalnızca sekiz karakter genişliğinde olmasını beklese de, belirli dizileri kullanan *nix uygulamaları, uygulama tarafından imleç hareketini iyileştirmek için sekme duraklarının konsol pencerelerinin içinde nerede olduğunu işleyebilir.

Aşağıdaki diziler, bir uygulamanın konsol penceresinde sekme durağı konumlarını ayarlamasına, kaldırmasına ve aralarında gezinmesine olanak sağlar.

Sıra Kod Açıklama Davranış
ESC H HTS Yatay Sekme Kümesi İmlecin içinde olduğu geçerli sütunda bir sekme durağı ayarlar.
ESC [ <n> I CHT Yatay İmleç (İleri) Sekmesi sekme durağıyla imleci sonraki sütuna (aynı satırda) ilerletin. Başka sekme durağı yoksa, satırdaki son sütuna geçin. İmleç son sütundaysa, sonraki satırın ilk sütununa gidin.
ESC [ <n> Z CBT geriye doğru imleç sekmesi İmleci sekme durağıyla önceki sütuna (aynı satırda) taşıyın. Başka sekme durağı yoksa, imleci ilk sütuna taşır. İmleç ilk sütundaysa, imleci hareket ettirmez.
ESC [ 0 g TBC Sekme Temizle (geçerli sütun) Varsa geçerli sütundaki sekme durağını temizler. Aksi takdirde hiçbir şey yapmaz.
ESC [ 3 g TBC Sekme Temizle (tüm sütunlar) Ayarlanmış olan tüm sekme duraklarını temizler.
  • Hem CHT hem de CBT için n>, <imlecin belirtilen yönde kaç kez ilerletildiğini belirten isteğe bağlı bir parametredir (default=1).
  • HTS aracılığıyla ayarlanmış sekme durağı yoksa, CHT ve CBT pencerenin ilk ve son sütunlarını yalnızca iki sekme durağı olarak ele alır.
  • Sekme durağı ayarlamak için HTS kullanmak, konsolun CHT ile aynı şekilde sekme (0x09, '\t') karakterinin çıkışında bir sonraki sekme durağına gitmesine de neden olur.

Karakter Kümesi Belirle

Aşağıdaki diziler, bir programın etkin karakter kümesi eşlemesini değiştirmesine olanak sağlar. Bu, bir programın 7 bit ASCII karakterleri yaymasına izin verir, ancak bunların terminal ekranının kendisinde diğer glifler olarak görüntülenmesini sağlar. Şu anda yalnızca iki desteklenen karakter kümesi ASCII (varsayılan) ve DEC Özel Grafik Karakter Kümesi'dir. DEC Özel Grafik Karakter Kümesi tarafından temsil edilen tüm karakterlerin listesi için bkz http://vt100.net/docs/vt220-rm/table2-4.html .

Sıra Açıklama Davranış
ESC ( 0 Karakter Kümesi Belirle – DEC Çizgi Çizimi DEC Çizgi Çizim Modunu etkinleştirir
ESC ( B Karakter Kümesi Belirleme – ABD ASCII ASCII Modunu Etkinleştirir (Varsayılan)

Özellikle, DEC Çizgi Çizim modu konsol uygulamalarında kenarlıkları çizmek için kullanılır. Aşağıdaki tabloda hangi ASCII karakterinin hangi çizgi çizim karakteriyle eşlendiği gösterilmektedir.

Büyü ASCII DEC Çizgi Çizimi
0x6a j
0x6b k
0x6c l
0x6d m
0x6e n
0x71 q
0x74 t
0x75 u
0x76 v
0x77 w
0x78 x

Kaydırma Kenar Boşlukları

Aşağıdaki diziler, bir programın kaydırma işlemlerinden etkilenen ekranın "kaydırma bölgesini" yapılandırmasına olanak sağlar. Bu, ekranın başka bir şekilde kaydıracağı durumlarda (örneğin, bir '\n' veya RI üzerinde) ayarlanan satırların bir alt kümesidir. Bu kenar boşlukları, Satır Ekle (IL) ve Satırı Sil (DL), Yukarı Kaydır (SU) ve Aşağı Kaydır (SD) ile değiştirilen satırları da etkiler.

Kaydırma kenar boşlukları özellikle ekranın geri kalanı doldurulduğunda kaydırmayan bir bölümüne sahip olmak için yararlı olabilir; örneğin, uygulamanızın en üstünde bir başlık çubuğu veya uygulamanızın en altında bir durum çubuğu olması.

DECSTBM için, kaydırma bölgesinin üst ve <alt satırlarını <> (dahil) temsil eden satırları belirtmek için kullanılan t ve b> olmak üzere iki isteğe bağlı parametre vardır. Parametreler atlanırsa, <t> varsayılan olarak 1 ve <b> varsayılan olarak geçerli görünüm penceresi yüksekliği olur.

Kaydırma kenar boşlukları arabellek başınadır, bu nedenle önemli olan Alternatif Arabellek ve Ana Arabellek ayrı kaydırma kenar boşlukları ayarlarını korur (bu nedenle alternatif arabellekteki tam ekran bir uygulama ana arabelleğindeki kenar boşluklarını zehirlemez).

Sıra Kod Açıklama Davranış
ESC [ <t> ; <b> r DECSTBM Kaydırma Bölgesini Ayarla Görünüm penceresine ait VT kaydırma kenar boşluklarını ayarlar.

Pencere Başlığı

Aşağıdaki komutlar, uygulamanın konsol penceresinin başlığını verilen <dize> parametresine ayarlamasını sağlar. Dizenin kabul edilmesi için 255 karakterden az olması gerekir. Bu, verilen dizeyle SetConsoleTitle çağrısıyla eşdeğerdir.

Bu dizilerin OSC "İşletim sistemi komutu" dizileri olduğunu ve listelenen diğer dizilerin çoğu gibi bir CSI olmadığını ve bu nedenle "\x1b[" değil "\x1b]" ile başladığını unutmayın. OSC dizileri olarak, ile temsil edilen <ST> ve ile iletilen bir Dize Sonlandırıcı ile ESC \0x1B 0x5Csonlandırılır. BEL (0x7) yerine sonlandırıcı olarak kullanılabilir, ancak daha uzun form tercih edilir.

Sıra Açıklama Davranış
ESC ] 0 ; <dizgi><ST> Pencere Başlığını Ayarla Konsol penceresinin başlığını dize> olarak <ayarlar.
ESC ] 2 ; <dizgi><ST> Pencere Başlığını Ayarla Konsol penceresinin başlığını dize> olarak <ayarlar.

Buradaki sonlandırıcı karakter "Bell" karakteridir, '\x07'

Alternatif Ekran AraBelleği

*Nix stilindeki uygulamalar genellikle alternatif bir ekran arabelleği kullanır, böylece bunları başlatan uygulamayı etkilemeden arabelleğin tüm içeriğini değiştirebilirler. Alternatif arabellek, herhangi bir kaydırma bölgesi olmadan tam olarak pencerenin boyutlarıdır.

Bu davranışa bir örnek için, vim'in bash'ten ne zaman başlatıldığını göz önünde bulundurun. Vim, dosyayı düzenlemek için ekranın tamamını kullanır, ardından bash'e dönmek özgün arabelleği değiştirmeden bırakır.

Sıra Açıklama Davranış
ESC [ ? 1 0 4 9 s Alternatif Ekran Arabelleği Kullanma Yeni bir alternatif ekran arabelleğine geçer.
ESC [ ? 1 0 4 9 l Ana Ekran Arabelleği Kullanma Ana arabelleğe geçer.

Pencere Genişliği

Konsol penceresinin genişliğini denetlemek için aşağıdaki diziler kullanılabilir. Bunlar, pencere genişliğini ayarlamak için SetConsoleScreenBufferInfoEx konsol API'sinin çağrılmasıyla kabaca eşdeğerdir.

Sıra Kod Açıklama Davranış
ESC [ ? 3 sa DECCOLM Sütun Sayısını 132 olarak ayarlayın Konsol genişliğini 132 sütun genişliğinde ayarlar.
ESC [ ? 3 l DECCOLM Sütun Sayısını 80 olarak ayarlayın Konsol genişliğini 80 sütun genişliğinde ayarlar.

Geçici Sıfırlama

Aşağıdaki sıra, belirli özellikleri varsayılan değerlerine sıfırlamak için kullanılabilir. Aşağıdaki özellikler aşağıdaki varsayılan değerlere sıfırlanır (bu özellikleri denetleyen diziler de listelenir):

  • İmleç görünürlüğü: görünür (DECTEM)
  • Sayısal Tuş Takımı: Sayısal Mod (DECNKM)
  • İmleç Tuşları Modu: Normal Mod (DECCKM)
  • Üst ve Alt Kenar Boşlukları: Top=1, Bottom=Konsol yüksekliği (DECSTBM)
  • Karakter Kümesi: US ASCII
  • Grafik İşleme: Varsayılan/Kapalı (SGR)
  • İmleç durumunu kaydet: Giriş konumu (0,0) (DECSC)
Sıra Kod Açıklama Davranış
ESC [ ! p DECSTR Geçici Sıfırlama Bazı terminal ayarlarını varsayılan ayarlarına sıfırlayın.

Giriş Dizileri

SetConsoleMode bayrağı kullanılarak giriş arabelleğinde ENABLE_VIRTUAL_TERMINAL_INPUT bayrağı ayarlandıysa, giriş akışında konsol konağı tarafından aşağıdaki terminal dizileri yayılır.

Verilen giriş tuşları için hangi sıraların yayıldığını denetleyen iki iç mod vardır: İmleç Tuşları Modu ve Tuş Takımı Tuşları Modu. Bunlar Mod Değişiklikleri bölümünde açıklanmıştır.

İmleç Tuşları

Anahtar Normal Mod Uygulama Modu
Yukarı Ok ESC [ A ESC O A
Aşağı Ok ESC [ B ESC O B
Sağ Ok ESC [ C ESC O C
Sol Ok ESC [ D ESC O D
Ev ESC [ H ESC O H
End ESC [ F ESC O F

Ayrıca, Ctrl tuşuna bu tuşlardan herhangi biriyle basılırsa, İmleç Tuşları Modu'na bakılmaksızın bunun yerine aşağıdaki sıralar yayılır:

Anahtar Herhangi Bir Mod
Ctrl + Yukarı Ok ESC [ 1 ; 5 A
Ctrl + Aşağı Ok ESC [ 1 ; 5 B
Ctrl + Sağ Ok ESC [ 1 ; 5 C
Ctrl + Sol Ok ESC [ 1 ; 5 D

Numpad & İşlev Tuşları

Anahtar Sıra
Geri tuşu 0x7f (DEL)
Durdur 0x1a (SUB)
Kaçmak 0x1b (ESC)
Yerleştir ESC [ 2 ~
Sil ESC [ 3 ~
Sayfa Yukarı ESC [ 5 ~
Sayfa Aşağı ESC [ 6 ~
F1 ESC O P
F2 ESC O Q
F3 ESC O R
F4 ESC O S
F5 ESC [ 1 5 ~
F6 ESC [ 1 7 ~
F7 ESC [ 1 8 ~
F8 ESC [ 1 9 ~
F9 ESC [ 2 0 ~
F10 ESC [ 2 1 ~
F11 ESC [ 2 3 ~
F12 ESC [ 2 4 ~

Değiştirici

Alt, diziye bir kaçış ön eki eklenerek kabul edilir: ESC <c> burada <c> , işletim sistemi tarafından geçirilen karakterdir. Alt+Ctrl, işletim sisteminin c> tuşunu uygulamaya geçirilecek uygun denetim karakterine önceden kaydırmış <olması dışında aynı şekilde işlenir.

Ctrl genellikle tam olarak sistemden alınan şekilde geçirilir. Bu genellikle denetim karakteri ayrılmış alanına (0x0-0x1f) kaydırılan tek bir karakterdir. Örneğin, Ctrl+@ (0x40) NUL (0x00), Ctrl+[ (0x5b) ESC (0x1b) vb. olur. Birkaç Ctrl tuş bileşimi, aşağıdaki tabloya göre özel olarak ele alınıyor:

Anahtar Sıra
Ctrl + Ara Çubuğu 0x00 (NUL)
Ctrl + Yukarı Ok ESC [ 1 ; 5 A
Ctrl + Aşağı Ok ESC [ 1 ; 5 B
Ctrl + Sağ Ok ESC [ 1 ; 5 C
Ctrl + Sol Ok ESC [ 1 ; 5 D

Uyarı

Sol Ctrl + Sağ Alt , AltGr olarak değerlendirilir. Her ikisi de birlikte görüldüğünde, bunlar çıkarılır ve sistem tarafından sunulan karakterin Unicode değeri hedefe geçirilir. Sistem, geçerli sistem giriş ayarlarına göre AltGr değerlerini önceden çevirir.

Örnekleri

SGR terminal dizileri örneği

Aşağıdaki kod, çeşitli metin biçimlendirme örnekleri sağlar.

#include <stdio.h>
#include <wchar.h>
#include <windows.h>

int main()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return GetLastError();
    }

    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode))
    {
        return GetLastError();
    }

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode))
    {
        return GetLastError();
    }

    // Try some Set Graphics Rendition (SGR) terminal escape sequences
    wprintf(L"\x1b[31mThis text has a red foreground using SGR.31.\r\n");
    wprintf(L"\x1b[1mThis text has a bright (bold) red foreground using SGR.1 to affect the previous color setting.\r\n");
    wprintf(L"\x1b[mThis text has returned to default colors using SGR.0 implicitly.\r\n");
    wprintf(L"\x1b[34;46mThis text shows the foreground and background change at the same time.\r\n");
    wprintf(L"\x1b[0mThis text has returned to default colors using SGR.0 explicitly.\r\n");
    wprintf(L"\x1b[31;32;33;34;35;36;101;102;103;104;105;106;107mThis text attempts to apply many colors in the same command. Note the colors are applied from left to right so only the right-most option of foreground cyan (SGR.36) and background bright white (SGR.107) is effective.\r\n");
    wprintf(L"\x1b[39mThis text has restored the foreground color only.\r\n");
    wprintf(L"\x1b[49mThis text has restored the background color only.\r\n");

    return 0;
}

Uyarı

Önceki örnekte,'\x1b[31m' dizesi ESC [ <n> m<ve n> değeri 31 olan uygulamadır.

Aşağıdaki grafikte önceki kod örneğinin çıktısı gösterilmektedir.

sgr komutunu kullanarak konsolun çıktısı

Sanal Terminal İşlemeyi Etkinleştirme Örneği

Aşağıdaki kod, bir uygulama için sanal terminal işlemeyi etkinleştirmenin önerilen yolunun bir örneğini sağlar. Örneğin amacı aşağıdakileri göstermektir:

  1. Mevcut mod her zaman GetConsoleMode aracılığıyla alınmalıdır ve SetConsoleMode ile ayarlanmadan önce analiz edilmelidir.

  2. SetConsoleMode'un döndürdüğü 0 ve GetLastError'ın ERROR_INVALID_PARAMETER döndürip döndürmediğini denetlemek, alt düzey bir sistemde çalışırken belirlemek için geçerli mekanizmadır. Bit alanındaki yeni konsol modu bayraklarından birine sahip ERROR_INVALID_PARAMETER alan bir uygulama, davranışı düzgün bir şekilde düşürüp yeniden denemelidir.

#include <stdio.h>
#include <wchar.h>
#include <windows.h>

int main()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return false;
    }
    HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
    if (hIn == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    DWORD dwOriginalOutMode = 0;
    DWORD dwOriginalInMode = 0;
    if (!GetConsoleMode(hOut, &dwOriginalOutMode))
    {
        return false;
    }
    if (!GetConsoleMode(hIn, &dwOriginalInMode))
    {
        return false;
    }

    DWORD dwRequestedOutModes = ENABLE_VIRTUAL_TERMINAL_PROCESSING | DISABLE_NEWLINE_AUTO_RETURN;
    DWORD dwRequestedInModes = ENABLE_VIRTUAL_TERMINAL_INPUT;

    DWORD dwOutMode = dwOriginalOutMode | dwRequestedOutModes;
    if (!SetConsoleMode(hOut, dwOutMode))
    {
        // we failed to set both modes, try to step down mode gracefully.
        dwRequestedOutModes = ENABLE_VIRTUAL_TERMINAL_PROCESSING;
        dwOutMode = dwOriginalOutMode | dwRequestedOutModes;
        if (!SetConsoleMode(hOut, dwOutMode))
        {
            // Failed to set any VT mode, can't do anything here.
            return -1;
        }
    }

    DWORD dwInMode = dwOriginalInMode | dwRequestedInModes;
    if (!SetConsoleMode(hIn, dwInMode))
    {
        // Failed to set VT input mode, can't do anything here.
        return -1;
    }

    return 0;
}

Yıl Dönümü Güncelleştirme Özelliklerini Seçme Örneği

Aşağıdaki örnek, Windows 10 için Yıldönümü Güncelleştirmesi'ne eklenen özelliklere vurgu yapmak üzere arabelleği işlemek için çeşitli kaçış dizileri kullanan daha sağlam bir kod örneği olarak tasarlanmıştır.

Bu örnek, alternatif ekran arabelleğinin kullanılmasını, sekme duraklarının değiştirilmesini, kaydırma kenar boşluklarının ayarlanmasını ve karakter kümesinin değiştirilmesini sağlar.

// System headers
#include <windows.h>

// Standard library C-style
#include <wchar.h>
#include <stdlib.h>
#include <stdio.h>

#define ESC "\x1b"
#define CSI "\x1b["

bool EnableVTMode()
{
    // Set output mode to handle virtual terminal sequences
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        return false;
    }

    DWORD dwMode = 0;
    if (!GetConsoleMode(hOut, &dwMode))
    {
        return false;
    }

    dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
    if (!SetConsoleMode(hOut, dwMode))
    {
        return false;
    }
    return true;
}

void PrintVerticalBorder()
{
    printf(ESC "(0"); // Enter Line drawing mode
    printf(CSI "104;93m"); // bright yellow on bright blue
    printf("x"); // in line drawing mode, \x78 -> \u2502 "Vertical Bar"
    printf(CSI "0m"); // restore color
    printf(ESC "(B"); // exit line drawing mode
}

void PrintHorizontalBorder(COORD const Size, bool fIsTop)
{
    printf(ESC "(0"); // Enter Line drawing mode
    printf(CSI "104;93m"); // Make the border bright yellow on bright blue
    printf(fIsTop ? "l" : "m"); // print left corner 

    for (int i = 1; i < Size.X - 1; i++)
        printf("q"); // in line drawing mode, \x71 -> \u2500 "HORIZONTAL SCAN LINE-5"

    printf(fIsTop ? "k" : "j"); // print right corner
    printf(CSI "0m");
    printf(ESC "(B"); // exit line drawing mode
}

void PrintStatusLine(const char* const pszMessage, COORD const Size)
{
    printf(CSI "%d;1H", Size.Y);
    printf(CSI "K"); // clear the line
    printf(pszMessage);
}

int __cdecl wmain(int argc, WCHAR* argv[])
{
    argc; // unused
    argv; // unused
    //First, enable VT mode
    bool fSuccess = EnableVTMode();
    if (!fSuccess)
    {
        printf("Unable to enter VT processing mode. Quitting.\n");
        return -1;
    }
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    if (hOut == INVALID_HANDLE_VALUE)
    {
        printf("Couldn't get the console handle. Quitting.\n");
        return -1;
    }

    CONSOLE_SCREEN_BUFFER_INFO ScreenBufferInfo;
    GetConsoleScreenBufferInfo(hOut, &ScreenBufferInfo);
    COORD Size;
    Size.X = ScreenBufferInfo.srWindow.Right - ScreenBufferInfo.srWindow.Left + 1;
    Size.Y = ScreenBufferInfo.srWindow.Bottom - ScreenBufferInfo.srWindow.Top + 1;

    // Enter the alternate buffer
    printf(CSI "?1049h");

    // Clear screen, tab stops, set, stop at columns 16, 32
    printf(CSI "1;1H");
    printf(CSI "2J"); // Clear screen

    int iNumTabStops = 4; // (0, 20, 40, width)
    printf(CSI "3g"); // clear all tab stops
    printf(CSI "1;20H"); // Move to column 20
    printf(ESC "H"); // set a tab stop

    printf(CSI "1;40H"); // Move to column 40
    printf(ESC "H"); // set a tab stop

    // Set scrolling margins to 3, h-2
    printf(CSI "3;%dr", Size.Y - 2);
    int iNumLines = Size.Y - 4;

    printf(CSI "1;1H");
    printf(CSI "102;30m");
    printf("Windows 10 Anniversary Update - VT Example");
    printf(CSI "0m");

    // Print a top border - Yellow
    printf(CSI "2;1H");
    PrintHorizontalBorder(Size, true);

    // // Print a bottom border
    printf(CSI "%d;1H", Size.Y - 1);
    PrintHorizontalBorder(Size, false);

    wchar_t wch;

    // draw columns
    printf(CSI "3;1H");
    int line = 0;
    for (line = 0; line < iNumLines * iNumTabStops; line++)
    {
        PrintVerticalBorder();
        if (line + 1 != iNumLines * iNumTabStops) // don't advance to next line if this is the last line
            printf("\t"); // advance to next tab stop

    }

    PrintStatusLine("Press any key to see text printed between tab stops.", Size);
    wch = _getwch();

    // Fill columns with output
    printf(CSI "3;1H");
    for (line = 0; line < iNumLines; line++)
    {
        int tab = 0;
        for (tab = 0; tab < iNumTabStops - 1; tab++)
        {
            PrintVerticalBorder();
            printf("line=%d", line);
            printf("\t"); // advance to next tab stop
        }
        PrintVerticalBorder();// print border at right side
        if (line + 1 != iNumLines)
            printf("\t"); // advance to next tab stop, (on the next line)
    }

    PrintStatusLine("Press any key to demonstrate scroll margins", Size);
    wch = _getwch();

    printf(CSI "3;1H");
    for (line = 0; line < iNumLines * 2; line++)
    {
        printf(CSI "K"); // clear the line
        int tab = 0;
        for (tab = 0; tab < iNumTabStops - 1; tab++)
        {
            PrintVerticalBorder();
            printf("line=%d", line);
            printf("\t"); // advance to next tab stop
        }
        PrintVerticalBorder(); // print border at right side
        if (line + 1 != iNumLines * 2)
        {
            printf("\n"); //Advance to next line. If we're at the bottom of the margins, the text will scroll.
            printf("\r"); //return to first col in buffer
        }
    }

    PrintStatusLine("Press any key to exit", Size);
    wch = _getwch();

    // Exit the alternate buffer
    printf(CSI "?1049l");

}