コミットを比較
10 コミット
13e205800a
...
032e920611
作成者 | SHA1 | 日付 |
---|---|---|
守矢諏訪子 | 032e920611 | |
JaGoLi | d01638f093 | |
JaGoLi | c296d5dd09 | |
Trriplex | 2a0a90cb03 | |
Jason Goulet-Lipman | e964932e4a | |
Jason Goulet-Lipman | f7fa1c7cad | |
JaGoLi | 2898a07b26 | |
Jason Goulet-Lipman | d02a6323bb | |
sam-barr | b7c58a52c0 | |
Sridaran Thoniyil | 964ca21454 |
4
Makefile
4
Makefile
|
@ -8,8 +8,8 @@ clean:
|
|||
rm -f paleofetch $(CACHE)/paleofetch
|
||||
|
||||
paleofetch: paleofetch.c paleofetch.h config.h
|
||||
$(eval battery_path := $(shell ./config_scripts/battery_config.sh))
|
||||
$(CC) paleofetch.c -o paleofetch $(CFLAGS) -D $(battery_path)
|
||||
$(eval packages := $(shell ./config_scripts/package_config.sh))
|
||||
$(CC) paleofetch.c -o paleofetch $(CFLAGS) -D $(packages)
|
||||
strip paleofetch
|
||||
|
||||
install: paleofetch
|
||||
|
|
11
README.md
11
README.md
|
@ -2,7 +2,16 @@ paleofetch
|
|||
==========
|
||||
|
||||
A rewrite of [neofetch](https://github.com/dylanaraps/neofetch) in C.
|
||||
Currently only supports Linux and Xorg.
|
||||
Currently only supports Linux and Xorg.<br/><br/>
|
||||
|
||||
I am actively maintaining this fork by adding more features, fixing bugs, and supporting more distros.
|
||||
|
||||
As of now I have:
|
||||
* Corrected all compiler warnings running on GCC 11.1
|
||||
* Added logos for 5 distros.
|
||||
* Added the option to change logo color, text color, and title color independently.
|
||||
* Added macros to make setting colors easier.
|
||||
* Fixed bugs in GPU detection code.
|
||||
|
||||
|
||||
Why use paleofetch over neofetch?
|
||||
|
|
78
config.h
78
config.h
|
@ -1,24 +1,66 @@
|
|||
#include "logos/arch.h"
|
||||
#define COLOR "\e[1;36m"
|
||||
#define MYOS ARTIX
|
||||
|
||||
#define ALPINE 1
|
||||
#define ARCH 2
|
||||
#define ARTIX 3
|
||||
#define CRUX 4
|
||||
#define DEBIAN 5
|
||||
#define DEVUAN 6
|
||||
#define FREEBSD 7
|
||||
#define GENTOO 8
|
||||
#define NETBSD 9
|
||||
#define OPENBSD 10
|
||||
#define OPENINDIANA 11
|
||||
#define POSTMARKETOS 12
|
||||
#define VOID 13
|
||||
|
||||
#if MYOS == ALPINE
|
||||
#include "logos/alpine.h"
|
||||
#elif MYOS == ARCH
|
||||
#include "logos/arch.h"
|
||||
#elif MYOS == ARTIX
|
||||
#include "logos/artix.h"
|
||||
#elif MYOS == CRUX
|
||||
#include "logos/crux.h"
|
||||
#elif MYOS == DEBIAN
|
||||
#include "logos/debian.h"
|
||||
#elif MYOS == DEVUAN
|
||||
#include "logos/devuan.h"
|
||||
#elif MYOS == FREEBSD
|
||||
#include "logos/freebsd.h"
|
||||
#elif MYOS == GENTOO
|
||||
#include "logos/gentoo.h"
|
||||
#elif MYOS == NETBSD
|
||||
#include "logos/netbsd.h"
|
||||
#elif MYOS == OPENBSD
|
||||
#include "logos/openbsd.h"
|
||||
#elif MYOS == OPENINDIANA
|
||||
#include "logos/openindiana.h"
|
||||
#elif MYOS == POSTMARKETOS
|
||||
#include "logos/postmarketos.h"
|
||||
#elif MYOS == VOID
|
||||
#include "logos/void.h"
|
||||
#else
|
||||
#include "logos/linux.h"
|
||||
#endif
|
||||
|
||||
#define CONFIG \
|
||||
{ \
|
||||
/* name function cached */\
|
||||
SPACER \
|
||||
{ "", get_title, false }, \
|
||||
{ "", get_bar, false }, \
|
||||
{ "OS: ", get_os, true }, \
|
||||
{ "Host: ", get_host, true }, \
|
||||
{ "Kernel: ", get_kernel, true }, \
|
||||
{ "Uptime: ", get_uptime, false }, \
|
||||
{ "Battery: ", get_battery_percentage, false }, \
|
||||
SPACER \
|
||||
{ "Packages: ", get_packages_pacman, false }, \
|
||||
{ "Packages: ", get_packages, false }, \
|
||||
{ "Shell: ", get_shell, false }, \
|
||||
{ "Resolution: ", get_resolution, false }, \
|
||||
{ "WM: ", get_wm, false }, \
|
||||
{ "Terminal: ", get_terminal, false }, \
|
||||
SPACER \
|
||||
{ "CPU: ", get_cpu, true }, \
|
||||
{ "GPU: ", get_gpu1, true }, \
|
||||
{ "GPU: ", get_gpu1, true }, \
|
||||
{ "Memory: ", get_memory, false }, \
|
||||
SPACER \
|
||||
{ "", get_colors1, false }, \
|
||||
|
@ -27,17 +69,21 @@
|
|||
|
||||
#define CPU_CONFIG \
|
||||
{ \
|
||||
REMOVE("(R)"), \
|
||||
REMOVE("(TM)"), \
|
||||
REMOVE("Dual-Core"), \
|
||||
REMOVE("Quad-Core"), \
|
||||
REMOVE("Six-Core"), \
|
||||
REMOVE("Eight-Core"), \
|
||||
REMOVE("Core"), \
|
||||
REMOVE("CPU"), \
|
||||
REMOVE("(R)"), \
|
||||
REMOVE("(TM)"), \
|
||||
REMOVE("Dual-Core"), \
|
||||
REMOVE("Quad-Core"), \
|
||||
REMOVE("Six-Core"), \
|
||||
REMOVE("Eight-Core"), \
|
||||
REMOVE("Core"), \
|
||||
REMOVE("CPU"), \
|
||||
}
|
||||
|
||||
#define GPU_CONFIG \
|
||||
{ \
|
||||
REMOVE("Corporation"), \
|
||||
REMOVE("Advanced Micro Devices, Inc. "), \
|
||||
REMOVE("Corporation"), \
|
||||
REMOVE("Controller"), \
|
||||
REMOVE("Graphics"), \
|
||||
REMOVE("Integrated"), \
|
||||
}
|
||||
|
|
|
@ -1,5 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
BATTERY_DIRECTORY=`ls /sys/class/power_supply | grep -i "^bat" | head -n 1`
|
||||
|
||||
echo "BATTERY_DIRECTORY='\"/sys/class/power_supply/$BATTERY_DIRECTORY\"'"
|
|
@ -0,0 +1,48 @@
|
|||
#!/bin/sh
|
||||
|
||||
PACKAGEMANAGER="不明"
|
||||
PACKAGECOUNT="0"
|
||||
unamestr=$(uname)
|
||||
|
||||
if wc -v >/dev/null 2>&1; then
|
||||
WC_COMMAND="wc -ln"
|
||||
else
|
||||
WC_COMMAND="wc -l'"
|
||||
fi
|
||||
|
||||
if [ "$unamestr" = 'Linux' ]; then
|
||||
platform=$(cat /etc/os-release | grep "^ID=" | sed -e "s/ID=//")
|
||||
if [ "$platform" = 'alpine' ] || [ "$platform" = 'postmarketos' ]; then
|
||||
PACKAGEMANAGER="apk"
|
||||
PACKAGECOUNT=$(apk info -I | $WC_COMMAND)
|
||||
elif [ "$platform" = 'arch' ] || [ "$platform" = 'artix' ]; then
|
||||
PACKAGEMANAGER="pacman"
|
||||
PACKAGECOUNT=$(pacman -Qq | $WC_COMMAND)
|
||||
elif [ "$platform" = 'crux' ]; then
|
||||
PACKAGEMANAGER="pkginfo"
|
||||
PACKAGECOUNT=$(pkginfo -i | $WC_COMMAND)
|
||||
elif [ "$platform" = 'debian' ] || [ "$platform" = 'devuan' ]; then
|
||||
PACKAGEMANAGER="dpkg-query"
|
||||
PACKAGECOUNT=$(dpkg-query -f '.\n' -W | $WC_COMMAND)
|
||||
elif [ "$platform" = 'gentoo' ]; then
|
||||
PACKAGEMANAGER="qlist"
|
||||
PACKAGECOUNT=$(qlist -IC | $WC_COMMAND)
|
||||
elif [ "$platform" = 'void' ]; then
|
||||
PACKAGEMANAGER="xbps-query"
|
||||
PACKAGECOUNT=$(xbps-query -l | $WC_COMMAND)
|
||||
fi
|
||||
elif [ "$unamestr" = 'FreeBSD' ]; then
|
||||
PACKAGEMANAGER="pkg"
|
||||
PACKAGECOUNT=$(pkg info -a | $WC_COMMAND)
|
||||
elif [ "$unamestr" = 'OpenBSD' ]; then
|
||||
PACKAGEMANAGER="pkg_info"
|
||||
PACKAGECOUNT=$(pkg_info | $WC_COMMAND)
|
||||
elif [ "$unamestr" = 'NetBSD' ]; then
|
||||
PACKAGEMANAGER="pkg_info"
|
||||
PACKAGECOUNT=$(pkg_info -a | $WC_COMMAND)
|
||||
elif [ "$unamestr" = 'SunOS' ]; then
|
||||
PACKAGEMANAGER="pkg"
|
||||
PACKAGECOUNT=$(pkg list | $WC_COMMAND)
|
||||
fi
|
||||
|
||||
echo "PACKAGES='\"$PACKAGECOUNT ($PACKAGEMANAGER)\"'"
|
バイナリ
example.png
バイナリ
example.png
バイナリファイルは表示されません。
変更前 幅: | 高さ: | サイズ: 106 KiB 変更後 幅: | 高さ: | サイズ: 37 KiB |
|
@ -0,0 +1,30 @@
|
|||
// This was stolen from neofetch
|
||||
#define BLUE "\e[1;34m"
|
||||
#define MAGENTA "\e[1;35m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR MAGENTA
|
||||
#define TITLECOLOR BLUE
|
||||
|
||||
char *LOGO[] = {
|
||||
BLUE " .hddddddddddddddddddddddh. ",
|
||||
" :dddddddddddddddddddddddddd: ",
|
||||
" /dddddddddddddddddddddddddddd/ ",
|
||||
" +dddddddddddddddddddddddddddddd+ ",
|
||||
" `sdddddddddddddddddddddddddddddddds` ",
|
||||
" `ydddddddddddd++hdddddddddddddddddddy` ",
|
||||
".hddddddddddd+` `+ddddh:-sdddddddddddh. ",
|
||||
"hdddddddddd+` `+y: .sddddddddddh ",
|
||||
"ddddddddh+` `//` `.` -sddddddddd ",
|
||||
"ddddddh+` `/hddh/` `:s- -sddddddd ",
|
||||
"ddddh+` `/+/dddddh/` `+s- -sddddd ",
|
||||
"ddd+` `/o` :dddddddh/` `oy- .yddd ",
|
||||
"hdddyo+ohddyosdddddddddho+oydddy++ohdddh ",
|
||||
".hddddddddddddddddddddddddddddddddddddh. ",
|
||||
" `yddddddddddddddddddddddddddddddddddy` ",
|
||||
" `sdddddddddddddddddddddddddddddddds` ",
|
||||
" +dddddddddddddddddddddddddddddd+ ",
|
||||
" /dddddddddddddddddddddddddddd/ ",
|
||||
" :dddddddddddddddddddddddddd: ",
|
||||
" .hddddddddddddddddddddddh. " RESET
|
||||
};
|
44
logos/arch.h
44
logos/arch.h
|
@ -1,22 +1,28 @@
|
|||
// This was stolen from neofetch
|
||||
#define CYAN "\e[1;36m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR CYAN
|
||||
#define TITLECOLOR CYAN
|
||||
|
||||
char *LOGO[] = {
|
||||
" -` ",
|
||||
" .o+` ",
|
||||
" `ooo/ ",
|
||||
" `+oooo: ",
|
||||
" `+oooooo: ",
|
||||
" -+oooooo+: ",
|
||||
" `/:-:++oooo+: ",
|
||||
" `/++++/+++++++: ",
|
||||
" `/++++++++++++++: ",
|
||||
" `/+++ooooooooooooo/` ",
|
||||
" ./ooosssso++osssssso+` ",
|
||||
" .oossssso-````/ossssss+` ",
|
||||
" -osssssso. :ssssssso. ",
|
||||
" :osssssss/ osssso+++. ",
|
||||
" /ossssssss/ +ssssooo/- ",
|
||||
" `/ossssso+/:- -:/+osssso+- ",
|
||||
" `+sso+:-` `.-/+oso: ",
|
||||
"`++:. `-/+/ ",
|
||||
".` `/ "
|
||||
CYAN " -` " RESET,
|
||||
CYAN " .o+` " RESET,
|
||||
CYAN " `ooo/ " RESET,
|
||||
CYAN " `+oooo: " RESET,
|
||||
CYAN " `+oooooo: " RESET,
|
||||
CYAN " -+oooooo+: " RESET,
|
||||
CYAN " `/:-:++oooo+: " RESET,
|
||||
CYAN " `/++++/+++++++: " RESET,
|
||||
CYAN " `/++++++++++++++: " RESET,
|
||||
CYAN " `/+++ooooooooooooo/` " RESET,
|
||||
CYAN " ./ooosssso++osssssso+` " RESET,
|
||||
CYAN " .oossssso-````/ossssss+` " RESET,
|
||||
CYAN " -osssssso. :ssssssso. " RESET,
|
||||
CYAN " :osssssss/ osssso+++. " RESET,
|
||||
CYAN " /ossssssss/ +ssssooo/- " RESET,
|
||||
CYAN " `/ossssso+/:- -:/+osssso+- " RESET,
|
||||
CYAN " `+sso+:-` `.-/+oso: " RESET,
|
||||
CYAN "`++:. `-/+/ " RESET,
|
||||
CYAN ".` `/ " RESET
|
||||
};
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
// And this was stolen from archey3
|
||||
char *LOGO[] = {
|
||||
" + ",
|
||||
" # ",
|
||||
" ### ",
|
||||
" ##### ",
|
||||
" ###### ",
|
||||
" ; #####; ",
|
||||
" +##.##### ",
|
||||
" +########## ",
|
||||
" #############; ",
|
||||
" ###############+ ",
|
||||
" ####### ####### ",
|
||||
" .######; ;###;`'. ",
|
||||
" .#######; ;#####. ",
|
||||
" #########. .########` ",
|
||||
" ######' '###### ",
|
||||
" ;#### ####; ",
|
||||
" ##' '## ",
|
||||
"#' `# "
|
||||
};
|
|
@ -1,22 +0,0 @@
|
|||
// made by Reddit user LnLcFlx2
|
||||
char *LOGO[] = {
|
||||
" ▄ ",
|
||||
" ▟█▙ ",
|
||||
" ▟███▙ ",
|
||||
" ▟█████▙ ",
|
||||
" ▟███████▙ ",
|
||||
" ▂▔▀▜██████▙ ",
|
||||
" ▟██▅▂▝▜█████▙ ",
|
||||
" ▟█████████████▙ ",
|
||||
" ▟███████████████▙ ",
|
||||
" ▟█████████████████▙ ",
|
||||
" ▟███████████████████▙ ",
|
||||
" ▟█████████▛▀▀▜████████▙ ",
|
||||
" ▟████████▛ ▜███████▙ ",
|
||||
" ▟█████████ ████████▙ ",
|
||||
" ▟██████████ █████▆▅▄▃▂ ",
|
||||
" ▟██████████▛ ▜█████████▙ ",
|
||||
" ▟██████▀▀▀ ▀▀██████▙ ",
|
||||
" ▟███▀▘ ▝▀███▙ ",
|
||||
" ▟▛▀ ▀▜▙ "
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
// This was stolen from neofetch
|
||||
#define CYAN "\e[1;36m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR CYAN
|
||||
#define TITLECOLOR CYAN
|
||||
|
||||
char *LOGO[] = {
|
||||
CYAN " ' " RESET,
|
||||
CYAN " 'o' " RESET,
|
||||
CYAN " 'ooo' " RESET,
|
||||
CYAN " 'ooxoo' " RESET,
|
||||
CYAN " 'ooxxxoo' " RESET,
|
||||
CYAN " 'oookkxxoo' " RESET,
|
||||
CYAN " 'oiioxkkxxoo' " RESET,
|
||||
CYAN " ':;:iiiioxxxoo' " RESET,
|
||||
CYAN " `'.;::ioxxoo' " RESET,
|
||||
CYAN " '-. `':;jiooo' " RESET,
|
||||
CYAN " 'oooio-.. `'i:io' " RESET,
|
||||
CYAN " 'ooooxxxxoio:,. `'-;' " RESET,
|
||||
CYAN " 'ooooxxxxxkkxoooIi:-. `' " RESET,
|
||||
CYAN " 'ooooxxxxxkkkkxoiiiiiji' " RESET,
|
||||
CYAN " 'ooooxxxxxkxxoiiii:'` .i' " RESET,
|
||||
CYAN " 'ooooxxxxxoi:::'` .;ioxo' " RESET,
|
||||
CYAN " 'ooooxooi::'` .:iiixkxxo' " RESET,
|
||||
CYAN " 'ooooi:'` `'';ioxxo' " RESET,
|
||||
CYAN " 'i:'` '':io' " RESET,
|
||||
CYAN "'` `' " RESET
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
// This was stolen from neofetch
|
||||
#define BLUE "\e[1;34m"
|
||||
#define MAGENTA "\e[1;35m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR MAGENTA
|
||||
#define TITLECOLOR BLUE
|
||||
|
||||
char *LOGO[] = {
|
||||
BLUE " odddd " RESET,
|
||||
BLUE " oddxkkkxxdoo " RESET,
|
||||
BLUE " ddcoddxxxdoool " RESET,
|
||||
BLUE " xdclodod olol " RESET,
|
||||
BLUE " xoc xdd olol " RESET,
|
||||
BLUE " xdc " MAGENTA "k00" BLUE "Okdlol " RESET,
|
||||
BLUE " xxd" MAGENTA "kOKKKOkd" BLUE "ldd " RESET,
|
||||
BLUE " xdco" MAGENTA "xOkdlo" BLUE "dldd " RESET,
|
||||
BLUE " ddc:cl" MAGENTA "lll" BLUE "oooodo " RESET,
|
||||
BLUE " odxxdd" WHITE "xkO000kx" BLUE "ooxdo " RESET,
|
||||
BLUE " oxdd" WHITE "x0NMMMMMMWW0od" BLUE "kkxo " RESET,
|
||||
BLUE " oooxd" WHITE "0WMMMMMMMMMW0o" BLUE "dxkx " RESET,
|
||||
BLUE "docldkXW" WHITE "MMMMMMMWWN" BLUE "Odolco " RESET,
|
||||
BLUE "xx" MAGENTA "dx" BLUE "kxxOKN" WHITE "WMMWN" BLUE "0xdoxo::c " RESET,
|
||||
MAGENTA "xOkkO" BLUE "0oo" WHITE "odOW" MAGENTA "WW" BLUE "XkdodOxc:l " RESET,
|
||||
MAGENTA "dkkkxkkk" WHITE "OKX" MAGENTA "NNNX0Oxx" BLUE "xc:cd " RESET,
|
||||
MAGENTA " odxxdx" WHITE "xllod" MAGENTA "ddooxx" BLUE "dc:ldo " RESET,
|
||||
MAGENTA " lodd" BLUE "dolccc" MAGENTA "ccox" BLUE "xoloo " RESET
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
// This was stolen from neofetch
|
||||
#define RED "\e[1;31m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR RED
|
||||
#define TITLECOLOR RED
|
||||
|
||||
char *LOGO[] = {
|
||||
WHITE " _,met$$$$$gg. " RESET,
|
||||
WHITE " ,g$$$$$$$$$$$$$$$P. " RESET,
|
||||
WHITE " ,g$$P\" \"\"\"Y$$.\". " RESET,
|
||||
WHITE " ,$$P' `$$$. " RESET,
|
||||
WHITE "',$$P ,ggs. `$$b: " RESET,
|
||||
WHITE "`d$$' ,$P\"' " RED "." WHITE " $$$ " RESET,
|
||||
WHITE " $$P d$' " RED "," WHITE " $$P " RESET,
|
||||
WHITE " $$: $$. - ,d$$' " RESET,
|
||||
WHITE " $$; Y$b._ _,d$P' " RESET,
|
||||
WHITE " Y$$. " RED "`." WHITE "`\"Y$$$$P\"' " RESET,
|
||||
WHITE " `$$b " RED "\"-.__" WHITE " " RESET,
|
||||
WHITE " `Y$$ " RESET,
|
||||
WHITE " `Y$$. " RESET,
|
||||
WHITE " `$$b. " RESET,
|
||||
WHITE " `Y$$b. " RESET,
|
||||
WHITE " `\"Y$b._ " RESET,
|
||||
WHITE " `\"\"\" " RESET,
|
||||
WHITE " " RESET
|
||||
};
|
|
@ -0,0 +1,27 @@
|
|||
// This was stolen from neofetch
|
||||
#define MAGENTA "\e[1;35m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR MAGENTA
|
||||
#define TITLECOLOR MAGENTA
|
||||
|
||||
char *LOGO[] = {
|
||||
MAGENTA " ..,,;;;::;,.. " RESET,
|
||||
MAGENTA " `':ddd;:,. " RESET,
|
||||
MAGENTA " `'dPPd:,. " RESET,
|
||||
MAGENTA " `:b$$b`. " RESET,
|
||||
MAGENTA " 'P$$$d` " RESET,
|
||||
MAGENTA " .$$$$$` " RESET,
|
||||
MAGENTA " ;$$$$$P " RESET,
|
||||
MAGENTA " .:P$$$$$$` " RESET,
|
||||
MAGENTA " .,:b$$$$$$$;' " RESET,
|
||||
MAGENTA " .,:dP$$$$$$$$b:' " RESET,
|
||||
MAGENTA " .,:;db$$$$$$$$$$Pd'` " RESET,
|
||||
MAGENTA " ,db$$$$$$$$$$$$$$b:'` " RESET,
|
||||
MAGENTA ":$$$$$$$$$$$$b:'` " RESET,
|
||||
MAGENTA " `$$$$$bd:''` " RESET,
|
||||
MAGENTA " `'''` " RESET,
|
||||
MAGENTA " " RESET,
|
||||
MAGENTA " " RESET,
|
||||
MAGENTA " " RESET
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
// This was stolen from neofetch
|
||||
#define RED "\e[1;31m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR RED
|
||||
#define TITLECOLOR RED
|
||||
|
||||
char *LOGO[] = {
|
||||
WHITE "``` " RED "` " RESET,
|
||||
WHITE " ` `.....---..." RED "....--.``` -/ " RESET,
|
||||
WHITE " +o .--` " RED "/y:` +. " RESET,
|
||||
WHITE " yo`:. " RED ":o `+- " RESET,
|
||||
WHITE " y/ " RED "-/` -o/ " RESET,
|
||||
WHITE " .- " RED "::/sy+:. " RESET,
|
||||
WHITE " / " RED "`-- / " RESET,
|
||||
WHITE " `: " RED ":` " RESET,
|
||||
WHITE " `: " RED ":` " RESET,
|
||||
WHITE " / " RED "/ " RESET,
|
||||
WHITE " .- " RED "-. " RESET,
|
||||
WHITE " -- " RED "-. " RESET,
|
||||
WHITE " `:` " RED "`:` " RESET,
|
||||
RED " .-- `--. " RESET,
|
||||
RED " .---.....----. " RESET,
|
||||
RED " " RESET,
|
||||
RED " " RESET,
|
||||
RED " " RESET
|
||||
};
|
|
@ -0,0 +1,27 @@
|
|||
#define MAGENTA "\e[1;35m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR MAGENTA
|
||||
#define TITLECOLOR MAGENTA
|
||||
|
||||
char *LOGO[] = {
|
||||
MAGENTA " -/oyddmdhs+:. " RESET,
|
||||
MAGENTA " -o" WHITE "dNMMMMMMMMNNmhy+" MAGENTA "-` " RESET,
|
||||
MAGENTA " -y" WHITE "NMMMMMMMMMMMNNNmmdhy" MAGENTA "+- " RESET,
|
||||
MAGENTA " `o" WHITE "mMMMMMMMMMMMMNmdmmmmddhhy" MAGENTA "/` " RESET,
|
||||
MAGENTA " om" WHITE "MMMMMMMMMMMN" MAGENTA "hhyyyo" WHITE "hmdddhhhd" MAGENTA "o` " RESET,
|
||||
MAGENTA ".y" WHITE "dMMMMMMMMMMd" MAGENTA "hs++so/s" WHITE "mdddhhhhdm" MAGENTA "+` " RESET,
|
||||
MAGENTA " oy" WHITE "hdmNMMMMMMMN" MAGENTA "dyooy" WHITE "dmddddhhhhyhN" MAGENTA "d. " RESET,
|
||||
MAGENTA " :o" WHITE "yhhdNNMMMMMMMNNNmmdddhhhhhyym" MAGENTA "Mh " RESET,
|
||||
MAGENTA " .:" WHITE "+sydNMMMMMNNNmmmdddhhhhhhmM" MAGENTA "my " RESET,
|
||||
MAGENTA " /m" WHITE "MMMMMMNNNmmmdddhhhhhmMNh" MAGENTA "s: " RESET,
|
||||
MAGENTA " `o" WHITE "NMMMMMMMNNNmmmddddhhdmMNhs" MAGENTA "+` " RESET,
|
||||
MAGENTA " `s" WHITE "NMMMMMMMMNNNmmmdddddmNMmhs" MAGENTA "/. " RESET,
|
||||
MAGENTA " /N" WHITE "MMMMMMMMNNNNmmmdddmNMNdso" MAGENTA ":` " RESET,
|
||||
MAGENTA "+M" WHITE "MMMMMMNNNNNmmmmdmNMNdso" MAGENTA "/- " RESET,
|
||||
MAGENTA "yM" WHITE "MNNNNNNNmmmmmNNMmhs+/" MAGENTA" -` " RESET,
|
||||
MAGENTA "/h" WHITE "MMNNNNNNNNMNdhs++/" MAGENTA "-` " RESET,
|
||||
MAGENTA "`/" WHITE "ohdmmddhys+++/:" MAGENTA ".` " RESET,
|
||||
MAGENTA " `-//////:--. " RESET
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
// This was stolen from neofetch
|
||||
#define GREY "\e[1;30m"
|
||||
#define YELLOW "\e[1;33m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR WHITE
|
||||
#define TITLECOLOR WHITE
|
||||
|
||||
char *LOGO[] = {
|
||||
GREY " ##### " RESET,
|
||||
GREY " ####### " RESET,
|
||||
GREY " ##" WHITE "O" GREY "#" WHITE "O" GREY "## " RESET,
|
||||
GREY " #" YELLOW "#####" GREY "# " RESET,
|
||||
GREY " ##" WHITE "##" YELLOW "###" WHITE "##" GREY "## " RESET,
|
||||
GREY " #" WHITE "##########" GREY "## " RESET,
|
||||
GREY " #" WHITE "############" GREY "## " RESET,
|
||||
GREY " #" WHITE "############" GREY "### " RESET,
|
||||
YELLOW " ##" GREY "#" WHITE "###########" GREY "##" YELLOW "# " RESET,
|
||||
YELLOW "######" YELLOW "#" GREY "#" WHITE "######" GREY "#" YELLOW "###### " RESET,
|
||||
YELLOW "#######" GREY "#" WHITE "#####" GREY "#" YELLOW "####### " RESET,
|
||||
YELLOW " #####" GREY "#######" YELLOW "##### " RESET,
|
||||
GREY " " RESET,
|
||||
GREY " " RESET,
|
||||
GREY " " RESET,
|
||||
GREY " " RESET,
|
||||
GREY " " RESET,
|
||||
GREY " " RESET
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
// This was stolen from neofetch
|
||||
#define MAGENTA "\e[1;35m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR MAGENTA
|
||||
#define TITLECOLOR MAGENTA
|
||||
|
||||
char *LOGO[] = {
|
||||
MAGENTA " `-/oshdmNMNdhyo+:-` " RESET,
|
||||
WHITE "y" MAGENTA "/s+:-`` `.-:+oydNMMMMNhs/-`` " RESET,
|
||||
WHITE "-m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMNdhmNMMMmdhs+/-` " RESET,
|
||||
WHITE " -m+" MAGENTA "NMMMMMMMMMMMMMMMMMMMMmy+:` " RESET,
|
||||
WHITE " -N/" MAGENTA "dMMMMMMMMMMMMMMMds:` " RESET,
|
||||
WHITE " -N/" MAGENTA "hMMMMMMMMMmho:` " RESET,
|
||||
WHITE " -N/" MAGENTA "-:/++/:.` " RESET,
|
||||
WHITE " :M+ " RESET,
|
||||
WHITE " :Mo " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " :Ms " RESET,
|
||||
WHITE " " RESET
|
||||
};
|
|
@ -0,0 +1,35 @@
|
|||
// This was stolen from neofetch
|
||||
#define GREY "\e[1;30m"
|
||||
#define RED "\e[1;31m"
|
||||
#define YELLOW "\e[1;33m"
|
||||
#define CYAN "\e[1;36m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR YELLOW
|
||||
#define TITLECOLOR YELLOW
|
||||
|
||||
char *LOGO[] = {
|
||||
CYAN " _ " RESET,
|
||||
CYAN " (_) " RESET,
|
||||
YELLOW " | . " RESET,
|
||||
YELLOW " . |L /| . " CYAN "_ " RESET,
|
||||
YELLOW " _ . |\\ _| \\--+._/| . " CYAN " (_) " RESET,
|
||||
YELLOW " / ||\\| Y J ) / |/| ./ " RESET,
|
||||
YELLOW " J |)'( | ` F`.'/ " CYAN " _ " RESET,
|
||||
YELLOW " -<| F __ .-< " CYAN " (_) " RESET,
|
||||
YELLOW " | / .-'" CYAN "." YELLOW " `. /" CYAN "-. " YELLOW "L___ " RESET,
|
||||
YELLOW " J \\ < " CYAN "\\ " YELLOW " | |" GREY " O" CYAN "\\" YELLOW "|.-' " CYAN " _ " RESET,
|
||||
YELLOW " _J \\ .- \\" CYAN "/" GREY " O " CYAN "|" YELLOW" | \\ |F " CYAN " (_) " RESET,
|
||||
YELLOW " '-F -<_. \\ .-' `-' L__ " RESET,
|
||||
YELLOW "__J _ _. >-' )" RED "._." YELLOW " |-' " RESET,
|
||||
YELLOW " `-|.' /_. " RED "\\_|" YELLOW " F " RESET,
|
||||
YELLOW " /.- . _.< " RESET,
|
||||
YELLOW " /' /.' .' `\\ " RESET,
|
||||
YELLOW " /L /' |/ _.-'-\\ " RESET,
|
||||
YELLOW " /'J ___.---'\\| " RESET,
|
||||
YELLOW " |\\ .--' V | `. ` " RESET,
|
||||
YELLOW " |/`. `-. `._) " RESET,
|
||||
YELLOW " / .-.\\ " RESET,
|
||||
YELLOW " \\ ( `\\ " RESET,
|
||||
YELLOW " `.\\ " RESET
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
#define BLUE "\e[1;34m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR BLUE
|
||||
#define TITLECOLOR BLUE
|
||||
|
||||
char *LOGO[] = {
|
||||
WHITE " .sy/ " RESET,
|
||||
WHITE " .yh+ " RESET,
|
||||
WHITE " " RESET,
|
||||
BLUE " " BLUE "-+syyyo+-" WHITE " /+. " RESET,
|
||||
BLUE " " BLUE "+ddo/---/sdh/" WHITE " ym- " RESET,
|
||||
BLUE " " BLUE "`hm+ `sms" WHITE " ym-```````.-. " RESET,
|
||||
BLUE " " BLUE "sm+ sm/" WHITE " ym- +s " RESET,
|
||||
BLUE " " BLUE "hm. /mo" WHITE " ym- /h " RESET,
|
||||
BLUE " " BLUE "omo ym:" WHITE " ym- `os` " RESET,
|
||||
BLUE " " BLUE "smo` .ym+" WHITE " ym- .os- " RESET,
|
||||
WHITE " `` " BLUE ":ymy+///oyms-" WHITE " ym- .+s+. " RESET,
|
||||
WHITE " ..` " BLUE "`:+oo+/-`" WHITE " -//oyo- " RESET,
|
||||
WHITE " -:` .:oys/. " RESET,
|
||||
WHITE "+- `./oyys/. " RESET,
|
||||
WHITE "h+` `.-:+oyyyo/-` " RESET,
|
||||
WHITE "`/ossssysso+/-.` " RESET,
|
||||
WHITE " " RESET,
|
||||
WHITE " " RESET,
|
||||
WHITE " " RESET
|
||||
};
|
|
@ -0,0 +1,28 @@
|
|||
// This was stolen from neofetch
|
||||
#define GREEN "\e[1;32m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR GREEN
|
||||
#define TITLECOLOR GREEN
|
||||
|
||||
char *LOGO[] = {
|
||||
GREEN " /\\ " RESET,
|
||||
GREEN " / \\ " RESET,
|
||||
GREEN " / \\ " RESET,
|
||||
GREEN " / \\ " RESET,
|
||||
GREEN " / \\ " RESET,
|
||||
GREEN " / \\ " RESET,
|
||||
GREEN " \\ \\ " RESET,
|
||||
GREEN " /\\ \\____ \\ " RESET,
|
||||
GREEN " / \\____ \\ \\ " RESET,
|
||||
GREEN " / / \\ \\ " RESET,
|
||||
GREEN " / / \\ ___\\ " RESET,
|
||||
GREEN " / / \\ / ____ " RESET,
|
||||
GREEN " / / \\/ / \\ " RESET,
|
||||
GREEN " / / __________/ \\ " RESET,
|
||||
GREEN " / \\ \\ \\ " RESET,
|
||||
GREEN " / \\ \\ \\ " RESET,
|
||||
GREEN " / / / \\ " RESET,
|
||||
GREEN "/___________/ /____________________\\ " RESET,
|
||||
GREEN " " RESET
|
||||
};
|
|
@ -0,0 +1,31 @@
|
|||
// This was stolen from neofetch
|
||||
#define GREY "\e[1;30m"
|
||||
#define GREEN "\e[1;32m"
|
||||
#define WHITE "\e[1;37m"
|
||||
#define RESET "\e[0m"
|
||||
|
||||
#define COLOR WHITE
|
||||
#define TITLECOLOR GREEN
|
||||
|
||||
char *LOGO[] = {
|
||||
GREEN " __.;=====;.__ " RESET,
|
||||
GREEN " _.=+==++=++=+=+===;. " RESET,
|
||||
GREEN " -=+++=+===+=+=+++++=_ " RESET,
|
||||
GREEN " . -=:`` `--==+=++==. " RESET,
|
||||
GREEN " _vi, ` --+=++++: " RESET,
|
||||
GREEN " .uvnvi. _._ -==+==+. " RESET,
|
||||
GREEN " .vvnvnI` .;==|==;. :|=||=|. " RESET,
|
||||
GREY "+QmQQm" GREEN "pvvnv; " GREY "_yYsyQQWUUQQQm #QmQ#" GREEN ":" GREY "QQQWUV$QQm. " RESET,
|
||||
GREY " -QQWQW" GREEN "pvvo" GREY "wZ?.wQQQE" GREEN "==<" GREY "!QWWQ/QWQW.QQWW" GREEN "(: " GREY "jQWQE " RESET,
|
||||
GREY " -$QQQQmmU' jQQQ@" GREEN "+=<" GREY "QWQQ)mQQQ.mQQQC" GREEN "+;" GREY "jWQQ@' " RESET,
|
||||
GREY " -$WQ8Y" GREEN "nI: " GREY "QWQQwgQQWV" GREEN"`" GREY "mWQQ.jQWQQgyyWW@! " RESET,
|
||||
GREEN " -1vvnvv. `~+++` ++|+++ " RESET,
|
||||
GREEN " +vnvnnv, `-|=== " RESET,
|
||||
GREEN " +vnvnvns. . :=- " RESET,
|
||||
GREEN " -Invnvvnsi..___..=sv=. ` " RESET,
|
||||
GREEN " +Invnvnvnnnnnnnnvvnn;. " RESET,
|
||||
GREEN " ~|Invnvnvvnvvvnnv}+` " RESET,
|
||||
GREEN " -~|{*l}*|~ " RESET,
|
||||
GREEN " " RESET,
|
||||
GREEN " " RESET
|
||||
};
|
272
paleofetch.c
272
paleofetch.c
|
@ -135,7 +135,7 @@ static char *get_title() {
|
|||
title_length = strlen(hostname) + strlen(username) + 1;
|
||||
|
||||
char *title = malloc(BUF_SIZE);
|
||||
snprintf(title, BUF_SIZE, COLOR"%s\e[0m@"COLOR"%s", username, hostname);
|
||||
snprintf(title, BUF_SIZE, TITLECOLOR"%s\e[0m@"TITLECOLOR"%s", username, hostname);
|
||||
|
||||
return title;
|
||||
}
|
||||
|
@ -178,36 +178,39 @@ static char *get_kernel() {
|
|||
}
|
||||
|
||||
static char *get_host() {
|
||||
char *host = malloc(BUF_SIZE), buffer[BUF_SIZE/2];
|
||||
FILE *product_name, *product_version, *model;
|
||||
char *host = malloc(BUF_SIZE), buffer[BUF_SIZE/2];
|
||||
FILE *product_name, *product_version, *model;
|
||||
|
||||
if((product_name = fopen("/sys/devices/virtual/dmi/id/product_name", "r")) != NULL) {
|
||||
if((product_version = fopen("/sys/devices/virtual/dmi/id/product_version", "r")) != NULL) {
|
||||
fread(host, 1, BUF_SIZE/2, product_name);
|
||||
remove_newline(host);
|
||||
strcat(host, " ");
|
||||
fread(buffer, 1, BUF_SIZE/2, product_version);
|
||||
remove_newline(buffer);
|
||||
strcat(host, buffer);
|
||||
fclose(product_version);
|
||||
} else {
|
||||
fclose(product_name);
|
||||
goto model_fallback;
|
||||
}
|
||||
fclose(product_name);
|
||||
return host;
|
||||
if ((product_name = fopen("/sys/devices/virtual/dmi/id/product_name", "r")) != NULL) {
|
||||
if ((product_version = fopen("/sys/devices/virtual/dmi/id/product_version", "r")) != NULL) {
|
||||
fread(host, 1, BUF_SIZE/2, product_name);
|
||||
remove_newline(host);
|
||||
strcat(host, " ");
|
||||
fread(buffer, 1, BUF_SIZE/2, product_version);
|
||||
remove_newline(buffer);
|
||||
if (strcmp(buffer, "To Be Filled By O.E.M.") != 0) {
|
||||
strcat(host, " ");
|
||||
strcat(host, buffer);
|
||||
}
|
||||
fclose(product_version);
|
||||
} else {
|
||||
fclose(product_name);
|
||||
goto model_fallback;
|
||||
}
|
||||
fclose(product_name);
|
||||
return host;
|
||||
}
|
||||
|
||||
model_fallback:
|
||||
if((model = fopen("/sys/firmware/devicetree/base/model", "r")) != NULL) {
|
||||
fread(host, 1, BUF_SIZE, model);
|
||||
remove_newline(host);
|
||||
return host;
|
||||
}
|
||||
if ((model = fopen("/sys/firmware/devicetree/base/model", "r")) != NULL) {
|
||||
fread(host, 1, BUF_SIZE, model);
|
||||
remove_newline(host);
|
||||
return host;
|
||||
}
|
||||
|
||||
status = -1;
|
||||
halt_and_catch_fire("unable to get host");
|
||||
return NULL;
|
||||
status = -1;
|
||||
halt_and_catch_fire("unable to get host");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char *get_uptime() {
|
||||
|
@ -232,64 +235,10 @@ static char *get_uptime() {
|
|||
return uptime;
|
||||
}
|
||||
|
||||
// returns "<Battery Percentage>% [<Charging | Discharging | Unknown>]"
|
||||
static char *get_battery_percentage() {
|
||||
// battery status is at most 11 characters: "discharging"
|
||||
char *battery_percentage = malloc(BUF_SIZE / 2), battery_status[12];
|
||||
FILE *battery_percentage_file, *battery_status_file;
|
||||
|
||||
if((battery_percentage_file = fopen(BATTERY_DIRECTORY "/capacity", "r")) != NULL) {
|
||||
// at most 100, which is 3 characters
|
||||
fread(battery_percentage, 1, 3, battery_percentage_file);
|
||||
remove_newline(battery_percentage);
|
||||
strcat(battery_percentage, "% [");
|
||||
if((battery_status_file = fopen(BATTERY_DIRECTORY "/status", "r")) != NULL) {
|
||||
fread(battery_status, 1, 12, battery_status_file);
|
||||
remove_newline(battery_status);
|
||||
strcat(battery_percentage, battery_status);
|
||||
strcat(battery_percentage, "]");
|
||||
}
|
||||
else {
|
||||
strcat(battery_percentage, "Unknown]");
|
||||
}
|
||||
|
||||
fclose(battery_status_file);
|
||||
}
|
||||
else {
|
||||
halt_and_catch_fire("unable to get battery information");
|
||||
}
|
||||
|
||||
fclose(battery_percentage_file);
|
||||
return battery_percentage;
|
||||
}
|
||||
|
||||
static char *get_packages(const char* dirname, const char* pacname, int num_extraneous) {
|
||||
int num_packages = 0;
|
||||
DIR * dirp;
|
||||
struct dirent *entry;
|
||||
|
||||
dirp = opendir(dirname);
|
||||
|
||||
if(dirp == NULL) {
|
||||
status = -1;
|
||||
halt_and_catch_fire("You may not have %s installed", dirname);
|
||||
}
|
||||
|
||||
while((entry = readdir(dirp)) != NULL) {
|
||||
if(entry->d_type == DT_DIR) num_packages++;
|
||||
}
|
||||
num_packages -= (2 + num_extraneous); // accounting for . and ..
|
||||
|
||||
status = closedir(dirp);
|
||||
|
||||
char *packages = malloc(BUF_SIZE);
|
||||
snprintf(packages, BUF_SIZE, "%d (%s)", num_packages, pacname);
|
||||
|
||||
return packages;
|
||||
}
|
||||
|
||||
static char *get_packages_pacman() {
|
||||
return get_packages("/var/lib/pacman/local", "pacman", 0);
|
||||
static char *get_packages() {
|
||||
char *packages = malloc(BUF_SIZE);
|
||||
snprintf(packages, BUF_SIZE, "%s", PACKAGES);
|
||||
return packages;
|
||||
}
|
||||
|
||||
static char *get_shell() {
|
||||
|
@ -298,9 +247,9 @@ static char *get_shell() {
|
|||
char *shell_name = strrchr(getenv("SHELL"), '/');
|
||||
|
||||
if(shell_name == NULL) /* if $SHELL doesn't have a '/' */
|
||||
strncpy(shell, shell_path, BUF_SIZE); /* copy the whole thing over */
|
||||
strncpy(shell, shell_path, BUF_SIZE - 1); /* copy the whole thing over */
|
||||
else
|
||||
strncpy(shell, shell_name + 1, BUF_SIZE); /* o/w copy past the last '/' */
|
||||
strncpy(shell, shell_name + 1, BUF_SIZE - 1); /* o/w copy past the last '/' */
|
||||
|
||||
return shell;
|
||||
}
|
||||
|
@ -341,7 +290,7 @@ static char *get_resolution() {
|
|||
modes = fopen(modes_file_name, "r");
|
||||
if (modes != NULL) {
|
||||
if (getline(&line, &len, modes) != -1) {
|
||||
strncpy(resolution, line, BUF_SIZE);
|
||||
strncpy(resolution, line, BUF_SIZE - 1);
|
||||
remove_newline(resolution);
|
||||
|
||||
free(line);
|
||||
|
@ -361,42 +310,117 @@ static char *get_resolution() {
|
|||
return resolution;
|
||||
}
|
||||
|
||||
static char *get_terminal() {
|
||||
unsigned char *prop;
|
||||
char *terminal = malloc(BUF_SIZE);
|
||||
static char *get_wm() {
|
||||
char *wayland_display = getenv("WAYLAND_DISPLAY");
|
||||
if (wayland_display != NULL) {
|
||||
char *wayland_wms[] = {
|
||||
"[a]rcan", "[a]sc", "[c]layland", "[d]wc", "[d]wl", "[f]ireplace",
|
||||
"[g]nome-shell", "[g]reenfield", "[g]refsen", "[k]win",
|
||||
"[l]ipstick", "[m]aynard", "[m]azecompositor", "[m]otorcar",
|
||||
"[o]rbital", "[o]rbment", "[p]erceptia", "[r]ustland", "[s]way",
|
||||
"[u]lubis", "[v]elox", "[w]avy", "[w]ay-cooler", "[w]ayfire",
|
||||
"[w]ayhouse", "[w]esteros", "[w]estford", "[w]eston"
|
||||
};
|
||||
|
||||
/* check if xserver is running or if we are running in a straight tty */
|
||||
if (display != NULL) {
|
||||
char command[1024] = "ps aux | grep -m 1 -E -o '";
|
||||
size_t num_wms = sizeof(wayland_wms) / sizeof(wayland_wms[0]);
|
||||
for (size_t i = 0; i < num_wms - 1; i++) {
|
||||
strcat(command, wayland_wms[i]);
|
||||
strcat(command, "|");
|
||||
}
|
||||
strcat(command, wayland_wms[sizeof(wayland_wms) / sizeof(wayland_wms[0]) - 1]);
|
||||
strcat(command, "'");
|
||||
|
||||
unsigned long _, // not unused, but we don't need the results
|
||||
window = RootWindow(display, XDefaultScreen(display));
|
||||
Atom a,
|
||||
active = XInternAtom(display, "_NET_ACTIVE_WINDOW", True),
|
||||
class = XInternAtom(display, "WM_CLASS", True);
|
||||
|
||||
#define GetProp(property) \
|
||||
XGetWindowProperty(display, window, property, 0, 64, 0, 0, &a, (int *)&_, &_, &_, &prop);
|
||||
|
||||
GetProp(active);
|
||||
window = (prop[3] << 24) + (prop[2] << 16) + (prop[1] << 8) + prop[0];
|
||||
free(prop);
|
||||
if(!window) goto terminal_fallback;
|
||||
GetProp(class);
|
||||
|
||||
#undef GetProp
|
||||
|
||||
snprintf(terminal, BUF_SIZE, "%s", prop);
|
||||
free(prop);
|
||||
} else {
|
||||
terminal_fallback:
|
||||
strncpy(terminal, getenv("TERM"), BUF_SIZE); /* fallback to old method */
|
||||
/* in tty, $TERM is simply returned as "linux"; in this case get actual tty name */
|
||||
if (strcmp(terminal, "linux") == 0) {
|
||||
strncpy(terminal, ttyname(STDIN_FILENO), BUF_SIZE);
|
||||
}
|
||||
FILE *fp = popen(command, "r");
|
||||
if (fp == NULL) {
|
||||
perror("popen");
|
||||
return strdup("不明");
|
||||
}
|
||||
|
||||
return terminal;
|
||||
char wm_name[256];
|
||||
if (fgets(wm_name, sizeof(wm_name), fp) != NULL) {
|
||||
char *newline = strchr(wm_name, '\n');
|
||||
if (newline) {
|
||||
*newline = '\0';
|
||||
}
|
||||
} else {
|
||||
strcpy(wm_name, "不明");
|
||||
}
|
||||
|
||||
pclose(fp);
|
||||
return strdup(wm_name);
|
||||
}
|
||||
|
||||
Display *dpy = XOpenDisplay(NULL);
|
||||
if (dpy == NULL) {
|
||||
fprintf(stderr, "Unable to connect to display\n");
|
||||
return strdup("不明");
|
||||
}
|
||||
|
||||
int screen = DefaultScreen(dpy);
|
||||
Window root = RootWindow(dpy, screen);
|
||||
|
||||
Atom atom = XInternAtom(dpy, "_NET_SUPPORTING_WM_CHECK", False);
|
||||
Atom type;
|
||||
int format;
|
||||
unsigned long nitems, bytes_after;
|
||||
unsigned char *prop;
|
||||
int status = XGetWindowProperty(dpy, root, atom, 0, (~0L), False, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop);
|
||||
if (status != Success || !prop) {
|
||||
fprintf(stderr, "Unable to get window manager property\n");
|
||||
XCloseDisplay(dpy);
|
||||
return strdup("不明");
|
||||
}
|
||||
|
||||
Window wm_window = *(Window *)prop;
|
||||
XFree(prop);
|
||||
|
||||
status = XGetWindowProperty(dpy, wm_window, XInternAtom(dpy, "_NET_WM_NAME", False), 0, (~0L), False, AnyPropertyType, &type, &format, &nitems, &bytes_after, &prop);
|
||||
if (status != Success || !prop) {
|
||||
fprintf(stderr, "Unable to get window manager name property\n");
|
||||
XCloseDisplay(dpy);
|
||||
return strdup("不明");
|
||||
}
|
||||
|
||||
char *wm_name = strdup((char *)prop);
|
||||
XFree(prop);
|
||||
XCloseDisplay(dpy);
|
||||
|
||||
return wm_name;
|
||||
}
|
||||
|
||||
static char *get_terminal() {
|
||||
unsigned char *prop;
|
||||
char *terminal = malloc(BUF_SIZE);
|
||||
|
||||
if (display != NULL) {
|
||||
unsigned long _, // not unused, but we don't need the results
|
||||
window = RootWindow(display, XDefaultScreen(display));
|
||||
Atom a,
|
||||
active = XInternAtom(display, "_NET_ACTIVE_WINDOW", True),
|
||||
class = XInternAtom(display, "WM_CLASS", True);
|
||||
|
||||
#define GetProp(property) \
|
||||
XGetWindowProperty(display, window, property, 0, 64, 0, 0, &a, (int *)&_, &_, &_, &prop);
|
||||
|
||||
GetProp(active);
|
||||
window = (prop[3] << 24) + (prop[2] << 16) + (prop[1] << 8) + prop[0];
|
||||
free(prop);
|
||||
if(!window) goto terminal_fallback;
|
||||
GetProp(class);
|
||||
#undef GetProp
|
||||
|
||||
snprintf(terminal, BUF_SIZE, "%s", prop);
|
||||
free(prop);
|
||||
} else {
|
||||
terminal_fallback:
|
||||
strncpy(terminal, getenv("TERM"), BUF_SIZE - 1); /* fallback to old method */
|
||||
if (strcmp(terminal, "linux") == 0) {
|
||||
strncpy(terminal, ttyname(STDIN_FILENO), BUF_SIZE - 1);
|
||||
}
|
||||
}
|
||||
|
||||
return terminal;
|
||||
}
|
||||
|
||||
static char *get_cpu() {
|
||||
|
@ -500,10 +524,10 @@ static char *find_gpu(int index) {
|
|||
dev = pacc->devices;
|
||||
|
||||
while(dev != NULL) {
|
||||
pci_fill_info(dev, PCI_FILL_IDENT);
|
||||
pci_fill_info(dev, PCI_FILL_IDENT | PCI_FILL_BASES | PCI_FILL_CLASS);
|
||||
device_class = pci_lookup_name(pacc, buffer, sizeof(buffer), PCI_LOOKUP_CLASS, dev->device_class);
|
||||
if(strcmp("VGA compatible controller", device_class) == 0 || strcmp("3D controller", device_class) == 0) {
|
||||
strncpy(gpu, pci_lookup_name(pacc, buffer, sizeof(buffer), PCI_LOOKUP_DEVICE | PCI_LOOKUP_VENDOR, dev->vendor_id, dev->device_id), BUF_SIZE);
|
||||
strncpy(gpu, pci_lookup_name(pacc, buffer, sizeof(buffer), PCI_LOOKUP_DEVICE | PCI_LOOKUP_VENDOR, dev->vendor_id, dev->device_id), BUF_SIZE - 1);
|
||||
if(gpu_index == index) {
|
||||
found = true;
|
||||
break;
|
||||
|
@ -717,13 +741,13 @@ int main(int argc, char *argv[]) {
|
|||
for (int i = 0; i < COUNT(LOGO); i++) {
|
||||
// If we've run out of information to show...
|
||||
if(i >= COUNT(config) - offset) // just print the next line of the logo
|
||||
printf(COLOR"%s\n", LOGO[i]);
|
||||
printf("%s\n", LOGO[i]);
|
||||
else {
|
||||
// Otherwise, we've got a bit of work to do.
|
||||
char *label = config[i+offset].label,
|
||||
*value = get_value(config[i+offset], read_cache, cache_data);
|
||||
if (strcmp(value, "") != 0) { // check if value is an empty string
|
||||
printf(COLOR"%s%s\e[0m%s\n", LOGO[i], label, value); // just print if not empty
|
||||
printf("%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value); // just print if not empty
|
||||
} else {
|
||||
if (strcmp(label, "") != 0) { // check if label is empty, otherwise it's a spacer
|
||||
++offset; // print next line of information
|
||||
|
@ -731,7 +755,7 @@ int main(int argc, char *argv[]) {
|
|||
label = config[i+offset].label; // read new label and value
|
||||
value = get_value(config[i+offset], read_cache, cache_data);
|
||||
}
|
||||
printf(COLOR"%s%s\e[0m%s\n", LOGO[i], label, value);
|
||||
printf("%s"COLOR"%s\e[0m%s\n", LOGO[i], label, value);
|
||||
}
|
||||
free(value);
|
||||
|
||||
|
|
|
@ -7,10 +7,10 @@ static char *get_title(),
|
|||
*get_kernel(),
|
||||
*get_host(),
|
||||
*get_uptime(),
|
||||
*get_battery_percentage(),
|
||||
*get_packages_pacman(),
|
||||
*get_packages(),
|
||||
*get_shell(),
|
||||
*get_resolution(),
|
||||
*get_wm(),
|
||||
*get_terminal(),
|
||||
*get_cpu(),
|
||||
*get_gpu1(),
|
||||
|
|
読み込み中…
新しいイシューから参照