From 3998cb80f241a9b6f395678708859a147ee3305a Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Mon, 24 Aug 2009 20:57:40 +0200 Subject: [PATCH] new attribute for a columns view: do not display empty tag marker --- doc/config | 10 +++++++--- src/display.cpp | 13 ++++++++----- src/settings.cpp | 13 ++++++++++++- src/settings.h | 3 +++ 4 files changed, 30 insertions(+), 9 deletions(-) diff --git a/doc/config b/doc/config index 492828b4..97b57202 100644 --- a/doc/config +++ b/doc/config @@ -131,9 +131,13 @@ ## ## - color is optional (if you want the default one, type []) ## -## Note: If you want a column to be right aligned, put 'r' character -## after displayed tag character, e.g. {lr} will give you right aligned -## column of lengths. +## Note: You can give a column additional attributes by putting appropriate +## character after displayed tag character. Available attributes are: +## +## - r - column will be right aligned +## - E - if tag is empty, empty tag marker won't be displayed +## +## E.g. {lr} will give you right aligned column of lengths. ## # #song_columns_list_format = "(7f)[green]{l} (25)[cyan]{a} (40)[]{t} (30)[red]{b}" diff --git a/src/display.cpp b/src/display.cpp index 89df3af1..a8d262e5 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -181,16 +181,19 @@ void Display::SongsInColumns(const MPD::Song &s, void *, Menu *menu) std::string tag = (s.*get)(); if (it->right_alignment) { - int x, y; - menu->GetXY(x, y); - std::basic_string wtag = TO_WSTRING(tag.empty() ? Config.empty_tag : tag).substr(0, width-!!x); - *menu << XY(x+width-Window::Length(wtag)-!!x, y) << wtag; + if (!tag.empty() || it->display_empty_tag) + { + int x, y; + menu->GetXY(x, y); + std::basic_string wtag = TO_WSTRING(tag.empty() ? Config.empty_tag : tag).substr(0, width-!!x); + *menu << XY(x+width-Window::Length(wtag)-!!x, y) << wtag; + } } else { if (!tag.empty()) *menu << tag; - else + else if (it->display_empty_tag) *menu << Config.empty_tag; } where += width; diff --git a/src/settings.cpp b/src/settings.cpp index 07639422..eef6ff76 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -881,7 +881,18 @@ void ReadConfiguration(ncmpcpp_config &conf) std::string tag_type = GetLineValue(conf.song_list_columns_format, '{', '}', 1); col.type = tag_type.at(0); col.fixed = *width.rbegin() == 'f'; - col.right_alignment = tag_type.length() > 1 && tag_type[1] == 'r'; + for (std::string::const_iterator it = ++tag_type.begin(); it != tag_type.end(); ++it) + { + switch (*it) + { + case 'r': + col.right_alignment = 1; + break; + case 'E': + col.display_empty_tag = 0; + break; + } + } col.width = StrToInt(width); conf.columns.push_back(col); } diff --git a/src/settings.h b/src/settings.h index 3a30469c..1094568e 100644 --- a/src/settings.h +++ b/src/settings.h @@ -39,11 +39,14 @@ const int null_key = std::numeric_limits::max(); struct Column { + Column() : right_alignment(0), display_empty_tag(1) { } + unsigned width; Color color; char type; bool fixed; bool right_alignment; + bool display_empty_tag; }; struct ncmpcpp_keys