From 788c7d00bbce639f398656f04310260e4ac2881b Mon Sep 17 00:00:00 2001 From: craftablescience Date: Sun, 2 Nov 2025 23:42:22 -0800 Subject: [PATCH 1/3] all: optimize windows ico file (thanks goodusername12345!) --- res/logo.ico | Bin 67646 -> 10395 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/res/logo.ico b/res/logo.ico index af53c5836db2585faa442ee2ddf0a84caa7a978b..148dafeee16ba995ea3414b6187219cf651610a1 100644 GIT binary patch literal 10395 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 U@22eRt{ESsrj0kFVLDO&1HJ$bP5=M^ literal 67646 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 From 181bec7afec966663c1c34b65d9968d2fd4d4fa3 Mon Sep 17 00:00:00 2001 From: craftablescience Date: Mon, 3 Nov 2025 01:13:54 -0800 Subject: [PATCH 2/3] cli: add --verbose as the opposite of --quiet, enable --yes, --quiet, --no-pretty-formatting by default when not in a TTY environment --- README.md | 13 ++++++++++--- src/cli/MareTF.cpp | 43 ++++++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 963671e..28ac84c 100644 --- a/README.md +++ b/README.md @@ -98,7 +98,7 @@ maretf info input.vtf ## Full CLI Help Text ``` -Usage: maretf [--help] [--output PATH] [--yes] [--no] [--quiet] [--no-recurse] +Usage: maretf [--help] [--output PATH] [--yes] [--no] [--quiet] [--verbose] [--no-recurse] [--no-pretty-formatting] [--watch] [--version X.Y] [--format IMAGE_FORMAT] [--quality COMPRESSION_QUALITY] [--filter RESIZE_FILTER] [--flag FLAG]... [--no-automatic-transparency-flags] [--no-mips] [--no-animation] @@ -146,15 +146,22 @@ Optional arguments: -o, --output PATH The path to the output file (if the current mode outputs a file). Ignored if the input path is a directory. - -y, --yes Automatically say yes to any prompts. + -y, --yes Automatically say yes to any prompts. Enabled + by default if no TTY is detected. --no Automatically say no to any prompts. Overrides --yes. --quiet Don't print anything to stdout or stderr (assuming program arguments are parsed - successfully). + successfully). Enabled by default if no TTY is + detected. + --verbose Allow printing to stdout or stderr, even when + no TTY is detected (assuming program arguments + are parsed successfully). --no-recurse If the input path is a directory, do not enter subdirectories when scanning for files. --no-pretty-formatting Disables printing ANSI color codes and emojis. + Pretty formatting is disabled by default if no + TTY is detected. "create" mode (detailed usage): --watch After creation is complete, watch the input diff --git a/src/cli/MareTF.cpp b/src/cli/MareTF.cpp index 0112a0d..442ec16 100644 --- a/src/cli/MareTF.cpp +++ b/src/cli/MareTF.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -20,9 +21,12 @@ #include #include -#ifdef _WIN32 +#if defined(_WIN32) +#include #define WIN32_LEAN_AND_MEAN #include +#elif defined(__linux__) +#include #endif #include @@ -41,6 +45,17 @@ using namespace std::literals; namespace { +[[nodiscard]] bool runningInTTY() { +#if defined(_WIN32) + static const bool check = _isatty(_fileno(stdin)) && _isatty(_fileno(stdout)) && _isatty(_fileno(stderr)); +#elif defined(__linux__) + static const bool check = isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) && isatty(STDERR_FILENO); +#else + static constexpr bool check = true; +#endif + return check; +} + [[nodiscard]] std::string_view randomDeviantArtTFTrope() { static constexpr std::array DEVIANTART_TF_TROPES{ "Splicing DNA", @@ -226,7 +241,7 @@ int main(int argc, const char* const argv[]) { bool overwrite; cli .add_argument("-y", "--yes") - .help("Automatically say yes to any prompts.") + .help("Automatically say yes to any prompts. Enabled by default if no TTY is detected.") .flag() .store_into(overwrite); @@ -240,10 +255,19 @@ int main(int argc, const char* const argv[]) { bool quiet; cli .add_argument("--quiet") - .help("Don't print anything to stdout or stderr (assuming program arguments are parsed successfully).") + .help("Don't print anything to stdout or stderr (assuming program arguments are parsed successfully)." + " Enabled by default if no TTY is detected.") .flag() .store_into(quiet); + bool verbose; + cli + .add_argument("--verbose") + .help("Allow printing to stdout or stderr, even when no TTY is detected (assuming program arguments" + " are parsed successfully).") + .flag() + .store_into(verbose); + bool noRecurse; cli .add_argument("--no-recurse") @@ -254,7 +278,8 @@ int main(int argc, const char* const argv[]) { bool noPrettyFormatting; cli .add_argument("--no-pretty-formatting") - .help("Disables printing ANSI color codes and emojis.") + .help("Disables printing ANSI color codes and emojis. Pretty formatting is disabled by default" + " if no TTY is detected.") .flag() .store_into(noPrettyFormatting); @@ -994,9 +1019,17 @@ int main(int argc, const char* const argv[]) { try { cli.parse_args(argc, argv); - if (quiet) { + if (!::runningInTTY()) { + overwrite = true; + quiet = true; + noPrettyFormatting = true; + } + + if (quiet && !verbose) { tfout_t::QUIET = true; tferr_t::QUIET = true; + } else { + quiet = false; } // Pretty formatting colors From bbfd6962a345162523961f1758215ae7af9199e5 Mon Sep 17 00:00:00 2001 From: craftablescience Date: Mon, 3 Nov 2025 01:41:07 -0800 Subject: [PATCH 3/3] cli: don't check stdin in tty check --- src/cli/MareTF.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cli/MareTF.cpp b/src/cli/MareTF.cpp index 442ec16..41e8d1c 100644 --- a/src/cli/MareTF.cpp +++ b/src/cli/MareTF.cpp @@ -47,9 +47,9 @@ namespace { [[nodiscard]] bool runningInTTY() { #if defined(_WIN32) - static const bool check = _isatty(_fileno(stdin)) && _isatty(_fileno(stdout)) && _isatty(_fileno(stderr)); + static const bool check = _isatty(_fileno(stdout)) && _isatty(_fileno(stderr)); #elif defined(__linux__) - static const bool check = isatty(STDIN_FILENO) && isatty(STDOUT_FILENO) && isatty(STDERR_FILENO); + static const bool check = isatty(STDOUT_FILENO) && isatty(STDERR_FILENO); #else static constexpr bool check = true; #endif