| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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. |
| **/ |
| |
| #include "cli/LineReaderLineNoise.hpp" |
| |
| #include <algorithm> |
| #include <cctype> |
| #include <cstdlib> |
| #include <string> |
| #include <utility> |
| |
| #include "third_party/src/linenoise/linenoise.h" |
| |
| namespace quickstep { |
| |
| LineReaderLineNoise::LineReaderLineNoise(const std::string &default_prompt, |
| const std::string &continue_prompt) |
| : LineReader(default_prompt, continue_prompt) { |
| } |
| |
| std::string LineReaderLineNoise::getLineInternal(const bool continuing) { |
| const char *prompt; |
| if (continuing) { |
| prompt = continue_prompt_.c_str(); |
| } else { |
| prompt = default_prompt_.c_str(); |
| } |
| char *input_line; |
| |
| if ((input_line = linenoise(prompt)) != nullptr) { |
| std::string retval(input_line); |
| if (continuing |
| || !std::all_of(retval.begin(), retval.end(), ::isspace)) { |
| // Don't add a blank line that's not part of a command to history. |
| linenoiseHistoryAdd(input_line); |
| } |
| std::free(input_line); |
| return retval; |
| } else { |
| return std::string(""); |
| } |
| } |
| |
| } // namespace quickstep |