Giter Club home page Giter Club logo

ncmpc's People

Contributors

70h avatar andy753421 avatar astroanax avatar avuton avatar bittin avatar carmina16 avatar comradekingu avatar dependabot[bot] avatar drzissou avatar ferdnyc avatar jefromi avatar jose1711 avatar kodest avatar mattportas avatar max-arnold avatar maxkellermann avatar mbouzada avatar mxjeff avatar neheb avatar neuschaefer avatar okovalenko avatar paradox-ptr avatar parkmino avatar patrickhallen avatar rbignon avatar santossi avatar tokkee avatar xlic avatar xlucn avatar yarons avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ncmpc's Issues

ncmpc does not look for config file at $XDG_CONFIG_HOME directory.

mpd already uses the directory - same order of directories to look for config file could be used for ncmpc as well. From man mpd.conf:

mpd.conf is the configuration file for mpd(1).  If not specified on the command
line, MPD first searches for it at $XDG_CONFIG_HOME/mpd/mpd.conf then at
~/.mpdconf then at ~/.mpd/mpd.conf and then in /etc/mpd.conf.

Ncmpc sending empty queries do mopidy

When browsing my library (Artist List), the very first one is <empty>, so when I open that view, the user interface get stuck and I get the constant output in the status bar saying that the connection with the daemon has timed out.

I'm using mopidy as a daemon, and when this even happens, it spikes to 100% cpu, and get stuck there until I restart it or close ncmpc. Here is an interesting entry in the mopidy log

WARNING  A client or frontend made a library search with an empty query. This is strongly discouraged. Please check what sent this query and file a bug.

About my setup:

System: debian 9.2 kernel 4.9.0-6-amd64
ncmpcpp: 0.7.4

optional screens compiled-in:
 - tag editor
 - tiny tag editor
 - artist info
 - outputs
 - visualizer
 - clock

Let me know if you need any additional information

Enqueueing a song from search list returns "No such song" in 0.30 after you clear playlist

  • Make playlist, start mpd anew
  • Clear playlist, fill it back with the same songs
  • Search for something - search list will show valid matches
  • Try to enqueue and play any of them - ncmpc returns "No such song" error
    0.30 is affected. 0.27, 0.28 and 0.29 - are not.

I've taken a look at what's going on with gdb:

id = c->playlist.FindUri(*song);

in enqueue_and_play() is set as 3 on 0.30, while it's 4625 on 0.29 for a playlist with 4415 songs for the same song on the same mpd instance.
So, ncmpc-0.30 gets error 50 = MPD_SERVER_ERROR_NO_EXIST (song URI is valid).
If I set id=4625 with gdb before a call to mpd_run_play_id(), then it plays fine on 0.30.

I don't know how id's are generated internally, and going deeper will require me getting familiar with libmpdclient/mpd codebase. And that's going to take too much time, so I've given up for now.

ncmpc-0.31 segfaults when pressing `l` on empty playlist

The new release ncmpc-0.31 segfaults when pressing l (view the selected and the currently playing song) on an empty playlist; its last words are:

ncmpc: ../src/Queue.cxx:69: MpdQueue::size_type MpdQueue::FindByReference(const mpd_song&) const: Assertion `i < size()' failed.

Here is the backtrace:

#0  0x00007ffff7e1bd7f in raise () from /usr/lib/libc.so.6
#1  0x00007ffff7e06672 in abort () from /usr/lib/libc.so.6
#2  0x00007ffff7e06548 in __assert_fail_base.cold.0 () from /usr/lib/libc.so.6
#3  0x00007ffff7e14396 in __assert_fail () from /usr/lib/libc.so.6
#4  0x000055555557945d in QueuePage::OnCommand(mpdclient&, Command) ()
#5  0x000055555557ebf1 in ScreenManager::OnCommand(mpdclient&, Command) ()
#6  0x000055555557f45d in keyboard_event(_GIOChannel*, GIOCondition, void*) ()
#7  0x00007ffff7d2d271 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#8  0x00007ffff7d2ef89 in ?? () from /usr/lib/libglib-2.0.so.0
#9  0x00007ffff7d2ff62 in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#10 0x000055555556004f in main ()

The previous ncmpc-0.30 did not have this issue. Cheers.

Unable to build (TagListPage.cxx)

I'm unable to build ncmpc. What gives?

Setup

Software Version
 ncmpc 93dcece
Meson 0.49.0
 Ninja 1.9.0
 Boost 1.70.0

Fail

ninja: Entering directory `output'
[63/71] Compiling C++ object 'ncmpc@exe/src_TagListPage.cxx.o'.
FAILED: ncmpc@exe/src_TagListPage.cxx.o 
ccache c++ -Incmpc@exe -I. -I.. -I../src -I../ -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wnon-virtual-dtor -std=c++14 -g -D_GNU_SOURCE -DBOOST_NO_IOSTREAM -DBOOST_ERROR_CODE_HEADER_ONLY -DBOOST_SYSTEM_NO_DEPRECATED -Wall -Wextra -Wno-deprecated-declarations -Wshadow -Wpointer-arith -Wcast-qual -Wcast-align -Wwrite-strings -Wmissing-declarations -Wmissing-noreturn -Wmissing-format-attribute -Wredundant-decls -Wundef -Wno-non-virtual-dtor -fvisibility=hidden -pthread  -MD -MQ 'ncmpc@exe/src_TagListPage.cxx.o' -MF 'ncmpc@exe/src_TagListPage.cxx.o.d' -o 'ncmpc@exe/src_TagListPage.cxx.o' -c ../src/TagListPage.cxx
../src/TagListPage.cxx: In member function ‘TagFilter TagListPage::MakeCursorFilter() const’:
../src/TagListPage.cxx:41:12: error: converting to ‘TagFilter {aka std::forward_list<std::pair<mpd_tag_type, std::basic_string<char> > >}’ from initializer list would use explicit constructor ‘std::forward_list<_Tp, _Alloc>::forward_list(const _Alloc&) [with _Tp = std::pair<mpd_tag_type, std::basic_string<char> >; _Alloc = std::allocator<std::pair<mpd_tag_type, std::basic_string<char> > >]’
    return {};
            ^
[68/71] Compiling C++ object 'ncmpc@exe/src_screen_keydef.cxx.o'.
ninja: build stopped: subcommand failed.

hscroll assertion basic.isDefined

ncmpc: ../src/hscroll.cxx:69: void hscroll::Paint() const: Assertion `basic.IsDefined()' failed.

I can reliably get nmcpc to crash this way. I have a playlist containing two internet radio streams, which I load with mpc and start playing. Then ncmpd is started. Then, after about 1 second of playing the first stream, I down-arrow and Enter to switch to the other one, and it immediately crashes.

I guess this has to do with the ticker tape scrolling at the bottom of the screen. The first stream's url is displayed there at first, and is long enough it has to scroll. The second stream's url is shorter and does not need to scroll.

Versions: Both 0.33 and 0.35 have the problem.

Lyrics search kills ncmpc.

In 0.27, using lyrics search immediately exits the program:
ncmpc: src/plugin.c:174: plugin_data: Assertion `cycle->pid > 0' failed. Aborted
I checked 0.24 and 0.25, and those do not have this problem - lyrics search works just as expected.

lyrics_plugin_dir is no longer configurable

The GNU autotools based build system had a --with-lyrics-plugin-dir configuration flag, here is the description from ncmpc-0.27:

--with-lyrics-plugin-dir=DIRECTORY
                          Directory where lyrics plugins are stored
                          [default=PREFIX/lib/ncmpc/lyrics]

With the meson based build system this directory path is created by concatenating the prefix and libdir options in meson.build with the project name and the string lyrics:

join_paths(get_option('prefix'), get_option('libdir'), meson.project_name(), 'lyrics')

It seems to be no longer possible to specify a different path using configuration options. Could you add an option to meson_bulid.txt allowing the configuration of that directory path?

I even started working on a patch for this and came up with the following:

