2014-12-18 3 views
1

Я работаю со следующей строкой:Работа с Баш ANSI символами цвета эвакуационных в Рубине

\e[48;5;15mText\e[0m 

При печати строки с помощью Баша оболочки я получаю текст с фоном и передним планом раскрашенным. Я хочу манипулировать этой строкой (включая отдельные символы в escape-последовательности) в Ruby. Когда я передаю эту строку из командной строки Ruby или когда я использую ее непосредственно в моем скрипте Ruby, escape-символ «исчезает».

Рубин Script

puts("\e[48;5;15mText\e[0m".chars.to_a) 

Ожидаемые результаты (точки представляют собой пустые пространства)

\ 
e 
[ 
4 
8 
; 
5 
; 
1 
5 
m 
T 
e 
x 
t 
\ 
e 
[ 
0 
m 

Выходной ток (точки представляют собой пустые пространства)

. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
. 
T 
e 
x 
t 
. 
. 
. 
. 
. 

Поскольку я использую строку в скрипте Ruby, и моя цель - манипулировать строкой (включая escape-символы), я чувствую, что должен иметь возможность запускать escaped_string.chars.to_a в строке и получать выходные данные отдельных символов в этом строка. Я смог сделать это как в сценариях bash, так и python без проблем.

Вопросы
1. Почему я не вижу этих спасательных персонажей?
2. Какие настройки я должен включить, чтобы «видеть» эти escape-символы?

+0

Каков ваш ожидаемый результат? – Stefan

+0

Я обновил вопрос с ожидаемым результатом. –

ответ

1

Вы не видите escape-символы, потому что эмулятор терминала перехватывает их, чтобы менять цвета и прочее и не печатает их. В этом весь смысл эвакуационных персонажей. Почти нет «настроек», которые вы можете изменить, чтобы заставить эмулятор терминала печатать их, но это, очевидно, зависит от того, какой конкретный эмулятор вы используете.

Один из способов увидеть персонажей будет делать это вместо:

"\e[48;5;15mText\e[0m".chars.each {|char| p char } 
+0

Я получаю то же самое, если попытаюсь отобразить символы, используя этот метод. –

+0

Вы имеете в виду, что получаете тот же результат? Этого не должно быть, скопировали ли вы код, который у меня есть? – Adrian

+0

Моя ошибка. Я запустил 'escaped_string.chars.each {| char | ставит (символ)} '. Который дал мне выход выше. То, что вы написали, работает, но это не позволяет мне манипулировать символами в строке. –

0

Они не только избежать символов, они являются последовательности символов.
Попробуйте вместо этого:

puts("\e[48;5;15m") 
puts("Text".chars.to_a) 
puts("\e[0m") 

Ваш существующий код эффективно печатает это:

puts("\e\n[\n4\n8\n;\n5\n;\n1\n5\nm\nT\ne\nx\nt\n\e\n[\n0\nm") 

Таким образом, последовательность маскирующим нарушается.

+0

Я предполагаю, что '\ n' являются вагонами. В этом случае то, что вы написали, именно то, что я хотел бы напечатать. Однако напечатанным является 'puts (" \ n \ n \ n \ n \ n \ n \ n \ n \ n \ nT \ ne \ nx \ nt \ n \ n \ n \ n ")'. –

 Смежные вопросы

  • Нет связанных вопросов^_^