Skip to content

Commit a1e79a9

Browse files
authored
Merge pull request #779 from fastfetch-cli/dev
Release v2.9.1
2 parents ba2636d + e16f8ef commit a1e79a9

File tree

9 files changed

+75
-30
lines changed

9 files changed

+75
-30
lines changed

CHANGELOG.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,17 @@
1+
# 2.9.1
2+
3+
Features:
4+
* Support weston-terminal (missed commit in v2.9.0) (TerminalFont, Linux)
5+
* Support hyprcursor detection (#776, Cursor, Linux)
6+
7+
Bugfixes:
8+
* Fix `fastfetch --gen-config` raises SIGSEGV when `~/.config/fastfetch` doesn't exist. Regression of `2.9.0` (#778)
9+
110
# 2.9.0
211

312
Features:
413
* Support Lxterminal version detection (Terminal, Linux)
5-
* Support weston-terminal version and font detection (TerminalFont, Linux)
14+
* Support weston-terminal version detection (Terminal, Linux)
615
* Support `am` package manager detection (#771, Packages, Linux)
716
* Support network prefix length detection for IPv6 (LocalIP)
817
* Display all IPs when multiple IPs are assigned to the same interface (LocalIP)

CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url
22

33
project(fastfetch
4-
VERSION 2.9.0
4+
VERSION 2.9.1
55
LANGUAGES C
66
DESCRIPTION "Fast neofetch-like system information tool"
77
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"

src/common/parsing.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -100,19 +100,19 @@ void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, co
100100
{
101101
if(gtk2->length > 0 && gtk3->length > 0 && gtk4->length > 0)
102102
{
103-
if((ffStrbufIgnCaseComp(gtk2, gtk3) == 0) && (ffStrbufIgnCaseComp(gtk2, gtk4) == 0))
103+
if((ffStrbufIgnCaseEqual(gtk2, gtk3)) && (ffStrbufIgnCaseEqual(gtk2, gtk4)))
104104
{
105105
ffStrbufAppend(buffer, gtk4);
106106
ffStrbufAppendS(buffer, " [GTK2/3/4]");
107107
}
108-
else if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0)
108+
else if(ffStrbufIgnCaseEqual(gtk2, gtk3))
109109
{
110110
ffStrbufAppend(buffer, gtk3);
111111
ffStrbufAppendS(buffer, " [GTK2/3], ");
112112
ffStrbufAppend(buffer, gtk4);
113113
ffStrbufAppendS(buffer, " [GTK4]");
114114
}
115-
else if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0)
115+
else if(ffStrbufIgnCaseEqual(gtk3, gtk4))
116116
{
117117
ffStrbufAppend(buffer, gtk2);
118118
ffStrbufAppendS(buffer, " [GTK2], ");
@@ -131,7 +131,7 @@ void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, co
131131
}
132132
else if(gtk2->length > 0 && gtk3->length > 0)
133133
{
134-
if(ffStrbufIgnCaseComp(gtk2, gtk3) == 0)
134+
if(ffStrbufIgnCaseEqual(gtk2, gtk3))
135135
{
136136
ffStrbufAppend(buffer, gtk3);
137137
ffStrbufAppendS(buffer, " [GTK2/3]");
@@ -146,7 +146,7 @@ void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, co
146146
}
147147
else if(gtk3->length > 0 && gtk4->length > 0)
148148
{
149-
if(ffStrbufIgnCaseComp(gtk3, gtk4) == 0)
149+
if(ffStrbufIgnCaseEqual(gtk3, gtk4))
150150
{
151151
ffStrbufAppend(buffer, gtk4);
152152
ffStrbufAppendS(buffer, " [GTK3/4]");

src/detection/cursor/cursor_linux.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,33 @@ static bool detectCursorFromEnv(FFCursorResult* result)
6868
return true;
6969
}
7070

71+
static bool detectCursorHyprcursor(FFCursorResult* result)
72+
{
73+
const char* hyprcursor_theme = getenv("HYPRCURSOR_THEME");
74+
75+
if(!ffStrSet(hyprcursor_theme))
76+
return false;
77+
78+
ffStrbufAppendS(&result->theme, hyprcursor_theme);
79+
ffStrbufAppendS(&result->size, getenv("HYPRCURSOR_SIZE"));
80+
81+
return true;
82+
}
83+
7184
void ffDetectCursor(FFCursorResult* result)
7285
{
7386
const FFDisplayServerResult* wmde = ffConnectDisplayServer();
7487

75-
if(ffStrbufCompS(&wmde->wmPrettyName, FF_WM_PRETTY_WSLG) == 0)
88+
if(ffStrbufEqualS(&wmde->wmPrettyName, FF_WM_PRETTY_WSLG))
7689
ffStrbufAppendS(&result->error, "WSLg uses native windows cursor");
77-
else if(ffStrbufIgnCaseCompS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY) == 0)
90+
else if(ffStrbufIgnCaseEqualS(&wmde->wmProtocolName, FF_WM_PROTOCOL_TTY))
7891
ffStrbufAppendS(&result->error, "Cursor isn't supported in TTY");
79-
else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, FF_DE_PRETTY_PLASMA) == 0)
92+
else if(ffStrbufIgnCaseEqualS(&wmde->dePrettyName, FF_DE_PRETTY_PLASMA))
8093
detectCursorFromConfigFile("kcminputrc", "cursorTheme =", "Breeze", "cursorSize =", "24", result);
81-
else if(ffStrbufStartsWithIgnCaseS(&wmde->dePrettyName, FF_DE_PRETTY_LXQT))
94+
else if(ffStrbufIgnCaseEqualS(&wmde->dePrettyName, FF_DE_PRETTY_LXQT))
8295
detectCursorFromConfigFile("lxqt/session.conf", "cursor_theme =", "Adwaita", "cursor_size =", "24", result);
96+
else if(ffStrbufIgnCaseEqualS(&wmde->wmPrettyName, FF_WM_PRETTY_HYPRLAND) && detectCursorHyprcursor(result))
97+
return;
8398
else if(
8499
!detectCursorGTK(result) &&
85100
!detectCursorFromEnv(result) &&

src/detection/displayserver/displayserver.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
#define FF_WM_PRETTY_XFWM4 "Xfwm4"
2222
#define FF_WM_PRETTY_OPENBOX "Openbox"
2323
#define FF_WM_PRETTY_I3 "i3"
24+
#define FF_WM_PRETTY_HYPRLAND "Hyprland"
2425
#define FF_WM_PRETTY_WAYFIRE "Wayfire"
2526
#define FF_WM_PRETTY_SWAY "Sway"
2627
#define FF_WM_PRETTY_BSPWM "bspwm"

src/detection/displayserver/linux/wmde.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ static const char* parseEnv(void)
5252
if(getenv("TDE_FULL_SESSION") != NULL)
5353
return "Trinity";
5454

55+
if(getenv("HYPRLAND_CMD") != NULL)
56+
return "Hyprland";
57+
5558
#ifdef __linux__
5659
if(
5760
getenv("WAYLAND_DISPLAY") != NULL &&
@@ -116,6 +119,8 @@ static void applyPrettyNameIfWM(FFDisplayServerResult* result, const char* name)
116119
ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_ICEWM);
117120
else if(ffStrEqualsIgnCase(name, "dtwm"))
118121
ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_DTWM);
122+
else if(ffStrEqualsIgnCase(name, "hyprland"))
123+
ffStrbufSetS(&result->wmPrettyName, FF_WM_PRETTY_HYPRLAND);
119124
}
120125

121126
static void applyNameIfWM(FFDisplayServerResult* result, const char* processName)

src/detection/gtk_qt/qt.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,9 +151,9 @@ const FFQtResult* ffDetectQt(void)
151151

152152
const FFDisplayServerResult* wmde = ffConnectDisplayServer();
153153

154-
if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, FF_DE_PRETTY_PLASMA) == 0)
154+
if(ffStrbufIgnCaseEqualS(&wmde->dePrettyName, FF_DE_PRETTY_PLASMA))
155155
detectPlasma(&result);
156-
else if(ffStrbufIgnCaseCompS(&wmde->dePrettyName, FF_DE_PRETTY_LXQT) == 0)
156+
else if(ffStrbufIgnCaseEqualS(&wmde->dePrettyName, FF_DE_PRETTY_LXQT))
157157
detectLXQt(&result);
158158

