From 1c0e93c1bd0f80b1475a02989c861fe7d86bcf4b Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Tue, 14 Jan 2014 00:22:52 -0200 Subject: [PATCH] First new feature of the git era! "c" key tags all children of a process. --- ChangeLog | 1 + htop.c | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/ChangeLog b/ChangeLog index 5efc3e52..e22d0bdc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ What's new in version 1.0.3 +* Tag all children ('c' key) * Fixes in accounting of guest time when using virtualization (thanks to Patrick Marlier) * Performance improvements diff --git a/htop.c b/htop.c index 7471dcd4..359f21df 100644 --- a/htop.c +++ b/htop.c @@ -272,6 +272,17 @@ static const char* getMainPanelValue(Panel* panel, int i) { return ""; } +static void tagAllChildren(Panel* panel, Process* parent) { + parent->tag = true; + pid_t ppid = parent->pid; + for (int i = 0; i < Panel_size(panel); i++) { + Process* p = (Process*) Panel_get(panel, i); + if (!p->tag && p->ppid == ppid) { + tagAllChildren(panel, p); + } + } +} + int main(int argc, char** argv) { int delay = -1; @@ -563,6 +574,13 @@ int main(int argc, char** argv) { setSortKey(pl, TIME, panel, settings); break; } + case 'c': + { + Process* p = (Process*) Panel_getSelected(panel); + if (!p) break; + tagAllChildren(panel, p); + break; + } case 'U': { for (int i = 0; i < Panel_size(panel); i++) {