Menggunakan Ruby, bagaimana saya bisa melakukan pewarnaan teks latar dan latar depan untuk output di terminal?
Saya ingat, ketika memprogram Pascal kita semua biasa menulis textcolor(…)
prosedur kita sendiri untuk membuat program pendidikan kecil kita terlihat lebih cantik dan presentasional.
Bagaimana saya bisa mengkode yang setara dengan itu di Ruby?
ruby
colors
console-application
gmile
sumber
sumber
Jawaban:
Mewarnai adalah permata favorit saya! :-)
Saksikan berikut ini:
https://github.com/fazibear/colorize
Instalasi:
Pemakaian:
sumber
win32console
permata danrequire 'win32console'
setelahnyacolorize
.win32console
permata itu. github.com/luislavena/win32console/issues/…Menggabungkan jawaban di atas, Anda dapat menerapkan sesuatu yang berfungsi seperti permata berwarna tanpa perlu ketergantungan lain.
sumber
Sebagai metode kelas String (hanya unix):
dan penggunaan:
di konsol saya:
tambahan:
menghapus karakter pemformatan
Catatan
sumber
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
tidak berfungsi untuk menghapus format;puts "\e[0m"
harus digunakanSaya menulis sedikit metode untuk menguji mode warna dasar, berdasarkan jawaban oleh Erik Skoglund dan lainnya.
contoh output:
sumber
Anda dapat menggunakan urutan pelarian ANSI untuk melakukan ini di konsol. Saya tahu ini berfungsi di Linux dan OSX, saya tidak yakin apakah konsol Windows (cmd) mendukung ANSI.
Saya melakukannya di Jawa, tetapi idenya sama.
sumber
Sementara jawaban lain akan melakukan pekerjaan dengan baik untuk kebanyakan orang, cara Unix yang "benar" untuk melakukan ini harus disebutkan. Karena semua jenis terminal teks tidak mendukung urutan ini, Anda dapat meminta database terminfo , sebuah abstraksi atas kapabilitas dari berbagai terminal teks. Hal ini mungkin tampak sebagian besar dari kepentingan sejarah - terminal software yang digunakan saat ini umumnya mendukung urutan ANSI - tetapi memiliki (setidaknya) satu efek praktis: kadang-kadang berguna untuk dapat mengatur variabel lingkungan
TERM
untukdumb
menghindari semua styling seperti, misalnya saat menyimpan output ke file teks. Juga, rasanya menyenangkan melakukan hal-hal yang benar . :-)Anda dapat menggunakan permata ruby-terminfo . Perlu beberapa kompilasi C untuk menginstal; Saya dapat menginstalnya di sistem Ubuntu 14.10 saya dengan:
Kemudian Anda dapat meminta basis data seperti ini (lihat halaman manual terminfo untuk mengetahui daftar kode apa yang tersedia):
Inilah kelas pembungkus kecil yang saya kumpulkan untuk membuat segala sesuatunya menjadi lebih mudah digunakan.
Pemakaian:
(sunting) Akhirnya, jika Anda lebih suka tidak memerlukan permata, Anda dapat mengandalkan
tput
program, seperti dijelaskan di sini - Contoh Ruby:sumber
tput
. Bahkan tidak bisa mengartikulasikan betapa rambut rontoktput
telah menyelamatkan saya.Saya membuat metode ini yang bisa membantu. Ini bukan masalah besar tapi berhasil:
Berikut cara menggunakannya:
Kemungkinan peningkatan bisa:
colors
danbgColors
sedang didefinisikan setiap kali metode dipanggil dan mereka tidak berubah.bold
,underline
,dim
, dllMetode ini tidak berfungsi untuk
p
, sepertip
halnyainspect
untuk argumennya. Sebagai contoh:akan menampilkan "\ e [0; 38mHello World \ e [0m"
Saya mengujinya dengan
puts
,,print
dan permata Logger, dan itu berfungsi dengan baik.Saya meningkatkan ini dan membuat kelas jadi
colors
danbgColors
merupakan konstanta kelas dancolorize
merupakan metode kelas:EDIT: Gaya kode yang lebih baik, konstanta yang didefinisikan alih-alih variabel kelas, menggunakan simbol alih-alih string, menambahkan lebih banyak opsi seperti, tebal, miring, dll.
Anda dapat menggunakannya dengan melakukan:
sumber
Inilah yang saya lakukan untuk membuatnya bekerja tanpa membutuhkan permata:
Maka hanya teks dalam tanda kutip yang berwarna, dan Anda kembali ke program yang dijadwalkan secara rutin.
sumber
e[32mSOMETEXT
"\e(...)"
bukannya"e\(...)"
Saya menemukan beberapa:
http://github.com/ssoroka/ansi/tree/master
Contoh:
http://flori.github.com/term-ansicolor/
Contoh:
http://github.com/sickill/rainbow
Contoh:
Jika Anda menggunakan Windows, Anda mungkin perlu melakukan "permata instal win32console" untuk mengaktifkan dukungan warna.
Juga artikel Pewarnaan konsol Naskah Ruby-script berguna jika Anda perlu membuat permata Anda sendiri. Ini menjelaskan cara menambahkan pewarnaan ANSI ke string. Anda dapat menggunakan pengetahuan ini untuk membungkusnya dalam beberapa kelas yang memperluas string atau sesuatu.
sumber
Ini dapat membantu Anda: Keluaran ruby berwarna
sumber
class String; def red; colorize(self, "\033[31m"); end; end
Saya menemukan jawaban di atas berguna tetapi tidak sesuai dengan tagihan jika saya ingin mewarnai sesuatu seperti keluaran log tanpa menggunakan perpustakaan pihak ketiga. Berikut ini yang memecahkan masalah bagi saya:
Saya harap ini membantu!
sumber