Bladeren bron

refactor: better printing, empty handling

Sam Jaffe 1 jaar geleden
bovenliggende
commit
fb7dd23ddf
3 gewijzigde bestanden met toevoegingen van 36 en 14 verwijderingen
  1. 5 12
      include/ncurses-wrapper/window.h
  2. 4 2
      src/cli.cxx
  3. 27 0
      src/window.cxx

+ 5 - 12
include/ncurses-wrapper/window.h

@@ -73,16 +73,9 @@ private:
   NCURSES_ATTR_T to_attr(ColorPair const &color) const;
 };
 
-template <typename T>
-Window &operator<<(Window &os, T const &value) {
-  std::stringstream ss;
-  ss << value;
-  os.printf("%s", ss.str().c_str());
-  return os;
-}
-
-inline Window &operator<<(Window &os, char const *str) {
-  os.printf("%s", str);
-  return os;
-}
+Window &operator<<(Window &os, std::string const &value);
+Window &operator<<(Window &os, std::string_view value);
+Window &operator<<(Window &os, char const *value);
+Window &operator<<(Window &os, int value);
+Window &operator<<(Window &os, char value);
 }

+ 4 - 2
src/cli.cxx

@@ -55,8 +55,10 @@ void Cli::loop(std::function<void(curses::Window &, std::string)> on_enter) {
     case 10:
     case KEY_ENTER:
       window_.printf("\n");
-      on_enter(window_, get());
-      stack_.emplace_back();
+      if (!get().empty()) {
+        on_enter(window_, get());
+        stack_.emplace_back();
+      }
       window_.printf("%s", prompt_.c_str());
       break;
     default:

+ 27 - 0
src/window.cxx

@@ -58,3 +58,30 @@ void Window::clear_line() {
 }
 void Window::clear() { wclear(self_); }
 }
+
+namespace curses {
+Window &operator<<(Window &os, std::string const &value) {
+  os.printf("%s", value.c_str());
+  return os;
+}
+
+Window &operator<<(Window &os, std::string_view value) {
+  os.printf("%.*s", value.size(), value.data());
+  return os;
+}
+
+Window &operator<<(Window &os, char const *value) {
+  os.printf("%s", value);
+  return os;
+}
+
+Window &operator<<(Window &os, int value) {
+  os.printf("%d", value);
+  return os;
+}
+
+Window &operator<<(Window &os, char value) {
+  os.printf("%c", value);
+  return os;
+}
+}