diff --git a/meson_options.txt b/meson_options.txt
index 4f58ed3..d8e1023 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -79,3 +79,7 @@ option('chat_screen', type: 'boolean',
 option('documentation', type: 'boolean',
   value: false,
   description: 'Build API documentation')
+
+option('lyrics_plugin_dir', type: 'string',
+  value: join_paths(get_option('libdir'), meson.project_name(), 'lyrics'),
+  description: 'Directory where lyrics plugins are stored')

Sadly this patch doesn't work because you can't seem to call functions in meson_build.txt thus you probably need to hardcode the path in that file.

[Feature request] Keybindings: add possibility to duplicate selected track and append after currently playing track

Currently, there's no good way to quickly say: "play this song three times". You can either toggle repeat and single modes and deactivate them later, or go back to the Browse screen to append the song again, and put it after the currently playing row. This is a hassle if the song is in the middle of the playlist. It would be nice to be able to duplicate the currently playing song.

Relatedly, it would be nice to be able to append a song right after the currently song, and leave the rest of the playlist untouched.

From a cursory look, possible default keybindings could be D and A (or disabled).

Summary:

  1. A from browser and search screens could append right after the currently playing song
  2. D from the queue screen could duplicate the currently selected track

If you think these would be nice to have but are not willing to implement them, I can try to come up with a PR (eventually).

Search mask ^W and non-ASCII characters

I am using the following ncmpc version:

$ ncmpc --version
ncmpc version: 0.29
build options: debug multibyte wide locale nls colors getmouse artist-screen help-screen search-screen song-screen key-screen lyrics-screen outputs-screen

configuration files:
 /home/nmeum/.ncmpc/config
 /etc/ncmpc/config

When entering a search string in the Search: input bar (which can be reached by pressing 5 twice) which contains non-ASCII character (e.g the german umlaut 'ö'), pressing Ctrl + W triggers an assertion and causes the program to crash.

Here is the output of the assert(3) call:

Search: fööAssertion failed: x < strlen(wr->line) (../src/wreadln.c: wreadln_delete_char: 355)
 Aborted

I can reproduce this crash on both Alpine Linux Edge and Arch Linux.

Feature Request: List Last-Modified Tracks

It would be nice to be able to access to recently modified tracks (ie. recent music library additions|modifications).

I'm not sure where to add this, may be a new search mode, for instance an advanced search mode:
modified:<duration>(m|h|d|m|y)

duration as an integer with a time unit prefix minute,hour,day,etc…

Possibly have the same view for Albums|Artists.

Build warnings StatusBar.cxx and docs

The Meson build system
Version: 0.47.1
Source dir: /data/src/ncmpc
Build dir: /data/src/ncmpc/output
Build type: native build
Project name: ncmpc
Project version: 0.31
Native C++ compiler: c++ (gcc 8.2.0 "c++ (Debian 8.2.0-4) 8.2.0")
Build machine cpu family: x86_64
Build machine cpu: x86_64
Has header "locale.h": YES
Has header "libintl.h": YES
Checking for function "getaddrinfo" : YES
Found pkg-config: /usr/bin/pkg-config (0.29)
Native dependency ncursesw found: YES 6.1.20180714
Has header "ncursesw/curses.h": YES
Checking for function "getmouse" : YES
Dependency lirc found: NO
Dependency liblircclient0 found: NO
Compiler for C++ supports arguments -Wall: YES
Compiler for C++ supports arguments -Wextra: YES
Compiler for C++ supports arguments -Wno-deprecated-declarations -Wdeprecated-declarations: YES
Compiler for C++ supports arguments -Wshadow: YES
Compiler for C++ supports arguments -Wpointer-arith: YES
Compiler for C++ supports arguments -Wcast-qual: YES
Compiler for C++ supports arguments -Wcast-align: YES
Compiler for C++ supports arguments -Wwrite-strings: YES
Compiler for C++ supports arguments -Wmissing-declarations: YES
Compiler for C++ supports arguments -Wmissing-noreturn: YES
Compiler for C++ supports arguments -Wmissing-format-attribute: YES
Compiler for C++ supports arguments -Wredundant-decls: YES
Compiler for C++ supports arguments -Wundef: YES
Compiler for C++ supports arguments -Wno-non-virtual-dtor -Wnon-virtual-dtor: YES
Compiler for C++ supports arguments -fvisibility=hidden: YES
Compiler for C++ supports arguments -fno-exceptions: YES
Compiler for C++ supports arguments -fno-rtti: YES
Native dependency glib-2.0 found: YES 2.56.1
Native dependency libmpdclient found: YES 2.15
Configuring config.h using configuration
Program sphinx-build found: YES (/usr/bin/sphinx-build)
Build targets in project: 7
Found ninja-1.8.2 at /usr/bin/ninja

(...)

[14/62] Compiling C++ object 'ncmpc@exe/src_StatusBar.cxx.o'.
../src/StatusBar.cxx: In member function ‘void StatusBar::Update(const mpd_status*, const mpd_song*)’:
../src/StatusBar.cxx:151:6: warning: ‘%s’ directive output may be truncated writing up to 31 bytes into a region of size between 15 and 61 [-Wformat-truncation=]
"%s [%s/%s]",
^~~~~~~~~~~~
bitrate, elapsed_string, duration_string);
~~~~~~~~~~~~~~~
../src/StatusBar.cxx:150:12: note: ‘snprintf’ output between 5 and 82 bytes into a destination of size 64
snprintf(right_text, sizeof(right_text),
~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"%s [%s/%s]",
~~~~~~~~~~~~~
bitrate, elapsed_string, duration_string);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[61/62] Generating Manpage documentation with a custom command.
/data/src/ncmpc/doc/index.rst:211: WARNING: Inline interpreted text or phrase reference start-string without end-string.
[62/62] Generating HTML documentation with a custom command.
/data/src/ncmpc/doc/index.rst:211: WARNING: Inline interpreted text or phrase reference start-string without end-string.
WARNING: html_static_path entry u'/data/src/ncmpc/doc/_static' does not exist

Binding issues

Hi.

  1. I cannot bind the ' character. SOLVED with 0x27
  2. Key l assigned to select-playing and down warning.
  3. The screen-prev/screen-next change only between 2: Queue and 3: Browse.
# .config/ncmpc/config
enable-mouse = yes

# .config/ncmpc/keys
key down = 'l'
key play = ';'
key go-parent-directory = 'j'
key screen-prev = 'J'
#key screen-next = '\'' DOES NOT WORK
key screen-next = 0x27

Various formatting improvements

  • Add a prefix option for both selected and unselected items
  • Add an option to keep the screens list active permanently
    • Add color option for current screen
  • Add option to format selected item
  • Improve configuration file comments to better illustrate what color title and color title-bold refer to (i.e., the former refers to the right-hand volume display and screen list names, and the latter the left-hand title)
    • On this topic, why do the screen list names use color title and the name prefixes use color title-bold? This seems randomly inconsistent to me. I'd recommend a setting for the screen list information and title, and a separate for the volume indicator

random crashes with ncmpc 0.28 on Alpine Linux

When running ncmpc and suspending my laptop ncmpc (sometimes) crashes as soon as my laptop wakes up from sleep again. The following output shows up on stdout in that case:

Assertion failed: c->source != NULL (../src/mpdclient.c: mpdclient_schedule_enter_idle: 52)
                                                                           Aborted

0.28 build failure: undefined symbols _COLORS, _COLS, etc.

macOS does not have an ncurses.pc pkg-config file, so I'm getting build failure with 0.28.

[53/55] Linking target test/run_hscroll.
FAILED: test/run_hscroll 
clang  -o test/run_hscroll 'test/run_hscroll@exe/run_hscroll.c.o' 'ncmpc@exe/src_hscroll.c.o' 'ncmpc@exe/src_charset.c.o' -L/usr/local/Cellar/glib/2.54.0/lib -L/usr/local/opt/gettext/lib -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation  
Undefined symbols for architecture x86_64:
  "_waddnstr", referenced from:
      _hscroll_draw in src_hscroll.c.o
  "_wattr_get", referenced from:
      _fix_wattr_get in src_hscroll.c.o
  "_wattr_set", referenced from:
      _hscroll_draw in src_hscroll.c.o
  "_wmove", referenced from:
      _hscroll_draw in src_hscroll.c.o
  "_wrefresh", referenced from:
      _hscroll_timer_callback in src_hscroll.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
