+class _LessHighlighter(AnsiHighlighter):
+
+ def __init__(self, less):
+ AnsiHighlighter.__init__(self, less.stdin)
+ self.less = less
+
+ def __del__(self):
+ self.less.stdin.close()
+ self.less.wait()
+
+
+def LessHighlighter():
+ if sys.stdout.isatty():
+ try:
+ less = subprocess.Popen(
+ args = ['less', '-FRXn'],
+ stdin = subprocess.PIPE
+ )
+ except OSError:
+ return ColorHighlighter()
+ else:
+ return _LessHighlighter(less)
+ return PlainHighlighter(sys.stdout)
+