From e323025a828ea8942aa6f75797e43a9b7692368f Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Wed, 23 Feb 2011 20:16:23 +0100 Subject: [PATCH] remove $? formatting from song format while converting to string this fixes wrong results while searching for phrase that contains dollar or one of dollar formatting. --- src/browser.cpp | 2 +- src/playlist.cpp | 2 +- src/playlist_editor.cpp | 2 +- src/search_engine.cpp | 2 +- src/settings.cpp | 15 +++++++++++++++ src/settings.h | 1 + 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/browser.cpp b/src/browser.cpp index 6af47f53..991a073c 100644 --- a/src/browser.cpp +++ b/src/browser.cpp @@ -581,7 +581,7 @@ std::string Browser::ItemToString(const MPD::Item &item, void *) case MPD::itSong: { if (!Config.columns_in_browser) - return item.song->toString(Config.song_list_format); + return item.song->toString(Config.song_list_format_dollar_free); else return Playlist::SongInColumnsToString(*item.song, 0); } diff --git a/src/playlist.cpp b/src/playlist.cpp index 114f40b6..09bcca69 100644 --- a/src/playlist.cpp +++ b/src/playlist.cpp @@ -58,7 +58,7 @@ void Playlist::Init() Items->SetItemDisplayer(Config.columns_in_playlist ? Display::SongsInColumns : Display::Songs); Items->SetItemDisplayerUserData(&sf); Items->SetGetStringFunction(Config.columns_in_playlist ? SongInColumnsToString : SongToString); - Items->SetGetStringFunctionUserData(&Config.song_list_format); + Items->SetGetStringFunctionUserData(&Config.song_list_format_dollar_free); if (!SortDialog) { diff --git a/src/playlist_editor.cpp b/src/playlist_editor.cpp index cb24310f..05af1f4d 100644 --- a/src/playlist_editor.cpp +++ b/src/playlist_editor.cpp @@ -62,7 +62,7 @@ void PlaylistEditor::Init() Content->SetItemDisplayer(Display::Songs); Content->SetItemDisplayerUserData(&sf); Content->SetGetStringFunction(Playlist::SongToString); - Content->SetGetStringFunctionUserData(&Config.song_list_format); + Content->SetGetStringFunctionUserData(&Config.song_list_format_dollar_free); w = Playlists; isInitialized = 1; diff --git a/src/search_engine.cpp b/src/search_engine.cpp index 18dad988..426d3d4e 100644 --- a/src/search_engine.cpp +++ b/src/search_engine.cpp @@ -603,7 +603,7 @@ void SearchEngine::Search() std::string SearchEngine::SearchEngineOptionToString(const std::pair &pair, void *) { if (!Config.columns_in_search_engine) - return pair.second->toString(Config.song_list_format); + return pair.second->toString(Config.song_list_format_dollar_free); else return Playlist::SongInColumnsToString(*pair.second, 0); } diff --git a/src/settings.cpp b/src/settings.cpp index adf33244..5cd09024 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -123,6 +123,19 @@ namespace return 0; } } + + std::string RemoveDollarFormatting(const std::string &s) + { + std::string result; + for (size_t i = 0; i < s.size(); ++i) + { + if (s[i] != '$') + result += s[i]; + else + ++i; + } + return result; + } } void CreateConfigDir() @@ -335,6 +348,7 @@ void NcmpcppConfig::SetDefaults() empty_tag = ""; song_list_columns_format = "(7f)[green]{l} (25)[cyan]{a} (40)[]{t|f} (30)[red]{b}"; song_list_format = "{{%a - }{%t}|{$8%f$9}$R{$3(%l)$9}}"; + song_list_format_dollar_free = RemoveDollarFormatting(song_list_format); song_status_format = "{{{%a{ \"%b\"{ (%y)}} - }{%t}}|{%f}}"; song_status_format_no_colors = song_status_format; song_window_title_format = "{{%a - }{%t}|{%f}}"; @@ -698,6 +712,7 @@ void NcmpcppConfig::Read() song_list_format = '{'; song_list_format += v; song_list_format += '}'; + song_list_format_dollar_free = RemoveDollarFormatting(song_list_format); } } else if (cl.find("song_columns_list_format") != std::string::npos) diff --git a/src/settings.h b/src/settings.h index c5fe8f24..698efa0e 100644 --- a/src/settings.h +++ b/src/settings.h @@ -158,6 +158,7 @@ struct NcmpcppConfig std::string empty_tag; std::string song_list_columns_format; std::string song_list_format; + std::string song_list_format_dollar_free; std::string song_status_format; std::string song_status_format_no_colors; std::string song_window_title_format;