Używając Ruby, w jaki sposób mogę wykonać kolorowanie tekstu tła i pierwszego planu w celu uzyskania wyników w terminalu?
Pamiętam, że podczas programowania Pascal wszyscy pisaliśmy własne textcolor(…)
procedury, aby nasze małe programy edukacyjne wyglądały ładniej i prezentacyjniej.
Jak mam kodować odpowiednik tego w Ruby?
ruby
colors
console-application
gmile
źródło
źródło
Odpowiedzi:
Colorize to mój ulubiony klejnot! :-)
Sprawdź to:
https://github.com/fazibear/colorize
Instalacja:
Stosowanie:
źródło
win32console
klejnot irequire 'win32console'
późniejcolorize
.win32console
klejnotu. github.com/luislavena/win32console/issues/…Łącząc powyższe odpowiedzi, możesz zaimplementować coś, co działa jak koloryzacja klejnotów bez potrzeby innej zależności.
źródło
Jako metody klasy String (tylko Unix):
i użycie:
na mojej konsoli:
dodatkowy:
usuwa znaki formatujące
Uwaga
źródło
def bold; "\e[1m#{self}\e[22m" end
cmd.exe
,puts "\e[0"
nie działa, do jasnej formie;puts "\e[0m"
należy użyćNapisałem małą metodę testowania podstawowych trybów kolorów, opartą na odpowiedziach Erika Skoglunda i innych.
przykładowe dane wyjściowe:
źródło
Możesz użyć sekwencji ucieczki ANSI, aby to zrobić na konsoli. Wiem, że działa to w systemach Linux i OSX, nie jestem pewien, czy konsola Windows (cmd) obsługuje ANSI.
Zrobiłem to w Javie, ale pomysły są takie same.
źródło
Podczas gdy inne odpowiedzi dobrze wykonają zadanie dla większości ludzi, należy wspomnieć o „poprawnym” uniksowym sposobie zrobienia tego. Ponieważ wszystkie typy terminali tekstowych nie obsługują tych sekwencji, możesz przeszukać bazę danych terminfo , co jest abstrakcją dotyczącą możliwości różnych terminali tekstowych. To może wydawać się głównie historycznych odsetki - terminale oprogramowania stosowanego obecnie powszechnie wspierać sekwencje ANSI - ale to ma (przynajmniej) jeden efekt praktyczny: czasem jest to użyteczne, aby móc ustawić zmienną środowiskową
TERM
abydumb
uniknąć wszelkich takiej stylizacji, na przykład podczas zapisywania wyniku w pliku tekstowym. Ponadto dobrze jest robić dobrze . :-)Możesz użyć klejnotu ruby-terminfo . Do zainstalowania wymaga kompilacji w języku C; Byłem w stanie zainstalować go w moim systemie Ubuntu 14.10 z:
Następnie możesz wykonać zapytanie do bazy danych w ten sposób (zobacz stronę podręcznika terminfo, aby uzyskać listę dostępnych kodów):
Oto mała klasa opakowań, którą ułożyłem, aby uczynić rzeczy nieco prostszymi w użyciu.
Stosowanie:
(edytuj) Wreszcie, jeśli wolisz nie wymagać klejnotu, możesz polegać na
tput
programie, jak opisano tutaj - przykład Rubiego:źródło
tput
. Nie mogę nawet powiedzieć, iletput
zaoszczędziłam na wypadaniu włosów .Zrobiłem tę metodę, która może pomóc. To nie jest wielka sprawa, ale działa:
Oto jak go użyć:
Możliwe ulepszenia mogą być:
colors
ibgColors
są definiowane za każdym razem, gdy wywoływana jest metoda, i nie zmieniają się.bold
,underline
,dim
, itd.Ta metoda nie działa
p
, tak jakp
robiinspect
do jego argumentacji. Na przykład:pokaże „\ e [0; 38mWitaj świat \ e [0m”
Przetestowałem to za pomocą
puts
,print
i klejnot Logger, i działa dobrze.Poprawiłem to i tak wykonane klasę
colors
ibgColors
są stałymi klasy icolorize
jest to metoda klasy:EDYCJA: Lepszy styl kodu, zdefiniowane stałe zamiast zmiennych klas, użycie symboli zamiast łańcuchów, dodano więcej opcji, takich jak, pogrubienie, kursywa itp.
Możesz z niego skorzystać, wykonując:
źródło
Oto, co zrobiłem, aby działało bez potrzeby używania klejnotów:
Wtedy tylko tekst w cytatach jest kolorowy i wracasz do regularnie zaplanowanego programu.
źródło
e[32mSOMETEXT
"\e(...)"
zamiast"e\(...)"
Znalazłem kilka:
http://github.com/ssoroka/ansi/tree/master
Przykłady:
http://flori.github.com/term-ansicolor/
Przykłady:
http://github.com/sickill/rainbow
Przykład:
Jeśli korzystasz z systemu Windows, może być konieczne wykonanie „gem install win32console”, aby włączyć obsługę kolorów.
Również artykuł Kolorowanie danych wyjściowych skryptu Ruby-skrypt jest przydatne, jeśli chcesz stworzyć własny klejnot. Wyjaśnia, jak dodać kolorowanie ANSI do łańcuchów. Możesz wykorzystać tę wiedzę do zawinięcia jej w jakąś klasę, która rozszerza łańcuch znaków lub coś takiego.
źródło
To może ci pomóc: Pokolorowane wyjście ruby
źródło
class String; def red; colorize(self, "\033[31m"); end; end
Uznałem, że powyższe odpowiedzi są przydatne, ale nie pasowały do rachunku, gdybym chciał pokolorować dane wyjściowe dziennika bez korzystania z bibliotek stron trzecich. Dla mnie problem został rozwiązany:
Mam nadzieję, że to pomoże!
źródło