Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 | Rİ | 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.
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:
Mevcut mod her zaman GetConsoleMode aracılığıyla alınmalıdır ve SetConsoleMode ile ayarlanmadan önce analiz edilmelidir.
SetConsoleMode'un döndürdüğü
0ve 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");
}