Ejemplo n.º 1
0
 TerminalDisplayWin::TerminalDisplayWin():
   TerminalDisplay(false), fStartLine(0), fIsAttached(false) {
   fOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
   bool isConsole = ::GetConsoleMode(fOut, &fOldMode) != 0;
   SetIsTTY(isConsole);
   if (isConsole) {
     // Prevent redirection from stealing our console handle,
     // simply open our own.
     fOut = ::CreateFile("CONOUT$", GENERIC_READ | GENERIC_WRITE,
       FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
       FILE_ATTRIBUTE_NORMAL, NULL);
     ::GetConsoleMode(fOut, &fOldMode);
     fMyMode = fOldMode | ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT;
   }
   HandleResizeEvent();
 }
Ejemplo n.º 2
0
  // If input is not a tty don't write in tty-mode either.
  TerminalDisplayUnix::TerminalDisplayUnix():
    TerminalDisplay(TerminalConfigUnix::Get().IsInteractive()),
    fIsAttached(false), fNColors(16), fOutputID(STDOUT_FILENO)
  {
    if (::isatty(::fileno(stdin)) && !::isatty(fOutputID)) {
      // Display prompt, even if stdout is going somewhere else
      fOutputID = ::open("/dev/tty", O_WRONLY);
      SetIsTTY(true);
    }

    HandleResizeSignal(); // needs fOutputID
    gTerminalDisplayUnix() = this;
    signal(SIGWINCH, TerminalDisplayUnix__handleResizeSignal);
#ifdef TCSANOW
    TerminalConfigUnix::Get().TIOS()->c_lflag &= ~(ECHO);
    TerminalConfigUnix::Get().TIOS()->c_lflag |= ECHOCTL|ECHOKE|ECHOE;
#endif
    const char* TERM = getenv("TERM");
    if (TERM &&  strstr(TERM, "256")) {
      fNColors = 256;
    }
  }