Пример #1
0
void ConsoleHistory::add(const std::string& command)
{
   if (!command.empty())
   {
      // split input into list of commands
      boost::char_separator<char> lineSep("\n");
      boost::tokenizer<boost::char_separator<char> > lines(command, lineSep);
      for (boost::tokenizer<boost::char_separator<char> >::iterator 
           lineIter = lines.begin(); 
           lineIter != lines.end();
           ++lineIter)
      {
         // get line (skip empty lines)
         std::string line(*lineIter);
         boost::algorithm::trim(line);
         if (line.empty())
            continue;
         
         // add this line if its not a duplciate
         if (!removeDuplicates_ ||
             historyBuffer_.empty() ||
             (line != historyBuffer_.back()))
         {
            // add to buffer
            historyBuffer_.push_back(line);
         
            // notify listeners
            onAdd_(line);
         }
      }
   }
}
Пример #2
0
QString Process::getTail(uint lines)
// ----------------------------------------------------------------------------
//  Return the last N lines in the output
// ----------------------------------------------------------------------------
{
    int current = 0;
    QString tail = out;
    if (lines != ~0U)
    {
        QRegExp lineSep("[\n\r]");
        for (uint l = 0; l < lines; l++)
        {
            current = tail.lastIndexOf(lineSep, current-1);
            if (current == -1)
                break;
        }
        if (current >= 0)
            tail = tail.mid(current);
        out = tail;
    }
    return tail;
}
Пример #3
0
void addToConsoleInputBuffer(const rstudio::r::session::RConsoleInput& consoleInput)
{
   if (consoleInput.cancel || consoleInput.text.find('\n') == std::string::npos)
   {
      s_consoleInputBuffer.push(consoleInput);
      return;
   }

   // split input into list of commands
   boost::char_separator<char> lineSep("\n", "", boost::keep_empty_tokens);
   boost::tokenizer<boost::char_separator<char> > lines(consoleInput.text, lineSep);
   for (boost::tokenizer<boost::char_separator<char> >::iterator
        lineIter = lines.begin();
        lineIter != lines.end();
        ++lineIter)
   {
      // get line
      std::string line(*lineIter);

      // add to buffer
      s_consoleInputBuffer.push(rstudio::r::session::RConsoleInput(
               line, consoleInput.console));
   }
}