[Nasıl] ANSI Kaçış Dizileriyle Renkli Uçbirim Yazıları

Başlatan iiilker99, 28 Ağustos 2014 - 12:32:30

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

iiilker99

İyi günler herkese.

Ben bu forumun yeni bir kullanıcısı olarak -ki bu benim ilk iletim oluyor- size yazılımlarınızda ve betiklerinizde kullanabileceğiniz ilginç bir yöntem öğretmek istiyorum. Bu konuyu açmadan önce forumda arama yaptım ve bununla ilgili bir şey bulamayınca yazmaya karar verdim.  Umarım beğenirsiniz. Bu yöntemle uçbirimde yazıların ön ve arka planlarını değişik renklerde ya da değişik biçimlerde yapabilirsiniz.

Neden Uçbirimde Renkli/Biçimli Yazı Çıkarmak İsteyelim ki?
Bir yazılım kendisini kullanıcısına açık, basit ve okunaklı bir yoldan anlatması gerekiyor. Eğer siz yazılımcıysanız, bunun sorumlusu da sizsiniz. Renkli ve biçimli yazılar bu konuda size yardımcı olur.  Bu yöntemin iyi ve kötü yanlarını sıralayarak sizlere bu yöntemin değerlendirilmesi konusunda yardımcı olayım:

İyi Yanlar:

  • Çıktıyı daha okunaklı, anlaşılır kılar.
  • Çıktının rengi sayesinde o dili bilmeyen biri yazıya baktığında onun iyi mi kötü mü olduğu konusunda fikir sahibi olabilir. (Örn. Kırmızı yazı bir sorunu bildiriyor olabilir)
  • Doğru kullanılırsa, yazıyı daha düzenli kılar.
  • Yazı tabanlı oyun yapıyorsanız, renkli ve biçimli yazılar oyununuza farklı bir hava katabilir, daha eğlenceli yapabilir.
  • Neredeyse tüm yazılım dillerinde çalışacaktır.
  • Uçbirimde renkli yazı yazdırmak için kullanılan modüllerin aksine, hiçbir modüle gerek duymadan renkli yazı çıkarabilirsiniz.[]
Kötü Yanlar:

  • Bu özelliği tüm sistemler ve uçbirimler desteklemez... (Eğer desteklemeyen bir uçbirimde yazdırmaya çalışırsanız ne olacağını birazdan anlatacağım)
  • Tüm sistemler desteklemediği için taşınabilirliği düşürebilir.
  • Yanlış kullanılırsa görüntü kirliliğine neden olabilir.