[54/55] Linking target ncmpc.
FAILED: ncmpc 
clang  -o ncmpc 'ncmpc@exe/src_main.c.o' 'ncmpc@exe/src_gidle.c.o' 'ncmpc@exe/src_mpdclient.c.o' 'ncmpc@exe/src_callbacks.c.o' 'ncmpc@exe/src_playlist.c.o' 'ncmpc@exe/src_filelist.c.o' 'ncmpc@exe/src_options.c.o' 'ncmpc@exe/src_command.c.o' 'ncmpc@exe/src_keyboard.c.o' 'ncmpc@exe/src_ncu.c.o' 'ncmpc@exe/src_player_command.c.o' 'ncmpc@exe/src_title_bar.c.o' 'ncmpc@exe/src_progress_bar.c.o' 'ncmpc@exe/src_status_bar.c.o' 'ncmpc@exe/src_screen.c.o' 'ncmpc@exe/src_screen_init.c.o' 'ncmpc@exe/src_screen_paint.c.o' 'ncmpc@exe/src_screen_utils.c.o' 'ncmpc@exe/src_screen_status.c.o' 'ncmpc@exe/src_screen_list.c.o' 'ncmpc@exe/src_screen_find.c.o' 'ncmpc@exe/src_screen_client.c.o' 'ncmpc@exe/src_screen_queue.c.o' 'ncmpc@exe/src_screen_browser.c.o' 'ncmpc@exe/src_screen_file.c.o' 'ncmpc@exe/src_list_window.c.o' 'ncmpc@exe/src_save_playlist.c.o' 'ncmpc@exe/src_song_paint.c.o' 'ncmpc@exe/src_colors.c.o' 'ncmpc@exe/src_charset.c.o' 'ncmpc@exe/src_wreadln.c.o' 'ncmpc@exe/src_strfsong.c.o' 'ncmpc@exe/src_time_format.c.o' 'ncmpc@exe/src_utils.c.o' 'ncmpc@exe/src_signals.c.o' 'ncmpc@exe/src_db_completion.c.o' 'ncmpc@exe/src_xterm_title.c.o' 'ncmpc@exe/src_hscroll.c.o' 'ncmpc@exe/src_match.c.o' 'ncmpc@exe/src_conf.c.o' 'ncmpc@exe/src_net_socket.c.o' 'ncmpc@exe/src_net_resolver.c.o' 'ncmpc@exe/src_net_async_connect.c.o' 'ncmpc@exe/src_net_async_rconnect.c.o' 'ncmpc@exe/src_aconnect.c.o' 'ncmpc@exe/src_screen_help.c.o' 'ncmpc@exe/src_screen_artist.c.o' 'ncmpc@exe/src_screen_search.c.o' 'ncmpc@exe/src_screen_song.c.o' 'ncmpc@exe/src_screen_keydef.c.o' 'ncmpc@exe/src_screen_outputs.c.o' -L/usr/local/Cellar/glib/2.54.0/lib -L/usr/local/opt/gettext/lib -lglib-2.0 -lintl -Wl,-framework -Wl,CoreFoundation -L/usr/local/Cellar/libmpdclient/2.13/lib -lmpdclient  
Undefined symbols for architecture x86_64:
  "_COLORS", referenced from:
      _colors_start in src_colors.c.o
  "_COLS", referenced from:
      _status_bar_paint in src_status_bar.c.o
      _screen_resize in src_screen_init.c.o
      _screen_init in src_screen_init.c.o
      __wreadln in src_wreadln.c.o
  "_LINES", referenced from:
      _screen_resize in src_screen_init.c.o
      _screen_init in src_screen_init.c.o
  "_acs_map", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _progress_bar_paint in src_progress_bar.c.o
  "_beep", referenced from:
      _screen_bell in src_screen_utils.c.o
  "_can_change_color", referenced from:
      _colors_start in src_colors.c.o
  "_curs_set", referenced from:
      _ncu_init in src_ncu.c.o
      _screen_resize in src_screen_init.c.o
      _screen_getch in src_screen_utils.c.o
      _screen_readln in src_screen_utils.c.o
      _screen_read_password in src_screen_utils.c.o
      _list_window_paint in src_list_window.c.o
      _list_window_paint2 in src_list_window.c.o
      ...
  "_delscreen", referenced from:
      _ncu_deinit in src_ncu.c.o
  "_delwin", referenced from:
      _status_bar_deinit in src_status_bar.c.o
      _screen_exit in src_screen_init.c.o
      _title_bar_deinit in src_screen_init.c.o
      _progress_bar_deinit in src_screen_init.c.o
  "_doupdate", referenced from:
      _mpdclient_connected_callback in src_main.c.o
      _timer_reconnect in src_main.c.o
      _timer_check_key_bindings in src_main.c.o
      _mpdclient_error_callback in src_callbacks.c.o
      _welcome_timer_callback in src_screen_init.c.o
      _screen_paint in src_screen_paint.c.o
      _drawline in src_wreadln.c.o
      ...
  "_echo", referenced from:
      _screen_getch in src_screen_utils.c.o
  "_endwin", referenced from:
      _ncu_deinit in src_ncu.c.o
      _sigwinch_event in src_signals.c.o
  "_flash", referenced from:
      _screen_bell in src_screen_utils.c.o
  "_getcurx", referenced from:
      __wreadln in src_wreadln.c.o
  "_getcury", referenced from:
      __wreadln in src_wreadln.c.o
  "_has_colors", referenced from:
      _colors_start in src_colors.c.o
  "_init_color", referenced from:
      _colors_start in src_colors.c.o
  "_init_pair", referenced from:
      _colors_update_pair in src_colors.c.o
  "_keypad", referenced from:
      _ncu_init in src_ncu.c.o
      _status_bar_init in src_status_bar.c.o
      _screen_init in src_screen_init.c.o
      _title_bar_init in src_screen_init.c.o
  "_leaveok", referenced from:
      _status_bar_init in src_status_bar.c.o
      _screen_init in src_screen_init.c.o
      _title_bar_init in src_screen_init.c.o
      _progress_bar_init in src_screen_init.c.o
  "_mvwin", referenced from:
      _progress_bar_resize in src_progress_bar.c.o
      _status_bar_resize in src_status_bar.c.o
  "_newterm", referenced from:
      _ncu_init in src_ncu.c.o
  "_newwin", referenced from:
      _window_init in src_status_bar.c.o
      _window_init in src_screen_init.c.o
  "_noecho", referenced from:
      _ncu_init in src_ncu.c.o
      _screen_getch in src_screen_utils.c.o
      __wreadln in src_wreadln.c.o
  "_nonl", referenced from:
      _ncu_init in src_ncu.c.o
  "_resizeterm", referenced from:
      _screen_resize in src_screen_init.c.o
  "_start_color", referenced from:
      _colors_start in src_colors.c.o
  "_stdscr", referenced from:
      _ncu_init in src_ncu.c.o
      _screen_init in src_screen_init.c.o
      _sigwinch_event in src_signals.c.o
  "_use_default_colors", referenced from:
      _colors_start in src_colors.c.o
  "_waddch", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _print_hotkey in src_title_bar.c.o
      _progress_bar_paint in src_progress_bar.c.o
      _screen_browser_paint_directory in src_screen_browser.c.o
      _paint_song_row in src_song_paint.c.o
      _screen_help_paint_callback in src_screen_help.c.o
  "_waddnstr", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _print_hotkey in src_title_bar.c.o
      _status_bar_paint in src_status_bar.c.o
      _status_bar_message in src_status_bar.c.o
      _screen_getch in src_screen_utils.c.o
      _screen_display_completion_list in src_screen_utils.c.o
      _screen_browser_paint_directory in src_screen_browser.c.o
      ...
  "_wattr_get", referenced from:
      _fix_wattr_get in src_colors.c.o
      _fix_wattr_get in src_hscroll.c.o
  "_wattr_off", referenced from:
      _row_color in src_screen_browser.c.o
      _row_color_end in src_list_window.c.o
      _row_color in src_list_window.c.o
      _row_color in src_song_paint.c.o
      _row_color in src_screen_help.c.o
      _row_color in src_screen_outputs.c.o
  "_wattr_on", referenced from:
      _row_color in src_screen_browser.c.o
      _row_color in src_list_window.c.o
      _row_color in src_song_paint.c.o
      _row_color in src_screen_help.c.o
      _row_color in src_screen_outputs.c.o
  "_wattr_set", referenced from:
      _colors_use in src_colors.c.o
      _hscroll_draw in src_hscroll.c.o
  "_wattrset", referenced from:
      _colors_use in src_colors.c.o
  "_wbkgd", referenced from:
      _screen_init in src_screen_init.c.o
  "_wclear", referenced from:
      _screen_paint in src_screen_paint.c.o
  "_wclrtobot", referenced from:
      _list_window_paint in src_list_window.c.o
      _list_window_paint2 in src_list_window.c.o
      _screen_artist_paint in src_screen_artist.c.o
  "_wclrtoeol", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _status_bar_clear_message in src_status_bar.c.o
      _status_bar_paint in src_status_bar.c.o
      _status_bar_message in src_status_bar.c.o
      _screen_display_completion_list in src_screen_utils.c.o
      _row_clear_to_eol in src_screen_browser.c.o
      _row_clear_to_eol in src_list_window.c.o
      ...
  "_werase", referenced from:
      _screen_getch in src_screen_utils.c.o
  "_wgetch", referenced from:
      _keyboard_event in src_keyboard.c.o
      _screen_getch in src_screen_utils.c.o
      __wreadln in src_wreadln.c.o
      _wreadln_insert_byte in src_wreadln.c.o
  "_whline", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _progress_bar_paint in src_progress_bar.c.o
      _row_clear_to_eol in src_screen_browser.c.o
      _row_clear_to_eol in src_list_window.c.o
      _row_clear_to_eol in src_song_paint.c.o
      __wreadln in src_wreadln.c.o
      _drawline in src_wreadln.c.o
      ...
  "_wmove", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _progress_bar_paint in src_progress_bar.c.o
      _status_bar_clear_message in src_status_bar.c.o
      _status_bar_paint in src_status_bar.c.o
      _status_bar_message in src_status_bar.c.o
      _screen_paint in src_screen_paint.c.o
      _screen_getch in src_screen_utils.c.o
      ...
  "_wnoutrefresh", referenced from:
      _title_bar_paint in src_title_bar.c.o
      _progress_bar_paint in src_progress_bar.c.o
      _status_bar_paint in src_status_bar.c.o
      _status_bar_message in src_status_bar.c.o
      _screen_paint in src_screen_paint.c.o
  "_wrefresh", referenced from:
      _ncu_init in src_ncu.c.o
      _status_bar_clear_message in src_status_bar.c.o
      _screen_display_completion_list in src_screen_utils.c.o
      _screen_jump in src_screen_find.c.o
      _screen_queue_repaint in src_screen_queue.c.o
      _sigwinch_event in src_signals.c.o
      _hscroll_timer_callback in src_hscroll.c.o
      ...
  "_wresize", referenced from:
      _title_bar_resize in src_title_bar.c.o
      _progress_bar_resize in src_progress_bar.c.o
      _status_bar_resize in src_status_bar.c.o
      _screen_resize in src_screen_init.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

