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.
36 lines
1.3 KiB
Ruby
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
|