From 03a5cc50470b429c73321463b273a97fe5720a2c Mon Sep 17 00:00:00 2001 From: Marc Payne Date: Wed, 26 Aug 2015 11:59:26 -0600 Subject: [PATCH] Add basename support to top The new top_name_verbose option works in most cases, but it will fail if the executable name contains spaces. Trying to parse command lines from /proc//* turned out to be quite complex due to the many edge cases. My solution, once again, is to fall back to 1.9.x behavior. If top_name_verbose is true, use the full command line. Otherwise, use basename. Fixes #131. --- src/top.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/top.cc b/src/top.cc index ecd08a54..98907f48 100644 --- a/src/top.cc +++ b/src/top.cc @@ -32,7 +32,6 @@ #include "prioqueue.h" #include "top.h" #include "logging.h" -#include /* hash table size - always a power of 2 */ #define HTABSIZE 256 @@ -487,7 +486,7 @@ struct top_data { static conky::range_config_setting top_name_width("top_name_width", 0, std::numeric_limits::max(), 15, true); -static conky::simple_config_setting top_name_verbose("top_name_verbose", false, false); +static conky::simple_config_setting top_name_verbose("top_name_verbose", false, true); static void print_top_name(struct text_object *obj, char *p, int p_max_size) { @@ -497,13 +496,14 @@ static void print_top_name(struct text_object *obj, char *p, int p_max_size) if (!td || !td->list || !td->list[td->num]) return; - std::string top_name = td->list[td->num]->name; - if (!top_name_verbose.get(*state)) { - top_name = top_name.substr(0, top_name.find_first_of(' ')); - } - width = MIN(p_max_size, (int)top_name_width.get(*state) + 1); - snprintf(p, width + 1, "%-*s", width, top_name.c_str()); + if (top_name_verbose.get(*state)) { + /* print the full command line */ + snprintf(p, width + 1, "%-*s", width, td->list[td->num]->name); + } else { + /* print only the basename (i.e. executable name) */ + snprintf(p, width + 1, "%-*s", width, td->list[td->num]->basename); + } } static void print_top_mem(struct text_object *obj, char *p, int p_max_size)