vaguerent/lib/vagrant/util/ansi_escape_code_remover.rb
Mitchell Hashimoto 3a5f0cefb3 Remove ANSI escape codes from SSH output
Note that the ANSI escape code removal is not complete,
but is fairly comprehensive in terms of the codes that
really muck with the terminal layout.
2012-01-23 19:29:07 -08:00

36 lines
1.3 KiB
Ruby

module Vagrant
module Util
module ANSIEscapeCodeRemover
# Removes ANSI escape code sequences from the text and returns
# it.
#
# This removes all the ANSI escape codes listed here along with
# the escape codes for VT100 terminals:
#
# http://ascii-table.com/ansi-escape-sequences.php
def remove_ansi_escape_codes(text)
# An array of regular expressions which match various kinds
# of escape sequences. I can't think of a better single regular
# expression or any faster way to do this.
matchers = [/\e\[\d*[ABCD]/, # Matches things like \e[4D
/\e\[(\d*;)?\d*[HF]/, # Matches \e[1;2H or \e[H
/\e\[(s|u|2J|K)/, # Matches \e[s, \e[2J, etc.
/\e\[(\d*;){0,2}\d*m/, # Matches color escapes: \e[32m
/\e\[=\d*[hl]/, # Matches \e[=24h
/\e\[\?[1-9][hl]/, # Matches \e[?2h
/\e\[20[hl]/, # Matches \e[20l]
/\e[DME78H]/, # Matches \eD, \eH, etc.
/\e\[[0-2]?[JK]/, # Matches \e[0J, \e[K, etc.
]
# Take each matcher and replace it with emptiness.
matchers.each do |matcher|
text.gsub!(matcher, "")
end
text
end
end
end
end