aboutsummaryrefslogtreecommitdiff
path: root/src/libutil/terminal.hh
diff options
context:
space:
mode:
Diffstat (limited to 'src/libutil/terminal.hh')
-rw-r--r--src/libutil/terminal.hh40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/libutil/terminal.hh b/src/libutil/terminal.hh
new file mode 100644
index 000000000..43df5bd70
--- /dev/null
+++ b/src/libutil/terminal.hh
@@ -0,0 +1,40 @@
+#pragma once
+///@file
+
+#include <limits>
+#include <string>
+
+namespace nix {
+
+/**
+ * Determine whether ANSI escape sequences are appropriate for the
+ * present output.
+ */
+bool shouldANSI();
+
+/**
+ * Truncate a string to 'width' printable characters. If 'filterAll'
+ * is true, all ANSI escape sequences are filtered out. Otherwise,
+ * some escape sequences (such as colour setting) are copied but not
+ * included in the character count. Also, tabs are expanded to
+ * spaces.
+ */
+std::string filterANSIEscapes(std::string_view s,
+ bool filterAll = false,
+ unsigned int width = std::numeric_limits<unsigned int>::max());
+
+/**
+ * Recalculate the window size, updating a global variable. Used in the
+ * `SIGWINCH` signal handler.
+ */
+void updateWindowSize();
+
+/**
+ * @return the number of rows and columns of the terminal.
+ *
+ * The value is cached so this is quick. The cached result is computed
+ * by `updateWindowSize()`.
+ */
+std::pair<unsigned short, unsigned short> getWindowSize();
+
+}