Почему мой запрос IRB с цветовыми кодами ANSI искажает поведение страницы вверх/вниз при копировании/вставке?

Я добавил в свой .irbrc:

IRB.conf[:PROMPT].reverse_merge!(:RAILS_ENV => {:PROMPT_I=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_N=>"#{current_app} #{rails_env} #{prompt} ", :PROMPT_S=>nil, :PROMPT_C=>"?> ", :RETURN=>"=> %s\n"}) 
IRB.conf[:PROMPT_MODE] = :RAILS_ENV

Если я сделаю что-то вроде:

current_app = "\e[31mfoo_bar_app\e[0m"
rails_env = "\e[32m#{RAILS_ENV}\e[0m"

затем подсказка выглядит красиво раскрашенной, но если я скопирую какой-то текст в свой буфер копирования и вставлю его, если я сделаю страницу вверх/вниз, чтобы перейти к началу/концу текущего введенного текста, мой курсор как бы перейдет к в середине текста для страницы вверх и для страницы вниз он прыгает вправо в область пустых пространств, где ничего не было набрано, тогда моя позиция курсора полностью испорчена.

Есть ли способ исправить это? Очень хотелось бы раскрашенную подсказку.


person patrick    schedule 24.01.2012    source источник
comment
какую настройку терминала вы используете? например эмулятор терминала и оболочка?   -  person robustus    schedule 01.03.2012


Ответы (2)


Готов поспорить, что это похоже на вопрос, который я задал в Цветной вывод прерывает перенос строк со строкой чтения

Попробуй это:

current_app = "\001\e[31mfoo_bar_app\e[0m\002"
rails_env = "\001\e[32m#{RAILS_ENV}\e[0m\002"

По сути, ваше приглашение не игнорирует непечатаемые символы, что приводит к странным вещам.

person Eugene    schedule 23.03.2012
comment
Только управляющие коды, которые задают цвет, должны быть окружены \001 и \002, а не текст, который должен быть напечатан в цвете. В противном случае у вас проблемы в другом направлении. - person qqx; 14.12.2012

Да, только цветовой код должен быть в \001 и \002 вот так

\001\e[37m\002[%~] #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL} - r#{release}\001\e[0m\002production
person kureikain    schedule 13.11.2014