diff --git a/examples/ncmpcpp_keys b/examples/ncmpcpp_keys new file mode 100644 index 00000000..75f53997 --- /dev/null +++ b/examples/ncmpcpp_keys @@ -0,0 +1,105 @@ +##################################################### +## this is example key configuration file, copy it ## +## to ~/.ncmpcpp_keys and set up your preferences ## +##################################################### +## +## Tips: +## - it's possible to bind maximum two keys to a command +## - keys can be defined with a character or a decimal value +## - a command can be disabled by binding it to 0 +## +## Note: First bind of volume_up/down +## will be used to switch between columns +## on media library screen. +## +# +#key_up = 259 'k' +# +#key_down = 258 'j' +# +#key_page_up = 339 +# +#key_page_down = 338 +# +#key_home = 262 +# +#key_end = 360 +# +#key_space = 32 +# +#key_enter = 10 +# +#key_delete = 330 'd' +# +#key_volume_up = 261 '+' +# +#key_volume_down = 260 '-' +# +#key_screen_switcher = 9 +# +#key_help = '1' 265 +# +#key_playlist = '2' 266 +# +#key_browser = '3' 267 +# +#key_search_engine = '4' 268 +# +#key_media_library = '5' 269 +# +#key_stop = 's' +# +#key_pause = 'P' +# +#key_next = '>' +# +#key_prev = '<' +# +#key_seek_forward = 'f' +# +#key_seek_backward = 'b' +# +#key_toggle_repeat = 'r' +# +#key_toggle_random = 'z' +# +#key_shuffle = 'Z' +# +#key_toggle_crossfade = 'x' +# +#key_set_crossfade = 'X' +# +#key_update_db = 'u' +# +#key_find_forward = '/' +# +#key_find_backward = '?' +# +#key_next_found_position = '.' +# +#key_prev_found_position = ',' +# +#key_edit_tags = 'e' +# +#key_go_to_position = 'g' +# +#key_lyrics = 'l' +# +#key_clear = 'c' +# +#key_crop = 'C' +# +#key_move_song_up = 'm' +# +#key_move_song_down = 'n' +# +#key_save_playlist = 'S' +# +#key_go_to_now_playing = 'o' +# +#key_toggle_auto_center = 'U' +# +#key_go_to_parent_dir = 263 127 +# +#key_quit = 'q' 'Q' +# diff --git a/examples/ncmpcpprc b/examples/ncmpcpprc index f8cadee2..f8ab7d44 100644 --- a/examples/ncmpcpprc +++ b/examples/ncmpcpprc @@ -1,7 +1,7 @@ -########################################################### -## this is example configuration file, copy it to your ## -## home folder as .ncmpcpprc and set up your preferences ## -########################################################### +################################################# +## this is example configuration file, copy it ## +## to ~/.ncmpcpprc and set up your preferences ## +################################################# # ##### connection settings ##### # diff --git a/src/helpers.cpp b/src/helpers.cpp index 98576894..3179a859 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -61,6 +61,64 @@ extern string UNKNOWN_ARTIST; extern string UNKNOWN_TITLE; extern string UNKNOWN_ALBUM; +string DisplayKeys(int *key, int size) +{ + bool backspace = 1; + string result = "\t"; + for (int i = 0; i < size; i++) + { + if (key[i] == null_key); + else if (key[i] == 259) + result += "Up"; + else if (key[i] == 258) + result += "Down"; + else if (key[i] == 339) + result += "Page Up"; + else if (key[i] == 338) + result += "Page Down"; + else if (key[i] == 262) + result += "Home"; + else if (key[i] == 360) + result += "End"; + else if (key[i] == 32) + result += "Space"; + else if (key[i] == 10) + result += "Enter"; + else if (key[i] == 330) + result += "Delete"; + else if (key[i] == 261) + result += "Right"; + else if (key[i] == 260) + result += "Left"; + else if (key[i] == 9) + result += "Tab"; + else if (key[i] >= 1 && key[i] <= 26) + { + result += "Ctrl-"; + result += key[i]+64; + } + else if (key[i] >= 265 && key[i] <= 276) + { + result += "F"; + result += key[i]-216; + } + else if ((key[i] == 263 || key[i] == 127) && !backspace); + else if ((key[i] == 263 || key[i] == 127) && backspace) + { + result += "Backspace"; + backspace = 0; + } + else + result += key[i]; + result += " "; + } + if (result.length() > 12) + result = result.substr(0, 12); + for (int i = result.length(); i <= 12; result += " ", i++); + result += ": "; + return result; +} + bool Keypressed(int in, const int *key) { return in == key[0] || in == key[1]; diff --git a/src/helpers.h b/src/helpers.h index f5569e4a..f0c011a5 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -30,6 +30,7 @@ extern ncmpcpp_config Config; +string DisplayKeys(int *, int = 2); bool Keypressed(int, const int *); bool SortSongsByTrack(Song *, Song *); bool CaseInsensitiveComparison(string, string); diff --git a/src/mpdpp.cpp b/src/mpdpp.cpp index dfc0cb4b..e8fd60a7 100644 --- a/src/mpdpp.cpp +++ b/src/mpdpp.cpp @@ -22,7 +22,7 @@ const string playlist_max_message = "playlist is at the max size"; -MPDConnection::MPDConnection() : isConnected(0), MPD_HOST("localhost"), MPD_PORT(6600), MPD_TIMEOUT(30), itsUpdater(0), itsErrorHandler(0), itsMaxPlaylistLength(-1) +MPDConnection::MPDConnection() : isConnected(0), itsMaxPlaylistLength(-1), MPD_HOST("localhost"), MPD_PORT(6600), MPD_TIMEOUT(15), itsUpdater(0), itsErrorHandler(0) { itsConnection = 0; itsCurrentStats = 0; @@ -61,7 +61,7 @@ bool MPDConnection::Connect() return true; } -bool MPDConnection::Connected() +bool MPDConnection::Connected() const { return isConnected; } @@ -88,7 +88,7 @@ void MPDConnection::Disconnect() ClearQueue(); } -void MPDConnection::SendPassword() +void MPDConnection::SendPassword() const { mpd_sendPasswordCommand(itsConnection, MPD_PASSWORD.c_str()); mpd_finishCommand(itsConnection); @@ -475,7 +475,7 @@ bool MPDConnection::CommitQueue() return retval; } -void MPDConnection::DeletePlaylist(const string &name) +void MPDConnection::DeletePlaylist(const string &name) const { if (isConnected) { @@ -484,7 +484,7 @@ void MPDConnection::DeletePlaylist(const string &name) } } -bool MPDConnection::SavePlaylist(const string &name) +bool MPDConnection::SavePlaylist(const string &name) const { if (isConnected) { diff --git a/src/mpdpp.h b/src/mpdpp.h index b110fc3a..b68831ea 100644 --- a/src/mpdpp.h +++ b/src/mpdpp.h @@ -76,14 +76,14 @@ class MPDConnection ~MPDConnection(); bool Connect(); - bool Connected(); + bool Connected() const; void Disconnect(); void SetHostname(string hostname) { MPD_HOST = hostname; } void SetPort(int port) { MPD_PORT = port; } void SetTimeout(int timeout) { MPD_TIMEOUT = timeout; } void SetPassword(string password) { MPD_PASSWORD = password; } - void SendPassword(); + void SendPassword() const; void SetStatusUpdater(StatusUpdater, void *); void SetErrorHandler(ErrorHandler, void *); @@ -112,7 +112,7 @@ class MPDConnection long long GetOldPlaylistID() const { return isConnected && itsOldStatus ? itsOldStatus->playlist : -1; } int GetElapsedTime() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->elapsedTime : -1; } - unsigned int GetMaxPlaylistLength() { return itsMaxPlaylistLength; } + unsigned int GetMaxPlaylistLength() const { return itsMaxPlaylistLength; } int GetPlaylistLength() const { return isConnected && itsCurrentStatus ? itsCurrentStatus->playlistLength : 0; } void GetPlaylistChanges(long long, SongList &) const; @@ -136,8 +136,8 @@ class MPDConnection void QueueDeleteSongId(int); bool CommitQueue(); - void DeletePlaylist(const string &); - bool SavePlaylist(const string &); + void DeletePlaylist(const string &) const; + bool SavePlaylist(const string &) const; void StartSearch(bool) const; void AddSearch(mpd_TagItems, const string &) const; @@ -151,11 +151,13 @@ class MPDConnection private: int CheckForErrors(); void ClearQueue(); - string itsLastErrorMessage; mpd_Connection *itsConnection; bool isConnected; + string itsLastErrorMessage; + unsigned int itsMaxPlaylistLength; + string MPD_HOST; int MPD_PORT; int MPD_TIMEOUT; @@ -172,7 +174,6 @@ class MPDConnection void *itsErrorHandlerUserdata; std::vector itsQueue; - unsigned int itsMaxPlaylistLength; }; #endif diff --git a/src/ncmpcpp.cpp b/src/ncmpcpp.cpp index 766afec3..79bb7c4d 100644 --- a/src/ncmpcpp.cpp +++ b/src/ncmpcpp.cpp @@ -52,10 +52,10 @@ #ifdef HAVE_TAGLIB_H const string tag_screen = "Tag editor"; - const string tag_screen_keydesc = "\te : Edit song's tags\n"; + const string tag_screen_keydesc = "Edit song's tags\n"; #else const string tag_screen = "Tag info"; - const string tag_screen_keydesc = "\te : Show song's tags\n"; + const string tag_screen_keydesc = "Show song's tags\n"; #endif ncmpcpp_config Config; @@ -149,6 +149,7 @@ int main(int argc, char *argv[]) DefaultConfiguration(Config); DefaultKeys(Key); ReadConfiguration(Config); + ReadKeys(Key); DefineEmptyTags(); Mpd = new MPDConnection; @@ -207,80 +208,80 @@ int main(int argc, char *argv[]) sLyrics = new Scrollpad(sHelp->EmptyClone()); sHelp->Add(" [b]Keys - Movement\n -----------------------------------------[/b]\n"); - sHelp->Add("\tUp k : Move Cursor up\n"); - sHelp->Add("\tDown j : Move Cursor down\n"); - sHelp->Add("\tPage up : Page up\n"); - sHelp->Add("\tPage down : Page down\n"); - sHelp->Add("\tHome : Home\n"); - sHelp->Add("\tEnd : End\n\n"); + sHelp->Add(DisplayKeys(Key.Up) + "Move Cursor up\n"); + sHelp->Add(DisplayKeys(Key.Down) + "Move Cursor down\n"); + sHelp->Add(DisplayKeys(Key.PageUp) + "Page up\n"); + sHelp->Add(DisplayKeys(Key.PageDown) + "Page down\n"); + sHelp->Add(DisplayKeys(Key.Home) + "Home\n"); + sHelp->Add(DisplayKeys(Key.End) + "End\n\n"); - sHelp->Add("\tTab : Switch between playlist and browser\n"); - sHelp->Add("\t1 : Help screen\n"); - sHelp->Add("\t2 : Playlist screen\n"); - sHelp->Add("\t3 : Browse screen\n"); - sHelp->Add("\t4 : Search engine\n"); - sHelp->Add("\t5 : Media library\n\n\n"); + sHelp->Add(DisplayKeys(Key.ScreenSwitcher) + "Switch between playlist and browser\n"); + sHelp->Add(DisplayKeys(Key.Help) + "Help screen\n"); + sHelp->Add(DisplayKeys(Key.Playlist) + "Playlist screen\n"); + sHelp->Add(DisplayKeys(Key.Browser) + "Browse screen\n"); + sHelp->Add(DisplayKeys(Key.SearchEngine) + "Search engine\n"); + sHelp->Add(DisplayKeys(Key.MediaLibrary) + "Media library\n\n\n"); sHelp->Add(" [b]Keys - Global\n -----------------------------------------[/b]\n"); - sHelp->Add("\ts : Stop\n"); - sHelp->Add("\tP : Pause\n"); - sHelp->Add("\t> : Next track\n"); - sHelp->Add("\t< : Previous track\n"); - sHelp->Add("\tf : Seek forward\n"); - sHelp->Add("\tb : Seek backward\n"); - sHelp->Add("\t- Left : Decrease volume\n"); - sHelp->Add("\t+ Right : Increase volume\n\n"); + sHelp->Add(DisplayKeys(Key.Stop) + "Stop\n"); + sHelp->Add(DisplayKeys(Key.Pause) + "Pause\n"); + sHelp->Add(DisplayKeys(Key.Next) + "Next track\n"); + sHelp->Add(DisplayKeys(Key.Prev) + "Previous track\n"); + sHelp->Add(DisplayKeys(Key.SeekForward) + "Seek forward\n"); + sHelp->Add(DisplayKeys(Key.SeekBackward) + "Seek backward\n"); + sHelp->Add(DisplayKeys(Key.VolumeDown) + "Decrease volume\n"); + sHelp->Add(DisplayKeys(Key.VolumeUp) + "Increase volume\n\n"); - sHelp->Add("\tr : Toggle repeat mode\n"); - sHelp->Add("\tz : Toggle random mode\n"); - sHelp->Add("\tZ : Shuffle playlist\n"); - sHelp->Add("\tx : Toggle crossfade mode\n"); - sHelp->Add("\tX : Set crossfade\n"); - sHelp->Add("\tu : Start a music database update\n\n"); + sHelp->Add(DisplayKeys(Key.ToggleRepeat) + "Toggle repeat mode\n"); + sHelp->Add(DisplayKeys(Key.ToggleRandom) + "Toggle random mode\n"); + sHelp->Add(DisplayKeys(Key.Shuffle) + "Shuffle playlist\n"); + sHelp->Add(DisplayKeys(Key.ToggleCrossfade) + "Toggle crossfade mode\n"); + sHelp->Add(DisplayKeys(Key.SetCrossfade) + "Set crossfade\n"); + sHelp->Add(DisplayKeys(Key.UpdateDB) + "Start a music database update\n\n"); - sHelp->Add("\t/ : Forward find\n"); - sHelp->Add("\t? : Backward find\n"); - sHelp->Add("\t, : Go to previous found position\n"); - sHelp->Add("\t. : Go to next found position\n"); - sHelp->Add(tag_screen_keydesc); - sHelp->Add("\tg : Go to chosen position in current song\n"); - sHelp->Add("\tl : Show/hide song's lyrics\n\n"); + sHelp->Add(DisplayKeys(Key.FindForward) + "Forward find\n"); + sHelp->Add(DisplayKeys(Key.FindBackward) + "Backward find\n"); + sHelp->Add(DisplayKeys(Key.PrevFoundPosition) + "Go to previous found position\n"); + sHelp->Add(DisplayKeys(Key.NextFoundPosition) + "Go to next found position\n"); + sHelp->Add(DisplayKeys(Key.EditTags) + tag_screen_keydesc); + sHelp->Add(DisplayKeys(Key.GoToPosition) + "Go to chosen position in current song\n"); + sHelp->Add(DisplayKeys(Key.Lyrics) + "Show/hide song's lyrics\n\n"); - sHelp->Add("\tQ q : Quit\n\n\n"); + sHelp->Add(DisplayKeys(Key.Quit) + "Quit\n\n\n"); sHelp->Add(" [b]Keys - Playlist screen\n -----------------------------------------[/b]\n"); - sHelp->Add("\tEnter : Play\n"); - sHelp->Add("\tDelete d : Delete song from playlist\n"); - sHelp->Add("\tc : Clear whole playlist\n"); - sHelp->Add("\tC : Clear playlist but hold currently playing song\n"); - sHelp->Add("\tm : Move song up\n"); - sHelp->Add("\tn : Move song down\n"); - sHelp->Add("\tS : Save playlist\n"); - sHelp->Add("\to : Go to currently playing position\n"); - sHelp->Add("\tU : Toggle auto center mode\n\n\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Play\n"); + sHelp->Add(DisplayKeys(Key.Delete) + "Delete song from playlist\n"); + sHelp->Add(DisplayKeys(Key.Clear) + "Clear whole playlist\n"); + sHelp->Add(DisplayKeys(Key.Crop) + "Clear playlist but hold currently playing song\n"); + sHelp->Add(DisplayKeys(Key.MvSongUp) + "Move song up\n"); + sHelp->Add(DisplayKeys(Key.MvSongDown) + "Move song down\n"); + sHelp->Add(DisplayKeys(Key.SavePlaylist) + "Save playlist\n"); + sHelp->Add(DisplayKeys(Key.GoToNowPlaying) + "Go to currently playing position\n"); + sHelp->Add(DisplayKeys(Key.ToggleAutoCenter) + "Toggle auto center mode\n\n\n"); sHelp->Add(" [b]Keys - Browse screen\n -----------------------------------------[/b]\n"); - sHelp->Add("\tEnter : Enter directory/Add item to playlist and play\n"); - sHelp->Add("\tSpace : Add item to playlist\n"); - sHelp->Add("\tBackspace : Go to parent directory\n"); - sHelp->Add("\tDelete d : Delete playlist\n\n\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Enter directory/Add item to playlist and play\n"); + sHelp->Add(DisplayKeys(Key.Space) + "Add item to playlist\n"); + sHelp->Add(DisplayKeys(Key.GoToParentDir) + "Go to parent directory\n"); + sHelp->Add(DisplayKeys(Key.Delete) + "Delete playlist\n\n\n"); sHelp->Add(" [b]Keys - Search engine\n -----------------------------------------[/b]\n"); - sHelp->Add("\tEnter : Change option/Add to playlist and play song\n"); - sHelp->Add("\tSpace : Add song to playlist\n\n\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Change option/Add to playlist and play song\n"); + sHelp->Add(DisplayKeys(Key.Space) + "Add song to playlist\n\n\n"); sHelp->Add(" [b]Keys - Media library\n -----------------------------------------[/b]\n"); - sHelp->Add("\tLeft : Previous column\n"); - sHelp->Add("\tRight : Next column\n"); - sHelp->Add("\tEnter : Add to playlist and play song/album/artist's songs\n"); - sHelp->Add("\tSpace : Add to playlist song/album/artist's songs\n\n\n"); + sHelp->Add(DisplayKeys(&Key.VolumeDown[0], 1) + "Previous column\n"); + sHelp->Add(DisplayKeys(&Key.VolumeUp[0], 1) + "Next column\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Add to playlist and play song/album/artist's songs\n"); + sHelp->Add(DisplayKeys(Key.Space) + "Add to playlist song/album/artist's songs\n\n\n"); # ifdef HAVE_TAGLIB_H sHelp->Add(" [b]Keys - Tag editor\n -----------------------------------------[/b]\n"); - sHelp->Add("\tEnter : Change option\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Change option\n"); # else sHelp->Add(" [b]Keys - Tag info\n -----------------------------------------[/b]\n"); - sHelp->Add("\tEnter : Return\n"); + sHelp->Add(DisplayKeys(Key.Enter) + "Return\n"); # endif if (Config.header_visibility) @@ -1245,7 +1246,7 @@ int main(int argc, char *argv[]) if (playlist_name.find("/") != string::npos) { ShowMessage("Playlist name cannot contain slashes!"); - break; + continue; } if (!playlist_name.empty()) { @@ -1487,7 +1488,7 @@ int main(int argc, char *argv[]) UNLOCK_STATUSBAR; timer = time(NULL); if (findme.empty()) - break; + continue; transform(findme.begin(), findme.end(), findme.begin(), tolower); if (Keypressed(input, Key.FindForward)) // forward diff --git a/src/ncmpcpp.h b/src/ncmpcpp.h index e7b2c41a..35305c24 100644 --- a/src/ncmpcpp.h +++ b/src/ncmpcpp.h @@ -35,10 +35,6 @@ const bool UNICODE = 0; # define NCMPCPP_TO_WSTRING(x) (x) #endif -#define KEY_TAB 9 -#define ENTER 10 -#define KEY_SPACE 32 - #ifdef HAVE_TAGLIB_H # include "fileref.h" # include "tag.h" diff --git a/src/settings.cpp b/src/settings.cpp index 31f47cb0..d126e23a 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -21,13 +21,12 @@ #include "settings.h" const string config_file = home_folder + "/.ncmpcpprc"; +const string keys_config_file = home_folder + "/.ncmpcpp_keys"; using std::ifstream; void DefaultKeys(ncmpcpp_keys &keys) { - const int null_key = 0x0fffffff; - keys.Up[0] = KEY_UP; keys.Down[0] = KEY_DOWN; keys.PageUp[0] = KEY_PPAGE; @@ -150,6 +149,29 @@ void DefaultConfiguration(ncmpcpp_config &conf) conf.message_delay_time = 4; } +void GetKeys(string line, int *key) +{ + int i = line.find("=")+1; + line = line.substr(i, line.length()-i); + i = 0; + if (line[i] == ' ') + while (line[++i] == ' '); + line = line.substr(i, line.length()-i); + i = line.find(" "); + string one; + string two; + if (i != string::npos) + { + one = line.substr(0, i); + i++; + two = line.substr(i, line.length()-i); + } + else + one = line; + key[0] = !one.empty() && one[0] == '\'' ? one[1] : (atoi(one.c_str()) == 0 ? null_key : atoi(one.c_str())); + key[1] = !two.empty() && two[0] == '\'' ? two[1] : (atoi(two.c_str()) == 0 ? null_key : atoi(two.c_str())); +} + string GetConfigLineValue(const string &line) { int i = 0; @@ -176,19 +198,19 @@ string IntoStr(COLOR color) if (color == clBlack) result = "black"; - if (color == clRed) + else if (color == clRed) result = "red"; - if (color == clGreen) + else if (color == clGreen) result = "green"; - if (color == clYellow) + else if (color == clYellow) result = "yellow"; - if (color == clBlue) + else if (color == clBlue) result = "blue"; - if (color == clMagenta) + else if (color == clMagenta) result = "magenta"; - if (color == clCyan) + else if (color == clCyan) result = "cyan"; - if (color == clWhite) + else if (color == clWhite) result = "white"; return result; @@ -200,24 +222,135 @@ COLOR IntoColor(const string &color) if (color == "black") result = clBlack; - if (color == "red") + else if (color == "red") result = clRed; - if (color == "green") + else if (color == "green") result = clGreen; - if (color == "yellow") + else if (color == "yellow") result = clYellow; - if (color == "blue") + else if (color == "blue") result = clBlue; - if (color == "magenta") + else if (color == "magenta") result = clMagenta; - if (color == "cyan") + else if (color == "cyan") result = clCyan; - if (color == "white") + else if (color == "white") result = clWhite; return result; } +void ReadKeys(ncmpcpp_keys &keys) +{ + ifstream f(keys_config_file.c_str()); + + string key_line; + vector keys_sets; + + if (f.is_open()) + { + while (!f.eof()) + { + getline(f, key_line); + if (!key_line.empty() && key_line[0] != '#') + keys_sets.push_back(key_line); + } + for (vector::const_iterator it = keys_sets.begin(); it != keys_sets.end(); it++) + { + if (it->find("key_up ") != string::npos) + GetKeys(*it, keys.Up); + else if (it->find("key_down ") != string::npos) + GetKeys(*it, keys.Down); + else if (it->find("key_page_up ") != string::npos) + GetKeys(*it, keys.PageUp); + else if (it->find("key_page_down ") != string::npos) + GetKeys(*it, keys.PageDown); + else if (it->find("key_home ") != string::npos) + GetKeys(*it, keys.Home); + else if (it->find("key_end ") != string::npos) + GetKeys(*it, keys.End); + else if (it->find("key_space ") != string::npos) + GetKeys(*it, keys.Space); + else if (it->find("key_enter ") != string::npos) + GetKeys(*it, keys.Enter); + else if (it->find("key_delete ") != string::npos) + GetKeys(*it, keys.Delete); + else if (it->find("key_volume_up ") != string::npos) + GetKeys(*it, keys.VolumeUp); + else if (it->find("key_volume_down ") != string::npos) + GetKeys(*it, keys.VolumeDown); + else if (it->find("key_screen_switcher ") != string::npos) + GetKeys(*it, keys.ScreenSwitcher); + else if (it->find("key_help ") != string::npos) + GetKeys(*it, keys.Help); + else if (it->find("key_playlist ") != string::npos) + GetKeys(*it, keys.Playlist); + else if (it->find("key_browser ") != string::npos) + GetKeys(*it, keys.Browser); + else if (it->find("key_search_engine ") != string::npos) + GetKeys(*it, keys.SearchEngine); + else if (it->find("key_media_library ") != string::npos) + GetKeys(*it, keys.MediaLibrary); + else if (it->find("key_stop ") != string::npos) + GetKeys(*it, keys.Stop); + else if (it->find("key_pause ") != string::npos) + GetKeys(*it, keys.Pause); + else if (it->find("key_next ") != string::npos) + GetKeys(*it, keys.Next); + else if (it->find("key_prev ") != string::npos) + GetKeys(*it, keys.Prev); + else if (it->find("key_seek_forward ") != string::npos) + GetKeys(*it, keys.SeekForward); + else if (it->find("key_seek_backward ") != string::npos) + GetKeys(*it, keys.SeekBackward); + else if (it->find("key_toggle_repeat ") != string::npos) + GetKeys(*it, keys.ToggleRepeat); + else if (it->find("key_toggle_random ") != string::npos) + GetKeys(*it, keys.ToggleRandom); + else if (it->find("key_shuffle ") != string::npos) + GetKeys(*it, keys.Shuffle); + else if (it->find("key_toggle_crossfade ") != string::npos) + GetKeys(*it, keys.ToggleCrossfade); + else if (it->find("key_set_crossfade ") != string::npos) + GetKeys(*it, keys.SetCrossfade); + else if (it->find("key_update_db ") != string::npos) + GetKeys(*it, keys.UpdateDB); + else if (it->find("key_find_forward ") != string::npos) + GetKeys(*it, keys.FindForward); + else if (it->find("key_find_backward ") != string::npos) + GetKeys(*it, keys.FindBackward); + else if (it->find("key_next_found_position ") != string::npos) + GetKeys(*it, keys.NextFoundPosition); + else if (it->find("key_prev_found_position ") != string::npos) + GetKeys(*it, keys.PrevFoundPosition); + else if (it->find("key_edit_tags ") != string::npos) + GetKeys(*it, keys.EditTags); + else if (it->find("key_go_to_position ") != string::npos) + GetKeys(*it, keys.GoToPosition); + else if (it->find("key_lyrics ") != string::npos) + GetKeys(*it, keys.Lyrics); + else if (it->find("key_clear ") != string::npos) + GetKeys(*it, keys.Clear); + else if (it->find("key_crop ") != string::npos) + GetKeys(*it, keys.Crop); + else if (it->find("key_move_song_up ") != string::npos) + GetKeys(*it, keys.MvSongUp); + else if (it->find("key_move_song_down ") != string::npos) + GetKeys(*it, keys.MvSongDown); + else if (it->find("key_save_playlist ") != string::npos) + GetKeys(*it, keys.SavePlaylist); + else if (it->find("key_go_to_now_playing ") != string::npos) + GetKeys(*it, keys.GoToNowPlaying); + else if (it->find("key_toggle_auto_center ") != string::npos) + GetKeys(*it, keys.ToggleAutoCenter); + else if (it->find("key_go_to_parent_dir ") != string::npos) + GetKeys(*it, keys.GoToParentDir); + else if (it->find("key_quit ") != string::npos) + GetKeys(*it, keys.Quit); + } + } +} + void ReadConfiguration(ncmpcpp_config &conf) { ifstream f(config_file.c_str()); diff --git a/src/settings.h b/src/settings.h index de6ab28d..b003cd31 100644 --- a/src/settings.h +++ b/src/settings.h @@ -25,6 +25,8 @@ #include "ncmpcpp.h" +const int null_key = 0x0fffffff; + struct ncmpcpp_keys { int Up[2]; @@ -108,9 +110,11 @@ struct ncmpcpp_config void DefaultKeys(ncmpcpp_keys &); void DefaultConfiguration(ncmpcpp_config &); +void GetKeys(string, int *); string GetLineValue(const string &); string IntoStr(COLOR); COLOR IntoColor(const string &); +void ReadKeys(ncmpcpp_keys &); void ReadConfiguration(ncmpcpp_config &); #endif diff --git a/src/status_checker.cpp b/src/status_checker.cpp index 7a9dd4d5..9fc96484 100644 --- a/src/status_checker.cpp +++ b/src/status_checker.cpp @@ -293,6 +293,11 @@ void NcmpcppStatusChanged(MPDConnection *Mpd, MPDStatusChanges changed, void *da PlayerState mpd_state = Mpd->GetState(); switch (mpd_state) { + case psUnknown: + { + player_state = "[unknown]"; + break; + } case psPlay: { player_state = "Playing: ";