Users: add new module

I don't think it's very useful but neofetch support it
This commit is contained in:
李通洲
2022-09-26 14:57:27 +08:00
parent b2da8bac41
commit 6e3a329d3b
6 changed files with 60 additions and 1 deletions
+1
View File
@@ -242,6 +242,7 @@ set(LIBFASTFETCH_SRC
src/modules/colors.c
src/modules/opengl.c
src/modules/opencl.c
src/modules/users.c
)
if(BSD OR APPLE)
+1 -1
View File
@@ -1 +1 @@
--structure Title:Separator:OS:Host:Kernel:Uptime:Processes:Packages:Shell:Resolution:DE:WM:WMTheme:Theme:Icons:Font:Cursor:Terminal:TerminalFont:CPU:GPU:Memory:Swap:Disk:Battery:PowerAdapter:Player:Song:PublicIP:LocalIP:DateTime:Locale:Vulkan:OpenGL:OpenCL:Break:Colors
--structure Title:Separator:OS:Host:Kernel:Uptime:Processes:Packages:Shell:Resolution:DE:WM:WMTheme:Theme:Icons:Font:Cursor:Terminal:TerminalFont:CPU:GPU:Memory:Swap:Disk:Battery:PowerAdapter:Player:Song:PublicIP:LocalIP:DateTime:Locale:Vulkan:OpenGL:OpenCL:Users:Break:Colors
+2
View File
@@ -1436,6 +1436,8 @@ static void parseStructureCommand(FFinstance* instance, FFdata* data, const char
ffPrintOpenGL(instance);
else if(strcasecmp(line, "opencl") == 0)
ffPrintOpenCL(instance);
else if(strcasecmp(line, "users") == 0)
ffPrintUsers(instance);
else
ffPrintErrorString(instance, line, 0, NULL, NULL, "<no implementation provided>");
}
+1
View File
@@ -276,5 +276,6 @@ void ffPrintColors(FFinstance* instance);
void ffPrintVulkan(FFinstance* instance);
void ffPrintOpenGL(FFinstance* instance);
void ffPrintOpenCL(FFinstance* instance);
void ffPrintUsers(FFinstance* instance);
#endif
+1
View File
@@ -52,6 +52,7 @@ int main(int argc, char** argv)
//ffPrintVulkan(&instance);
//ffPrintOpenGL(&instance);
//ffPrintOpenCL(&instance);
//ffPrintUsers(&instance);
ffPrintBreak(&instance);
ffPrintColors(&instance);
+54
View File
@@ -0,0 +1,54 @@
#include "fastfetch.h"
#include "common/printing.h"
#include <utmpx.h>
#define FF_USERS_MODULE_NAME "Users"
#define FF_USERS_NUM_FORMAT_ARGS 1
void ffPrintUsers(FFinstance* instance)
{
struct utmpx* n = NULL;
setutxent();
FFlist users;
ffListInit(&users, sizeof(n->ut_user));
next:
while((n = getutxent()))
{
if(n->ut_type == USER_PROCESS)
{
for(uint32_t i = 0; i < users.length; ++i)
{
if(strcmp((const char*)ffListGet(&users, i), n->ut_user) == 0)
goto next;
}
strcpy((char*)ffListAdd(&users), n->ut_user);
}
}
FFstrbuf result;
ffStrbufInit(&result);
for(uint32_t i = 0; i < users.length; ++i)
{
if(i > 0)
ffStrbufAppendS(&result, ", ");
ffStrbufAppendS(&result, (const char*)ffListGet(&users, i));
}
ffListDestroy(&users);
if(instance->config.uptime.outputFormat.length == 0)
{
ffPrintLogoAndKey(instance, FF_USERS_MODULE_NAME, 0, &instance->config.uptime.key);
puts(result.chars);
}
else
{
ffPrintFormat(instance, FF_USERS_MODULE_NAME, 0, &instance->config.uptime, FF_USERS_NUM_FORMAT_ARGS, (FFformatarg[]){
{FF_FORMAT_ARG_TYPE_STRBUF, &result},
});
}
ffStrbufDestroy(&result);
}