From 06722e4a2a53a8193efde91034f299eec0a4103d Mon Sep 17 00:00:00 2001 From: Marc Payne Date: Mon, 20 Jul 2015 17:10:42 -0600 Subject: [PATCH] Add top_name_verbose option Since commit 749083a, the output of ${top name } contains the full command line of each process, including arguments. While this feature can be very useful, it changes the default behavior of Conky. The present commit adds a new top_name_verbose option that allows the user to toggle between basenames with no arguments (the old behavior) and full command lines with arguments. To remain consistent with past versions of Conky, the default value of top_name_verbose is false. Fixes #113 (https://github.com/brndnmtthws/conky/issues/113). --- doc/config_settings.xml | 11 +++++++++++ src/top.cc | 9 ++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/doc/config_settings.xml b/doc/config_settings.xml index 26c4db99..70fd0b82 100644 --- a/doc/config_settings.xml +++ b/doc/config_settings.xml @@ -959,6 +959,17 @@ of all processors' power combined. + + + + + + + If true, top name shows the full command line of each + process, including arguments (whenever possible). Otherwise, + only the basename is displayed. Default value is false. + + diff --git a/src/top.cc b/src/top.cc index abe4535a..04cf4050 100644 --- a/src/top.cc +++ b/src/top.cc @@ -32,6 +32,7 @@ #include "prioqueue.h" #include "top.h" #include "logging.h" +#include /* hash table size - always a power of 2 */ #define HTABSIZE 256 @@ -480,6 +481,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 void print_top_name(struct text_object *obj, char *p, int p_max_size) { @@ -489,8 +491,13 @@ 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, td->list[td->num]->name); + snprintf(p, width + 1, "%-*s", width, top_name.c_str()); } static void print_top_mem(struct text_object *obj, char *p, int p_max_size)