Geçelim uygulamasına...
Bu yöntemi  her türlü yazılım dilinde ve betikte kullanabilirsiniz. Öncelikle kodların nasıl kullanıldığını göstereyim:

  • Önce kaçış karakterini atarak kod yazdığınızı bildirin: \033
  • Ardından "[m" (tırnaksız) yazın. Bu iki karakter arasına değişkeleri (parametre) aralarında ; olacak şekilde yazın. Örneğin kodlarımız 1 (kalın yazı) ve 31 (Kırmızı yazı) olsun.
  • Göstermek istediğiniz yazıyı yazdıktan sonra (yazıyla kod arasında boşluk olmamalı) ayarları sıfırlamak için \033[0m yazın.

Sonuçta şöyle bir şey ortaya çıkacak: "\033[1;31mKalın kızıl yazı\033[0m"
İsterseniz hemen şimdi deneyelim. Ctrl+Alt+T basın ve "python" yazın. Sonra print ("\033[1;31mKalın kızıl yazı\033[0m") yazın ve çalıştırın. Sade, düz ve sıradan yazıların arasında dikkatleri üzerine çeken, kırmızı ve kalın bir yazı belirecektir.


echo komutuyla denedim, uçbirimim desteklemesine karşın renkli yazı görünmedi!
Bu yöntemi echo komutuyla kullanmak için aynı zamanda "-e" değişkesini girmeniz gerekiyor. Yani:
echo "\033[1;31mKalın kızıl yazı\033[0m"
Üstteki komut renkli yazı çıkarmaz, ancak:
echo -e "\033[1;31mKalın kızıl yazı\033[0m"
bu çıkarır.


Uçbirim desteklemiyorsa ne olur?
Berbat ve okunaksız bir kod yığını görünür.  Kullanıcının uçbiriminin destekleyip desteklemediğini öğrenmek istiyorsanız, aşağıdaki Python betiği işe yarayabilir.
>>> import curses
>>> curses.setupterm()
>>> curses.tigetnum("colors")
8
# => Eğer desteklemiyorsa -2 döndürür
# => Uçbirimden bilgi alınamadıysa -1 döndürür
# Öyle görülüyor ki benimki destekliyor :)

Ne yazık ki başka diller için bir yol bulamadım. Ancak isterseniz önce renkli bir yazı göstererek kullanıcıya renkli bir yazı gösterip bu yazının görünüp görünmediğini sorabilirsiniz. Böylece destekleyip desteklemediğini kullanıcıdan girdi olarak alabilirsiniz.

Bu kodların bir çizelgesini nereden bulabilirim?
Buyursunlar: http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
Burada da benim kendi yaptığım, bilgisayarımda çalışmalarına ve kendi gözüme göre ayarladığım bir çizelge var (hem de Türkçe!)
Yalnızca çalışan (yani fark yaratan) kodları dikkate aldım. Python'dan yararlandım.
Açıklama                                          Sayı
 
Ayarları Sıfırla                                         0

----------------------Yazı Biçimleri----------------------
Kalın yazı                                               1
Silik/i̇nce yazı                                          2
Altı çizili                                              4
Ters renkler                                             7
Gizli yazı                                               8
Üstü çizili                                              9
----------------------------------------------------------

----------------------Yazı Renkleri-----------------------
Siyah yazı                                              30
Kırmızı yazı                                            31
Yeşil yazı                                              32
Kahverengi-sarı yazı                                    33
Mavi yazı                                               34
Pembe yazı                                              35
Turkuaz yazı                                            36
Beyaz yazı (sıradan yazılarla aynı görünüyor)           37
----------------------------------------------------------

---------------------Artalan Renkleri---------------------
Siyah artalan                                           40
Kırmızı artalan                                         41
Yeşil artalan                                           42
Kahverengi-sarı artalan                                 43
Mavi artalan                                            44
Pembe artalan                                           45
Turkuaz artalan                                         46
Beyaz artalan                                           47
----------------------------------------------------------

--------------------Açık Yazı Renkleri--------------------
Açık siyah-gri yazı                                     90
Açık kırmızı yazı                                       91
Açık yeşil yazı                                         92
Açık sarı yazı                                          93
Açık mavi-mor yazı                                      94
Açık pembe yazı                                         95
Açık turkuaz yazı                                       96
Açık beyaz (parlak) yazı                                97
----------------------------------------------------------

------------------Açık Artalan Renkleri-------------------
Açık siyah-gri artalan                                 100
Açık kırmızı artalan                                   101
Açık yeşil artalan                                     102
Açık sarı artalan                                      103
Açık mavi-mor artalan                                  104
Açık pembe artalan                                     105
Açık turkuaz artalan                                   106
Açık beyaz (parlak) artalan                            107
----------------------------------------------------------




Bu yöntemi nerelerde kullanabilirim?

Uçbirim desteklediği sürece uçbirime çıktı verebilen her yerde, her dilde! Unutmayınız ki uçbirim olmak zorunda. Eğer Eclipse, IDLE gibi giriş-çıkış nesnelerini değiştiren (yani uçbirime değil de kendisine çıktı veren) bir geliştirme ortamı kullanıyorsanız olmayabilir.

Örneğin burada Eclipse, uçbirim kullanmamak için giriş-çıkış nesnelerini değiştiriyor; bu yüzden koca bir çöplük görüyoruz. Buna karşın uçbirimde sorun yok.

Aynı olay IDLE'da gerçekleşti...

Bunu yapmanın daha kolay bir yolu var mı?

Eğer bunu yapmak zorsa, bunları birer sabit olarak belirleyip de kullanabilirsiniz.
Örneğin Python'da:
class renk: #pythonda sabit olmadığı için böyle yaptım
    Kırmızı="\033[31m"
    Yeşil="\033[32m"
    Kalın="\033[1m"
    Sıfırla="\033[0m"

print(renk.Yeşil+renk.Kalın+"Yazı"+renk.Sıfırla)


Bu da Java'da:

package src.denemeler;

public class RenkliYazı{
public static final String Kırmızı="\033[31m";
public static final String Yeşil="\033[32m";
public static final String Kalın="\033[1m";
public static final String Sıfırla="\033[0m";

public static void main(String[] a){
System.out.println(Yeşil+Kalın+"Hoşgeldiniz!"+Sıfırla);
}
};



Umarım anlatabilmişimdir. Hatalarım olabilir. Akılda kalan sorularınızı sormayı unutmayın.
İyi çalışmalar.

berkayaslan

İf you wanna be the best, You must SMURF something. :)

7hr33l3t73r

dc -e '[q]sa[ln0=aln256%Pln256/snlbx]sb207356256404211981204295703670388snlbxq'
https://www.getgnu.org/gnulinux/gnulinux-ipuclari/nasil-akillica-soru-sorulur.html

iiilker99


heartsmagic

İlk ileti ve konu için ne kadar başarılı bir anlatım olmuş. Eline sağlık @iiilker99 :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.