platform_system_core/adb/line_printer.h
Elliott Hughes 77f539ab49 Simplify adb LinePrinter newline handling.
We had mostly-working hacks before, but it's time to just modify LinePrinter
to suit our needs. If we tell LinePrinter what kind of output we're giving
it, it can manage things automatically.

This fixes the minor bug where we'd sometimes have a blank line after an
error message.

Change-Id: I07ff52437f2402de311e237dd1b2dd338d9b668a
2015-12-09 18:42:41 -08:00

50 lines
1.5 KiB
C++

// Copyright 2013 Google Inc. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef NINJA_LINE_PRINTER_H_
#define NINJA_LINE_PRINTER_H_
#include <stddef.h>
#include <string>
/// Prints lines of text, possibly overprinting previously printed lines
/// if the terminal supports it.
struct LinePrinter {
LinePrinter();
bool is_smart_terminal() const { return smart_terminal_; }
void set_smart_terminal(bool smart) { smart_terminal_ = smart; }
enum LineType { INFO, WARNING, ERROR };
/// Outputs the given line. INFO output will be overwritten.
/// WARNING and ERROR appear on a line to themselves.
void Print(std::string to_print, LineType type);
/// If there's an INFO line, keep it. If not, do nothing.
void KeepInfoLine();
private:
/// Whether we can do fancy terminal control codes.
bool smart_terminal_;
/// Whether the caret is at the beginning of a blank line.
bool have_blank_line_;
#ifdef _WIN32
void* console_;
#endif
};
#endif // NINJA_LINE_PRINTER_H_