Soru C kodu, terminal metni rengini değiştirir; varsayılanlar nasıl geri yüklenir? Linux


Linux üzerinde çalışan bir C dosyam var. Kırmızı (başarısızlık) ve bazılarında yeşil (geçer) bazı çizgiler yazdırır. Tahmin edebileceğiniz gibi, printf ifadelerinde çıkış kodlarını aşağıdaki gibi kullanır:

#define BLACK  "\033[22;30m"
#define GREEN  "\033[22;31m"

printf(GREEN "this will show up green" BLACK "\n");

Sonunda BLACK olmasaydı, terminal metni her şey için yeşil olmaya devam edecek. Eğer onu yakalamadıysanız, siyah olmayan bir arka plana sahip bir terminal penceresi için sorun değil, aksi takdirde siyah-siyah ile sonuçlanacaksınız. İyi değil! Programın çalıştırılması, çıktıların bir metin dosyasında yakalanması ve daha sonra "daha fazla" veya "daha az" ile görüntülenmesi gibi, bu soruna da sahiptir.

Printf ifadesinin sonunda bir renk belirtmek yerine varsayılanları geri yüklemek için bir kod var mı? Bunun C dilinde olması gerekiyor ama diğer yaklaşımları okumakla ilgilenirim.

Güncelleştirme: Hepinize teşekkür ederim. Yanıtlarınız, başka yerlerde daha yararlı bilgiler bulmama yardımcı oldu. Makrolarımı aşağıdaki gibi güncelledim (not 31 kırmızıdır ve aşağıdaki yazım hatası düzeltildi):

#define RESET_COLOR "\e[m"
#define MAKE_GREEN "\e[32m"

printf(MAKE_GREEN "this will show up green" RESET_COLOR "\n");

Bu kodların nasıl çalıştığını anlamak için aşağıdaki bağlantıları buldum:

http://www.phwinfo.com/forum/comp-unix-shell/450861-bash-shell-escapes-not-working-via-putty-ssh.html  Bu kaçış dizilerinin neler yaptığını açıklar ve taşınabilirlik gerekliyse ncurses'ı kullanır.

http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-6.html

http://bluesock.org/~willg/dev/ansi.html daha fazla kaçış dizisini gösterir; büyük resmi almak için yararlı


17
2017-08-17 20:07


Menşei




Cevaplar:


Kullanmayı deneyin:

#define RESETCOLOR "\033[0m"

Bu varsayılanlara sıfırlamalıdır.

Bu terminal kodları hakkında daha fazla bilgiyi burada bulabilirsiniz: http://en.wikipedia.org/wiki/ANSI_escape_code


21
2017-08-17 20:12





"\033[0m"

Buraya bakın: http://en.wikipedia.org/wiki/ANSI_color


4
2017-08-17 20:12



Bağlantı için teşekkürler. - CSharper


tip reset terminalde.

Linux ve OSX'te sıfır olarak adlandırılan bir ikili var.


2
2017-08-17 20:15



Tam cevap değil, ama belki de ona bakmak yardımcı olur. - Nils
"Sıfırla", terminal penceresini siler ve istemciyi ekranın üst kısmına yerleştirir, bu da ihtiyacım olan etki değildir, ancak size teşekkür ederiz. - jasper77