Branch data Line data Source code
1 : : // SPDX-License-Identifier: MIT OR LGPL-2.0-or-later
2 : : // SPDX-FileCopyrightText: 2021 Evan Welsh <contact@evanwelsh.com>
3 : :
4 : : #include <config.h>
5 : :
6 : : #include <stdio.h>
7 : :
8 : : #ifdef HAVE_UNISTD_H
9 : : # include <unistd.h>
10 : : #elif defined(_WIN32)
11 : : # include <io.h>
12 : : #endif
13 : :
14 : : #include <glib.h>
15 : :
16 : : #include "util/console.h"
17 : :
18 : : /**
19 : : * ANSI escape code sequences to manipulate terminals.
20 : : *
21 : : * See
22 : : * https://en.wikipedia.org/wiki/ANSI_escape_code#CSI_(Control_Sequence_Introducer)_sequences
23 : : */
24 : : namespace ANSICode {
25 : : /**
26 : : * ANSI escape code sequence to clear the terminal screen.
27 : : *
28 : : * Combination of 0x1B (Escape) and the sequence nJ where n=2,
29 : : * n=2 clears the entire display instead of only after the cursor.
30 : : */
31 : : constexpr const char CLEAR_SCREEN[] = "\x1b[2J";
32 : :
33 : : } // namespace ANSICode
34 : :
35 : : #ifdef HAVE_UNISTD_H
36 : : const int stdin_fd = STDIN_FILENO;
37 : : const int stdout_fd = STDOUT_FILENO;
38 : : const int stderr_fd = STDERR_FILENO;
39 : : #elif defined(_WIN32)
40 : : const int stdin_fd = _fileno(stdin);
41 : : const int stdout_fd = _fileno(stdout);
42 : : const int stderr_fd = _fileno(stderr);
43 : : #else
44 : : const int stdin_fd = 0;
45 : : const int stdout_fd = 1;
46 : : const int stderr_fd = 2;
47 : : #endif
48 : :
49 : 410 : bool gjs_console_is_tty(int fd) {
50 : : #ifdef HAVE_UNISTD_H
51 : 410 : return isatty(fd);
52 : : #elif defined(_WIN32)
53 : : return _isatty(fd);
54 : : #else
55 : : return false;
56 : : #endif
57 : : }
58 : :
59 : 0 : bool gjs_console_clear() {
60 [ # # ]: 0 : if (stdout_fd < 0 || !g_log_writer_supports_color(stdout_fd))
61 : 0 : return false;
62 : :
63 [ # # # # ]: 0 : return fputs(ANSICode::CLEAR_SCREEN, stdout) > 0 && fflush(stdout) > 0;
64 : : }
|