meson warning flags

Warning messages on Debian testing x64

$ meson --buildtype=release -Ddocumentation=disabled . output
The Meson build system
Version: 0.52.1
Source dir: /data/src/ncmpc
Build dir: /data/src/ncmpc/output
Build type: native build
Project name: ncmpc
Project version: 0.38
C++ compiler for the host machine: c++ (gcc 10.0.1 "c++ (Debian 10-20200211-1) 10.0.1 20200211 (experimental)")
C++ linker for the host machine: GNU ld.bfd 2.34
Host machine cpu family: x86_64
Host machine cpu: x86_64
Has header "locale.h" : YES
Has header "libintl.h" : YES
Header <locale.h> has symbol "locale_t" : YES
Checking for function "iconv" : YES
Found pkg-config: /usr/bin/pkg-config (0.29)
Run-time dependency ncursesw found: YES 6.1.20191019
Has header "curses.h" with dependency ncursesw: YES
Checking for function "getmouse" with dependency ncursesw: YES
Found CMake: /usr/bin/cmake (3.16.3)
Run-time dependency lirc found: NO (tried pkgconfig and cmake)
Compiler for C++ supports arguments -Wall: YES
Compiler for C++ supports arguments -Wextra: YES
Compiler for C++ supports arguments -Wno-deprecated-declarations -Wdeprecated-declarations: YES
Compiler for C++ supports arguments -Wshadow: YES
Compiler for C++ supports arguments -Wpointer-arith: YES
Compiler for C++ supports arguments -Wcast-qual: YES
Compiler for C++ supports arguments -Wcast-align: YES
Compiler for C++ supports arguments -Wwrite-strings: YES
Compiler for C++ supports arguments -Wmissing-declarations: YES
Compiler for C++ supports arguments -Wmissing-noreturn: YES
Compiler for C++ supports arguments -Wmissing-format-attribute: YES
Compiler for C++ supports arguments -Wredundant-decls: YES
Compiler for C++ supports arguments -Wundef: YES
Compiler for C++ supports arguments -Wno-non-virtual-dtor -Wnon-virtual-dtor: YES
Compiler for C++ supports arguments -fvisibility=hidden: YES
Compiler for C++ supports arguments -Wno-format-truncation -Wformat-truncation: YES
Compiler for C++ supports arguments -ffunction-sections: YES
Compiler for C++ supports arguments -fdata-sections: YES
WARNING: Consider using the builtin warning_level option instead of adding warning flags by hand.
WARNING: Consider using the builtin warning_level option instead of adding warning flags by hand.
Run-time dependency threads found: YES
Run-time dependency Boost found: YES 1.71
Run-time dependency libmpdclient found: YES 2.19
Run-time dependency libpcre found: YES 8.39
Configuring config.h using configuration
Program sphinx-build skipped: feature documentation disabled
Build targets in project: 5
Found ninja-1.10.0 at /usr/bin/ninja

Build error: default initialization of an object of const type 'const ScopeInitUTF8' without a user-provided default constructor

Hi. I am the maintainer of ncmpc in MacPorts. I received a bug report from an user who could not build version 0.33 on MacOS 10.11 [1]:


