mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-11-09 14:40:10 +01:00
Logo: adds option logo.position: auto
This commit is contained in:
@@ -10,4 +10,5 @@ typedef struct FFTerminalSizeResult {
|
||||
uint16_t height;
|
||||
} FFTerminalSizeResult;
|
||||
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result);
|
||||
// `fastOnly` avoids terminal query/response sequences and is intended for startup layout decisions.
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result, bool fastOnly);
|
||||
|
||||
@@ -9,7 +9,9 @@
|
||||
#include <sys/termios.h>
|
||||
#endif
|
||||
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result) {
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result, bool fastOnly) {
|
||||
*result = (FFTerminalSizeResult){};
|
||||
|
||||
struct winsize winsize = {};
|
||||
static int ttyfd = STDOUT_FILENO;
|
||||
if (!isatty(ttyfd)) {
|
||||
@@ -18,21 +20,20 @@ bool ffDetectTerminalSize(FFTerminalSizeResult* result) {
|
||||
|
||||
ioctl(ttyfd, TIOCGWINSZ, &winsize);
|
||||
|
||||
if (winsize.ws_row == 0 || winsize.ws_col == 0) {
|
||||
ffGetTerminalResponse("\e[18t", 2, "\e[8;%hu;%hut", &winsize.ws_row, &winsize.ws_col);
|
||||
}
|
||||
if (!fastOnly) {
|
||||
if (winsize.ws_row == 0 || winsize.ws_col == 0) {
|
||||
ffGetTerminalResponse("\e[18t", 2, "\e[8;%hu;%hut", &winsize.ws_row, &winsize.ws_col);
|
||||
}
|
||||
|
||||
if (winsize.ws_ypixel == 0 || winsize.ws_xpixel == 0) {
|
||||
ffGetTerminalResponse("\e[14t", 2, "\e[4;%hu;%hut", &winsize.ws_ypixel, &winsize.ws_xpixel);
|
||||
}
|
||||
|
||||
if (winsize.ws_row == 0 && winsize.ws_col == 0) {
|
||||
return false;
|
||||
if (winsize.ws_ypixel == 0 || winsize.ws_xpixel == 0) {
|
||||
ffGetTerminalResponse("\e[14t", 2, "\e[4;%hu;%hut", &winsize.ws_ypixel, &winsize.ws_xpixel);
|
||||
}
|
||||
}
|
||||
|
||||
result->rows = winsize.ws_row;
|
||||
result->columns = winsize.ws_col;
|
||||
result->width = winsize.ws_xpixel;
|
||||
result->height = winsize.ws_ypixel;
|
||||
return true;
|
||||
|
||||
return result->rows > 0 && result->columns > 0;
|
||||
}
|
||||
|
||||
@@ -3,7 +3,9 @@
|
||||
|
||||
#include <windows.h>
|
||||
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result) {
|
||||
bool ffDetectTerminalSize(FFTerminalSizeResult* result, bool fastOnly) {
|
||||
*result = (FFTerminalSizeResult){};
|
||||
|
||||
HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||
FF_AUTO_CLOSE_FD HANDLE hConout = INVALID_HANDLE_VALUE;
|
||||
{
|
||||
@@ -18,16 +20,20 @@ bool ffDetectTerminalSize(FFTerminalSizeResult* result) {
|
||||
if (GetConsoleScreenBufferInfo(hOutput, &csbi)) {
|
||||
result->columns = (uint16_t) (csbi.srWindow.Right - csbi.srWindow.Left + 1);
|
||||
result->rows = (uint16_t) (csbi.srWindow.Bottom - csbi.srWindow.Top + 1);
|
||||
} else {
|
||||
} else if (!fastOnly) {
|
||||
// Windows Terminal doesn't report `\e` for some reason
|
||||
ffGetTerminalResponse("\e[18t", 2, "%*[^;];%hu;%hut", &result->rows, &result->columns);
|
||||
}
|
||||
}
|
||||
|
||||
if (result->columns == 0 && result->rows == 0) {
|
||||
if (result->columns == 0 || result->rows == 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (fastOnly) {
|
||||
return true;
|
||||
}
|
||||
|
||||
{
|
||||
CONSOLE_FONT_INFOEX cfi = { .cbSize = sizeof(cfi) };
|
||||
if (GetCurrentConsoleFontEx(hOutput, FALSE, &cfi)) // Only works for ConHost
|
||||
@@ -41,5 +47,5 @@ bool ffDetectTerminalSize(FFTerminalSizeResult* result) {
|
||||
}
|
||||
}
|
||||
|
||||
return result->columns > 0 && result->rows > 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user