159159
return &result;

src/detection/terminalfont/terminalfont_linux.c

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -325,6 +325,19 @@ static void detectWarp(FFTerminalFontResult* terminalFont)
325325
}
326326
}
327327

328+
static void detectWestonTerminal(FFTerminalFontResult* terminalFont)
329+
{
330+
FF_STRBUF_AUTO_DESTROY font = ffStrbufCreate();
331+
FF_STRBUF_AUTO_DESTROY size = ffStrbufCreate();
332+
ffParsePropFileConfigValues("weston.ini", 2, (FFpropquery[]) {
333+
{"font=", &font},
334+
{"font-size=", &size},
335+
});
336+
if (!font.length) ffStrbufSetStatic(&font, "DejaVu Sans Mono");
337+
if (!size.length) ffStrbufSetStatic(&size, "14");
338+
ffFontInitValues(&terminalFont->font, font.chars, size.chars);
339+
}
340+
328341
void ffDetectTerminalFontPlatform(const FFTerminalResult* terminal, FFTerminalFontResult* terminalFont)
329342
{
330343
if(ffStrbufIgnCaseEqualS(&terminal->processName, "konsole"))
@@ -355,4 +368,6 @@ void ffDetectTerminalFontPlatform(const FFTerminalResult* terminal, FFTerminalFo
355368
detectSt(terminalFont, terminal->pid);
356369
else if(ffStrbufIgnCaseEqualS(&terminal->processName, "warp"))
357370
detectWarp(terminalFont);
371+
else if(ffStrbufIgnCaseEqualS(&terminal->processName, "weston-terminal"))
372+
detectWestonTerminal(terminalFont);
358373
}

src/fastfetch.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -821,7 +821,6 @@ static void run(FFdata* data)
821821
if (instance.state.resultDoc)
822822
{
823823
yyjson_mut_write_fp(stdout, instance.state.resultDoc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL);
824-
//TODO should use YYJSON_WRITE_NEWLINE_AT_END when it is available
825824
putchar('\n');
826825
}
827826
else
@@ -841,23 +840,24 @@ static void writeConfigFile(FFdata* data, const FFstrbuf* filename)
841840
ffOptionsGenerateLibraryJsonConfig(&instance.config.library, doc);
842841
ffMigrateCommandOptionToJsonc(data, doc);
843842

844-
FILE *fp = stdout;
845-
bool writeToStdout = ffStrbufEqualS(filename, "-");
846-
if (!writeToStdout)
847-
fp = fopen(filename->chars, "w");
848-
849-
bool ok = yyjson_mut_write_fp(fp, doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL);
850-
//TODO should use YYJSON_WRITE_NEWLINE_AT_END when it is available
851-
fputc('\n', fp);
852-
if (!ok)
853-
{
854-
fprintf(stderr, "Error: failed to generate config in `%s`\n", writeToStdout ? "stdout" : filename->chars);
855-
exit(1);
856-
}
857-
if (ok && !writeToStdout)
843+
if (ffStrbufEqualS(filename, "-"))
844+
yyjson_mut_write_fp(stdout, doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, NULL, NULL);
845+
else
858846
{
859-
fclose(fp);
860-
printf("The generated config file has been written in `%s`\n", filename->chars);
847+
size_t len;
848+
FF_AUTO_FREE const char* str = yyjson_mut_write(doc, YYJSON_WRITE_INF_AND_NAN_AS_NULL | YYJSON_WRITE_PRETTY_TWO_SPACES, &len);
849+
if (!str)
850+
{
851+
printf("Error: failed to generate config file\n");
852+
exit(1);
853+
}
854+
if (ffWriteFileData(filename->chars, len, str))
855+
printf("The generated config file has been written in `%s`\n", filename->chars);
856+
else
857+
{
858+
printf("Error: failed to write file in `%s`\n", filename->chars);
859+
exit(1);
860+
}
861861
}
862862

863863
yyjson_mut_doc_free(doc);

0 commit comments

Comments
 (0)