info:build {
--
:info:build ^
:info:build  ../ncmpc-0.33/src/Main.cxx:293:22: error: default initialization of an  object of const type 'const ScopeInitUTF8' without a user-provided  default constructor
:info:build         const ScopeInitUTF8 init_utf8;
:info:build                             ^
:info:build                                      {}
:info:build 2 warnings and 1 error generated.

In this system, locale_t is not defined which results in an empty ScopeInitUTF8 class, and apparently that triggers an error on old versions of clang that enforce a defect in the C++ standard, later corrected [3]. I could try introducing a patch downstream to work around that, but it would be even better if this could be addressed upstream?

[1] https://trac.macports.org/attachment/ticket/57996/main.log
[2]

#ifdef HAVE_LOCALE_T

[3] https://stackoverflow.com/questions/7411515/why-does-c-require-a-user-provided-default-constructor-to-default-construct-a/47368753#47368753

Mac installation

How does sone install this on mac terminal? I don't have apt.

Double-spaced UTF characters break song duration display

Situation: I have a song in the queue with a very long title that consists of both Japaneese (kanji) and English characters, so some of them are 2 spaces in width.

Current behavior: when terminal window width is even, it may happen that the last displayed character of the title is a two-spaced kanjii. In this case, after displaying the song title, ncmpc tries to print its duration (6:03), but the remaining place is not enough, so only 6:0 stays on the same line, and 3 goes to the next one.
Problem occurs both with scroll=0 and scroll=1

Expected behavior: if the last displayed character occupies two spaces, it is replaced by a space so that the duration fits in the line.

Fails to build with Boost 1.70 (Beta1)

Regressed by boostorg/asio@a72fbb0b867f:

In file included from ../src/player_command.cxx:23:
../src/mpdclient.hxx:133:27: error: no member named 'get_io_service' in
      'boost::asio::basic_waitable_timer<std::__1::chrono::steady_clock,
      boost::asio::wait_traits<std::__1::chrono::steady_clock>, boost::asio::executor>'
                return enter_idle_timer.get_io_service();
                       ~~~~~~~~~~~~~~~~ ^
../src/mpdclient.hxx:132:8: error: cannot deduce return type 'auto &' for function with no return statements
        auto &get_io_service() noexcept {
              ^
2 errors generated.

Managing password in environment variable

Hello,

Since the #mpd channel is censored by a dictator asshole (excerpt verbatim from the conversation)

20:43 -!- Irssi: Join to #mpd was synced in 1 secs
20:43 < markand> hello there
20:44 < markand> is there something wrong with MPD_HOST environment variable for ncmpc? I've tried export MPD_HOST=the_password@the_hostname
20:44 < markand> ncmpc connects fine but it does not use the password, any step requires to type it
20:44 < markand> and more importantly, it's written at the top “Queue on the_password@the_hostname”
20:45 <@cirrus> how do you know it does not use the password?
20:45 < markand> because if I try any command it prompts me the password
20:46 < markand> and being printed on the top of the screen I thought it was ignored
20:46 <@cirrus> so you did not actually verify your assertion?
20:47 < markand> cirrus, I have not verified the source code, I just wondering why I should have to pass the password both in MPD_HOST and each time I need to do an operation
20:48 <@cirrus> I did not ask whether you have verified the source code.
20:49 <@cirrus> at this point, it's time for you to start reading the channel topic.
20:49 < markand> cirrus, what is it always that hard to speak with you? it's not the first time you have a very condescending talk with me
20:50 < markand> this is not encouraging any user contribution
20:50 <@cirrus> ok, I'll stop replying to you.
20:50  * Rasi understood the question just fine
20:51 < markand> yeah, ten years old reaction
20:51 -!- markand was kicked from #mpd by cirrus [bye]
20:51 -!- markand [~markand@unaffiliated/markand] has joined #mpd
20:51 -!- Topic for #mpd: Music Player Daemon | Latest 0.20.19 | http://www.musicpd.org/ | Problems? Just ask away, and please provide the info as explained on: http://www.musicpd.org/help/
20:51 -!- Topic set by cirrus [] [Thu Apr 26 20:00:59 2018]
20:51 [Users #mpd]
20:51 [@cirrus      ] [ Civil        ] [ frispete   ] [ lagothrix  ] [ pyllyukko      ] [ VargaD     ]
20:51 [@Rasi        ] [ codebam      ] [ frobnicator] [ lvlinux    ] [ ravndal        ] [ veremitz   ]
20:51 [ _dev_zero   ] [ Commander1024] [ gpol       ] [ lynxis     ] [ SCHAPiE        ] [ winny      ]
20:51 [ ajashton    ] [ craigger     ] [ hl         ] [ markand    ] [ sentriz        ] [ wolfshappen]
20:51 [ Alam_Squeeze] [ divx118      ] [ Hobbyboy   ] [ Mindi      ] [ soapsurfer     ] [ x73        ]
20:51 [ ArsenArsen  ] [ djselbeck    ] [ HumanG33k  ] [ minimalism ] [ souther        ] [ xcm        ]
20:51 [ ashka       ] [ DogBoy       ] [ i7c        ] [ moviuro    ] [ sqozz          ] [ xSmurf     ]
20:51 [ at0m        ] [ doppo        ] [ infinisil  ] [ NightMonkey] [ storrgie       ] [ zeltak     ]
20:51 [ atomi       ] [ dysfigured   ] [ jnes       ] [ npanic     ] [ SuperTux88     ] [ zyliwax    ]
20:51 [ belak       ] [ emilsp       ] [ KannOx     ] [ ntnn       ] [ swimmer        ]
20:51 [ brethil     ] [ eu           ] [ katie_     ] [ oldlaptop  ] [ sydney_untangle]
20:51 [ buZz        ] [ felixsanz    ] [ ketas      ] [ poxifide   ] [ szgyg          ]
20:51 [ catern      ] [ FichteFoll   ] [ keur       ] [ prg318     ] [ thesquib       ]
20:51 [ chowbok     ] [ friedrich_   ] [ KittyKatt  ] [ Psy-Q      ] [ Valfor         ]
20:51 -!- Irssi: #mpd: Total of 79 nicks [2 ops, 0 halfops, 0 voices, 77 normal]
20:51 -!- Channel #mpd created Sun Nov 26 07:42:55 2006
20:51 -!- Irssi: Join to #mpd was synced in 1 secs
20:51 < markand> I didn't know it's so hard to understand someone asking why password is required twice
20:51 -!- mode/#mpd [+b *!*markand@unaffiliated/markand] by cirrus
20:51 -!- markand was kicked from #mpd by cirrus [I SAID BYE]

Basically, I'm wondering why is the password required twice and printed on the top of the screen, example:

export MPD_HOST=password@hostname
export MPD_PORT=35000

Now, if I run ncmpc, on the top of the screen the password will be printed in clear “Queue on password@hostname” and each command require to type the password again. Should it be better to keep it and avoid printing it on the screen?

word wrapping with lyrics screen

Hello !
I think the lyrics screen is lacking word wrapping.
That is propably a rare case, but some songs have very long sentences ( for example Léo Ferré's La Solitude ) and there is no way to read the whole line.
Cheers !

Very strange sort in ncmpc

Hi,

Not sure it's a issue, but because I don't find any documentation about that...
When I go inside ncmpc in the browser section I'm totally unable to understand how the file are sorted.
I check in the filesystem the name of the file are 'track_number - ' so through a «ls -l» it's correctly sorted.
I check the metadata for those file, the track number are correct.
But I've got something don't fit anything, not the title, not the tracknumber, not the file name sort.

And ncmpc does that only on ~ 30% of my folder.

Improve configuration file comments

Per #31

Improve configuration file comments to better illustrate what color title and color title-bold refer to (i.e., the former refers to the right-hand volume display and screen list names, and the latter the left-hand title)

On this topic, why do the screen list names use color title and the name prefixes use color title-bold? This seems randomly inconsistent to me. I'd recommend a setting for the screen list information and title, and a separate for the volume indicator

Connection doesn't go through, no library shown

Issue

When trying to connect to a Chord Poly (HighRes audio player) running MPD an error message is shown. I'm able to connect from an Android client (MAFA 1.2.9) without any issues. Unfortunately I'm not able to grab the version of the MPD service running on the Chord Poly.

Error message

wrong number of arguments for "tagtypes"

ncmpc version information

  • no configuration files is used, they are non-existing
  • running ArchLinux on kernel 5.4.13
ncmpc version: 0.36
build options: debug multibyte wide locale iconv nls colors lirc getmouse artist-screen help-screen search-screen song-screen key-screen lyrics-screen outputs-screen

configuration files:
 /home/s28131/.config/ncmpc/config
 /home/s28131/.ncmpc/config
 /etc/ncmpc/config

Screenshot

Screenshot from 2020-01-21 09-18-42

Segmentation fault

ncmpc is mis-behaving lately, this is what happens ( i am not sure what triggers this ) :

(process:24772): GLib-CRITICAL **: Source ID 105296 was not found when attempting to remove it (process:24772): GLib-CRITICAL **: Source ID 105297 was not found when attempting to remove it
Segmentation fault (core dumped)

journalctl shows this :

Oct 05 07:53:00 speedy systemd[1]: Created slice system-systemd\x2dcoredump.slice.
Oct 05 07:53:00 speedy systemd[1]: Started Process Core Dump (PID 14002/UID 0).
Oct 05 07:53:00 speedy systemd-coredump[14003]: Process 24772 (ncmpc) of user 1000 dumped core.

                                                Stack trace of thread 24772:
                                                #0  0x0000000000419e16 n/a (ncmpc)
                                                #1  0x000000000041a1dd n/a (ncmpc)
                                                #2  0x00007f1b888ea343 n/a (libglib-2.0.so.0)
                                                #3  0x00007f1b888e98c5 g_main_context_dispatch (libglib-2.0.so.0)
                                                #4  0x00007f1b888e9c88 n/a (libglib-2.0.so.0)
                                                #5  0x00007f1b888e9fa2 g_main_loop_run (libglib-2.0.so.0)
                                                #6  0x0000000000407424 n/a (ncmpc)
                                                #7  0x00007f1b88508f6a __libc_start_main (libc.so.6)
                                                #8  0x00000000004074fa n/a (ncmpc)

                                                Stack trace of thread 24773:
                                                #0  0x00007f1b885d3cbb __poll (libc.so.6)
                                                #1  0x00007f1b888e9c09 n/a (libglib-2.0.so.0)
                                                #2  0x00007f1b888e9d1c g_main_context_iteration (libglib-2.0.so.0)
                                                #3  0x00007f1b888e9d61 n/a (libglib-2.0.so.0)
                                                #4  0x00007f1b88910ae5 n/a (libglib-2.0.so.0)
                                                #5  0x00007f1b8805e08a start_thread (libpthread.so.0)
                                                #6  0x00007f1b885de1bf __clone (libc.so.6)

ncmpc version: 0.27
build options: multibyte wide locale nls colors getmouse artist-screen help-screen search-screen song-screen key-screen lyrics-screen outputs-screen

Feature Request: Don't show empty «list»

It would be super nice if ncmpc don't show a empty list when tag info doesn't exist.
Let's say I use

library-page-tags = composer album artist performer date

in the .config/ncmpc/config,

And let's say for a bunch of audio file under same composer_album_artist I don't have performer tag, then I will get in ncmpc a list with

[..]                                                                                                                                    
[]
[All]

So in that case the [] = [All] because no file got a tag, so in that case it would be super nice to just don't show this list and jump directly to the [All] list.

Regards

ncmpc crashes when connecting to non-existing domain

On Alpine Linux edge:

$ git describe
v0.28-2-g911d7e9
$ ninja -C output/
ninja: Entering directory `output/'
ninja: no work to do.
$ ./output/ncmpc -h foo.bar.com
Connecting to foo.bar.com...  [Press q to abort]Assertion failed: ac->rconnect != NULL (../src/aconnect.c: aconnect_rconnect_error:125) Aborted

Doesn't seem to be 100% reproducible but every second run or so seems to trigger this…

crash when entering empty password

Launching ncmp against a password protected MPD, I hit 3 then try to add a folder with a, ncmpc prompts for the password, keep it empty and hit enter key:

ncmpc: ../src/ierror.h:129: mpd_error_get_message: Assertion error->code != MPD_ERROR_SUCCESS' failed.

ncmpc --version

ncmpc --version                                                              
ncmpc version: 0.37
build options: debug multibyte wide locale iconv nls colors lirc getmouse artist-screen help-screen search-screen song-screen key-screen lyrics-screen outputs-screen chat-screen
[…]

Here is threads backtrace:

Continuing.

Thread 1 "ncmpc" received signal SIGABRT, Aborted.
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
50	../sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.

Thread 2 (Thread 0x7fc1c1ac9700 (LWP 13794)):
#0  futex_wait_cancelable (private=0, expected=0, futex_word=0x564536436ef8) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  __pthread_cond_wait_common (abstime=0x0, mutex=0x564536436e98, cond=0x564536436ed0) at pthread_cond_wait.c:502
#2  __pthread_cond_wait (cond=cond@entry=0x564536436ed0, mutex=0x564536436e98) at pthread_cond_wait.c:655
#3  0x00005645348de8f4 in boost::asio::detail::posix_event::wait<boost::asio::detail::conditionally_enabled_mutex::scoped_lock> (lock=..., this=<optimized out>) at /usr/include/boost/asio/detail/conditionally_enabled_mutex.hpp:98
#4  boost::asio::detail::posix_event::wait<boost::asio::detail::conditionally_enabled_mutex::scoped_lock> (lock=..., this=<optimized out>) at /usr/include/boost/asio/detail/posix_event.hpp:100
#5  boost::asio::detail::conditionally_enabled_event::wait (lock=..., this=0x564536436ec8) at /usr/include/boost/asio/detail/conditionally_enabled_event.hpp:89
#6  boost::asio::detail::scheduler::do_run_one (ec=..., this_thread=..., lock=..., this=0x564536436e60) at /usr/include/boost/asio/detail/impl/scheduler.ipp:409
#7  boost::asio::detail::scheduler::run (this=0x564536436e60, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:154
#8  0x00005645348df1e7 in boost::asio::io_context::run (this=0x5645363e5480) at /usr/include/boost/asio/impl/io_context.ipp:62
#9  boost::asio::detail::resolver_service_base::work_io_context_runner::operator() (this=<optimized out>) at /usr/include/boost/asio/detail/impl/resolver_service_base.ipp:32
#10 boost::asio::detail::posix_thread::func<boost::asio::detail::resolver_service_base::work_io_context_runner>::run (this=<optimized out>) at /usr/include/boost/asio/detail/posix_thread.hpp:86
#11 0x00005645348de1df in boost::asio::detail::boost_asio_detail_posix_thread_function (arg=0x564536437100) at /usr/include/boost/asio/detail/impl/posix_thread.ipp:74
#12 0x00007fc1c2135fa3 in start_thread (arg=<optimized out>) at pthread_create.c:486
#13 0x00007fc1c20664cf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7fc1c1db2240 (LWP 13793)):
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x00007fc1c1f8f535 in __GI_abort () at abort.c:79
#2  0x00007fc1c1f8f40f in __assert_fail_base (fmt=0x7fc1c20f1ee0 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=0x7fc1c2302178 "error->code != MPD_ERROR_SUCCESS", file=0x7fc1c230202e "../src/ierror.h", line=129, function=<optimized out>) at assert.c:92
#3  0x00007fc1c1f9d102 in __GI___assert_fail (assertion=0x7fc1c2302178 "error->code != MPD_ERROR_SUCCESS", file=0x7fc1c230202e "../src/ierror.h", line=129, function=0x7fc1c2302c20 "mpd_error_get_message") at assert.c:101
#4  0x00007fc1c22f9300 in mpd_connection_get_error_message () from /lib/x86_64-linux-gnu/libmpdclient.so.2
#5  0x00005645348bdf72 in mpdclient::HandleError (this=this@entry=0x7ffe687eea60) at ../src/mpdclient.cxx:124
#6  0x00005645348bec2b in mpdclient::FinishCommand (this=0x7ffe687eea60) at ../src/mpdclient.hxx:263
#7  mpdclient_cmd_add_path (c=c@entry=0x7ffe687eea60, path_utf8=<optimized out>) at ../src/mpdclient.cxx:606
#8  0x00005645348cd20e in browser_select_entry (c=c@entry=0x7ffe687eea60, entry=<optimized out>, toggle=toggle@entry=false) at ../src/FileListPage.cxx:251
#9  0x00005645348cd8cb in FileListPage::HandleAdd (this=this@entry=0x564536439710, c=...) at ../src/FileListPage.cxx:321
#10 0x00005645348cdabb in FileListPage::OnCommand (cmd=Command::STOP, c=..., this=0x564536439710) at ../src/FileListPage.cxx:440
#11 FileListPage::OnCommand (this=this@entry=0x564536439710, c=..., cmd=cmd@entry=Command::ADD) at ../src/FileListPage.cxx:371
#12 0x00005645348ceaee in FileBrowserPage::OnCommand (this=0x564536439710, c=..., cmd=Command::ADD) at ../src/FileBrowserPage.cxx:353
#13 0x00005645348c7eb8 in ScreenManager::OnCommand (this=0x7ffe687eec50, c=..., seek=..., cmd=cmd@entry=Command::ADD) at /usr/include/c++/8/bits/unique_ptr.h:342
#14 0x00005645348aa432 in do_input_event (io_service=..., cmd=cmd@entry=Command::ADD) at ../src/Instance.hxx:91
#15 0x00005645348c4567 in AsyncUserInput::OnReadable (error=..., this=0x7ffe687eeef0) at /usr/include/boost/asio/impl/io_context.hpp:215
#16 AsyncUserInput::OnReadable (this=0x7ffe687eeef0, error=...) at ../src/AsyncUserInput.cxx:43
#17 0x00005645348c3a46 in std::__invoke_impl<void, void (AsyncUserInput::*&)(boost::system::error_code const&), AsyncUserInput*&, boost::system::error_code const&> (__f=@0x7ffe687ee7f0: (void (AsyncUserInput::*)(class AsyncUserInput * const, const class boost::system::error_code &)) 0x5645348c4500 <AsyncUserInput::OnReadable(boost::system::error_code const&)>, __f=@0x7ffe687ee7f0: (void (AsyncUserInput::*)(class AsyncUserInput * const, const class boost::system::error_code &)) 0x5645348c4500 <AsyncUserInput::OnReadable(boost::system::error_code const&)>, __t=@0x7ffe687ee800: 0x7ffe687eeef0) at /usr/include/c++/8/bits/invoke.h:70
#18 std::__invoke<void (AsyncUserInput::*&)(boost::system::error_code const&), AsyncUserInput*&, boost::system::error_code const&> (__fn=@0x7ffe687ee7f0: (void (AsyncUserInput::*)(class AsyncUserInput * const, const class boost::system::error_code &)) 0x5645348c4500 <AsyncUserInput::OnReadable(boost::system::error_code const&)>) at /usr/include/c++/8/bits/invoke.h:95
#19 std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>::__call<void, boost::system::error_code const&, unsigned long const&, 0ul, 1ul>(std::tuple<boost::system::error_code const&, unsigned long const&>&&, std::_Index_tuple<0ul, 1ul>) (__args=..., this=0x7ffe687ee7f0) at /usr/include/c++/8/functional:400
#20 std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>::operator()<boost::system::error_code const&, unsigned long const&, void>(boost::system::error_code const&, unsigned long const&) (this=0x7ffe687ee7f0) at /usr/include/c++/8/functional:484
#21 boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long>::operator()() (this=0x7ffe687ee7f0) at /usr/include/boost/asio/detail/bind_handler.hpp:164
#22 boost::asio::asio_handler_invoke<boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long> >(boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long>&, ...) (function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:69
#23 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long>, std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)> >(boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long>&, std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>&) (context=..., function=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37
#24 boost::asio::detail::handler_work<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::asio::system_executor>::complete<boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long> >(boost::asio::detail::binder2<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>, boost::system::error_code, unsigned long>&, std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)>&) (this=<synthetic pointer>, handler=..., function=...) at /usr/include/boost/asio/detail/handler_work.hpp:82
#25 boost::asio::detail::reactive_null_buffers_op<std::_Bind<void (AsyncUserInput::*(AsyncUserInput*, std::_Placeholder<1>))(boost::system::error_code const&)> >::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long) (owner=0x564536423b60, base=<optimized out>) at /usr/include/boost/asio/detail/reactive_null_buffers_op.hpp:77
#26 0x00005645348b0a8d in boost::asio::detail::scheduler_operation::complete (bytes_transferred=0, ec=..., owner=0x564536423b60, this=0x5645364395f0) at /usr/include/boost/asio/detail/scheduler_operation.hpp:40
#27 boost::asio::detail::epoll_reactor::descriptor_state::do_complete (bytes_transferred=<optimized out>, ec=..., base=<optimized out>, owner=0x564536423b60) at /usr/include/boost/asio/detail/impl/epoll_reactor.ipp:776
#28 boost::asio::detail::epoll_reactor::descriptor_state::do_complete (owner=0x564536423b60, base=<optimized out>, ec=..., bytes_transferred=<optimized out>) at /usr/include/boost/asio/detail/impl/epoll_reactor.ipp:766
#29 0x00005645348b4d2a in boost::asio::detail::scheduler_operation::complete (bytes_transferred=1, ec=..., owner=0x564536423b60, this=<optimized out>) at /usr/include/boost/asio/detail/scheduler_operation.hpp:40
#30 boost::asio::detail::scheduler::do_run_one (ec=..., this_thread=..., lock=..., this=0x564536423b60) at /usr/include/boost/asio/detail/impl/scheduler.ipp:401
#31 boost::asio::detail::scheduler::run (ec=..., this=0x564536423b60) at /usr/include/boost/asio/detail/impl/scheduler.ipp:154
#32 boost::asio::io_context::run (this=0x564536423b60) at /usr/include/boost/asio/impl/io_context.ipp:62
#33 Instance::Run (this=this@entry=0x7ffe687eea10) at ../src/Instance.cxx:102
#34 0x000056453489de06 in main (argc=<optimized out>, argv=<optimized out>) at ../src/Main.cxx:360
Detaching from program: /usr/bin/ncmpc, process 13793
[Inferior 1 (process 13793) detached]

Regression (0.25→0.26): Ignores password in $MPD_HOST on initial connect

With my MPD_HOST set to [email protected], ncmpc versions 0.26 and 0.27 can't connect to my MPD on my LAN server, but ncmpc 0.25 can.

Looking at the raw network traffic, I can see that 0.25 correctly sends a password command as the first command:

192.168.068.001.06600-192.168.068.003.52738: OK MPD 0.19.0

192.168.068.003.52738-192.168.068.001.06600: password "password"

192.168.068.001.06600-192.168.068.003.52738: OK

192.168.068.003.52738-192.168.068.001.06600: status

192.168.068.001.06600-192.168.068.003.52738: volume: -1
repeat: 0
random: 0
[etc]

But the issue is that 0.26 and 0.27 just try to launch straight into status and fail:

192.168.068.001.06600-192.168.068.003.52743: OK MPD 0.19.0

192.168.068.003.52743-192.168.068.001.06600: status

192.168.068.001.06600-192.168.068.003.52743: ACK [4@0] {status} you don't have permission for "status"

(I can't seem to compile the latest git so I can't see if it's fixed there.)

This originally happened on ncmpc installed via homebrew, but I've compiled the 0.25, 0.26, and 0.27 binaries directly from the GIthub releases to test them. macOS Sierra, 10.12.6.

On --buildtype=release, b_ndebug=true is not set

Release build, debug option should not be enabled, but it is

$ meson . output --buildtype=release

build options: debug multibyte wide locale nls colors getmouse artist-screen help-screen search-screen song-screen key-screen outputs-screen

Debug build, debug is enabled

$ meson . output --buildtype=debug

build options: debug multibyte wide locale nls colors getmouse artist-screen help-screen search-screen song-screen key-screen outputs-screen

Release build, b_ndebug set explicitly, debug is not set

$ meson . output --buildtype=release -Db_ndebug=true

build options: multibyte wide locale nls colors getmouse artist-screen help-screen search-screen song-screen key-screen outputs-screen

There's a warning though:

[36/62] Compiling C++ object 'ncmpc@exe/src_hscroll.cxx.o'.
../src/hscroll.cxx: In static member function ‘static gboolean BindTimeoutCallback<T, method>::Callback(gpointer) [with T = hscroll; bool (T::* method)() = &hscroll::TimerCallback]’:
../src/hscroll.cxx:85:26: warning: ‘old_pair’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  wattr_set(w, old_attrs, old_pair, nullptr);
                          ^~~~~~~~
../src/hscroll.cxx:75:8: note: ‘old_pair’ was declared here
  short old_pair;
        ^~~~~~~~
../src/hscroll.cxx: In member function ‘void hscroll::Paint() const’:
../src/hscroll.cxx:85:26: warning: ‘old_pair’ may be used uninitialized in this function [-Wmaybe-uninitialized]
  wattr_set(w, old_attrs, old_pair, nullptr);

I looked into build/configure.py.
Meson 0.46.1 does not touch it, but if executed manually - it unconditionally runs meson for three configuration sets ("debug", "release" and "mini"). So ninja -C output/release can be used to build non-debug version (it will fail if lirc is not installed though).

Indicate whether random mode (etc.) is enabled

I was very confused recently when ncmpc started to play tracks from my queue in unpredictable order, until I guessed that I had accidentally hit z. A visual indication that random mode (or one of the other modes listed in the Help tab) is enabled would be very useful to avoid this sort of confusion.

Error message when exit ncmpc-0.28git.

It shows the following message.

*** Error in `ncmpc': double free or corruption (out): 0x0000000000e32c40 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fd4f5dda7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7fd4f5de2e0a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fd4f5de698c]
/usr/lib/libmpdclient.so.2(mpd_settings_free+0xc)[0x7fd4f644c4bc]
/usr/lib/libmpdclient.so.2(mpd_connection_free+0x4a)[0x7fd4f64450da]
ncmpc[0x407d39]
ncmpc[0x407e99]
ncmpc[0x406f6d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fd4f5d83830]
ncmpc[0x406fe9]
======= Memory map: ========
00400000-00422000 r-xp 00000000 08:05 8127456 /usr/local/bin/ncmpc
00622000-00623000 r--p 00022000 08:05 8127456 /usr/local/bin/ncmpc
00623000-00625000 rw-p 00023000 08:05 8127456 /usr/local/bin/ncmpc
00625000-00626000 rw-p 00000000 00:00 0
00de2000-00e45000 rw-p 00000000 00:00 0 [heap]
7fd4e8000000-7fd4e8021000 rw-p 00000000 00:00 0
7fd4e8021000-7fd4ec000000 ---p 00000000 00:00 0
7fd4f0000000-7fd4f0021000 rw-p 00000000 00:00 0
7fd4f0021000-7fd4f4000000 ---p 00000000 00:00 0
7fd4f4646000-7fd4f465c000 r-xp 00000000 08:05 17437077 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd4f465c000-7fd4f485b000 ---p 00016000 08:05 17437077 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd4f485b000-7fd4f485c000 rw-p 00015000 08:05 17437077 /lib/x86_64-linux-gnu/libgcc_s.so.1
7fd4f485c000-7fd4f4867000 r-xp 00000000 08:05 17432793 /lib/x86_64-linux-gnu/libnss_files-2.23.so
7fd4f4867000-7fd4f4a66000 ---p 0000b000 08:05 17432793 /lib/x86_64-linux-gnu/libnss_files-2.23.so
7fd4f4a66000-7fd4f4a67000 r--p 0000a000 08:05 17432793 /lib/x86_64-linux-gnu/libnss_files-2.23.so
7fd4f4a67000-7fd4f4a68000 rw-p 0000b000 08:05 17432793 /lib/x86_64-linux-gnu/libnss_files-2.23.so
7fd4f4a68000-7fd4f4a6e000 rw-p 00000000 00:00 0
7fd4f4a6e000-7fd4f4a6f000 ---p 00000000 00:00 0
7fd4f4a6f000-7fd4f526f000 rw-p 00000000 00:00 0
7fd4f526f000-7fd4f56d0000 r--p 00000000 08:05 8000026 /usr/lib/locale/locale-archive
7fd4f56d0000-7fd4f56e8000 r-xp 00000000 08:05 17432800 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fd4f56e8000-7fd4f58e7000 ---p 00018000 08:05 17432800 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fd4f58e7000-7fd4f58e8000 r--p 00017000 08:05 17432800 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fd4f58e8000-7fd4f58e9000 rw-p 00018000 08:05 17432800 /lib/x86_64-linux-gnu/libpthread-2.23.so
7fd4f58e9000-7fd4f58ed000 rw-p 00000000 00:00 0
7fd4f58ed000-7fd4f595e000 r-xp 00000000 08:05 17432739 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7fd4f595e000-7fd4f5b5d000 ---p 00071000 08:05 17432739 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7fd4f5b5d000-7fd4f5b5e000 r--p 00070000 08:05 17432739 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7fd4f5b5e000-7fd4f5b5f000 rw-p 00071000 08:05 17432739 /lib/x86_64-linux-gnu/libpcre.so.3.13.2
7fd4f5b5f000-7fd4f5b62000 r-xp 00000000 08:05 17432708 /lib/x86_64-linux-gnu/libdl-2.23.so
7fd4f5b62000-7fd4f5d61000 ---p 00003000 08:05 17432708 /lib/x86_64-linux-gnu/libdl-2.23.so
7fd4f5d61000-7fd4f5d62000 r--p 00002000 08:05 17432708 /lib/x86_64-linux-gnu/libdl-2.23.so
7fd4f5d62000-7fd4f5d63000 rw-p 00003000 08:05 17432708 /lib/x86_64-linux-gnu/libdl-2.23.so
7fd4f5d63000-7fd4f5f22000 r-xp 00000000 08:05 17432787 /lib/x86_64-linux-gnu/libc-2.23.so
7fd4f5f22000-7fd4f6122000 ---p 001bf000 08:05 17432787 /lib/x86_64-linux-gnu/libc-2.23.so
7fd4f6122000-7fd4f6126000 r--p 001bf000 08:05 17432787 /lib/x86_64-linux-gnu/libc-2.23.so
7fd4f6126000-7fd4f6128000 rw-p 001c3000 08:05 17432787 /lib/x86_64-linux-gnu/libc-2.23.so
7fd4f6128000-7fd4f612c000 rw-p 00000000 00:00 0
7fd4f612c000-7fd4f623b000 r-xp 00000000 08:05 17432622 /lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
7fd4f623b000-7fd4f643a000 ---p 0010f000 08:05 17432622 /lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
7fd4f643a000-7fd4f643b000 r--p 0010e000 08:05 17432622 /lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
7fd4f643b000-7fd4f643c000 rw-p 0010f000 08:05 17432622 /lib/x86_64-linux-gnu/libglib-2.0.so.0.4800.2
7fd4f643c000-7fd4f643d000 rw-p 00000000 00:00 0
7fd4f643d000-7fd4f6453000 r-xp 00000000 08:05 8003694 /usr/lib/libmpdclient.so.2.0.9
7fd4f6453000-7fd4f6652000 ---p 00016000 08:05 8003694 /usr/lib/libmpdclient.so.2.0.9
7fd4f6652000-7fd4f6653000 r--p 00015000 08:05 8003694 /usr/lib/libmpdclient.so.2.0.9
7fd4f6653000-7fd4f6654000 rw-p 00016000 08:05 8003694 /usr/lib/libmpdclient.so.2.0.9
7fd4f6654000-7fd4f6679000 r-xp 00000000 08:05 17437203 /lib/x86_64-linux-gnu/libtinfo.so.5.9
7fd4f6679000-7fd4f6878000 ---p 00025000 08:05 17437203 /lib/x86_64-linux-gnu/libtinfo.so.5.9
7fd4f6878000-7fd4f687c000 r--p 00024000 08:05 17437203 /lib/x86_64-linux-gnu/libtinfo.so.5.9
7fd4f687c000-7fd4f687d000 rw-p 00028000 08:05 17437203 /lib/x86_64-linux-gnu/libtinfo.so.5.9
7fd4f687d000-7fd4f68aa000 r-xp 00000000 08:05 17437121 /lib/x86_64-linux-gnu/libncursesw.so.5.9
7fd4f68aa000-7fd4f6aaa000 ---p 0002d000 08:05 17437121 /lib/x86_64-linux-gnu/libncursesw.so.5.9
7fd4f6aaa000-7fd4f6aab000 r--p 0002d000 08:05 17437121 /lib/x86_64-linux-gnu/libncursesw.so.5.9
7fd4f6aab000-7fd4f6aac000 rw-p 0002e000 08:05 17437121 /lib/x86_64-linux-gnu/libncursesw.so.5.9
7fd4f6aac000-7fd4f6ad2000 r-xp 00000000 08:05 17432790 /lib/x86_64-linux-gnu/ld-2.23.so
7fd4f6caa000-7fd4f6cb0000 rw-p 00000000 00:00 0
7fd4f6cce000-7fd4f6cd1000 rw-p 00000000 00:00 0
7fd4f6cd1000-7fd4f6cd2000 r--p 00025000 08:05 17432790 /lib/x86_64-linux-gnu/ld-2.23.so
7fd4f6cd2000-7fd4f6cd3000 rw-p 00026000 08:05 17432790 /lib/x86_64-linux-gnu/ld-2.23.so
7fd4f6cd3000-7fd4f6cd4000 rw-p 00000000 00:00 0
7ffc8bfdf000-7ffc8c000000 rw-p 00000000 00:00 0 [stack]
7ffc8c0fb000-7ffc8c0fd000 r--p 00000000 00:00 0 [vvar]
7ffc8c0fd000-7ffc8c0ff000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
Aborted (core dumped)

Warning "Note: Did you forget to Apply your changes?" always shows up

I am on Archlinux. ncmpc version:

ncmpc version: 0.38
build options: debug multibyte wide locale iconv nls colors lirc getmouse artist-screen help-screen search-screen song-screen key-screen lyrics-screen outputs-screen

Steps to reproduce:

  1. I made sure there is no other ncmpc running and I am not editing the ncmpc/keys file in an editor
  2. Start up ncmpc with no personal configuration files:
    ncmpc -f /dev/null -k /dev/null
  3. Go to key definition screen with K and do nothing
  4. Go to any other screen, e.g. queue screen with 2

After the steps, the warning message "Note: Did you forget to Apply your changes?" shows up even if I did not edit any keys.

This warning also shows up after I save the settings with "Apply & Save key bindings".

I suppose it should only show up if I have edited some keybindings and do not save it before switching to other screens.

Unknown color field

ncmpc v0.32
Colors specified in config file doesn't apply.

stdout:
Unknown color field: title Unknown color field: line Unknown color field: line-flags Unknown color field: list Unknown color field: list-bold Unknown color field: browser-directory Unknown color field: browser-playlist Unknown color field: progressbar Unknown color field: status-song Unknown color field: status-time

config.txt

High CPU usage when idle

After updating mpd and ncmpc, I noticed that ncmpc is using >80% CPU -- it seems to be endlessly looping when idle.

Since I update fairly often, this was probably introduced in the 0.33 release. (It could have been in 0.32, but anything older would be unlikely.)

Versions:

  • ncmpc: 0.33
  • mpd: 0.20.23
  • libmpdclient: 2.16.0
  • boost: 1.68.0

Running Void Linux:

$ uname -a
Linux pranaferox 4.17.9_1 #1 SMP PREEMPT Mon Jul 23 20:12:05 UTC 2018 x86_64 GNU/Linux

The strace log has sending an "idle\n" to a dup'd IPv6 socket to ::1:

sendto(9, "idle\n", 5, MSG_DONTWAIT, NULL, 0) = 5

and then it goes into a loop of running this over and over, as fast as it can:

rt_sigaction(SIGTSTP, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, {sa_handler=0x7f40f83d36f0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, 8) = 0
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
rt_sigaction(SIGTSTP, {sa_handler=0x7f40f83d36f0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, NULL, 8) = 0
rt_sigaction(SIGTSTP, {sa_handler=SIG_IGN, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, {sa_handler=0x7f40f83d36f0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, 8) = 0
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
poll([{fd=0, events=POLLIN}], 1, 0)     = 0 (Timeout)
rt_sigaction(SIGTSTP, {sa_handler=0x7f40f83d36f0, sa_mask=[], sa_flags=SA_RESTORER|SA_RESTART, sa_restorer=0x7f40f7969370}, NULL, 8) = 0
timerfd_settime(5, TFD_TIMER_ABSTIME, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=1}}, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=2, tv_nsec=985596675}}) = 0
epoll_wait(4, [{EPOLLIN, {u32=2444182820, u64=94100882670884}}], 128, 0) = 1
timerfd_settime(5, 0, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=2, tv_nsec=985560000}}, {it_interval={tv_sec=0, tv_nsec=0}, it_value={tv_sec=0, tv_nsec=0}}) = 0

aside from the high CPU usage, ncmpc remains responsive.

I used perf to make a flamegraph, and it suggests that Instance:OnCheckKeyBindings, KeyBindings::Check, KeyBindings::FindKey ... is the sequence of calls where it's spending nearly all its time. Also, I noticed that the high CPU usage does not appear when run as root, but I don't see an EACCESS or other permission failures in the strace log suggesting why that makes a difference.

Please let me know if there's any other specific information I could add -- I can reproduce this pretty easily, but I'm not very familiar with modern C++ or the boost APIs. Hopefully these details are enough to point you in the right direction.

Exiting ncmpc messes up the terminal emulator.

Exiting ncmpc 0.27 causes the cursor in terminal emulator to disappear, scrollback to reset, mod keys to stop working and ncmpc appears to print ill-formatted core dump (until you type reset).
0.24 and 0.25 do not exhibit this problem.

ncmpc is 0.27
ncurses is 6.1-r2
shell is bash 4.4_p12
terminal emulator is xfce4-terminal is 0.8.7.2, built against vte 0.48.4

/usr/lib64/libglib-2.0.so.0.5200.3 7fdac814f000-7fdac8150000 r--p 00110000 08:03 411857 /usr/lib64/libglib-2.0.so.0.5200.3 7fdac8150000-7fdac8151000 rw-p 00111000 08:03 411857 /usr/lib64/libglib-2.0.so.0.5200.3 7fdac8151000-7fdac8152000 rw-p 00000000 00:00 0 7fdac8152000-7fdac8169000 r-xp 00000000 08:03 6693 /usr/lib64/libmpdclient.so.2.0.10 7fdac8169000-7fdac8368000 ---p 00017000 08:03 6693 /usr/lib64/libmpdclient.so.2.0.10 7fdac8368000-7fdac8369000 r--p 00016000 08:03 6693 /usr/lib64/libmpdclient.so.2.0.10 7fdac8369000-7fdac836a000 rw-p 00017000 08:03 6693 /usr/lib64/libmpdclient.so.2.0.10 7fdac836a000-7fdac83d4000 r-xp 00000000 08:03 1216681 /lib64/libncursesw.so.6.1 7fdac83d4000-7fdac85d4000 ---p 0006a000 08:03 1216681 /lib64/libncursesw.so.6.1 7fdac85d4000-7fdac85d8000 r--p 0006a000 08:03 1216681 /lib64/libncursesw.so.6.1 7fdac85d8000-7fdac85da000 rw-p 0006e000 08:03 1216681 /lib64/libncursesw.so.6.1 7fdac85da000-7fdac85fd000 r-xp 00000000 08:03 1313175 /lib64/ld-2.25.so 7fdac87c3000-7fdac87c8000 rw-p 00000000 00:00 0 7fdac87f2000-7fdac87f3000 rw-p 00000000 00:00 0 7fdac87f3000-7fdac87fa000 r--s 00000000 08:03 3026772 /usr/lib64/gconv/gconv-modules.cache 7fdac87fa000-7fdac87fc000 rw-p 00000000 00:00 0 7fdac87fc000-7fdac87fd000 r--p 00022000 08:03 1313175 /lib64/ld-2.25.so 7fdac87fd000-7fdac87fe000 rw-p 00023000 08:03 1313175 /lib64/ld-2.25.so 7fdac87fe000-7fdac87ff000 rw-p 00000000 00:00 0 7ffd99d9c000-7ffd99dbd000 rw-p 00000000 00:00 0 [stack] 7ffd99dfb000-7ffd99dfe000 r--p 00000000 00:00 0 [vvar] 7ffd99dfe000-7ffd99e00000 r-xp 00000000 00:00 0 [vdso] ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] Aborted

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.