diff options
| author | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-12-21 16:57:44 +0900 |
|---|---|---|
| committer | TheSiahxyz <164138827+TheSiahxyz@users.noreply.github.com> | 2025-12-21 16:57:44 +0900 |
| commit | 5bb312993960adaa663701391a83f76b81edc60a (patch) | |
| tree | 8838656d0000d24a4c44f5a548b0b36477dbee60 /fedora/.local/bin/htop-vim/EnvScreen.c | |
| parent | a861a5fb4c3449abd9d43481c24a90fb91345d75 (diff) | |
created htop-vim/
Diffstat (limited to 'fedora/.local/bin/htop-vim/EnvScreen.c')
| -rw-r--r-- | fedora/.local/bin/htop-vim/EnvScreen.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/fedora/.local/bin/htop-vim/EnvScreen.c b/fedora/.local/bin/htop-vim/EnvScreen.c new file mode 100644 index 0000000..0fcee83 --- /dev/null +++ b/fedora/.local/bin/htop-vim/EnvScreen.c @@ -0,0 +1,58 @@ +#include "config.h" // IWYU pragma: keep + +#include "EnvScreen.h" + +#include <stdlib.h> +#include <string.h> + +#include "Macros.h" +#include "Panel.h" +#include "Platform.h" +#include "ProvideCurses.h" +#include "Vector.h" +#include "XUtils.h" + + +EnvScreen* EnvScreen_new(Process* process) { + EnvScreen* this = xMalloc(sizeof(EnvScreen)); + Object_setClass(this, Class(EnvScreen)); + return (EnvScreen*) InfoScreen_init(&this->super, process, NULL, LINES - 2, " "); +} + +void EnvScreen_delete(Object* this) { + free(InfoScreen_done((InfoScreen*)this)); +} + +static void EnvScreen_draw(InfoScreen* this) { + InfoScreen_drawTitled(this, "Environment of process %d - %s", this->process->pid, Process_getCommand(this->process)); +} + +static void EnvScreen_scan(InfoScreen* this) { + Panel* panel = this->display; + int idx = MAXIMUM(Panel_getSelectedIndex(panel), 0); + + Panel_prune(panel); + + char* env = Platform_getProcessEnv(this->process->pid); + if (env) { + for (const char* p = env; *p; p = strrchr(p, 0) + 1) + InfoScreen_addLine(this, p); + free(env); + } + else { + InfoScreen_addLine(this, "Could not read process environment."); + } + + Vector_insertionSort(this->lines); + Vector_insertionSort(panel->items); + Panel_setSelected(panel, idx); +} + +const InfoScreenClass EnvScreen_class = { + .super = { + .extends = Class(Object), + .delete = EnvScreen_delete + }, + .scan = EnvScreen_scan, + .draw = EnvScreen_draw +}; |
