Add an X11 user interface
This is meant to exactly mimic the terminal UI, just without the restriction to ugly monospace fonts. The Curses implementation has been reworked, and may have become more computationally expensive. In general, though, the codebase has been significantly cleaned up.
This commit is contained in:
parent
8260842aef
commit
830a744a11
|
@ -58,11 +58,20 @@ if (WITH_PULSE)
|
||||||
list (APPEND extra_libraries ${libpulse_LIBRARIES})
|
list (APPEND extra_libraries ${libpulse_LIBRARIES})
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
|
pkg_check_modules (x11 x11 xkbcommon xrender xft fontconfig)
|
||||||
|
option (WITH_X11 "Use FFTW to enable spectrum visualisation" ${x11_FOUND})
|
||||||
|
if (WITH_X11)
|
||||||
|
if (NOT x11_FOUND)
|
||||||
|
message (FATAL_ERROR "Some X11 libraries were not found")
|
||||||
|
endif ()
|
||||||
|
list (APPEND extra_libraries ${x11_LIBRARIES})
|
||||||
|
endif ()
|
||||||
|
|
||||||
include_directories (${Unistring_INCLUDE_DIRS}
|
include_directories (${Unistring_INCLUDE_DIRS}
|
||||||
${Ncursesw_INCLUDE_DIRS} ${Termo_INCLUDE_DIRS} ${curl_INCLUDE_DIRS}
|
${Ncursesw_INCLUDE_DIRS} ${Termo_INCLUDE_DIRS} ${curl_INCLUDE_DIRS}
|
||||||
${fftw_INCLUDE_DIRS} ${libpulse_INCLUDE_DIRS})
|
${fftw_INCLUDE_DIRS} ${libpulse_INCLUDE_DIRS} ${x11_INCLUDE_DIRS})
|
||||||
link_directories (${curl_LIBRARY_DIRS}
|
link_directories (${curl_LIBRARY_DIRS}
|
||||||
${fftw_LIBRARY_DIRS} ${libpulse_LIBRARY_DIRS})
|
${fftw_LIBRARY_DIRS} ${libpulse_LIBRARY_DIRS} ${x11_LIBRARY_DIRS})
|
||||||
|
|
||||||
# Configuration
|
# Configuration
|
||||||
if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
|
if ("${CMAKE_SYSTEM_NAME}" MATCHES "BSD")
|
||||||
|
@ -144,7 +153,7 @@ foreach (page ${project_MAN_PAGES})
|
||||||
endforeach ()
|
endforeach ()
|
||||||
|
|
||||||
# CPack
|
# CPack
|
||||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "MPD client")
|
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "Terminal/X11 MPD client")
|
||||||
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
|
set (CPACK_PACKAGE_VENDOR "Premysl Eric Janouch")
|
||||||
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
|
set (CPACK_PACKAGE_CONTACT "Přemysl Eric Janouch <p@janouch.name>")
|
||||||
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
set (CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||||
|
|
2
LICENSE
2
LICENSE
|
@ -1,4 +1,4 @@
|
||||||
Copyright (c) 2016 - 2021, Přemysl Eric Janouch <p@janouch.name>
|
Copyright (c) 2016 - 2022, Přemysl Eric Janouch <p@janouch.name>
|
||||||
|
|
||||||
Permission to use, copy, modify, and/or distribute this software for any
|
Permission to use, copy, modify, and/or distribute this software for any
|
||||||
purpose with or without fee is hereby granted.
|
purpose with or without fee is hereby granted.
|
||||||
|
|
9
NEWS
9
NEWS
|
@ -1,3 +1,12 @@
|
||||||
|
Unreleased
|
||||||
|
|
||||||
|
* Added an optional X11 user interface
|
||||||
|
|
||||||
|
* Added a "z" binding to center the view on the selected item
|
||||||
|
|
||||||
|
* Fixed possibility of connection timeouts with PulseAudio integration
|
||||||
|
|
||||||
|
|
||||||
1.2.0 (2021-12-21)
|
1.2.0 (2021-12-21)
|
||||||
|
|
||||||
* Added ability to control the volume of MPD's current PulseAudio sink
|
* Added ability to control the volume of MPD's current PulseAudio sink
|
||||||
|
|
39
README.adoc
39
README.adoc
|
@ -1,24 +1,27 @@
|
||||||
nncmpp
|
nncmpp
|
||||||
======
|
======
|
||||||
|
|
||||||
'nncmpp' is yet another MPD client. It is in effect a simplified TUI version
|
'nncmpp' is yet another MPD client. Its specialty is running equally well in
|
||||||
of Sonata. I had already written a lot of the required code before, so I had
|
the terminal, or as an X11 client--it will provide the same keyboard- and
|
||||||
the perfect opportunity to get rid of the unmaintained Python application and
|
mouse-friendly interface.
|
||||||
make the first TUI client that doesn't feel awkward to use.
|
|
||||||
|
This project began its life as a simplified TUI version of Sonata. I had
|
||||||
|
already written a lot of the required code before, so I had the perfect
|
||||||
|
opportunity to get rid of the unmaintained Python application, and to make
|
||||||
|
the first TUI client that doesn't feel awkward to use.
|
||||||
|
|
||||||
If it's not obvious enough, the name is a pun on all those ridiculous client
|
If it's not obvious enough, the name is a pun on all those ridiculous client
|
||||||
names, and should be pronounced as "nincompoop".
|
names, and should be pronounced as "nincompoop".
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
Most stuff is there. Enough for me to use the program exclusively. Among other
|
Most stuff is there. I've been using the program exclusively for many years.
|
||||||
things, it can display and change PulseAudio volume directly to cover the use
|
Among other things, it can display and change PulseAudio volume directly
|
||||||
case of remote control, it has a fast spectrum visualiser, and both
|
to cover the use case of remote control, it has a fast spectrum visualiser,
|
||||||
the appearance and key bindings can be customized.
|
and both its appearance and key bindings can be customized.
|
||||||
|
|
||||||
Note that since I only use the filesystem browsing mode, that's also the only
|
Note that currently only the filesystem browsing mode is implemented,
|
||||||
thing I care to implement for the time being. Similarly, the search feature is
|
and the search feature is known to be clumsy.
|
||||||
known to be clumsy.
|
|
||||||
|
|
||||||
image::nncmpp.png[align="center"]
|
image::nncmpp.png[align="center"]
|
||||||
|
|
||||||
|
@ -38,6 +41,7 @@ Build dependencies: CMake, pkg-config, asciidoctor,
|
||||||
liberty (included), termo (included) +
|
liberty (included), termo (included) +
|
||||||
Runtime dependencies: ncursesw, libunistring, cURL,
|
Runtime dependencies: ncursesw, libunistring, cURL,
|
||||||
fftw3 (optional), libpulse (optional)
|
fftw3 (optional), libpulse (optional)
|
||||||
|
Optional X11 dependencies: x11, xkbcommon, xft
|
||||||
|
|
||||||
$ git clone --recursive https://git.janouch.name/p/nncmpp.git
|
$ git clone --recursive https://git.janouch.name/p/nncmpp.git
|
||||||
$ mkdir nncmpp/build
|
$ mkdir nncmpp/build
|
||||||
|
@ -54,16 +58,19 @@ Or you can try telling CMake to make a package for you. For Debian it is:
|
||||||
$ cpack -G DEB
|
$ cpack -G DEB
|
||||||
# dpkg -i nncmpp-*.deb
|
# dpkg -i nncmpp-*.deb
|
||||||
|
|
||||||
Terminal caveats
|
User interface caveats
|
||||||
----------------
|
----------------------
|
||||||
This application aspires to be as close to a GUI as possible. It expects you
|
The ncurses interface aspires to be as close to a GUI as possible. Don't shy
|
||||||
to use the mouse (though it's not required). Terminals are, however, somewhat
|
away from using your mouse (though keyboard is also fine). Terminals are,
|
||||||
tricky to get consistent results on, so be aware of the following:
|
however, tricky to get consistent results on, so be aware of the following:
|
||||||
|
|
||||||
- use a UTF-8 locale to get finer resolution progress bars and scrollbars
|
- use a UTF-8 locale to get finer resolution progress bars and scrollbars
|
||||||
- Xterm needs `XTerm*metaSendsEscape: true` for the default bindings to work
|
- Xterm needs `XTerm*metaSendsEscape: true` for the default bindings to work
|
||||||
- urxvt's 'vtwheel' plugin sabotages scrolling
|
- urxvt's 'vtwheel' plugin sabotages scrolling
|
||||||
|
|
||||||
|
The X11 graphical interface is a second-class citizen, so some limitations of
|
||||||
|
terminals carry over, such as the plain default theme.
|
||||||
|
|
||||||
Contributing and Support
|
Contributing and Support
|
||||||
------------------------
|
------------------------
|
||||||
Use https://git.janouch.name/p/nncmpp to report any bugs, request features,
|
Use https://git.janouch.name/p/nncmpp to report any bugs, request features,
|
||||||
|
|
|
@ -7,5 +7,6 @@
|
||||||
#cmakedefine HAVE_RESIZETERM
|
#cmakedefine HAVE_RESIZETERM
|
||||||
#cmakedefine WITH_FFTW
|
#cmakedefine WITH_FFTW
|
||||||
#cmakedefine WITH_PULSE
|
#cmakedefine WITH_PULSE
|
||||||
|
#cmakedefine WITH_X11
|
||||||
|
|
||||||
#endif /* ! CONFIG_H */
|
#endif /* ! CONFIG_H */
|
||||||
|
|
2
liberty
2
liberty
|
@ -1 +1 @@
|
||||||
Subproject commit 7e8e085c97311b52db4d6739b6ef2a1b26a2319f
|
Subproject commit 63aed8f0fd61e097ae9eea43977cac4af595ca43
|
15
nncmpp.adoc
15
nncmpp.adoc
|
@ -6,7 +6,7 @@ nncmpp(1)
|
||||||
|
|
||||||
Name
|
Name
|
||||||
----
|
----
|
||||||
nncmpp - terminal-based MPD client
|
nncmpp - MPD client
|
||||||
|
|
||||||
Synopsis
|
Synopsis
|
||||||
--------
|
--------
|
||||||
|
@ -14,7 +14,7 @@ Synopsis
|
||||||
|
|
||||||
Description
|
Description
|
||||||
-----------
|
-----------
|
||||||
*nncmpp* is a terminal-based GUI-like MPD client. On start up it will welcome
|
*nncmpp* is a hybrid terminal/X11 MPD client. On start up it will welcome
|
||||||
you with an overview of all key bindings and the actions they're assigned to.
|
you with an overview of all key bindings and the actions they're assigned to.
|
||||||
Individual tabs can be switched to either using the mouse or by pressing *M-1*
|
Individual tabs can be switched to either using the mouse or by pressing *M-1*
|
||||||
through *M-9*, corresponding to the order they appear in.
|
through *M-9*, corresponding to the order they appear in.
|
||||||
|
@ -29,6 +29,10 @@ Options
|
||||||
Adds a "Debug" tab showing all MPD communication and other information
|
Adds a "Debug" tab showing all MPD communication and other information
|
||||||
that help debug various issues.
|
that help debug various issues.
|
||||||
|
|
||||||
|
*-x*, *--x11*::
|
||||||
|
Use an X11 interface even when run from a terminal.
|
||||||
|
Note that the application may be built with this feature disabled.
|
||||||
|
|
||||||
*-h*, *--help*::
|
*-h*, *--help*::
|
||||||
Display a help message and exit.
|
Display a help message and exit.
|
||||||
|
|
||||||
|
@ -48,6 +52,7 @@ settings = {
|
||||||
address = "~/.mpd/mpd.socket"
|
address = "~/.mpd/mpd.socket"
|
||||||
password = "<your password>"
|
password = "<your password>"
|
||||||
pulseaudio = on
|
pulseaudio = on
|
||||||
|
x11_font = "sans\\-serif-11"
|
||||||
}
|
}
|
||||||
colors = {
|
colors = {
|
||||||
normal = ""
|
normal = ""
|
||||||
|
@ -69,9 +74,9 @@ streams = {
|
||||||
}
|
}
|
||||||
....
|
....
|
||||||
|
|
||||||
Terminal attributes are accepted in a format similar to that of *git-config*(1),
|
Terminal attributes also apply to the GUI, and are accepted in a format similar
|
||||||
only named colours aren't supported. The distribution contains example colour
|
to that of *git-config*(1), only named colours aren't supported.
|
||||||
schemes in the _contrib_ directory.
|
The distribution contains example colour schemes in the _contrib_ directory.
|
||||||
|
|
||||||
// TODO: it seems like liberty should contain an includable snippet about
|
// TODO: it seems like liberty should contain an includable snippet about
|
||||||
// the format, which could form a part of nncmpp.conf(5).
|
// the format, which could form a part of nncmpp.conf(5).
|
||||||
|
|
Loading…
Reference in New Issue