Projects
Multimedia
ncmpc
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 10
View file
ncmpc.changes
Changed
@@ -1,4 +1,34 @@ ------------------------------------------------------------------- +Thu Oct 11 07:38:47 UTC 2018 - aloisio@gmx.com + +- Update to version 0.32 + * fix crash bug on queue page + * fix crash bug on lyrics page + * fix off-by-one buffer overflow bug + * fix manpage installation directory + * fix build breakages with some ncurses builds + * work around GCC 4.9 build failure + * remove doxygen support + * new dependency: Boost + * remove dependency on GLib + version 0.31 + * fix "No such song" in search screen + * fix progressbar when colors are disabled + * enable colors by default + * allow configuring per-style background colors + * keep current song in xterm title when MPD is paused + * load configuration from $XDG_CONFIG_HOME/ncmpc/config + * always show the screen list at the top + * fix memory leak + * require MPD 0.19 + +- Refreshed ncmpc-fix_meson_docdir.patch + +- Dropped ncmpc-fix_meson_gcc_config.patch and ncmpc-c++11.patch + +- Spec cleanup + +------------------------------------------------------------------- Sun Apr 15 17:27:33 UTC 2018 - pascal.bleser@opensuse.org - change build to use meson+ninja+sphinx
View file
ncmpc.spec
Changed
@@ -1,4 +1,7 @@ -# vim: set sw=4 ts=4 et: +# +# spec file for package ncmpc +# +# Copyright (c) 2018 Packman team: http://packman.links2linux.org/ # Copyright (c) 2012 Pascal Bleser <pascal.bleser@opensuse.org> # # All modifications and additions to the file contributed by third parties @@ -14,24 +17,18 @@ Name: ncmpc -Version: 0.30 -Release: 1 +Version: 0.32 +Release: 0 Summary: Curses Client for the Music Player Daemon -License: GPL-2.0+ +License: GPL-2.0-or-later Group: Productivity/Multimedia/Sound/Players -Source: http://www.musicpd.org/download/ncmpc/0/ncmpc-%{version}.tar.xz -Patch1: ncmpc-fix_meson_gcc_config.patch -Patch2: ncmpc-c++11.patch -Patch3: ncmpc-fix_meson_docdir.patch URL: http://mpd.wikia.com/wiki/Client:Ncmpc -BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot -%if %{suse_version} > 1500 -BuildRequires: gcc-c++ -%else -BuildRequires: gcc7-c++ -%endif +Source: https://www.musicpd.org/download/ncmpc/0/ncmpc-%{version}.tar.xz +Patch3: ncmpc-fix_meson_docdir.patch +BuildRequires: gcc-c++ >= 7 +BuildRequires: libboost_iostreams-devel >= 1.62 BuildRequires: ncurses-devel -BuildRequires: pkg-config +BuildRequires: pkgconfig BuildRequires: pkgconfig(glib-2.0) >= 2.30 BuildRequires: pkgconfig(libmpdclient) >= 2.9 BuildRequires: python-Sphinx @@ -39,73 +36,39 @@ BuildRequires: ninja %description -ncmpc is a curses client for the Music Player Daemon (MPD). ncmpc connects to -a MPD running on a machine on the local network, and controls this with an +ncmpc is a curses client for the Music Player Daemon (MPD). ncmpc connects to +a MPD running on a machine on the local network, and controls this with an interface inspired by cplay. %lang_package %prep %setup -q -%patch1 -%patch2 %patch3 %build -export PKG_CONFIG_PATH="$PWD/pc:$PKG_CONFIG_PATH" -mkdir pc -cat<<EOF > pc/ncursesw.pc -prefix=/usr -libdir=%{_libdir} - -Version: `rpm -q --qf='%{VERSION}' ncurses-devel` -Name: ncursesw -Description: ncursesw -Libs: -L\${libdir} -lncursesw -EOF -test -n "$(type -p g++)" && CXX=$_ -test -n "$(type -p g++-7)" && CXX=$_ - -CXX="${CXX}" \ -meson \ - --prefix '%{_prefix}' \ - --buildtype debug \ - -Dcurses=ncursesw \ - -Dmouse=true \ - -Dcolors=ncursesw \ - -Dmultibyte=true \ - -Dlocale=true \ - -Dnls=true \ - -Dlirc=false \ - -Dtcp=true \ - -Ddocumentation=false \ - . \ - output - -CXX="${CXX}" \ -ninja -C output %{?_smp_mflags} -v +%meson \ + -Dhtml_manual=false +%meson_build %install -DESTDIR='%{buildroot}' ninja -C output install -v - -%__rm -rf '%{buildroot}%{_datadir}/doc' +%meson_install %find_lang %{name} # install config.sample and keys.sample in /etc/ncmpc -%__install -D -m 644 doc/keys.sample $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/keys -%__install -D -m 644 doc/config.sample $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/config +install -D -m 644 doc/keys.sample %{buildroot}%{_sysconfdir}/%{name}/keys +install -D -m 644 doc/config.sample %{buildroot}%{_sysconfdir}/%{name}/config %files lang -f %{name}.lang -%defattr(-,root,root) %files -%defattr(-,root,root) -%doc AUTHORS COPYING NEWS README.rst +%license COPYING +%doc AUTHORS NEWS README.rst %doc doc/*.sample doc/ncmpc.lirc %{_bindir}/ncmpc %dir %{_sysconfdir}/%{name} %config %{_sysconfdir}/%{name}/keys %config %{_sysconfdir}/%{name}/config -%doc %{_mandir}/man1/ncmpc.1* +%doc %{_mandir}/man1/ncmpc.1%{ext_man} %changelog
View file
ncmpc-c++11.patch
Deleted
@@ -1,42 +0,0 @@ ---- src/BasicMarquee.cxx.orig 2018-04-15 19:07:11.477337687 +0200 -+++ src/BasicMarquee.cxx 2018-04-15 19:07:17.257355182 +0200 -@@ -76,5 +76,5 @@ - g_free(text); - text = nullptr; - -- g_free(std::exchange(text_utf8, nullptr)); -+ g_free(std::__exchange(text_utf8, nullptr)); - } ---- src/hscroll.cxx.orig 2018-04-15 19:07:28.293388583 +0200 -+++ src/hscroll.cxx 2018-04-15 19:07:33.585404598 +0200 -@@ -61,7 +61,7 @@ - basic.Clear(); - - if (source_id != 0) -- g_source_remove(std::exchange(source_id, 0)); -+ g_source_remove(std::__exchange(source_id, 0)); - } - - void ---- src/Page.hxx.orig 2018-04-15 19:07:38.285418822 +0200 -+++ src/Page.hxx 2018-04-15 19:07:42.657432051 +0200 -@@ -70,7 +70,7 @@ - } - - void Update(struct mpdclient &c) { -- Update(c, std::exchange(pending_events, 0)); -+ Update(c, std::__exchange(pending_events, 0)); - } - - protected: ---- src/filelist.hxx.orig 2018-04-15 19:06:49.833272166 +0200 -+++ src/filelist.hxx 2018-04-15 19:07:01.865308591 +0200 -@@ -38,7 +38,7 @@ - - FileListEntry(FileListEntry &&src) - :flags(src.flags), -- entity(std::exchange(src.entity, nullptr)) {} -+ entity(std::__exchange(src.entity, nullptr)) {} - - FileListEntry &operator=(FileListEntry &&src) { - using std::swap;
View file
ncmpc-fix_meson_docdir.patch
Changed
@@ -1,11 +1,29 @@ ---- meson.build.orig 2018-04-15 19:10:48.613989140 +0200 -+++ meson.build 2018-04-15 19:10:59.522020430 +0200 -@@ -380,7 +380,7 @@ +Index: meson.build +=================================================================== +--- meson.build.orig ++++ meson.build +@@ -384,8 +384,8 @@ ncmpc = executable('ncmpc', configure_file(output: 'config.h', configuration: conf) -docdir = join_paths(get_option('datadir'), 'doc', meson.project_name()) +-install_data('AUTHORS', 'COPYING', 'NEWS', 'README.rst', +docdir = join_paths(get_option('datadir'), 'doc', 'packages', meson.project_name()) - install_data('AUTHORS', 'COPYING', 'NEWS', 'README.rst', ++install_data('AUTHORS', 'NEWS', 'README.rst', 'doc/config.sample', 'doc/keys.sample', + 'doc/ncmpc.lirc', +Index: doc/meson.build +=================================================================== +--- doc/meson.build.orig ++++ doc/meson.build +@@ -20,7 +20,8 @@ if sphinx.found() + command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/man_doctrees', meson.current_source_dir(), '@OUTPUT@/man1'], + build_by_default: true, + install: true, +- install_dir: get_option('mandir'), ++ install_dir: get_option('datadir'), + ) + endif + endif ++
View file
ncmpc-fix_meson_gcc_config.patch
Deleted
@@ -1,11 +0,0 @@ ---- meson.build.orig 2018-04-15 18:36:58.559796835 +0200 -+++ meson.build 2018-04-15 18:37:04.971816648 +0200 -@@ -1,7 +1,7 @@ - project('ncmpc', 'cpp', - version: '0.30', - default_options: [ -- 'cpp_std=c++14' -+ 'cpp_std=c++11' - ], - license: 'GPLv2+', - )
View file
ncmpc-0.30.tar.xz/doc/doxygen.conf.in
Deleted
@@ -1,2441 +0,0 @@ -# Doxyfile 1.8.13 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project. -# -# All text after a double hash (##) is considered a comment and is placed in -# front of the TAG it is preceding. -# -# All text after a single hash (#) is considered a comment and will be ignored. -# The format is: -# TAG = value [value, ...] -# For lists, items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (\" \"). - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all text -# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv -# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv -# for the list of possible encodings. -# The default value is: UTF-8. - -DOXYFILE_ENCODING = UTF-8 - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by -# double-quotes, unless you are using Doxywizard) that should identify the -# project for which the documentation is generated. This name is used in the -# title of most generated pages and in a few other places. -# The default value is: My Project. - -PROJECT_NAME = ncmpc - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. This -# could be handy for archiving the generated documentation or if some version -# control system is used. - -PROJECT_NUMBER = @VERSION@ - -# Using the PROJECT_BRIEF tag one can provide an optional one line description -# for a project that appears at the top of each page and should give viewer a -# quick idea about the purpose of the project. Keep the description short. - -PROJECT_BRIEF = - -# With the PROJECT_LOGO tag one can specify a logo or an icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy -# the logo to the output directory. - -PROJECT_LOGO = - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path -# into which the generated documentation will be written. If a relative path is -# entered, it will be relative to the location where doxygen was started. If -# left blank the current directory will be used. - -OUTPUT_DIRECTORY = doc - -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this -# option can be useful when feeding doxygen a huge amount of source files, where -# putting all generated files in the same directory would otherwise causes -# performance problems for the file system. -# The default value is: NO. - -CREATE_SUBDIRS = NO - -# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII -# characters to appear in the names of generated files. If set to NO, non-ASCII -# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode -# U+3044. -# The default value is: NO. - -ALLOW_UNICODE_NAMES = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. -# The default value is: English. - -OUTPUT_LANGUAGE = English - -# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member -# descriptions after the members that are listed in the file and class -# documentation (similar to Javadoc). Set to NO to disable this. -# The default value is: YES. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief -# description of a member or function before the detailed description -# -# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. -# The default value is: YES. - -REPEAT_BRIEF = YES - -# This tag implements a quasi-intelligent brief description abbreviator that is -# used to form the text in various listings. Each string in this list, if found -# as the leading text of the brief description, will be stripped from the text -# and the result, after processing the whole list, is used as the annotated -# text. Otherwise, the brief description is used as-is. If left blank, the -# following values are used ($name is automatically replaced with the name of -# the entity):The $name class, The $name widget, The $name file, is, provides, -# specifies, contains, represents, a, an and the. - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# doxygen will generate a detailed section even if there is only a brief -# description. -# The default value is: NO. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. -# The default value is: NO. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path -# before files name in the file list and in the header files. If set to NO the -# shortest path that makes the file name unique will be used -# The default value is: YES. - -FULL_PATH_NAMES = YES - -# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. -# Stripping is only done if one of the specified strings matches the left-hand -# part of the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the path to -# strip. -# -# Note that you can specify absolute paths here, but also relative paths, which -# will be relative from the directory where doxygen is started. -# This tag requires that the tag FULL_PATH_NAMES is set to YES. - -STRIP_FROM_PATH = @abs_top_srcdir@ - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the -# path mentioned in the documentation of a class, which tells the reader which -# header file to include in order to use a class. If left blank only the name of -# the header file containing the class definition is used. Otherwise one should -# specify the list of include paths that are normally passed to the compiler -# using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but -# less readable) file names. This can be useful is your file systems doesn't -# support long names like on DOS, Mac, or CD-ROM. -# The default value is: NO. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the -# first line (until the first dot) of a Javadoc-style comment as the brief -# description. If set to NO, the Javadoc-style will behave just like regular Qt- -# style comments (thus requiring an explicit @brief command for a brief -# description.) -# The default value is: NO. - -JAVADOC_AUTOBRIEF = NO - -# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first -# line (until the first dot) of a Qt-style comment as the brief description. If -# set to NO, the Qt-style will behave just like regular Qt-style comments (thus -# requiring an explicit \brief command for a brief description.) -# The default value is: NO. - -QT_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a -# multi-line C++ special comment block (i.e. a block of //! or /// comments) as -# a brief description. This used to be the default behavior. The new default is -# to treat a multi-line C++ comment block as a detailed description. Set this -# tag to YES if you prefer the old behavior instead. -# -# Note that setting this tag to YES also means that rational rose comments are -# not recognized any more. -# The default value is: NO. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the -# documentation from any documented member that it re-implements. -# The default value is: YES. - -INHERIT_DOCS = YES - -# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new -# page for each member. If set to NO, the documentation of a member will be part -# of the file/class/namespace that contains it. -# The default value is: NO. - -SEPARATE_MEMBER_PAGES = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen -# uses this value to replace tabs by spaces in code fragments. -# Minimum value: 1, maximum value: 16, default value: 4. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that act as commands in -# the documentation. An alias has the form: -# name=value -# For example adding -# "sideeffect=@par Side Effects:\n" -# will allow you to put the command \sideeffect (or @sideeffect) in the -# documentation, which will result in a user-defined paragraph with heading -# "Side Effects:". You can put \n's in the value part of an alias to insert -# newlines. - -ALIASES = - -# This tag can be used to specify a number of word-keyword mappings (TCL only). -# A mapping has the form "name=value". For example adding "class=itcl::class" -# will allow you to use the command class in the itcl::class meaning. - -TCL_SUBST = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources -# only. Doxygen will then generate output that is more tailored for C. For -# instance, some of the names that are used will be different. The list of all -# members will be omitted, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_FOR_C = YES - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or -# Python sources only. Doxygen will then generate output that is more tailored -# for that language. For instance, namespaces will be presented as packages, -# qualified scopes will look different, etc. -# The default value is: NO. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources. Doxygen will then generate output that is tailored for Fortran. -# The default value is: NO. - -OPTIMIZE_FOR_FORTRAN = NO - -# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for VHDL. -# The default value is: NO. - -OPTIMIZE_OUTPUT_VHDL = NO - -# Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given -# extension. Doxygen has a built-in mapping, but you can override or extend it -# using this tag. The format is ext=language, where ext is a file extension, and -# language is one of the parsers supported by doxygen: IDL, Java, Javascript, -# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: -# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: -# Fortran. In the later case the parser tries to guess whether the code is fixed -# or free formatted code, this is the default for Fortran type files), VHDL. For -# instance to make doxygen treat .inc files as Fortran files (default is PHP), -# and .f files as C (default is Fortran), use: inc=Fortran f=C. -# -# Note: For files without extension you can use no_extension as a placeholder. -# -# Note that for custom extensions you also need to set FILE_PATTERNS otherwise -# the files are not read by doxygen. - -EXTENSION_MAPPING = - -# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments -# according to the Markdown format, which allows for more readable -# documentation. See http://daringfireball.net/projects/markdown/ for details. -# The output of markdown processing is further processed by doxygen, so you can -# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in -# case of backward compatibilities issues. -# The default value is: YES. - -MARKDOWN_SUPPORT = YES - -# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up -# to that level are automatically included in the table of contents, even if -# they do not have an id attribute. -# Note: This feature currently applies only to Markdown headings. -# Minimum value: 0, maximum value: 99, default value: 0. -# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. - -TOC_INCLUDE_HEADINGS = 0 - -# When enabled doxygen tries to link words that correspond to documented -# classes, or namespaces to their corresponding documentation. Such a link can -# be prevented in individual cases by putting a % sign in front of the word or -# globally by setting AUTOLINK_SUPPORT to NO. -# The default value is: YES. - -AUTOLINK_SUPPORT = YES - -# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should set this -# tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. -# The default value is: NO. - -BUILTIN_STL_SUPPORT = NO - -# If you use Microsoft's C++/CLI language, you should set this option to YES to -# enable parsing support. -# The default value is: NO. - -CPP_CLI_SUPPORT = NO - -# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. -# The default value is: NO. - -SIP_SUPPORT = NO - -# For Microsoft's IDL there are propget and propput attributes to indicate -# getter and setter methods for a property. Setting this option to YES will make -# doxygen to replace the get and set methods by a property in the documentation. -# This will only work if the methods are indeed getting or setting a simple -# type. If this is not the case, or you want to show the methods anyway, you -# should set this option to NO. -# The default value is: YES. - -IDL_PROPERTY_SUPPORT = YES - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. -# The default value is: NO. - -DISTRIBUTE_GROUP_DOC = NO - -# If one adds a struct or class to a group and this option is enabled, then also -# any nested class or struct is added to the same group. By default this option -# is disabled and one has to add nested compounds explicitly via \ingroup. -# The default value is: NO. - -GROUP_NESTED_COMPOUNDS = NO - -# Set the SUBGROUPING tag to YES to allow class member groups of the same type -# (for instance a group of public functions) to be put as a subgroup of that -# type (e.g. under the Public Functions section). Set it to NO to prevent -# subgrouping. Alternatively, this can be done per class using the -# \nosubgrouping command. -# The default value is: YES. - -SUBGROUPING = YES - -# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions -# are shown inside the group in which they are included (e.g. using \ingroup) -# instead of on a separate page (for HTML and Man pages) or section (for LaTeX -# and RTF). -# -# Note that this feature does not work in combination with -# SEPARATE_MEMBER_PAGES. -# The default value is: NO. - -INLINE_GROUPED_CLASSES = NO - -# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions -# with only public data fields or simple typedef fields will be shown inline in -# the documentation of the scope in which they are defined (i.e. file, -# namespace, or group documentation), provided this scope is documented. If set -# to NO, structs, classes, and unions are shown on a separate page (for HTML and -# Man pages) or section (for LaTeX and RTF). -# The default value is: NO. - -INLINE_SIMPLE_STRUCTS = NO - -# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or -# enum is documented as struct, union, or enum with the name of the typedef. So -# typedef struct TypeS {} TypeT, will appear in the documentation as a struct -# with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically be -# useful for C code in case the coding convention dictates that all compound -# types are typedef'ed and only the typedef is referenced, never the tag name. -# The default value is: NO. - -TYPEDEF_HIDES_STRUCT = NO - -# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This -# cache is used to resolve symbols given their name and scope. Since this can be -# an expensive process and often the same symbol appears multiple times in the -# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small -# doxygen will become slower. If the cache is too large, memory is wasted. The -# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range -# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 -# symbols. At the end of a run doxygen will report the cache usage and suggest -# the optimal cache size from a speed point of view. -# Minimum value: 0, maximum value: 9, default value: 0. - -LOOKUP_CACHE_SIZE = 0 - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in -# documentation are documented, even if no documentation was available. Private -# class members and static file members will be hidden unless the -# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. -# Note: This will also disable the warnings about undocumented members that are -# normally produced when WARNINGS is set to YES. -# The default value is: NO. - -EXTRACT_ALL = YES - -# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will -# be included in the documentation. -# The default value is: NO. - -EXTRACT_PRIVATE = NO - -# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal -# scope will be included in the documentation. -# The default value is: NO. - -EXTRACT_PACKAGE = NO - -# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be -# included in the documentation. -# The default value is: NO. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined -# locally in source files will be included in the documentation. If set to NO, -# only classes defined in header files are included. Does not have any effect -# for Java sources. -# The default value is: YES. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. If set to YES, local methods, -# which are defined in the implementation section but not in the interface are -# included in the documentation. If set to NO, only methods in the interface are -# included. -# The default value is: NO. - -EXTRACT_LOCAL_METHODS = NO - -# If this flag is set to YES, the members of anonymous namespaces will be -# extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base name of -# the file that contains the anonymous namespace. By default anonymous namespace -# are hidden. -# The default value is: NO. - -EXTRACT_ANON_NSPACES = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all -# undocumented members inside documented classes or files. If set to NO these -# members will be included in the various overviews, but no documentation -# section is generated. This option has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_MEMBERS = NO - -# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. If set -# to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. -# The default value is: NO. - -HIDE_UNDOC_CLASSES = NO - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend -# (class|struct|union) declarations. If set to NO, these declarations will be -# included in the documentation. -# The default value is: NO. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any -# documentation blocks found inside the body of a function. If set to NO, these -# blocks will be appended to the function's detailed documentation block. -# The default value is: NO. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation that is typed after a -# \internal command is included. If the tag is set to NO then the documentation -# will be excluded. Set it to YES to include the internal documentation. -# The default value is: NO. - -INTERNAL_DOCS = NO - -# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file -# names in lower-case letters. If set to YES, upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. -# The default value is: system dependent. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with -# their full class and namespace scopes in the documentation. If set to YES, the -# scope will be hidden. -# The default value is: NO. - -HIDE_SCOPE_NAMES = NO - -# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will -# append additional text to a page's title, such as Class Reference. If set to -# YES the compound reference will be hidden. -# The default value is: NO. - -HIDE_COMPOUND_REFERENCE= NO - -# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of -# the files that are included by a file in the documentation of that file. -# The default value is: YES. - -SHOW_INCLUDE_FILES = YES - -# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each -# grouped member an include statement to the documentation, telling the reader -# which file to include in order to use the member. -# The default value is: NO. - -SHOW_GROUPED_MEMB_INC = NO - -# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include -# files with double quotes in the documentation rather than with sharp brackets. -# The default value is: NO. - -FORCE_LOCAL_INCLUDES = NO - -# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the -# documentation for inline members. -# The default value is: YES. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the -# (detailed) documentation of file and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. -# The default value is: YES. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief -# descriptions of file, namespace and class members alphabetically by member -# name. If set to NO, the members will appear in declaration order. Note that -# this will also influence the order of the classes in the class list. -# The default value is: NO. - -SORT_BRIEF_DOCS = NO - -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the -# (brief and detailed) documentation of class members so that constructors and -# destructors are listed first. If set to NO the constructors will appear in the -# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. -# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief -# member documentation. -# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting -# detailed member documentation. -# The default value is: NO. - -SORT_MEMBERS_CTORS_1ST = NO - -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy -# of group names into alphabetical order. If set to NO the group names will -# appear in their defined order. -# The default value is: NO. - -SORT_GROUP_NAMES = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by -# fully-qualified names, including namespaces. If set to NO, the class list will -# be sorted only by class name, not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the alphabetical -# list. -# The default value is: NO. - -SORT_BY_SCOPE_NAME = NO - -# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper -# type resolution of all parameters of a function it will reject a match between -# the prototype and the implementation of a member function even if there is -# only one candidate or it is obvious which candidate to choose by doing a -# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still -# accept a match between prototype and implementation in such cases. -# The default value is: NO. - -STRICT_PROTO_MATCHING = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo -# list. This list is created by putting \todo commands in the documentation. -# The default value is: YES. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test -# list. This list is created by putting \test commands in the documentation. -# The default value is: YES. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug -# list. This list is created by putting \bug commands in the documentation. -# The default value is: YES. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) -# the deprecated list. This list is created by putting \deprecated commands in -# the documentation. -# The default value is: YES. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional documentation -# sections, marked by \if <section_label> ... \endif and \cond <section_label> -# ... \endcond blocks. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the -# initial value of a variable or macro / define can have for it to appear in the -# documentation. If the initializer consists of more lines than specified here -# it will be hidden. Use a value of 0 to hide initializers completely. The -# appearance of the value of individual variables and macros / defines can be -# controlled using \showinitializer or \hideinitializer command in the -# documentation regardless of this setting. -# Minimum value: 0, maximum value: 10000, default value: 30. - -MAX_INITIALIZER_LINES = 30 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at -# the bottom of the documentation of classes and structs. If set to YES, the -# list will mention the files that were used to generate the documentation. -# The default value is: YES. - -SHOW_USED_FILES = YES - -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This -# will remove the Files entry from the Quick Index and from the Folder Tree View -# (if specified). -# The default value is: YES. - -SHOW_FILES = YES - -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces -# page. This will remove the Namespaces entry from the Quick Index and from the -# Folder Tree View (if specified). -# The default value is: YES. - -SHOW_NAMESPACES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from -# the version control system). Doxygen will invoke the program by executing (via -# popen()) the command command input-file, where command is the value of the -# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided -# by doxygen. Whatever the program writes to standard output is used as the file -# version. For an example see the documentation. - -FILE_VERSION_FILTER = - -# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed -# by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. To create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. You can -# optionally specify a file name after the option, if omitted DoxygenLayout.xml -# will be used as the name of the layout file. -# -# Note that if you run doxygen from a directory containing a file called -# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE -# tag is left empty. - -LAYOUT_FILE = - -# The CITE_BIB_FILES tag can be used to specify one or more bib files containing -# the reference definitions. This must be a list of .bib files. The .bib -# extension is automatically appended if omitted. This requires the bibtex tool -# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. -# For LaTeX the style of the bibliography can be controlled using -# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the -# search path. See also \cite for info how to create references. - -CITE_BIB_FILES = - -#--------------------------------------------------------------------------- -# Configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated to -# standard output by doxygen. If QUIET is set to YES this implies that the -# messages are off. -# The default value is: NO. - -QUIET = YES - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES -# this implies that the warnings are on. -# -# Tip: Turn warnings on while writing the documentation. -# The default value is: YES. - -WARNINGS = YES - -# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate -# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag -# will automatically be disabled. -# The default value is: YES. - -WARN_IF_UNDOCUMENTED = YES - -# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some parameters -# in a documented function, or documenting parameters that don't exist or using -# markup commands wrongly. -# The default value is: YES. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that -# are documented, but have no documentation for their parameters or return -# value. If set to NO, doxygen will only warn about wrong or incomplete -# parameter documentation, but not about the absence of documentation. -# The default value is: NO. - -WARN_NO_PARAMDOC = NO - -# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when -# a warning is encountered. -# The default value is: NO. - -WARN_AS_ERROR = NO - -# The WARN_FORMAT tag determines the format of the warning messages that doxygen -# can produce. The string should contain the $file, $line, and $text tags, which -# will be replaced by the file and line number from which the warning originated -# and the warning text. Optionally the format may contain $version, which will -# be replaced by the version of the file (if it could be obtained via -# FILE_VERSION_FILTER) -# The default value is: $file:$line: $text. - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning and error -# messages should be written. If left blank the output is written to standard -# error (stderr). - -WARN_LOGFILE = - -#--------------------------------------------------------------------------- -# Configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag is used to specify the files and/or directories that contain -# documented source files. You may enter file names like myfile.cpp or -# directories like /usr/src/myproject. Separate the files or directories with -# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING -# Note: If this tag is empty the current directory is searched. - -INPUT = @abs_top_srcdir@/src/ - -# This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses -# libiconv (or the iconv built into libc) for the transcoding. See the libiconv -# documentation (see: http://www.gnu.org/software/libiconv) for the list of -# possible encodings. -# The default value is: UTF-8. - -INPUT_ENCODING = UTF-8 - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and -# *.h) to filter out the source-files in the directories. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# read by doxygen. -# -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, -# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, -# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. - -FILE_PATTERNS = *.h *.hxx - -# The RECURSIVE tag can be used to specify whether or not subdirectories should -# be searched for input files as well. -# The default value is: NO. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should be -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. -# -# Note that relative paths are relative to the directory from which doxygen is -# run. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or -# directories that are symbolic links (a Unix file system feature) are excluded -# from the input. -# The default value is: NO. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories for example use the pattern */test/* - -EXCLUDE_PATTERNS = - -# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names -# (namespaces, classes, functions, etc.) that should be excluded from the -# output. The symbol name can be a fully qualified name, a word, or if the -# wildcard * is used, a substring. Examples: ANamespace, AClass, -# AClass::ANamespace, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* - -EXCLUDE_SYMBOLS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or directories -# that contain example code fragments that are included (see the \include -# command). - -EXAMPLE_PATH = - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and -# *.h) to filter out the source-files in the directories. If left blank all -# files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude commands -# irrespective of the value of the RECURSIVE tag. -# The default value is: NO. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or directories -# that contain images that are to be included in the documentation (see the -# \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command: -# -# <filter> <input-file> -# -# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the -# name of an input file. Doxygen will then use the output that the filter -# program writes to standard output. If FILTER_PATTERNS is specified, this tag -# will be ignored. -# -# Note that the filter must not add or remove lines; it is applied before the -# code is scanned, but not when the output code is generated. If lines are added -# or removed, the anchors will not be placed correctly. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: pattern=filter -# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how -# filters are used. If the FILTER_PATTERNS tag is empty or if none of the -# patterns match the file name, INPUT_FILTER is applied. -# -# Note that for custom extensions or not directly supported extensions you also -# need to set EXTENSION_MAPPING for the extension otherwise the files are not -# properly processed by doxygen. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will also be used to filter the input files that are used for -# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). -# The default value is: NO. - -FILTER_SOURCE_FILES = NO - -# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file -# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and -# it is also possible to disable source filtering for a specific pattern using -# *.ext= (so without naming a filter). -# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. - -FILTER_SOURCE_PATTERNS = - -# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that -# is part of the input, its contents will be placed on the main page -# (index.html). This can be useful if you have a project on for instance GitHub -# and want to reuse the introduction page also for the doxygen output. - -USE_MDFILE_AS_MAINPAGE = - -#--------------------------------------------------------------------------- -# Configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will be -# generated. Documented entities will be cross-referenced with these sources. -# -# Note: To get rid of all source code in the generated output, make sure that -# also VERBATIM_HEADERS is set to NO. -# The default value is: NO. - -SOURCE_BROWSER = NO - -# Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. -# The default value is: NO. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any -# special comment blocks from generated source code fragments. Normal C, C++ and -# Fortran comments will always remain visible. -# The default value is: YES. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES then for each documented -# function all documented functions referencing it will be listed. -# The default value is: NO. - -REFERENCED_BY_RELATION = NO - -# If the REFERENCES_RELATION tag is set to YES then for each documented function -# all documented entities called/used by that function will be listed. -# The default value is: NO. - -REFERENCES_RELATION = NO - -# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set -# to YES then the hyperlinks from functions in REFERENCES_RELATION and -# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will -# link to the documentation. -# The default value is: YES. - -REFERENCES_LINK_SOURCE = YES - -# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the -# source code will show a tooltip with additional information such as prototype, -# brief description and links to the definition and documentation. Since this -# will make the HTML file larger and loading of large files a bit slower, you -# can opt to disable this feature. -# The default value is: YES. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -SOURCE_TOOLTIPS = YES - -# If the USE_HTAGS tag is set to YES then the references to source code will -# point to the HTML generated by the htags(1) tool instead of doxygen built-in -# source browser. The htags tool is part of GNU's global source tagging system -# (see http://www.gnu.org/software/global/global.html). You will need version -# 4.8.6 or higher. -# -# To use it do the following: -# - Install the latest version of global -# - Enable SOURCE_BROWSER and USE_HTAGS in the config file -# - Make sure the INPUT points to the root of the source tree -# - Run doxygen as normal -# -# Doxygen will invoke htags (and that will in turn invoke gtags), so these -# tools must be available from the command line (i.e. in the search path). -# -# The result: instead of the source browser generated by doxygen, the links to -# source code will now point to the output of htags. -# The default value is: NO. -# This tag requires that the tag SOURCE_BROWSER is set to YES. - -USE_HTAGS = NO - -# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a -# verbatim copy of the header file for each class for which an include is -# specified. Set to NO to disable this. -# See also: Section \class. -# The default value is: YES. - -VERBATIM_HEADERS = YES - -# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the -# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the -# cost of reduced performance. This can be particularly helpful with template -# rich C++ code for which doxygen's built-in parser lacks the necessary type -# information. -# Note: The availability of this option depends on whether or not doxygen was -# generated with the -Duse-libclang=ON option for CMake. -# The default value is: NO. - -CLANG_ASSISTED_PARSING = NO - -# If clang assisted parsing is enabled you can provide the compiler with command -# line options that you would normally use when invoking the compiler. Note that -# the include paths will already be set by doxygen for the files and directories -# specified with INPUT and INCLUDE_PATH. -# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. - -CLANG_OPTIONS = - -#--------------------------------------------------------------------------- -# Configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all -# compounds will be generated. Enable this if the project contains a lot of -# classes, structs, unions or interfaces. -# The default value is: YES. - -ALPHABETICAL_INDEX = YES - -# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in -# which the alphabetical index list will be split. -# Minimum value: 1, maximum value: 20, default value: 5. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -COLS_IN_ALPHA_INDEX = 5 - -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. -# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output -# The default value is: YES. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_OUTPUT = api - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each -# generated HTML page (for example: .htm, .php, .asp). -# The default value is: .html. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a user-defined HTML header file for -# each generated HTML page. If the tag is left blank doxygen will generate a -# standard header. -# -# To get valid HTML the header file that includes any scripts and style sheets -# that doxygen needs, which is dependent on the configuration options used (e.g. -# the setting GENERATE_TREEVIEW). It is highly recommended to start with a -# default header using -# doxygen -w html new_header.html new_footer.html new_stylesheet.css -# YourConfigFile -# and then modify the file new_header.html. See also section "Doxygen usage" -# for information on how to generate the default header that doxygen normally -# uses. -# Note: The header is subject to change so you typically have to regenerate the -# default header when upgrading to a newer version of doxygen. For a description -# of the possible markers and block names see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each -# generated HTML page. If the tag is left blank doxygen will generate a standard -# footer. See HTML_HEADER for more information on how to generate a default -# footer and what special commands can be used inside the footer. See also -# section "Doxygen usage" for information on how to generate the default footer -# that doxygen normally uses. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style -# sheet that is used by each HTML page. It can be used to fine-tune the look of -# the HTML output. If left blank doxygen will generate a default style sheet. -# See also section "Doxygen usage" for information on how to generate the style -# sheet that doxygen normally uses. -# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as -# it is more robust and this tag (HTML_STYLESHEET) will in the future become -# obsolete. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_STYLESHEET = - -# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# cascading style sheets that are included after the standard style sheets -# created by doxygen. Using this option one can overrule certain style aspects. -# This is preferred over using HTML_STYLESHEET since it does not replace the -# standard style sheet and is therefore more robust against future updates. -# Doxygen will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_STYLESHEET = - -# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the HTML output directory. Note -# that these files will be copied to the base HTML output directory. Use the -# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these -# files. In the HTML_STYLESHEET file, use the file name only. Also note that the -# files will be copied as-is; there are no commands or markers available. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_EXTRA_FILES = - -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen -# will adjust the colors in the style sheet and background images according to -# this color. Hue is specified as an angle on a colorwheel, see -# http://en.wikipedia.org/wiki/Hue for more information. For instance the value -# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 -# purple, and 360 is red again. -# Minimum value: 0, maximum value: 359, default value: 220. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_HUE = 220 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors -# in the HTML output. For a value of 0 the output will use grayscales only. A -# value of 255 will produce the most vivid colors. -# Minimum value: 0, maximum value: 255, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_SAT = 100 - -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the -# luminance component of the colors in the HTML output. Values below 100 -# gradually make the output lighter, whereas values above 100 make the output -# darker. The value divided by 100 is the actual gamma applied, so 80 represents -# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not -# change the gamma. -# Minimum value: 40, maximum value: 240, default value: 80. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_COLORSTYLE_GAMMA = 80 - -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = YES - -# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML -# documentation will contain sections that can be hidden and shown after the -# page has loaded. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_DYNAMIC_SECTIONS = NO - -# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries -# shown in the various tree structured indices initially; the user can expand -# and collapse entries dynamically later on. Doxygen will expand the tree to -# such a level that at most the specified number of entries are visible (unless -# a fully collapsed tree already exceeds this amount). So setting the number of -# entries 1 will produce a full collapsed tree by default. 0 is a special value -# representing an infinite number of entries and will result in a full expanded -# tree by default. -# Minimum value: 0, maximum value: 9999, default value: 100. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_INDEX_NUM_ENTRIES = 100 - -# If the GENERATE_DOCSET tag is set to YES, additional index files will be -# generated that can be used as input for Apple's Xcode 3 integrated development -# environment (see: http://developer.apple.com/tools/xcode/), introduced with -# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a -# Makefile in the HTML output directory. Running make will produce the docset in -# that directory and running make install will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at -# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html -# for more information. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_DOCSET = NO - -# This tag determines the name of the docset feed. A documentation feed provides -# an umbrella under which multiple documentation sets from a single provider -# (such as a company or product suite) can be grouped. -# The default value is: Doxygen generated docs. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_FEEDNAME = "Doxygen generated docs" - -# This tag specifies a string that should uniquely identify the documentation -# set bundle. This should be a reverse domain-name style string, e.g. -# com.mycompany.MyDocSet. Doxygen will append .docset to the name. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_BUNDLE_ID = org.doxygen.Project - -# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify -# the documentation publisher. This should be a reverse domain-name style -# string, e.g. com.mycompany.MyDocSet.documentation. -# The default value is: org.doxygen.Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_ID = org.doxygen.Publisher - -# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. -# The default value is: Publisher. -# This tag requires that the tag GENERATE_DOCSET is set to YES. - -DOCSET_PUBLISHER_NAME = Publisher - -# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three -# additional HTML index files: index.hhp, index.hhc, and index.hhk. The -# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop -# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on -# Windows. -# -# The HTML Help Workshop contains a compiler that can convert all HTML output -# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML -# files are now used as the Windows 98 help format, and will replace the old -# Windows help format (.hlp) on all Windows platforms in the future. Compressed -# HTML files also contain an index, a table of contents, and you can search for -# words in the documentation. The HTML workshop also contains a viewer for -# compressed HTML files. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_HTMLHELP = NO - -# The CHM_FILE tag can be used to specify the file name of the resulting .chm -# file. You can add a path in front of the file if the result should not be -# written to the html output directory. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_FILE = - -# The HHC_LOCATION tag can be used to specify the location (absolute path -# including file name) of the HTML help compiler (hhc.exe). If non-empty, -# doxygen will try to run the HTML help compiler on the generated index.hhp. -# The file has to be specified with full path. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -HHC_LOCATION = - -# The GENERATE_CHI flag controls if a separate .chi index file is generated -# (YES) or that it should be included in the master .chm file (NO). -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -GENERATE_CHI = NO - -# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) -# and project file content. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -CHM_INDEX_ENCODING = - -# The BINARY_TOC flag controls whether a binary table of contents is generated -# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it -# enables the Previous and Next buttons. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members to -# the table of contents of the HTML help documentation and to the tree view. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTMLHELP is set to YES. - -TOC_EXPAND = NO - -# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that -# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help -# (.qch) of the generated HTML documentation. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_QHP = NO - -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify -# the file name of the resulting .qch file. The path specified is relative to -# the HTML output folder. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QCH_FILE = - -# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help -# Project output. For more information please see Qt Help Project / Namespace -# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_NAMESPACE = org.doxygen.Project - -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt -# Help Project output. For more information please see Qt Help Project / Virtual -# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- -# folders). -# The default value is: doc. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_VIRTUAL_FOLDER = doc - -# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom -# filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_NAME = - -# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see Qt Help Project / Custom -# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- -# filters). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_CUST_FILTER_ATTRS = - -# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's filter section matches. Qt Help Project / Filter Attributes (see: -# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHP_SECT_FILTER_ATTRS = - -# The QHG_LOCATION tag can be used to specify the location of Qt's -# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the -# generated .qhp file. -# This tag requires that the tag GENERATE_QHP is set to YES. - -QHG_LOCATION = - -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be -# generated, together with the HTML files, they form an Eclipse help plugin. To -# install this plugin and make it available under the help contents menu in -# Eclipse, the contents of the directory containing the HTML and XML files needs -# to be copied into the plugins directory of eclipse. The name of the directory -# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. -# After copying Eclipse needs to be restarted before the help appears. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_ECLIPSEHELP = NO - -# A unique identifier for the Eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have this -# name. Each documentation set should have its own identifier. -# The default value is: org.doxygen.Project. -# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. - -ECLIPSE_DOC_ID = org.doxygen.Project - -# If you want full control over the layout of the generated HTML pages it might -# be necessary to disable the index and replace it with your own. The -# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top -# of each HTML page. A value of NO enables the index and the value YES disables -# it. Since the tabs in the index contain the same information as the navigation -# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -DISABLE_INDEX = NO - -# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. If the tag -# value is set to YES, a side panel will be generated containing a tree-like -# index structure (just like the one that is generated for HTML Help). For this -# to work a browser that supports JavaScript, DHTML, CSS and frames is required -# (i.e. any modern browser). Windows users are probably better off using the -# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can -# further fine-tune the look of the index. As an example, the default style -# sheet generated by doxygen has an example that shows how to put an image at -# the root of the tree instead of the PROJECT_NAME. Since the tree basically has -# the same information as the tab index, you could consider setting -# DISABLE_INDEX to YES when enabling this option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -GENERATE_TREEVIEW = NO - -# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that -# doxygen will group on one line in the generated HTML documentation. -# -# Note that a value of 0 will completely suppress the enum values from appearing -# in the overview section. -# Minimum value: 0, maximum value: 20, default value: 4. -# This tag requires that the tag GENERATE_HTML is set to YES. - -ENUM_VALUES_PER_LINE = 4 - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used -# to set the initial width (in pixels) of the frame in which the tree is shown. -# Minimum value: 0, maximum value: 1500, default value: 250. -# This tag requires that the tag GENERATE_HTML is set to YES. - -TREEVIEW_WIDTH = 250 - -# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to -# external symbols imported via tag files in a separate window. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -EXT_LINKS_IN_WINDOW = NO - -# Use this tag to change the font size of LaTeX formulas included as images in -# the HTML documentation. When you change the font size after a successful -# doxygen run you need to manually remove any form_*.png images from the HTML -# output directory to force them to be regenerated. -# Minimum value: 8, maximum value: 50, default value: 10. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_FONTSIZE = 10 - -# Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - -# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see -# http://www.mathjax.org) which uses client side Javascript for the rendering -# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX -# installed or if you want to formulas look prettier in the HTML output. When -# enabled you may also need to install MathJax separately and configure the path -# to it using the MATHJAX_RELPATH option. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -USE_MATHJAX = NO - -# When MathJax is enabled you can set the default output format to be used for -# the MathJax output. See the MathJax site (see: -# http://docs.mathjax.org/en/latest/output.html) for more details. -# Possible values are: HTML-CSS (which is slower, but has the best -# compatibility), NativeMML (i.e. MathML) and SVG. -# The default value is: HTML-CSS. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_FORMAT = HTML-CSS - -# When MathJax is enabled you need to specify the location relative to the HTML -# output directory using the MATHJAX_RELPATH option. The destination directory -# should contain the MathJax.js script. For instance, if the mathjax directory -# is located at the same level as the HTML output directory, then -# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax -# Content Delivery Network so you can quickly see the result without installing -# MathJax. However, it is strongly recommended to install a local copy of -# MathJax from http://www.mathjax.org before deployment. -# The default value is: http://cdn.mathjax.org/mathjax/latest. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_RELPATH = http://www.mathjax.org/mathjax - -# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax -# extension names that should be enabled during MathJax rendering. For example -# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_EXTENSIONS = - -# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces -# of code that will be used on startup of the MathJax code. See the MathJax site -# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an -# example see the documentation. -# This tag requires that the tag USE_MATHJAX is set to YES. - -MATHJAX_CODEFILE = - -# When the SEARCHENGINE tag is enabled doxygen will generate a search box for -# the HTML output. The underlying search engine uses javascript and DHTML and -# should work on any modern browser. Note that when using HTML help -# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) -# there is already a search function so this one should typically be disabled. -# For large projects the javascript based search engine can be slow, then -# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to -# search using the keyboard; to jump to the search box use <access key> + S -# (what the <access key> is depends on the OS and browser, but it is typically -# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down -# key> to jump into the search results window, the results can be navigated -# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel -# the search. The filter options can be selected when the cursor is inside the -# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> -# to select a filter and <Enter> or <escape> to activate or cancel the filter -# option. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -SEARCHENGINE = YES - -# When the SERVER_BASED_SEARCH tag is enabled the search engine will be -# implemented using a web server instead of a web client using Javascript. There -# are two flavors of web server based searching depending on the EXTERNAL_SEARCH -# setting. When disabled, doxygen will generate a PHP script for searching and -# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing -# and searching needs to be provided by external tools. See the section -# "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SERVER_BASED_SEARCH = NO - -# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP -# script for searching. Instead the search results are written to an XML file -# which needs to be processed by an external indexer. Doxygen will invoke an -# external search engine pointed to by the SEARCHENGINE_URL option to obtain the -# search results. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). -# -# See the section "External Indexing and Searching" for details. -# The default value is: NO. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH = NO - -# The SEARCHENGINE_URL should point to a search engine hosted by a web server -# which will return the search results when EXTERNAL_SEARCH is enabled. -# -# Doxygen ships with an example indexer (doxyindexer) and search engine -# (doxysearch.cgi) which are based on the open source search engine library -# Xapian (see: http://xapian.org/). See the section "External Indexing and -# Searching" for details. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHENGINE_URL = - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed -# search data is written to a file for indexing by an external tool. With the -# SEARCHDATA_FILE tag the name of this file can be specified. -# The default file is: searchdata.xml. -# This tag requires that the tag SEARCHENGINE is set to YES. - -SEARCHDATA_FILE = searchdata.xml - -# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the -# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is -# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple -# projects and redirect the results back to the right project. -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTERNAL_SEARCH_ID = - -# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen -# projects other than the one defined by this configuration file, but that are -# all added to the same external search index. Each project needs to have a -# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of -# to a relative location where the documentation can be found. The format is: -# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... -# This tag requires that the tag SEARCHENGINE is set to YES. - -EXTRA_SEARCH_MAPPINGS = - -#--------------------------------------------------------------------------- -# Configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. -# The default value is: YES. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. -# -# Note that when enabling USE_PDFLATEX this option is only used for generating -# bitmaps for formulas in the HTML output, but not in the Makefile that is -# written to the output directory. -# The default file is: latex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate -# index for LaTeX. -# The default file is: makeindex. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -COMPACT_LATEX = NO - -# The PAPER_TYPE tag can be used to set the paper type that is used by the -# printer. -# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x -# 14 inches) and executive (7.25 x 10.5 inches). -# The default value is: a4. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PAPER_TYPE = a4 - -# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names -# that should be included in the LaTeX output. The package can be specified just -# by its name or with the correct syntax as to be used with the LaTeX -# \usepackage command. To get the times font for instance you can specify : -# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} -# To use the option intlimits with the amsmath package you can specify: -# EXTRA_PACKAGES=[intlimits]{amsmath} -# If left blank no extra packages will be included. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the -# generated LaTeX document. The header should contain everything until the first -# chapter. If it is left blank doxygen will generate a standard header. See -# section "Doxygen usage" for information on how to let doxygen write the -# default header to a separate file. -# -# Note: Only use a user-defined header if you know what you are doing! The -# following commands have a special meaning inside the header: $title, -# $datetime, $date, $doxygenversion, $projectname, $projectnumber, -# $projectbrief, $projectlogo. Doxygen will replace $title with the empty -# string, for the replacement values of the other commands the user is referred -# to HTML_HEADER. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HEADER = - -# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the -# generated LaTeX document. The footer should contain everything after the last -# chapter. If it is left blank doxygen will generate a standard footer. See -# LATEX_HEADER for more information on how to generate a default footer and what -# special commands can be used inside the footer. -# -# Note: Only use a user-defined footer if you know what you are doing! -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_FOOTER = - -# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined -# LaTeX style sheets that are included after the standard style sheets created -# by doxygen. Using this option one can overrule certain style aspects. Doxygen -# will copy the style sheet files to the output directory. -# Note: The order of the extra style sheet files is of importance (e.g. the last -# style sheet in the list overrules the setting of the previous ones in the -# list). -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_STYLESHEET = - -# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or -# other source files which should be copied to the LATEX_OUTPUT output -# directory. Note that the files will be copied as-is; there are no commands or -# markers available. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_EXTRA_FILES = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is -# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will -# contain links (just like the HTML output) instead of page references. This -# makes the output suitable for online browsing using a PDF viewer. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate -# the PDF file directly from the LaTeX files. Set this option to YES, to get a -# higher quality PDF documentation. -# The default value is: YES. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. This option is also used -# when generating formulas in HTML. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BATCHMODE = NO - -# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the -# index chapters (such as File Index, Compound Index, etc.) in the output. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_HIDE_INDICES = NO - -# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source -# code with syntax highlighting in the LaTeX output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_SOURCE_CODE = NO - -# The LATEX_BIB_STYLE tag can be used to specify the style to use for the -# bibliography, e.g. plainnat, or ieeetr. See -# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. -# The default value is: plain. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_BIB_STYLE = plain - -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The -# RTF output is optimized for Word 97 and may not look too pretty with other RTF -# readers/editors. -# The default value is: NO. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: rtf. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF -# documents. This may be useful for small projects and may help to save some -# trees in general. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will -# contain hyperlink fields. The RTF file will contain links (just like the HTML -# output) instead of page references. This makes the output suitable for online -# browsing using Word or some other Word compatible readers that support those -# fields. -# -# Note: WordPad (write) and others do not support links. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's config -# file, i.e. a series of assignments. You only have to provide replacements, -# missing definitions are set to their default value. -# -# See also section "Doxygen usage" for information on how to generate the -# default style sheet that doxygen normally uses. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an RTF document. Syntax is -# similar to doxygen's config file. A template extensions file can be generated -# using doxygen -e rtf extensionFile. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_EXTENSIONS_FILE = - -# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code -# with syntax highlighting in the RTF output. -# -# Note that which sources are shown also depends on other settings such as -# SOURCE_BROWSER. -# The default value is: NO. -# This tag requires that the tag GENERATE_RTF is set to YES. - -RTF_SOURCE_CODE = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for -# classes and files. -# The default value is: NO. - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. A directory man3 will be created inside the directory specified by -# MAN_OUTPUT. -# The default directory is: man. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to the generated -# man pages. In case the manual section does not start with a number, the number -# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is -# optional. -# The default value is: .3. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_EXTENSION = .3 - -# The MAN_SUBDIR tag determines the name of the directory created within -# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by -# MAN_EXTENSION with the initial . removed. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_SUBDIR = - -# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it -# will generate one additional man file for each entity documented in the real -# man page(s). These additional files only source the real man page, but without -# them the man command would be unable to find the correct page. -# The default value is: NO. -# This tag requires that the tag GENERATE_MAN is set to YES. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that -# captures the structure of the code including all documentation. -# The default value is: NO. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a -# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of -# it. -# The default directory is: xml. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_OUTPUT = xml - -# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program -# listings (including syntax highlighting and cross-referencing information) to -# the XML output. Note that enabling this will significantly increase the size -# of the XML output. -# The default value is: YES. -# This tag requires that the tag GENERATE_XML is set to YES. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# Configuration options related to the DOCBOOK output -#--------------------------------------------------------------------------- - -# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files -# that can be used to generate PDF. -# The default value is: NO. - -GENERATE_DOCBOOK = NO - -# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in -# front of it. -# The default directory is: docbook. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_OUTPUT = docbook - -# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the -# program listings (including syntax highlighting and cross-referencing -# information) to the DOCBOOK output. Note that enabling this will significantly -# increase the size of the DOCBOOK output. -# The default value is: NO. -# This tag requires that the tag GENERATE_DOCBOOK is set to YES. - -DOCBOOK_PROGRAMLISTING = NO - -#--------------------------------------------------------------------------- -# Configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sf.net) file that captures the -# structure of the code including all documentation. Note that this feature is -# still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# Configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module -# file that captures the structure of the code including all documentation. -# -# Note that this feature is still experimental and incomplete at the moment. -# The default value is: NO. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary -# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI -# output from the Perl module output. -# The default value is: NO. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely -# formatted so it can be parsed by a human reader. This is useful if you want to -# understand what is going on. On the other hand, if this tag is set to NO, the -# size of the Perl module output will be much smaller and Perl will parse it -# just the same. -# The default value is: YES. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file are -# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful -# so different doxyrules.make files included by the same Makefile don't -# overwrite each other's variables. -# This tag requires that the tag GENERATE_PERLMOD is set to YES. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all -# C-preprocessor directives found in the sources and include files. -# The default value is: YES. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names -# in the source code. If set to NO, only conditional compilation will be -# performed. Macro expansion can be done in a controlled way by setting -# EXPAND_ONLY_PREDEF to YES. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then -# the macro expansion is limited to the macros specified with the PREDEFINED and -# EXPAND_AS_DEFINED tags. -# The default value is: NO. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES, the include files in the -# INCLUDE_PATH will be searched if a #include is found. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by the -# preprocessor. -# This tag requires that the tag SEARCH_INCLUDES is set to YES. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will be -# used. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that are -# defined before the preprocessor is started (similar to the -D option of e.g. -# gcc). The argument of the tag is a list of macros of the form: name or -# name=definition (no spaces). If the definition and the "=" are omitted, "=1" -# is assumed. To prevent a macro definition from being undefined via #undef or -# recursively expanded use the := operator instead of the = operator. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -PREDEFINED = - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this -# tag can be used to specify a list of macro names that should be expanded. The -# macro definition that is found in the sources will be used. Use the PREDEFINED -# tag if you want to use a different macro definition that overrules the -# definition found in the source code. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will -# remove all references to function-like macros that are alone on a line, have -# an all uppercase name, and do not end with a semicolon. Such function macros -# are typically used for boiler-plate code, and will confuse the parser if not -# removed. -# The default value is: YES. -# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration options related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES tag can be used to specify one or more tag files. For each tag -# file the location of the external documentation should be added. The format of -# a tag file without this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where loc1 and loc2 can be relative or absolute paths or URLs. See the -# section "Linking to external documentation" for more information about the use -# of tag files. -# Note: Each tag file must have a unique name (where the name does NOT include -# the path). If a tag file is not located in the directory in which doxygen is -# run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create a -# tag file that is based on the input files it reads. See section "Linking to -# external documentation" for more information about the usage of tag files. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. -# The default value is: NO. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be -# listed. -# The default value is: YES. - -EXTERNAL_GROUPS = YES - -# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in -# the related pages index. If set to NO, only the current project's pages will -# be listed. -# The default value is: YES. - -EXTERNAL_PAGES = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of 'which perl'). -# The default file (with absolute path) is: /usr/bin/perl. - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram -# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to -# NO turns the diagrams off. Note that this option also works with HAVE_DOT -# disabled, but it is recommended to install and use dot, since it yields more -# powerful graphs. -# The default value is: YES. - -CLASS_DIAGRAMS = YES - -# You can define message sequence charts within doxygen comments using the \msc -# command. Doxygen will then run the mscgen tool (see: -# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the -# documentation. The MSCGEN_PATH tag allows you to specify the directory where -# the mscgen tool resides. If left empty the tool is assumed to be found in the -# default search path. - -MSCGEN_PATH = - -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - -# If set to YES the inheritance and collaboration graphs will hide inheritance -# and usage relations if the target is undocumented or is not a class. -# The default value is: YES. - -HIDE_UNDOC_RELATIONS = YES - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent -# Bell Labs. The other options in this section have no effect if this option is -# set to NO -# The default value is: YES. - -HAVE_DOT = NO - -# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed -# to run in parallel. When set to 0 doxygen will base this on the number of -# processors available in the system. You can set it explicitly to a value -# larger than 0 to get control over the balance between CPU load and processing -# speed. -# Minimum value: 0, maximum value: 32, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_NUM_THREADS = 0 - -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTNAME = Helvetica - -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTSIZE = 10 - -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_FONTPATH = - -# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for -# each documented class showing the direct and indirect inheritance relations. -# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a -# graph for each documented class showing the direct and indirect implementation -# dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LOOK = NO - -# If the UML_LOOK tag is enabled, the fields and methods are shown inside the -# class node. If there are many fields or methods and many nodes the graph may -# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the -# number of items for each type to make the size more manageable. Set this to 0 -# for no limit. Note that the threshold may be exceeded by 50% before the limit -# is enforced. So when you set the threshold to 10, up to 15 fields may appear, -# but if the number exceeds 15, the total amount of fields shown is limited to -# 10. -# Minimum value: 0, maximum value: 100, default value: 10. -# This tag requires that the tag HAVE_DOT is set to YES. - -UML_LIMIT_NUM_FIELDS = 10 - -# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and -# collaboration graphs will show the relations between templates and their -# instances. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -TEMPLATE_RELATIONS = NO - -# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to -# YES then doxygen will generate a graph for each documented file showing the -# direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDE_GRAPH = YES - -# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are -# set to YES then doxygen will generate a graph for each documented file showing -# the direct and indirect include dependencies of the file with other documented -# files. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH tag is set to YES then doxygen will generate a call -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. Disabling a call graph can be -# accomplished by means of the command \hidecallgraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALL_GRAPH = NO - -# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller -# dependency graph for every global function or class method. -# -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable caller graphs for selected -# functions only using the \callergraph command. Disabling a caller graph can be -# accomplished by means of the command \hidecallergraph. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -CALLER_GRAPH = NO - -# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical -# hierarchy of all classes instead of a textual one. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the -# dependencies a directory has on other directories in a graphical way. The -# dependency relations are determined by the #include relations between the -# files in the directories. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. For an explanation of the image formats see the section -# output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). -# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order -# to make the SVG files visible in IE 9+ (other browsers do not have this -# requirement). -# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, -# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, -# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, -# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and -# png:gdiplus:gdiplus. -# The default value is: png. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_IMAGE_FORMAT = png - -# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to -# enable generation of interactive SVG images that allow zooming and panning. -# -# Note that this requires a modern browser other than Internet Explorer. Tested -# and working are Firefox, Chrome, Safari, and Opera. -# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make -# the SVG files visible. Older versions of IE do not have SVG support. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -INTERACTIVE_SVG = NO - -# The DOT_PATH tag can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found in the path. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the \dotfile -# command). -# This tag requires that the tag HAVE_DOT is set to YES. - -DOTFILE_DIRS = - -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). - -MSCFILE_DIRS = - -# The DIAFILE_DIRS tag can be used to specify one or more directories that -# contain dia files that are included in the documentation (see the \diafile -# command). - -DIAFILE_DIRS = - -# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the -# path where java can find the plantuml.jar file. If left blank, it is assumed -# PlantUML is not used or called during a preprocessing step. Doxygen will -# generate a warning when it encounters a \startuml command in this case and -# will not generate output for the diagram. - -PLANTUML_JAR_PATH = - -# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a -# configuration file for plantuml. - -PLANTUML_CFG_FILE = - -# When using plantuml, the specified paths are searched for files specified by -# the !include statement in a plantuml block. - -PLANTUML_INCLUDE_PATH = - -# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes -# that will be shown in the graph. If the number of nodes in a graph becomes -# larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct -# children of the root node in a graph is already larger than -# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that -# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. -# Minimum value: 0, maximum value: 10000, default value: 50. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_GRAPH_MAX_NODES = 50 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs -# generated by dot. A depth value of 3 means that only nodes reachable from the -# root by following a path via at most 3 edges will be shown. Nodes that lay -# further from the root node will be omitted. Note that setting this option to 1 -# or 2 may greatly reduce the computation time needed for large code bases. Also -# note that the size of a graph can be further restricted by -# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. -# Minimum value: 0, maximum value: 1000, default value: 0. -# This tag requires that the tag HAVE_DOT is set to YES. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) support -# this, this feature is disabled by default. -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_MULTI_TARGETS = YES - -# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page -# explaining the meaning of the various boxes and arrows in the dot generated -# graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot -# files that are used to generate the various graphs. -# The default value is: YES. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_CLEANUP = YES
View file
ncmpc-0.30.tar.xz/src/Event.hxx
Deleted
@@ -1,44 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef EVENT_HXX -#define EVENT_HXX - -#include <glib.h> - -#include <chrono> - -template<typename T, bool (T::*method)()> -struct BindTimeoutCallback { - static gboolean Callback(gpointer data) { - auto &t = *static_cast<T *>(data); - return (t.*method)(); - } -}; - -template<typename T, bool (T::*method)()> -inline unsigned -ScheduleTimeout(std::chrono::seconds s, T &t) -{ - return g_timeout_add_seconds(s.count(), - BindTimeoutCallback<T, method>::Callback, - &t); -} - -#endif
View file
ncmpc-0.30.tar.xz/src/colors.cxx
Deleted
@@ -1,269 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "colors.hxx" -#include "i18n.h" -#include "ncfix.h" - -#ifdef ENABLE_COLORS -#include "options.hxx" -#endif - -#include <list> - -#include <assert.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <glib.h> - -#define COLOR_NONE G_MININT /* left most bit only */ -#define COLOR_ERROR -2 - -#ifdef ENABLE_COLORS -struct CustomColor { - short color; - short r,g,b; - - constexpr CustomColor(short _color, short _r, short _g, short _b) - :color(_color), r(_r), g(_g), b(_b) {} -}; -#endif - -struct NamedColor { - const char *name; -#ifdef ENABLE_COLORS - int color; -#endif - int mono; - -#ifndef ENABLE_COLORS - constexpr NamedColor(const char *_name, int, int _mono) - :name(_name), mono(_mono) {} -#endif -}; - -static NamedColor colors[COLOR_END] = { - /* color pair = field name, color, mono */ - {nullptr, 0, 0}, - {"title", COLOR_YELLOW, A_NORMAL}, - {"title-bold", COLOR_YELLOW | A_BOLD, A_BOLD }, - {"line", COLOR_WHITE, A_NORMAL}, - {"line-bold", COLOR_WHITE | A_BOLD, A_BOLD }, - {"line-flags", COLOR_YELLOW, A_NORMAL}, - {"list", COLOR_GREEN, A_NORMAL}, - {"list-bold", COLOR_GREEN | A_BOLD, A_BOLD }, - {"progressbar", COLOR_WHITE, A_NORMAL}, - {"progressbar-background", COLOR_BLACK | A_BOLD, A_NORMAL}, - {"status-song", COLOR_YELLOW, A_NORMAL}, - {"status-state", COLOR_YELLOW | A_BOLD, A_BOLD }, - {"status-time", COLOR_RED, A_NORMAL}, - {"alert", COLOR_RED | A_BOLD, A_BOLD }, - {"browser-directory", COLOR_YELLOW, A_NORMAL}, - {"browser-playlist", COLOR_RED, A_NORMAL}, - {"background", COLOR_BLACK, A_NORMAL}, -}; - -#ifdef ENABLE_COLORS - -static std::list<CustomColor> custom_colors; - -static NamedColor * -colors_lookup_by_name(const char *name) -{ - for (unsigned i = 1; i < COLOR_END; ++i) - if (!strcasecmp(colors[i].name, name)) - return &colors[i]; - - return nullptr; -} - -static void -colors_update_pair(enum color id) -{ - assert(id > 0 && id < COLOR_END); - - int fg = colors[id].color; - int bg = colors[COLOR_BACKGROUND].color; - - /* If color == COLOR_NONE (negative), - * pass -1 to avoid cast errors */ - init_pair(id, - (fg < 0 ? -1 : fg), - (bg < 0 ? -1 : bg)); -} - -int -colors_str2color(const char *str) -{ - int color = 0; - char **parts = g_strsplit(str, ",", 0); - for (int i = 0; parts[i]; i++) { - char *cur = parts[i]; - - /* Legacy colors (brightblue,etc) */ - if (!strncasecmp(cur, "bright", 6)) { - color |= A_BOLD; - cur += 6; - } - - /* Colors */ - if (!strcasecmp(cur, "none")) - color |= COLOR_NONE; - else if (!strcasecmp(cur, "black")) - color |= COLOR_BLACK; - else if (!strcasecmp(cur, "red")) - color |= COLOR_RED; - else if (!strcasecmp(cur, "green")) - color |= COLOR_GREEN; - else if (!strcasecmp(cur, "yellow")) - color |= COLOR_YELLOW; - else if (!strcasecmp(cur, "blue")) - color |= COLOR_BLUE; - else if (!strcasecmp(cur, "magenta")) - color |= COLOR_MAGENTA; - else if (!strcasecmp(cur, "cyan")) - color |= COLOR_CYAN; - else if (!strcasecmp(cur, "white")) - color |= COLOR_WHITE; - else if (!strcasecmp(cur, "grey") || !strcasecmp(cur, "gray")) - color |= COLOR_BLACK | A_BOLD; - - /* Attributes */ - else if (!strcasecmp(cur, "standout")) - color |= A_STANDOUT; - else if (!strcasecmp(cur, "underline")) - color |= A_UNDERLINE; - else if (!strcasecmp(cur, "reverse")) - color |= A_REVERSE; - else if (!strcasecmp(cur, "blink")) - color |= A_BLINK; - else if (!strcasecmp(cur, "dim")) - color |= A_DIM; - else if (!strcasecmp(cur, "bold")) - color |= A_BOLD; - else { - /* Numerical colors */ - char *endptr; - int tmp = strtol(cur, &endptr, 10); - if (cur != endptr && endptr[0] == '\0') { - color |= tmp; - } else { - fprintf(stderr, "%s: %s\n", - _("Unknown color"), str); - return COLOR_ERROR; - } - } - - } - g_strfreev(parts); - return color; -} - -/* This function is called from conf.c before curses have been started, - * it adds the definition to the color_definition_list and init_color() is - * done in colors_start() */ -bool -colors_define(const char *name, short r, short g, short b) -{ - int color = colors_str2color(name); - - if (color < 0) - return false; - - custom_colors.emplace_back(color, r, g, b); - return true; -} - -bool -colors_assign(const char *name, const char *value) -{ - auto *entry = colors_lookup_by_name(name); - - if (!entry) { - fprintf(stderr, "%s: %s", - _("Unknown color field"), name); - return false; - } - - const int color = colors_str2color(value); - if (color == COLOR_ERROR) - return false; - - entry->color = color; - return true; -} - -void -colors_start() -{ - if (has_colors()) { - /* initialize color support */ - start_color(); - use_default_colors(); - /* define any custom colors defined in the configuration file */ - if (!custom_colors.empty() && can_change_color()) { - for (const auto &i : custom_colors) - if (i.color <= COLORS) - init_color(i.color, i.r, i.g, i.b); - } else if (!custom_colors.empty() && !can_change_color()) - fprintf(stderr, "%s\n", - _("Terminal lacks support for changing colors")); - - if (options.enable_colors) { - for (unsigned i = 1; i < COLOR_END; ++i) - /* update the color pairs */ - colors_update_pair((enum color)i); - } - } else if (options.enable_colors) { - fprintf(stderr, "%s\n", - _("Terminal lacks color capabilities")); - options.enable_colors = 0; - } - - /* free the color_definition_list */ - custom_colors.clear(); -} -#endif - -void -colors_use(WINDOW *w, enum color id) -{ - auto *entry = &colors[id]; - - assert(id > 0 && id < COLOR_END); - - attr_t attrs; - short pair; - fix_wattr_get(w, &attrs, &pair, nullptr); - -#ifdef ENABLE_COLORS - if (options.enable_colors) { - /* color mode */ - if ((int)attrs != entry->color || (short)id != pair) - wattr_set(w, entry->color, id, nullptr); - } else { -#endif - /* mono mode */ - if ((int)attrs != entry->mono) - (void)wattrset(w, entry->mono); -#ifdef ENABLE_COLORS - } -#endif -}
View file
ncmpc-0.30.tar.xz/src/colors.hxx
Deleted
@@ -1,65 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef COLORS_H -#define COLORS_H - -#include "config.h" -#include "ncmpc_curses.h" -#include "Compiler.h" - - -enum color { - COLOR_TITLE = 1, - COLOR_TITLE_BOLD, - COLOR_LINE, - COLOR_LINE_BOLD, - COLOR_LINE_FLAGS, - COLOR_LIST, - COLOR_LIST_BOLD, - COLOR_PROGRESSBAR, - COLOR_PROGRESSBAR_BACKGROUND, - COLOR_STATUS, - COLOR_STATUS_BOLD, - COLOR_STATUS_TIME, - COLOR_STATUS_ALERT, - COLOR_DIRECTORY, - COLOR_PLAYLIST, - COLOR_BACKGROUND, - COLOR_END -}; - -gcc_pure -int colors_str2color(const char *str); - -#ifdef ENABLE_COLORS -bool -colors_assign(const char *name, const char *value); - -bool -colors_define(const char *name, short r, short g, short b); - -void -colors_start(); -#endif - -void -colors_use(WINDOW *w, enum color id); - -#endif /* COLORS_H */
View file
ncmpc-0.30.tar.xz/src/command.cxx
Deleted
@@ -1,530 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "command.hxx" -#include "i18n.h" -#include "ncmpc_curses.h" - -#include <assert.h> -#include <ctype.h> -#include <stdlib.h> -#include <string.h> -#include <ctype.h> -#include <glib.h> -#include <signal.h> -#include <unistd.h> - -#define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */ - -#define BS KEY_BACKSPACE -#define DEL KEY_DC -#define UP KEY_UP -#define DWN KEY_DOWN -#define LEFT KEY_LEFT -#define RGHT KEY_RIGHT -#define HOME KEY_HOME -#define END KEY_END -#define PGDN KEY_NPAGE -#define PGUP KEY_PPAGE -#define TAB 0x09 -#define STAB 0x161 -#define ESC 0x1B -#define RET '\r' -#define F1 KEY_F(1) -#define F2 KEY_F(2) -#define F3 KEY_F(3) -#define F4 KEY_F(4) -#define F5 KEY_F(5) -#define F6 KEY_F(6) -#define F7 KEY_F(7) -#define F8 KEY_F(8) -#define F9 KEY_F(9) -#define C(x) KEY_CTL(x) - -static command_definition_t cmds[] = { -#ifdef ENABLE_KEYDEF_SCREEN - { {'K', 0, 0 }, 0, CMD_SCREEN_KEYDEF, "screen-keyedit", - N_("Key configuration screen") }, -#endif - { { 'q', 'Q', C('C') }, 0, CMD_QUIT, "quit", - N_("Quit") }, - - /* movement */ - { { UP, 'k', 0 }, 0, CMD_LIST_PREVIOUS, "up", - N_("Move cursor up") }, - { { DWN, 'j', 0 }, 0, CMD_LIST_NEXT, "down", - N_("Move cursor down") }, - { { 'H', 0, 0 }, 0, CMD_LIST_TOP, "top", - N_("Move cursor to the top of screen") }, - { { 'M', 0, 0 }, 0, CMD_LIST_MIDDLE, "middle", - N_("Move cursor to the middle of screen") }, - { { 'L', 0, 0 }, 0, CMD_LIST_BOTTOM, "bottom", - N_("Move cursor to the bottom of screen") }, - { { HOME, C('A'), 0 }, 0, CMD_LIST_FIRST, "home", - N_("Move cursor to the top of the list") }, - { { END, C('E'), 0 }, 0, CMD_LIST_LAST, "end", - N_("Move cursor to the bottom of the list") }, - { { PGUP, 0, 0 }, 0, CMD_LIST_PREVIOUS_PAGE, "pgup", - N_("Page up") }, - { { PGDN, 0, 0 }, 0, CMD_LIST_NEXT_PAGE, "pgdn", - N_("Page down") }, - { { 'v', 0, 0 }, 0, CMD_LIST_RANGE_SELECT, "range-select", - N_("Range selection") }, - { { C('N'), 0, 0 }, 0, CMD_LIST_SCROLL_DOWN_LINE, "scroll-down-line", - N_("Scroll down one line") }, - { { C('B'), 0, 0 }, 0, CMD_LIST_SCROLL_UP_LINE, "scroll-up-line", - N_("Scroll up one line") }, - { { 'N', 0, 0 }, 0, CMD_LIST_SCROLL_DOWN_HALF, "scroll-down-half", - N_("Scroll up half a screen") }, - { { 'B', 0, 0 }, 0, CMD_LIST_SCROLL_UP_HALF, "scroll-up-half", - N_("Scroll down half a screen") }, - { { 'l', 0, 0 }, 0, CMD_SELECT_PLAYING, "select-playing", - N_("Select currently playing song") }, - - - /* basic screens */ - { { '1', F1, 'h' }, 0, CMD_SCREEN_HELP, "screen-help", - N_("Help screen") }, - { { '2', F2, 0 }, 0, CMD_SCREEN_PLAY, "screen-playlist", - N_("Queue screen") }, - { { '3', F3, 0 }, 0, CMD_SCREEN_FILE, "screen-browse", - N_("Browse screen") }, - - - /* player commands */ - { { RET, 0, 0 }, 0, CMD_PLAY, "play", - N_("Play/Enter directory") }, - { { 'P', 0, 0 }, 0, CMD_PAUSE,"pause", - N_("Pause") }, - { { 's', BS, 0 }, 0, CMD_STOP, "stop", - N_("Stop") }, - { { 'o', 0, 0 }, 0, CMD_CROP, "crop", - N_("Crop") }, - { { '>', 0, 0 }, 0, CMD_TRACK_NEXT, "next", - N_("Next track") }, - { { '<', 0, 0 }, 0, CMD_TRACK_PREVIOUS, "prev", - N_("Previous track") }, - { { 'f', 0, 0 }, 0, CMD_SEEK_FORWARD, "seek-forward", - N_("Seek forward") }, - { { 'b', 0, 0 }, 0, CMD_SEEK_BACKWARD, "seek-backward", - N_("Seek backward") }, - { { '+', RGHT, 0 }, 0, CMD_VOLUME_UP, "volume-up", - N_("Increase volume") }, - { { '-', LEFT, 0 }, 0, CMD_VOLUME_DOWN, "volume-down", - N_("Decrease volume") }, - { { ' ', 0, 0 }, 0, CMD_SELECT, "select", - N_("Select/deselect song in queue") }, - { { 't', 0, 0 }, 0, CMD_SELECT_ALL, "select_all", - N_("Select all listed items") }, - { { DEL, 'd', 0 }, 0, CMD_DELETE, "delete", - N_("Delete song from queue") }, - { { 'Z', 0, 0 }, 0, CMD_SHUFFLE, "shuffle", - N_("Shuffle queue") }, - { { 'c', 0, 0 }, 0, CMD_CLEAR, "clear", - N_("Clear queue") }, - { { 'r', 0, 0 }, 0, CMD_REPEAT, "repeat", - N_("Toggle repeat mode") }, - { { 'z', 0, 0 }, 0, CMD_RANDOM, "random", - N_("Toggle random mode") }, - { { 'y', 0, 0 }, 0, CMD_SINGLE, "single", - N_("Toggle single mode") }, - { { 'C', 0, 0 }, 0, CMD_CONSUME, "consume", - N_("Toggle consume mode") }, - { { 'x', 0, 0 }, 0, CMD_CROSSFADE, "crossfade", - N_("Toggle crossfade mode") }, - { { C('U'), 0, 0 }, 0, CMD_DB_UPDATE, "db-update", - N_("Start a music database update") }, - { { 'S', 0, 0 }, 0, CMD_SAVE_PLAYLIST, "save", - N_("Save queue") }, - { { 'a', 0, 0 }, 0, CMD_ADD, "add", - N_("Add url/file to queue") }, - - { { '!', 0, 0 }, 0, CMD_GO_ROOT_DIRECTORY, "go-root-directory", - N_("Go to root directory") }, - { { '"', 0, 0 }, 0, CMD_GO_PARENT_DIRECTORY, "go-parent-directory", - N_("Go to parent directory") }, - - { { 'G', 0, 0 }, 0, CMD_LOCATE, "locate", - N_("Locate song in browser") }, - - /* lists */ - { { C('K'), 0, 0 }, 0, CMD_LIST_MOVE_UP, "move-up", - N_("Move item up") }, - { { C('J'), 0, 0 }, 0, CMD_LIST_MOVE_DOWN, "move-down", - N_("Move item down") }, - { { C('L'), 0, 0 }, 0, CMD_SCREEN_UPDATE, "update", - N_("Refresh screen") }, - - - /* ncmpc options */ - { { 'w', 0, 0 }, 0, CMD_TOGGLE_FIND_WRAP, "wrap-mode", - /* translators: toggle between wrapping and non-wrapping - search */ - N_("Toggle find mode") }, - { { 'U', 0, 0 }, 0, CMD_TOGGLE_AUTOCENTER, "autocenter-mode", - /* translators: the auto center mode always centers the song - currently being played */ - N_("Toggle auto center mode") }, - - - /* change screen */ - { { TAB, 0, 0 }, 0, CMD_SCREEN_NEXT, "screen-next", - N_("Next screen") }, - { { STAB, 0, 0 }, 0, CMD_SCREEN_PREVIOUS, "screen-prev", - N_("Previous screen") }, - { { '`', 0, 0 }, 0, CMD_SCREEN_SWAP, "screen-swap", - N_("Swap to most recent screen") }, - - - /* find */ - { { '/', 0, 0 }, 0, CMD_LIST_FIND, "find", - N_("Forward find") }, - { { 'n', 0, 0 }, 0, CMD_LIST_FIND_NEXT, "find-next", - N_("Forward find next") }, - { { '?', 0, 0 }, 0, CMD_LIST_RFIND, "rfind", - N_("Backward find") }, - { { 'p', 0, 0 }, 0, CMD_LIST_RFIND_NEXT, "rfind-next", - N_("Backward find previous") }, - { { '.', 0, 0 }, 0, CMD_LIST_JUMP, "jump", - /* translators: this queries the user for a string - * and jumps directly (while the user is typing) - * to the entry which begins with this string */ - N_("Jump to") }, - - - /* extra screens */ -#ifdef ENABLE_ARTIST_SCREEN - { {'4', F4, 0 }, 0, CMD_SCREEN_ARTIST, "screen-artist", - N_("Artist screen") }, -#endif -#ifdef ENABLE_SEARCH_SCREEN - { {'5', F5, 0 }, 0, CMD_SCREEN_SEARCH, "screen-search", - N_("Search screen") }, - { {'m', 0, 0 }, 0, CMD_SEARCH_MODE, "search-mode", - N_("Change search mode") }, -#endif -#ifdef ENABLE_SONG_SCREEN - { { 'i', 0, 0 }, 0, CMD_SCREEN_SONG, "view", - N_("View the selected and the currently playing song") }, -#endif -#ifdef ENABLE_LYRICS_SCREEN - { {'7', F7, 0 }, 0, CMD_SCREEN_LYRICS, "screen-lyrics", - N_("Lyrics screen") }, - { {ESC, 0, 0 }, 0, CMD_INTERRUPT, "lyrics-interrupt", - /* translators: interrupt the current background action, - e.g. stop loading lyrics from the internet */ - N_("Interrupt action") }, - { {'u', 0, 0 }, 0, CMD_LYRICS_UPDATE, "lyrics-update", - N_("Update Lyrics") }, - /* this command may move out of #ifdef ENABLE_LYRICS_SCREEN - at some point */ - { {'e', 0, 0 }, 0, CMD_EDIT, "edit", - N_("Edit the current item") }, -#endif - -#ifdef ENABLE_OUTPUTS_SCREEN - { {'8', F8, 0 }, 0, CMD_SCREEN_OUTPUTS, "screen-outputs", - N_("Outputs screen") }, -#endif - -#ifdef ENABLE_CHAT_SCREEN - { {'9', F9, 0}, 0, CMD_SCREEN_CHAT, "screen-chat", - N_("Chat screen") }, -#endif - - { { -1, -1, -1 }, 0, CMD_NONE, nullptr, nullptr } -}; - -#ifdef ENABLE_KEYDEF_SCREEN -command_definition_t * -get_command_definitions() -{ - return cmds; -} - -size_t -get_cmds_max_name_width(command_definition_t *c) -{ - static size_t max = 0; - - if (max != 0) - return max; - - for (command_definition_t *p = c; p->name != nullptr; p++) { - /* - * width and length are considered the same here, as command - * names are not translated. - */ - size_t len = strlen(p->name); - if (len > max) - max = len; - } - - return max; -} -#endif - -const char * -key2str(int key) -{ - switch(key) { - static char buf[32]; - - case 0: - return _("Undefined"); - case ' ': - return _("Space"); - case RET: - return _("Enter"); - case BS: - return _("Backspace"); - case DEL: - return _("Delete"); - case UP: - return _("Up"); - case DWN: - return _("Down"); - case LEFT: - return _("Left"); - case RGHT: - return _("Right"); - case HOME: - return _("Home"); - case END: - return _("End"); - case PGDN: - return _("PageDown"); - case PGUP: - return _("PageUp"); - case TAB: - return _("Tab"); - case STAB: - return _("Shift+Tab"); - case ESC: - return _("Esc"); - case KEY_IC: - return _("Insert"); - default: - for (int i = 0; i <= 63; i++) - if (key == KEY_F(i)) { - snprintf(buf, 32, _("F%d"), i ); - return buf; - } - if (!(key & ~037)) - snprintf(buf, 32, _("Ctrl-%c"), 'A'+(key & 037)-1 ); - else if ((key & ~037) == 224) - snprintf(buf, 32, _("Alt-%c"), 'A'+(key & 037)-1 ); - else if (key > 32 && key < 256) - snprintf(buf, 32, "%c", key); - else - snprintf(buf, 32, "0x%03X", key); - return buf; - } -} - -void -command_dump_keys() -{ - for (size_t i = 0; cmds[i].description; i++) - if (cmds[i].command != CMD_NONE) - printf(" %20s : %s\n", - get_key_names(cmds[i].command, true), - cmds[i].name); -} - -#ifndef NCMPC_MINI - -static void -set_key_flags(command_definition_t *cp, command_t command, int flags) -{ - for (size_t i = 0; cp[i].name; i++) { - if (cp[i].command == command) { - cp[i].flags |= flags; - break; - } - } -} - -#endif - -const char * -get_key_names(command_t command, bool all) -{ - for (int i = 0; cmds[i].description; i++) { - if (cmds[i].command == command) { - static char keystr[80]; - - g_strlcpy(keystr, key2str(cmds[i].keys[0]), sizeof(keystr)); - if (!all) - return keystr; - - for (unsigned j = 1; j < MAX_COMMAND_KEYS && - cmds[i].keys[j] > 0; j++) { - g_strlcat(keystr, " ", sizeof(keystr)); - g_strlcat(keystr, key2str(cmds[i].keys[j]), sizeof(keystr)); - } - return keystr; - } - } - return nullptr; -} - -const char * -get_key_description(command_t command) -{ - for (size_t i = 0; cmds[i].description; i++) - if (cmds[i].command == command) - return _(cmds[i].description); - - return nullptr; -} - -const char * -get_key_command_name(command_t command) -{ - for (size_t i = 0; cmds[i].name; i++) - if (cmds[i].command == command) - return cmds[i].name; - - return nullptr; -} - -command_t -get_key_command_from_name(const char *name) -{ - for (size_t i = 0; cmds[i].name; i++) - if (strcmp(name, cmds[i].name) == 0) - return cmds[i].command; - - return CMD_NONE; -} - -command_t -find_key_command(int key, const command_definition_t *c) -{ - assert(key != 0); - assert(c != nullptr); - - for (size_t i = 0; c[i].name; i++) { - for (int j = 0; j < MAX_COMMAND_KEYS; j++) - if (c[i].keys[j] == key) - return c[i].command; - } - - return CMD_NONE; -} - -command_t -get_key_command(int key) -{ - return find_key_command(key, cmds); -} - -bool -assign_keys(command_t command, int keys[MAX_COMMAND_KEYS]) -{ - for (size_t i = 0; cmds[i].name; i++) { - if (cmds[i].command == command) { - memcpy(cmds[i].keys, keys, sizeof(int)*MAX_COMMAND_KEYS); -#ifndef NCMPC_MINI - cmds[i].flags |= COMMAND_KEY_MODIFIED; -#endif - return true; - } - } - - return false; -} - -#ifndef NCMPC_MINI - -bool -check_key_bindings(command_definition_t *cp, char *buf, size_t bufsize) -{ - bool success = true; - - if (cp == nullptr) - cp = cmds; - - for (size_t i = 0; cp[i].name; i++) - cp[i].flags &= ~COMMAND_KEY_CONFLICT; - - for (size_t i = 0; cp[i].name; i++) { - int j; - command_t cmd; - - for(j=0; j<MAX_COMMAND_KEYS; j++) { - if (cp[i].keys[j] && - (cmd = find_key_command(cp[i].keys[j],cp)) != cp[i].command) { - if (buf) { - snprintf(buf, bufsize, - _("Key %s assigned to %s and %s"), - key2str(cp[i].keys[j]), - get_key_command_name(cp[i].command), - get_key_command_name(cmd)); - } else { - fprintf(stderr, - _("Key %s assigned to %s and %s"), - key2str(cp[i].keys[j]), - get_key_command_name(cp[i].command), - get_key_command_name(cmd)); - fputc('\n', stderr); - } - cp[i].flags |= COMMAND_KEY_CONFLICT; - set_key_flags(cp, cmd, COMMAND_KEY_CONFLICT); - success = false; - } - } - } - - return success; -} - -bool -write_key_bindings(FILE *f, int flags) -{ - if (flags & KEYDEF_WRITE_HEADER) - fprintf(f, "## Key bindings for ncmpc (generated by ncmpc)\n\n"); - - for (size_t i = 0; cmds[i].name && !ferror(f); i++) { - if (cmds[i].flags & COMMAND_KEY_MODIFIED || - flags & KEYDEF_WRITE_ALL) { - fprintf(f, "## %s\n", cmds[i].description); - if (flags & KEYDEF_COMMENT_ALL) - fprintf(f, "#"); - fprintf(f, "key %s = ", cmds[i].name); - for (int j = 0; j < MAX_COMMAND_KEYS; j++) { - if (j && cmds[i].keys[j]) - fprintf(f, ", "); - if (!j || cmds[i].keys[j]) { - if (cmds[i].keys[j]<256 && (isalpha(cmds[i].keys[j]) || - isdigit(cmds[i].keys[j]))) - fprintf(f, "\'%c\'", cmds[i].keys[j]); - else - fprintf(f, "%d", cmds[i].keys[j]); - } - } - fprintf(f,"\n\n"); - } - } - - return ferror(f) == 0; -} - -#endif /* NCMPC_MINI */
View file
ncmpc-0.30.tar.xz/src/command.hxx
Deleted
@@ -1,180 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef COMMAND_H -#define COMMAND_H - -#include "config.h" -#include "Compiler.h" - -#include <stddef.h> - -#ifndef NCMPC_MINI -#include <stdio.h> -#endif - -#define MAX_COMMAND_KEYS 3 - -/* commands */ -typedef enum { - CMD_NONE = 0, - CMD_PLAY, - CMD_SELECT, - CMD_SELECT_ALL, - CMD_PAUSE, - CMD_STOP, - CMD_CROP, - CMD_TRACK_NEXT, - CMD_TRACK_PREVIOUS, - CMD_SEEK_FORWARD, - CMD_SEEK_BACKWARD, - CMD_SHUFFLE, - CMD_RANDOM, - CMD_CLEAR, - CMD_DELETE, - CMD_REPEAT, - CMD_SINGLE, - CMD_CONSUME, - CMD_CROSSFADE, - CMD_DB_UPDATE, - CMD_VOLUME_UP, - CMD_VOLUME_DOWN, - CMD_ADD, - CMD_SAVE_PLAYLIST, - CMD_TOGGLE_FIND_WRAP, - CMD_TOGGLE_AUTOCENTER, - CMD_SELECT_PLAYING, - CMD_SEARCH_MODE, - CMD_LIST_PREVIOUS, - CMD_LIST_NEXT, - CMD_LIST_TOP, - CMD_LIST_MIDDLE, - CMD_LIST_BOTTOM, - CMD_LIST_FIRST, - CMD_LIST_LAST, - CMD_LIST_NEXT_PAGE, - CMD_LIST_PREVIOUS_PAGE, - CMD_LIST_FIND, - CMD_LIST_FIND_NEXT, - CMD_LIST_RFIND, - CMD_LIST_RFIND_NEXT, - CMD_LIST_JUMP, - CMD_LIST_MOVE_UP, - CMD_LIST_MOVE_DOWN, - CMD_LIST_RANGE_SELECT, - CMD_LIST_SCROLL_UP_LINE, - CMD_LIST_SCROLL_DOWN_LINE, - CMD_LIST_SCROLL_UP_HALF, - CMD_LIST_SCROLL_DOWN_HALF, - CMD_SCREEN_UPDATE, - CMD_SCREEN_PREVIOUS, - CMD_SCREEN_NEXT, - CMD_SCREEN_SWAP, - CMD_SCREEN_PLAY, - CMD_SCREEN_FILE, - CMD_SCREEN_ARTIST, - CMD_SCREEN_SEARCH, - CMD_SCREEN_SONG, - CMD_SCREEN_KEYDEF, - CMD_SCREEN_HELP, - CMD_SCREEN_LYRICS, - CMD_SCREEN_OUTPUTS, - CMD_SCREEN_CHAT, - CMD_LYRICS_UPDATE, - CMD_EDIT, - CMD_INTERRUPT, - CMD_GO_ROOT_DIRECTORY, - CMD_GO_PARENT_DIRECTORY, - CMD_LOCATE, - CMD_QUIT -} command_t; - - -#ifndef NCMPC_MINI -/* command definition flags */ -#define COMMAND_KEY_MODIFIED 0x01 -#define COMMAND_KEY_CONFLICT 0x02 -#endif - -/* write key bindings flags */ -#define KEYDEF_WRITE_HEADER 0x01 -#define KEYDEF_WRITE_ALL 0x02 -#define KEYDEF_COMMENT_ALL 0x04 - -typedef struct { - int keys[MAX_COMMAND_KEYS]; - char flags; - command_t command; - const char *name; - const char *description; -} command_definition_t; - -#ifdef ENABLE_KEYDEF_SCREEN -command_definition_t *get_command_definitions(); -size_t get_cmds_max_name_width(command_definition_t *cmds); -#endif - -gcc_pure -command_t -find_key_command(int key, const command_definition_t *cmds); - -void command_dump_keys(); - -#ifndef NCMPC_MINI - -/** - * @return true on success, false on error - */ -bool -check_key_bindings(command_definition_t *cmds, char *buf, size_t size); - -/** - * @return true on success, false on error - */ -bool -write_key_bindings(FILE *f, int all); - -#endif - -gcc_pure -const char *key2str(int key); - -gcc_pure -const char *get_key_description(command_t command); - -gcc_pure -const char *get_key_command_name(command_t command); - -gcc_pure -const char *get_key_names(command_t command, bool all); - -gcc_pure -command_t get_key_command(int key); - -gcc_pure -command_t -get_key_command_from_name(const char *name); - -/** - * @return true on success, false on error - */ -bool -assign_keys(command_t command, int keys[MAX_COMMAND_KEYS]); - -#endif
View file
ncmpc-0.30.tar.xz/src/match.cxx
Deleted
@@ -1,81 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "match.hxx" -#include "charset.hxx" - -#include <glib.h> - -#include <string.h> -#include <ctype.h> - -static char * -locale_casefold(const char *src) -{ - return g_utf8_casefold(LocaleToUtf8(src).c_str(), -1); -} - -GRegex * -compile_regex(const char *src, bool anchor) -{ - unsigned compile_flags = - G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE; - if (anchor) - compile_flags |= G_REGEX_ANCHORED; - - char *src_folded = locale_casefold(src); - GRegex *regex = g_regex_new ((const gchar*)src_folded, - GRegexCompileFlags(compile_flags), - GRegexMatchFlags(0), nullptr); - - g_free(src_folded); - - return regex; -} - -bool -match_regex(GRegex *regex, const char *line) -{ - char *line_folded = locale_casefold(line); - GMatchInfo *match_info; - g_regex_match(regex, line_folded, GRegexMatchFlags(0), &match_info); - bool match = (bool)g_match_info_matches(match_info); - - g_match_info_free(match_info); - g_free(line_folded); - - return match; -} - -bool -match_line(const char *line, const char *needle) -{ - char *line_folded = locale_casefold(line); - char *needle_folded = locale_casefold(needle); - - bool ret = (bool)g_regex_match_simple((const gchar*)needle_folded, - (const gchar*)line_folded, - GRegexCompileFlags(G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE), - GRegexMatchFlags(0)); - - g_free(line_folded); - g_free(needle_folded); - - return ret; -}
View file
ncmpc-0.30.tar.xz/src/match.hxx
Deleted
@@ -1,56 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef MATCH_H -#define MATCH_H - -#include "config.h" -#include "Compiler.h" - -#ifdef NCMPC_MINI - -#include <string.h> - -static inline bool -match_line(const char *line, const char *needle) -{ - return strstr(line, needle) != nullptr; -} -#else - -typedef struct _GRegex GRegex; - -GRegex * -compile_regex(const char *src, bool anchor); - -gcc_pure -bool -match_regex(GRegex *regex, const char *line); - -/** - * Checks whether the specified line matches the search string. Case - * is ignored. - */ -gcc_pure -bool -match_line(const char *line, const char *needle); - -#endif - -#endif
View file
ncmpc-0.30.tar.xz/src/ncfix.h
Deleted
@@ -1,42 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -/* - * Workarounds for libncurses oddities. - */ - -#ifndef NCFIX_H -#define NCFIX_H - -#include "ncmpc_curses.h" - -/** - * Workaround for "comparison will always evaluate as 'true' for the - * address of ...". By wrapping the macro in this inline function, - * gcc stops bitching about this. - */ -static inline int -fix_wattr_get(WINDOW *win, attr_t *attrs, short *pair, void *opts) -{ - (void)opts; - - return wattr_get(win, attrs, pair, opts); -} - -#endif
View file
ncmpc-0.30.tar.xz/src/ncmpc_curses.h
Deleted
@@ -1,32 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#if defined(HAVE_NCURSESW_CURSES_H) -# include <ncursesw/curses.h> -#elif defined(HAVE_NCURSESW_H) -# include <ncursesw.h> -#elif defined(HAVE_NCURSES_CURSES_H) -# include <ncurses/curses.h> -#elif defined(HAVE_NCURSES_H) -# include <ncurses.h> -#elif defined(HAVE_CURSES_H) -# include <curses.h> -#else -# error "SysV or X/Open-compatible Curses header file required" -#endif
View file
ncmpc-0.30.tar.xz/src/net/async_connect.cxx
Deleted
@@ -1,132 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "async_connect.hxx" -#include "../Compiler.h" - -#include <glib.h> - -#ifdef WIN32 -#include <ws2tcpip.h> -#endif - -#include <assert.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -struct async_connect { - const struct async_connect_handler *handler; - void *handler_ctx; - - socket_t fd; - - guint source_id; -}; - -static gboolean -async_connect_source_callback(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, - gpointer data) -{ - auto *ac = (struct async_connect *)data; - - const int fd = ac->fd; - const struct async_connect_handler *const handler = ac->handler; - void *const ctx = ac->handler_ctx; - g_free(ac); - - int s_err = 0; - socklen_t s_err_size = sizeof(s_err); - - if (getsockopt(fd, SOL_SOCKET, SO_ERROR, - (char*)&s_err, &s_err_size) < 0) - s_err = -last_socket_error(); - - if (s_err == 0) { - handler->success(fd, ctx); - } else { - close_socket(fd); - char msg[256]; - snprintf(msg, sizeof(msg), "Failed to connect socket: %s", - strerror(-s_err)); - handler->error(msg, ctx); - } - - return false; -} - -void -async_connect_start(struct async_connect **acp, - const struct sockaddr *address, size_t address_size, - const struct async_connect_handler *handler, void *ctx) -{ - socket_t fd = create_socket(address->sa_family, SOCK_STREAM, 0); - if (fd == INVALID_SOCKET) { - char msg[256]; - snprintf(msg, sizeof(msg), "Failed to create socket: %s", - strerror(errno)); - handler->error(msg, ctx); - return; - } - - if (connect(fd, address, address_size) == 0) { - handler->success(fd, ctx); - return; - } - - const int e = last_socket_error(); - if (!would_block(e)) { - close_socket(fd); - char msg[256]; - snprintf(msg, sizeof(msg), "Failed to connect socket: %s", - strerror(e)); - handler->error(msg, ctx); - return; - } - - struct async_connect *ac = g_new(struct async_connect, 1); - ac->handler = handler; - ac->handler_ctx = ctx; - ac->fd = fd; - - GIOChannel *channel = g_io_channel_unix_new(fd); - ac->source_id = g_io_add_watch(channel, G_IO_OUT, - async_connect_source_callback, ac); - g_io_channel_unref(channel); - - *acp = ac; -} - -void -async_connect_cancel(struct async_connect *ac) -{ - g_source_remove(ac->source_id); - close_socket(ac->fd); - g_free(ac); -}
View file
ncmpc-0.30.tar.xz/src/net/async_connect.hxx
Deleted
@@ -1,56 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef NET_ASYNC_CONNECT_H -#define NET_ASYNC_CONNECT_H - -#include "socket.hxx" - -#include <stddef.h> - -struct sockaddr; -struct async_connect; - -struct async_connect_handler { - void (*success)(socket_t fd, void *ctx); - void (*error)(const char *message, void *ctx); -}; - -/** - * Create a socket and connect it to the given address. - */ -void -async_connect_start(struct async_connect **acp, - const struct sockaddr *address, - size_t address_size, - const struct async_connect_handler *handler, void *ctx); - -void -async_connect_cancel(struct async_connect *ac); - -#endif
View file
ncmpc-0.30.tar.xz/src/net/async_rconnect.cxx
Deleted
@@ -1,149 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "async_rconnect.hxx" -#include "async_connect.hxx" -#include "resolver.hxx" -#include "../Compiler.h" - -#include <string> - -#include <assert.h> -#include <stdio.h> -#include <string.h> - -struct async_rconnect { - const struct async_rconnect_handler *handler; - void *handler_ctx; - - const char *host; - struct resolver *resolver; - - struct async_connect *connect = nullptr; - - std::string last_error; - - async_rconnect(const char *_host, struct resolver *_resolver, - const struct async_rconnect_handler &_handler, - void *_ctx) - :handler(&_handler), handler_ctx(_ctx), - host(_host), resolver(_resolver) {} - - ~async_rconnect() { - if (connect != nullptr) - async_connect_cancel(connect); - resolver_free(resolver); - } -}; - -static void -async_rconnect_next(struct async_rconnect *rc); - -static void -async_rconnect_success(socket_t fd, void *ctx) -{ - auto *rc = (struct async_rconnect *)ctx; - rc->connect = nullptr; - - rc->handler->success(fd, rc->handler_ctx); - - delete rc; -} - -static void -async_rconnect_error(const char *message, void *ctx) -{ - auto *rc = (struct async_rconnect *)ctx; - rc->connect = nullptr; - - rc->last_error = message; - - async_rconnect_next(rc); -} - -static const struct async_connect_handler async_rconnect_connect_handler = { - .success = async_rconnect_success, - .error = async_rconnect_error, -}; - -static void -async_rconnect_next(struct async_rconnect *rc) -{ - assert(rc->connect == nullptr); - - const struct resolver_address *a = resolver_next(rc->resolver); - if (a == nullptr) { - char msg[256]; - - if (rc->last_error.empty()) { - snprintf(msg, sizeof(msg), - "Host '%s' has no address", - rc->host); - } else { - snprintf(msg, sizeof(msg), - "Failed to connect to host '%s': %s", - rc->host, rc->last_error.c_str()); - } - - rc->handler->error(msg, rc->handler_ctx); - delete rc; - return; - } - - async_connect_start(&rc->connect, a->addr, a->addrlen, - &async_rconnect_connect_handler, rc); -} - -void -async_rconnect_start(struct async_rconnect **rcp, - const char *host, unsigned port, - const struct async_rconnect_handler *handler, void *ctx) -{ - struct resolver *r = resolver_new(host, port); - if (host == nullptr) - host = "[default]"; - - if (r == nullptr) { - char msg[256]; - snprintf(msg, sizeof(msg), "Failed to resolve host '%s'", - host); - handler->error(msg, ctx); - return; - } - - auto *rc = new async_rconnect(host, r, *handler, ctx); - *rcp = rc; - - async_rconnect_next(rc); -} - -void -async_rconnect_cancel(struct async_rconnect *rc) -{ - delete rc; -}
View file
ncmpc-0.30.tar.xz/src/net/async_rconnect.hxx
Deleted
@@ -1,52 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef NET_ASYNC_RCONNECT_H -#define NET_ASYNC_RCONNECT_H - -#include <mpd/client.h> - -struct async_rconnect; - -struct async_rconnect_handler { - void (*success)(int fd, void *ctx); - void (*error)(const char *message, void *ctx); -}; - -/** - * Resolve a host name and connect to it asynchronously. - */ -void -async_rconnect_start(struct async_rconnect **rcp, - const char *host, unsigned port, - const struct async_rconnect_handler *handler, void *ctx); - -void -async_rconnect_cancel(struct async_rconnect *rc); - -#endif
View file
ncmpc-0.30.tar.xz/src/net/resolver.cxx
Deleted
@@ -1,202 +0,0 @@ -/* libmpdclient - (c) 2003-2018 The Music Player Daemon Project - This project's homepage is: http://www.musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "resolver.hxx" -#include "config.h" - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#ifdef WIN32 -# include <winsock2.h> -# include <ws2tcpip.h> -#else -# include <sys/socket.h> -# include <sys/un.h> -#ifdef ENABLE_TCP -# include <netinet/in.h> -# include <arpa/inet.h> -# include <netdb.h> -#endif -#endif - -struct resolver { - enum { - TYPE_ZERO, TYPE_ONE, TYPE_ANY - } type; - -#ifdef ENABLE_TCP -#ifdef HAVE_GETADDRINFO - struct addrinfo *ai; - const struct addrinfo *next; -#else - struct sockaddr_in sin; -#endif -#endif - - struct resolver_address current; - -#ifndef WIN32 - struct sockaddr_un saun; -#endif -}; - -struct resolver * -resolver_new(const char *host, unsigned port) -{ - struct resolver *resolver = (struct resolver *)malloc(sizeof(*resolver)); - if (resolver == nullptr) - return nullptr; - - if (host[0] == '/' || host[0] == '@') { -#ifndef WIN32 - const bool is_abstract = *host == '@'; - /* sun_path must be null-terminated unless it's an abstract - socket */ - const size_t path_length = strlen(host) + !is_abstract; - if (path_length > sizeof(resolver->saun.sun_path)) { - free(resolver); - return nullptr; - } - - resolver->saun.sun_family = AF_UNIX; - memcpy(resolver->saun.sun_path, host, path_length); - - if (host[0] == '@') - /* abstract socket */ - resolver->saun.sun_path[0] = 0; - - resolver->current.family = PF_UNIX; - resolver->current.protocol = 0; - resolver->current.addrlen = sizeof(resolver->saun) - - sizeof(resolver->saun.sun_path) + path_length; - resolver->current.addr = (const struct sockaddr *)&resolver->saun; - resolver->type = resolver::TYPE_ONE; -#else /* WIN32 */ - /* there are no UNIX domain sockets on Windows */ - free(resolver); - return nullptr; -#endif /* WIN32 */ - } else { -#ifdef ENABLE_TCP -#ifdef HAVE_GETADDRINFO - struct addrinfo hints; - char service[20]; - int ret; - - memset(&hints, 0, sizeof(hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_protocol = IPPROTO_TCP; - - snprintf(service, sizeof(service), "%d", port); - - ret = getaddrinfo(host, service, &hints, &resolver->ai); - if (ret != 0) { - free(resolver); - return nullptr; - } - - resolver->next = resolver->ai; - resolver->type = resolver::TYPE_ANY; -#else - const struct hostent *he; - - he = gethostbyname(host); - if (he == nullptr) { - free(resolver); - return nullptr; - } - - if (he->h_addrtype != AF_INET) { - free(resolver); - return nullptr; - } - - - memset(&resolver->sin, 0, sizeof(resolver->sin)); - resolver->sin.sin_family = AF_INET; - resolver->sin.sin_port = htons(port); - memcpy((char *)&resolver->sin.sin_addr.s_addr, - (char *)he->h_addr, he->h_length); - - resolver->current.family = PF_INET; - resolver->current.protocol = 0; - resolver->current.addrlen = sizeof(resolver->sin); - resolver->current.addr = (const struct sockaddr *)&resolver->sin; - - resolver->type = TYPE_ONE; -#endif -#else /* !ENABLE_TCP */ - (void)port; - free(resolver); - return nullptr; -#endif - } - - return resolver; -} - -void -resolver_free(struct resolver *resolver) -{ -#if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO) - if (resolver->type == resolver::TYPE_ANY) - freeaddrinfo(resolver->ai); -#endif - free(resolver); -} - -const struct resolver_address * -resolver_next(struct resolver *resolver) -{ - if (resolver->type == resolver::TYPE_ZERO) - return nullptr; - - if (resolver->type == resolver::TYPE_ONE) { - resolver->type = resolver::TYPE_ZERO; - return &resolver->current; - } - -#if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO) - if (resolver->next == nullptr) - return nullptr; - - resolver->current.family = resolver->next->ai_family; - resolver->current.protocol = resolver->next->ai_protocol; - resolver->current.addrlen = resolver->next->ai_addrlen; - resolver->current.addr = resolver->next->ai_addr; - - resolver->next = resolver->next->ai_next; - - return &resolver->current; -#else - return nullptr; -#endif -}
View file
ncmpc-0.30.tar.xz/src/net/resolver.hxx
Deleted
@@ -1,52 +0,0 @@ -/* libmpdclient - (c) 2003-2018 The Music Player Daemon Project - This project's homepage is: http://www.musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef LIBMPDCLIENT_RESOLVER_H -#define LIBMPDCLIENT_RESOLVER_H - -#include <stddef.h> - -struct resolver; - -struct resolver_address { - int family; - int protocol; - size_t addrlen; - const struct sockaddr *addr; -}; - -struct resolver * -resolver_new(const char *host, unsigned port); - -void -resolver_free(struct resolver *resolver); - -const struct resolver_address * -resolver_next(struct resolver *resolver); - -#endif
View file
ncmpc-0.30.tar.xz/src/net/socket.cxx
Deleted
@@ -1,76 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#include "socket.hxx" - -#ifndef WIN32 -#include <fcntl.h> -#endif - -static void -socket_set_cloexec(socket_t fd) -{ -#ifndef WIN32 - fcntl(fd, F_SETFD, FD_CLOEXEC); -#else - (void)fd; -#endif -} - -static void -socket_set_nonblock(socket_t fd) -{ -#ifdef WIN32 - u_long val = 1; - ioctlsocket(fd, FIONBIO, &val); -#else - int flags = fcntl(fd, F_GETFL); - if (flags >= 0) - fcntl(fd, F_SETFL, flags | O_NONBLOCK); -#endif -} - -socket_t -create_socket(int domain, int type, int protocol) -{ - socket_t fd; - -#if defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK) - fd = socket(domain, type | SOCK_CLOEXEC | SOCK_NONBLOCK, protocol); - if (fd != INVALID_SOCKET || errno != EINVAL) - return fd; -#endif - - fd = socket(domain, type, protocol); - if (fd != INVALID_SOCKET) { - socket_set_cloexec(fd); - socket_set_nonblock(fd); - } - - return fd; -}
View file
ncmpc-0.30.tar.xz/src/net/socket.hxx
Deleted
@@ -1,73 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef NET_SOCKET_H -#define NET_SOCKET_H - -#include "types.hxx" - -#ifndef WIN32 -#include <errno.h> -#include <unistd.h> -#include <sys/socket.h> -#endif - -socket_t -create_socket(int domain, int type, int protocol); - -static inline void -close_socket(socket_t s) -{ -#ifdef WIN32 - closesocket(s); -#else - close(s); -#endif -} - -static inline int -last_socket_error() -{ -#ifdef WIN32 - return WSAGetLastError(); -#else - return errno; -#endif -} - -static inline bool -would_block(int e) -{ -#ifdef WIN32 - return e == WSAEINPROGRESS || e == WSAEWOULDBLOCK; -#else - return e == EINPROGRESS || e == EAGAIN; -#endif -} - -#endif
View file
ncmpc-0.30.tar.xz/src/net/types.hxx
Deleted
@@ -1,44 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - (c) 2004-2018 The Music Player Daemon Project - Project homepage: http://musicpd.org - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - - Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef NET_TYPES_H -#define NET_TYPES_H - -#ifdef WIN32 - -#include <winsock2.h> -typedef SOCKET socket_t; - -#else - -typedef int socket_t; -#define INVALID_SOCKET -1 - -#endif - -#endif
View file
ncmpc-0.30.tar.xz/src/options.cxx
Deleted
@@ -1,345 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "options.hxx" -#include "config.h" -#include "charset.hxx" -#include "command.hxx" -#include "conf.hxx" -#include "i18n.h" - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <glib.h> - -#define ERROR_UNKNOWN_OPTION 0x01 -#define ERROR_BAD_ARGUMENT 0x02 -#define ERROR_GOT_ARGUMENT 0x03 -#define ERROR_MISSING_ARGUMENT 0x04 - -typedef struct { - int shortopt; - const char *longopt; - const char *argument; - const char *descrition; -} arg_opt_t; - - -typedef void (*option_callback_fn_t)(int c, const char *arg); - - -options_t options; - -static const arg_opt_t option_table[] = { - { '?', "help", nullptr, "Show this help message" }, - { 'V', "version", nullptr, "Display version information" }, - { 'c', "colors", nullptr, "Enable colors" }, - { 'C', "no-colors", nullptr, "Disable colors" }, -#ifdef HAVE_GETMOUSE - { 'm', "mouse", nullptr, "Enable mouse" }, - { 'M', "no-mouse", nullptr, "Disable mouse" }, -#endif - { 'e', "exit", nullptr, "Exit on connection errors" }, - { 'p', "port", "PORT", "Connect to server on port" }, - { 'h', "host", "HOST", "Connect to server on host" }, - { 'P', "password","PASSWORD", "Connect with password" }, - { 'f', "config", "FILE", "Read configuration from file" }, - { 'k', "key-file","FILE", "Read key bindings from file" }, -#ifndef NDEBUG - { 'K', "dump-keys", nullptr, "Dump key bindings to stdout" }, -#endif -}; - -static const unsigned option_table_size = sizeof(option_table) / sizeof(option_table[0]); - -static const arg_opt_t * -lookup_option(int s, char *l) -{ - unsigned i; - - for (i = 0; i < option_table_size; ++i) { - if (l && strcmp(l, option_table[i].longopt) == 0) - return &option_table[i]; - if (s && s == option_table[i].shortopt) - return &option_table[i]; - } - - return nullptr; -} - -static void -option_error(int error, const char *option, const char *arg) -{ - switch (error) { - case ERROR_UNKNOWN_OPTION: - fprintf(stderr, PACKAGE ": invalid option %s\n", option); - break; - case ERROR_BAD_ARGUMENT: - fprintf(stderr, PACKAGE ": bad argument: %s\n", option); - break; - case ERROR_GOT_ARGUMENT: - fprintf(stderr, PACKAGE ": invalid option %s=%s\n", option, arg); - break; - case ERROR_MISSING_ARGUMENT: - fprintf(stderr, PACKAGE ": missing value for %s option\n", option); - break; - default: - fprintf(stderr, PACKAGE ": internal error %d\n", error); - break; - } - - exit(EXIT_FAILURE); -} - -static void -display_help() -{ - printf("Usage: %s [OPTION]...\n", PACKAGE); - - for (unsigned i = 0; i < option_table_size; ++i) { - char tmp[32]; - - if (option_table[i].argument) - snprintf(tmp, sizeof(tmp), "%s=%s", - option_table[i].longopt, - option_table[i].argument); - else - g_strlcpy(tmp, option_table[i].longopt, 64); - - printf(" -%c, --%-20s %s\n", - option_table[i].shortopt, - tmp, - option_table[i].descrition); - } -} - -static void -handle_option(int c, const char *arg) -{ - switch (c) { - case '?': /* --help */ - display_help(); - exit(EXIT_SUCCESS); - case 'V': /* --version */ - puts(PACKAGE " version: " VERSION "\n" - "build options:" -#ifdef NCMPC_MINI - " mini" -#endif -#ifndef NDEBUG - " debug" -#endif -#ifdef ENABLE_MULTIBYTE - " multibyte" -#endif -#ifdef HAVE_CURSES_ENHANCED - " wide" -#endif -#ifdef ENABLE_LOCALE - " locale" -#endif -#ifdef ENABLE_NLS - " nls" -#endif -#ifdef ENABLE_COLORS - " colors" -#else - " no-colors" -#endif -#ifdef ENABLE_LIRC - " lirc" -#endif -#ifdef HAVE_GETMOUSE - " getmouse" -#endif -#ifdef ENABLE_ARTIST_SCREEN - " artist-screen" -#endif -#ifdef ENABLE_HELP_SCREEN - " help-screen" -#endif -#ifdef ENABLE_SEARCH_SCREEN - " search-screen" -#endif -#ifdef ENABLE_SONG_SCREEN - " song-screen" -#endif -#ifdef ENABLE_KEYDEF_SCREEN - " key-screen" -#endif -#ifdef ENABLE_LYRICS_SCREEN - " lyrics-screen" -#endif -#ifdef ENABLE_OUTPUTS_SCREEN - " outputs-screen" -#endif -#ifdef ENABLE_CHAT_SCREEN - " chat-screen" -#endif - - "\n"); -#ifndef NCMPC_MINI - { - char *user_conf = build_user_conf_filename(); - char *system_conf = build_system_conf_filename(); - - printf("configuration files:\n %s\n %s\n\n", - user_conf, system_conf); - - g_free(user_conf); - g_free(system_conf); - } - if (strcmp("translator-credits", _("translator-credits")) != 0) - /* To translators: these credits are shown - when ncmpc is started with "--version" */ - printf("\n%s\n", _("translator-credits")); -#endif - exit(EXIT_SUCCESS); - case 'c': /* --colors */ -#ifdef ENABLE_COLORS - options.enable_colors = true; -#endif - break; - case 'C': /* --no-colors */ -#ifdef ENABLE_COLORS - options.enable_colors = false; -#endif - break; - case 'm': /* --mouse */ -#ifdef HAVE_GETMOUSE - options.enable_mouse = true; -#endif - break; - case 'M': /* --no-mouse */ -#ifdef HAVE_GETMOUSE - options.enable_mouse = false; -#endif - break; - case 'e': /* --exit */ - /* deprecated */ - break; - case 'p': /* --port */ - options.port = atoi(arg); - break; - case 'h': /* --host */ - options.host = arg; - break; - case 'P': /* --password */ - options.password = LocaleToUtf8(arg).c_str(); - break; - case 'f': /* --config */ - options.config_file = arg; - break; - case 'k': /* --key-file */ - options.key_file = arg; - break; -#if !defined(NDEBUG) && !defined(NCMPC_MINI) - case 'K': /* --dump-keys */ - read_configuration(); - write_key_bindings(stdout, KEYDEF_WRITE_ALL | KEYDEF_COMMENT_ALL); - exit(EXIT_SUCCESS); - break; -#endif - default: - fprintf(stderr,"Unknown Option %c = %s\n", c, arg); - break; - } -} - -void -options_parse(int argc, const char *argv[]) -{ - const arg_opt_t *opt = nullptr; - option_callback_fn_t option_cb = handle_option; - - for (int i = 1; i < argc; i++) { - const char *arg = argv[i]; - size_t len = strlen(arg); - - /* check for a long option */ - if (g_str_has_prefix(arg, "--")) { - char *name, *value; - - /* make sure we got an argument for the previous option */ - if( opt && opt->argument ) - option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); - - /* retrieve a option argument */ - if ((value=g_strrstr(arg+2, "="))) { - *value = '\0'; - name = g_strdup(arg); - *value = '='; - value++; - } else - name = g_strdup(arg); - - /* check if the option exists */ - if( (opt=lookup_option(0, name+2)) == nullptr ) - option_error(ERROR_UNKNOWN_OPTION, name, nullptr); - g_free(name); - - /* abort if we got an argument to the option and don't want one */ - if( value && opt->argument==nullptr ) - option_error(ERROR_GOT_ARGUMENT, arg, value); - - /* execute option callback */ - if (value || opt->argument==nullptr) { - option_cb (opt->shortopt, value); - opt = nullptr; - } - } - /* check for short options */ - else if (len>=2 && g_str_has_prefix(arg, "-")) { - size_t j; - - for(j=1; j<len; j++) { - /* make sure we got an argument for the previous option */ - if (opt && opt->argument) - option_error(ERROR_MISSING_ARGUMENT, - opt->longopt, opt->argument); - - /* check if the option exists */ - if ((opt=lookup_option(arg[j], nullptr)) == nullptr) - option_error(ERROR_UNKNOWN_OPTION, arg, nullptr); - - /* if no option argument is needed execute callback */ - if (opt->argument == nullptr) { - option_cb (opt->shortopt, nullptr); - opt = nullptr; - } - } - } else { - /* is this a option argument? */ - if (opt && opt->argument) { - option_cb (opt->shortopt, arg); - opt = nullptr; - } else - option_error(ERROR_BAD_ARGUMENT, arg, nullptr); - } - } - - if (opt && opt->argument == nullptr) - option_cb (opt->shortopt, nullptr); - else if (opt && opt->argument) - option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); - - if (options.host.empty() && getenv("MPD_HOST")) - options.host = getenv("MPD_HOST"); -}
View file
ncmpc-0.30.tar.xz/src/options.hxx
Deleted
@@ -1,94 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef OPTIONS_H -#define OPTIONS_H - -#include "config.h" -#include "defaults.hxx" - -#include <vector> -#include <string> -#include <chrono> - -typedef struct { - std::string host; - std::string password; - std::string config_file; - std::string key_file; - std::string list_format = DEFAULT_LIST_FORMAT; - std::string search_format; - std::string status_format = DEFAULT_STATUS_FORMAT; -#ifndef NCMPC_MINI - std::string xterm_title_format; - std::string scroll_sep = DEFAULT_SCROLL_SEP; -#endif - std::vector<std::string> screen_list = DEFAULT_SCREEN_LIST; - bool display_remaining_time; - int port; - int timeout_ms = 0; - int crossfade_time = DEFAULT_CROSSFADE_TIME; - int search_mode; - int hide_cursor; - int seek_time = 1; -#ifdef ENABLE_LYRICS_SCREEN - int lyrics_timeout = DEFAULT_LYRICS_TIMEOUT; - bool lyrics_autosave = false; - bool lyrics_show_plugin = false; - std::string text_editor; - bool text_editor_ask = false; -#endif -#ifdef ENABLE_CHAT_SCREEN - std::string chat_prefix; -#endif - bool find_wrap = true; - bool find_show_last_pattern; - bool list_wrap; - int scroll_offset = 0; - bool auto_center; - bool wide_cursor = true; - bool hardware_cursor; - -#ifdef ENABLE_COLORS - bool enable_colors; -#endif - bool audible_bell = true; - bool visible_bell; - bool bell_on_wrap = true; - std::chrono::seconds status_message_time = std::chrono::seconds(3); -#ifndef NCMPC_MINI - bool enable_xterm_title; -#endif -#ifdef HAVE_GETMOUSE - bool enable_mouse; -#endif -#ifndef NCMPC_MINI - bool scroll = DEFAULT_SCROLL; - bool visible_bitrate; - bool welcome_screen_list = true; - bool jump_prefix_only = true; - bool second_column = true; -#endif -} options_t; - -extern options_t options; - -void options_parse(int argc, const char **argv); - -#endif
View file
ncmpc-0.30.tar.xz/src/screen_interface.hxx
Deleted
@@ -1,35 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef NCMPC_SCREEN_INTERFACE_H -#define NCMPC_SCREEN_INTERFACE_H - -#include "config.h" -#include "ncmpc_curses.h" -#include "Size.hxx" - -class Page; -class ScreenManager; - -struct screen_functions { - const char *name; - Page *(*init)(ScreenManager &screen, WINDOW *w, Size size); -}; - -#endif
View file
ncmpc-0.30.tar.xz/src/signals.hxx
Deleted
@@ -1,48 +0,0 @@ -/* ncmpc (Ncurses MPD Client) - * (c) 2004-2018 The Music Player Daemon Project - * Project homepage: http://musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef SIGNALS_H -#define SIGNALS_H - -typedef struct _GMainLoop GMainLoop; -class ScreenManager; - -#ifdef WIN32 - -static inline void -signals_init(GMainLoop *, ScreenManager &) -{ -} - -static inline void -signals_deinit() -{ -} - -#else - -void -signals_init(GMainLoop *main_loop, ScreenManager &screen); - -void -signals_deinit(); - -#endif - -#endif
View file
ncmpc-0.30.tar.xz/NEWS -> ncmpc-0.32.tar.xz/NEWS
Changed
@@ -1,3 +1,25 @@ +ncmpc 0.32 - (2018-10-05) +* fix crash bug on queue page +* fix crash bug on lyrics page +* fix off-by-one buffer overflow bug +* fix manpage installation directory +* fix build breakages with some ncurses builds +* work around GCC 4.9 build failure +* remove doxygen support +* new dependency: Boost +* remove dependency on GLib + +ncmpc 0.31 - (2018-09-19) +* fix "No such song" in search screen +* fix progressbar when colors are disabled +* enable colors by default +* allow configuring per-style background colors +* keep current song in xterm title when MPD is paused +* load configuration from $XDG_CONFIG_HOME/ncmpc/config +* always show the screen list at the top +* fix memory leak +* require MPD 0.19 + ncmpc 0.30 - (2018-04-04) * fix crash after pressing ^W in search screen * fix crash bug in chat screen
View file
ncmpc-0.30.tar.xz/README.rst -> ncmpc-0.32.tar.xz/README.rst
Changed
@@ -4,6 +4,9 @@ ncmpc is a curses client for the `Music Player Daemon <http://www.musicpd.org/>`__. +.. image:: https://www.musicpd.org/clients/ncmpc/screenshot.png + :alt: Screenshot of ncmpc + How to compile and install ncmpc -------------------------------- @@ -11,12 +14,21 @@ You need: - a C++14 compliant compiler (e.g. gcc or clang) -- libmpdclient 2.9 -- `GLib 2.30 <https://developer.gnome.org/glib/>`__ +- `libmpdclient <https://www.musicpd.org/libs/libmpdclient/>`__ 2.9 +- `Boost 1.62 <https://www.boost.org/>`__ - `ncurses <https://www.gnu.org/software/ncurses/>`__ -- `Meson 0.37 <http://mesonbuild.com/>`__ and `Ninja <https://ninja-build.org/>`__ +- `Meson 0.47 <http://mesonbuild.com/>`__ and `Ninja <https://ninja-build.org/>`__ + +Optional: + +- `PCRE <https://www.pcre.org/>`__ (for regular expression support in + the "find" command) +- `liblirc <https://sourceforge.net/projects/lirc/>`__ (for infrared + remote support) +- `Sphinx <http://www.sphinx-doc.org/en/master/>`__ (for building + documentation) -Run ``meson``: +Run ``meson``:: meson . output @@ -26,24 +38,12 @@ ninja -C output install -Usage ------ - -ncmpc connects to a MPD running on a machine on the local network. -By default, ncmpc connects to localhost:6600. This can be -changed either at compile-time, or by exporting the MPD_HOST and -MPD_PORT environment variables, or by the command line options ``--host`` -and ``--port``:: - - ncmpc --host=musicserver --port=44000 - -For more information please view ncmpc's manual page. - - Links ----- - `Home page and download <http://www.musicpd.org/clients/ncmpc/>`__ +- `Documentation <https://www.musicpd.org/doc/ncmpc/html/>`__ - `git repository <https://github.com/MusicPlayerDaemon/ncmpc/>`__ - `Bug tracker <https://github.com/MusicPlayerDaemon/ncmpc/issues>`__ +- `Help translate ncmpc to your native language <https://hosted.weblate.org/projects/ncmpc/>`__ - `Forum <http://forum.musicpd.org/>`__
View file
ncmpc-0.30.tar.xz/build/configure.py -> ncmpc-0.32.tar.xz/build/configure.py
Changed
@@ -16,14 +16,50 @@ ], }, + 'clang': { + 'options': [ + '-Dcurses=ncursesw', + '-Dmouse=true', + '-Dlirc=true', + '-Dlyrics_screen=true', + '-Dchat_screen=true', + '-Ddocumentation=false', + ], + 'env': { + 'CC': 'clang', + 'CXX': 'clang++', + 'LDFLAGS': '-fuse-ld=lld', + }, + }, + 'release': { 'options': [ - '--buildtype', 'release', + '--buildtype', 'debugoptimized', + '-Db_ndebug=true', + '-Db_lto=true', + '-Dcurses=ncursesw', + '-Dmouse=true', + '-Ddocumentation=false', + ], + 'env': { + 'LDFLAGS': '-fuse-ld=gold -Wl,--gc-sections,--icf=all', + }, + }, + + 'llvm': { + 'options': [ + '--buildtype', 'debugoptimized', '-Db_ndebug=true', '-Db_lto=true', '-Dcurses=ncursesw', '-Dmouse=true', + '-Ddocumentation=false', ], + 'env': { + 'CC': 'clang', + 'CXX': 'clang++', + 'LDFLAGS': '-fuse-ld=lld', + }, }, 'mini': { @@ -33,7 +69,7 @@ '-Db_lto=true', '-Dlirc=false', '-Dcurses=ncurses', - '-Dcolor=false', + '-Dcolors=false', '-Dmouse=false', '-Dmultibyte=false', '-Dlocale=false', @@ -41,7 +77,11 @@ '-Dtcp=false', '-Dasync_connect=false', '-Dmini=true', + '-Ddocumentation=false', ], + 'env': { + 'LDFLAGS': '-fuse-ld=gold -Wl,--gc-sections,--icf=all', + }, }, }
View file
ncmpc-0.30.tar.xz/doc/conf.py -> ncmpc-0.32.tar.xz/doc/conf.py
Changed
@@ -38,7 +38,7 @@ # built documents. # # The short X.Y version. -version = '0.30' +version = '0.32' # The full version, including alpha/beta/rc tags. release = version
View file
ncmpc-0.30.tar.xz/doc/config.sample -> ncmpc-0.32.tar.xz/doc/config.sample
Changed
@@ -1,5 +1,5 @@ ## -## Configuration file for ncmpc (~/.ncmpc/config) +## Configuration file for ncmpc (~/.config/ncmpc/config) ## ############## Connection ################### @@ -57,7 +57,7 @@ #seek-time = 1 ############## Display ###################### -## Show a list of the screens in the top line on startup. +## Show a list of the screens in the top line. #welcome-screen-list = yes ## Make the cursor as wide as the screen. @@ -77,13 +77,13 @@ ## list-format ## The format used to display songs in the main window. -#list-format = "%name%|[%artist% - ]%title%|%file%" +#list-format = "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]" ## The format used to display songs in the search window. -#search-format = "%name%|[%artist% - ]%title%|%file%" +#search-format = "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]" ## The format used to display songs on the status line. -#status-format = "[%artist% - ]%title%|%shortfile%" +#status-format = "[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]" ## The time, in seconds, for which status messages will be displayed. #status-message-time = 3 @@ -99,7 +99,7 @@ #set-xterm-title = no ## The format used to for the xterm title when ncmpc is playing. -#xterm-title-format = "ncmpc: [ %name%|[%artist% - ]%title%|%file%]" +#xterm-title-format = "ncmpc: [%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]]" ## Automatically save the lyrics after receiving them. #lyrics-autosave = no
View file
ncmpc-0.30.tar.xz/doc/index.rst -> ncmpc-0.32.tar.xz/doc/index.rst
Changed
@@ -79,8 +79,9 @@ ------------- When ncmpc starts it tries to read the user's configuration file, -:file:`~/.ncmpc/config`. If no user configuration file is found then -ncmpc tries to load the global settings from +:file:`$XDG_CONFIG_HOME/ncmpc/config` (usually +:file:`~/.config/ncmpc/config`). If no user configuration file is +found then ncmpc tries to load the global settings from :file:`$SYSCONFDIR/ncmpc/config` (the actual path is displayed in the output of the :option:`--version` option). An example configuration file (:file:`config.sample`) is shipped with ncmpc. @@ -172,7 +173,7 @@ ^^^^^^^ :command:`welcome-screen-list = yes|no` - Show a list of the screens -in the top line on startup. +in the top line. :command:`wide-cursor = yes|no` - Make the cursor as wide as the screen. @@ -209,7 +210,7 @@ elapsed. :command:`visible-bitrate = yes|no` - Show the bitrate in the status -bar when playing a stream. :command:` +bar when playing a stream. :command:`set-xterm-title = yes|no` - Change the XTerm title (ncmpc will not restore the title). @@ -221,18 +222,54 @@ Colors ^^^^^^ -:command:`enable-colors = yes|no` - Enable/disable colors. +:command:`enable-colors = yes|no` - Enable/disable colors. Defaults +to ``yes``. -:command:`color background = COLOR` - Set the background color. If the -background color is assigned to the keyword ":samp:`none`", ncmpc will -not change the background color. Standard colors are: black, red, -green, yellow, blue, magenta, cyan and white. Terminal specific -colors can also be given as integers. +The colors used by `ncmpc` can be customized. The ``color`` directive +can be used to change how a certain style looks. It can contain a +text color and attributes. The following standard colors can be +specified by name (`official reference +<https://invisible-island.net/ncurses/man/curs_color.3x.html>`__): + + ``black``, ``red``, ``green``, ``yellow``, ``blue``, ``magenta``, + ``cyan``, ``white`` + +Example:: + + color list = cyan + +Modern terminals support up to 256 colors, but they are not +standardized. You can select them by specifying the number. +Example:: + + color title = 42 + +The background color can be specified after the text color separated +by a slash. You can omit the text color if you want to change only +the background color:: + + color title = white/blue + color title = /blue + +The color ``none`` uses the terminal's default color. + +Attributes can be used to modify the font appearance. The following +attributes can be specified (`official reference +<https://invisible-island.net/ncurses/man/curs_attr.3x.html>`__), +though many of them are not supported by prevalent terminals: + + ``standout``, ``underline``, ``reverse``, ``blink``, ``dim``, + ``bold`` + +Example:: + + color alert = red blink + +:command:`color background = COLOR` - Set the default background +color. :command:`color title = COLOR[,ATTRIBUTE]...` - Set the text color and -attributes for the title row. Text colors are the same as for the -background. Valid attributes are: standout, underline, reverse, blink, -dim, and bold. +attributes for the title row. :command:`color title-bold = COLOR[,ATTRIBUTE]...` - Set the text color for the title row (the bold part). @@ -258,7 +295,7 @@ :command:`color progressbar = COLOR[,ATTRIBUTE]...` - Set the color of the progress indicator. -:command:`color progressbar = COLOR[,ATTRIBUTE]...` - Set the color of +:command:`color progressbar-background = COLOR[,ATTRIBUTE]...` - Set the color of the progress indicator background. :command:`color status-state = COLOR[,ATTRIBUTE]...` - Set the text @@ -283,8 +320,9 @@ ---- When ncmpc starts it tries to read user-defined key bindings from the -:file:`~/.ncmpc/keys` file. If no user-defined key bindings are found -then ncmpc tries to load the global key bindings from +:file:`$XDG_CONFIG_HOME/ncmpc/keys` (usually +:file:`~/.config/ncmpc/keys`) file. If no user-defined key bindings +are found then ncmpc tries to load the global key bindings from :file:`$SYSCONFDIR/ncmpc/keys` (the actual path is displayed on the help screen).
View file
ncmpc-0.30.tar.xz/doc/keys.sample -> ncmpc-0.32.tar.xz/doc/keys.sample
Changed
@@ -1,5 +1,5 @@ ## -## Key bindings for ncmpc (~/.ncmpc/keys) +## Key bindings for ncmpc (~/.config/ncmpc/keys) ## ## ## Its possible to bind maximum three keys to a command
View file
ncmpc-0.30.tar.xz/doc/meson.build -> ncmpc-0.32.tar.xz/doc/meson.build
Changed
@@ -1,45 +1,26 @@ -sphinx = find_program('sphinx-build', required:false) +sphinx = find_program('sphinx-build', required: enable_documentation == 'true') if sphinx.found() - custom_target( - 'HTML documentation', - output: 'html', - input: ['index.rst', 'conf.py'], - command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@'], - build_by_default: true, - install: true, - install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()), - ) - - custom_target( - 'Manpage documentation', - output: 'man', - input: ['index.rst', 'conf.py'], - command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@/man1'], - build_by_default: true, - install: true, - install_dir: get_option('datadir'), - ) -endif - -if get_option('documentation') - doxygen = find_program('doxygen', required: false) - - if doxygen.found() - dconf = configuration_data() - dconf.set('VERSION', meson.project_version()) - dconf.set('abs_top_srcdir', meson.source_root()) - - doxyfile = configure_file(input: 'doxygen.conf.in', - output: 'doxygen.conf', - configuration: dconf) - - datadir = join_paths(get_option('datadir'), 'doc', 'spede') + if get_option('html_manual') + custom_target( + 'HTML documentation', + output: 'html', + input: ['index.rst', 'conf.py'], + command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/html_doctrees', meson.current_source_dir(), '@OUTPUT@'], + build_by_default: true, + install: true, + install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()), + ) + endif - html_target = custom_target('apidocs', - input: doxyfile, - output: 'api', - command: [doxygen, doxyfile], - install: true, - install_dir: docdir) + if get_option('manual') + custom_target( + 'Manpage documentation', + output: 'man', + input: ['index.rst', 'conf.py'], + command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/man_doctrees', meson.current_source_dir(), '@OUTPUT@/man1'], + build_by_default: true, + install: true, + install_dir: get_option('mandir'), + ) endif endif
View file
ncmpc-0.30.tar.xz/meson.build -> ncmpc-0.32.tar.xz/meson.build
Changed
@@ -1,5 +1,5 @@ project('ncmpc', 'cpp', - version: '0.30', + version: '0.32', default_options: [ 'cpp_std=c++14' ], @@ -45,9 +45,11 @@ subdir('po') endif +conf.set('HAVE_LOCALE_T', enable_locale and cc.has_header_symbol('locale.h', 'locale_t')) +conf.set('HAVE_ICONV', enable_locale and cc.has_function('iconv')) + if get_option('tcp') conf.set('ENABLE_TCP', true) - conf.set('HAVE_GETADDRINFO', cc.has_function('getaddrinfo')) endif async_connect = get_option('async_connect') @@ -80,38 +82,22 @@ endif endif +if not cc.has_header('curses.h', dependencies: curses_dep) + error('No curses header found') +endif + if curses == 'ncursesw' conf.set('HAVE_NCURSESW', true) curses_enhanced = true curses_color = true - if cc.has_header('ncursesw/curses.h', dependencies: curses_dep) - conf.set('HAVE_NCURSESW_CURSES_H', true) - elif cc.has_header('ncursesw.h', dependencies: curses_dep) - conf.set('HAVE_NCURSESW_H', true) - else - error('No ncursesw header found') - endif elif curses == 'ncurses' conf.set('HAVE_NCURSES', true) curses_enhanced = true curses_color = true - if cc.has_header('ncurses/curses.h', dependencies: curses_dep) - conf.set('HAVE_NCURSES_CURSES_H', true) - elif cc.has_header('ncurses.h', dependencies: curses_dep) - conf.set('HAVE_NCURSES_H', true) - else - error('No ncurses header found') - endif else - if cc.has_header('curses.h', dependencies: curses_dep) - conf.set('HAVE_CURSES_H', true) - - # TODO: test this with pdcurses - curses_enhanced = cc.has_header_symbol('curses.h', '_XOPEN_CURSES', dependencies: curses_dep) - curses_color = curses_enhanced or cc.has_header_symbol('curses.h', 'COLOR_PAIR', dependencies: curses_dep) - else - error('No curses header found') - endif + # TODO: test this with pdcurses + curses_enhanced = cc.has_header_symbol('curses.h', '_XOPEN_CURSES', dependencies: curses_dep) + curses_color = curses_enhanced or cc.has_header_symbol('curses.h', 'COLOR_PAIR', dependencies: curses_dep) endif conf.set('HAVE_CURSES_ENHANCED', curses_enhanced) @@ -147,11 +133,20 @@ endif conf.set('ENABLE_LIRC', enable_lirc) -conf.set('ENABLE_COLORS', curses_color) +conf.set('ENABLE_COLORS', curses_color and get_option('colors')) common_cflags = [ # for getaddrinfo() and sigaction() with glibc '-D_GNU_SOURCE', + + # no header bloat for the iostream library we don't use + '-DBOOST_NO_IOSTREAM', + + # avoid the runtime dependency on libboost_system + '-DBOOST_ERROR_CODE_HEADER_ONLY', + + # disable deprecated boost::system features + '-DBOOST_SYSTEM_NO_DEPRECATED', ] test_cflags = [ @@ -167,11 +162,10 @@ '-Wredundant-decls', '-Wundef', '-Wno-non-virtual-dtor', '-fvisibility=hidden', - '-fno-exceptions', - '-fno-rtti', -] -test_ldflags = [ + # the only warnings we got from this are from formatted error + # messages, and their truncation is harmless + '-Wno-format-truncation', ] if get_option('buildtype') != 'debug' @@ -179,9 +173,6 @@ '-ffunction-sections', '-fdata-sections', ] - test_ldflags += [ - '-Wl,--gc-sections', - ] endif foreach f: test_cflags @@ -192,15 +183,17 @@ add_global_arguments(common_cflags, language: 'cpp') -foreach f: test_ldflags - if cc.has_argument(f) - add_global_link_arguments(f, language: 'cpp') - endif -endforeach - -glib_dep = dependency('glib-2.0', version: '>= 2.30') +thread_dep = dependency('threads') +boost_dep = dependency('boost', version: '>= 1.62') libmpdclient_dep = dependency('libmpdclient', version: '>= 2.9') +if not mini + pcre_dep = dependency('libpcre', required: false) + conf.set('HAVE_PCRE', pcre_dep.found()) +else + pcre_dep = declare_dependency() +endif + inc = include_directories( 'src', @@ -225,17 +218,14 @@ 'src/xterm_title.cxx', 'src/BasicMarquee.cxx', 'src/hscroll.cxx', - 'src/match.cxx', 'src/conf.cxx', ] endif if async_connect sources += [ - 'src/net/socket.cxx', - 'src/net/resolver.cxx', - 'src/net/async_connect.cxx', - 'src/net/async_rconnect.cxx', + 'src/net/AsyncConnect.cxx', + 'src/net/AsyncResolveConnect.cxx', 'src/aconnect.cxx', ] endif @@ -331,16 +321,23 @@ ncmpc = executable('ncmpc', 'src/Main.cxx', + 'src/Instance.cxx', 'src/gidle.cxx', 'src/mpdclient.cxx', 'src/callbacks.cxx', 'src/Queue.cxx', 'src/filelist.cxx', - 'src/options.cxx', - 'src/command.cxx', + 'src/Options.cxx', + 'src/Command.cxx', + 'src/Bindings.cxx', + 'src/GlobalBindings.cxx', 'src/keyboard.cxx', + 'src/KeyName.cxx', + 'src/Match.cxx', 'src/ncu.cxx', 'src/player_command.cxx', + 'src/DelayedSeek.cxx', + 'src/TabBar.cxx', 'src/TitleBar.cxx', 'src/ProgressBar.cxx', 'src/StatusBar.cxx', @@ -360,17 +357,24 @@ 'src/TextListRenderer.cxx', 'src/save_playlist.cxx', 'src/song_paint.cxx', - 'src/colors.cxx', + 'src/BasicColors.cxx', + 'src/CustomColors.cxx', + 'src/Styles.cxx', 'src/charset.cxx', 'src/wreadln.cxx', 'src/Completion.cxx', 'src/strfsong.cxx', 'src/time_format.cxx', + 'src/util/LocaleString.cxx', 'src/util/StringStrip.cxx', + 'src/util/StringUTF8.cxx', + 'src/util/UriUtil.cxx', sources, include_directories: inc, dependencies: [ - glib_dep, + thread_dep, + boost_dep, + pcre_dep, curses_dep, lirc_dep, libmpdclient_dep, @@ -391,4 +395,7 @@ subdir('test') endif -subdir('doc') +enable_documentation = get_option('documentation') +if enable_documentation != 'false' + subdir('doc') +endif
View file
ncmpc-0.30.tar.xz/meson_options.txt -> ncmpc-0.32.tar.xz/meson_options.txt
Changed
@@ -8,9 +8,8 @@ value: 'auto', description: 'Enable mouse support') -option('colors', type: 'combo', - choices: ['ncursesw', 'ncurses', 'auto'], - value: 'auto', +option('colors', type: 'boolean', + value: true, description: 'Enable color support') option('multibyte', type: 'boolean', @@ -80,6 +79,14 @@ value: false, description: 'Enable the chat screen') -option('documentation', type: 'boolean', - value: false, - description: 'Build API documentation') +option('documentation', type: 'combo', + choices: ['true', 'false', 'auto'], value: 'auto', + description: 'Build documentation') + +option('manual', type: 'boolean', + value: true, + description: 'Build the manual') + +option('html_manual', type: 'boolean', + value: true, + description: 'Build the HTML manual')
View file
ncmpc-0.30.tar.xz/po/POTFILES -> ncmpc-0.32.tar.xz/po/POTFILES
Changed
@@ -1,28 +1,32 @@ -src/colors.cxx -src/command.cxx +src/AlbumListPage.cxx +src/ArtistListPage.cxx +src/Bindings.cxx +src/ChatPage.cxx +src/Command.cxx src/conf.cxx +src/CustomColors.cxx +src/FileBrowserPage.cxx +src/FileListPage.cxx +src/HelpPage.cxx src/i18n.h -src/list_window.cxx +src/KeyName.cxx +src/ListWindow.cxx +src/LyricsPage.cxx src/Main.cxx src/options.cxx +src/OutputsPage.cxx src/player_command.cxx +src/QueuePage.cxx src/save_playlist.cxx -src/screen.cxx src/screen_artist.cxx -src/screen_browser.cxx -src/screen_chat.cxx src/screen_client.cxx -src/screen_file.cxx +src/screen.cxx src/screen_find.cxx -src/screen_help.cxx -src/screen_init.cxx src/screen_keydef.cxx -src/screen_lyrics.cxx -src/screen_outputs.cxx -src/screen_queue.cxx -src/screen_search.cxx -src/screen_song.cxx src/screen_utils.cxx -src/status_bar.cxx -src/title_bar.cxx -src/utils.cxx +src/SearchPage.cxx +src/SongPage.cxx +src/StatusBar.cxx +src/Styles.cxx +src/time_format.cxx +src/TitleBar.cxx
View file
ncmpc-0.30.tar.xz/po/cs.po -> ncmpc-0.32.tar.xz/po/cs.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-03-02 13:59+0000\n" "Last-Translator: Zbyněk Schwarz <Unknown>\n" "Language-Team: Czech <cs@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Neznámý příkaz" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Všechny skladby" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Varování: Neznámé barevné pole - %s\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminál postrádá podporu změny barev" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Alba interpreta: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminál postrádá podporu barev" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Přidávám '%s' do seznamu skladeb" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Všichni interpreti" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Klávesa %s je přiřazena k %s a %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Obrazovka klávesových zkratek" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Ukončit" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Posunout kurzor nahoru" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Posunout kurzoru dolů" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Přesunout kurzor na horní okraj obrazovky" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Přesunout kurzor doprostřed obrazovky" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Přesunout kurzor na dolní okraj obrazovky" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Přesunout kurzor na vrchol seznamu" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Přesunout kurzor na dno seznamu" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Page up" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Page down" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Výběr rozsahu" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Posunout o jeden řádek dolů" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Posunout o jeden řádek nahoru" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Posunout o půlku obrazovky nahoru" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Posunout o půlku obrazovky dolů" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Zvolit právě hrající skladbu" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Obrazovka nápovědy" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Obrazovka keydef" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Obrazovka prohlížení" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Přehrát/Vstoupit do adresáře" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pozastavit" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stop" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Oříznout" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Následující stopa" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Předchozí stopa" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Přetočit vpřed" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Přetočit zpět" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Zvýšit hlasitost" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Snížit hlasitost" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Vybrat/Zrušit výběr skladby v seznamu skladeb" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Vybrat všechny vypsané položky" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Smazat skladbu ze seznamu skladeb" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Přepnout režim opakování" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Přepnout náhodný režim" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Přepnout jednoduchý mód" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Přepnout režim konzumace" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Zapnout režim přerušení" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Spustit aktualizaci databáze skladeb" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Přidat url/soubor do seznamu skladeb" +msgid "Append song to queue" +msgstr "Přidat skladbu do seznamu skladeb" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Přejít do kořenového adresáře" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Přejít do nadřazeného adresáře" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Najít skladbu v prohlížeči" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Přesunout položku výše" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Přesunout položku níže" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Aktualizovat obrazovku" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Přepnout na režim vyhledávání" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Zapnout režim automatické centrování" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Další obrazovka" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Předchozí obrazovka" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Přepnout na nedávnou obrazovku" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Najít vpřed" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Najít další vpřed" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Najít zpět" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Najít předchozí" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Skočit na" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Obrazovka interpretů" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Obrazovka vyhledávání" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Změnit režim hledání" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Zobrazit vybranou a v současnosti přehrávanou píseň" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Obrazovka textu písně" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Přerušit akci" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Aktualizovat text písně" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Obrazovka výstupů" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Další obrazovka" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Nedefinováno" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Mezera" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Vstup" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Zpět" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Odstranit" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Nahoru" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Dolů" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Doleva" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Doprava" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Domů" - -#: src/command.cxx:310 -msgid "End" -msgstr "Konec" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Klávesa %s je přiřazena k %s a %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Chyba" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Neplatná definice klávesové zkratky" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Neznámý příkaz" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Neúplné nastavení klávesových zkratek" @@ -442,816 +377,882 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Chybný typ zobrazení času" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Chybí '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Chybné jméno barvy" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Neúplná definice barvy" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Neplatné číslo" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Neplatná definice barvy" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Neznámé jméno obrazovky" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Chybný vyhledávací mód" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Neznámý vyhledávací mód" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Neznámý parametr nastavení" -#: src/i18n.h:42 -msgid "y" -msgstr "a" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminál postrádá podporu změny barev" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Smazání této položky není možné" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Výběr rozsahu vypnut" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Smazat seznam skladeb" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Výběr rozsahu zapnut" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Přerušeno" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Připojuji se k %s... [Pro přerušení stiskněte %s]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Seznam skladeb smazán" -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Chyba: MPD verze %d.%d.%d je příliš stará (potřebuji %s)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Procházet" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "stiskněte %s pro otevření správce klávesových zkratek" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Načítám seznam skladeb: %s..." -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Konki https://launchpad.net/~pavel-konkol\n" -" Vojtěch Trefný https://launchpad.net/~vojtech.trefny\n" -" Zbyněk Schwarz https://launchpad.net/~tsbook" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Pohyb" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globální" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Přehrát" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Střed" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Nahradit %s [%s/%s] ? " +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Vytoupit do adresáře/Vybrat a přehrát skladbu" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Přerušeno" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Smazat seznam skladeb" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Uloženo %s" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Vyhledávání" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Opakování je zapnuto" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Vybrat a přehrát" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Opakování je vypnuto" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Zobrazit text písně" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Náhodné přehrávání je zapnuto" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "Znovu načíst text písně" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Náhodné přehrávání je vypnuto" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Přerušit načítání" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Jednoduchý mód je zapnutý" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Stáhnout text pro aktuálně přehrávanou skladbu" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Jednoduchý mód je vypnutý" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Žádný uložený text písně" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Režim konzumace zapnut" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Uložit text písně" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Režim konzumace vypnut" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Smazat uložený text písně" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Přerušení %d sekund" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Povolit/zakázat výstup" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Databáze aktualizována" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Režim vyhledávání: Zabalený" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Obrazovka keydef" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Režim vyhledávání: Normální" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Upravit keydefs pro vybraný příkaz" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Automatické centrování zapnuto" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Odstranit vybraný keydef" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Automatické centrování vypnuto" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Přidat novou klávesovou zkratku" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Všechny skladby" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Jít o úroveň výš" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Všichni interpreti" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Aplikovat a uložit změny" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Alba interpreta: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Nápověda" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Všechny skladby interpreta: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "a" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Písničky bez alba zpěváka: %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Nedefinováno" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Přidávám album %s..." +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Mezera" + +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Vstup" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Zpět" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Odstranit" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Nahoru" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Dolů" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Doleva" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Doprava" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Domů" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Konec" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Přidávám %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Načítám seznam skladeb: %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Přidávám '%s' do seznamu skladeb" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Výběr rozsahu vypnut" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Výběr rozsahu zapnut" -#: src/screen_chat.cxx:59 +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Žádný text písně" + +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Text písně" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "načítám..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Probíhá aktualizace databáze" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Aktualizace databáze %s zahájena" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Text písně uložen" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Aktualizace databáze zahájena" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Text písně smazán" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Smazání této položky není možné" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Žádný uložený text písně" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Smazat seznam skladeb" +msgid "Connecting to %s" +msgstr "Připojeno k %s" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Seznam skladeb smazán" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Procházet" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Najít" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Chyba: MPD verze %d.%d.%d je příliš stará (potřebuji %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Hledat rekurzivně" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Konki https://launchpad.net/~pavel-konkol\n" +" Vojtěch Trefný https://launchpad.net/~vojtech.trefny\n" +" Zbyněk Schwarz https://launchpad.net/~tsbook" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Přeskočit" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Výstup '%s' povolen" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "Nemohu najít '%s'" +msgid "Output '%s' disabled" +msgstr "Výstup '%s' zakázán" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Pohyb" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Výstupy" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globální" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Přehrát" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Posunout skladbu nahoru" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Přidat" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Posunout skladbu dolů" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Střed" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Vytoupit do adresáře/Vybrat a přehrát skladbu" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Přidat skladbu do seznamu skladeb" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Nahradit %s [%s/%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Smazat seznam skladeb" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Uloženo %s" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Vyhledávání" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Všechny skladby interpreta: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Vybrat a přehrát" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Zobrazit text písně" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Písničky bez alba zpěváka: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "Znovu načíst text písně" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Interpret" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Přerušit načítání" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Probíhá aktualizace databáze" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Stáhnout text pro aktuálně přehrávanou skladbu" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Aktualizace databáze %s zahájena" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Žádný uložený text písně" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Aktualizace databáze zahájena" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Uložit text písně" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Opakování je zapnuto" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Smazat uložený text písně" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Opakování je vypnuto" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Povolit/zakázat výstup" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Náhodné přehrávání je zapnuto" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Náhodné přehrávání je vypnuto" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Obrazovka keydef" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Jednoduchý mód je zapnutý" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Upravit keydefs pro vybraný příkaz" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Jednoduchý mód je vypnutý" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Odstranit vybraný keydef" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Režim konzumace zapnut" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Přidat novou klávesovou zkratku" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Režim konzumace vypnut" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Jít o úroveň výš" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Přerušení %d sekund" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Aplikovat a uložit změny" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Databáze aktualizována" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Nápověda" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Režim vyhledávání: Zabalený" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Chyba: Příliš malá obrazovka" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Režim vyhledávání: Normální" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Nové klávesové zkratky" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Automatické centrování zapnuto" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Klávesové zkratky nezměněny" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Automatické centrování vypnuto" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Chyba: Nemohu vytvořit adresář ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Najít" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Chyba: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Hledat rekurzivně" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Přeskočit" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Zapsat %s" +msgid "Unable to find '%s'" +msgstr "Nemohu najít '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Odstraněno" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Vložte novou klávesu pro %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Chyba: klávesa %s je již použita pro %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s přiřazeno k %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Použít klávesové zkratky " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Použít & Uložit klávesové zkratky " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Přidat novou klávesovou zkratku" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Poznámka: Zapomněl jste 'Uplatnit' změny?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Upravit klávesové zkratky" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Upravit klávesové zkratky pro %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Žádný text písně" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Text písně" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "načítám..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Nové klávesové zkratky" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Klávesové zkratky nezměněny" -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Neúplné nastavení klávesových zkratek" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Text písně uložen" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Text písně smazán" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Žádný uložený text písně" +msgid "Wrote %s" +msgstr "Zapsat %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Výstup '%s' povolen" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Použít klávesové zkratky " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Výstup '%s' zakázán" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Použít & Uložit klávesové zkratky " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Výstupy" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Upravit klávesové zkratky" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Přidat" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Poznámka: Zapomněl jste 'Uplatnit' změny?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Heslo" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "interpret" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titulek" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "stopa" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "název" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "žánr" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "datum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "skladatel" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "umělec" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "poznámka" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "soubor" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Název" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Interpret" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Název souboru" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Interpret + Název" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Žádný argument vyhledávání %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Chybný tag vyhledávání %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "Pro nové hledání stiskněte %s" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Hledání: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Hledání: Výsledky pro %s [%s]" +msgid "No argument for search tag %s" +msgstr "Žádný argument vyhledávání %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Hledání: Stiskněte %s pro nové hledání [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Vyhledávání" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Režim vyhledávání: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Délka" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Skladatel" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Název" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disk" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Skladba" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Datum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Žánr" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Poznámka" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Cesta" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitrate" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Počet interpretů" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Počet alb" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Počet skladeb" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Doba běhu" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Poslední aktualizace db" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Čas přehrávání" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Čas hraní DB" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Prohlížeč skladeb" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD statistiky" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Vybraná skladba" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Právě přehrávaná skladba" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Nahradit %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Heslo" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Přehrávání:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pozastaveno]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Neznámý příkaz" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Varování: Neznámé barevné pole - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminál postrádá podporu barev" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Hlasitost n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Hlasitost %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Přidat url/soubor do seznamu skladeb" + +#~ msgid "Move song up" +#~ msgstr "Posunout skladbu nahoru" + +#~ msgid "Move song down" +#~ msgstr "Posunout skladbu dolů" + +#~ msgid "Press %s for a new search" +#~ msgstr "Pro nové hledání stiskněte %s" + +#~ msgid "Search: %s" +#~ msgstr "Hledání: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Hledání: Výsledky pro %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Hledání: Stiskněte %s pro nové hledání [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Připojuji se k %s... [Pro přerušení stiskněte %s]" + +#~ msgid "press %s for the key editor" +#~ msgstr "stiskněte %s pro otevření správce klávesových zkratek" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Přidávám album %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Přidávám %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Chyba: Příliš malá obrazovka" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Chyba: Nemohu vytvořit adresář ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Chyba: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Nahradit %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Smazat seznam skladeb %s[%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varování: Neznámá barva - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Připojeno k %s" - #~ msgid "Shuffled playlist" #~ msgstr "Seznam skladeb zamíchán"
View file
ncmpc-0.30.tar.xz/po/da.po -> ncmpc-0.32.tar.xz/po/da.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc 0.11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2009-09-24 10:26+0200\n" "Last-Translator: Niels Anker <nanker@webspeed.dk>\n" "Language-Team: da <da@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2009-09-24 08:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Ukendt kommando" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Alle spor" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Advarsel: Ukendt farve felt - %s.\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminalen understøtter ikke at ændre farver" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Album fra kunstneren: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminalen understøtter ikke farver" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Tilføjer '%s' til listen" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Alle kunstnere" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Tast %s tildelt %s og %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Taste konfigurations skærm" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Afslut" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Flyt markør op" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Flyt markør ned" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Flyt cursor til toppen af skærmen" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Flyt cursor til midten af skærmen" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Flyt cursor til bunden af skærmen" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Flyt cursor til toppen af listen" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Flyt cursor til bunden af listen" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Side op" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Side ned" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Valg af interval" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Scroll en linie ned" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Scroll en linie op" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Scroll en halv skærm op" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Scroll en halv skærm ned" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Vælg den sang der spilles nu" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Hjælp" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Tastdefinitions skærm" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Gennemse" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Afspil/Gå til mappe" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pause" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stop" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Beskær" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Næste" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Forrige" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Søg fremad" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Søg tilbage" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Hæv volumen" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Sænk volumen" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Marker/afmarker sang i afspilningsliste" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Vælg alle emner på listen" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Slet sang fra afspilningsliste" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Aktiver/deaktiver gentag" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Aktiver/deaktiver tilfældigt valg" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Aktiver/deaktiver enkelt valg" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Aktiver/deaktiver consume valg" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Aktiver/deaktiver crossfade mellem sange" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Opdater databasen" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Tilføj URL eller fil til afspilningslisten" +msgid "Append song to queue" +msgstr "Tilføj spor til afspilningsliste" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Gå til rod mappen" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Gå til forældre mappe" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Lokaliser sang i browseren" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Flyt op" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Flyt ned" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Genopfrisk skærm" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Ændre søge tilstand" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Aktiver/deaktiver automatisk centrering" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Næste skærm" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Forrige skærm" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Skift til seneste skærm" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Søg" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Gentag søg" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Søg baglæns" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Gentag søg baglæns" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Spring til" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Kunstner skærm" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Database søgning" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Ændre søge tilstand" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Vis valgte numre og det der afspilles" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Sangtekst skærm" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Afbryd action" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Opdater sangtekster" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Output skærm" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Næste skærm" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Udefineret" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Mellemrum" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Retur" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Tilbagetast" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Slet" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Op" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Ned" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Venstre" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Højre" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Hjem" - -#: src/command.cxx:310 -msgid "End" -msgstr "Slut" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Skift+Tabulator" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Indsæt" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Tast %s tildelt %s og %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Fejl" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Forkert hotkey definition" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Ukendt kommando" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Ufuldstændig hotkey konfiguration" @@ -442,818 +377,886 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Ringe tidsvisningstype" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Mangler '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Dårligt farvenavn" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Ufuldstændig farve definition" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Ugyldigt tal." -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Forkert farve definition" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Ukendt skærm navn" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Ugyldig søgetilstand" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Ukendt søgetilstand" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Ukendt konfigurations parameter" -#: src/i18n.h:42 -msgid "y" -msgstr "j" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminalen understøtter ikke at ændre farver" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Sletning af dette emne ikke muligt" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Valg af interval slået fra" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Slet afspilningsliste" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Valg af interval slået til" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Afbrudt" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Forbinder til %s... [Tryk %s for at afbryde]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Afspilningslisten slettet" -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Fejl: MPD version %d.%d.%d er for gammel (mindst %s er nødvendig)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Gennemse" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "tryk på %s for at redigere" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Henter %s..." -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc\n" -" Niels Anker https://launchpad.net/~nanker" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Navigation" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globale" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Afspil" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centrer" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Erstat '%s' [%s/%s] ? " +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Skift til bibliotek/Tilføj til afspilningslisten og afspil" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Afbrudt" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Slet afspilningsliste" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Gemt %s" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Søg" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Gentagelse er slået til" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Vælg og afspil" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Gentagelse er slået fra" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Gennemse sangtekster" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Tilfældig orden slået til" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Gen)indlæs santekster" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Tilfældig orden slået fra" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Abryd hentning" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Single afspilning slået til" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Download tekst for det nummer der afspilles" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Single afspilning slået fra" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Gem sagtekster" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "\"Consume mode\" er slået til" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Gem sagtekster" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "\"Consume mode\" er slået fra" +#: src/HelpPage.cxx:191 +#, fuzzy +msgid "Delete saved lyrics" +msgstr "Gem sagtekster" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Crossfade %d sekunder" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Slå output til/fra" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Databasen er opdateret" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Søg (begynd forfra)" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Tastdefinitions skærm" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Søg normalt (start/slut)" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Redigér tastdefinitioner for udvalgte kommandoer" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Automatisk centrering er aktiv" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Fjern valgte tastdefinitioner" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Automatisk centrering er inaktiv" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Definér ny tast" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Alle spor" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Gå et niveau op" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Alle kunstnere" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Anvend og gem ændringer" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Album fra kunstneren: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Hjælp" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Alle spor fra kunstneren: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "j" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Album fra kunstneren: %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Udefineret" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "Henter %s..." +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Mellemrum" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "Tilføjer mappen %s...\n" +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Retur" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Henter %s..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Tilbagetast" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Tilføjer '%s' til listen" +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Slet" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Op" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Ned" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Venstre" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Højre" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Hjem" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Slut" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" -#: src/screen_chat.cxx:59 +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Skift+Tabulator" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Indsæt" + +#: src/KeyName.cxx:71 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Ctrl-%c" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Valg af interval slået fra" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Valg af interval slået til" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Databasen opdateres..." +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Ingen sangtekster" -#: src/screen_client.cxx:49 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Database update of %s started" -msgstr "Database opdatering af %s startet" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Database opdatering startet" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Sangtekster" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Sletning af dette emne ikke muligt" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "indlæser..." -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Slet afspilningsliste" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" + +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" + +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" + +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Sangtekster gemt" + +#: src/LyricsPage.cxx:445 +#, fuzzy +msgid "Lyrics deleted" msgstr "Afspilningslisten slettet" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Gennemse" +#: src/LyricsPage.cxx:446 +#, fuzzy +msgid "No saved lyrics" +msgstr "Gem sagtekster" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Søg" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Forbundet til %s" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Søg (baglæns)" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Fejl: MPD version %d.%d.%d er for gammel (mindst %s er nødvendig)" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Spring" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc\n" +" Niels Anker https://launchpad.net/~nanker" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:87 #, c-format -msgid "Unable to find '%s'" -msgstr "Kan ikke finde '%s'" - -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Navigation" +msgid "Output '%s' enabled" +msgstr "Output '%s' slået til" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globale" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Output '%s' slået fra" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Afspil" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Output" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Flyt markøren op i afspilningslisten" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Flyt markøren ned i afspilningslisten" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centrer" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Tilføj" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Skift til bibliotek/Tilføj til afspilningslisten og afspil" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Tilføj spor til afspilningsliste" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Slet afspilningsliste" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Søg" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Erstat '%s' [%s/%s] ? " -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Vælg og afspil" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Gemt %s" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Gennemse sangtekster" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Alle spor fra kunstneren: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Gen)indlæs santekster" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Abryd hentning" +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Album fra kunstneren: %s" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Download tekst for det nummer der afspilles" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Kunstner" -#: src/screen_help.cxx:168 +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add or edit lyrics" -msgstr "Gem sagtekster" +msgid "Database update running" +msgstr "Databasen opdateres..." -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Gem sagtekster" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Database opdatering af %s startet" -#: src/screen_help.cxx:170 -#, fuzzy -msgid "Delete saved lyrics" -msgstr "Gem sagtekster" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Database opdatering startet" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Slå output til/fra" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Gentagelse er slået til" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Gentagelse er slået fra" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Tastdefinitions skærm" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Tilfældig orden slået til" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Redigér tastdefinitioner for udvalgte kommandoer" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Tilfældig orden slået fra" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Fjern valgte tastdefinitioner" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Single afspilning slået til" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Definér ny tast" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Single afspilning slået fra" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Gå et niveau op" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "\"Consume mode\" er slået til" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Anvend og gem ændringer" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "\"Consume mode\" er slået fra" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Hjælp" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Crossfade %d sekunder" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Fejl: Skærm for lille" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Databasen er opdateret" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Taste bindinger opdaterede" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Søg (begynd forfra)" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Taste bindinger uændrede!" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Søg normalt (start/slut)" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Fejl: Kunne ikke oprette mappe ~/.ncmpc - %s" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Automatisk centrering er aktiv" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Fejl: %s - %s" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Automatisk centrering er inaktiv" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Søg" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Søg (baglæns)" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Spring" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Skrev %s" +msgid "Unable to find '%s'" +msgstr "Kan ikke finde '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Slettet" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Ny tast for %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Tasten %s anvendes allerede til %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Tildelt %s til %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "==> Anvend taste bindinger " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "==> Anvend og gem taste bindinger " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Definér ny tast" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "OBS! Du glemte vel ikke at 'anvende' dine ændringer?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Modificer taste bindinger" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Modificer tast for '%s'" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Ingen sangtekster" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Sangtekster" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "indlæser..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" - -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" - -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" - -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Sangtekster gemt" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Taste bindinger opdaterede" -#: src/screen_lyrics.cxx:443 -#, fuzzy -msgid "Lyrics deleted" -msgstr "Afspilningslisten slettet" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Taste bindinger uændrede!" -#: src/screen_lyrics.cxx:446 +#: src/screen_keydef.cxx:405 #, fuzzy -msgid "No saved lyrics" -msgstr "Gem sagtekster" +msgid "Unable to write configuration" +msgstr "Ufuldstændig hotkey konfiguration" -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" -msgstr "Output '%s' slået til" +msgid "Wrote %s" +msgstr "Skrev %s" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Output '%s' slået fra" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "==> Anvend taste bindinger " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Output" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "==> Anvend og gem taste bindinger " -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Tilføj" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Modificer taste bindinger" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "OBS! Du glemte vel ikke at 'anvende' dine ændringer?" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Adgangskode" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "kunstner" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titel" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "spor" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "navn" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "dato" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "komponist" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "udførende" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "kommentar" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fil" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titel" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Kunstner" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Filnavn" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Kunstner + Titel" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Inter argument for søge tag %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Ugyldigt søge tag %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Tryk på %s for en ny søgning" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Søg: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Søg: Resultater for %s [%s]" +msgid "No argument for search tag %s" +msgstr "Inter argument for søge tag %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Tryk på %s for en ny søgning [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Søg" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Søg efter: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Længde" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Komponist" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Navn" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disk" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Spor" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Dato" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Genre" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Kommentar" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Sti" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bithastighed" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Antal kunstnere" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Antal albums" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Antal sange" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Oppetid" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Seneste db opdatering" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Spilletid" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "DB spilletid" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Sang viser" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD statistik" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Valgt nummer" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Nummer der afspilles" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kb/sek" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Erstat '%s' [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Adgangskode" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Afspiller:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pause]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Ukendt kommando" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Advarsel: Ukendt farve felt - %s.\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminalen understøtter ikke farver" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volumen: n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volumen: %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Tilføj URL eller fil til afspilningslisten" + +#~ msgid "Move song up" +#~ msgstr "Flyt markøren op i afspilningslisten" + +#~ msgid "Move song down" +#~ msgstr "Flyt markøren ned i afspilningslisten" + +#~ msgid "Press %s for a new search" +#~ msgstr "Tryk på %s for en ny søgning" + +#~ msgid "Search: %s" +#~ msgstr "Søg: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Søg: Resultater for %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Tryk på %s for en ny søgning [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Forbinder til %s... [Tryk %s for at afbryde]" + +#~ msgid "press %s for the key editor" +#~ msgstr "tryk på %s for at redigere" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "Henter %s..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "Tilføjer mappen %s...\n" + +#~ msgid "Error: Screen too small" +#~ msgstr "Fejl: Skærm for lille" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Fejl: Kunne ikke oprette mappe ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Fejl: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Erstat '%s' [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Slet '%s' [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advarsel: Ukendt farve - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Forbundet til %s" - #~ msgid "Shuffled playlist" #~ msgstr "Afspilninsglisten blandet"
View file
ncmpc-0.30.tar.xz/po/de.po -> ncmpc-0.32.tar.xz/po/de.po
Changed
@@ -8,434 +8,370 @@ msgstr "" "Project-Id-Version: ncmpc 0.12\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" -"PO-Revision-Date: 2011-06-21 08:19+0000\n" -"Last-Translator: Christoph Mende <angelos@gentoo.org>\n" -"Language-Team: de <de@li.org>\n" -"Language: \n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" +"PO-Revision-Date: 2018-09-10 18:18+0000\n" +"Last-Translator: Max Kellermann <max.kellermann@gmail.com>\n" +"Language-Team: German <https://hosted.weblate.org/projects/ncmpc/" +"translations/de/>\n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.2-dev\n" "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" -"X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Unbekannter Befehl" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Alle Stücke" -#: src/colors.cxx:195 -#, fuzzy -msgid "Unknown color field" -msgstr "Warnung: Unbekanntes Farbfeld - %s\n" +#: src/AlbumListPage.cxx:144 +msgid "Albums" +msgstr "Alben" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Das Terminal unterstützt keine Farbwechsel" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Alben des Künstlers: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Das Terminal unterstützt keine Farben" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Füge '%s' der Playlist hinzu" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Alle Künstler" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Taste %s ist %s und %s zugeordnet" -#: src/command.cxx:63 +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "Deine Nachricht" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "Nachricht konnte nicht gesendet werden" + +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Tastenkonfigurationsanzeige" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Beenden" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Cursor nach oben bewegen" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Cursor nach unten bewegen" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Markierung an den Anfang der Anzeige setzen" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Markierung in die Mitte der Anzeige setzen" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Markierung ans Ende der Anzeige setzen" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Markierung an den Anfang der Liste setzen" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Markierung ans Ende der Liste setzen" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Bild auf" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Bild ab" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Mehrfachauswahl" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Eine Zeile nach unten scrollen" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Eine Zeile nach oben scrollen" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Die halbe Anzeige nach oben scrollen" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Die halbe Anzeige nach unten scrollen" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Derzeit spielenden Song auswählen" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Hilfeanzeige" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Tastenbelegungsanzeige" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Anzeige durchstöbern" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Abspielen/Verzeichnis öffnen" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pause" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stop" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Playlist auf das markierte Lied reduzieren" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Nächstes Stück" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Vorheriges Stück" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Vorspulen" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Zurückspulen" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Lautstärke erhöhen" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Lautstärke verringern" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Wähle Stück in der Playlist an/ab" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Alle angezeigten Lieder zur Playlist hinzufügen" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Lösche Song aus der Playlist" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Schalte Wiederholungswiedergabe ein/aus" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Schalte Zufallswiedergabe ein/aus" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Einzelabspiel-Modus umschalten" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Verbrauchs-Modus Umschalten" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Schalte Crossfade-Wiedergabe ein/aus" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Starte eine Aktualisierung der Musikdatenbank" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Füge eine URL/Datei der Playlist hinzu" +msgid "Append song to queue" +msgstr "Song zur Playlist hinzufügen" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Basis-Verzeichnis öffnen" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Übergeordnetes Verzeichnis öffnen" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Lied in Datenbank orten" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Bewege es nach oben" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Bewege es nach unten" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Aktualisiere Anzeige" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Wechsle den Suchmodus" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Schalte den Autozentrier-Modus ein/aus" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Nächste Anzeige" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Vorherige Anzeige" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Wechsle zur zuletzt benutzten Anzeige" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Vorwärtssuche" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Vorwärtssuche fortsetzen" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Rückwärtssuche" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Rückwärtssuche fortsetzen" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Springe zu" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Künstlerdatenbank" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Suchanzeige" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Suchmodus wechseln" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Zeige das ausgewählte und das gerade laufende Lied an" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Liedtextanzeige" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Kommando Unterbrechen" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Liedtext aktualisieren" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Anzeige der Ausgabegeräte" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Nächste Anzeige" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Undefiniert" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Leertaste" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Entf" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Oben" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Unten" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Links" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Rechts" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Pos1" - -#: src/command.cxx:310 -msgid "End" -msgstr "Ende" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "Bild ab" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "Bild auf" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Einfg" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Taste %s ist %s und %s zugeordnet" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Fehler" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" -msgstr "" +msgstr "Wort erwartet" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Fehlerhafte Definition der Tastenbelegung" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Unbekannter Befehl" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Unvollständige Konfiguration für Tastenbelegung" @@ -443,821 +379,885 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Ungültige Anzeigeart" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Es fehlt ein '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Ungültiger Farbname" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Unvollständige Farbkonfiguration" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Ungültige Zahl" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Fehlerhafte Farbdefinition" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Unbekannter Anzeigenname" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Ungültiger Suchmodus" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Unbekannter Suchmodus" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Unbekannter Konfigurationsparameter" -#: src/i18n.h:42 -msgid "y" -msgstr "j" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Das Terminal unterstützt keine Farbwechsel" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Dieses Objekt kann nicht gelöscht werden" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Mehrfachauswahl deaktiviert" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Lösche Playlist" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Mehrfachauswahl aktiviert" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Abbruch" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Verbinde mit %s… [%s drücken, um abzubrechen]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Playlist gelöscht" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Stöbern" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Fehler: MPD-Version %d.%d.%d ist zu alt (%s wird benötigt)" +msgid "Loading playlist '%s'" +msgstr "Lade Playlist %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "drücken Sie %s für den Tasteneditor" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Bewegung" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Übersetzer\n" -"\n" -"Launchpad Contributions:\n" -" BBO https://launchpad.net/~bbo\n" -" Christoph Mende https://launchpad.net/~cmende\n" -" Max Kellermann https://launchpad.net/~max-duempel\n" -" Monika Brinkert https://launchpad.net/~moni-sunpig\n" -" Samuel Creshal https://launchpad.net/~samuel-creshal\n" -" cmdrhenner https://launchpad.net/~cmdrhenner" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Global" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Abspielen" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Zentrieren" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Verzeichnis öffnen/Stück auswählen und abspielen" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Ersetze %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Lösche Playlist" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Abbruch" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Suche" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s gespeichert" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Auswählen und abspielen" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Wiederhol-Modus ist aktiviert" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Liedtext lesen" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Wiederhol-Modus ist deaktiviert" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "Text (neu) laden" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Zufalls-Modus ist aktiviert" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Laden unterbrechen" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Zufalls-Modus ist deaktiviert" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Liedtexte für aktuell laufendes Stück herunterladen" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Einzelabspiel-Modus ist aktiviert" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Keine gespeicherten Texte" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Einzelabspiel-Modus ist deaktiviert" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Liedtext speichern" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Verbrauchs-Modus Aktiviert" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Lösche gespeicherte Texte" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Verbrauchs-Modus Deaktiviert" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Ausgabegerät aktivieren/deaktivieren" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "%d Sekunden Crossfade" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "Nachricht schreiben" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Datenbank aktualisiert" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Tastenbelegungsanzeige" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Suchmodus: Wrapped" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Tastenbelegung für ausgewählten Befehl bearbeiten" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Suchmodus: Normal" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Ausgewählte Tastenbelegung entfernen" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Autozentriermodus: an" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Füge neue Taste hinzu" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Autozentriermodus: aus" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Eine Ebene nach oben" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Alle Stücke" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Änderungen bestätigen und speichern" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Alle Künstler" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Hilfe" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Alben des Künstlers: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "j" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Alle Lieder des Künstlers: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Undefiniert" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Titel von keinem Album des Künstlers: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Leertaste" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Füge Album %s... hinzu" +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." -msgstr "Hinzufügen %s..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Lade Playlist %s..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Entf" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Füge '%s' der Playlist hinzu" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Oben" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" -msgstr "" +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Unten" -#: src/screen_chat.cxx:177 -msgid "Your message" -msgstr "" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Links" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Rechts" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Pos1" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Datenbankaktualisierung läuft..." +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Ende" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Datenbankaktualisierung von %s gestartet" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "Bild ab" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Datenbankaktualisierung gestartet" +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "Bild auf" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Dieses Objekt kann nicht gelöscht werden" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Lösche Playlist" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Playlist gelöscht" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Stöbern" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Einfg" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Suche" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "Strg-%c" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Suche rückwärts" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "Alt-%c" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Springe zu" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Mehrfachauswahl deaktiviert" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Mehrfachauswahl aktiviert" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Kein Liedtext verfügbar" -#: src/screen_find.cxx:82 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "Kann '%s' nicht finden" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "Liedtext-Timeout trat nach %d Sekunden auf" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Bewegung" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Liedtexte" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Global" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "lade..." -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Abspielen" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "Editor nicht konfiguriert" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Stück nach oben bewegen" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Stück nach unten bewegen" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "Editor kann nicht gestartet werden" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Zentrieren" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "Editor unerwartet beendet" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Verzeichnis öffnen/Stück auswählen und abspielen" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Liedtext gespeichert" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Song zur Playlist hinzufügen" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Texte gelöscht" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Lösche Playlist" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Keine gespeicherten Texte" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Suche" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Verbunden mit %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Auswählen und abspielen" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Fehler: MPD-Version %d.%d.%d ist zu alt (%s wird benötigt)" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Liedtext lesen" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Übersetzer\n" +"\n" +"Launchpad Contributions:\n" +" BBO https://launchpad.net/~bbo\n" +" Christoph Mende https://launchpad.net/~cmende\n" +" Max Kellermann https://launchpad.net/~max-duempel\n" +" Monika Brinkert https://launchpad.net/~moni-sunpig\n" +" Samuel Creshal https://launchpad.net/~samuel-creshal\n" +" cmdrhenner https://launchpad.net/~cmdrhenner" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "Text (neu) laden" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Ausgabegerät '%s' aktiviert" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Laden unterbrechen" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Ausgabegerät '%s' deaktiviert" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Liedtexte für aktuell laufendes Stück herunterladen" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Ausgabegeräte" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Keine gespeicherten Texte" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Liedtext speichern" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Lösche gespeicherte Texte" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Hinzufügen" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Ausgabegerät aktivieren/deaktivieren" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Tastenbelegungsanzeige" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Tastenbelegung für ausgewählten Befehl bearbeiten" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Ersetze %s [%s/%s] ? " -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Ausgewählte Tastenbelegung entfernen" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s gespeichert" + +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Alle Lieder des Künstlers: %s" -#: src/screen_help.cxx:193 +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" + +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Titel von keinem Album des Künstlers: %s" + +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Künstler" + +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add a keydef" -msgstr "Füge neue Taste hinzu" +msgid "Database update running" +msgstr "Datenbankaktualisierung läuft..." -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Eine Ebene nach oben" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Datenbankaktualisierung von %s gestartet" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Änderungen bestätigen und speichern" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Datenbankaktualisierung gestartet" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Hilfe" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Wiederhol-Modus ist aktiviert" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Fehler: Anzeige zu klein" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Wiederhol-Modus ist deaktiviert" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Du hast eine neue Tastenbelegung" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Zufalls-Modus ist aktiviert" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Tastenbelegung unverändert." +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Zufalls-Modus ist deaktiviert" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Fehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellen" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Einzelabspiel-Modus ist aktiviert" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Einzelabspiel-Modus ist deaktiviert" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Verbrauchs-Modus Aktiviert" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Verbrauchs-Modus Deaktiviert" + +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Fehler: %s - %s" +msgid "Crossfade %d seconds" +msgstr "%d Sekunden Crossfade" -#: src/screen_keydef.cxx:171 +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Datenbank aktualisiert" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Suchmodus: Wrapped" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Suchmodus: Normal" + +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Autozentriermodus: an" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Autozentriermodus: aus" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Suche" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Suche rückwärts" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Springe zu" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s geschrieben" +msgid "Unable to find '%s'" +msgstr "Kann '%s' nicht finden" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Gelöscht" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Gib neue Taste für %s ein: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Fehler: Taste %s wird bereits benutzt für %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s wurde %s zugeordnet" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Tastenbelegung anwenden " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Tastenbelegung speichern und anwenden " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Füge neue Taste hinzu" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Tipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Editiere Tastenbelegungen" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Editiere Tasten für %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Kein Liedtext verfügbar" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Liedtexte" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "lade..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Du hast eine neue Tastenbelegung" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Tastenbelegung unverändert." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Unvollständige Konfiguration für Tastenbelegung" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Liedtext gespeichert" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Texte gelöscht" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Keine gespeicherten Texte" +msgid "Wrote %s" +msgstr "%s geschrieben" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Ausgabegerät '%s' aktiviert" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Tastenbelegung anwenden " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Ausgabegerät '%s' deaktiviert" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Tastenbelegung speichern und anwenden " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Ausgabegeräte" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Editiere Tastenbelegungen" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Hinzufügen" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Tipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:604 +msgid "Keys" +msgstr "Tasten" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Passwort" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "Künstler" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "Album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "Titel" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "Stück" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "Name" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "Genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "Datum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "Komponist" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "Aufführung" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "Anmerkung" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "Datei" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titel" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Künstler" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Dateiname" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Künstler + Titel" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Kein Argument für Tag %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Tag nicht erkannt: %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Drücke %s für eine neue Suche" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "Suche: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Suche: Ergebnisse für %s [%s]" +msgid "No argument for search tag %s" +msgstr "Kein Argument für Tag %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Suche: Drücke %s für eine neue Suche [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Suche" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Suchmodus: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Länge" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Komponist" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Name" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "CD" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Stück" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Datum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Genre" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Anmerkung" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Pfad" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitrate" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" -msgstr "" +msgstr "Format" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Anzahl der Künstler" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Anzahl der Alben" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Anzahl der Lieder" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Laufzeit" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Letzte db-Aktualisierung" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Spielzeit" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "DB Spielzeit" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Liedbetrachter" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD Statistik" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Lied anzeigen" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Gerade laufendes Lied" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Ersetze %s [%s/%s] ? " +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "Lied" -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Passwort" - -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Spiele:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pause]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "Unbekannte Farbe" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "Unbekanntes Farbfeld" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Das Terminal unterstützt keine Farben" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "Jahr" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Lautstärke n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Lautstärke %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Füge eine URL/Datei der Playlist hinzu" + +#~ msgid "Move song up" +#~ msgstr "Stück nach oben bewegen" + +#~ msgid "Move song down" +#~ msgstr "Stück nach unten bewegen" + +#~ msgid "Press %s for a new search" +#~ msgstr "Drücke %s für eine neue Suche" + +#~ msgid "Search: %s" +#~ msgstr "Suche: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Suche: Ergebnisse für %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Suche: Drücke %s für eine neue Suche [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Verbinde mit %s… [%s drücken, um abzubrechen]" + +#~ msgid "press %s for the key editor" +#~ msgstr "drücken Sie %s für den Tasteneditor" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Füge Album %s... hinzu" + +#~ msgid "Adding %s..." +#~ msgstr "Hinzufügen %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Fehler: Anzeige zu klein" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Fehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellen" + +#~ msgid "Error: %s - %s" +#~ msgstr "Fehler: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Ersetze %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Lösche Playlist %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Warnung: Unbekannte Farbe - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Verbunden mit %s" - #~ msgid "Shuffled playlist" #~ msgstr "Playlist gemischt"
View file
ncmpc-0.30.tar.xz/po/eo.po -> ncmpc-0.32.tar.xz/po/eo.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-05-16 15:13+0000\n" "Last-Translator: Aleksej <Unknown>\n" "Language-Team: Esperanto <eo@li.org>\n" @@ -18,416 +18,352 @@ "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -msgid "Unknown color" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" msgstr "" -#: src/colors.cxx:195 -msgid "Unknown color field" +#: src/AlbumListPage.cxx:144 +msgid "Albums" msgstr "" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" msgstr "" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Aldonas \"%s\" al la ludlisto" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" msgstr "" -#: src/command.cxx:63 +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" + +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 msgid "Queue screen" msgstr "" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 -msgid "Add url/file to queue" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +msgid "Append song to queue" msgstr "" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 msgid "Chat screen" msgstr "" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "" - -#: src/command.cxx:292 -msgid "Space" -msgstr "" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "" - -#: src/command.cxx:300 -msgid "Up" -msgstr "" - -#: src/command.cxx:302 -msgid "Down" -msgstr "" - -#: src/command.cxx:304 -msgid "Left" -msgstr "" - -#: src/command.cxx:306 -msgid "Right" -msgstr "" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "" @@ -435,803 +371,819 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "" -#: src/i18n.h:42 -msgid "y" -msgstr "j" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "" -#: src/list_window.cxx:554 -msgid "Range selection disabled" +#: src/FileBrowserPage.cxx:268 +#, c-format +msgid "Delete playlist %s?" msgstr "" -#: src/list_window.cxx:559 -msgid "Range selection enabled" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" msgstr "" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Konektiĝado al %s... [Premu %s por ĉesigi]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "" -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Problemo: la versio %d.%d.%d de MPD estas tro malnova (necesas %s)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "" -#: src/Main.cxx:317 +#: src/FileListPage.cxx:121 #, c-format -msgid "press %s for the key editor" +msgid "Loading playlist '%s'" msgstr "" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" +#: src/HelpPage.cxx:60 +msgid "Movement" msgstr "" -"Launchpad Contributions:\n" -" Aleksej https://launchpad.net/~aleksejrs\n" -" Kristjan SCHMIDT https://launchpad.net/~kristjan-eo\n" -" Max Kellermann https://launchpad.net/~max-duempel" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" +#: src/HelpPage.cxx:105 +msgid "Global" msgstr "" -#: src/player_command.cxx:184 -msgid "Cleared queue" +#: src/HelpPage.cxx:142 +msgid "Play" msgstr "" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" +#: src/HelpPage.cxx:149 +msgid "Center" msgstr "" -#: src/save_playlist.cxx:140 -#, c-format -msgid "Replace %s?" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" msgstr "" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" msgstr "" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" +#: src/HelpPage.cxx:171 +msgid "New search" msgstr "" -#: src/screen.cxx:154 -msgid "Repeat mode is on" +#: src/HelpPage.cxx:172 +msgid "Select and play" msgstr "" -#: src/screen.cxx:155 -msgid "Repeat mode is off" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" msgstr "" -#: src/screen.cxx:159 -msgid "Random mode is on" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" msgstr "" -#: src/screen.cxx:160 -msgid "Random mode is off" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" msgstr "" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" msgstr "" -#: src/screen.cxx:170 -msgid "Single mode is off" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" msgstr "" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" msgstr "" -#: src/screen.cxx:179 -msgid "Consume mode is off" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" msgstr "" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Ĝisdatigis datumbazon" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" msgstr "" -#: src/screen.cxx:227 -msgid "Find mode: Normal" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" msgstr "" -#: src/screen.cxx:232 -msgid "Auto center mode: On" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" msgstr "" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" +#: src/HelpPage.cxx:214 +msgid "Add a keydef" msgstr "" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" +#: src/HelpPage.cxx:215 +msgid "Go up a level" msgstr "" -#: src/screen_artist.cxx:384 -msgid "All artists" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" msgstr "" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Helpo" + +#: src/i18n.h:43 +msgid "y" +msgstr "j" + +#: src/i18n.h:44 +msgid "n" +msgstr "n" + +#: src/KeyName.cxx:31 +msgid "Undefined" msgstr "" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" +#: src/KeyName.cxx:33 +msgid "Space" msgstr "" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" +#: src/KeyName.cxx:35 +msgid "Enter" msgstr "" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" +#: src/KeyName.cxx:37 +msgid "Backspace" msgstr "" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." +#: src/KeyName.cxx:39 +msgid "Delete" msgstr "" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." +#: src/KeyName.cxx:41 +msgid "Up" msgstr "" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." +#: src/KeyName.cxx:43 +msgid "Down" msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Aldonas \"%s\" al la ludlisto" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +#: src/KeyName.cxx:47 +msgid "Right" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:49 +msgid "Home" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/KeyName.cxx:51 +msgid "End" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/KeyName.cxx:53 +msgid "PageDown" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." +#: src/KeyName.cxx:55 +msgid "PageUp" msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" +#: src/KeyName.cxx:57 +msgid "Tab" msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" msgstr "" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" +#: src/KeyName.cxx:61 +msgid "Esc" msgstr "" -#: src/screen_file.cxx:207 -#, c-format -msgid "Delete playlist %s?" +#: src/KeyName.cxx:63 +msgid "Insert" msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_find.cxx:29 -msgid "Find" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" msgstr "" -#: src/screen_find.cxx:82 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "Ne troviĝis \"%s\"" - -#: src/screen_help.cxx:39 -msgid "Movement" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_help.cxx:84 -msgid "Global" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -msgid "Append song to queue" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" msgstr "" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Konektite al %s" -#: src/screen_help.cxx:162 -msgid "View Lyrics" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Problemo: la versio %d.%d.%d de MPD estas tro malnova (necesas %s)" + +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" msgstr "" +"Launchpad Contributions:\n" +" Aleksej https://launchpad.net/~aleksejrs\n" +" Kristjan SCHMIDT https://launchpad.net/~kristjan-eo\n" +" Max Kellermann https://launchpad.net/~max-duempel" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" msgstr "" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" msgstr "" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" msgstr "" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" +#: src/player_command.cxx:186 +msgid "Cleared queue" msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Aldoni" + +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" msgstr "" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" +#: src/save_playlist.cxx:107 +#, c-format +msgid "Replace %s?" msgstr "" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" msgstr "" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" msgstr "" -#: src/screen_help.cxx:193 -msgid "Add a keydef" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" msgstr "" -#: src/screen_help.cxx:194 -msgid "Go up a level" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" msgstr "" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" msgstr "" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Helpo" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Ĝisdatigis datumbazon" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" msgstr "" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" +#: src/screen_client.cxx:51 +msgid "Database update started" msgstr "" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." +#: src/screen.cxx:160 +msgid "Repeat mode is on" msgstr "" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" +#: src/screen.cxx:161 +msgid "Repeat mode is off" msgstr "" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" +#: src/screen.cxx:165 +msgid "Random mode is on" msgstr "" -#: src/screen_keydef.cxx:171 -#, c-format -msgid "Wrote %s" +#: src/screen.cxx:166 +msgid "Random mode is off" msgstr "" -#: src/screen_keydef.cxx:250 -msgid "Deleted" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" msgstr "" -#: src/screen_keydef.cxx:265 -#, c-format -msgid "Enter new key for %s: " +#: src/screen.cxx:176 +msgid "Single mode is off" msgstr "" -#: src/screen_keydef.cxx:276 -msgid "Ctrl-Space can't be used" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" msgstr "" -#: src/screen_keydef.cxx:282 -#, c-format -msgid "Error: key %s is already used for %s" +#: src/screen.cxx:185 +msgid "Consume mode is off" msgstr "" -#: src/screen_keydef.cxx:291 +#: src/screen.cxx:188 #, c-format -msgid "Assigned %s to %s" +msgid "Crossfade %d seconds" msgstr "" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Ĝisdatigis datumbazon" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" msgstr "" -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " +#: src/screen.cxx:251 +msgid "Find mode: Normal" msgstr "" -#: src/screen_keydef.cxx:347 -msgid "Add new key" +#: src/screen.cxx:256 +msgid "Auto center mode: On" msgstr "" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" msgstr "" -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" +#: src/screen_find.cxx:31 +msgid "Find" msgstr "" -#: src/screen_keydef.cxx:419 -#, c-format -msgid "Edit keys for %s" +#: src/screen_find.cxx:32 +msgid "Find backward" msgstr "" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" +#: src/screen_find.cxx:33 +msgid "Jump" msgstr "" -#: src/screen_lyrics.cxx:226 +#: src/screen_find.cxx:79 #, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" +msgid "Unable to find '%s'" +msgstr "Ne troviĝis \"%s\"" -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" +#: src/screen_keydef.cxx:161 +msgid "Deleted" msgstr "" -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." +#: src/screen_keydef.cxx:177 +#, c-format +msgid "Enter new key for %s: " msgstr "" -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" +#: src/screen_keydef.cxx:187 +msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" +#: src/screen_keydef.cxx:193 +#, c-format +msgid "Error: key %s is already used for %s" msgstr "" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" +#: src/screen_keydef.cxx:202 +#, c-format +msgid "Assigned %s to %s" msgstr "" -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" +#: src/screen_keydef.cxx:229 +msgid "Add new key" msgstr "" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:251 #, c-format -msgid "Editor exited unexpectedly (signal %d)" +msgid "Edit keys for %s" msgstr "" -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" msgstr "" -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." msgstr "" -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" +#: src/screen_keydef.cxx:405 +msgid "Unable to write configuration" msgstr "" -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" +msgid "Wrote %s" msgstr "" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " msgstr "" -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " msgstr "" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Aldoni" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "dato" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "dosiero" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titolo" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Dosiernomo" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" +msgid "No argument for search tag %s" msgstr "" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" msgstr "" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, c-format -msgid "%s [%s/%s] " -msgstr "" - -#: src/screen_utils.cxx:121 -msgid "Password" +#: src/SongPage.cxx:554 +msgid "Song" msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "" -#~ msgid "Connected to %s" -#~ msgstr "Konektite al %s" +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Konektiĝado al %s... [Premu %s por ĉesigi]"
View file
ncmpc-0.30.tar.xz/po/es.po -> ncmpc-0.32.tar.xz/po/es.po
Changed
@@ -12,7 +12,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2012-01-30 07:08+0000\n" "Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n" "Language-Team: es\n" @@ -23,423 +23,358 @@ "X-Launchpad-Export-Date: 2013-04-11 07:56+0000\n" "X-Generator: Launchpad (build 16550)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Comando desconocido" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Todas las pistas" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Advertencia: Propiedad del color - %s no reconocida\n" +msgid "Albums" +msgstr "Álbum" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "La terminal no soporta el cambio de colores" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Álbumes del artista: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "La terminal no tiene la opcion de diferentes colores" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Añadiendo '%s' a la lista de canciones" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Todos los artistas" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Tecla %s asignada a %s y %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Configuración de teclas" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Salir" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Mover el cursor hacia arriba" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Mover el cursor hacia abajo" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Mover el cursor hasta el principio de la pantalla" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Mover el cursor hasta la mitad de la pantalla" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Mover el cursor hasta el final de la pantalla" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Mover el cursor hasta el principio de la lista" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Mover el cursor hasta el final de la lista" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Página arriba" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Página abajo" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Selección del rango" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Bajar una linea" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Subir una linea" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Subir media pantalla" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Bajar media pantalla" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Seleccionar la actual canción en reproducción" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Ayuda" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Pantalla de teclas de acceso" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Navegador" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Reproducir/Entrar en el directorio" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pausa" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Parar" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Reducir lista de canciónes a canción marcado" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Siguiente" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Anterior" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Avanzar" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Retroceder" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Subir el volumen" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Bajar el volumen" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Seleccionar/Deseleccionar la canción en la lista" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Seleccionar todos" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Borrar la canción de la lista" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Alternar modo repetición" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Alternar modo aleatorio" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Alternar modo compacto" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Alternar modo completo" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Alternar modo crossfade" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Iniciar la actualización de la BD musical" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Añadir una URL o fichero a la lista" +msgid "Append song to queue" +msgstr "Añadir la canción de la lista" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Entrar al directorio fundamental" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Entrar al directorio superior" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Encontrar la canción en el navegador" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Moverlo arriba" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Moverlo abajo" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Actualizar la ventana" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Alternar modo de búsqueda" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Alternar centrado automático de la ventana" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Pantalla siguiente" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Pantalla anterior" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Volver a la anterior pantalla" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Buscar hacia adelante" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Buscar siguiente" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Buscar hacia atrás" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Buscar anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Saltar a" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Artistas" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Búsqueda" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Cambiar el modo de búsqueda" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Ver la canción seleccionada y reproducida" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Letras" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Interrumpir la acción" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Actualizar las letras" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Pantalla de salidas" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Pantalla siguiente" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Indefinido" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Espacio" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Borrar" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Arriba" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Abajo" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Izquierda" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Derecha" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Inicio" - -#: src/command.cxx:310 -msgid "End" -msgstr "Fin" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "Pagina siguiente" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "Pagina anterior" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tabulador" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tabulador" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insertar" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Tecla %s asignada a %s y %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Error" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Definición incorrecta de la tecla de acceso" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Comando desconocido" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Configuración incompleta de la tecla de acceso" @@ -447,823 +382,889 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Configuración incorrecta del tipo de duración mostrada" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Falta un '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Nombre de color incorrecto" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Definición de color incompleta" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Número inválido" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Definición de color erronea" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Nombre de pantalla desconocido" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Modo de búsqueda inválido" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "No se reconoce el modo de búsqueda" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Parámetro de configuración desconocido" -#: src/i18n.h:42 -msgid "y" -msgstr "s" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "La terminal no soporta el cambio de colores" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "No se puede borrar el elemento" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Selección de rango desactivada" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Borrar la lista de canciones" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Selección de rango activada" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Ejecución interrumpida" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Conectándose a %s... [Presiona %s para interrumpir la ejecución]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Lista de reproducción borrada" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Navegar" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "" -"Error: La versión %d.%d.%d del MPD es demasiado antigua (se necesita al " -"menos la %s)" +msgid "Loading playlist '%s'" +msgstr "Cargando la lista %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "pressiona %s para accer al editor de teclas" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Navegar" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n" -" Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount\n" -" Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet\n" -" Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" -" Luis Miguel D.P. https://launchpad.net/~lmdp\n" -" Max Kellermann https://launchpad.net/~max-duempel\n" -" Monkey https://launchpad.net/~monkey-libre\n" -" Paco Molinero https://launchpad.net/~franciscomol" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Global" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Reproducir" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centro" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Acceder al directorio/Seleccionar y reproducir canción" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Sustituir %s [%s%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Borrar la lista de canciones" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Ejecución interrumpida" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Búsqueda" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s Guardada" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Seleccionar y reproducir" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Modo repetición activado" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Ver letras" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Modo repetición desactivado" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Re)cargar letras" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Modo aleatorio activado" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Interrumpir la descarga" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Modo aleatorio desactivado" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Obtener las letras de la canción reproducida" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Modo compacto activado" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "No hay letras guardadas" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Modo compacto desactivado" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Guardar las letras" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Modo completo activado" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Borrar letras guardadas" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Modo compacto desactivado" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Activar/desactivar la salida" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Desvanecimiento de %d segundos" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Base de datos actualizada" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Pantalla de teclas de acceso" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Tipo de búsqueda: simple" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Cambia las teclas de acceso rápido para el comando seleccionado" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Tipo de búsqueda: Normal" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "ELiminar la tecla de acceso rápido seleccionada" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Modo autocentrado activado" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Introduce una nueva tecla" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Modo autocentrado desactivado" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Subir un nivel" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Todas las pistas" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Aplicar y guardar los cambios" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Todos los artistas" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Ayuda" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Álbumes del artista: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "s" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Todas las pistas del artista: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Álbum: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Indefinido" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Pistas del no álbum de artista: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Espacio" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Agregando álbum %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Borrar" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Arriba" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Abajo" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Izquierda" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Derecha" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Inicio" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Fin" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "Pagina siguiente" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "Pagina anterior" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tabulador" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tabulador" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insertar" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Agregando %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Cargando la lista %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Añadiendo '%s' a la lista de canciones" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Selección de rango desactivada" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Selección de rango activada" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "No hay letras disponibles" -#: src/screen_chat.cxx:59 +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Letras" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "cargando…" + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Actualizando la base de datos..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Ha comenzado la actualización de la base de datos %s" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Letras guardadas" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Ha comenzado la actualización de la base de datos" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Letras borradas" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "No se puede borrar el elemento" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "No hay letras guardadas" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Borrar la lista de canciones" - -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Lista de reproducción borrada" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Navegar" +msgid "Connecting to %s" +msgstr "Conectado a %s" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Buscar" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "" +"Error: La versión %d.%d.%d del MPD es demasiado antigua (se necesita al " +"menos la %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Buscar hacia atrás" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n" +" Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount\n" +" Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet\n" +" Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" +" Luis Miguel D.P. https://launchpad.net/~lmdp\n" +" Max Kellermann https://launchpad.net/~max-duempel\n" +" Monkey https://launchpad.net/~monkey-libre\n" +" Paco Molinero https://launchpad.net/~franciscomol" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Saltar" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Se activó la salida '%s'" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "No se pudo encontrar %s" +msgid "Output '%s' disabled" +msgstr "Se desactivó la salida '%s'" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Navegar" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Salidas" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Global" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Reproducir" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Mover la canción arriba" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Añadir" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Mover la canción abajo" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centro" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Acceder al directorio/Seleccionar y reproducir canción" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Añadir la canción de la lista" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Sustituir %s [%s%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Borrar la lista de canciones" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s Guardada" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Búsqueda" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Todas las pistas del artista: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Seleccionar y reproducir" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Álbum" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Ver letras" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Pistas del no álbum de artista: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Re)cargar letras" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artista" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Interrumpir la descarga" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Actualizando la base de datos..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Obtener las letras de la canción reproducida" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Ha comenzado la actualización de la base de datos %s" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "No hay letras guardadas" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Ha comenzado la actualización de la base de datos" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Guardar las letras" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Modo repetición activado" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Borrar letras guardadas" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Modo repetición desactivado" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Activar/desactivar la salida" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Modo aleatorio activado" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Modo aleatorio desactivado" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Pantalla de teclas de acceso" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Modo compacto activado" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Cambia las teclas de acceso rápido para el comando seleccionado" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Modo compacto desactivado" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "ELiminar la tecla de acceso rápido seleccionada" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Modo completo activado" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Introduce una nueva tecla" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Modo compacto desactivado" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Subir un nivel" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Desvanecimiento de %d segundos" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Aplicar y guardar los cambios" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Base de datos actualizada" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Ayuda" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Tipo de búsqueda: simple" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Error: La ventana/pantalla es muy pequeña" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Tipo de búsqueda: Normal" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Has definido nuevas teclas de acceso rápido" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Modo autocentrado activado" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Las teclas de acceso rápido no han sido modificadas." +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Modo autocentrado desactivado" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Error: No se ha podido crear el directorio ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Buscar" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Error: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Buscar hacia atrás" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Saltar" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s creado" +msgid "Unable to find '%s'" +msgstr "No se pudo encontrar %s" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Borrado" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Introduce tecla de acceso rápido para %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Error: la tecla %s ya está asignada a %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s asignada a %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Aplicar las teclas de acceso rápido " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Aplicar y guardar las teclas de acceso rápido " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Introduce una nueva tecla" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Nota: Has olvidado 'Aplicar' tus cambios?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Cambia las teclas de acceso rápido" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Cambia las teclas para %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "No hay letras disponibles" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Letras" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "cargando…" - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Has definido nuevas teclas de acceso rápido" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Las teclas de acceso rápido no han sido modificadas." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Configuración incompleta de la tecla de acceso" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Letras guardadas" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Letras borradas" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "No hay letras guardadas" +msgid "Wrote %s" +msgstr "%s creado" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Se activó la salida '%s'" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Aplicar las teclas de acceso rápido " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Se desactivó la salida '%s'" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Aplicar y guardar las teclas de acceso rápido " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Salidas" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Cambia las teclas de acceso rápido" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Añadir" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Nota: Has olvidado 'Aplicar' tus cambios?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Contraseña" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artista" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "álbum" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "título" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "canción" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nombre" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "estilo" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "fecha" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "compositor" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "intérprete" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "comentario" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fichero" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Título" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artista" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Álbum" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nombre de archivo" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artista + Título" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Sin argumentos para la etiqueta de búsqueda %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Etiqueta de búsqueda inválida: %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Pulsa %s para una nueva búsqueda" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Buscar: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Búsqueda: Resultados para %s [%s]" +msgid "No argument for search tag %s" +msgstr "Sin argumentos para la etiqueta de búsqueda %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Búsqueda: Pulsar %s para una nueva búsqueda [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Búsqueda" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Modo de búsqueda: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Duración" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Compositor" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nombre" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disco" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Pista" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Fecha" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Estilo" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Comentario" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Ruta" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitrate" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Número de artistas" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Número de álbumes" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Número de canciones" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Tiempo de ejecución" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Actualización más reciente de la BD" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Tiempo de reproducción" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Duración de la BD" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Visor de la canción" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Estadísticas del MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Canción seleccionada" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Canción reproducida" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Sustituir %s [%s%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Contraseña" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Escuchando:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Parado]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Comando desconocido" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Advertencia: Propiedad del color - %s no reconocida\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "La terminal no tiene la opcion de diferentes colores" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volumen n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volumen %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Añadir una URL o fichero a la lista" + +#~ msgid "Move song up" +#~ msgstr "Mover la canción arriba" + +#~ msgid "Move song down" +#~ msgstr "Mover la canción abajo" + +#~ msgid "Press %s for a new search" +#~ msgstr "Pulsa %s para una nueva búsqueda" + +#~ msgid "Search: %s" +#~ msgstr "Buscar: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Búsqueda: Resultados para %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Búsqueda: Pulsar %s para una nueva búsqueda [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Conectándose a %s... [Presiona %s para interrumpir la ejecución]" + +#~ msgid "press %s for the key editor" +#~ msgstr "pressiona %s para accer al editor de teclas" + +#~ msgid "Album: %s - %s" +#~ msgstr "Álbum: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Agregando álbum %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Agregando %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Error: La ventana/pantalla es muy pequeña" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Error: No se ha podido crear el directorio ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Error: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Sustituir %s [%s%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Borrar la lista de reproducción %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advertencia: Color %s - no reconocido\n" -#~ msgid "Connected to %s" -#~ msgstr "Conectado a %s" - #~ msgid "Shuffled playlist" #~ msgstr "Lista de canciones barajada"
View file
ncmpc-0.30.tar.xz/po/fi.po -> ncmpc-0.32.tar.xz/po/fi.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-03-06 16:02+0000\n" "Last-Translator: Sami Sankala <Unknown>\n" "Language-Team: Finnish <fi@li.org>\n" @@ -18,418 +18,356 @@ "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -msgid "Unknown color" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Kaikki kappaleet" + +#: src/AlbumListPage.cxx:144 +#, fuzzy +msgid "Albums" +msgstr "Albumi" + +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Kaikki albumit esittäjältä: %s" + +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Soittolistaan lisätään '%s'" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Kaikki esittäjät" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" msgstr "" -#: src/colors.cxx:195 -msgid "Unknown color field" +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" msgstr "" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" +#: src/ChatPage.cxx:160 +msgid "Your message" msgstr "" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Näppäinmäärittely ruutu" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Selailunäkymä" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 -msgid "Add url/file to queue" -msgstr "" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +#, fuzzy +msgid "Append song to queue" +msgstr "Lisää kappale soittolistaan" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Hakunäkymä" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Sanoitusnäkymä" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Soittolista näyttö" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "" - -#: src/command.cxx:292 -msgid "Space" -msgstr "" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "" - -#: src/command.cxx:300 -msgid "Up" -msgstr "" - -#: src/command.cxx:302 -msgid "Down" -msgstr "" - -#: src/command.cxx:304 -msgid "Left" -msgstr "" - -#: src/command.cxx:306 -msgid "Right" -msgstr "" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "" @@ -437,808 +375,867 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "" -#: src/i18n.h:42 -msgid "y" -msgstr "k" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "" -#: src/i18n.h:43 -msgid "n" -msgstr "e" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Tämän kohteen poistaminen ei ole mahdollista" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Poista soittolista" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Keskeytetty" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Yhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Soittolista poistettu" -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Virhe: MPD versio %d.%d.%d on liian vanha (tarvitaan %s)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Selaa" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "Painalla %s pääset näppäineditoriin" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Ladataan soittolistaa %s..." -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" +#: src/HelpPage.cxx:60 +msgid "Movement" msgstr "" -"Launchpad Contributions:\n" -" Katja Viljakainen https://launchpad.net/~katja-viljakainen\n" -" Sami Sankala https://launchpad.net/~valijumi" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" +#: src/HelpPage.cxx:105 +msgid "Global" msgstr "" -#: src/player_command.cxx:184 -msgid "Cleared queue" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Toista" + +#: src/HelpPage.cxx:149 +msgid "Center" msgstr "" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" msgstr "" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Korvaa %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Poista soittolista" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Keskeytetty" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Haku" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Tallennettu %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Valitse ja toista" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Jatkuva toisto on päällä" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Näytä sanoitukset" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Jatkuva toisto on poissa päältä" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "Lataa sanoitukset" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Satunnaistoisto on päällä" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Keskeytä sanoitusten noutaminen" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Satunnaistoisto poissa päältä" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Lataa sanoitukset toistettavaan kappaleeseen" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Kertatoisto on päällä" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Ei talletettuja sanoituksia" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Kertatoisto on poissa päältä" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Tallenna sanoitukset" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Kertakäyttökuuntelu päällä" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Poista tallennettut sanoitukset" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Kertakäyttökuuntelu poissa päältä" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Ulostulo päälle/poissa" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Ristiinhäivytys %d sekuntia" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Tietokanta päivitetty" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Näppäinmäärittely ruutu" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Hakutyyli: 'Wrapped'" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Muokkaa näppäinmäärittelyjä halutulle komennolle" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Hakutyyli: Normaali" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Poista valittu näppäinmäärittely" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Lisää uusi näppäin" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Siirry taso ylöspäin" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Kaikki kappaleet" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Toteuta ja tallenna muutokset" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Kaikki esittäjät" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Ohje" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Kaikki albumit esittäjältä: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "k" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Kaikki kappaleet esittäjältä: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "e" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Levy: %s - %s" - -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Kappaleet tuntemattomista albumeista esittäjältä: %s" - -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Lisätään albumia %s..." +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." -msgstr "Lisätään %s..." +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Ladataan soittolistaa %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Soittolistaan lisätään '%s'" +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +#: src/KeyName.cxx:39 +msgid "Delete" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:41 +msgid "Up" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/KeyName.cxx:43 +msgid "Down" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/KeyName.cxx:45 +msgid "Left" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Tietokannan päivitys käynnissä..." +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Tietokannan %s päivitys käynnistyi" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Tietokannan päivitys käynnistyi" +#: src/KeyName.cxx:51 +msgid "End" +msgstr "" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Tämän kohteen poistaminen ei ole mahdollista" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Poista soittolista" +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Soittolista poistettu" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Selaa" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Etsi" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Etsi alustapäin" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Siirry" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "" -#: src/screen_find.cxx:82 +#: src/KeyName.cxx:73 #, c-format -msgid "Unable to find '%s'" -msgstr "Haku '%s' ei tuottanut tuloksia" +msgid "Alt-%c" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" msgstr "" -#: src/screen_help.cxx:84 -msgid "Global" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Toista" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Sanoituksia ei löytynyt" + +#: src/LyricsPage.cxx:254 +#, c-format +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Siirrä kappaletta ylemmäksi" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Sanoitukset" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Siirrä kappaletta alemmaksi" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "latautuu..." -#: src/screen_help.cxx:128 -msgid "Center" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Lisää kappale soittolistaan" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Poista soittolista" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Haku" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Sanoitukset talletettu" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Valitse ja toista" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Sanoitukset poistettu" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Näytä sanoitukset" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Ei talletettuja sanoituksia" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "Lataa sanoitukset" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Yhdistetty kohteeseen %s" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Keskeytä sanoitusten noutaminen" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Virhe: MPD versio %d.%d.%d on liian vanha (tarvitaan %s)" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Lataa sanoitukset toistettavaan kappaleeseen" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Katja Viljakainen https://launchpad.net/~katja-viljakainen\n" +" Sami Sankala https://launchpad.net/~valijumi" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Ei talletettuja sanoituksia" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Ulostulo '%s' päällä" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Tallenna sanoitukset" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Ulostulo '%s' poissa päältä" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Poista tallennettut sanoitukset" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Ulostulot" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Ulostulo päälle/poissa" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#: src/player_command.cxx:186 +msgid "Cleared queue" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Näppäinmäärittely ruutu" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Lisää" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Muokkaa näppäinmäärittelyjä halutulle komennolle" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Poista valittu näppäinmäärittely" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Lisää uusi näppäin" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Siirry taso ylöspäin" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Korvaa %s [%s/%s] ? " -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Toteuta ja tallenna muutokset" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Tallennettu %s" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Ohje" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Kaikki kappaleet esittäjältä: %s" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Virhe: Ruutu on liian pieni" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Albumi" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Uusia näppäinmäärittelyjä" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Kappaleet tuntemattomista albumeista esittäjältä: %s" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Näppäinmäärittelyjä ei muutettu" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Esittäjä" -#: src/screen_keydef.cxx:153 +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Tietokannan päivitys käynnissä..." + +#: src/screen_client.cxx:48 #, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Virhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaan" +msgid "Database update of %s started" +msgstr "Tietokannan %s päivitys käynnistyi" + +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Tietokannan päivitys käynnistyi" + +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Jatkuva toisto on päällä" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Jatkuva toisto on poissa päältä" + +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Satunnaistoisto on päällä" + +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Satunnaistoisto poissa päältä" + +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Kertatoisto on päällä" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Kertatoisto on poissa päältä" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Kertakäyttökuuntelu päällä" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Kertakäyttökuuntelu poissa päältä" + +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Virhe: %s - %s" +msgid "Crossfade %d seconds" +msgstr "Ristiinhäivytys %d sekuntia" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Tietokanta päivitetty" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Hakutyyli: 'Wrapped'" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Hakutyyli: Normaali" + +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Etsi" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Etsi alustapäin" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Siirry" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Kirjoitettiin %s" +msgid "Unable to find '%s'" +msgstr "Haku '%s' ei tuottanut tuloksia" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Poistettu" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "" -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Virhe: näppäin %s on jo %s käytössä" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Asetettu %s %s:ksi" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "" - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "" - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Lisää uusi näppäin" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Huomio: Unohditko 'Toteuttaa' muutokset?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Muuta näppäinasetteluja" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Muokkaa %s näppäimiä" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Sanoituksia ei löytynyt" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Sanoitukset" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "latautuu..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Uusia näppäinmäärittelyjä" -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Näppäinmäärittelyjä ei muutettu" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" +#: src/screen_keydef.cxx:405 +msgid "Unable to write configuration" msgstr "" -#: src/screen_lyrics.cxx:411 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +msgid "Wrote %s" +msgstr "Kirjoitettiin %s" -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " msgstr "" -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Sanoitukset talletettu" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Sanoitukset poistettu" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Ei talletettuja sanoituksia" - -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Ulostulo '%s' päällä" - -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Ulostulo '%s' poissa päältä" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "" -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Ulostulot" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Muuta näppäinasetteluja" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Lisää" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Huomio: Unohditko 'Toteuttaa' muutokset?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Salasana" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "esittäjä" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "levy" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "nimi" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "kappale" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nimi" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "tyylilaji" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "päiväys:" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "säveltäjä" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "esittäjä" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "kommentti" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "tiedosto" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Kappale" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Esittäjä" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Albumi" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Tiedostonimi" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Esittäjä + Kappale" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Paina %s uuteen hakuun" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "Haku: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Haku: Tulokset hauelle %s [%s]" +msgid "No argument for search tag %s" +msgstr "" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Haku: Paina %s hakeaksesi uudelleen [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Haku" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Hakutyyli: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Kesto" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Säveltäjä" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nimi" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Levy" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Kappale" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Korvaa %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Salasana" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "" -#~ msgid "Connected to %s" -#~ msgstr "Yhdistetty kohteeseen %s" +#~ msgid "Move song up" +#~ msgstr "Siirrä kappaletta ylemmäksi" + +#~ msgid "Move song down" +#~ msgstr "Siirrä kappaletta alemmaksi" + +#~ msgid "Press %s for a new search" +#~ msgstr "Paina %s uuteen hakuun" + +#~ msgid "Search: %s" +#~ msgstr "Haku: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Haku: Tulokset hauelle %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Haku: Paina %s hakeaksesi uudelleen [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Yhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]" + +#~ msgid "press %s for the key editor" +#~ msgstr "Painalla %s pääset näppäineditoriin" + +#~ msgid "Album: %s - %s" +#~ msgstr "Levy: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Lisätään albumia %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Lisätään %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Virhe: Ruutu on liian pieni" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Virhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaan" + +#~ msgid "Error: %s - %s" +#~ msgstr "Virhe: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Korvaa %s [%s/%s] ? " #~ msgid "Shuffled playlist" #~ msgstr "Sekoitettu soittolista"
View file
ncmpc-0.30.tar.xz/po/fr.po -> ncmpc-0.32.tar.xz/po/fr.po
Changed
@@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: ncmpc 0.14.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-09-23 11:15+0000\n" "Last-Translator: Thibault Févry <Unknown>\n" "Language-Team: <fr@li.org>\n" @@ -20,423 +20,358 @@ "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n" "X-Generator: Launchpad (build 12138)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Commande inconnue" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Toutes les pistes" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Attention: Champ de couleur inconnu - %s\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Le terminal ne supporte pas le changement de couleurs" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Albums de l'artiste : %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Le terminal ne dispose pas de la gestion des couleurs" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Ajout de '%s' à la liste de lecture" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Tous les artistes" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "La touche %s est assignée à %s et à %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Ecran de configuration des touches" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Quitter" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Déplacer le curseur vers le haut" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Déplacer le curseur vers le bas" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Déplacer le curseur vers le haut de l'écran" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Déplacer le curseur vers le milieu de l'écran" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Déplacer le curseur vers le bas de l'écran" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Déplacer le curseur vers le haut de la liste" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Déplacer le curseur vers le bas de la liste" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Monter d'une page" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Descendre d'une page" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Sélection multi-ligne" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Défiler d'une ligne vers le bas" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Défiler d'une ligne vers le haut" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Défiler d'une moitié d'écran vers le haut" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Défiler d'une moitié d'écran vers le bas" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Sélectionner la chanson actuellement jouée" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Ecran d'aide" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Écran du paramétrage des raccourcis" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Ecran de Navigation" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Jouer/Entrer dans le répertoire" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pause" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stop" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Couper" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Piste suivante" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Piste précédente" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Avancer" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Reculer" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Augmenter le volume" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Diminuer le volume" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Sélectionner/Désélectionner la chanson dans la liste de lecture" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Selectionner tous les éléments listés" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Enlever la chanson de la liste de lecture" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Activer/désactiver le mode répétition" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Activer/désactiver le mode aléatoire" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Basculer le mode seul" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Basculer le mode consommation" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Activer/désactiver le mode de fondu" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Mettre à jour la base de données musicale" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Ajouter une url/un fichier à la liste de lecture" +msgid "Append song to queue" +msgstr "Ajouter la chanson à la liste de lecture" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Aller au répertoire racine" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Aller au répertoire supérieur" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Localiser la chanson dans le navigateur" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Déplacer l'élément vers le haut" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Déplacer l'élément vers le bas" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Rafraîchir l'écran" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Activer le mode de recherche" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Activer le mode d'auto-centrage" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Ecran suivant" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Ecran précédent" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Passer à l'écran le plus récent" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Chercher après" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Chercher après/suivant" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Chercher avant" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Chercher avant/précédent" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Aller à" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Ecran sur l'Artiste" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Ecran de recherche" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Changer le mode de recherche" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Voir la chanson sélectionnée et actuellement jouée" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Ecran des paroles" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Interrompre l'action" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Mettre à jour les paroles" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Ecran des sorties" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Ecran suivant" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Indéfini" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Espace" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Entrée" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Suppr" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Haut" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Bas" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Gauche" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Droite" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Début" - -#: src/command.cxx:310 -msgid "End" -msgstr "Fin" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageBas" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageHaut" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Echap" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Inser" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "La touche %s est assignée à %s et à %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Erreur" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Définition de raccourci malformée" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Commande inconnue" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Configuration de raccourci incomplète" @@ -444,821 +379,887 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Mauvais type d'affichage du temps" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Manque '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Mauvais nom de couleur" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Définition de couleur incomplète" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Nombre invalide" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Définition de couleur malformée" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Nom d'écran inconnu" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Mode de recherche invalide" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Mode de recherche inconnu" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Paramètre de configuration inconnu" -#: src/i18n.h:42 -msgid "y" -msgstr "o" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Le terminal ne supporte pas le changement de couleurs" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Impossible d'effacer ce type d'objet" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Sélection multi-ligne désactivée" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Effacer la liste de lecture" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Sélection multi-ligne activée" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Annulé" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Connexion à %s... [Appuyez sur %s pour annuler]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Liste de lecture effacée" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Parcourir" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Erreur: la version %d.%d.%d de MPD est trop ancienne (%s requise)" +msgid "Loading playlist '%s'" +msgstr "Chargement de la liste de lecture %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "appuyez sur %s pour l'éditeur de touches" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Déplacements" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Traduction française : Yann Cézard <eesprit@free.fr>\n" -"\n" -"Launchpad Contributions:\n" -" Bastien Leblanc https://launchpad.net/~bass000\n" -" François Blondel https://launchpad.net/~francoisblondel\n" -" Max Kellermann https://launchpad.net/~max-duempel\n" -" Romain Bignon https://launchpad.net/~romain-peerfuse\n" -" Thibault Févry https://launchpad.net/~thibaultfevry\n" -" Yann Cézard https://launchpad.net/~eesprit" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globales" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Lire" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centrer" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Entrer dans le répertoire/Sélectionner et lire la chanson" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Remplacer %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Effacer la liste de lecture" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Annulé" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Rechercher" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s enregistré" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Sélectionner et Lire" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Répétition activé" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Voir les Paroles" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Répétition désactivé" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Re)charger les paroles" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Mode Aléatoire activé" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Récupération interrompue" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Mode Aléatoire désactivé" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Télécharger les paroles de la chanson en lecture" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Mode seul activé" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Aucune parole sauvée" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Mode seul désactivé" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Enregistrer les paroles" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Mode consommateur activé" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Supprimer les paroles sauvées" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Mode consommateur activé" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Activer/désactiver une sortie" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Fondu sur %d seconde(s)" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Base de données mise à jour" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Écran du paramétrage des raccourcis" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Mode de recherche: Enveloppe" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Éditer les raccourcis pour la commande sélectionnée" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Mode de recherche: Normal" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Supprimer le raccourci sélectionné" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Mode d'auto-centrage: Actif" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Ajouter une nouvelle touche" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Mode d'auto-centrage: Inactif" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Aller au dossier parent" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Toutes les pistes" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Appliquer et sauvegarder les changements" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Tous les artistes" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Aide" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Albums de l'artiste : %s" +#: src/i18n.h:43 +msgid "y" +msgstr "o" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Toutes les pistes de l'artiste : %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Indéfini" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Piste sans album de l'artiste : %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Espace" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Ajout de l'album %s en cours..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Entrée" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Suppr" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Haut" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Bas" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Gauche" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Droite" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Début" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Fin" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageBas" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageHaut" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Echap" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Inser" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Ajout de %s en cours..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Chargement de la liste de lecture %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Ajout de '%s' à la liste de lecture" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Sélection multi-ligne désactivée" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Sélection multi-ligne activée" -#: src/screen_chat.cxx:59 +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Pas de paroles" + +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Paroles" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "Chargement..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Mise à jour de la base de données en cours..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Mise à jour de la base de données de %s commençée" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Paroles enregistrées" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Début de la mise à jour de la base de données" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Paroles supprimées" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Impossible d'effacer ce type d'objet" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Aucune parole sauvée" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Effacer la liste de lecture" +msgid "Connecting to %s" +msgstr "Connecté à %s" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Liste de lecture effacée" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Parcourir" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Trouver" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Erreur: la version %d.%d.%d de MPD est trop ancienne (%s requise)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Trouver avant" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Traduction française : Yann Cézard <eesprit@free.fr>\n" +"\n" +"Launchpad Contributions:\n" +" Bastien Leblanc https://launchpad.net/~bass000\n" +" François Blondel https://launchpad.net/~francoisblondel\n" +" Max Kellermann https://launchpad.net/~max-duempel\n" +" Romain Bignon https://launchpad.net/~romain-peerfuse\n" +" Thibault Févry https://launchpad.net/~thibaultfevry\n" +" Yann Cézard https://launchpad.net/~eesprit" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Sauter" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Sortie %s activée" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "Impossible de trouver '%s'" +msgid "Output '%s' disabled" +msgstr "Sortie %s désactivée" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Déplacements" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Sorties" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globales" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Lire" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Déplacer la chanson vers le haut" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Ajouter" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Déplacer la chanson vers le bas" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centrer" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Entrer dans le répertoire/Sélectionner et lire la chanson" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Ajouter la chanson à la liste de lecture" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Remplacer %s [%s/%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Effacer la liste de lecture" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s enregistré" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Rechercher" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Toutes les pistes de l'artiste : %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Sélectionner et Lire" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Voir les Paroles" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Piste sans album de l'artiste : %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Re)charger les paroles" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artiste" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Récupération interrompue" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Mise à jour de la base de données en cours..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Télécharger les paroles de la chanson en lecture" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Mise à jour de la base de données de %s commençée" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Aucune parole sauvée" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Début de la mise à jour de la base de données" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Enregistrer les paroles" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Répétition activé" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Supprimer les paroles sauvées" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Répétition désactivé" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Activer/désactiver une sortie" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Mode Aléatoire activé" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Mode Aléatoire désactivé" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Écran du paramétrage des raccourcis" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Mode seul activé" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Éditer les raccourcis pour la commande sélectionnée" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Mode seul désactivé" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Supprimer le raccourci sélectionné" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Mode consommateur activé" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Ajouter une nouvelle touche" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Mode consommateur activé" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Aller au dossier parent" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Fondu sur %d seconde(s)" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Appliquer et sauvegarder les changements" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Base de données mise à jour" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Aide" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Mode de recherche: Enveloppe" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Erreur: Ecran trop petit" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Mode de recherche: Normal" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Vous avez une nouvelle correspondance de touches" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Mode d'auto-centrage: Actif" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "La correspondance des touches n'a pas été changée." +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Mode d'auto-centrage: Inactif" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Erreur : Impossible de créer le répertoire ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Trouver" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Erreur: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Trouver avant" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Sauter" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s écrit" +msgid "Unable to find '%s'" +msgstr "Impossible de trouver '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Effacé" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Entrez la nouvelle touche pour %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erreur: la touche %s est déja attribuée à %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s assignée à %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Appliquer la correspondance des touches " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Appliquer et Enregistrer la correspondance des touches " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Ajouter une nouvelle touche" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Note: Auriez-vous oublié d''Appliquer' vos changements?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Editer les correspondances de touches" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Editer les touches pour %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Pas de paroles" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Paroles" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "Chargement..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Vous avez une nouvelle correspondance de touches" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "La correspondance des touches n'a pas été changée." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Configuration de raccourci incomplète" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Paroles enregistrées" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Paroles supprimées" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Aucune parole sauvée" +msgid "Wrote %s" +msgstr "%s écrit" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Sortie %s activée" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Appliquer la correspondance des touches " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Sortie %s désactivée" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Appliquer et Enregistrer la correspondance des touches " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Sorties" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Editer les correspondances de touches" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Ajouter" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Note: Auriez-vous oublié d''Appliquer' vos changements?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Mot de passe" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artiste" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titre" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "piste" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nom" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "date" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "compositeur" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "interprète" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "commentaire" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fichier" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titre" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artiste" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nom de fichier" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artiste + Titre" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Pas d'argument pour le champ recherché %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Mauvais champ recherché %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Appuyez sur %s pour une nouvelle recherche" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Rechercher: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Rechercher: Résultats pour %s [%s]" +msgid "No argument for search tag %s" +msgstr "Pas d'argument pour le champ recherché %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Rechercher: Appuyez sur %s pour une nouvelle recherche [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Rechercher" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Mode de recherche : %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Durée" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Compositeur" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nom" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disque" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Piste" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Date" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Style" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Commentaire" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Chemin" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Débit" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Nombre d'artistes" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Nombre d'albums" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Nombre de chansons" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Temps de service" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Mise à jour de la BD la plus récente" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Temps de lecture" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Temps de lecture de la BD" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Visualiseur de chanson" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Statistiques MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Chanson sélectionnée" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Chanson actuellement jouée" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Remplacer %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Mot de passe" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "En Lecture:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[En Pause]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Commande inconnue" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Attention: Champ de couleur inconnu - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Le terminal ne dispose pas de la gestion des couleurs" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volume n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Ajouter une url/un fichier à la liste de lecture" + +#~ msgid "Move song up" +#~ msgstr "Déplacer la chanson vers le haut" + +#~ msgid "Move song down" +#~ msgstr "Déplacer la chanson vers le bas" + +#~ msgid "Press %s for a new search" +#~ msgstr "Appuyez sur %s pour une nouvelle recherche" + +#~ msgid "Search: %s" +#~ msgstr "Rechercher: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Rechercher: Résultats pour %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Rechercher: Appuyez sur %s pour une nouvelle recherche [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Connexion à %s... [Appuyez sur %s pour annuler]" + +#~ msgid "press %s for the key editor" +#~ msgstr "appuyez sur %s pour l'éditeur de touches" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Ajout de l'album %s en cours..." + +#~ msgid "Adding %s..." +#~ msgstr "Ajout de %s en cours..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Erreur: Ecran trop petit" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Erreur : Impossible de créer le répertoire ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Erreur: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Remplacer %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Effacer la liste de lecture %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Attention: Couleur inconnue - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Connecté à %s" - #~ msgid "Shuffled playlist" #~ msgstr "Liste de lecture aléatoire"
View file
ncmpc-0.30.tar.xz/po/gl.po -> ncmpc-0.32.tar.xz/po/gl.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-03-25 19:34+0000\n" "Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n" "Language-Team: galician\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Orde descoñecida" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Todas as pistas" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Aviso: Campo de cor descoñecido - %s\n" +msgid "Albums" +msgstr "Álbum" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "A terminal non admite o cambio das cores" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Álbumes do artista: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "A terminal non ten funcionalidades de cor" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Engadindo «%s» á lista de reprodución" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Todos os artistas" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "A tecla %s asignouse a %s e a %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Pantalla de configuración dos atallos" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Saír" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Mover o cursor cara enriba" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Mover o cursor cara embaixo" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Mover o cursor até ao comezo da pantalla" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Mover o cursor até á metade da pantalla" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Mover o cursor até ao pe da pantalla" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Mover o cursor até ao comezo da lista" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Mover o cursor até ao pe da lista" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Páxina enriba" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Páxina embaixo" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Selección do rango" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Baixar unha liña" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Subir unha liña" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Subir media pantalla" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Baixar media pantalla" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Seleccionar a cannción actual canción en reprodución" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Pantalla de axuda" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Pantalla de atallos" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Pantalla do explorador" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Reproducir/Entrar nun cartafol" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pausa" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Deter" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Cortar" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Seguinte pista" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Pista anterior" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Avanzar" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Retroceder" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Aumentar volume" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Diminuir volume" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Seleccionar/deseleccionar a canción na lista de reprodución" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Seleccionar todos os elementos da lista" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Borrar a canción da lista de reproducción" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Activar/desactivar o modo repetición" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Activar/desactivar o modo aleatorio" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Alternar o modo compacto" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Alternar o modo completo" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Activar/desactivar o modo de esvaecimento cruzado" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Comezar unha actualización da BD" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Engadir url/ficheiro á lista de reprodución" +msgid "Append song to queue" +msgstr "Engadir a canción á lista de reprodución" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Ir ao cartafol raíz" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Ir ao cartafol pai" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Atopar a canción no explorador" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Movera o elemento cara arriba." -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Mover o elemento cara abaixo" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Actualizar a pantalla" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Alternar o modo de busca" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Alternar o modo de autocentrado" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Seguinte pantalla" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Pantalla anterior" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Volvar á pantalla anterior" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Buscar cara adiante" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Buscar cara adiante, seguinte" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Buscar cara atrás" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Buscar cara atrás, anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Ir a" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Pantalla de Artistas" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Pantalla de busca" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Cambiar o modo de buscas" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Ver a canción seleccionada e a que se está a reproducir" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Pantalla das letras de cancións" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Interromper a acción" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Actualizar as letras de cancións" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Pantalla de saída" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Seguinte pantalla" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Sen definir" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Espazo" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Entrar" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Retroceso" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Borrar" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Arriba" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Abaixo" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Esquerda" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Direita" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Inicio" - -#: src/command.cxx:310 -msgid "End" -msgstr "Fin" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PáxEmbaixo" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PáxEnriba" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tabulador" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Maiús + Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Inserir" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "A tecla %s asignouse a %s e a %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Erro" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Definición incorrecta da tecla de acceso rápido." #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Orde descoñecida" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Configuraión incompleta da tecla de acceso rápido" @@ -442,818 +377,884 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Configuración incorrecta da duración mostrada" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Falta o signo «=»" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Nome de cor incorrecto" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Definición incompleta da cor" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Número incorrecto" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Definición incorrecta da cor" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Nome de pantalla descoñecido" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "O modo de busca é incorrecto" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Modo de busca descoñecido" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Parámetro de configuración descoñecido" -#: src/i18n.h:42 -msgid "y" -msgstr "s" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "A terminal non admite o cambio das cores" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Non é possíbel borrar este elemento" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "A selección de rango está desactivada" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Borrar a lista de reprodución" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "A selección de rango está sactivada" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Interrompido" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Conectandose con %s... [Prema %s para interromper]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Lista de reprodución borrada" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Explorar" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Erro: a versión %d.%d.%d do MPD é moi antiga (precisase a %s)" +msgid "Loading playlist '%s'" +msgstr "Cargando a lista de reprodución %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "prema %s para ir ao editor de atallos" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Movemento" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"ashtophet\n" -"\n" -"Launchpad Contributions:\n" -" Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive\n" -" Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" -" Miguel Anxo Bouzada https://launchpad.net/~mbouzada" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Global" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Reproducir" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centrar" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Entre no cartafol/Seleccione e reproduza a canción" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Substituir %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Borrar a lista de reprodución" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Interrompido" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Buscar" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Gardouse %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Seleccionar e reproducir" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Activado o modo de repetición" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Ver as letras de cancións" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Modo repetición desactivado" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Re)cargar as letras de cancións" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Modo aleatório activado" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Interromper a descarga" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Modo aleatório desactivado" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Obter as letras da canción reproducida" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Modo compacto activado" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Letras de cancións sen gardar" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Modo compacto desactivado" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Guardar as letras de cancións" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Modo completo activado" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Eliminar as letras de cancións gardadas" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Modo completo desactivado" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Activar/Desactivar a saída" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Esvaecemento cruzado %d segundos" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Base de dados actualizada" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Pantalla de atallos" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Modo de busca: Limitada" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Editar atallos para a orde seleccionada" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Modo de busca: Normal" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Eliminar o atallo seleccionado" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Modo de autocentrado: activado" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Engadir un novo atallo" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Modo de autocentrado: desactivado" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Subir un nivel" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Todas as pistas" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Aplicar e gardar os cambios" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Todos os artistas" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Axuda" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Álbumes do artista: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "s" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Todas as pistas do artista: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Álbum: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Sen definir" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Pistas de ningún álbum do artista: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Espazo" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Engadindo álbum %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Entrar" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Retroceso" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Borrar" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Arriba" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Abaixo" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Esquerda" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Direita" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Inicio" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Fin" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PáxEmbaixo" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PáxEnriba" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tabulador" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Maiús + Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Inserir" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Engadindo %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Cargando a lista de reprodución %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Engadindo «%s» á lista de reprodución" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "A selección de rango está desactivada" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "A selección de rango está sactivada" -#: src/screen_chat.cxx:59 +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Sen letras de cancións" + +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Letras de cancións" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "cargando..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "A base de datos estase actualizando..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Comezou a actualización da base de datos de %s" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Letras de cancións gardadas" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Comezou a actualización da base de datos" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Letras de cancións eliminadas" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Non é possíbel borrar este elemento" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Letras de cancións sen gardar" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Borrar a lista de reprodución" +msgid "Connecting to %s" +msgstr "Conectado a %s" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Lista de reprodución borrada" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Explorar" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Buscar" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Erro: a versión %d.%d.%d do MPD é moi antiga (precisase a %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Buscar cara atrás" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"ashtophet\n" +"\n" +"Launchpad Contributions:\n" +" Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive\n" +" Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n" +" Miguel Anxo Bouzada https://launchpad.net/~mbouzada" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Ir a" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Activouse a saída «%s»" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "Non se puido atopar «%s»" +msgid "Output '%s' disabled" +msgstr "Desactivouse a saída «%s»" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Movemento" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Saídas" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Global" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Reproducir" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Mover a canción cara enrriba" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Engadir" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Mover a canción cara embaixo" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centrar" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Entre no cartafol/Seleccione e reproduza a canción" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Engadir a canción á lista de reprodución" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Substituir %s [%s/%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Borrar a lista de reprodución" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Gardouse %s" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Buscar" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Todas as pistas do artista: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Seleccionar e reproducir" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Álbum" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Ver as letras de cancións" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Pistas de ningún álbum do artista: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Re)cargar as letras de cancións" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artista" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Interromper a descarga" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "A base de datos estase actualizando..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Obter as letras da canción reproducida" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Comezou a actualización da base de datos de %s" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Letras de cancións sen gardar" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Comezou a actualización da base de datos" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Guardar as letras de cancións" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Activado o modo de repetición" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Eliminar as letras de cancións gardadas" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Modo repetición desactivado" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Activar/Desactivar a saída" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Modo aleatório activado" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Modo aleatório desactivado" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Pantalla de atallos" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Modo compacto activado" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Editar atallos para a orde seleccionada" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Modo compacto desactivado" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Eliminar o atallo seleccionado" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Modo completo activado" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Engadir un novo atallo" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Modo completo desactivado" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Subir un nivel" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Esvaecemento cruzado %d segundos" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Aplicar e gardar os cambios" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Base de dados actualizada" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Axuda" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Modo de busca: Limitada" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Erro: A pantalla é moi pequena" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Modo de busca: Normal" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Ten novos atallos de teclado" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Modo de autocentrado: activado" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Non se cambiaron os atallos de teclado" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Modo de autocentrado: desactivado" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Erro: Non se puido crear o cartafol ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Buscar" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Erro: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Buscar cara atrás" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Ir a" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Escribiuse %s" +msgid "Unable to find '%s'" +msgstr "Non se puido atopar «%s»" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Borrada" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Introduza un novo atallo para %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erro: a tecla %s xá está sendo utilizada por %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Asignouse %s a %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Aplicar os atallos de teclado " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Aplicar e guardar os atallos de teclado " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Engadir un novo atallo" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Nota: Esquecuse de «Aplicar» os cambios?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Editar os atallos de teclado" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Editar atallos para %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Sen letras de cancións" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Letras de cancións" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "cargando..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Ten novos atallos de teclado" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Non se cambiaron os atallos de teclado" -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Configuraión incompleta da tecla de acceso rápido" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Letras de cancións gardadas" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Letras de cancións eliminadas" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Letras de cancións sen gardar" +msgid "Wrote %s" +msgstr "Escribiuse %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Activouse a saída «%s»" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Aplicar os atallos de teclado " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Desactivouse a saída «%s»" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Aplicar e guardar os atallos de teclado " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Saídas" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Editar os atallos de teclado" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Engadir" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Nota: Esquecuse de «Aplicar» os cambios?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Contrasinal" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artista" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "álbum" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "título" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "pista" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nome" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "xénero" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "data" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "compositor" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "interprete" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "comentário" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "ficheiro" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Título" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artista" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Álbum" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nome do ficheiro" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artista + Título" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Sen argumento para a busca da etiqueta %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Etiqueta de busca errónea %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "Prema %s para unha nova busca" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Buscar: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Buscar: Resultados para %s [%s]" +msgid "No argument for search tag %s" +msgstr "Sen argumento para a busca da etiqueta %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Buscar: Prema %s para unha nova busca [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Buscar" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Modo da busca: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Duración" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Compositor" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nome" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disco" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Pista" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Data" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Xénero" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Comentario" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Ruta" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Taxa de bits" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Número de artistas" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Número de álbumes" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Número de cancións" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Tempo de execución" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Actualización máis recente da BD" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Tempo de reprodución" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Duraciónacumulada da BD" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Visor da canción" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Estatísticas do MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Canción seleccionada" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Canción que se está reproducindo" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Substituir %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Contrasinal" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Reproducindo:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[En Pausa]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Orde descoñecida" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Aviso: Campo de cor descoñecido - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "A terminal non ten funcionalidades de cor" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volume n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Engadir url/ficheiro á lista de reprodución" + +#~ msgid "Move song up" +#~ msgstr "Mover a canción cara enrriba" + +#~ msgid "Move song down" +#~ msgstr "Mover a canción cara embaixo" + +#~ msgid "Press %s for a new search" +#~ msgstr "Prema %s para unha nova busca" + +#~ msgid "Search: %s" +#~ msgstr "Buscar: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Buscar: Resultados para %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Buscar: Prema %s para unha nova busca [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Conectandose con %s... [Prema %s para interromper]" + +#~ msgid "press %s for the key editor" +#~ msgstr "prema %s para ir ao editor de atallos" + +#~ msgid "Album: %s - %s" +#~ msgstr "Álbum: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Engadindo álbum %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Engadindo %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Erro: A pantalla é moi pequena" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Erro: Non se puido crear o cartafol ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Erro: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Substituir %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Borrar a lista de reprodución %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Aviso: Cor descoñecida - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Conectado a %s" - #~ msgid "Shuffled playlist" #~ msgstr "Lista de reprodución aleatoria"
View file
ncmpc-0.30.tar.xz/po/he.po -> ncmpc-0.32.tar.xz/po/he.po
Changed
@@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-09-07 20:35+0200\n" "Last-Translator: zeltak <Unknown>\n" "Language-Team: he <he@li.org>\n" @@ -13,423 +13,358 @@ "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "פקודה לא ידועה" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "כל השירים" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "אזהרה: צבע לא מוכ בתחום - %s\n" +msgid "Albums" +msgstr "אלבום" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "המסוף ללא תמיכה בצבעים" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "אלבום של אומן %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "המסוף ללא יכולת תמיכה בצבעים" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "מוסיף %s לרשימת השירים" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "כל האמנים" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "מקש %s מוקצה ל %s ו %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "מסך קינפוג מקשים" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "צא מהתוכנה" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "הזז סמן למעלה" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "הזז סמן למטה" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "הזז סמן לקצה העליון של המסך" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "הזז סמן לאמצע של המסך" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "הזז סמן לקצה התחתון של המסך" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "הזז סמן לקצה העליון של הרשימה" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "הזז סמן לקצה התחתון של הרשימה" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "דף למעלה" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "דף למטה" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "בחירת טווח" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "גלול שורה אחת" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "גלול שורה אחת למעלה" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "גלול חצי מסך למעלה" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "גלול חצי מסך למטה" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "בחר בשיר שכרגע מנגן" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "מסך עזרה" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "מסך שוני מקשים" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "דפדף במסך" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "נגן/הכנס תיקיה" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "הפסק" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "עצור" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "חתוך" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "רצועה הבאה" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "רצועה קודמת" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "דלג קדימה" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "דלג אחורה" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "הגבר" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "הנמך" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "בחר/הסר שיר ברשימת שירים" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "בחר את הכל" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "מחק שיר מרשימת השירים" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "הפעל מצב חזרה" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "הפעל מצב רנדומלי" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "הפעל מצב יחיד" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "הפעל מצב מתכלה" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "הפעל קרוספייד" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "התחל עדכון בסיס הנתונים המוזיקלי" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "הוסף לינק/קובץ לרשימת שירים" +msgid "Append song to queue" +msgstr "הוסף שיר לרשימת שירים" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "לך לתיקיה שורש" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "לך לתיקיה עליונה" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "מצא שיר בדפדפן" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "הזז למעלה" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "הזז למטה" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "רענן מסך" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "הפעל מצב חיפוש" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "הפעל מירכוז אוטומטי" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "מסך הבא" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "מסך קודם" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "החלף למסך אחרון" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "מצא קדימה" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "מצא קדימה הבא" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "מצא אחורה" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "מצא אחורה הבא" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "קפוץ ל" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "מסך אומן" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "חפש במסך" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "שנה תצורת מסך" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "הראה את השיר הנבחר והמנגן" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "מסך מילות השיר" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "הפסק פעולה" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "רענן מילים לשיר" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "מסך הפלט" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "מסך הבא" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "לא מוגדר" - -#: src/command.cxx:292 -msgid "Space" -msgstr "רווח" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "הכנס" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "אחורה" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "מחק" - -#: src/command.cxx:300 -msgid "Up" -msgstr "למעלה" - -#: src/command.cxx:302 -msgid "Down" -msgstr "למטה" - -#: src/command.cxx:304 -msgid "Left" -msgstr "שמאלה" - -#: src/command.cxx:306 -msgid "Right" -msgstr "חמינה" - -#: src/command.cxx:308 -msgid "Home" -msgstr "בית" - -#: src/command.cxx:310 -msgid "End" -msgstr "סוף" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "דף למטה" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "דף למעלה" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "טאב" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "מקש %s מוקצה ל %s ו %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "שגיאה" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "הגדרת המקשים החמים שגויה" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "פקודה לא ידועה" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "הגדרת המקשים החמים חסרה" @@ -437,813 +372,881 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "תצוגת זמן שגויה" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "חסר '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "צבע שגוי" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "הגדרת צבעים חסרה" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "מספר לא תקין" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "הגדרת צבעים שגויה" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "שם מסך לא ידוע" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "חיפוש לא תקין" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "מצב חיפוש לא ידוע" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "פרמטר קונפיג לא ידוע" -#: src/i18n.h:42 -msgid "y" -msgstr "כן" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "המסוף ללא תמיכה בצבעים" -#: src/i18n.h:43 -msgid "n" -msgstr "לא" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "מחיקת פריט זה בלתי אפשרית" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "טווח בחירה מאושר" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "מחק רשימת שירים" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "טווח בחירה מבוטל" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "בוטל" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "מתחבר ל %s [לחץ על %s לביטול]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "רשימת שירים נמחקה" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "דפדף" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "שגיאה: גרסת התוכנה %d.%d.%d ישנה מדי (צריך %s)" +msgid "Loading playlist '%s'" +msgstr "טוען רשימת שירים %s...." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "%s לעורך המקשים לחץ" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "תנועה" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" zeltak https://launchpad.net/~zeltak" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "גלובלי" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "נגן" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "מרכז" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "הכנס תיקיה/בחר ונגן שיר" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "החלף %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "מחק רשימת שירים" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "בוטל" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "חיפוש" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "שמירת %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "בחר ונגן" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "מצב חזרה מופעל" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "הצג מילים לשיר" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "מצב חזרה מופסק" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "הטען מחדש מילים לשיר" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "מצב רנדומלי מופעל" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "שליפת המידע הופסקה" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "מצב רנדומלי מופסק" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "הורד מילים לשיר המנגן כרגע" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "מצב יחיד מופעל" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" +msgstr "" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "מצב יחיד מופסק" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "שמור מילים לשיר" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "מצב מתכלה מופעל" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "מצב יחיד מופסק" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "אשר/אסור על פלט" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "קרוספייד שניות %d" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "בסיס הנתונים עודכן" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "מסך שוני מקשים" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "מצב סופי: כרוך" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "ערוך שוני מקשים לפקודות שונות" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "מצב סופי: נורמלי" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "הסר שוני מקשים" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "מצב מרכז אוטומטי: מופעל" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "הוסף מקש חדש" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "מצב מרכז אוטומטי: מופסק" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "עלה רמה אחת" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "כל השירים" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "ישם ושמור שינויים" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "כל האמנים" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "עזרה" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "אלבום של אומן %s" +#: src/i18n.h:43 +msgid "y" +msgstr "כן" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "כל השירים של אומן: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "לא" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "אלבום:%s-%s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "לא מוגדר" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "אלבום של אומן %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "רווח" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "טוען רשימת שירים %s...." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "הכנס" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "טוען...." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "אחורה" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "טוען רשימת שירים %s...." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "מחק" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "מוסיף %s לרשימת השירים" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "למעלה" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" -msgstr "" +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "למטה" -#: src/screen_chat.cxx:177 -msgid "Your message" -msgstr "" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "שמאלה" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "חמינה" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "בית" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "עדכון בסיס הנתנונים פועל...." +#: src/KeyName.cxx:51 +msgid "End" +msgstr "סוף" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "עדכון בסיס הנתנונים החל %s" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "דף למטה" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "עדכון בסיס הנתנונים החל" +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "דף למעלה" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "מחיקת פריט זה בלתי אפשרית" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "טאב" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "מחק רשימת שירים" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "רשימת שירים נמחקה" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "esc" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "דפדף" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "חיפוש" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "חיפוש לאחור" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "קפיצה" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "טווח בחירה מאושר" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "טווח בחירה מבוטל" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "אין מילים לשיר" -#: src/screen_find.cxx:82 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "לא ניתן למצוא את '%s'" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "תנועה" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "מילים" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "גלובלי" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "טוען...." -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "נגן" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "הזז שיר למעלה" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "הזז שיר למטה" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "מרכז" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "הכנס תיקיה/בחר ונגן שיר" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "מילים לשיר נשמרו" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "הוסף שיר לרשימת שירים" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "מחק רשימת שירים" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "חיפוש" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "מתחבר ל %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "בחר ונגן" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "שגיאה: גרסת התוכנה %d.%d.%d ישנה מדי (צריך %s)" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "הצג מילים לשיר" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" zeltak https://launchpad.net/~zeltak" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "הטען מחדש מילים לשיר" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "פלט '%s' אפשרי" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "שליפת המידע הופסקה" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "פלט '%s' אינו אפשרי" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "הורד מילים לשיר המנגן כרגע" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "פלטים" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "שמור מילים לשיר" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "הוסף" + +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" msgstr "" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "אשר/אסור על פלט" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "מסך שוני מקשים" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "החלף %s [%s/%s] ? " -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "ערוך שוני מקשים לפקודות שונות" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "שמירת %s" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "הסר שוני מקשים" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "כל השירים של אומן: %s" + +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "אלבום" + +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "אלבום של אומן %s" -#: src/screen_help.cxx:193 +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "אומן" + +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add a keydef" -msgstr "הוסף מקש חדש" +msgid "Database update running" +msgstr "עדכון בסיס הנתנונים פועל...." -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "עלה רמה אחת" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "עדכון בסיס הנתנונים החל %s" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "ישם ושמור שינויים" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "עדכון בסיס הנתנונים החל" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "עזרה" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "מצב חזרה מופעל" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "שגיאה: המסך קטן מידי" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "מצב חזרה מופסק" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "יש תצורת מקשים חדשה" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "מצב רנדומלי מופעל" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "תצורת מקשים לא שונתה." +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "מצב רנדומלי מופסק" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "שגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %s" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "מצב יחיד מופעל" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "מצב יחיד מופסק" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "מצב מתכלה מופעל" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "מצב יחיד מופסק" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "שגיאה: %s - %s" +msgid "Crossfade %d seconds" +msgstr "קרוספייד שניות %d" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "בסיס הנתונים עודכן" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "מצב סופי: כרוך" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "מצב סופי: נורמלי" + +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "מצב מרכז אוטומטי: מופעל" -#: src/screen_keydef.cxx:171 +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "מצב מרכז אוטומטי: מופסק" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "חיפוש" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "חיפוש לאחור" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "קפיצה" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "נכתב %s" +msgid "Unable to find '%s'" +msgstr "לא ניתן למצוא את '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "נמחק" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "הכנס מקש חדש ל %s " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "שגיאה: המקש %s כבר קיים ל %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "הוקצה %s ל %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "=====> ישם תצורת מקשים " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "=====> ישם ושמור תצורת מקשים " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "הוסף מקש חדש" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "הזהרה: האם שכחת 'לישם' את השינוים" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "ערוך את תצורת המקשים" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "ערוך את המקש ל %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "אין מילים לשיר" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "מילים" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "טוען...." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "יש תצורת מקשים חדשה" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "תצורת מקשים לא שונתה." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "הגדרת המקשים החמים חסרה" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "מילים לשיר נשמרו" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "" +msgid "Wrote %s" +msgstr "נכתב %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "פלט '%s' אפשרי" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "=====> ישם תצורת מקשים " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "פלט '%s' אינו אפשרי" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "=====> ישם ושמור תצורת מקשים " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "פלטים" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "ערוך את תצורת המקשים" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "הוסף" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "הזהרה: האם שכחת 'לישם' את השינוים" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "סיסמה" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "אומן" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "אלבום" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "שם" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "רצועה" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "שם" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "ג'אנר" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "תאריך" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "מלחין" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "מבצע" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "הערות" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "קובץ" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "שם" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "אומן" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "אלבום" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "שם קובץ" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "אומן+שם" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "אין טעון לחיפוש תגית %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "חיפוש לא תקין של תגית %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "לחץ %s לביצוע חיפוש חדש" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "חיפוש: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "חיפוש: תוצאוצ חיפוש ל %s [%s]" +msgid "No argument for search tag %s" +msgstr "אין טעון לחיפוש תגית %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "חיפוש: לחץ %s לחיפוש חדש [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "חיפוש" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "צורת חיפוש: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "מלחון" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "שם" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "דיסק" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "רצועה" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "תאריך" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "ג'אנר" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "הערה" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "נתיב" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "ביטרייט" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "מספר אומנים" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "מספר אלבומים" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "מספר שירים" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "זמן פעילות" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "עדכון עדכני אחרון של בסיב נתונים" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "זמן נגינה" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "זמן נגינה בסיס נתונים" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "הצגת השיר" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "סטטיסטיקה MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "בחר שיר" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "שיר עכשווי" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "החלף %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "סיסמה" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "מנגן:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[הפסקה]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "פקודה לא ידועה" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "אזהרה: צבע לא מוכ בתחום - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "המסוף ללא יכולת תמיכה בצבעים" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "ב n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "ווליום %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "הוסף לינק/קובץ לרשימת שירים" + +#~ msgid "Move song up" +#~ msgstr "הזז שיר למעלה" + +#~ msgid "Move song down" +#~ msgstr "הזז שיר למטה" + +#~ msgid "Press %s for a new search" +#~ msgstr "לחץ %s לביצוע חיפוש חדש" + +#~ msgid "Search: %s" +#~ msgstr "חיפוש: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "חיפוש: תוצאוצ חיפוש ל %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "חיפוש: לחץ %s לחיפוש חדש [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "מתחבר ל %s [לחץ על %s לביטול]" + +#~ msgid "press %s for the key editor" +#~ msgstr "%s לעורך המקשים לחץ" + +#~ msgid "Album: %s - %s" +#~ msgstr "אלבום:%s-%s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "טוען רשימת שירים %s...." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "טוען...." + +#~ msgid "Error: Screen too small" +#~ msgstr "שגיאה: המסך קטן מידי" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "שגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "שגיאה: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "החלף %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "%s [%s/%s] ? מחיקת רשימת שירים " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "אזהרה: צבע לא מוכר - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "מתחבר ל %s" - #~ msgid "Shuffled playlist" #~ msgstr "רשימת שירים מעורבבת"
View file
ncmpc-0.30.tar.xz/po/hu.po -> ncmpc-0.32.tar.xz/po/hu.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2009-09-24 21:45+0000\n" "Last-Translator: Kiszel Kristóf <Unknown>\n" "Language-Team: Hungarian <hu@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Ismeretlen parancs" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Minden szám" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Figyelem: ismeretlen szín mező - %s\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "A terminál nem támogatja a színek változtatását" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "%s előadó albumai" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "A terminál nem támogatja a színeket" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "'%s' hozzáadása a lejátszólistához" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Minden előadó" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "A(z) %s gomb a követlezőkhoz van rendelve: %s és %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Billentyű beállító képernyő" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Kilép" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Kurzormozgatás felfelé" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Kurzormozgatás lefelé" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Kurzor mozgatása a képernyő tetejére" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Kurzor mozgatása a képernyő közepére" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Kurzor mozgatása a képernyő aljára" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Kurzor mozgatása a lista tetejére" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Kurzor mozgatása a lista aljára" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Egy oldalt fel" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Egy oldalt le" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Tartomány kiválasztása" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Görgetés egy sorral le" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Görgetés egy sorral fel" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Görgetés fél képernyőnyivel fel" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Görgetés fél képernyőnyivel le" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Most lejátszott szám kiválasztása" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Segítség" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Billentyű beállító képernyő" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Tallózás" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Lejátszás/Belépés könyvtárba" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Szüneteltetés" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Leállítás" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Vágás" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Következő szám" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Előző szám" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Tekerés előre" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Tekerés hátra" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Hangerő növelése" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Hangerő csökkentése" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Szám kiválasztása a lejátszólistában" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Minden listázott elem kiválasztása" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Szám törlése a lejátszólistából" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Ismétlő mód ki- és bekapcsolása" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Véletlenszerű lejátszás ki- és bekapcsolása" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Egyszeri mód átkapcsolása" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Fogyasztó mód átkapcsolása" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Egymásba mosás ki- és bekapcsolása" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "A zenei adatbázis frissítésének indítása" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "URL vagy fájl hozzáadása a lejátszólistához" +msgid "Append song to queue" +msgstr "Szám hozzáadása a lejátszólistához" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Mozgás a gyökér könyvtárba" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Mozgás a szülő könyvtárba" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Szám megtekintése a tallozóban" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Elem mozgatása fel" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Elem mozgatása le" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Képernyő frissítése" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Kereső mód ki- és bekapcsolása" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Középre igazítás ki- és bekapcsolása" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Kövezkező képernyő" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Előző képernyő" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Váltás a legutóbbi képernyőre" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Keresés előre" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Következő keresése előre" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Keresés hátra" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Előző keresése hátra" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Ugrás oda" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Előadó képernyő" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Kereső képernyő" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Kereső mód váltása" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "A kiválasztott és épp lejátszott szám megtekintése" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Dalszöveg képernyő" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "parancs megszakítása" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Dalszövegek frissítése" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Kimenetek" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Kövezkező képernyő" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Meghatározatlan" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Szóköz" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Up" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Down" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Left" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Right" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "A(z) %s gomb a követlezőkhoz van rendelve: %s és %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Hiba" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Hibás gyorsbillentyű definíció" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Ismeretlen parancs" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Hiányos gyorsbillentyű definíció" @@ -442,814 +377,883 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Hibás időkijelzési típus" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Hiányzó egyenlőség jel" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Hibás szín megnevezés" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Hiányos szín megadás" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Érvénytelen szám" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Hibás szín megadás" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Ismeretlen képernyő név" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Érvénytelen keresési mód" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Ismeretlen keresési mód" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Ismeretlen konfigurációs paraméter" -#: src/i18n.h:42 -msgid "y" -msgstr "i" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "A terminál nem támogatja a színek változtatását" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Ez az elem nem törölhető" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Tartomány kiválasztás letiltva" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Lejátszólista törlése" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Tartomány kiválasztás engedélyezve" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Megszakítva" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Kapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Lejátszólista törölve" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Tallózás" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Hiba: a(z) %d.%d.%d MPD verzió túl régi (%s kell)" +msgid "Loading playlist '%s'" +msgstr "%s lejátszólista betöltése..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "nyomj %s-t a szerkesztéshez" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Mozgás" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Kiszel Kristóf https://launchpad.net/~ulysses\n" -" Laszlo Ashin https://launchpad.net/~kodest" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Általános" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Lejátszás" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Közép" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Könyvtár megadása/szám kiválasztása és lejátszása" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Cserélni a következőt: %s [%s/%s]? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Lejátszólista törlése" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Megszakítva" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Keresés" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s elmentve" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Kiválasztás és lejátszás" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Ismétlő mód be" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Dalszövegek megtekintése" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Ismétlő mód ki" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "Dalszövegek (újra)töltése" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Véletlen mód be" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Újrapróbálkozás megszakítása" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Véletlen mód ki" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Dalszöveg letöltése a jelenlegi zenéhez" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Egyszeri lejátszás mód be" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" +msgstr "" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Egyszeri lejátszás mód ki" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Dalszövegek mentése" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Fogyasztó mód be" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Fogyasztó mód ki" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Kimenet engedélyezése/tiltása" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Egymásba mosás %d másodperc" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Adatbázis frissítve" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Billentyű beállító képernyő" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Keresési mód: újrakezdő" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Billentyű szerkesztése a kiválasztott parancshoz" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Keresési mód: normál" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Billentyű hozzárendelés megszűntetése" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Középre igazítás bekapcsolva" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Új gomb hozzáadása" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Középre igazítás kikapcsolva" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Egy szinttel feljebb" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Minden szám" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Alkalmaz és menti a változásokat" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Minden előadó" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Súgó" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "%s előadó albumai" +#: src/i18n.h:43 +msgid "y" +msgstr "i" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "%s előadó minden száma" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Meghatározatlan" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "%s előadó albumai" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Szóköz" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "%s lejátszólista betöltése..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "%s könyvtár hozzáadása...\n" +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "%s lejátszólista betöltése..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "'%s' hozzáadása a lejátszólistához" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Up" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" -msgstr "" +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Down" -#: src/screen_chat.cxx:177 -msgid "Your message" -msgstr "" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Left" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Right" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Adatbázis frissítés folyamatban..." +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "%s adatbázis frissítése elkezdődött" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Adatbázis frissítés elindult" +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Ez az elem nem törölhető" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Lejátszólista törlése" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Lejátszólista törölve" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Tallózás" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Keresés" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Keresés visszafelé" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Ugrás" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Tartomány kiválasztás letiltva" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Tartomány kiválasztás engedélyezve" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Nincs dalszöveg" -#: src/screen_find.cxx:82 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "'%s' nem található" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Mozgás" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Dalszövegek" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Általános" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "betöltés..." -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Lejátszás" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Szám mozgatása felfelé" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Szám mozgatása lefelé" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Közép" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Könyvtár megadása/szám kiválasztása és lejátszása" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Dalszövegek elmentve" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Szám hozzáadása a lejátszólistához" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Lejátszólista törlése" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Keresés" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Csatlakoztatva ide: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Kiválasztás és lejátszás" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Hiba: a(z) %d.%d.%d MPD verzió túl régi (%s kell)" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Dalszövegek megtekintése" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Kiszel Kristóf https://launchpad.net/~ulysses\n" +" Laszlo Ashin https://launchpad.net/~kodest" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "Dalszövegek (újra)töltése" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Kimenet engedélyezve: %s" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Újrapróbálkozás megszakítása" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Kimenet tiltva: %s" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Dalszöveg letöltése a jelenlegi zenéhez" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Kimenetek" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Dalszövegek mentése" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Hozzáadás" + +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" msgstr "" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Kimenet engedélyezése/tiltása" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Billentyű beállító képernyő" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Cserélni a következőt: %s [%s/%s]? " -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Billentyű szerkesztése a kiválasztott parancshoz" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s elmentve" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Billentyű hozzárendelés megszűntetése" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "%s előadó minden száma" + +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" + +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "%s előadó albumai" -#: src/screen_help.cxx:193 +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Előadó" + +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add a keydef" -msgstr "Új gomb hozzáadása" +msgid "Database update running" +msgstr "Adatbázis frissítés folyamatban..." -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Egy szinttel feljebb" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "%s adatbázis frissítése elkezdődött" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Alkalmaz és menti a változásokat" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Adatbázis frissítés elindult" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Súgó" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Ismétlő mód be" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Hiba: a képernyő túl kicsi" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Ismétlő mód ki" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Új billentyű beállításaid vannak" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Véletlen mód be" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "A billentyű beállítások változatlanok." +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Véletlen mód ki" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Hiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %s" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Egyszeri lejátszás mód be" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Egyszeri lejátszás mód ki" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Fogyasztó mód be" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Fogyasztó mód ki" + +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Hiba: %s - %s" +msgid "Crossfade %d seconds" +msgstr "Egymásba mosás %d másodperc" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Adatbázis frissítve" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Keresési mód: újrakezdő" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Keresési mód: normál" -#: src/screen_keydef.cxx:171 +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Középre igazítás bekapcsolva" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Középre igazítás kikapcsolva" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Keresés" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Keresés visszafelé" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Ugrás" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s elmentve" +msgid "Unable to find '%s'" +msgstr "'%s' nem található" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Törölve" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Nyomd meg az új gombot a következőhöz: %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Hiba: %s gombot már a következő funkció használja: %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s hozzárendelve a következőhöz: %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Billentyű beállítások használata " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Alkalmaz és Menti a billentyű beállításokat " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Új gomb hozzáadása" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Észrevétel: nem felejtetted el érvényesíteni a változtatásaidat?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Billentyűk változtatása" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Gombok módosítása a következőhöz: %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Nincs dalszöveg" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Dalszövegek" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "betöltés..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Új billentyű beállításaid vannak" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "A billentyű beállítások változatlanok." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Hiányos gyorsbillentyű definíció" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Dalszövegek elmentve" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "" +msgid "Wrote %s" +msgstr "%s elmentve" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Kimenet engedélyezve: %s" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Billentyű beállítások használata " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Kimenet tiltva: %s" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Alkalmaz és Menti a billentyű beállításokat " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Kimenetek" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Billentyűk változtatása" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Hozzáadás" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Észrevétel: nem felejtetted el érvényesíteni a változtatásaidat?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Jelszó" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "előadó" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "cím" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "szám" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "név" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "műfaj" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "dátum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "zeneszerző" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "előadó" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "megjegyzés" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fájl" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Cím" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Előadó" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Fájlnév" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Előadó és Cím" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Nincs argumentuma a(z) %s keresési elemnek" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Hibás keresési elem %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Új kereséshez nyomj %s gombot" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Keresés: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Keresés: találatok a következőhöz %s [%s]" +msgid "No argument for search tag %s" +msgstr "Nincs argumentuma a(z) %s keresési elemnek" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Keresés: új kereséshez nyomj %s gombot [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Keresés" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Keresési mód: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Hossz" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Zeneszerző" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Név" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Lemez" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Szám" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Dátum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Műfaj" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Megjegyzés" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Elérési út" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitráta" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Előadók száma" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Albumok száma" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Zenék száma" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Üzemidő" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Legutóbbi adatbázis frissítés" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Lejátszási idő" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Teljes adatbázis lejátszási ideje" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Szám néző" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD statisztika" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Kiválasztott zene" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Jelenlegi zene" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Cserélni a következőt: %s [%s/%s]? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Jelszó" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Ami szól:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Szüneteltetve]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Ismeretlen parancs" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Figyelem: ismeretlen szín mező - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "A terminál nem támogatja a színeket" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Hangerő ismeretlen" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Hangerő %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "URL vagy fájl hozzáadása a lejátszólistához" + +#~ msgid "Move song up" +#~ msgstr "Szám mozgatása felfelé" + +#~ msgid "Move song down" +#~ msgstr "Szám mozgatása lefelé" + +#~ msgid "Press %s for a new search" +#~ msgstr "Új kereséshez nyomj %s gombot" + +#~ msgid "Search: %s" +#~ msgstr "Keresés: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Keresés: találatok a következőhöz %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Keresés: új kereséshez nyomj %s gombot [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "" +#~ "Kapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]" + +#~ msgid "press %s for the key editor" +#~ msgstr "nyomj %s-t a szerkesztéshez" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "%s lejátszólista betöltése..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "%s könyvtár hozzáadása...\n" + +#~ msgid "Error: Screen too small" +#~ msgstr "Hiba: a képernyő túl kicsi" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Hiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Hiba: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Cserélni a következőt: %s [%s/%s]? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Törlöd a %s lejátszólistát [%s/%s]? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Figyelem: ismeretlen szín - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Csatlakoztatva ide: %s" - #~ msgid "Shuffled playlist" #~ msgstr "Lejátszólista összekeverve"
View file
ncmpc-0.30.tar.xz/po/it.po -> ncmpc-0.32.tar.xz/po/it.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-10-31 19:53+0000\n" "Last-Translator: simone.sandri <Unknown>\n" "Language-Team: Italian <it@li.org>\n" @@ -18,418 +18,356 @@ "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n" "X-Generator: Launchpad (build 12138)\n" -#: src/colors.cxx:156 -msgid "Unknown color" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Tutte le piste" + +#: src/AlbumListPage.cxx:144 +#, fuzzy +msgid "Albums" +msgstr "Album" + +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Album del artista: %s" + +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Aggiungendo '%s' alla lista di canzoni" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Tutti gli artisti" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" msgstr "" -#: src/colors.cxx:195 -msgid "Unknown color field" +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" msgstr "" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" +#: src/ChatPage.cxx:160 +msgid "Your message" msgstr "" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Esci" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Muovi cursore in alto" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Muovi cursore in basso" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Muovi cursore in cima allo schermo" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Muovi cursore in mezzo allo schermo" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Muovi cursore in fondo allo schermo" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Muovi cursore in cima alla lista" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Muovi cursore in fondo alla lista" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Pagina sopra" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Pagina sotto" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Schermo di tasti di acceso" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Esegui/Entra nella cartella" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pausa" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Ferma" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Prossima traccia" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Traccia precedente" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Alza volume" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Abbassa volume" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Seleziona tutti gli oggetti della lista" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 -msgid "Add url/file to queue" -msgstr "" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +#, fuzzy +msgid "Append song to queue" +msgstr "Aggiungere la canzone alla lista" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Ricerca" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Lettere" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Schermo di uscite" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Lista di canzoni" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "" - -#: src/command.cxx:292 -msgid "Space" -msgstr "" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "" - -#: src/command.cxx:300 -msgid "Up" -msgstr "" - -#: src/command.cxx:302 -msgid "Down" -msgstr "" - -#: src/command.cxx:304 -msgid "Left" -msgstr "" - -#: src/command.cxx:306 -msgid "Right" -msgstr "" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "" @@ -437,815 +375,868 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "" -#: src/i18n.h:42 -msgid "y" -msgstr "e" - -#: src/i18n.h:43 -msgid "n" -msgstr "n" - -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "" - -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "" - -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Collegandosi a %s... [Preme %s per annullare]" - -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "" -"Errore: La versione di MPD %d.%d.%d è troppo vecchia (bisogna avere al meno " -"la %s)" - -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "preme %s per accedere al editore di tasti" - -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Luis Miguel D.P. https://launchpad.net/~lmdp\n" -" Max Kellermann https://launchpad.net/~max-duempel\n" -" simone.sandri https://launchpad.net/~lexluxsox" - -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" - -#: src/player_command.cxx:184 -msgid "Cleared queue" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" msgstr "" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Non è possibile rimuovere questo elemento." -#: src/save_playlist.cxx:140 +#: src/FileBrowserPage.cxx:268 #, fuzzy, c-format -msgid "Replace %s?" -msgstr "Sostituire %s [%s%s] ? " +msgid "Delete playlist %s?" +msgstr "Rimuove la playlist" #. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 msgid "Aborted" msgstr "Annullato" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s salvato" - -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Modo ripetizione attivato" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Playlist rimossa." -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Modo ripetizione disattivato" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Esplora" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Modo randomizzato attivo" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Caricando la lista %s" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Modo randomizzato disattivato" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Movimento" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Modo singolo attivato" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globale" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Modo singolo disattivato" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Play" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Modo consumazione attivato" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centrare" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Modo consumazione disattivato" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Accedere alla cartella/Selezionare e riprodurre la canzone" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Rimuove la playlist" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Database aggiornato" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Cerca" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Modo di ricerca: semplice" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Seleziona e riprodurre" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Modo di ricerca: Normale" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Vedere le lettere" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Modo di auto-centrato: attivato" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Ri)caricare le lettere" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Modo di auto-centrato: disattivato" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Annullare la scarica." -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Tutte le piste" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Ottenere le lettere della canzone riprodotta" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Tutti gli artisti" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Non ci sono testi salvati" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Album del artista: %s" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Salvare le lettere" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Tutte le piste del artista: %s" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Rimuovere le lettere" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Attivare/disattivare le uscite" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" +#: src/HelpPage.cxx:205 +msgid "Write a message" msgstr "" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Aggiungendo album %s..." - -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." -msgstr "Aggiungendo %s..." +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Schermo di tasti di acceso" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Caricando la lista %s" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Cambia i tasti di acceso veloce per il commando selezionato" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Aggiungendo '%s' alla lista di canzoni" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Rimuovere il tasto di acceso veloce selezionato" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Introduce un nuovo tasto" + +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Salire un livello" + +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Applicare e salvare i cambiamenti" + +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Aiuto" + +#: src/i18n.h:43 +msgid "y" +msgstr "e" + +#: src/i18n.h:44 +msgid "n" +msgstr "n" + +#: src/KeyName.cxx:31 +msgid "Undefined" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:33 +msgid "Space" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/KeyName.cxx:35 +msgid "Enter" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/KeyName.cxx:37 +msgid "Backspace" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Aggiornamento del database in corso..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Iniziato l'aggiornamento del database %s" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Iniziato l'aggiornamento del database." +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Non è possibile rimuovere questo elemento." +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Rimuove la playlist" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Playlist rimossa." +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Esplora" +#: src/KeyName.cxx:51 +msgid "End" +msgstr "" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Cerca" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" +#: src/KeyName.cxx:55 +msgid "PageUp" msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Salta" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "" -#: src/screen_find.cxx:82 -#, c-format -msgid "Unable to find '%s'" -msgstr "Non si ha potuto trovare %s" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Movimento" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globale" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Play" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Sposta la canzone su" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Sposta la canzone giù" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centrare" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Accedere alla cartella/Selezionare e riprodurre la canzone" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Non ci sono testi disponibili" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Aggiungere la canzone alla lista" +#: src/LyricsPage.cxx:254 +#, c-format +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Rimuove la playlist" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Testi" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Cerca" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "caricamento in corso..." -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Seleziona e riprodurre" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Vedere le lettere" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Ri)caricare le lettere" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Annullare la scarica." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Ottenere le lettere della canzone riprodotta" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Testi salvati" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Non ci sono testi salvati" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Testi rimossi" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Salvare le lettere" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Non ci sono testi salvati" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Rimuovere le lettere" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Connesso a %s" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Attivare/disattivare le uscite" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "" +"Errore: La versione di MPD %d.%d.%d è troppo vecchia (bisogna avere al meno " +"la %s)" -#: src/screen_help.cxx:184 -msgid "Write a message" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" msgstr "" +"Launchpad Contributions:\n" +" Luis Miguel D.P. https://launchpad.net/~lmdp\n" +" Max Kellermann https://launchpad.net/~max-duempel\n" +" simone.sandri https://launchpad.net/~lexluxsox" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Schermo di tasti di acceso" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "La uscita '%s' è attivata" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Cambia i tasti di acceso veloce per il commando selezionato" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "La uscita '%s' è disattivata" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Rimuovere il tasto di acceso veloce selezionato" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Uscite" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Introduce un nuovo tasto" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Salire un livello" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Applicare e salvare i cambiamenti" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Aggiungi" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Aiuto" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Errore: La finestra è tropo piccola" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Sostituire %s [%s%s] ? " + +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s salvato" + +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Tutte le piste del artista: %s" + +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" + +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" msgstr "" -#: src/screen_keydef.cxx:153 +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artista" + +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Aggiornamento del database in corso..." + +#: src/screen_client.cxx:48 #, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Errore: Non si ha potuto creare la cartella ~/.ncmpc - %s" +msgid "Database update of %s started" +msgstr "Iniziato l'aggiornamento del database %s" + +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Iniziato l'aggiornamento del database." + +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Modo ripetizione attivato" + +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Modo ripetizione disattivato" + +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Modo randomizzato attivo" + +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Modo randomizzato disattivato" + +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Modo singolo attivato" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Modo singolo disattivato" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Modo consumazione attivato" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Modo consumazione disattivato" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Errore: %s - %s" +msgid "Crossfade %d seconds" +msgstr "" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Database aggiornato" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Modo di ricerca: semplice" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Modo di ricerca: Normale" + +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Modo di auto-centrato: attivato" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Modo di auto-centrato: disattivato" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Cerca" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Salta" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s creato" +msgid "Unable to find '%s'" +msgstr "Non si ha potuto trovare %s" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Rimosso" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Introduce tasto di acceso veloce per %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Errore: il tasto %s già sta assegnato a %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s assegnato a %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "" - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "" - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Introduce un nuovo tasto" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Nota: Hai dimenticato 'Applicare' i tuoi cambiamenti?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Cambia i tasti di acceso veloce" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Cambia i tasti per %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Non ci sono testi disponibili" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Testi" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "caricamento in corso..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" msgstr "" -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." msgstr "" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" +#: src/screen_keydef.cxx:405 +msgid "Unable to write configuration" msgstr "" -#: src/screen_lyrics.cxx:411 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +msgid "Wrote %s" +msgstr "%s creato" -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " msgstr "" -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Testi salvati" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Testi rimossi" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Non ci sono testi salvati" - -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "La uscita '%s' è attivata" - -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "La uscita '%s' è disattivata" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "" -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Uscite" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Cambia i tasti di acceso veloce" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Aggiungi" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Nota: Hai dimenticato 'Applicare' i tuoi cambiamenti?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Password" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artista" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titolo" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "track" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nome" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genero" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "data" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "compositore" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "interprete" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "commentare" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "file" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titolo" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artista" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nome del file" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artista + Titolo" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Senza argomenti per la etichetta di ricerca %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Etichetta di ricerca invalida: %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Preme %s per una nuova ricerca" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "Cerca: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "" +msgid "No argument for search tag %s" +msgstr "Senza argomenti per la etichetta di ricerca %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Cerca" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Durata" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Compositore" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nome" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disco" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Brano" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Data" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Genero" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Commento" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Path" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitrate" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Numero di artisti" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Numero di albums" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Numero di brani" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Tempo in attività" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Aggiornamento più recente del database" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Tempo di riproduzione" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Durata del database" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Visore di canzoni" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Statistiche del MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Brano selezionato" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Brano riprodotto" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Sostituire %s [%s%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Password" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Riproducendo:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pausato]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volume n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" +#~ msgid "Move song up" +#~ msgstr "Sposta la canzone su" + +#~ msgid "Move song down" +#~ msgstr "Sposta la canzone giù" + +#~ msgid "Press %s for a new search" +#~ msgstr "Preme %s per una nuova ricerca" + +#~ msgid "Search: %s" +#~ msgstr "Cerca: %s" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Collegandosi a %s... [Preme %s per annullare]" + +#~ msgid "press %s for the key editor" +#~ msgstr "preme %s per accedere al editore di tasti" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Aggiungendo album %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Aggiungendo %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Errore: La finestra è tropo piccola" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Errore: Non si ha potuto creare la cartella ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Errore: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Sostituire %s [%s%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Rimuovere la playlist %s [%s/%s] ? " -#~ msgid "Connected to %s" -#~ msgstr "Connesso a %s" - #~ msgid "Shuffled playlist" #~ msgstr "Lista di canzoni mescolata"
View file
ncmpc-0.30.tar.xz/po/ko.po -> ncmpc-0.32.tar.xz/po/ko.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2009-10-16 17:35+0000\n" "Last-Translator: Jay Whang <jaypedia@gmail.com>\n" "Language-Team: Korean <ko@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2009-10-19 13:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "알 수 없는 명령" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "모든 트랙" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "경고: 알 수 없는 색상 항목 - %s\n" +msgid "Albums" +msgstr "앨범" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "색상 변경 지원이 부족한 터미널입니다." +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "아티스트의 앨범: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "색상 기능이 없는 터미널입니다." +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "'%s'(을)를 연주목록에 더하기" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "모든 아티스트" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다." + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "키 설정 화면" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "끝내기" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "커서를 위로 올리기" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "커서를 아래로 내리기" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "커서를 화면 맨 위로 옮기기" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "커서를 화면 가운데로 옮기기" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "커서를 화면 맨 아래로 옮기기" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "커서를 리스트 맨 위로 옮기기" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "커서를 리스트 맨 아래로 옮기기" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "위쪽 페이지" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "아래쪽 페이지" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "범위 선택" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "한 줄 아래로 내리기" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "한 줄 위로 올리기" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "화면 반 위로 올리기" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "화면 반 아래로 내리기" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "현재 재생중인 곡을 선택" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "도움말 화면" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "키설정 화면" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "열람하기 화면" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "연주/디렉토리 입력" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "일시정지" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "멈춤" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "연주중인 곡만 선택" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "다음 트랙" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "이전 트랙" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "앞으로 찾기" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "뒤로 찾기" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "음량 높이기" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "음량 낮추기" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "연주목록에서 곡 선택/해제" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "나열한 항목 모두 선택하기" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "연주목록에서 곡 삭제하기" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "반복연주 모드 토클" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "무작위연주 모드 토클" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "싱글 모드 토글" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "소비 모드 토글" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "곡바꿈 모드 토글" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "음악 데이타베이스 업데이트를 시작" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "연주목록에 url/파일 더하기" +msgid "Append song to queue" +msgstr "연주목록에 곡을 더하기" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "루트 디렉토리로 가기" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "상위 디렉토리로 가기" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "열람 화면에 곡을 위치하기" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "항목 위로 올리기" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "항목 아래로 내리기" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "화면 갱신하기" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "찾기 모드 토글" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "자동 가운데 모드 토글" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "다음 화면" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "이전 화면" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "가장 최근 화면으로 교환" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "앞으로 찾기" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "앞으로 다음 찾기" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "뒤로 찾기" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "뒤로 이전 찾기" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "직접 이동" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "아티스트 화면" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "찾기 화면" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "찾기 모드 변경" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "선택하고 현재 연주중인 곡을 보기" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "가사 화면" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "백그라운드 실행을 중지" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "가사 업데이트" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "출력 화면" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "다음 화면" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "정의되지 않음" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Space" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "지우기" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Up" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Down" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Left" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Right" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다." - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "오류" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "잘못된 단축키 정의" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "알 수 없는 명령" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "단축키 설정이 불완전합니다." @@ -442,818 +377,886 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "잘못된 시간 표시 형식" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "'=' 기호가 없습니다." -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "잘못된 색상 이름" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "불완전한 색상 지정" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "유효하지 않은 숫자" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "잘못된 색상 지정" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "알 수 없는 화면 이름" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "잘못된 검색 모드" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "알 수 없는 검색 모드" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "알 수 없는 설정 요소" -#: src/i18n.h:42 -msgid "y" -msgstr "y" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "색상 변경 지원이 부족한 터미널입니다." -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "이 항목을 지우는 것은 가능하지 않습니다." -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "범위 선택 기능을 사용하지 않습니다." +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "연주목록 지우기" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "범위 선택 기능을 사용합니다." +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "중단됨" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "연주목록을 삭제하였습니다." -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "MPD 버전 %d%d%d (은)는 너무 낮습니다. (필요한 버전 %s)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "열람" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "키 편집기 사용을 위하여 %s(을)를 누르십시오." +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "연주목록 %s(을)를 올리는 중..." -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" atie https://launchpad.net/~atie-at-matrix\n" -" bluejay https://launchpad.net/~jaypedia" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "이동" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "전체" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "연주" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "가운데" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "변경하기 %s [%s/%s] ? " +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "디렉토리를 입력하고 곡을 선택하여 연주합니다." -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "중단됨" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "연주목록 지우기" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s(으)로 저장함" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "찾기" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "반복 모드 켜짐" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "선택하고 연주" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "반복 모드 꺼짐" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "가사 보기" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "무작위 모드 켜짐" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "가사 (다시)올리기" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "무작위 모드 꺼짐" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "가사 가져오기 중지" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "싱글 모드 켜짐" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "현재 연주중인 노래의 가사를 다운로드" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "싱글 모드 꺼짐" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "가사 저장하기" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "소비 모드 켜짐" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "가사 저장하기" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "소비 모드 꺼짐" +#: src/HelpPage.cxx:191 +#, fuzzy +msgid "Delete saved lyrics" +msgstr "가사 저장하기" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "곡바뀜 %d 초" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "출력 사용하기/안하기" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "데이터베이스를 업데이트 하였습니다." +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "찾기 방식: 줄 이어짐" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "키설정 화면" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "찾기 방식: 보통" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "선택한 명령을 위한 키설정 편집하기" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "자동 가운데 방식: 켜짐" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "선택한 키설정 삭제하기" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "자동 가운데 방식: 꺼짐" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "새로운 키 더하기" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "모든 트랙" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "한 단계 위로 가기" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "모든 아티스트" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "적용하고 변경사항을 저장하기" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "아티스트의 앨범: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "도움말" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "아티스트의 모든 트랙: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "y" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "앨범: %s - %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "아티스트의 앨범: %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "정의되지 않음" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "연주목록 %s(을)를 올리는 중..." +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Space" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "올리는 중..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "연주목록 %s(을)를 올리는 중..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "'%s'(을)를 연주목록에 더하기" +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "지우기" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Up" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Down" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Left" -#: src/screen_chat.cxx:59 +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Right" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Ctrl-%c" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "범위 선택 기능을 사용하지 않습니다." -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "범위 선택 기능을 사용합니다." -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "데이터베이스 업데이트를 실행 중..." +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "가사 없음" -#: src/screen_client.cxx:49 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Database update of %s started" -msgstr "%s 데이터베이스 업데이트를 시작합니다." +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "데이터베이스 업데이트를 시작합니다." +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "가사" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "이 항목을 지우는 것은 가능하지 않습니다." +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "올리는 중..." -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "연주목록 지우기" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" + +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" + +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" + +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "가사를 저장하였습니다." + +#: src/LyricsPage.cxx:445 +#, fuzzy +msgid "Lyrics deleted" msgstr "연주목록을 삭제하였습니다." -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "열람" +#: src/LyricsPage.cxx:446 +#, fuzzy +msgid "No saved lyrics" +msgstr "가사 저장하기" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "찾기" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "%s로 접속함" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "거꾸로 찾기" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "MPD 버전 %d%d%d (은)는 너무 낮습니다. (필요한 버전 %s)" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "이동" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" atie https://launchpad.net/~atie-at-matrix\n" +" bluejay https://launchpad.net/~jaypedia" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:87 #, c-format -msgid "Unable to find '%s'" -msgstr "'%s'(을)를 찾을 수 없습니다." - -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "이동" +msgid "Output '%s' enabled" +msgstr "출력 '%s'(을)를 사용합니다" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "전체" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "출력 '%s'(을)를 사용 안합니다" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "연주" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "출력" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "곡을 위로 올리기" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "곡을 아래로 내리기" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "가운데" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "더하기" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "디렉토리를 입력하고 곡을 선택하여 연주합니다." +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "연주목록에 곡을 더하기" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "연주목록 지우기" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "찾기" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "변경하기 %s [%s/%s] ? " -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "선택하고 연주" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s(으)로 저장함" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "가사 보기" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "아티스트의 모든 트랙: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "가사 (다시)올리기" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "앨범" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "가사 가져오기 중지" +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "아티스트의 앨범: %s" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "현재 연주중인 노래의 가사를 다운로드" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "아티스트" -#: src/screen_help.cxx:168 +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add or edit lyrics" -msgstr "가사 저장하기" +msgid "Database update running" +msgstr "데이터베이스 업데이트를 실행 중..." -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "가사 저장하기" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "%s 데이터베이스 업데이트를 시작합니다." -#: src/screen_help.cxx:170 -#, fuzzy -msgid "Delete saved lyrics" -msgstr "가사 저장하기" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "데이터베이스 업데이트를 시작합니다." -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "출력 사용하기/안하기" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "반복 모드 켜짐" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "반복 모드 꺼짐" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "키설정 화면" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "무작위 모드 켜짐" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "선택한 명령을 위한 키설정 편집하기" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "무작위 모드 꺼짐" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "선택한 키설정 삭제하기" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "싱글 모드 켜짐" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "새로운 키 더하기" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "싱글 모드 꺼짐" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "한 단계 위로 가기" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "소비 모드 켜짐" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "적용하고 변경사항을 저장하기" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "소비 모드 꺼짐" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "도움말" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "곡바뀜 %d 초" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "오류: 화면이 너무 작습니다." +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "데이터베이스를 업데이트 하였습니다." -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "새로운 키 조합을 지정하였습니다." +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "찾기 방식: 줄 이어짐" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "키 조합을 바꾸지 않았습니다." +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "찾기 방식: 보통" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "자동 가운데 방식: 켜짐" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "오류: %s - %s" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "자동 가운데 방식: 꺼짐" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "찾기" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "거꾸로 찾기" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "이동" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "%s(을)를 썼습니다." +msgid "Unable to find '%s'" +msgstr "'%s'(을)를 찾을 수 없습니다." -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "삭제됨" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "%s(을)를 위한 새 키를 입력하세요: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "오류: 키 %s(은)는 이미 %s(을)를 위하여 사용합니다." -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s(을)를 %s(으)로 지정하였습니다." -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> 키 조합을 적용 " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> 키 조합을 적용하고 저장 " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "새로운 키 더하기" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "주의: 변경사항 '적용하기'를 잊었나요?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "키 조합 편집하기" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "%s(을)를 위한 키 편집" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "가사 없음" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "가사" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "올리는 중..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" - -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" - -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" - -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "가사를 저장하였습니다." +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "새로운 키 조합을 지정하였습니다." -#: src/screen_lyrics.cxx:443 -#, fuzzy -msgid "Lyrics deleted" -msgstr "연주목록을 삭제하였습니다." +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "키 조합을 바꾸지 않았습니다." -#: src/screen_lyrics.cxx:446 +#: src/screen_keydef.cxx:405 #, fuzzy -msgid "No saved lyrics" -msgstr "가사 저장하기" +msgid "Unable to write configuration" +msgstr "단축키 설정이 불완전합니다." -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" -msgstr "출력 '%s'(을)를 사용합니다" +msgid "Wrote %s" +msgstr "%s(을)를 썼습니다." -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "출력 '%s'(을)를 사용 안합니다" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> 키 조합을 적용 " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "출력" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> 키 조합을 적용하고 저장 " -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "더하기" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "키 조합 편집하기" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "주의: 변경사항 '적용하기'를 잊었나요?" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "열쇠글" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "아티스트" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "앨범" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "제목" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "트랙" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "이름" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "장르" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "날짜" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "작곡가" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "연주가" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "주석" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "파일" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "제목" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "아티스트" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "앨범" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "파일이름" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "아티스트 + 제목" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "찾기 태그 %s위한 인자가 없습니다." - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "잘못된 찾기 태그 %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "새로운 찾기를 위하여 %s(을)를 누르십시오." - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "찾기: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "찾기: %s 결과 [%s]" +msgid "No argument for search tag %s" +msgstr "찾기 태그 %s위한 인자가 없습니다." -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "찾기: %s(을)를 눌러 새롭게 찾기 [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "찾기" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "찾기 방식: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "길이" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "작곡가" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "이름" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "디스크" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "트랙" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "날짜" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "장르" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "주석" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "경로" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "비트 전송률" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "아티스트 수" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "앨범 수" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "곡 수" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "업타임" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "가장 최근의 데이타베이스 업데이트" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "연주시간" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "데이타베이스 연주시간" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "곡 보기" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD 통계" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "선택한 곡" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "현재 연주중인 곡" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "변경하기 %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "열쇠글" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "연주중:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[멈춰짐]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "알 수 없는 명령" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "경고: 알 수 없는 색상 항목 - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "색상 기능이 없는 터미널입니다." + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "음량 없음" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "음량 %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "연주목록에 url/파일 더하기" + +#~ msgid "Move song up" +#~ msgstr "곡을 위로 올리기" + +#~ msgid "Move song down" +#~ msgstr "곡을 아래로 내리기" + +#~ msgid "Press %s for a new search" +#~ msgstr "새로운 찾기를 위하여 %s(을)를 누르십시오." + +#~ msgid "Search: %s" +#~ msgstr "찾기: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "찾기: %s 결과 [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "찾기: %s(을)를 눌러 새롭게 찾기 [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]" + +#~ msgid "press %s for the key editor" +#~ msgstr "키 편집기 사용을 위하여 %s(을)를 누르십시오." + +#~ msgid "Album: %s - %s" +#~ msgstr "앨범: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "연주목록 %s(을)를 올리는 중..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "올리는 중..." + +#~ msgid "Error: Screen too small" +#~ msgstr "오류: 화면이 너무 작습니다." + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "오류: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "변경하기 %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "연주목록 %s [%s/%s] 삭제하기 ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "경고: 알 수 없는 색상 - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "%s로 접속함" - #~ msgid "Shuffled playlist" #~ msgstr "섞여진 연주목록"
View file
ncmpc-0.30.tar.xz/po/nb.po -> ncmpc-0.32.tar.xz/po/nb.po
Changed
@@ -7,434 +7,369 @@ msgstr "" "Project-Id-Version: ncmpc 0.11.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" -"PO-Revision-Date: 2010-07-03 16:34+0000\n" -"Last-Translator: Mathias Bøhn Grytemark <Unknown>\n" -"Language-Team: no <no@li.org>\n" -"Language: \n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" +"PO-Revision-Date: 2018-09-18 11:08+0000\n" +"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n" +"Language-Team: Norwegian BokmÃ¥l <https://hosted.weblate.org/projects/ncmpc/" +"translations/nb/>\n" +"Language: nb\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=ISO-8859-1\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.2-dev\n" "X-Launchpad-Export-Date: 2010-07-21 05:36+0000\n" -"X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Ukjent kommando" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Alle spor" -#: src/colors.cxx:195 -#, fuzzy -msgid "Unknown color field" -msgstr "Advarsel: %s er ikke definert.\n" +#: src/AlbumListPage.cxx:144 +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminalen mangler støtte for omdefinering av farger" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Albumer fra artist: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminalen mangler støtte for farger" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, c-format +msgid "Adding '%s' to queue" +msgstr "Legger til \"%s\" i spillelisten" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Alle artister" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "%s-tasten satt til %s og %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "Sludre" -#: src/command.cxx:63 +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "Din melding" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "Meldingen kunne ikke sendes" + +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Tastaturkonfigurasjon" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Avslutt" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" -msgstr "Flytt markør opp" +msgstr "Flytt markør opp" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" -msgstr "Flytt markør ned" +msgstr "Flytt markør ned" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Flytt peker til toppen av skjermen" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" -msgstr "" +msgstr "Flytt pekeren til midten av skjermen" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" -msgstr "" +msgstr "Flytt pekeren til bunnen av skjermen" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" -msgstr "" +msgstr "Flytt pekeren til toppen av listen" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" -msgstr "" +msgstr "Flytt pekeren til bunnen av listen" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" -msgstr "Markøren en side opp" +msgstr "Markøren en side opp" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" -msgstr "Markøren en side ned" +msgstr "Markøren en side ned" -#: src/command.cxx:88 +#: src/Command.cxx:54 +#, fuzzy msgid "Range selection" -msgstr "" +msgstr "OmrÃ¥devalg" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" -msgstr "" +msgstr "Rull nedover én linje" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" -msgstr "" +msgstr "Rull oppover én linje" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" -msgstr "" +msgstr "Rull oppover en halv skjerm" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" -msgstr "" +msgstr "Rull nedover en halv skjerm" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" -msgstr "" +msgstr "Velg sangen som spilles" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Hjelp" -#: src/command.cxx:105 src/screen_help.cxx:119 -#, fuzzy +#: src/Command.cxx:71 src/HelpPage.cxx:140 msgid "Queue screen" -msgstr "Hjelp" +msgstr "Køskjerm" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Filer" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Spill/Velg mappe" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pause" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stopp" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" -msgstr "" +msgstr "Beskjær" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Neste" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Forrige" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" -msgstr "Spol/Søk framover" +msgstr "Blafre forover" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" -msgstr "Spol/Søk tilbake" +msgstr "Blafre bakover" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" -msgstr "Øk volumet" +msgstr "Ãk volumet" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Demp volumet" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" -msgstr "Legg til/Fjern fra spillelisten" +msgstr "Velg/fravelg i spillelisten" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Velg alle i listen" -#: src/command.cxx:136 -#, fuzzy +#: src/Command.cxx:102 msgid "Delete song from queue" -msgstr "Ta bort/slett" +msgstr "Fjern sang fra kø" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" -msgstr "" +msgstr "Stokk om kø" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" -msgstr "" +msgstr "Tøm kø" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" -msgstr "Repeat På/Av" +msgstr "Repeat PÃ¥/Av" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" -msgstr "Random På/Av" +msgstr "Random PÃ¥/Av" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" -msgstr "" +msgstr "Veksle enkelt modus" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" -msgstr "" +msgstr "Veksle konsumentmodus" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" -msgstr "Crossfade På/Av" +msgstr "Crossfade PÃ¥/Av" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Oppdater databasen" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" -msgstr "" +msgstr "Lagre kø" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Legg til URL eller fil til spillelisten" +msgid "Append song to queue" +msgstr "Legg sang til spillelisten" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" -msgstr "Gå til rotmappe" +msgstr "GÃ¥ til rotmappe" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" -msgstr "Gå ett nivå opp" +msgstr "GÃ¥ ett nivÃ¥ opp" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" -msgstr "" +msgstr "Finn sang i filutforsker" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Flytt opp" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Flytt ned" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Oppdater skjermbilde" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" -msgstr "Endre søkeinnstillinger" +msgstr "Endre søkeinnstillinger" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" -msgstr "Automatisk sentrering på/av" +msgstr "Automatisk sentrering pÃ¥/av" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Neste skjerm" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Forrige skjerm" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" -msgstr "" +msgstr "Bytt til nyligste skjerm" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" -msgstr "Søk fremover" +msgstr "Søk fremover" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" -msgstr "Søk neste (fremover)" +msgstr "Søk neste (fremover)" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" -msgstr "Søk bakover" +msgstr "Søk bakover" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" -msgstr "Søk neste (bakover)" +msgstr "Søk neste (bakover)" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" -msgstr "Gå til" +msgstr "GÃ¥ til" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Artistskjerm" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" -msgstr "Database søk" +msgstr "Database søk" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" -msgstr "Endre søkemodus" +msgstr "Endre søkemodus" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" -msgstr "" +msgstr "Vis valgt og sang som spilles nÃ¥" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" -msgstr "" +msgstr "Tekstskjerm" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Avbryt handling" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Oppdater sangtekster" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" -msgstr "" +msgstr "Rediger gjeldende element" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 +#, fuzzy msgid "Outputs screen" -msgstr "" +msgstr "Utganger" -#: src/command.cxx:248 src/screen_help.cxx:182 -#, fuzzy +#: src/Command.cxx:214 src/HelpPage.cxx:203 msgid "Chat screen" -msgstr "Neste skjerm" - -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Ikke definert" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Mellomrom" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Tilbaketast" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Del" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Opp" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Ned" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Venstrepil" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Høyrepil" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Ins" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "%s-tasten satt til %s og %s" +msgstr "Sludreskjerm" #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Feil" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" -msgstr "" +msgstr "Ord forventet" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Malformert hurtigtastdefinisjon" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Ukjent kommando" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Uferdig hurtigtastkonfigurasjon" @@ -442,817 +377,901 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Ugyldig tidsvisningstype" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Mangler '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Ugyldig fargenavn" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Uferdig fargedefinisjon" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Ugyldig tall" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Malformert fargedefinisjon" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Ukjent skjermnavn" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" -msgstr "" +msgstr "Ugyldig søkemodus" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" -msgstr "" +msgstr "Ukjent søkemodus" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Ukjent konfiurasjonsparameter" -#: src/i18n.h:42 -msgid "y" -msgstr "j" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminalen mangler støtte for omdefinering av farger" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Kan ikke slette dette elementet" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "" +#: src/FileBrowserPage.cxx:268 +#, c-format +msgid "Delete playlist %s?" +msgstr "Slett spillelisten %s?" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Avbrutt" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Kobler til %s... [Trykk %s for å avslutte]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Spillelisten slettet" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Filer" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "MPD versjon %d.%d.%d er for gammel - oppgrader til versjon %s" +msgid "Loading playlist '%s'" +msgstr "Henter spilleliste \"%s...\"" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "trykk %s for å rette" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Navigasjon" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Espen Jones https://launchpad.net/~epqr\n" -" Jon Bergli Heier https://launchpad.net/~snakebite-jvnv\n" -" Mathias Bøhn Grytemark https://launchpad.net/~mboehn\n" -" Ole R. Thorsen https://launchpad.net/~ole-rth\n" -" Niels Anker https://launchpad.net/~nanker" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Global" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Start/spill markert" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Sentrer" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Velg bibliotek/Legg til spillisten og spill sang" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Erstatt '%s' [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Slett spilleliste" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Avbrutt" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Søk" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Lagret %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Legg til spillelisten og spill" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Repeter er på" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Vis tekster" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Repeter er av" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Gjen)innlast tekster" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Avbryt henting" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Last ned tekster for sangens som spilles nÃ¥" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" +msgstr "Legg til eller rediger tekster" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Lagre tekster" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Slett lagrede tekster" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Skru pÃ¥/av utgang" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Crossfade %d sekunder" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "Skriv en melding" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Databasen er oppdatert" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Tastedefinisjonsskjerm" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Søkt rundt (starter på ny)" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Rediger tastedefinisjoner for valgt kommando" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Søk normalt (til slutt/begynnelse)" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Fjern valgt tastedefinisjon" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Automatisk sentrering er på" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Legg til ny tast" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Automatisk centrering er av" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "GÃ¥ opp et nivÃ¥" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Alle spor" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Legg til og lagre endringer" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Alle artister" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Hjelp" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Albumer fra artist: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "j" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Alle spor fra artist: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Ikke definert" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Albumer fra artist: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Mellomrom" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "Henter spilleliste %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "laster..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Tilbaketast" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Henter spilleliste %s..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Del" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Legger '%s' til spillelisten" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Opp" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" -msgstr "" +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Ned" -#: src/screen_chat.cxx:177 -msgid "Your message" -msgstr "" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Venstrepil" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Høyrepil" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Hjem" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Databasen oppdateres..." +#: src/KeyName.cxx:51 +msgid "End" +msgstr "Slutt" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "oppdaterer databasen ifra %s" +#: src/KeyName.cxx:53 +#, fuzzy +msgid "PageDown" +msgstr "Page Down" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Oppdaterer databasen" +#: src/KeyName.cxx:55 +#, fuzzy +msgid "PageUp" +msgstr "Page Up" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Kan ikke slette dette elementet" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Slett spilleliste" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Spillelisten slettet" +#: src/KeyName.cxx:61 +#, fuzzy +msgid "Esc" +msgstr "Escape" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Filer" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Ins" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Søk" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "Ctrl-%c" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Søk (bakover)" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "Alt-%c" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Hopp" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "OmrÃ¥devalg avskrudd" -#: src/screen_find.cxx:82 +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "OmrÃ¥devalg pÃ¥skrudd" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Ingen sangtekst" + +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "Fant ikke '%s'" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "Sangtekst-tidsavbrudd inntraff etter %d sekunder" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Navigasjon" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Sangtekster" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Global" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "laster..." -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Start/spill markert" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "Tekstbehandler ikke satt opp" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Flytt den markerte sangen opp i spillelisten" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" +"Ãnsker du virkelig Ã¥ starte en tekstbehandler og redigere disse tekstene?" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Flytt den markerte sangen opp i spillelisten" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "Kan ikke starte tekstbehandler" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Sentrer" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "Tekstbehandleren takket for seg uventet" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Velg bibliotek/Legg til spillisten og spill sang" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Sangteksten er lagret" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Legg sang til spillelisten" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Tekster slettet" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Slett spilleliste" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Ingen lagrede tekster" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Søk" +#: src/Main.cxx:167 +#, c-format +msgid "Connecting to %s" +msgstr "Kobler til %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Legg til spillelisten og spill" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Feil: MPD-versjon %d.%d.%d er for gammel - oppgrader til versjon %s" -#: src/screen_help.cxx:162 -msgid "View Lyrics" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" msgstr "" +"Launchpad Contributions:\n" +" Espen Jones https://launchpad.net/~epqr\n" +" Jon Bergli Heier https://launchpad.net/~snakebite-jvnv\n" +" Mathias Bøhn Grytemark https://launchpad.net/~mboehn\n" +" Ole R. Thorsen https://launchpad.net/~ole-rth\n" +" Niels Anker https://launchpad.net/~nanker" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Utgang \"%s\" pÃ¥slÃ¥tt" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Utgang \"%s\" avslÃ¥tt" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Utganger" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" -msgstr "" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "Stokket om kø" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "Kø tømt" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Legg til" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "Kø" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "Kø pÃ¥ %s" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "Lagre kø som" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "" +#: src/save_playlist.cxx:107 +#, c-format +msgid "Replace %s?" +msgstr "Erstatt %s?" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Lagret %s" + +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Alle spor fra artist: %s" -#: src/screen_help.cxx:193 +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" + +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Albumløse sanger fra artist: %s" + +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artist" + +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add a keydef" -msgstr "Legg til ny tast" +msgid "Database update running" +msgstr "Databasen oppdateresâ¦" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "oppdaterer databasen ifra %s" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Oppdaterer databasen" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Hjelp" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Repeter er pÃ¥" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Feil: Skjermbildet er for lite" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Repeter er av" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Du har nye tastatursnarveier" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Tilfeldig modus er pÃ¥" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Tastatursnarveier uforandret!" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Tilfeldig modus er av" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +#, fuzzy +msgid "Single mode is on" +msgstr "Enkelt modus er pÃ¥slÃ¥tt" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Enkelt modus er avslÃ¥tt" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Konsumentmodus er pÃ¥" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Konsumentmodus er av" + +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Feil: %s - %s" +msgid "Crossfade %d seconds" +msgstr "Crossfade %d sekunder" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Databasen er oppdatert" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Søkt rundt (starter pÃ¥ ny)" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Søk normalt (til slutt/begynnelse)" + +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Automatisk sentrering er pÃ¥" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Automatisk centrering er av" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Søk" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Søk (bakover)" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Hopp" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Skrev %s" +msgid "Unable to find '%s'" +msgstr "Fant ikke '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Slettet" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Ny tast for %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 +#, fuzzy msgid "Ctrl-Space can't be used" -msgstr "" +msgstr "Ctrl+mellomrom kan ikke brukes" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Tasten %s brukes allerede for %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Satte %s = %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "==> Bruk snarveier " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "==> Bruk og Lagre snarveier " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Legg til ny tast" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "OBS! Du glemte vel ikke å legge til de nye endringene?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Endre tast" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Endre taster for '%s'" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Ingen sangtekst" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Sangtekster" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "laster..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Du har nye tastatursnarveier" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Tastatursnarveier uforandret." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Kunne ikke lagre oppsett" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Sangteksten er lagret" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "" +msgid "Wrote %s" +msgstr "Skrev %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "==> Bruk snarveier " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "==> Bruk og Lagre snarveier " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Endre tast" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Legg til" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "OBS! Du glemte vel ikke Ã¥ legge til de nye endringene?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:604 +msgid "Keys" +msgstr "Taster" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Passord" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artist" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "tittel" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "spor" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "navn" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "sjanger" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "dato" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "komponist" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" -msgstr "utøver" +msgstr "utøver" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "kommentar" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fil" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Tittel" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artist" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Filnavn" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artist + tittel" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" -msgstr "" +msgstr "Feilaktig søkeetikett %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "Trykk på %s for ett nytt søk" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Søk: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Søk: Resultater %s [%s]" +msgid "No argument for search tag %s" +msgstr "Inget argument for søkeetikett %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Trykk på %s for ett nytt søk [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Søk" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" -msgstr "Søk etter: %s" +msgstr "Søk etter: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Lengde" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" -msgstr "" +msgstr "Posisjon" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Komponist" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Navn" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Plate" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Spor" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Dato" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Sjanger" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Kommentar" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" -msgstr "" +msgstr "Sti" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitrate" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" -msgstr "" +msgstr "Format" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Antall artister" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Antall albumer" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Antall sanger" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Oppetid" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Nyeste db oppdatering" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Spilletid" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "DB spilletid" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" -msgstr "" +msgstr "Sangframviser" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD statestikk" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" -msgstr "" +msgstr "Valg sang" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" -msgstr "" +msgstr "Sang som spilles nÃ¥" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Erstatt '%s' [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Passord" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "Sang" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Spiller:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pause]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "Ukjent farge" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "Ukjent fargefelt" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminalen mangler støtte for farger" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "à r" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "Ã¥r" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "uke" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "uker" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "dag" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "dager" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volum: n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volum: %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Legg til URL eller fil til spillelisten" + +#~ msgid "Move song up" +#~ msgstr "Flytt den markerte sangen opp i spillelisten" + +#~ msgid "Move song down" +#~ msgstr "Flytt den markerte sangen opp i spillelisten" + +#~ msgid "Press %s for a new search" +#~ msgstr "Trykk pÃ¥ %s for ett nytt søk" + +#~ msgid "Search: %s" +#~ msgstr "Søk: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Søk: Resultater %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Trykk pÃ¥ %s for ett nytt søk [%s]" + +#~ msgid "F%d" +#~ msgstr "F%d" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Kobler til %s... [Trykk %s for Ã¥ avslutte]" + +#~ msgid "press %s for the key editor" +#~ msgstr "trykk %s for Ã¥ rette" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Legger til album %sâ¦" + +#~ msgid "Adding %s..." +#~ msgstr "Legger til %sâ¦" + +#, fuzzy +#~ msgid "" +#~ "connected to MPD %u.%u.%u (you need at least \n" +#~ "version 0.17.0 to use the chat feature)" +#~ msgstr "" +#~ "tilkoblet til MPD %u.%u.%u (du trenger minst \n" +#~ "versjon 0.17.0 for Ã¥ bruke sludrefunksjonen)" + +#~ msgid "Error: Screen too small" +#~ msgstr "Feil: Skjermbildet er for lite" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Feil: Kunne ikke opprette mappen ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Feil: %s - %s" + +#~ msgid "Editor exited unexpectedly (signal %d)" +#~ msgstr "Tekstbehandler takket for seg uventet (signal %d)" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Erstatt '%s' [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Slette '%s' [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Advarsel: Kjenner ikke til fargen %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Koblet til %s" - #~ msgid "Shuffled playlist" #~ msgstr "Tilfeldigjort spillelisten" @@ -1266,16 +1285,16 @@ #~ msgstr "Spilleliste" #~ msgid "Playlist on %s" -#~ msgstr "Spilleliste på %s" +#~ msgstr "Spilleliste pÃ¥ %s" #~ msgid "Playlist screen" #~ msgstr "Spilleliste" #~ msgid "Shuffle playlist" -#~ msgstr "Tilfeldiggjør spilleliste" +#~ msgstr "Tilfeldiggjør spilleliste" #~ msgid "Clear playlist" -#~ msgstr "Tøm spillelisten" +#~ msgstr "Tøm spillelisten" #~ msgid "Save playlist" #~ msgstr "Lagre spillelisten"
View file
ncmpc-0.30.tar.xz/po/ncmpc.pot -> ncmpc-0.32.tar.xz/po/ncmpc.pot
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -17,416 +17,352 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: src/colors.cxx:156 -msgid "Unknown color" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" msgstr "" -#: src/colors.cxx:195 -msgid "Unknown color field" +#: src/AlbumListPage.cxx:144 +msgid "Albums" msgstr "" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" msgstr "" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, c-format +msgid "Adding '%s' to queue" +msgstr "" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" msgstr "" -#: src/command.cxx:63 +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" + +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 msgid "Queue screen" msgstr "" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 -msgid "Add url/file to queue" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +msgid "Append song to queue" msgstr "" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 msgid "Chat screen" msgstr "" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "" - -#: src/command.cxx:292 -msgid "Space" -msgstr "" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "" - -#: src/command.cxx:300 -msgid "Up" -msgstr "" - -#: src/command.cxx:302 -msgid "Down" -msgstr "" - -#: src/command.cxx:304 -msgid "Left" -msgstr "" - -#: src/command.cxx:306 -msgid "Right" -msgstr "" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "" @@ -434,796 +370,811 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "" -#: src/i18n.h:42 -msgid "y" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" msgstr "" -#: src/i18n.h:43 -msgid "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" msgstr "" -#: src/list_window.cxx:554 -msgid "Range selection disabled" +#: src/FileBrowserPage.cxx:268 +#, c-format +msgid "Delete playlist %s?" msgstr "" -#: src/list_window.cxx:559 -msgid "Range selection enabled" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" msgstr "" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" msgstr "" -#: src/Main.cxx:182 -#, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" msgstr "" -#: src/Main.cxx:317 +#: src/FileListPage.cxx:121 #, c-format -msgid "press %s for the key editor" +msgid "Loading playlist '%s'" msgstr "" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" +#: src/HelpPage.cxx:60 +msgid "Movement" msgstr "" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" +#: src/HelpPage.cxx:105 +msgid "Global" msgstr "" -#: src/player_command.cxx:184 -msgid "Cleared queue" +#: src/HelpPage.cxx:142 +msgid "Play" msgstr "" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" +#: src/HelpPage.cxx:149 +msgid "Center" msgstr "" -#: src/save_playlist.cxx:140 -#, c-format -msgid "Replace %s?" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" msgstr "" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" msgstr "" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" +#: src/HelpPage.cxx:171 +msgid "New search" msgstr "" -#: src/screen.cxx:154 -msgid "Repeat mode is on" +#: src/HelpPage.cxx:172 +msgid "Select and play" msgstr "" -#: src/screen.cxx:155 -msgid "Repeat mode is off" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" msgstr "" -#: src/screen.cxx:159 -msgid "Random mode is on" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" msgstr "" -#: src/screen.cxx:160 -msgid "Random mode is off" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" msgstr "" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" msgstr "" -#: src/screen.cxx:170 -msgid "Single mode is off" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" msgstr "" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" msgstr "" -#: src/screen.cxx:179 -msgid "Consume mode is off" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" msgstr "" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" +#: src/HelpPage.cxx:205 +msgid "Write a message" msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" msgstr "" -#: src/screen.cxx:227 -msgid "Find mode: Normal" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" msgstr "" -#: src/screen.cxx:232 -msgid "Auto center mode: On" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" msgstr "" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" +#: src/HelpPage.cxx:214 +msgid "Add a keydef" msgstr "" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" +#: src/HelpPage.cxx:215 +msgid "Go up a level" msgstr "" -#: src/screen_artist.cxx:384 -msgid "All artists" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" msgstr "" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" msgstr "" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" +#: src/i18n.h:43 +msgid "y" msgstr "" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" +#: src/i18n.h:44 +msgid "n" msgstr "" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" +#: src/KeyName.cxx:31 +msgid "Undefined" msgstr "" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." +#: src/KeyName.cxx:33 +msgid "Space" msgstr "" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." +#: src/KeyName.cxx:35 +msgid "Enter" msgstr "" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." +#: src/KeyName.cxx:37 +msgid "Backspace" msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, c-format -msgid "Adding '%s' to queue" +#: src/KeyName.cxx:39 +msgid "Delete" msgstr "" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +#: src/KeyName.cxx:41 +msgid "Up" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:43 +msgid "Down" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/KeyName.cxx:45 +msgid "Left" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/KeyName.cxx:47 +msgid "Right" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." +#: src/KeyName.cxx:49 +msgid "Home" msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" +#: src/KeyName.cxx:51 +msgid "End" msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" +#: src/KeyName.cxx:53 +msgid "PageDown" msgstr "" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" +#: src/KeyName.cxx:55 +msgid "PageUp" msgstr "" -#: src/screen_file.cxx:207 -#, c-format -msgid "Delete playlist %s?" +#: src/KeyName.cxx:57 +msgid "Tab" msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" +#: src/KeyName.cxx:61 +msgid "Esc" msgstr "" -#: src/screen_find.cxx:29 -msgid "Find" +#: src/KeyName.cxx:63 +msgid "Insert" msgstr "" -#: src/screen_find.cxx:30 -msgid "Find backward" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" msgstr "" -#: src/screen_find.cxx:31 -msgid "Jump" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_find.cxx:82 -#, c-format -msgid "Unable to find '%s'" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" msgstr "" -#: src/screen_help.cxx:84 -msgid "Global" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" +#: src/LyricsPage.cxx:254 +#, c-format +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -msgid "Append song to queue" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" msgstr "" -#: src/screen_help.cxx:151 -msgid "Select and play" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" msgstr "" -#: src/screen_help.cxx:162 -msgid "View Lyrics" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" msgstr "" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" +#: src/Main.cxx:167 +#, c-format +msgid "Connecting to %s" msgstr "" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" +#: src/Main.cxx:187 +#, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" msgstr "" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" msgstr "" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#: src/player_command.cxx:186 +msgid "Cleared queue" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" msgstr "" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" msgstr "" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" msgstr "" -#: src/screen_help.cxx:193 -msgid "Add a keydef" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_help.cxx:194 -msgid "Go up a level" +#: src/save_playlist.cxx:107 +#, c-format +msgid "Replace %s?" msgstr "" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" msgstr "" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" msgstr "" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" msgstr "" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" msgstr "" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" msgstr "" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" +#: src/screen_client.cxx:41 +msgid "Database update running" msgstr "" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen_client.cxx:48 #, c-format -msgid "Error: %s - %s" +msgid "Database update of %s started" msgstr "" -#: src/screen_keydef.cxx:171 -#, c-format -msgid "Wrote %s" +#: src/screen_client.cxx:51 +msgid "Database update started" msgstr "" -#: src/screen_keydef.cxx:250 -msgid "Deleted" +#: src/screen.cxx:160 +msgid "Repeat mode is on" msgstr "" -#: src/screen_keydef.cxx:265 -#, c-format -msgid "Enter new key for %s: " +#: src/screen.cxx:161 +msgid "Repeat mode is off" msgstr "" -#: src/screen_keydef.cxx:276 -msgid "Ctrl-Space can't be used" +#: src/screen.cxx:165 +msgid "Random mode is on" msgstr "" -#: src/screen_keydef.cxx:282 -#, c-format -msgid "Error: key %s is already used for %s" +#: src/screen.cxx:166 +msgid "Random mode is off" msgstr "" -#: src/screen_keydef.cxx:291 +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "" + +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "" + +#: src/screen.cxx:188 #, c-format -msgid "Assigned %s to %s" +msgid "Crossfade %d seconds" msgstr "" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " +#: src/screen.cxx:200 +msgid "Database updated" msgstr "" -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" msgstr "" -#: src/screen_keydef.cxx:347 -msgid "Add new key" +#: src/screen.cxx:251 +msgid "Find mode: Normal" msgstr "" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" +#: src/screen.cxx:256 +msgid "Auto center mode: On" msgstr "" -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" msgstr "" -#: src/screen_keydef.cxx:419 -#, c-format -msgid "Edit keys for %s" +#: src/screen_find.cxx:31 +msgid "Find" msgstr "" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" +#: src/screen_find.cxx:32 +msgid "Find backward" msgstr "" -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" +#: src/screen_find.cxx:33 +msgid "Jump" msgstr "" -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" +#: src/screen_find.cxx:79 +#, c-format +msgid "Unable to find '%s'" msgstr "" -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." +#: src/screen_keydef.cxx:161 +msgid "Deleted" msgstr "" -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" +#: src/screen_keydef.cxx:177 +#, c-format +msgid "Enter new key for %s: " msgstr "" -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" +#: src/screen_keydef.cxx:187 +msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" +#: src/screen_keydef.cxx:193 +#, c-format +msgid "Error: key %s is already used for %s" msgstr "" -#: src/screen_lyrics.cxx:411 +#: src/screen_keydef.cxx:202 #, c-format -msgid "Editor exited unexpectedly (%d)" +msgid "Assigned %s to %s" +msgstr "" + +#: src/screen_keydef.cxx:229 +msgid "Add new key" msgstr "" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:251 #, c-format -msgid "Editor exited unexpectedly (signal %d)" +msgid "Edit keys for %s" msgstr "" -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" msgstr "" -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." msgstr "" -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" +#: src/screen_keydef.cxx:405 +msgid "Unable to write configuration" msgstr "" -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" +msgid "Wrote %s" msgstr "" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " msgstr "" -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " msgstr "" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" msgstr "" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" +msgid "No argument for search tag %s" msgstr "" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" msgstr "" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, c-format -msgid "%s [%s/%s] " -msgstr "" - -#: src/screen_utils.cxx:121 -msgid "Password" +#: src/SongPage.cxx:554 +msgid "Song" msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr ""
View file
ncmpc-0.30.tar.xz/po/nl.po -> ncmpc-0.32.tar.xz/po/nl.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-02-24 11:17+0000\n" "Last-Translator: Tom Postma <tom-postma@hetnet.nl>\n" "Language-Team: Dutch <nl@li.org>\n" @@ -18,1224 +18,1202 @@ "X-Launchpad-Export-Date: 2010-04-05 17:16+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -msgid "Unknown color" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Alle nummers" + +#: src/AlbumListPage.cxx:144 +#, fuzzy +msgid "Albums" +msgstr "Album" + +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Albums van artiest: %s" + +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Toevoegen '%s' aan afspeellijst" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Alle artiesten" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" msgstr "" -#: src/colors.cxx:195 -msgid "Unknown color field" +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" msgstr "" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" +#: src/ChatPage.cxx:160 +msgid "Your message" msgstr "" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 msgid "Queue screen" msgstr "" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 -msgid "Add url/file to queue" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +msgid "Append song to queue" msgstr "" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 msgid "Chat screen" msgstr "" -#: src/command.cxx:290 -msgid "Undefined" +#. To translators: prefix for error messages +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 +msgid "Error" msgstr "" -#: src/command.cxx:292 -msgid "Space" +#: src/conf.cxx:128 +msgid "Word expected" msgstr "" -#: src/command.cxx:294 -msgid "Enter" +#: src/conf.cxx:145 src/conf.cxx:154 +msgid "Malformed hotkey definition" msgstr "" -#: src/command.cxx:296 -msgid "Backspace" +#. the hotkey configuration contains an unknown +#. command +#: src/conf.cxx:178 +msgid "Unknown command" msgstr "" -#: src/command.cxx:298 -msgid "Delete" +#. the hotkey configuration line is incomplete +#: src/conf.cxx:191 +msgid "Incomplete hotkey configuration" msgstr "" -#: src/command.cxx:300 -msgid "Up" +#. translators: ncmpc supports displaying the +#. "elapsed" or "remaining" time of a song being +#. played; in this case, the configuration file +#. contained an invalid setting +#: src/conf.cxx:227 +msgid "Bad time display type" msgstr "" -#: src/command.cxx:302 -msgid "Down" +#. an equals sign '=' was expected while parsing a +#. configuration file line +#: src/conf.cxx:240 src/conf.cxx:418 +msgid "Missing '='" msgstr "" -#: src/command.cxx:304 -msgid "Left" +#: src/conf.cxx:291 +msgid "Bad color name" msgstr "" -#: src/command.cxx:306 -msgid "Right" +#: src/conf.cxx:301 +msgid "Incomplete color definition" msgstr "" -#: src/command.cxx:308 -msgid "Home" +#: src/conf.cxx:307 +msgid "Invalid number" msgstr "" -#: src/command.cxx:310 -msgid "End" +#: src/conf.cxx:315 +msgid "Malformed color definition" msgstr "" -#: src/command.cxx:312 -msgid "PageDown" +#. an unknown screen name was specified in the +#. configuration file +#: src/conf.cxx:353 +msgid "Unknown screen name" msgstr "" -#: src/command.cxx:314 -msgid "PageUp" +#: src/conf.cxx:378 +msgid "Invalid search mode" msgstr "" -#: src/command.cxx:316 -msgid "Tab" +#: src/conf.cxx:398 +msgid "Unknown search mode" msgstr "" -#: src/command.cxx:318 -msgid "Shift+Tab" +#: src/conf.cxx:581 +msgid "Unknown configuration parameter" msgstr "" -#: src/command.cxx:320 -msgid "Esc" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" msgstr "" -#: src/command.cxx:322 -msgid "Insert" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" msgstr "" -#: src/command.cxx:326 -#, c-format -msgid "F%d" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Afspeellijst verwijderen" + +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Afgebroken" + +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" msgstr "" -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Blader" + +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Laden afspeellijst %s..." + +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Beweging" + +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Algemeen" + +#: src/HelpPage.cxx:142 +msgid "Play" msgstr "" -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" +#: src/HelpPage.cxx:149 +msgid "Center" msgstr "" -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" msgstr "" -#. To translators: prefix for error messages -#: src/conf.cxx:121 -msgid "Error" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Afspeellijst verwijderen" + +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Zoeken" + +#: src/HelpPage.cxx:172 +msgid "Select and play" msgstr "" -#: src/conf.cxx:135 -msgid "Word expected" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 -msgid "Malformed hotkey definition" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" msgstr "" -#. the hotkey configuration contains an unknown -#. command -#: src/conf.cxx:185 -msgid "Unknown command" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" msgstr "" -#. the hotkey configuration line is incomplete -#: src/conf.cxx:198 -msgid "Incomplete hotkey configuration" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" msgstr "" -#. translators: ncmpc supports displaying the -#. "elapsed" or "remaining" time of a song being -#. played; in this case, the configuration file -#. contained an invalid setting -#: src/conf.cxx:234 -msgid "Bad time display type" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" msgstr "" -#. an equals sign '=' was expected while parsing a -#. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 -msgid "Missing '='" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" msgstr "" -#: src/conf.cxx:298 -msgid "Bad color name" +#: src/HelpPage.cxx:191 +#, fuzzy +msgid "Delete saved lyrics" +msgstr "Afspeellijst verwijderen" + +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" msgstr "" -#: src/conf.cxx:308 -msgid "Incomplete color definition" +#: src/HelpPage.cxx:205 +msgid "Write a message" msgstr "" -#: src/conf.cxx:314 -msgid "Invalid number" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" msgstr "" -#: src/conf.cxx:322 -msgid "Malformed color definition" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" msgstr "" -#. an unknown screen name was specified in the -#. configuration file -#: src/conf.cxx:356 -msgid "Unknown screen name" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" msgstr "" -#: src/conf.cxx:384 -msgid "Invalid search mode" +#: src/HelpPage.cxx:214 +msgid "Add a keydef" msgstr "" -#: src/conf.cxx:407 -msgid "Unknown search mode" +#: src/HelpPage.cxx:215 +msgid "Go up a level" msgstr "" -#: src/conf.cxx:597 -msgid "Unknown configuration parameter" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" msgstr "" -#: src/i18n.h:42 +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Documentatie" + +#: src/i18n.h:43 msgid "y" msgstr "j" -#: src/i18n.h:43 +#: src/i18n.h:44 msgid "n" msgstr "n" -#: src/list_window.cxx:554 -msgid "Range selection disabled" +#: src/KeyName.cxx:31 +msgid "Undefined" msgstr "" -#: src/list_window.cxx:559 -msgid "Range selection enabled" +#: src/KeyName.cxx:33 +msgid "Space" msgstr "" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Verbind met %s... [druk %s om af te breken]" - -#: src/Main.cxx:182 -#, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +#: src/KeyName.cxx:35 +msgid "Enter" msgstr "" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" +#: src/KeyName.cxx:37 +msgid "Backspace" msgstr "" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" +#: src/KeyName.cxx:39 +msgid "Delete" msgstr "" -"Launchpad Contributions:\n" -" Hipska https://launchpad.net/~hipska\n" -" Tom Postma https://launchpad.net/~bluegen89" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" +#: src/KeyName.cxx:41 +msgid "Up" msgstr "" -#: src/player_command.cxx:184 -msgid "Cleared queue" +#: src/KeyName.cxx:43 +msgid "Down" msgstr "" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" +#: src/KeyName.cxx:45 +msgid "Left" msgstr "" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Vervang %s [%s/%s] ? " - -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Afgebroken" - -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Opgeslagen %s" +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Herhaling modus aan" +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Herhaling modus uit" +#: src/KeyName.cxx:51 +msgid "End" +msgstr "" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Willekeurige modus is aan" +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Willekeurige modus is uit" +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" +#: src/KeyName.cxx:57 +msgid "Tab" msgstr "" -#: src/screen.cxx:170 -msgid "Single mode is off" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" msgstr "" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" +#: src/KeyName.cxx:61 +msgid "Esc" msgstr "" -#: src/screen.cxx:179 -msgid "Consume mode is off" +#: src/KeyName.cxx:63 +msgid "Insert" msgstr "" -#: src/screen.cxx:182 +#: src/KeyName.cxx:71 #, c-format -msgid "Crossfade %d seconds" +msgid "Ctrl-%c" msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Database bijgewerkt" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" msgstr "" -#: src/screen.cxx:227 -msgid "Find mode: Normal" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" msgstr "" -#: src/screen.cxx:232 -msgid "Auto center mode: On" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" msgstr "" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "" - -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Alle nummers" - -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Alle artiesten" - -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Albums van artiest: %s" - -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Alle nummers van artiest: %s" - -#: src/screen_artist.cxx:401 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" - -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Albums van artiest: %s" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "Laden afspeellijst %s..." +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Songteksten" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." msgstr "laden..." -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Laden afspeellijst %s..." - -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Toevoegen '%s' aan afspeellijst" - -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Update database draait..." - -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Database update van %s begonnen" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Database update begonnen" +#: src/LyricsPage.cxx:445 +#, fuzzy +msgid "Lyrics deleted" +msgstr "Songteksten" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" msgstr "" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Afspeellijst verwijderen" +msgid "Connecting to %s" +msgstr "Verbonden met %s" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/Main.cxx:187 +#, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Blader" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Vind" - -#: src/screen_find.cxx:30 -msgid "Find backward" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" msgstr "" +"Launchpad Contributions:\n" +" Hipska https://launchpad.net/~hipska\n" +" Tom Postma https://launchpad.net/~bluegen89" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Spring" - -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:87 #, c-format -msgid "Unable to find '%s'" -msgstr "Niet mogelijk '%s' te vinden" +msgid "Output '%s' enabled" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Beweging" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Algemeen" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Uitvoerapparaten" -#: src/screen_help.cxx:121 -msgid "Play" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" +#: src/player_command.cxx:186 +msgid "Cleared queue" msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Voeg toe" -#: src/screen_help.cxx:128 -msgid "Center" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -msgid "Append song to queue" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Afspeellijst verwijderen" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Vervang %s [%s/%s] ? " -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Zoeken" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Opgeslagen %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Alle nummers van artiest: %s" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "" +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Albums van artiest: %s" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artiest" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Update database draait..." -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" -msgstr "" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Database update van %s begonnen" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Database update begonnen" -#: src/screen_help.cxx:170 -#, fuzzy -msgid "Delete saved lyrics" -msgstr "Afspeellijst verwijderen" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Herhaling modus aan" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Herhaling modus uit" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Willekeurige modus is aan" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Willekeurige modus is uit" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" msgstr "" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" +#: src/screen.cxx:176 +msgid "Single mode is off" msgstr "" -#: src/screen_help.cxx:193 -msgid "Add a keydef" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" msgstr "" -#: src/screen_help.cxx:194 -msgid "Go up a level" +#: src/screen.cxx:185 +msgid "Consume mode is off" msgstr "" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" msgstr "" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Documentatie" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Database bijgewerkt" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Fout: Scherm te klein" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" +#: src/screen.cxx:251 +msgid "Find mode: Normal" msgstr "" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." +#: src/screen.cxx:256 +msgid "Auto center mode: On" msgstr "" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" msgstr "" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Fout: %s - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Vind" -#: src/screen_keydef.cxx:171 -#, c-format -msgid "Wrote %s" +#: src/screen_find.cxx:32 +msgid "Find backward" msgstr "" -#: src/screen_keydef.cxx:250 +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Spring" + +#: src/screen_find.cxx:79 +#, c-format +msgid "Unable to find '%s'" +msgstr "Niet mogelijk '%s' te vinden" + +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Verwijderd" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "" -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "" - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "" - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Songteksten" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "laden..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" msgstr "" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." msgstr "" -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" +#: src/screen_keydef.cxx:405 +msgid "Unable to write configuration" msgstr "" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" +msgid "Wrote %s" msgstr "" -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " msgstr "" -#: src/screen_lyrics.cxx:443 -#, fuzzy -msgid "Lyrics deleted" -msgstr "Songteksten" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " msgstr "" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" msgstr "" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" msgstr "" -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Uitvoerapparaten" - -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Voeg toe" - -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Wachtwoord" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artiest" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titel" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "nummer" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "naam" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "datum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "componist" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "uitvoerder" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "opmerking" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "bestand" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titel" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artiest" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Bestandsnaam" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artiest + Titel" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" +msgid "No argument for search tag %s" msgstr "" -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Zoeken: Resultaten voor %s [%s]" - -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Zoeken" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Componist" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Naam" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Schijf" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Nummer" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Datum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Genre" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Opmerking" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Locatie" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitsnelheid" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Aantal artiesten" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Aantal albums" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Aantal nummers" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Vervang %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Wachtwoord" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Speelt:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volume n/b" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" -#~ msgid "Connected to %s" -#~ msgstr "Verbonden met %s" +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Zoeken: Resultaten voor %s [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Verbind met %s... [druk %s om af te breken]" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "Laden afspeellijst %s..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "laden..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Fout: Scherm te klein" + +#~ msgid "Error: %s - %s" +#~ msgstr "Fout: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Vervang %s [%s/%s] ? " #~ msgid "Save playlist as" #~ msgstr "Afspeellijst opslaan als"
View file
ncmpc-0.30.tar.xz/po/pl.po -> ncmpc-0.32.tar.xz/po/pl.po
Changed
@@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: ncmpc 0.19\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-07-23 21:08+0200\n" "Last-Translator: <krzysztof.krakowiak@gmail.com>\n" "Language-Team: Polish\n" @@ -19,423 +19,358 @@ "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2);\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Nieznane polecenie" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Wszystkie ścieżki" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Ostrzeżenie: Nieznany kolor pola - %s\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminal nie obsługuje zmiany kolorów" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Albumy artysty: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminal nie obsługuje kolorów" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Dodawanie '%s' do listy odtwarzania" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Wszyscy artyści" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Klawisz %s przypisany do %s oraz %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Ekran konfiguracji klawiszy" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Wyjdź" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Przesuń kursor w górę" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Przesuń kursor w dół" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Przesuń kursor na początek ekranu" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Przesuń kursor na środek ekranu" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Przesuń kursor na koniec ekranu" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Przesuń kursor na początek listy" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Przesuń kursor na koniec listy" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Przesuń o stronę do góry" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Przesuń o stronę w dół" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Wybór zakresu" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Przesuń o linijkę w dół" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Przesuń o linijkę do góry" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Przesuń o pół ekranu do góry" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Przesuń o pół ekranu w dół" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Zaznacz obecnie odtwarzaną piosenkę" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Ekran pomocy" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Ekran definicji klawiszy" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Ekran przeglądania" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Odtwarzaj/Przejdź do katalogu" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Wstrzymanie" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Zatrzymanie" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Przycięcie" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Następna ścieżka" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Poprzednia ściężka" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Przewiń naprzód" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Przewiń wstecz" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Zgłośnij" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Przycisz" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Zaznacz/odznacz piosenkę na liście odtwarzania" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Zazczacz wszystkie wylistowane pozycje" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Usuń piosenkę z listy odtwarzania" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Przełącz tryb powtarzania" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Przełącz tryb losowy" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Przełącz tryb pojedynczej piosenki" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Przełącz tryb pożerania" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Przełącz tryb przenikania" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Włącz aktualizacje bazy piosenek" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Dodaj url/plik do playlisty" +msgid "Append song to queue" +msgstr "Dodaj piosenkę do listy odtwarzania" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Przejdź do katalogu głównego" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Przejdź do nadrzędnego katalogu" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Zlokalizuj piosenkę w przeglądarce" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Przesuń element w górę" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Przesuń element w dół" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Odświerz ekran" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Przełącz tryb wyszukiwania" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Przełącz tryb automatycznego centrowania" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Następny ekran" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Poprzedni ekran" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Przełącz do najbardziej aktualnego ekranu" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Wyszukaj naprzód" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Znajdź następne" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Wyszukaj wstecz" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Znajdź poprzednie" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Skocz do" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Ekran artysty" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Ekran wyszukiwania" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Zmień tryb wyszukiwania" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Zobacz zaznaczone i obecnie odtwarzaną piosenkę" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Ekran z tekstem piosenki" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Przerwij zadanie" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Zaktualizuj tekst piosenki" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Ekran z wyjściami dźwiękowymi" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Następny ekran" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Niezdefiniowany" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Spacja" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Góra" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Dół" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Lewo" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Prawo" - -#: src/command.cxx:308 -msgid "Home" -msgstr "" - -#: src/command.cxx:310 -msgid "End" -msgstr "" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Klawisz %s przypisany do %s oraz %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Błąd" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Nieprawidłowa definicja skrótu klaiwszowego" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Nieznane polecenie" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Niekompletna konfiguracja skrótów klawiszowych" @@ -443,812 +378,878 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Nieprawidłowy tryb wyświetlania czasu" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Brakujący '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Zła nazwa koloru" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Niekompletna definicja koloru" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Nieprawidłowy numer" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Nieprawidłowa definicja koloru" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Nieznana nazwa ekranu" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Nieprawidłowy tryb wyszukiwania" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Nieznany tryb wyszukiwania" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Nieznany parametr konfiguracyjny" -#: src/i18n.h:42 -msgid "y" -msgstr "t" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminal nie obsługuje zmiany kolorów" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Usunięcie tego elementu nie jest możliwe" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Wielozaznaczanie wyłączone" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Usuń listę odtwarzania" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Wielozaznaczanie włączone" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Anulowano" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Łączenie z %s... [Wciśnij %s by anulować]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Lista odtwarzania usunięta" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Przeglądaj" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Błąd: MPD w wersji %d.%d.%d jest za stary (potrzebny jest %s)" +msgid "Loading playlist '%s'" +msgstr "Ładowany listy odtwarzania %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "wciśnij %s by odpalić edytor klawiszy" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Poruszanie" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globalne" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Odtwarzaj" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Wycentruj" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Podaj katalog/Wybierz i odtwarzaj piosenkę" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Zamień %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Usuń listę odtwarzania" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Anulowano" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Znajdź" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Zapisano %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Wybierz i odtwarzaj" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Tryb powtarzania jest włączony" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Zobacz teskt piosenki" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Tryb powtarzania jest wyłączony" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Prze)ładuj tekst" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Tryb losowy jest włączony" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Przerwij pobieranie" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Tryb losowy jest wyłączony" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Sćiagnij słowa dla obecnie odtwarzanej piosenki" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Tryb pojedynczej piosenki jest włączony" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Brak zapisanego tesktu piosenki" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Tryb pojedynczej piosenki jest wyłączony" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Zapisz tekst piosenku" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Tryb pożerania jest włączony" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Usuń zapisany tekst piosenki" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Tryb pożerania jest wyłączony" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Włącz/wyłącz wyjście" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Przenikaj %d sekund" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Baza zaktualizowana" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Ekran definicji klawiszy" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Tryb wyszukiwania: Zawinięty" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Edytuj definicje klawiszy dla wybranego polecenia" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Tryb wyszukiwania: Normalny" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Usuń wybraną definicję klawiszy" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Tryb automatycznego centrowania: Włączony" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Dodaj nowy klawisz" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Tryb automatycznego centrowania: Wyłączony" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Idź poziom wyżej" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Wszystkie ścieżki" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Zastosuj i zapisz zmiany" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Wszyscy artyści" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Pomoc" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Albumy artysty: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "t" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Wszystkie piosenki artysty: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Albumy: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Niezdefiniowany" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Ścieżki bez albumów lub artystów: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Spacja" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Dodawanie albumu %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." -msgstr "Dodawanie %s..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Ładowany listy odtwarzania %s..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Dodawanie '%s' do listy odtwarzania" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Góra" -#: src/screen_chat.cxx:59 -#, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" -msgstr "" +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Dół" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Lewo" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Prawo" + +#: src/KeyName.cxx:49 +msgid "Home" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/KeyName.cxx:51 +msgid "End" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/KeyName.cxx:53 +msgid "PageDown" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Aktualizacja bazy w toku..." +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Aktualizacja bazy %s rozpoczęta" +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Aktualizacja bazy rozpoczęta" +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Usunięcie tego elementu nie jest możliwe" +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "" -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Usuń listę odtwarzania" +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Lista odtwarzania usunięta" +#: src/KeyName.cxx:71 +#, c-format +msgid "Ctrl-%c" +msgstr "" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Przeglądaj" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Znajdź" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Wielozaznaczanie wyłączone" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Znajdź wstecz" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Wielozaznaczanie włączone" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Skocz" +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Brak tekstu piosenki" -#: src/screen_find.cxx:82 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Unable to find '%s'" -msgstr "Nie można znaleźć '%s'" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Poruszanie" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Teskt piosenki" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globalne" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "ładowanie..." -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Odtwarzaj" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Przesuń piosenkę w gorę" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Przesuń piosenkę w dół" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Wycentruj" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Podaj katalog/Wybierz i odtwarzaj piosenkę" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Tekst piosenki zapisany" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Dodaj piosenkę do listy odtwarzania" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Teskt piosenki usunięty" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Usuń listę odtwarzania" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Brak zapisanego tesktu piosenki" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Znajdź" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Połączony z %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Wybierz i odtwarzaj" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Błąd: MPD w wersji %d.%d.%d jest za stary (potrzebny jest %s)" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Zobacz teskt piosenki" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Prze)ładuj tekst" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Wyjście '%s' włączone" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Przerwij pobieranie" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Wyjście '%s' wyłączone" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Sćiagnij słowa dla obecnie odtwarzanej piosenki" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Wyjścia" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Brak zapisanego tesktu piosenki" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Zapisz tekst piosenku" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Usuń zapisany tekst piosenki" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Dodaj" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Włącz/wyłącz wyjście" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:184 -msgid "Write a message" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" msgstr "" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Ekran definicji klawiszy" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Edytuj definicje klawiszy dla wybranego polecenia" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Zamień %s [%s/%s] ? " -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Usuń wybraną definicję klawiszy" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Zapisano %s" + +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Wszystkie piosenki artysty: %s" -#: src/screen_help.cxx:193 +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" + +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Ścieżki bez albumów lub artystów: %s" + +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artysta" + +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add a keydef" -msgstr "Dodaj nowy klawisz" +msgid "Database update running" +msgstr "Aktualizacja bazy w toku..." -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Idź poziom wyżej" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Aktualizacja bazy %s rozpoczęta" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Zastosuj i zapisz zmiany" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Aktualizacja bazy rozpoczęta" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Pomoc" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Tryb powtarzania jest włączony" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Błąd: Ekran za mały" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Tryb powtarzania jest wyłączony" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Masz nowe wiązania klawiszy" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Tryb losowy jest włączony" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Wiązania klawiszy niezmienione." +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Tryb losowy jest wyłączony" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Błąd: Nie można stworzyć katalogu ~/.ncmpc -%s" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Tryb pojedynczej piosenki jest włączony" + +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Tryb pojedynczej piosenki jest wyłączony" + +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Tryb pożerania jest włączony" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Tryb pożerania jest wyłączony" + +#: src/screen.cxx:188 #, c-format -msgid "Error: %s - %s" -msgstr "Błąd: %s - %s" +msgid "Crossfade %d seconds" +msgstr "Przenikaj %d sekund" + +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Baza zaktualizowana" + +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Tryb wyszukiwania: Zawinięty" + +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Tryb wyszukiwania: Normalny" -#: src/screen_keydef.cxx:171 +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Tryb automatycznego centrowania: Włączony" + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Tryb automatycznego centrowania: Wyłączony" + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Znajdź" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Znajdź wstecz" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Skocz" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Zapisano %s" +msgid "Unable to find '%s'" +msgstr "Nie można znaleźć '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Usunięto" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Podaj nowy skrót dla %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Błąd: klawisz %s już jest używany do %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Przypisano klawisz %s do %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Zastosuj wiązania klawiszy " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Zastosuj i Zapisz wiązania klawiszy " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Dodaj nowy klawisz" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Informacja: Zapomniałeś 'Zastosować' swoje zmiany?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Edytuj wiązania klawiszy" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Edytuj klawisze dla %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Brak tekstu piosenki" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Teskt piosenki" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "ładowanie..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Masz nowe wiązania klawiszy" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Wiązania klawiszy niezmienione." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Niekompletna konfiguracja skrótów klawiszowych" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Tekst piosenki zapisany" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Teskt piosenki usunięty" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Brak zapisanego tesktu piosenki" +msgid "Wrote %s" +msgstr "Zapisano %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Wyjście '%s' włączone" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Zastosuj wiązania klawiszy " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Wyjście '%s' wyłączone" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Zastosuj i Zapisz wiązania klawiszy " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Wyjścia" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Edytuj wiązania klawiszy" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Dodaj" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Informacja: Zapomniałeś 'Zastosować' swoje zmiany?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Hasło" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artysta" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "tutuł" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "ściezka" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nazwa" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "rodzaj" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "data" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "kompozytor" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "wykonawca" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "komentarz" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "plik" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Tytuł" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artysta" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nazwa pliku" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artysta + Tytuł" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Brak argumentu przy wyszukiwaniu znacznika %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Nieprawidłowy wyszukiwany znacznik %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Wciśnij %s by rozpocząć nowe wyszukiwanie" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Znajdź: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Znajdź: Wyniki dla %s [%s]" +msgid "No argument for search tag %s" +msgstr "Brak argumentu przy wyszukiwaniu znacznika %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Znajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Znajdź" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Tryb szukania: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Długość" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Kompozytor" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nazwa" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Dysk" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Ścieżka" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Data" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Rodzaj" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Komentarz" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Ścieżka" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Przepływność bitowa" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Ilość artystów" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Ilość albumów" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Ilość piosenek" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Ostatnia aktualizacja bazy" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Czas odtwarzania" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "czas odtwarzania w bazie" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Przeglądarka piosenek" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "statystyki MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Wybrana piosenka" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Obecnie odtwarzana piosenka" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Zamień %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Hasło" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Odtwarzanie:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pauza]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Nieznane polecenie" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Ostrzeżenie: Nieznany kolor pola - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminal nie obsługuje kolorów" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Głośność: b/d" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Głóśność %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Dodaj url/plik do playlisty" + +#~ msgid "Move song up" +#~ msgstr "Przesuń piosenkę w gorę" + +#~ msgid "Move song down" +#~ msgstr "Przesuń piosenkę w dół" + +#~ msgid "Press %s for a new search" +#~ msgstr "Wciśnij %s by rozpocząć nowe wyszukiwanie" + +#~ msgid "Search: %s" +#~ msgstr "Znajdź: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Znajdź: Wyniki dla %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Znajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Łączenie z %s... [Wciśnij %s by anulować]" + +#~ msgid "press %s for the key editor" +#~ msgstr "wciśnij %s by odpalić edytor klawiszy" + +#~ msgid "Album: %s - %s" +#~ msgstr "Albumy: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Dodawanie albumu %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Dodawanie %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Błąd: Ekran za mały" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Błąd: Nie można stworzyć katalogu ~/.ncmpc -%s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Błąd: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Zamień %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Usuń listę odtwarzania %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Ostrzeżenie: Nieznany kolor - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Połączony z %s" - #~ msgid "Shuffled playlist" #~ msgstr "Przetasowano listę odtwarzania"
View file
ncmpc-0.30.tar.xz/po/pt_BR.po -> ncmpc-0.32.tar.xz/po/pt_BR.po
Changed
@@ -2,7 +2,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-12-19 01:05+0000\n" "Last-Translator: Jamerson Albuquerque Tiossi <jamersontiossi@yahoo.com.br>\n" "Language-Team: \n" @@ -16,423 +16,358 @@ "X-Poedit-Language: Portuguese\n" "X-Poedit-SourceCharset: utf-8\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Comando desconhecido" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Todas as faixas" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Aviso: Campo de cor desconhecido - %s\n" +msgid "Albums" +msgstr "Álbum" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminal não tem suporte para mudar cores" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Álbuns do artista: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminal não tem capacidade para trabalhar com cores" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Adicionando '%s' á Lista de Reprodução" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Todos os artistas" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Tecla %s definida para %s e %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Tela de configuração de teclas" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Sair" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Mover cursor para cima" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Mover cursor para baixo" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Mover cursor para o topo da tela" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Mover cursor para o meio da tela" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Mover cursor para o final da tela" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Mover cursor para o topo da lista" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Mover cursor para o final da lista" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Sobe uma página" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Desce uma página" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Seleção de Intervalo" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Descer uma linha" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Subir uma linha" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Subir meia tela" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Descer meia tela" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Selecionar faixa atualmente em reprodução" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Tela de Ajuda" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Tela de definição de teclas" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Tela de Navegação" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Reproduzir/Adentrar diretório" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pause" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Parar" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Cortar" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Próxima faixa" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Faixa anterior" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Correr para frente" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Correr para trás" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Aumentar volume" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Abaixar volume" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Selecionar/De-selecionar trilha na Lista de Reprodução" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Selecionar todos os itens listados" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Deletar faixa da lista de reprodução" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Liga/Desliga modo de repetição" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Liga/Desliga modo aleatório" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Liga/Desliga modo de única reprodução" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Liga/Desliga modo de deleção de faixa reproduzida" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Liga/Desliga inter-mixagem" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Iniciar a atualização do banco de dados de faixas" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Adicionar URL/arquivo à lista de reprodução" +msgid "Append song to queue" +msgstr "Adicionar trilha à Lista de Reprodução" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Ir para raiz" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Ir para diretório pai" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Localizar musica no navegador" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Mover item para cima" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Mover item para baixo" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Redesenhar tela" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Liga/Desliga modo de procura" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Liga/Desliga modo de centralização automática" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Próxima tela" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Tela anterior" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Troca para a tela mais recente" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Pesquisa para frente" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Pesquisa para a frente - próximo" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Pesquisa para trás" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Pesquisa para trás - anterior" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Pular para" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Tela de artista" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Tela de pesquisa" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Mudar modo de pesquisa" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Ver a trilha selecionada e a em atual reprodução" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Tela de Letra de Música" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Interromper ação" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Atualizar letra de música" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Tela de Saídas" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Próxima tela" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Não-definido" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Espaço" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Cima" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Baixo" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Esquerda" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Direita" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Tecla %s definida para %s e %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Erro" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Definição de tecla de atalho malformada" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Comando desconhecido" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Configuração de teclas de atalho incompleta" @@ -440,820 +375,886 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Tipo de visualização de tempo ruim" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Falta '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Nome de cor ruim" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Definição de cor incompleta" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Número inválido" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Definição de cor malformada" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Nome de tela desconhecido" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Modo de pesquisa inválido" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Modo de pesquisa desconhecido" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Parâmetro de configuração desconhecido" -#: src/i18n.h:42 -msgid "y" -msgstr "y (sim)" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminal não tem suporte para mudar cores" -#: src/i18n.h:43 -msgid "n" -msgstr "n (não)" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Deletar este item não é possível" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Seleção de intervalo desabilitada" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Deletar Lista de Reprodução" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Seleção de intervalo habilitada" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Abortado" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Conectando a %s... [Pressione %s para abortar]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Lista de Reprodução deletada" -#: src/Main.cxx:182 -#, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Erro: Versão do MPD %d.%d.%d é muito antiga (necessária %s)" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Navegar" -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "press %s para o editor de teclas" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Carregando Lista de Reprodução %s..." -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Traduzido por Carlos Eduardo C. B. Shinagawa <cadu.coelho at gmail.com>\n" -"\n" -"Launchpad Contributions:\n" -" Cadu https://launchpad.net/~cadu-coelho\n" -" Guilherme Lindner https://launchpad.net/~gui666\n" -" Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi\n" -" Max Kellermann https://launchpad.net/~max-duempel\n" -" Osni Leandro https://launchpad.net/~osni" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Movimento" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Global" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Reproduzir" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centralizar" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Substituir %s [%s/%s] ? " +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Adentrar diretório/Selecionar e reproduzir trilha" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Abortado" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Deletar Lista de Reprodução" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s salvo" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Pesquisa" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Modo de Repetição está ligado" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Selecionar e reproduzir" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Modo de Repetição está desligado" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Ver Letra de Música" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Modo Aleatório está ligado" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Re)Carregar letra de música" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Modo Aleatório está desligado" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Interromper busca" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Modo de Faixa Única está ligado" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Baixar letra de música da faixa em reprodução" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Modo de Faixa Única está desligado" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Sem letras salvas" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Modo de Deleção de Faixa Reproduzida está ligado" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Salvar letra de música." -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Modo de Deleção de Faixa Reproduzida está desligado" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Apagar letras salvas" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Inter-mixagem de %d segundos" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Habilitar/desabilitar saída" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Banco de Dados atualizado" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Modo de Busca: Envolvido" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Tela de definição de teclas" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Modo de Busca: Normal" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Editar a definição de teclas para o comando selecionado" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Modo de Auto-Centralização: Ligado" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Remover keydef selecionado" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Modo de Auto-Centralização: Desligado" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Adicionar nova tecla" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Todas as faixas" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Subir um nível" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Todos os artistas" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Aplicar mudanças e salvar" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Álbuns do artista: %s" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Ajuda" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Todas as faixas do artista: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "y (sim)" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Álbum: %s - %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n (não)" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Faixas sem álbuns do artista: %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Não-definido" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Adicionando álbum %s..." +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Espaço" + +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Cima" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Baixo" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Esquerda" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Direita" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Adicionando %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Carregando Lista de Reprodução %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Adicionando '%s' á Lista de Reprodução" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Seleção de intervalo desabilitada" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Seleção de intervalo habilitada" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Sem letra de música" -#: src/screen_chat.cxx:59 +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Letra de Música" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "carregando..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Atualização de Banco de Dados em progresso..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Atualização do Banco de Dados %s começou" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Letra de Música salva" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Atualização de Banco de Dados iniciada" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Letras apagadas" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Deletar este item não é possível" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Sem letras salvas" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Deletar Lista de Reprodução" +msgid "Connecting to %s" +msgstr "Conectado à %s" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Lista de Reprodução deletada" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Navegar" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Procurar" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Erro: Versão do MPD %d.%d.%d é muito antiga (necessária %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Procurar para trás" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Traduzido por Carlos Eduardo C. B. Shinagawa <cadu.coelho at gmail.com>\n" +"\n" +"Launchpad Contributions:\n" +" Cadu https://launchpad.net/~cadu-coelho\n" +" Guilherme Lindner https://launchpad.net/~gui666\n" +" Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi\n" +" Max Kellermann https://launchpad.net/~max-duempel\n" +" Osni Leandro https://launchpad.net/~osni" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Pular" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Saída '%s' habilitada" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "'%s' não pôde ser encontrado" +msgid "Output '%s' disabled" +msgstr "Saída '%s' desabilitada" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Movimento" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Saídas" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Global" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Reproduzir" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Mover trilha para cima" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Adicionar" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Mover faixa para baixo" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centralizar" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Adentrar diretório/Selecionar e reproduzir trilha" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Adicionar trilha à Lista de Reprodução" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Substituir %s [%s/%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Deletar Lista de Reprodução" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s salvo" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Pesquisa" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Todas as faixas do artista: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Selecionar e reproduzir" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Álbum" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Ver Letra de Música" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Faixas sem álbuns do artista: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Re)Carregar letra de música" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artista" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Interromper busca" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Atualização de Banco de Dados em progresso..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Baixar letra de música da faixa em reprodução" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Atualização do Banco de Dados %s começou" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Sem letras salvas" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Atualização de Banco de Dados iniciada" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Salvar letra de música." +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Modo de Repetição está ligado" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Apagar letras salvas" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Modo de Repetição está desligado" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Habilitar/desabilitar saída" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Modo Aleatório está ligado" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Modo Aleatório está desligado" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Tela de definição de teclas" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Modo de Faixa Única está ligado" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Editar a definição de teclas para o comando selecionado" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Modo de Faixa Única está desligado" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Remover keydef selecionado" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Modo de Deleção de Faixa Reproduzida está ligado" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Adicionar nova tecla" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Modo de Deleção de Faixa Reproduzida está desligado" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Subir um nível" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Inter-mixagem de %d segundos" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Aplicar mudanças e salvar" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Banco de Dados atualizado" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Ajuda" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Modo de Busca: Envolvido" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Erro: Tela é muito pequena" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Modo de Busca: Normal" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Você tem novas teclas de atalho" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Modo de Auto-Centralização: Ligado" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Teclas de atalho inalteradas." +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Modo de Auto-Centralização: Desligado" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Erro: Não foi possível criar diretório ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Procurar" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Erro: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Procurar para trás" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Pular" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Gravei %s" +msgid "Unable to find '%s'" +msgstr "'%s' não pôde ser encontrado" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Deletada" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Entre nova tecla para %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Erro: tecla %s já está sendo usada para %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Tecla %s definida para %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Aplicar teclas de atalho " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Aplicar e salvar teclas de atalho " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Adicionar nova tecla" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Nota: Você esqueceu de 'Aplicar' suas mudanças?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Editar teclas de atalho" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Editar teclas para %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Sem letra de música" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Letra de Música" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "carregando..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Você tem novas teclas de atalho" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Teclas de atalho inalteradas." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Configuração de teclas de atalho incompleta" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Letra de Música salva" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Letras apagadas" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Sem letras salvas" +msgid "Wrote %s" +msgstr "Gravei %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Saída '%s' habilitada" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Aplicar teclas de atalho " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Saída '%s' desabilitada" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Aplicar e salvar teclas de atalho " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Saídas" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Editar teclas de atalho" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Adicionar" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Nota: Você esqueceu de 'Aplicar' suas mudanças?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Senha" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artista" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "álbum" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "título" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "faixa" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "nome" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "estilo" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "data" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "compositor" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "intérprete" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "comentário" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "arquivo" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Título" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artista" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Álbum" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Nome de Arquivo" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artista + Título" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Sem argumento para tag de pesquisa %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Tag de pesquisa ruim %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Pressione %s para uma nova pesquisa" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Pesquisa: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Pesquisa: Resultados para %s [%s]" +msgid "No argument for search tag %s" +msgstr "Sem argumento para tag de pesquisa %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Pesquisa: Pressione %s para uma nova pesquisa [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Pesquisa" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Modo de Pesquisa: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Duração" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Compositor" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Nome" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disco" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Faixa" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Data" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Estilo" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Comentário" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Caminho" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Taxa de Amostragem" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Número de artistas" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Número de álbuns" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Número de faixas" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Tempo rodando" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Atualização do BD mais recente" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Tempo de reprodução" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Tempo de reprodução do BD" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Visualizador de Trilha" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Estatísticas do MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Faixa selecionada" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Faixa atualmente em reprodução" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Substituir %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Senha" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Reproduzindo:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pausado]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Comando desconhecido" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Aviso: Campo de cor desconhecido - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminal não tem capacidade para trabalhar com cores" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volume n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volume %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Adicionar URL/arquivo à lista de reprodução" + +#~ msgid "Move song up" +#~ msgstr "Mover trilha para cima" + +#~ msgid "Move song down" +#~ msgstr "Mover faixa para baixo" + +#~ msgid "Press %s for a new search" +#~ msgstr "Pressione %s para uma nova pesquisa" + +#~ msgid "Search: %s" +#~ msgstr "Pesquisa: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Pesquisa: Resultados para %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Pesquisa: Pressione %s para uma nova pesquisa [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Conectando a %s... [Pressione %s para abortar]" + +#~ msgid "press %s for the key editor" +#~ msgstr "press %s para o editor de teclas" + +#~ msgid "Album: %s - %s" +#~ msgstr "Álbum: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Adicionando álbum %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Adicionando %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Erro: Tela é muito pequena" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Erro: Não foi possível criar diretório ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Erro: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Substituir %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Deletar Lista de Reprodução %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Aviso: Cor desconhecida - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Conectado à %s" - #~ msgid "Shuffled playlist" #~ msgstr "Lista de Reprodução misturada"
View file
ncmpc-0.30.tar.xz/po/ru.po -> ncmpc-0.32.tar.xz/po/ru.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2017-09-05 20:47+0700\n" "Last-Translator: Max Arnold <lwarxx@gmail.com>\n" "Language-Team: ru <ru@li.org>\n" @@ -16,416 +16,353 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: src/colors.cxx:156 -msgid "Unknown color" -msgstr "Неизвестный цвет" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Все композиции" -#: src/colors.cxx:195 -msgid "Unknown color field" -msgstr "Неизвестное цветовое поле" +#: src/AlbumListPage.cxx:144 +#, fuzzy +msgid "Albums" +msgstr "Альбом" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Терминал не поддерживает смену цветов" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Альбомы исполнителя: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Терминал не поддерживает цвета" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, c-format +msgid "Adding '%s' to queue" +msgstr "В очередь добавляется '%s'" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Все исполнители" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Клавиша %s назначена для %s и %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "Чат" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "Ваше сообщение" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "Сообщение не может быть отправлено" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Экран клавиатурных комбинаций" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Выход" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Курсор вверх" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Курсор вниз" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Переместить курсор в верх экрана" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Переместить курсор в середину экрана" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Переместить курсор в низ экрана" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Переместить курсор в начало списка" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Переместить курсор в конец списка" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "На страницу вверх" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "На страницу вниз" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Выбор диапазона" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Прокрутка на одну строку вниз" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Прокрутка на одну строку вверх" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Прокрутка на половину экрана вверх" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Прокрутка на половину экрана вниз" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Выбрать текущую композицию" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Экран помощи" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 msgid "Queue screen" msgstr "Экран очереди" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Экран навигации" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Воспроизвести/Перейти в директорию" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Пауза" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Останов" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Удалить из плейлиста все композиции кроме текущей" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Следующая композиция" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Предыдущая композиция" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Перемотка вперёд" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Перемотка назад" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Увеличить громкость" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Уменьшить громкость" -#: src/command.cxx:132 +#: src/Command.cxx:98 msgid "Select/deselect song in queue" msgstr "Выбрать или отменить выбор композиции в очереди" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Добавить все композиции в плейлист" -#: src/command.cxx:136 +#: src/Command.cxx:102 msgid "Delete song from queue" msgstr "Удалить композицию из очереди" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "Перемешать очередь" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "Очистить очередь" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Вкл/выкл режим повтора" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Вкл/выкл случайный режим" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Вкл/выкл одиночный режим" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Вкл/выкл режим удаления после проигрывания" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Вкл/выкл режим плавного перехода" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Обновить музыкальную базу" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "Сохранить очередь" -#: src/command.cxx:156 -msgid "Add url/file to queue" -msgstr "Добавить url/файл в очередь" +#: src/Command.cxx:122 src/HelpPage.cxx:174 +msgid "Append song to queue" +msgstr "Добавить композицию в очередь" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Перейти к корневой директории" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Перейти к родительской директории" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Перейти к файлу композиции" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Переместить вверх" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Переместить вниз" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Обновить экран" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Переключить режим поиска" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Вкл/выкл режим автоцентрирования" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Следующий экран" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Предыдущий экран" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Последний посещённый экран" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Поиск вперёд" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Продолжить поиск вперёд" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Поиск назад" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Продолжить поиск назад" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Перейти к" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Экран исполнителей" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Экран поиска" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Изменить поле для поиска" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Просмотр выбранной и проигрываемой композиций" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Экран текста песни" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Прервать операцию" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Обновить текст" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "Редактировать текущий элемент" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Экран аудиовыходов" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 msgid "Chat screen" msgstr "Экран чата" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Не задано" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Пробел" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Ввод" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Вверх" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Вниз" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Влево" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Вправо" - -#: src/command.cxx:308 -msgid "Home" -msgstr "В начало" - -#: src/command.cxx:310 -msgid "End" -msgstr "В конец" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Клавиша %s назначена для %s и %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Ошибка" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Неправильное значение клавиатурной комбинации" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Неизвестная команда" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Неопределённое значение клавиатурной комбинации" @@ -433,803 +370,878 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Неверный тип отображения времени" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Пропущен символ '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Неверное название цвета" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Неопределённое значение цвета" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Неверное число" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Неправильное значение цвета" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Неизвестное название экрана" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Неверный режим поиска" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Неизвестный режим поиска" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Неизвестный параметр конфигурации" -#: src/i18n.h:42 -msgid "y" -msgstr "y" - -#: src/i18n.h:43 -msgid "n" -msgstr "n" - -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Выбор диапазона выключен" - -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Выбор диапазона включен" - -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Подключение к %s... [Нажмите %s для отмены]" - -#: src/Main.cxx:182 -#, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Ошибка: MPD версии %d.%d.%d устарел (необходим %s)" - -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "%s - редактор клавиш" - -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "Перевод: Max Arnold <lwarxx@gmail.com>" - -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "Очередь перемешана" - -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "Очередь очищена" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Терминал не поддерживает смену цветов" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "Сохранить очередь как" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Удаление этого элемента невозможно" -#: src/save_playlist.cxx:140 +#: src/FileBrowserPage.cxx:268 #, c-format -msgid "Replace %s?" -msgstr "Заменить %s?" +msgid "Delete playlist %s?" +msgstr "Удалить плейлист %s?" #. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 msgid "Aborted" msgstr "Прервано" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Сохранено в %s" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Плейлист удалён" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Повтор включен" +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Навигация" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Повтор выключен" +#: src/FileListPage.cxx:121 +#, fuzzy, c-format +msgid "Loading playlist '%s'" +msgstr "Загружается плейлист %s..." -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Случайный режим включен" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Перемещение" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Случайный режим выключен" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Глобальные" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Одиночный режим включен" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Воспроизведение" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Одиночный режим выключен" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Центрировать" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Режим удаления после проигрывания включен" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Перейти в директорию/Выбрать и проиграть композицию" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Режим удаления после проигрывания выключен" +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Удалить плейлист" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Плавный переход %d секунд" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Поиск" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "База обновлена" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Выбрать и проиграть" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Режим поиска: циклический" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Показать текст" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Режим поиска: нормальный" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Пере)загрузить текст" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Режим автоцентрирования: вкл." +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Прервать загрузку" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Режим автоцентрирования: выкл." +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Загрузить текст проигрываемой композиции" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Все композиции" +#: src/HelpPage.cxx:189 +msgid "Add or edit lyrics" +msgstr "Добавить или редактировать текст" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Все исполнители" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Сохранить текст" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Альбомы исполнителя: %s" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Удалить сохранённый текст" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Все композиции исполнителя: %s" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Вкл/выкл аудиовыход" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Альбом: %s - %s" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "Напишите сообщение" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Композиции исполнителя: %s" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Экран клавиатурных комбинаций" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Добавляется альбом %s..." +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Изменить комбинации для выбранной команды" -#: src/screen_artist.cxx:452 -#, c-format -msgid "Adding %s..." -msgstr "Добавляется %s..." +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Удалить выбранную комбинацию" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Загружается плейлист %s..." +#: src/HelpPage.cxx:214 +msgid "Add a keydef" +msgstr "Добавить новую клавишу" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, c-format -msgid "Adding '%s' to queue" -msgstr "В очередь добавляется '%s'" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Перейти на уровень выше" + +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Применить и сохранить изменения" + +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Помощь" + +#: src/i18n.h:43 +msgid "y" +msgstr "y" + +#: src/i18n.h:44 +msgid "n" +msgstr "n" + +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Не задано" + +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Пробел" + +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Ввод" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Вверх" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Вниз" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Влево" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Вправо" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "В начало" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "В конец" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" -#: src/screen_chat.cxx:59 +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Ctrl-%c" msgstr "" -"подключено к MPD %u.%u.%u (для использования чата \n" -"необходима как минимум версия 0.17.0)" -#: src/screen_chat.cxx:177 -msgid "Your message" -msgstr "Ваше сообщение" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" +msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "Сообщение не может быть отправлено" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Выбор диапазона выключен" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "Чат" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Выбор диапазона включен" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Идёт обновление базы..." +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Текст отсутствует" -#: src/screen_client.cxx:49 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Database update of %s started" -msgstr "Обновление базы %s запущено" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "Таймаут получения текста после %d секунд" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Начато обновление базы" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Текст" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Удаление этого элемента невозможно" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "загружается..." -#: src/screen_file.cxx:207 -#, c-format -msgid "Delete playlist %s?" -msgstr "Удалить плейлист %s?" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "Редактор не выбран" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Плейлист удалён" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "Вы действительно хотите запустить редактор для правки этого текста?" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Навигация" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "Не удалось запустить редактор" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Поиск" +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +#, fuzzy +msgid "Editor exited unexpectedly" +msgstr "Редактор неожиданно завершил работу (%d)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Поиск назад" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Текст сохранён" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Перейти" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Текст удалён" + +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Сохранённый текст отсутствует" + +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Подключено к %s" -#: src/screen_find.cxx:82 +#: src/Main.cxx:187 #, c-format -msgid "Unable to find '%s'" -msgstr "Не удалось найти '%s'" +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Ошибка: MPD версии %d.%d.%d устарел (необходим %s)" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Перемещение" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "Перевод: Max Arnold <lwarxx@gmail.com>" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Глобальные" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Аудиовыход '%s' включен" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Воспроизведение" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Аудиовыход '%s' выключен" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Переместить композицию вверх" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Аудиовыходы" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Переместить композицию вниз" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "Очередь перемешана" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Центрировать" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "Очередь очищена" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Перейти в директорию/Выбрать и проиграть композицию" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Добавить" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -msgid "Append song to queue" -msgstr "Добавить композицию в очередь" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "Очередь" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Удалить плейлист" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "Очередь на %s" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Поиск" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "Сохранить очередь как" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Выбрать и проиграть" +#: src/save_playlist.cxx:107 +#, c-format +msgid "Replace %s?" +msgstr "Заменить %s?" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Показать текст" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Сохранено в %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Пере)загрузить текст" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Все композиции исполнителя: %s" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Прервать загрузку" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Альбом" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Загрузить текст проигрываемой композиции" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Композиции исполнителя: %s" -#: src/screen_help.cxx:168 -msgid "Add or edit lyrics" -msgstr "Добавить или редактировать текст" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Исполнитель" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Сохранить текст" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Идёт обновление базы..." -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Удалить сохранённый текст" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Обновление базы %s запущено" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Вкл/выкл аудиовыход" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Начато обновление базы" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "Напишите сообщение" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Повтор включен" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Экран клавиатурных комбинаций" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Повтор выключен" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Изменить комбинации для выбранной команды" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Случайный режим включен" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Удалить выбранную комбинацию" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Случайный режим выключен" -#: src/screen_help.cxx:193 -msgid "Add a keydef" -msgstr "Добавить новую клавишу" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Одиночный режим включен" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Перейти на уровень выше" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Одиночный режим выключен" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Применить и сохранить изменения" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Режим удаления после проигрывания включен" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Помощь" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Режим удаления после проигрывания выключен" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Ошибка: экран слишком мал" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Плавный переход %d секунд" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Новые клавиатурные комбинации задействованы" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "База обновлена" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Клавиатурные комбинации не изменились." +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Режим поиска: циклический" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Ошибка: не удалось создать директорию ~/.ncmpc - %s" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Режим поиска: нормальный" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Ошибка: %s - %s" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Режим автоцентрирования: вкл." + +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Режим автоцентрирования: выкл." + +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Поиск" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Поиск назад" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Перейти" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Записано %s" +msgid "Unable to find '%s'" +msgstr "Не удалось найти '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Удалено" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Нажмите новую клавишу для %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "Ctrl+Space не может использоваться" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Ошибка: клавиша %s уже используется для %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Назначено %s для %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Применить клавиатурные комбинации " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Применить и сохранить клавиатурные комбинации " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Добавить новую клавишу" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Внимание: вы не забыли применить сделанные изменения?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Изменение клавиатурных комбинаций" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Изменение клавиатурных комбинаций для %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Текст отсутствует" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "Таймаут получения текста после %d секунд" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Текст" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "загружается..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "Редактор не выбран" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "Вы действительно хотите запустить редактор для правки этого текста?" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Новые клавиатурные комбинации задействованы" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "Не удалось запустить редактор" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Клавиатурные комбинации не изменились." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "Редактор неожиданно завершил работу (%d)" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Неопределённое значение клавиатурной комбинации" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "Редактор неожиданно завершил работу (по сигналу %d)" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Текст сохранён" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Текст удалён" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Сохранённый текст отсутствует" +msgid "Wrote %s" +msgstr "Записано %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Аудиовыход '%s' включен" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Применить клавиатурные комбинации " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Аудиовыход '%s' выключен" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Применить и сохранить клавиатурные комбинации " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Аудиовыходы" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Изменение клавиатурных комбинаций" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Добавить" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Внимание: вы не забыли применить сделанные изменения?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "Очередь" +#: src/screen_keydef.cxx:604 +msgid "Keys" +msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "Очередь на %s" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Пароль" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artist" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "title" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "track" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "name" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "date" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "composer" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "performer" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "comment" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "file" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Композиция" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Исполнитель" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Альбом" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Имя файла" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Исполнитель + Композиция" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Не задан критерий поиска по тегу %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Неверный тег поиска %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Нажмите %s для нового поиска" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Поиск: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Поиск: результаты поиска '%s' в поле [%s]" +msgid "No argument for search tag %s" +msgstr "Не задан критерий поиска по тегу %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Поиск: нажмите %s для поиска по полю [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Поиск" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Поле для поиска: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Длительность" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "Позиция" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Композитор" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Название" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Диск" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Дорожка" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Дата" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Жанр" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Комментарий" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Путь" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Битрейт" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "Формат" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Количество исполнителей" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Количество альбомов" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Количество композиций" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Время работы" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Последнее обновление базы" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Время воспроизведения" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Время воспроизведения базы" # Several translations for Song Viewer: -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Информация о композиции" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Статистика MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Выбранная композиция" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Проигрываемая композиция" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d кбит/с" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, c-format -msgid "%s [%s/%s] " -msgstr "%s [%s/%s] " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Пароль" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Проигрывается:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Пауза]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +msgid "Unknown color" +msgstr "Неизвестный цвет" + +#: src/Styles.cxx:333 +msgid "Unknown color field" +msgstr "Неизвестное цветовое поле" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Терминал не поддерживает цвета" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Громкость н/д" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Громкость %d%%" +#~ msgid "Add url/file to queue" +#~ msgstr "Добавить url/файл в очередь" + +#~ msgid "Move song up" +#~ msgstr "Переместить композицию вверх" + +#~ msgid "Move song down" +#~ msgstr "Переместить композицию вниз" + +#~ msgid "Press %s for a new search" +#~ msgstr "Нажмите %s для нового поиска" + +#~ msgid "Search: %s" +#~ msgstr "Поиск: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Поиск: результаты поиска '%s' в поле [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Поиск: нажмите %s для поиска по полю [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Подключение к %s... [Нажмите %s для отмены]" + +#~ msgid "press %s for the key editor" +#~ msgstr "%s - редактор клавиш" + +#~ msgid "Album: %s - %s" +#~ msgstr "Альбом: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Добавляется альбом %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Добавляется %s..." + +#~ msgid "" +#~ "connected to MPD %u.%u.%u (you need at least \n" +#~ "version 0.17.0 to use the chat feature)" +#~ msgstr "" +#~ "подключено к MPD %u.%u.%u (для использования чата \n" +#~ "необходима как минимум версия 0.17.0)" + +#~ msgid "Error: Screen too small" +#~ msgstr "Ошибка: экран слишком мал" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Ошибка: не удалось создать директорию ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Ошибка: %s - %s" + +#~ msgid "Editor exited unexpectedly (signal %d)" +#~ msgstr "Редактор неожиданно завершил работу (по сигналу %d)" + +#~ msgid "%s [%s/%s] " +#~ msgstr "%s [%s/%s] " + #~ msgid "unknown" #~ msgstr "неизвестно" @@ -1239,9 +1251,6 @@ #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Внимание: неизвестный цвет - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Подключено к %s" - #~ msgid "Shuffled playlist" #~ msgstr "Плейлист перемешан"
View file
ncmpc-0.30.tar.xz/po/sk.po -> ncmpc-0.32.tar.xz/po/sk.po
Changed
@@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: ncmpc 0.11.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-04-07 01:36+0000\n" "Last-Translator: Roman Horník <Unknown>\n" "Language-Team: sk <sk@li.org>\n" @@ -17,423 +17,358 @@ "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Neznámy príkaz" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Všetky stopy" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Varovanie: Neznáme farebné pole - %s\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminál nemá podporu pre zmenu farieb" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Albumy od interpreta: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminál nemá schopnosti zobrazovania farieb" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Pridávam '%s' do playlistu" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Všetci interpreti" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Kláves %s priradený k %s a %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Okno nastavenia klávesov" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Ukončiť" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Presunúť kurzor nahor" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Presunúť kurzor nadol" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Presunúť na vrch obrazovky" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Presunúť kurzor do stredu obrazovky" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Presunúť kurzor na spodok obrazovky" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Presunúť kurzor na začiatok zoznamu" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Presunúť kurzor na koniec zoznamu" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Page up" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Page down" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Výber rozsahu" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Posun o jeden riadok nadol" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Posun o jeden riadok nahor" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Posun o polovicu obrazovky nahor" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Posun o polovicu obrazovky nadol" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Zvoľiť práve prehrávanú skladbu" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Okno s pomocou" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Obrazovka s nastavením kláves" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Okno listovania" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Prehrať/Vstúpiť do adresára" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pauza" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stop" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Orezať" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Ďalšia stopa" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Predchádzajúca stopa" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Posunúť vpred" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Posunúť vzad" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Pridať hlasitosť" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Stíšiť" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Vybrať/odvybrať skladbu v playliste" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Vybrať všetky položky v zozname" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Vymazať skladbu z playlistu" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Prepnúť režim opakovania" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Prepnúť náhodný režim" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Prepnúť jednotlivý režim" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Prepnúť spotrebný režim" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Prepnúť režím prelínania skladieb" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Spustiť aktualizáciu hudobnej databáze" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Pridať url/súbor do playlistu" +msgid "Append song to queue" +msgstr "Pridať skladbu do playlistu" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Prejsť do koreňového adresára" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Prejsť do nadradeného adresára" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Nájsť skladbu v prehliadači" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Presunúť položku nahor" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Presunúť položku nadol" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Obnoviť obrazovku" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Prepnúť režim vyhľadávania" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Prepnúť automatický režim centrovania" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Ďalšia obrazovka" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Predchádzajúca obrazovka" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Prepnúť na predchádzajúcu obrazovku" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Hľadať vpred" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Pokračovať v hľadaní vpred" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Hľadať vzad" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Pokračovať v hľadaní vzad" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Skok na" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Okno interpreta" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Okno vyhľadávania" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Zmeniť režim vyhľadávania" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Zobraziť vybranú a momentálne prehrávanú pieseň" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Okno textu piesne" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Akcia prerušenia" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Obnoviť text" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Obrazovka výstupov" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Ďalšia obrazovka" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Neurčené" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Medzera" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Hore" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Dole" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Vľavo" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Vpravo" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Kláves %s priradený k %s a %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Chyba" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Chybne zadaná definícia klávesovej skratky" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Neznámy príkaz" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Neúplná konfigurácie klavesových skratiek" @@ -441,820 +376,888 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Nesprávny typ zobrazovania času" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Chýba '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Nesprávny názov farby" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Neúplná definícia farby" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Neplatné číslo" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Zle zadaná definícia farby" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Neznámy názov obrazovky" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Neplatný režim vyhľadávania" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Neznámy režim vyhľadávania" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Neznámy parameter konfigurácie" -#: src/i18n.h:42 -msgid "y" -msgstr "a" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminál nemá podporu pre zmenu farieb" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Zmazanie tejto položky nie je možné" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Výber rozsahu vypnutý" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Vymazať playlist" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Výber rozsahu zapnutý" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Zrušené" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Pripájam sa k %s... [Stlačte %s pre zrušenie]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Playlist vymazaný" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Listovať" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Chyba: MPD verzie %d.%d.%d je príliš staré (%s je potrebná)" +msgid "Loading playlist '%s'" +msgstr "Nahrávam playlist %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "stlačte %s pre editor klávesov" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Pohyb" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Jozef Riha <jose1711@gmail.com>\n" -"\n" -"Launchpad Contributions:\n" -" Jose Riha https://launchpad.net/~jose1711\n" -" Roman Horník https://launchpad.net/~roman.hornik" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globálne" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Prehrávať" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Do stredu" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Vstúpiť do adresára/Vybrať a prehrať skladbu" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Nahradiť %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Vymazať playlist" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Zrušené" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Hľadanie" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Uložený %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Vybrať a prehrať" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Režim opakovania zapnutý" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Zobraziť text piesne" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Režim opakovania vypnutý" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Znovu)načítať text" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Náhodný režim zapnutý" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Zachytené prerušenie" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Náhodný režim vypnutý" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Stiahnuť text pre momentálne prehrávanú pieseň" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Jednotlivý režim zapnutý" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Uložiť text piesne" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Jednotlivý režim vypnutý" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Uložiť text piesne" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Spotrebný režim zapnutý" +#: src/HelpPage.cxx:191 +#, fuzzy +msgid "Delete saved lyrics" +msgstr "Uložiť text piesne" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Spotrebný režim vypnutý" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Povoliť/vypnúť výstup" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Prelínanie %d sekúnd" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Databáza aktualizovaná" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Obrazovka s nastavením kláves" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Režim vyhľadávania: Zabalený" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Upraviť kláves pre vybraný príkaz" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Režim vyhľadávanie: Normálny" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Odstrániť vybrané nastavenie kláves" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Automatické centrovanie: Zapnuté" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Pridať nový kláves" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Automatické centrovanie: Vypnuté" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Prejsť o úroveň vyššie" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Všetky stopy" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Použiť a uložiť zmeny" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Všetci interpreti" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Pomoc" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Albumy od interpreta: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "a" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Všetky stopy od interpreta: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Neurčené" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Albumy od interpreta: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Medzera" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "Nahrávam playlist %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "Pridávam adresár %s...\n" +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Nahrávam playlist %s..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Pridávam '%s' do playlistu" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Hore" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Dole" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Vľavo" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Vpravo" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" -#: src/screen_chat.cxx:59 +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Ctrl-%c" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" -msgstr "" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Výber rozsahu vypnutý" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" -msgstr "" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Výber rozsahu zapnutý" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Prebieha aktualizácia databáze..." +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Bez textu" -#: src/screen_client.cxx:49 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Database update of %s started" -msgstr "Aktualizácia databáze %s začala" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Bola spustená aktualizácia databáze" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Text piesne" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Zmazanie tejto položky nie je možné" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "načítam..." -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Vymazať playlist" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" + +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" + +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" + +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Text piesne uložený" + +#: src/LyricsPage.cxx:445 +#, fuzzy +msgid "Lyrics deleted" msgstr "Playlist vymazaný" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Listovať" +#: src/LyricsPage.cxx:446 +#, fuzzy +msgid "No saved lyrics" +msgstr "Uložiť text piesne" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Vyhľadať" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Pripojený k %s" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Vyhľadať spätne" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Chyba: MPD verzie %d.%d.%d je príliš staré (%s je potrebná)" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Skok" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Jozef Riha <jose1711@gmail.com>\n" +"\n" +"Launchpad Contributions:\n" +" Jose Riha https://launchpad.net/~jose1711\n" +" Roman Horník https://launchpad.net/~roman.hornik" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:87 #, c-format -msgid "Unable to find '%s'" -msgstr "Nepodarilo sa nájsť '%s'" - -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Pohyb" +msgid "Output '%s' enabled" +msgstr "Výstup '%s' povolený" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globálne" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Výstup '%s' vypnutý" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Prehrávať" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Výstupy" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Presunúť skladbu nahor" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Presunúť skladbu nadol" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Do stredu" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Pridať" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Vstúpiť do adresára/Vybrať a prehrať skladbu" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Pridať skladbu do playlistu" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Vymazať playlist" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Hľadanie" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Nahradiť %s [%s/%s] ? " -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Vybrať a prehrať" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Uložený %s" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Zobraziť text piesne" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Všetky stopy od interpreta: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Znovu)načítať text" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Zachytené prerušenie" +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Albumy od interpreta: %s" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Stiahnuť text pre momentálne prehrávanú pieseň" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Interpret" -#: src/screen_help.cxx:168 +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add or edit lyrics" -msgstr "Uložiť text piesne" +msgid "Database update running" +msgstr "Prebieha aktualizácia databáze..." -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Uložiť text piesne" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Aktualizácia databáze %s začala" -#: src/screen_help.cxx:170 -#, fuzzy -msgid "Delete saved lyrics" -msgstr "Uložiť text piesne" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Bola spustená aktualizácia databáze" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Povoliť/vypnúť výstup" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Režim opakovania zapnutý" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Režim opakovania vypnutý" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Obrazovka s nastavením kláves" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Náhodný režim zapnutý" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Upraviť kláves pre vybraný príkaz" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Náhodný režim vypnutý" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Odstrániť vybrané nastavenie kláves" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Jednotlivý režim zapnutý" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Pridať nový kláves" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Jednotlivý režim vypnutý" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Prejsť o úroveň vyššie" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Spotrebný režim zapnutý" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Použiť a uložiť zmeny" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Spotrebný režim vypnutý" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Pomoc" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Prelínanie %d sekúnd" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Chyba: Okno je príliš malé" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Databáza aktualizovaná" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Nastavili ste nové priradenie klávesov" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Režim vyhľadávania: Zabalený" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Priradenie klávesov sa nezmenilo." +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Režim vyhľadávanie: Normálny" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Chyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %s" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Automatické centrovanie: Zapnuté" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Chyba: %s - %s" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Automatické centrovanie: Vypnuté" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Vyhľadať" + +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Vyhľadať spätne" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Skok" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Zapísané %s" +msgid "Unable to find '%s'" +msgstr "Nepodarilo sa nájsť '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Vymazané" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Zadajte nový kláves pre %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Chyba: kláves %s je už použitý pre %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s priradené k %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Použiť nastavenie klávesov " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Použiť & Uložiť nastavenie klávesov " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Pridať nový kláves" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Poznámka: Zabudli ste 'Použiť' vaše zmeny?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Upraviť priradenie klávesov" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Upraviť klávesy pre %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Bez textu" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Text piesne" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "načítam..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" - -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" - -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" - -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Text piesne uložený" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Nastavili ste nové priradenie klávesov" -#: src/screen_lyrics.cxx:443 -#, fuzzy -msgid "Lyrics deleted" -msgstr "Playlist vymazaný" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Priradenie klávesov sa nezmenilo." -#: src/screen_lyrics.cxx:446 +#: src/screen_keydef.cxx:405 #, fuzzy -msgid "No saved lyrics" -msgstr "Uložiť text piesne" +msgid "Unable to write configuration" +msgstr "Neúplná konfigurácie klavesových skratiek" -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" -msgstr "Výstup '%s' povolený" +msgid "Wrote %s" +msgstr "Zapísané %s" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Výstup '%s' vypnutý" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Použiť nastavenie klávesov " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Výstupy" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Použiť & Uložiť nastavenie klávesov " -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Pridať" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Upraviť priradenie klávesov" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Poznámka: Zabudli ste 'Použiť' vaše zmeny?" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Heslo" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "interpret" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "názov" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "stopa" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "názov" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "žáner" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "dátum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "skladateľ" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "umelec" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "komentár" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "súbor" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Názov" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Interpret" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Názov súboru" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Interpret + Názov" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Chýba argument pre značku vyhľadávania %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Zlá značka vyhľadávania %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "Stlačte %s pre nové hľadanie" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Vyhľadať: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Hľadanie: Výsledky pre reťazec %s[%s]" +msgid "No argument for search tag %s" +msgstr "Chýba argument pre značku vyhľadávania %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Hľadanie: Stlačte %s pre opätovné hľadanie [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Hľadanie" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Režim vyhľadávania: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Dĺžka" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Skladateľ" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Názov" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Disk" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Stopa" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Dátum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Žáner" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Komentár" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Cesta" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bitový tok" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Počet interpretov" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Počet albumov" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Počet piesní" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Uptime" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Najčerstvejší update databáze" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Čas hrania" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Čas hrania databáze" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Prehliadač piesní" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Štatistiky MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Vybraná pieseň" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Momentálne prehrávaná pieseň" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Nahradiť %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Heslo" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Prehrávam:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pozastavené]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Neznámy príkaz" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Varovanie: Neznáme farebné pole - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminál nemá schopnosti zobrazovania farieb" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Hlasitosť n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Hlasitosť %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Pridať url/súbor do playlistu" + +#~ msgid "Move song up" +#~ msgstr "Presunúť skladbu nahor" + +#~ msgid "Move song down" +#~ msgstr "Presunúť skladbu nadol" + +#~ msgid "Press %s for a new search" +#~ msgstr "Stlačte %s pre nové hľadanie" + +#~ msgid "Search: %s" +#~ msgstr "Vyhľadať: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Hľadanie: Výsledky pre reťazec %s[%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Hľadanie: Stlačte %s pre opätovné hľadanie [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Pripájam sa k %s... [Stlačte %s pre zrušenie]" + +#~ msgid "press %s for the key editor" +#~ msgstr "stlačte %s pre editor klávesov" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "Nahrávam playlist %s..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "Pridávam adresár %s...\n" + +#~ msgid "Error: Screen too small" +#~ msgstr "Chyba: Okno je príliš malé" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Chyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Chyba: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Nahradiť %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Vymazať playlist %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varovania: Neznáma farba - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Pripojený k %s" - #~ msgid "Shuffled playlist" #~ msgstr "Zamiešaný playlist"
View file
ncmpc-0.30.tar.xz/po/sv.po -> ncmpc-0.32.tar.xz/po/sv.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc 0.12\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2010-04-14 05:21+0000\n" "Last-Translator: Rickard Närström <rickard.narstrom@gmail.com>\n" "Language-Team: sv <sv@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Okänt kommando" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Alla spår" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Varning: %s ej definierad.\n" +msgid "Albums" +msgstr "Album" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Terminalen saknar stöd för växling av färger" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Album av artist: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Terminalen saknar stöd för färger" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Lägger till '%s' till spellista" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Alla artister" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Tangent %s tilldelad %s och %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Tangentdefinitioner" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Avsluta" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Markör uppåt" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Markör nedåt" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Flytta markören längst upp" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Flytta markören till mitten" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Flytta markören längst ner" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Flytta markören längst upp i listan" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Flytta markören längst ner i listan" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Markören en skärm uppåt" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Markören en skärm nedåt" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Gå ner en rad" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Gå upp en rad" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Gå upp en halv skärm" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Gå ner en halv skärm" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Hjälp" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Hjälp" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Filer" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Spela upp/Välj" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Pausa" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Stoppa" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Beskär" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Nästa spår" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Föregående spår" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Sök framåt" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Sök bakåt" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Höj volymen" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Sänk volymen" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Markera/avmarkera spår till spellistan" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Markera alla listade föremål" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Ta bort låt från spellista" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Repeat på/av" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Slumpning på/av" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Mjuk övergång på/av" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Updatera musikdatabasen" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Lägg till url eller fil till spellistan" +msgid "Append song to queue" +msgstr "Lägg till i spellista" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Gå till rotkatalogen" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Gå upp en nivå" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Hitta spår i Filer" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Flytta upp" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Flytta ner" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Uppdatera fönster" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Ändra sökinställningar" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Automatisk centrering på/av" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Nästa skärm" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Tidigare skärm" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Sök" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Nästa träff" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Föregående träff" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Upprepa sökning bakåt" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Hoppa till" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Artister" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Databassökning" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Ändra måltyp för databassökning" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Texter" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Avbryt handling" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Uppdatera texter" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Utgångar" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Nästa skärm" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Ej definierad" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Mellanslag" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Bakstegstangent" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Ta bort" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Uppåtpil" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Nedåtpil" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Vänsterpil" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Högerpil" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+tabb" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Tangent %s tilldelad %s och %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Fel" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Dålig tangentdefinition" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Okänt kommando" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Inkomplett tangentdefinition" @@ -442,820 +377,888 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Felaktigt tidsformat" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Saknar '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Felaktigt färgnamn" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Inkomplett färgdefinition" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Ogiltigt nummer" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Felaktig färgdefinition" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Skärmnamn okänt" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Okänd konfigurationsinställning" -#: src/i18n.h:42 -msgid "y" -msgstr "j" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Terminalen saknar stöd för växling av färger" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Du kan inte ta bort det här föremålet" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Ta bort spellista" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Avbrutet" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Ansluter till %s... [Tryck %s för att avbryta]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Spellista borttagen" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Filer" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Fel: MPD version %d.%d.%d är för gammal (%s krävs)" +msgid "Loading playlist '%s'" +msgstr "Laddar spellista %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "tryck på %s för att korrigera" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Navigation" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Björn Pettersson https://launchpad.net/~bjorn-hygiena\n" -" Kalle Wallin https://launchpad.net/~kaw\n" -" Rickard Närström https://launchpad.net/~riccetn\n" -" nanker https://launchpad.net/~nanker" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Globala" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Starta/Spela markerad" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "Centrera" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Välj katalog/Markera och spela upp" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Ersätt %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Ta bort spellista" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Avbrutet" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Sök" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "%s sparad" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Lägg till spellistan och spela" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Upprepningsläge på" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Visa texter" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Upprepningsläge av" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "Ladda (om) texter" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Slumpningsläge på" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Avbryt hämtning" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Slumpningsläge av" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Ladda ner texter till låten som spelas just nu" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Spara texter" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Spara texter" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Förtäringsläge på" +#: src/HelpPage.cxx:191 +#, fuzzy +msgid "Delete saved lyrics" +msgstr "Spara texter" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Förtäringsläge av" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Slå på/av utgång" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Mjuk övergång %d sekunder" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "Databas uppdaterad" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Sökläge: Börja om" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Sökläge: Till början/slut" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Automatisk centrering påslaget" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Lägg till ny tangent" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Automatisk centrering avslaget" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "Gå upp en nivå" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Alla spår" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Verkställ och spara förändringar" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Alla artister" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Hjälp" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Album av artist: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "j" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Alla spår av artist: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Album: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Ej definierad" -#: src/screen_artist.cxx:405 -#, fuzzy, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Album av artist: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Mellanslag" -#: src/screen_artist.cxx:450 -#, fuzzy, c-format -msgid "Adding album %s..." -msgstr "Laddar spellista %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" -#: src/screen_artist.cxx:452 -#, fuzzy, c-format -msgid "Adding %s..." -msgstr "laddar..." +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Bakstegstangent" -#: src/screen_browser.cxx:122 -#, c-format -msgid "Loading playlist %s..." -msgstr "Laddar spellista %s..." +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Ta bort" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Lägger till '%s' till spellista" +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Uppåtpil" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Nedåtpil" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Vänsterpil" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Högerpil" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+tabb" -#: src/screen_chat.cxx:59 +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Ctrl-%c" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/KeyName.cxx:73 +#, c-format +msgid "Alt-%c" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Databasen uppdateras..." +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Ingen text" -#: src/screen_client.cxx:49 +#: src/LyricsPage.cxx:254 #, c-format -msgid "Database update of %s started" -msgstr "Uppdaterar databasen ifrån %s" +msgid "Lyrics timeout occurred after %d seconds" +msgstr "" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Databasuppdatering påbörjad" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Texter" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Du kan inte ta bort det här föremålet" +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "laddar..." -#: src/screen_file.cxx:207 -#, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Ta bort spellista" +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" +msgstr "" -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" +msgstr "" + +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" +msgstr "" + +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" + +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Text sparad" + +#: src/LyricsPage.cxx:445 +#, fuzzy +msgid "Lyrics deleted" msgstr "Spellista borttagen" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Filer" +#: src/LyricsPage.cxx:446 +#, fuzzy +msgid "No saved lyrics" +msgstr "Spara texter" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Sök" +#: src/Main.cxx:167 +#, fuzzy, c-format +msgid "Connecting to %s" +msgstr "Ansluten till %s" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Sök bakåt" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Fel: MPD version %d.%d.%d är för gammal (%s krävs)" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Hopp" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Björn Pettersson https://launchpad.net/~bjorn-hygiena\n" +" Kalle Wallin https://launchpad.net/~kaw\n" +" Rickard Närström https://launchpad.net/~riccetn\n" +" nanker https://launchpad.net/~nanker" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:87 #, c-format -msgid "Unable to find '%s'" -msgstr "Kan inte hitta '%s'" - -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Navigation" +msgid "Output '%s' enabled" +msgstr "Utgång '%s' påslagen" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Globala" +#: src/OutputsPage.cxx:98 +#, c-format +msgid "Output '%s' disabled" +msgstr "Utgång '%s' avslagen" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Starta/Spela markerad" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Utgångar" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Flytta spår uppåt" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Flytta spår nedåt" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "Centrera" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Lägg till" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Välj katalog/Markera och spela upp" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Lägg till i spellista" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Ta bort spellista" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Sök" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Ersätt %s [%s/%s] ? " -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Lägg till spellistan och spela" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "%s sparad" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Visa texter" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Alla spår av artist: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "Ladda (om) texter" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Album" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Avbryt hämtning" +#: src/screen_artist.cxx:195 +#, fuzzy, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Album av artist: %s" -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Ladda ner texter till låten som spelas just nu" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Artist" -#: src/screen_help.cxx:168 +#: src/screen_client.cxx:41 #, fuzzy -msgid "Add or edit lyrics" -msgstr "Spara texter" +msgid "Database update running" +msgstr "Databasen uppdateras..." -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Spara texter" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Uppdaterar databasen ifrån %s" -#: src/screen_help.cxx:170 -#, fuzzy -msgid "Delete saved lyrics" -msgstr "Spara texter" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Databasuppdatering påbörjad" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Slå på/av utgång" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Upprepningsläge på" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Upprepningsläge av" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Slumpningsläge på" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Slumpningsläge av" + +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" msgstr "" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" +#: src/screen.cxx:176 +msgid "Single mode is off" msgstr "" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Lägg till ny tangent" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Förtäringsläge på" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "Gå upp en nivå" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Förtäringsläge av" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Verkställ och spara förändringar" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Mjuk övergång %d sekunder" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Hjälp" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "Databas uppdaterad" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Fel: Terminalen är för liten" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Sökläge: Börja om" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Tangentdefinitioner uppdaterade" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Sökläge: Till början/slut" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Tangentdefinitioner oförändrade." +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Automatisk centrering påslaget" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Fel: Kunde inte skapa mappen ~/.ncmpc - %s" +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Automatisk centrering avslaget" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Fel: %s - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Sök" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Sök bakåt" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Hopp" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Sparade %s" +msgid "Unable to find '%s'" +msgstr "Kan inte hitta '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Borttagen" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Ny tangent för %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Fel: Tangenten %s används redan för %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "%s tilldelad %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Verkställ " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Verkställ och spara " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Lägg till ny tangent" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "OBS! Glömde du att 'Verkställa' dina ändringar?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Ändra tangentdefinitioner" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Ändra tangenter för kommandot %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Ingen text" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Texter" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "laddar..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" - -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" - -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" - -#: src/screen_lyrics.cxx:414 -#, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Text sparad" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Tangentdefinitioner uppdaterade" -#: src/screen_lyrics.cxx:443 -#, fuzzy -msgid "Lyrics deleted" -msgstr "Spellista borttagen" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Tangentdefinitioner oförändrade." -#: src/screen_lyrics.cxx:446 +#: src/screen_keydef.cxx:405 #, fuzzy -msgid "No saved lyrics" -msgstr "Spara texter" +msgid "Unable to write configuration" +msgstr "Inkomplett tangentdefinition" -#: src/screen_outputs.cxx:60 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Output '%s' enabled" -msgstr "Utgång '%s' påslagen" +msgid "Wrote %s" +msgstr "Sparade %s" -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Utgång '%s' avslagen" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Verkställ " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Utgångar" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Verkställ och spara " -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Lägg till" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Ändra tangentdefinitioner" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" -msgstr "" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "OBS! Glömde du att 'Verkställa' dina ändringar?" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_search.cxx:48 +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Lösenord" + +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artist" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "titel" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "spår" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "namn" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "datum" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "kompositör" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "uppträdare" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "kommentar" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "fil" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Titel" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Artist" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Album" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Filnamn" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Artist + titel" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Argumentet för söktyp %s saknas" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Felaktig söktyp %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Tryck %s för ny sökning" - -#: src/screen_search.cxx:427 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: %s" -msgstr "Sök: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "Sökresultat för %s [%s]" +msgid "No argument for search tag %s" +msgstr "Argumentet för söktyp %s saknas" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Tryck %s för ny sökning [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Sök" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Sök efter: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Längd" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Kompositör" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Namn" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Skiva" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Spår" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Datum" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Genre" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Kommentar" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Sökväg" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Bithastighet" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Antal artister" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Antal album" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Antal låtar" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Upptid" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Senaste databasuppdateringen" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Speltid" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Spår" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD-statistik" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Markerad låt" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kb/s" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Ersätt %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Lösenord" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Spelar:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Pausad]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Okänt kommando" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Varning: %s ej definierad.\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Terminalen saknar stöd för färger" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Volym: n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Volym: %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Lägg till url eller fil till spellistan" + +#~ msgid "Move song up" +#~ msgstr "Flytta spår uppåt" + +#~ msgid "Move song down" +#~ msgstr "Flytta spår nedåt" + +#~ msgid "Press %s for a new search" +#~ msgstr "Tryck %s för ny sökning" + +#~ msgid "Search: %s" +#~ msgstr "Sök: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Sökresultat för %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Tryck %s för ny sökning [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Ansluter till %s... [Tryck %s för att avbryta]" + +#~ msgid "press %s for the key editor" +#~ msgstr "tryck på %s för att korrigera" + +#~ msgid "Album: %s - %s" +#~ msgstr "Album: %s - %s" + +#, fuzzy +#~ msgid "Adding album %s..." +#~ msgstr "Laddar spellista %s..." + +#, fuzzy +#~ msgid "Adding %s..." +#~ msgstr "laddar..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Fel: Terminalen är för liten" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Fel: Kunde inte skapa mappen ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Fel: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Ersätt %s [%s/%s] ? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "Ta bort spellista %s [%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Varning: Okänd färg - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Ansluten till %s" - #~ msgid "Shuffled playlist" #~ msgstr "Spellistan slumpsorterades"
View file
ncmpc-0.30.tar.xz/po/uk.po -> ncmpc-0.32.tar.xz/po/uk.po
Changed
@@ -6,7 +6,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-08-11 10:30+0300\n" "Last-Translator: Oleksandr Kovalenko <alx.kovalenko@gmail.com>\n" "Language-Team: Ukrainian <uk@li.org>\n" @@ -19,423 +19,358 @@ "X-Poedit-Language: Ukrainian\n" "X-Poedit-Country: UKRAINE\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "Невідома команда" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "Всі доріжки" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "Застереження: невідоме поле кольору - %s\n" +msgid "Albums" +msgstr "Альбом" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "Терміналу бракує підтримки зміни кольорів" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "Альбоми виконавця: %s" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "Терміналу бракує підтримки можливостей кольорів" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "Додається '%s' до переліку програвання" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "Всі виконавці" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "Клавіша %s призначена до %s та %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "Екран конфігурації клавіш" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "Вийти" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "Перемістити курсор доверху" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "Перемістити курсор донизу" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "Перемістити курсор на початок екрану" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "Перемістити курсор до середини екрану" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "Перемістити курсор в кінець екрану" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "Перемістити курсор на початок переліку" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "Перемістити курсор в кінець переліку" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "Сторінка догори" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "Сторінка донизу" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "Вибір обсягу" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "Прогорнути один рядок донизу" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "Прогорнути один рядок догори" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "Прогорнути півекрану догори" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "Прогорнути півекрану донизу" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "Вибрати пісню, що зараз програється" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "Екран допомоги" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "Екран призначення клавіш" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "Екран перегляду" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "Програти чи увійти до каталогу" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "Призупинити" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "Зупинити" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "Обрізати" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "Наступна доріжка" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "Попередня доріжка" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "Шукати попереду" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "Шукати позаду" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "Збільшити гучність" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "Зменшити гучність" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "Вибрати чи зняти виділення пісні в переліку програвання" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "Вибрати всі перелічені елементи" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "Видалити пісню з переліку програвання" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "Перемкнути режим повторення" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "Перемкнути випадковий режим" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "Перемкнути режим повторення однієї пісні" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "Перемкнути режим вичерпання" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "Перемкнути режим плавного переходу" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "Розпочати оновлення бази даних музики" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "Додати url-посилання чи файл до переліку програвання" +msgid "Append song to queue" +msgstr "Долучити пісню до переліку програвання" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "Перейти до кореневої теки" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "Перейти до батьківської теки" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "Визначити розміщення пісні в оглядачі" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "Перемістити елемент догори" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "Перемістити елемент донизу" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "Оновити екран" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "Перемкнути режим пошуку" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "Перемкнути режим автоматичного центрування" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "Наступний екран" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "Попередній екран" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "Поміняти останні екрани" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "Знайти попереду" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "Знайти попереду наступне" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "Знайти позаду" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "Знайти позаду попереднє" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "Перейти до" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "Екран виконавців" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "Екран пошуку" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "Змінити режим пошуку" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "Переглянути вибрану та пісню, що зараз програється" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "Екран текстів пісень" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "Припинити дію" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "Оновити текст пісні" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "Екран виходів" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "Наступний екран" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "Не визначений" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Space" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Up" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Down" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Left" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Right" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "Клавіша %s призначена до %s та %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "Помилка" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "Неправильне визначення гарячої клавіші" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "Невідома команда" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "Незавершена конфігурація гарячих клавіш" @@ -443,803 +378,872 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "Неправильний тип показу часу" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "Відсутній \"=\"" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "Неправильна назва кольору" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "Незавершене визначення кольору" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "Неправильне число" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "Неправильне визначення кольору" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "Невідома назва екрану" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "Помилковий режим пошуку" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "Невідомий режим пошуку" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "Невідомий конфігураційний параметр" -#: src/i18n.h:42 -msgid "y" -msgstr "y" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "Терміналу бракує підтримки зміни кольорів" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "Видалити цей елемент неможливо" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "Вибір обсягу вимкнений" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "Видалити перелік програвання" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "Вибір обсягу увімкнений" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "Перервано" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "Встановлення з'єднання з %s... [Натисніть %s щоб припинити]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "Перелік програвання видалений" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "Огляд" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "Помилка: MPD версії %d.%d.%d застаріла (необхідна %s)" +msgid "Loading playlist '%s'" +msgstr "Завантажується перелік програвання %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "натисніть %s щоб редагувати клавіші" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "Переміщення" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "Oleksandr Kovalenko <alx.kovalenko@gmail.com>" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "Загальні" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "Програти" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "По центру" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "Ввести теку чи вибрати та програти пісню" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "Замінити %s [%s/%s] ? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "Видалити перелік програвання" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "Перервано" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "Пошук" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "Збережений %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "Вибрати та програти" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "Режим повторення увімкнений" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "Переглянути текст пісні" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "Режим повторення вимкнений" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(Пере)завантажити текст пісні" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "Режим випадкового програвання увімкнений" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "Припинити отримання" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "Режим випадкового програвання вимкнений" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "Завантажити текст для пісні, що зараз програється" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "Режим повторення однієї доріжки увімкнений" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "Немає збереженого тексту пісні" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "Режим повторення однієї доріжки вимкнений" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "Зберегти текст пісні" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "Режим вичерпання увімкнений" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "Видалити збережений текст пісні" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "Режим вичерпання вимкнений" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "Увімкнути/вимкнути вихід" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "Плавний перехід: %dс" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "База даних оновлена" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "Екран призначення клавіш" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "Режим пошуку: завернутий (розділений???)" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "Редагувати призначену клавішу для вибраної команди" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "Режим пошуку: звичайний" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "Вилучити вибране призначення клавіші" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "Режим автоматичного центрування: увімкнено" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "Додати нову клавішу" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "Режим автоматичного центрування: вимкнено" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "На рівень вище" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "Всі доріжки" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "Застосувати та зберегти зміни" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "Всі виконавці" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "Допомога" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "Альбоми виконавця: %s" +#: src/i18n.h:43 +msgid "y" +msgstr "y" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "Всі доріжки виконавця: %s" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "Альбом: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "Не визначений" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "Доріжки без альбому виконавця: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Space" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "Додається альбом %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Up" + +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Down" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Left" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Right" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "Додається %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "Завантажується перелік програвання %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "Додається '%s' до переліку програвання" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "Вибір обсягу вимкнений" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "Вибір обсягу увімкнений" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "Немає тексту пісні" -#: src/screen_chat.cxx:59 +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "Тексти пісень" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "завантаження..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "Виконується оновлення бази даних..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "Оновлення бази даних %s розпочате" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "Текст пісні збережений" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "Початок оновлення бази даних" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "Текст пісні видалений" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "Видалити цей елемент неможливо" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "Немає збереженого тексту пісні" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "Видалити перелік програвання" - -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "Перелік програвання видалений" +msgid "Connecting to %s" +msgstr "Встановлене з'єднання з %s" -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "Огляд" - -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "Знайти" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "Помилка: MPD версії %d.%d.%d застаріла (необхідна %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "Знайти позаду" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "Oleksandr Kovalenko <alx.kovalenko@gmail.com>" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "Перейти" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "Вихід '%s' увімкнений" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "Не вдається знайти '%s'" +msgid "Output '%s' disabled" +msgstr "Вихід '%s' вимкнений" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "Переміщення" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "Виходи" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "Загальні" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "Програти" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "Перемістити пісню вгору" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "Додати" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "Перемістити пісню вниз" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "По центру" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "Ввести теку чи вибрати та програти пісню" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "Долучити пісню до переліку програвання" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "Замінити %s [%s/%s] ? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "Видалити перелік програвання" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "Збережений %s" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "Пошук" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "Всі доріжки виконавця: %s" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "Вибрати та програти" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "Альбом" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "Переглянути текст пісні" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "Доріжки без альбому виконавця: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(Пере)завантажити текст пісні" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "Виконавець" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "Припинити отримання" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "Виконується оновлення бази даних..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "Завантажити текст для пісні, що зараз програється" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "Оновлення бази даних %s розпочате" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "Немає збереженого тексту пісні" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "Початок оновлення бази даних" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "Зберегти текст пісні" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "Режим повторення увімкнений" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "Видалити збережений текст пісні" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "Режим повторення вимкнений" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "Увімкнути/вимкнути вихід" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "Режим випадкового програвання увімкнений" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "Режим випадкового програвання вимкнений" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "Екран призначення клавіш" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "Режим повторення однієї доріжки увімкнений" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "Редагувати призначену клавішу для вибраної команди" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "Режим повторення однієї доріжки вимкнений" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "Вилучити вибране призначення клавіші" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "Режим вичерпання увімкнений" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "Додати нову клавішу" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "Режим вичерпання вимкнений" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "На рівень вище" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "Плавний перехід: %dс" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "Застосувати та зберегти зміни" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "База даних оновлена" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "Допомога" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "Режим пошуку: завернутий (розділений???)" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "Помилка: екран занадто маленький" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "Режим пошуку: звичайний" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "Ви маєте нову прив'язку клавіші" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "Режим автоматичного центрування: увімкнено" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "Прив'язки клавіш не змінені." +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "Режим автоматичного центрування: вимкнено" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "Помилка: неможливо створити теку ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "Знайти" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "Помилка: %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "Знайти позаду" + +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "Перейти" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "Записаний %s" +msgid "Unable to find '%s'" +msgstr "Не вдається знайти '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "Видалена" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "Введіть нову клавішу для %s: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "Помилка: клавіша %s вже використовується для %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "Призначення %s до %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "===> Застосування прив'язки клавіші " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "===> Застосування та збереження прив'язки клавіші " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "Додати нову клавішу" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "Примітка: ви забули \"Застосувати\" зроблені зміни?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "Редагувати прив'язки клавіш" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "Редагувати клавішу для %s" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "Немає тексту пісні" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "Тексти пісень" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "завантаження..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "Ви маєте нову прив'язку клавіші" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "Прив'язки клавіш не змінені." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "Незавершена конфігурація гарячих клавіш" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "Текст пісні збережений" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "Текст пісні видалений" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "Немає збереженого тексту пісні" +msgid "Wrote %s" +msgstr "Записаний %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "Вихід '%s' увімкнений" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "===> Застосування прив'язки клавіші " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "Вихід '%s' вимкнений" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "===> Застосування та збереження прив'язки клавіші " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "Виходи" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "Редагувати прив'язки клавіш" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "Додати" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "Примітка: ви забули \"Застосувати\" зроблені зміни?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "Пароль" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "artist" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "album" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "title" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "track" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "name" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "genre" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "date" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "composer" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "performer" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "comment" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "file" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "Назва" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "Виконавець" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "Альбом" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "Назва файлу" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "Виконавець + Назва" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "Немає аргументу для пошуку за міткою %s" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "Неправильна мітка %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 -#, c-format -msgid "Press %s for a new search" -msgstr "Натисніть %s для нового пошуку" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "Пошук: %s" - -#: src/screen_search.cxx:430 +#: src/SearchPage.cxx:284 #, c-format -msgid "Search: Results for %s [%s]" -msgstr "Пошук: наслідки пошуку для %s [%s]" +msgid "No argument for search tag %s" +msgstr "Немає аргументу для пошуку за міткою %s" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "Пошук: натисніть %s для нового пошуку [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "Пошук" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "Режим пошуку: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "Тривалість" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "Композитор" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "Назва" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "Диск" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "Доріжка" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "Дата" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "Жанр" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "Примітка" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "Шлях" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "Бітрейт" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "Кількість виконавців" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "Кількість альбомів" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "Кількість пісень" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "Час роботи" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "Останнє оновлення бази даних" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "Час програвання" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "Час програвання всієї БД" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "Переглядач пісень" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "Статистика MPD" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "Вибрана пісня" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "Пісня, що зараз програється" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d кбіт/с" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "Замінити %s [%s/%s] ? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "Пароль" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "Програється:" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "[Призупинено]" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "Невідома команда" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "Застереження: невідоме поле кольору - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "Терміналу бракує підтримки можливостей кольорів" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "Гучність недоступна" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "Гучність %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "Додати url-посилання чи файл до переліку програвання" + +#~ msgid "Move song up" +#~ msgstr "Перемістити пісню вгору" + +#~ msgid "Move song down" +#~ msgstr "Перемістити пісню вниз" + +#~ msgid "Press %s for a new search" +#~ msgstr "Натисніть %s для нового пошуку" + +#~ msgid "Search: %s" +#~ msgstr "Пошук: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "Пошук: наслідки пошуку для %s [%s]" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "Пошук: натисніть %s для нового пошуку [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "Встановлення з'єднання з %s... [Натисніть %s щоб припинити]" + +#~ msgid "press %s for the key editor" +#~ msgstr "натисніть %s щоб редагувати клавіші" + +#~ msgid "Album: %s - %s" +#~ msgstr "Альбом: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "Додається альбом %s..." + +#~ msgid "Adding %s..." +#~ msgstr "Додається %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "Помилка: екран занадто маленький" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "Помилка: неможливо створити теку ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "Помилка: %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "Замінити %s [%s/%s] ? " + #~ msgid "unknown" #~ msgstr "невідомо" @@ -1249,9 +1253,6 @@ #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "Застереження: невідомий колір - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "Встановлене з'єднання з %s" - #~ msgid "Shuffled playlist" #~ msgstr "Перемішаний перелік програвання"
View file
ncmpc-0.30.tar.xz/po/zh_CN.po -> ncmpc-0.32.tar.xz/po/zh_CN.po
Changed
@@ -7,7 +7,7 @@ msgstr "" "Project-Id-Version: ncmpc\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-02-19 11:10+0100\n" +"POT-Creation-Date: 2018-09-17 22:53+0200\n" "PO-Revision-Date: 2011-05-12 15:00+0000\n" "Last-Translator: snowdream <yanghui1986527@gmail.com>\n" "Language-Team: Simplified Chinese <zh_CN@li.org>\n" @@ -18,423 +18,358 @@ "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n" "X-Generator: Launchpad (build 13265)\n" -#: src/colors.cxx:156 -#, fuzzy -msgid "Unknown color" -msgstr "未知命令" +#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126 +msgid "All tracks" +msgstr "全部音轨" -#: src/colors.cxx:195 +#: src/AlbumListPage.cxx:144 #, fuzzy -msgid "Unknown color field" -msgstr "警告: 未知的颜色块 - %s\n" +msgid "Albums" +msgstr "专辑" -#: src/colors.cxx:228 -msgid "Terminal lacks support for changing colors" -msgstr "终端不支持改变颜色" +#: src/AlbumListPage.cxx:146 +#, c-format +msgid "Albums of artist: %s" +msgstr "%s 的专辑:" -#: src/colors.cxx:237 -msgid "Terminal lacks color capabilities" -msgstr "终端不支持彩色" +#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137 +#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273 +#, fuzzy, c-format +msgid "Adding '%s' to queue" +msgstr "添加 '%s' 到播放列表" + +#: src/ArtistListPage.cxx:114 +msgid "All artists" +msgstr "全部艺术家" + +#: src/Bindings.cxx:79 src/Bindings.cxx:85 +#, c-format +msgid "Key %s assigned to %s and %s" +msgstr "按键 %s 分配给 %s 和 %s" + +#: src/ChatPage.cxx:57 src/ChatPage.cxx:179 +msgid "Chat" +msgstr "" + +#: src/ChatPage.cxx:160 +msgid "Your message" +msgstr "" + +#: src/ChatPage.cxx:169 +msgid "Message could not be sent" +msgstr "" -#: src/command.cxx:63 +#: src/Command.cxx:29 msgid "Key configuration screen" msgstr "快捷键设置页面" -#: src/command.cxx:66 +#: src/Command.cxx:32 msgid "Quit" msgstr "退出" -#: src/command.cxx:70 +#: src/Command.cxx:36 msgid "Move cursor up" msgstr "向上移动光标" -#: src/command.cxx:72 +#: src/Command.cxx:38 msgid "Move cursor down" msgstr "向下移动光标" -#: src/command.cxx:74 +#: src/Command.cxx:40 msgid "Move cursor to the top of screen" msgstr "光标移到顶部" -#: src/command.cxx:76 +#: src/Command.cxx:42 msgid "Move cursor to the middle of screen" msgstr "光标移到中部" -#: src/command.cxx:78 +#: src/Command.cxx:44 msgid "Move cursor to the bottom of screen" msgstr "光标移到底部" -#: src/command.cxx:80 +#: src/Command.cxx:46 msgid "Move cursor to the top of the list" msgstr "光标移到列表顶部" -#: src/command.cxx:82 +#: src/Command.cxx:48 msgid "Move cursor to the bottom of the list" msgstr "光标移到列表底部" -#: src/command.cxx:84 +#: src/Command.cxx:50 msgid "Page up" msgstr "上一页" -#: src/command.cxx:86 +#: src/Command.cxx:52 msgid "Page down" msgstr "下一页" -#: src/command.cxx:88 +#: src/Command.cxx:54 msgid "Range selection" msgstr "区段选择" -#: src/command.cxx:90 +#: src/Command.cxx:56 msgid "Scroll down one line" msgstr "向下滚动一行" -#: src/command.cxx:92 +#: src/Command.cxx:58 msgid "Scroll up one line" msgstr "向上滚动一行" -#: src/command.cxx:94 +#: src/Command.cxx:60 msgid "Scroll up half a screen" msgstr "向上滚动半屏" -#: src/command.cxx:96 +#: src/Command.cxx:62 msgid "Scroll down half a screen" msgstr "向下滚动半屏" -#: src/command.cxx:98 +#: src/Command.cxx:64 msgid "Select currently playing song" msgstr "选择当前播放曲目" -#: src/command.cxx:103 +#: src/Command.cxx:69 msgid "Help screen" msgstr "帮助页面" -#: src/command.cxx:105 src/screen_help.cxx:119 +#: src/Command.cxx:71 src/HelpPage.cxx:140 #, fuzzy msgid "Queue screen" msgstr "键定义页面" -#: src/command.cxx:107 src/screen_help.cxx:134 +#: src/Command.cxx:73 src/HelpPage.cxx:155 msgid "Browse screen" msgstr "目录页面" -#: src/command.cxx:112 +#: src/Command.cxx:78 msgid "Play/Enter directory" msgstr "播放/进入 目录" -#: src/command.cxx:114 +#: src/Command.cxx:80 msgid "Pause" msgstr "暂停" -#: src/command.cxx:116 +#: src/Command.cxx:82 msgid "Stop" msgstr "停止" -#: src/command.cxx:118 +#: src/Command.cxx:84 msgid "Crop" msgstr "剪切" -#: src/command.cxx:120 +#: src/Command.cxx:86 msgid "Next track" msgstr "下一曲" -#: src/command.cxx:122 +#: src/Command.cxx:88 msgid "Previous track" msgstr "上一曲" -#: src/command.cxx:124 +#: src/Command.cxx:90 msgid "Seek forward" msgstr "快进" -#: src/command.cxx:126 +#: src/Command.cxx:92 msgid "Seek backward" msgstr "快退" -#: src/command.cxx:128 +#: src/Command.cxx:94 msgid "Increase volume" msgstr "增加音量" -#: src/command.cxx:130 +#: src/Command.cxx:96 msgid "Decrease volume" msgstr "降低音量" -#: src/command.cxx:132 +#: src/Command.cxx:98 #, fuzzy msgid "Select/deselect song in queue" msgstr "添加/删除选中文件到播放列表" -#: src/command.cxx:134 +#: src/Command.cxx:100 msgid "Select all listed items" msgstr "选中所有列出的项" -#: src/command.cxx:136 +#: src/Command.cxx:102 #, fuzzy msgid "Delete song from queue" msgstr "从播放列表中删除歌曲" -#: src/command.cxx:138 +#: src/Command.cxx:104 msgid "Shuffle queue" msgstr "" -#: src/command.cxx:140 +#: src/Command.cxx:106 msgid "Clear queue" msgstr "" -#: src/command.cxx:142 +#: src/Command.cxx:108 msgid "Toggle repeat mode" msgstr "切换重复模式" -#: src/command.cxx:144 +#: src/Command.cxx:110 msgid "Toggle random mode" msgstr "切换随机模式" -#: src/command.cxx:146 +#: src/Command.cxx:112 msgid "Toggle single mode" msgstr "切换单曲模式" -#: src/command.cxx:148 +#: src/Command.cxx:114 msgid "Toggle consume mode" msgstr "切换消除模式" -#: src/command.cxx:150 +#: src/Command.cxx:116 msgid "Toggle crossfade mode" msgstr "切换淡入淡出模式" -#: src/command.cxx:152 +#: src/Command.cxx:118 msgid "Start a music database update" msgstr "更新此数据库" -#: src/command.cxx:154 +#: src/Command.cxx:120 msgid "Save queue" msgstr "" -#: src/command.cxx:156 +#: src/Command.cxx:122 src/HelpPage.cxx:174 #, fuzzy -msgid "Add url/file to queue" -msgstr "添加链接/路径到播放列表" +msgid "Append song to queue" +msgstr "添加到播放列表" -#: src/command.cxx:159 +#: src/Command.cxx:125 msgid "Go to root directory" msgstr "进入根目录" -#: src/command.cxx:161 +#: src/Command.cxx:127 msgid "Go to parent directory" msgstr "进入父目录" -#: src/command.cxx:164 +#: src/Command.cxx:130 msgid "Locate song in browser" msgstr "定位到音乐所在目录" -#: src/command.cxx:168 +#: src/Command.cxx:134 msgid "Move item up" msgstr "上移" -#: src/command.cxx:170 +#: src/Command.cxx:136 msgid "Move item down" msgstr "下移" -#: src/command.cxx:172 +#: src/Command.cxx:138 msgid "Refresh screen" msgstr "刷新页面" #. translators: toggle between wrapping and non-wrapping #. search -#: src/command.cxx:179 +#: src/Command.cxx:145 msgid "Toggle find mode" msgstr "切换查找模式" #. translators: the auto center mode always centers the song #. currently being played -#: src/command.cxx:183 +#: src/Command.cxx:149 msgid "Toggle auto center mode" msgstr "切换自动居中模式" -#: src/command.cxx:188 +#: src/Command.cxx:154 msgid "Next screen" msgstr "下一页面" -#: src/command.cxx:190 +#: src/Command.cxx:156 msgid "Previous screen" msgstr "上一页面" -#: src/command.cxx:192 +#: src/Command.cxx:158 msgid "Swap to most recent screen" msgstr "切换到最近一个页面" -#: src/command.cxx:197 +#: src/Command.cxx:163 msgid "Forward find" msgstr "前向查找" -#: src/command.cxx:199 +#: src/Command.cxx:165 msgid "Forward find next" msgstr "查找下一个" -#: src/command.cxx:201 +#: src/Command.cxx:167 msgid "Backward find" msgstr "后向查找" -#: src/command.cxx:203 +#: src/Command.cxx:169 msgid "Backward find previous" msgstr "查找前一个" #. translators: this queries the user for a string #. * and jumps directly (while the user is typing) #. * to the entry which begins with this string -#: src/command.cxx:208 +#: src/Command.cxx:174 msgid "Jump to" msgstr "跳转到" -#: src/command.cxx:214 +#: src/Command.cxx:180 msgid "Artist screen" msgstr "艺术家页面" -#: src/command.cxx:218 src/screen_help.cxx:148 +#: src/Command.cxx:184 src/HelpPage.cxx:169 msgid "Search screen" msgstr "查找页面" -#: src/command.cxx:220 +#: src/Command.cxx:186 msgid "Change search mode" msgstr "更改搜索模式" -#: src/command.cxx:224 +#: src/Command.cxx:190 msgid "View the selected and the currently playing song" msgstr "参看选择当前播放的曲目" -#: src/command.cxx:228 src/screen_help.cxx:160 +#: src/Command.cxx:194 src/HelpPage.cxx:181 msgid "Lyrics screen" msgstr "歌词页面" #. translators: interrupt the current background action, #. e.g. stop loading lyrics from the internet -#: src/command.cxx:232 +#: src/Command.cxx:198 msgid "Interrupt action" msgstr "中断后台操作" -#: src/command.cxx:234 +#: src/Command.cxx:200 msgid "Update Lyrics" msgstr "更新歌词" -#: src/command.cxx:238 +#: src/Command.cxx:204 msgid "Edit the current item" msgstr "" -#: src/command.cxx:243 src/screen_help.cxx:175 +#: src/Command.cxx:209 src/HelpPage.cxx:196 msgid "Outputs screen" msgstr "输出页面" -#: src/command.cxx:248 src/screen_help.cxx:182 +#: src/Command.cxx:214 src/HelpPage.cxx:203 #, fuzzy msgid "Chat screen" msgstr "下一页面" -#: src/command.cxx:290 -msgid "Undefined" -msgstr "未定义的" - -#: src/command.cxx:292 -msgid "Space" -msgstr "Space" - -#: src/command.cxx:294 -msgid "Enter" -msgstr "Enter" - -#: src/command.cxx:296 -msgid "Backspace" -msgstr "Backspace" - -#: src/command.cxx:298 -msgid "Delete" -msgstr "Delete" - -#: src/command.cxx:300 -msgid "Up" -msgstr "Up" - -#: src/command.cxx:302 -msgid "Down" -msgstr "Down" - -#: src/command.cxx:304 -msgid "Left" -msgstr "Left" - -#: src/command.cxx:306 -msgid "Right" -msgstr "Right" - -#: src/command.cxx:308 -msgid "Home" -msgstr "Home" - -#: src/command.cxx:310 -msgid "End" -msgstr "End" - -#: src/command.cxx:312 -msgid "PageDown" -msgstr "PageDown" - -#: src/command.cxx:314 -msgid "PageUp" -msgstr "PageUp" - -#: src/command.cxx:316 -msgid "Tab" -msgstr "Tab" - -#: src/command.cxx:318 -msgid "Shift+Tab" -msgstr "Shift+Tab" - -#: src/command.cxx:320 -msgid "Esc" -msgstr "Esc" - -#: src/command.cxx:322 -msgid "Insert" -msgstr "Insert" - -#: src/command.cxx:326 -#, c-format -msgid "F%d" -msgstr "" - -#: src/command.cxx:330 -#, c-format -msgid "Ctrl-%c" -msgstr "" - -#: src/command.cxx:332 -#, c-format -msgid "Alt-%c" -msgstr "" - -#: src/command.cxx:477 src/command.cxx:483 -#, c-format -msgid "Key %s assigned to %s and %s" -msgstr "按键 %s 分配给 %s 和 %s" - #. To translators: prefix for error messages -#: src/conf.cxx:121 +#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423 msgid "Error" msgstr "错误" -#: src/conf.cxx:135 +#: src/conf.cxx:128 msgid "Word expected" msgstr "" -#: src/conf.cxx:152 src/conf.cxx:161 +#: src/conf.cxx:145 src/conf.cxx:154 msgid "Malformed hotkey definition" msgstr "不正确的快捷键定义" #. the hotkey configuration contains an unknown #. command -#: src/conf.cxx:185 +#: src/conf.cxx:178 msgid "Unknown command" msgstr "未知命令" #. the hotkey configuration line is incomplete -#: src/conf.cxx:198 +#: src/conf.cxx:191 msgid "Incomplete hotkey configuration" msgstr "不完整的快捷键配置" @@ -442,817 +377,883 @@ #. "elapsed" or "remaining" time of a song being #. played; in this case, the configuration file #. contained an invalid setting -#: src/conf.cxx:234 +#: src/conf.cxx:227 msgid "Bad time display type" msgstr "错误的时间显示格式" #. an equals sign '=' was expected while parsing a #. configuration file line -#: src/conf.cxx:247 src/conf.cxx:427 +#: src/conf.cxx:240 src/conf.cxx:418 msgid "Missing '='" msgstr "缺少 '='" -#: src/conf.cxx:298 +#: src/conf.cxx:291 msgid "Bad color name" msgstr "错误的颜色名" -#: src/conf.cxx:308 +#: src/conf.cxx:301 msgid "Incomplete color definition" msgstr "不完整的颜色定义" -#: src/conf.cxx:314 +#: src/conf.cxx:307 msgid "Invalid number" msgstr "无效的数字" -#: src/conf.cxx:322 +#: src/conf.cxx:315 msgid "Malformed color definition" msgstr "不正确的颜色定义" #. an unknown screen name was specified in the #. configuration file -#: src/conf.cxx:356 +#: src/conf.cxx:353 msgid "Unknown screen name" msgstr "未知的页面名" -#: src/conf.cxx:384 +#: src/conf.cxx:378 msgid "Invalid search mode" msgstr "无效的搜索模式" -#: src/conf.cxx:407 +#: src/conf.cxx:398 msgid "Unknown search mode" msgstr "未知的搜索模式" -#: src/conf.cxx:597 +#: src/conf.cxx:581 msgid "Unknown configuration parameter" msgstr "未知的配置参数" -#: src/i18n.h:42 -msgid "y" -msgstr "y" +#: src/CustomColors.cxx:56 +msgid "Terminal lacks support for changing colors" +msgstr "终端不支持改变颜色" -#: src/i18n.h:43 -msgid "n" -msgstr "n" +#. translators: the "delete" command is only possible +#. for playlists; the user attempted to delete a song +#. or a directory or something else +#: src/FileBrowserPage.cxx:260 +msgid "Deleting this item is not possible" +msgstr "此项目不能被删除" -#: src/list_window.cxx:554 -msgid "Range selection disabled" -msgstr "禁用区段选取" +#: src/FileBrowserPage.cxx:268 +#, fuzzy, c-format +msgid "Delete playlist %s?" +msgstr "删除播放列表" -#: src/list_window.cxx:559 -msgid "Range selection enabled" -msgstr "开启区段选取" +#. translators: a dialog was aborted by the user +#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110 +#: src/screen_keydef.cxx:182 +msgid "Aborted" +msgstr "已放弃" -#: src/Main.cxx:161 -#, c-format -msgid "Connecting to %s... [Press %s to abort]" -msgstr "连接到 %s... [按 %s 键取消]" +#. translators: MPD deleted the playlist, as requested by the +#. user +#: src/FileBrowserPage.cxx:286 +msgid "Playlist deleted" +msgstr "播放列表已删除" + +#. translators: caption of the browser screen +#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395 +msgid "Browse" +msgstr "目录" -#: src/Main.cxx:182 +#: src/FileListPage.cxx:121 #, fuzzy, c-format -msgid "Error: MPD version %d.%d.%d is too old (%s needed)" -msgstr "错误: MPD版本%d.%d.%d过低(需要 %s)" +msgid "Loading playlist '%s'" +msgstr "加载播放列表 %s..." -#: src/Main.cxx:317 -#, c-format -msgid "press %s for the key editor" -msgstr "按 %s 编辑快捷键" +#: src/HelpPage.cxx:60 +msgid "Movement" +msgstr "移动" -#. To translators: these credits are shown -#. when ncmpc is started with "--version" -#: src/options.cxx:209 src/options.cxx:212 -msgid "translator-credits" -msgstr "" -"Launchpad Contributions:\n" -" Gao Jie https://launchpad.net/~kindmail\n" -" Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-" -"deactivatedaccount\n" -" snowdream https://launchpad.net/~yanghui" +#: src/HelpPage.cxx:105 +msgid "Global" +msgstr "全局设定" -#: src/player_command.cxx:174 src/screen_queue.cxx:623 -msgid "Shuffled queue" -msgstr "" +#: src/HelpPage.cxx:142 +msgid "Play" +msgstr "播放" -#: src/player_command.cxx:184 -msgid "Cleared queue" -msgstr "" +#: src/HelpPage.cxx:149 +msgid "Center" +msgstr "当前播放项居中显示" -#. query the user for a filename -#: src/save_playlist.cxx:109 -msgid "Save queue as" -msgstr "" +#: src/HelpPage.cxx:157 +msgid "Enter directory/Select and play song" +msgstr "进入选中目录/播放选中歌曲" -#: src/save_playlist.cxx:140 -#, fuzzy, c-format -msgid "Replace %s?" -msgstr "替换 %s [%s/%s]? " +#: src/HelpPage.cxx:161 +msgid "Delete playlist" +msgstr "删除播放列表" -#. translators: a dialog was aborted by the user -#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271 -#: src/screen_lyrics.cxx:370 -msgid "Aborted" -msgstr "已放弃" +#: src/HelpPage.cxx:171 +#, fuzzy +msgid "New search" +msgstr "查找" -#. success -#: src/save_playlist.cxx:171 -#, c-format -msgid "Saved %s" -msgstr "保存到 %s" +#: src/HelpPage.cxx:172 +msgid "Select and play" +msgstr "选中并播放" -#: src/screen.cxx:154 -msgid "Repeat mode is on" -msgstr "重复播放 开" +#: src/HelpPage.cxx:183 +msgid "View Lyrics" +msgstr "查看歌词" -#: src/screen.cxx:155 -msgid "Repeat mode is off" -msgstr "重复播放 关" +#: src/HelpPage.cxx:184 +msgid "(Re)load lyrics" +msgstr "(重新)加载歌词" -#: src/screen.cxx:159 -msgid "Random mode is on" -msgstr "随机播放 开" +#. to translators: this hotkey aborts the retrieval of lyrics +#. from the server +#: src/HelpPage.cxx:187 +msgid "Interrupt retrieval" +msgstr "中断歌词下载" -#: src/screen.cxx:160 -msgid "Random mode is off" -msgstr "随机播放 关" +#: src/HelpPage.cxx:188 +msgid "Download lyrics for currently playing song" +msgstr "为当前曲目下载歌词" -#. "single" mode means -#. that MPD will -#. automatically stop -#. after playing one -#. single song -#: src/screen.cxx:169 -msgid "Single mode is on" -msgstr "单曲播放 开" +#: src/HelpPage.cxx:189 +#, fuzzy +msgid "Add or edit lyrics" +msgstr "没有歌词" -#: src/screen.cxx:170 -msgid "Single mode is off" -msgstr "单曲播放 关" +#: src/HelpPage.cxx:190 +msgid "Save lyrics" +msgstr "保存歌词" -#. "consume" mode means -#. that MPD removes each -#. song which has -#. finished playing -#: src/screen.cxx:178 -msgid "Consume mode is on" -msgstr "消除模式 开" +#: src/HelpPage.cxx:191 +msgid "Delete saved lyrics" +msgstr "删除已保存歌词" -#: src/screen.cxx:179 -msgid "Consume mode is off" -msgstr "消除模式 关" +#: src/HelpPage.cxx:198 +msgid "Enable/disable output" +msgstr "启用/禁用音频输出" -#: src/screen.cxx:182 -#, c-format -msgid "Crossfade %d seconds" -msgstr "淡入淡出 %d 秒" +#: src/HelpPage.cxx:205 +msgid "Write a message" +msgstr "" -#: src/screen.cxx:194 -msgid "Database updated" -msgstr "数据库已更新" +#: src/HelpPage.cxx:210 +msgid "Keydef screen" +msgstr "键定义页面" -#: src/screen.cxx:226 -msgid "Find mode: Wrapped" -msgstr "查找模式: 循环" +#: src/HelpPage.cxx:212 +msgid "Edit keydefs for selected command" +msgstr "为选择的命令定义快捷键" -#: src/screen.cxx:227 -msgid "Find mode: Normal" -msgstr "查找模式: 普通" +#: src/HelpPage.cxx:213 +msgid "Remove selected keydef" +msgstr "去除选择的快捷键设定" -#: src/screen.cxx:232 -msgid "Auto center mode: On" -msgstr "自动居中模式: 开" +#: src/HelpPage.cxx:214 +#, fuzzy +msgid "Add a keydef" +msgstr "添加新的键" -#: src/screen.cxx:233 -msgid "Auto center mode: Off" -msgstr "自动居中模式: 关" +#: src/HelpPage.cxx:215 +msgid "Go up a level" +msgstr "上一级" -#: src/screen_artist.cxx:72 src/screen_artist.cxx:352 -msgid "All tracks" -msgstr "全部音轨" +#: src/HelpPage.cxx:216 +msgid "Apply and save changes" +msgstr "保存设置" -#: src/screen_artist.cxx:384 -msgid "All artists" -msgstr "全部艺术家" +#: src/HelpPage.cxx:245 src/HelpPage.cxx:329 +msgid "Help" +msgstr "帮助" -#: src/screen_artist.cxx:389 -#, c-format -msgid "Albums of artist: %s" -msgstr "%s 的专辑:" +#: src/i18n.h:43 +msgid "y" +msgstr "y" -#: src/screen_artist.cxx:398 -#, c-format -msgid "All tracks of artist: %s" -msgstr "%s 的所有曲目" +#: src/i18n.h:44 +msgid "n" +msgstr "n" -#: src/screen_artist.cxx:401 -#, c-format -msgid "Album: %s - %s" -msgstr "专辑: %s - %s" +#: src/KeyName.cxx:31 +msgid "Undefined" +msgstr "未定义的" -#: src/screen_artist.cxx:405 -#, c-format -msgid "Tracks of no album of artist: %s" -msgstr "艺术家的无专辑曲目: %s" +#: src/KeyName.cxx:33 +msgid "Space" +msgstr "Space" -#: src/screen_artist.cxx:450 -#, c-format -msgid "Adding album %s..." -msgstr "添加专辑 %s..." +#: src/KeyName.cxx:35 +msgid "Enter" +msgstr "Enter" + +#: src/KeyName.cxx:37 +msgid "Backspace" +msgstr "Backspace" + +#: src/KeyName.cxx:39 +msgid "Delete" +msgstr "Delete" + +#: src/KeyName.cxx:41 +msgid "Up" +msgstr "Up" -#: src/screen_artist.cxx:452 +#: src/KeyName.cxx:43 +msgid "Down" +msgstr "Down" + +#: src/KeyName.cxx:45 +msgid "Left" +msgstr "Left" + +#: src/KeyName.cxx:47 +msgid "Right" +msgstr "Right" + +#: src/KeyName.cxx:49 +msgid "Home" +msgstr "Home" + +#: src/KeyName.cxx:51 +msgid "End" +msgstr "End" + +#: src/KeyName.cxx:53 +msgid "PageDown" +msgstr "PageDown" + +#: src/KeyName.cxx:55 +msgid "PageUp" +msgstr "PageUp" + +#: src/KeyName.cxx:57 +msgid "Tab" +msgstr "Tab" + +#: src/KeyName.cxx:59 +msgid "Shift+Tab" +msgstr "Shift+Tab" + +#: src/KeyName.cxx:61 +msgid "Esc" +msgstr "Esc" + +#: src/KeyName.cxx:63 +msgid "Insert" +msgstr "Insert" + +#: src/KeyName.cxx:71 #, c-format -msgid "Adding %s..." -msgstr "添加 %s..." +msgid "Ctrl-%c" +msgstr "" -#: src/screen_browser.cxx:122 +#: src/KeyName.cxx:73 #, c-format -msgid "Loading playlist %s..." -msgstr "加载播放列表 %s..." +msgid "Alt-%c" +msgstr "" -#: src/screen_browser.cxx:163 src/screen_browser.cxx:255 -#: src/screen_browser.cxx:279 -#, fuzzy, c-format -msgid "Adding '%s' to queue" -msgstr "添加 '%s' 到播放列表" +#: src/ListWindow.cxx:491 +msgid "Range selection disabled" +msgstr "禁用区段选取" + +#: src/ListWindow.cxx:496 +msgid "Range selection enabled" +msgstr "开启区段选取" + +#. translators: no lyrics were found for the song +#: src/LyricsPage.cxx:236 +msgid "No lyrics" +msgstr "无歌词" -#: src/screen_chat.cxx:59 +#: src/LyricsPage.cxx:254 #, c-format -msgid "" -"connected to MPD %u.%u.%u (you need at least \n" -"version 0.17.0 to use the chat feature)" +msgid "Lyrics timeout occurred after %d seconds" msgstr "" -#: src/screen_chat.cxx:177 -msgid "Your message" +#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354 +#: src/LyricsPage.cxx:490 +msgid "Lyrics" +msgstr "歌词" + +#. translators: this message is displayed +#. while data is retrieved +#: src/LyricsPage.cxx:340 +msgid "loading..." +msgstr "正在载入..." + +#: src/LyricsPage.cxx:361 +msgid "Editor not configured" msgstr "" -#: src/screen_chat.cxx:186 -msgid "Message could not be sent" +#: src/LyricsPage.cxx:368 +msgid "Do you really want to start an editor and edit these lyrics?" msgstr "" -#: src/screen_chat.cxx:199 src/title_bar.cxx:91 -msgid "Chat" +#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410 +msgid "Can't start editor" msgstr "" -#: src/screen_client.cxx:41 -msgid "Database update running..." -msgstr "正在更新数据库..." +#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417 +msgid "Editor exited unexpectedly" +msgstr "" -#: src/screen_client.cxx:49 -#, c-format -msgid "Database update of %s started" -msgstr "开始更新数据库 %s" +#. lyrics for the song were saved on hard disk +#: src/LyricsPage.cxx:439 +msgid "Lyrics saved" +msgstr "歌词已保存" -#: src/screen_client.cxx:52 -msgid "Database update started" -msgstr "更新数据库中" +#: src/LyricsPage.cxx:445 +msgid "Lyrics deleted" +msgstr "歌词已被删除" -#. translators: the "delete" command is only possible -#. for playlists; the user attempted to delete a song -#. or a directory or something else -#: src/screen_file.cxx:200 -msgid "Deleting this item is not possible" -msgstr "此项目不能被删除" +#: src/LyricsPage.cxx:446 +msgid "No saved lyrics" +msgstr "没有歌词" -#: src/screen_file.cxx:207 +#: src/Main.cxx:167 #, fuzzy, c-format -msgid "Delete playlist %s?" -msgstr "删除播放列表" - -#. translators: MPD deleted the playlist, as requested by the -#. user -#: src/screen_file.cxx:227 -msgid "Playlist deleted" -msgstr "播放列表已删除" - -#. translators: caption of the browser screen -#: src/screen_file.cxx:280 src/title_bar.cxx:77 -msgid "Browse" -msgstr "目录" +msgid "Connecting to %s" +msgstr "连接到 %s" -#: src/screen_find.cxx:29 -msgid "Find" -msgstr "查找" +#: src/Main.cxx:187 +#, fuzzy, c-format +msgid "Error: MPD version %d.%d.%d is too old (%s needed)" +msgstr "错误: MPD版本%d.%d.%d过低(需要 %s)" -#: src/screen_find.cxx:30 -msgid "Find backward" -msgstr "查找前一个" +#. To translators: these credits are shown +#. when ncmpc is started with "--version" +#: src/options.cxx:213 src/options.cxx:216 +msgid "translator-credits" +msgstr "" +"Launchpad Contributions:\n" +" Gao Jie https://launchpad.net/~kindmail\n" +" Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-" +"deactivatedaccount\n" +" snowdream https://launchpad.net/~yanghui" -#: src/screen_find.cxx:31 -msgid "Jump" -msgstr "跳转" +#: src/OutputsPage.cxx:87 +#, c-format +msgid "Output '%s' enabled" +msgstr "启用 '%s' 输出" -#: src/screen_find.cxx:82 +#: src/OutputsPage.cxx:98 #, c-format -msgid "Unable to find '%s'" -msgstr "找不到 '%s'" +msgid "Output '%s' disabled" +msgstr "禁用 '%s' 输出" -#: src/screen_help.cxx:39 -msgid "Movement" -msgstr "移动" +#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206 +msgid "Outputs" +msgstr "输出" -#: src/screen_help.cxx:84 -msgid "Global" -msgstr "全局设定" +#: src/player_command.cxx:176 src/QueuePage.cxx:614 +msgid "Shuffled queue" +msgstr "" -#: src/screen_help.cxx:121 -msgid "Play" -msgstr "播放" +#: src/player_command.cxx:186 +msgid "Cleared queue" +msgstr "" -#: src/screen_help.cxx:124 -msgid "Move song up" -msgstr "上移" +#. get path +#: src/QueuePage.cxx:307 +msgid "Add" +msgstr "增加" -#: src/screen_help.cxx:125 -msgid "Move song down" -msgstr "下移" +#: src/QueuePage.cxx:378 src/QueuePage.cxx:674 +msgid "Queue" +msgstr "" -#: src/screen_help.cxx:128 -msgid "Center" -msgstr "当前播放项居中显示" +#: src/QueuePage.cxx:380 +#, c-format +msgid "Queue on %s" +msgstr "" -#: src/screen_help.cxx:136 -msgid "Enter directory/Select and play song" -msgstr "进入选中目录/播放选中歌曲" +#. query the user for a filename +#: src/save_playlist.cxx:85 +msgid "Save queue as" +msgstr "" -#: src/screen_help.cxx:138 src/screen_help.cxx:153 -#, fuzzy -msgid "Append song to queue" -msgstr "添加到播放列表" +#: src/save_playlist.cxx:107 +#, fuzzy, c-format +msgid "Replace %s?" +msgstr "替换 %s [%s/%s]? " -#: src/screen_help.cxx:140 -msgid "Delete playlist" -msgstr "删除播放列表" +#. success +#: src/save_playlist.cxx:128 +#, c-format +msgid "Saved %s" +msgstr "保存到 %s" -#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82 -msgid "Search" -msgstr "查找" +#: src/screen_artist.cxx:186 +#, c-format +msgid "All tracks of artist: %s" +msgstr "%s 的所有曲目" -#: src/screen_help.cxx:151 -msgid "Select and play" -msgstr "选中并播放" +#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66 +msgid "Album" +msgstr "专辑" -#: src/screen_help.cxx:162 -msgid "View Lyrics" -msgstr "查看歌词" +#: src/screen_artist.cxx:195 +#, c-format +msgid "Tracks of no album of artist: %s" +msgstr "艺术家的无专辑曲目: %s" -#: src/screen_help.cxx:163 -msgid "(Re)load lyrics" -msgstr "(重新)加载歌词" +#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64 +msgid "Artist" +msgstr "艺术家" -#. to translators: this hotkey aborts the retrieval of lyrics -#. from the server -#: src/screen_help.cxx:166 -msgid "Interrupt retrieval" -msgstr "中断歌词下载" +#: src/screen_client.cxx:41 +#, fuzzy +msgid "Database update running" +msgstr "正在更新数据库..." -#: src/screen_help.cxx:167 -msgid "Download lyrics for currently playing song" -msgstr "为当前曲目下载歌词" +#: src/screen_client.cxx:48 +#, c-format +msgid "Database update of %s started" +msgstr "开始更新数据库 %s" -#: src/screen_help.cxx:168 -#, fuzzy -msgid "Add or edit lyrics" -msgstr "没有歌词" +#: src/screen_client.cxx:51 +msgid "Database update started" +msgstr "更新数据库中" -#: src/screen_help.cxx:169 -msgid "Save lyrics" -msgstr "保存歌词" +#: src/screen.cxx:160 +msgid "Repeat mode is on" +msgstr "重复播放 开" -#: src/screen_help.cxx:170 -msgid "Delete saved lyrics" -msgstr "删除已保存歌词" +#: src/screen.cxx:161 +msgid "Repeat mode is off" +msgstr "重复播放 关" -#: src/screen_help.cxx:177 -msgid "Enable/disable output" -msgstr "启用/禁用音频输出" +#: src/screen.cxx:165 +msgid "Random mode is on" +msgstr "随机播放 开" -#: src/screen_help.cxx:184 -msgid "Write a message" -msgstr "" +#: src/screen.cxx:166 +msgid "Random mode is off" +msgstr "随机播放 关" -#: src/screen_help.cxx:189 -msgid "Keydef screen" -msgstr "键定义页面" +#. "single" mode means +#. that MPD will +#. automatically stop +#. after playing one +#. single song +#: src/screen.cxx:175 +msgid "Single mode is on" +msgstr "单曲播放 开" -#: src/screen_help.cxx:191 -msgid "Edit keydefs for selected command" -msgstr "为选择的命令定义快捷键" +#: src/screen.cxx:176 +msgid "Single mode is off" +msgstr "单曲播放 关" -#: src/screen_help.cxx:192 -msgid "Remove selected keydef" -msgstr "去除选择的快捷键设定" +#. "consume" mode means +#. that MPD removes each +#. song which has +#. finished playing +#: src/screen.cxx:184 +msgid "Consume mode is on" +msgstr "消除模式 开" -#: src/screen_help.cxx:193 -#, fuzzy -msgid "Add a keydef" -msgstr "添加新的键" +#: src/screen.cxx:185 +msgid "Consume mode is off" +msgstr "消除模式 关" -#: src/screen_help.cxx:194 -msgid "Go up a level" -msgstr "上一级" +#: src/screen.cxx:188 +#, c-format +msgid "Crossfade %d seconds" +msgstr "淡入淡出 %d 秒" -#: src/screen_help.cxx:195 -msgid "Apply and save changes" -msgstr "保存设置" +#: src/screen.cxx:200 +msgid "Database updated" +msgstr "数据库已更新" -#: src/screen_help.cxx:241 src/title_bar.cxx:74 -msgid "Help" -msgstr "帮助" +#: src/screen.cxx:250 +msgid "Find mode: Wrapped" +msgstr "查找模式: 循环" -#: src/screen_init.cxx:70 src/screen_init.cxx:127 -msgid "Error: Screen too small" -msgstr "错误: 屏幕太小" +#: src/screen.cxx:251 +msgid "Find mode: Normal" +msgstr "查找模式: 普通" -#: src/screen_keydef.cxx:141 -msgid "You have new key bindings" -msgstr "你有新绑定的快捷键" +#: src/screen.cxx:256 +msgid "Auto center mode: On" +msgstr "自动居中模式: 开" -#: src/screen_keydef.cxx:143 -msgid "Keybindings unchanged." -msgstr "取消快捷键变更." +#: src/screen.cxx:257 +msgid "Auto center mode: Off" +msgstr "自动居中模式: 关" -#: src/screen_keydef.cxx:153 -#, c-format -msgid "Error: Unable to create directory ~/.ncmpc - %s" -msgstr "错误: 无法创建文件夹 ~/.ncmpc - %s" +#: src/screen_find.cxx:31 +msgid "Find" +msgstr "查找" -#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173 -#, c-format -msgid "Error: %s - %s" -msgstr "错误 %s - %s" +#: src/screen_find.cxx:32 +msgid "Find backward" +msgstr "查找前一个" -#: src/screen_keydef.cxx:171 +#: src/screen_find.cxx:33 +msgid "Jump" +msgstr "跳转" + +#: src/screen_find.cxx:79 #, c-format -msgid "Wrote %s" -msgstr "写入 %s" +msgid "Unable to find '%s'" +msgstr "找不到 '%s'" -#: src/screen_keydef.cxx:250 +#: src/screen_keydef.cxx:161 msgid "Deleted" msgstr "已删除" -#: src/screen_keydef.cxx:265 +#: src/screen_keydef.cxx:177 #, c-format msgid "Enter new key for %s: " msgstr "为 %s 输入新的按键: " -#: src/screen_keydef.cxx:276 +#: src/screen_keydef.cxx:187 msgid "Ctrl-Space can't be used" msgstr "" -#: src/screen_keydef.cxx:282 +#: src/screen_keydef.cxx:193 #, c-format msgid "Error: key %s is already used for %s" msgstr "键 %s 已经绑定到 %s" -#: src/screen_keydef.cxx:291 +#: src/screen_keydef.cxx:202 #, c-format msgid "Assigned %s to %s" msgstr "分配 %s 到 %s" -#: src/screen_keydef.cxx:317 -msgid "===> Apply key bindings " -msgstr "应用快捷键设置 " - -#: src/screen_keydef.cxx:319 -msgid "===> Apply & Save key bindings " -msgstr "应用 & 保存快捷键设置 " - -#: src/screen_keydef.cxx:347 +#: src/screen_keydef.cxx:229 msgid "Add new key" msgstr "添加新的键" -#: src/screen_keydef.cxx:410 -msgid "Note: Did you forget to 'Apply' your changes?" -msgstr "提示: 你忘记了保存你的设置?" - -#: src/screen_keydef.cxx:417 -msgid "Edit key bindings" -msgstr "编辑快捷键设置" - -#: src/screen_keydef.cxx:419 +#: src/screen_keydef.cxx:251 #, c-format msgid "Edit keys for %s" msgstr "为 %s 编辑快捷键" -#. translators: no lyrics were found for the song -#: src/screen_lyrics.cxx:208 -msgid "No lyrics" -msgstr "无歌词" - -#: src/screen_lyrics.cxx:226 -#, c-format -msgid "Lyrics timeout occurred after %d seconds" -msgstr "" - -#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336 -#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85 -msgid "Lyrics" -msgstr "歌词" - -#. translators: this message is displayed -#. while data is retrieved -#: src/screen_lyrics.cxx:330 -msgid "loading..." -msgstr "正在载入..." - -#: src/screen_lyrics.cxx:361 -msgid "Editor not configured" -msgstr "" - -#: src/screen_lyrics.cxx:367 -msgid "Do you really want to start an editor and edit these lyrics?" -msgstr "" +#: src/screen_keydef.cxx:393 +msgid "You have new key bindings" +msgstr "你有新绑定的快捷键" -#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409 -msgid "Can't start editor" -msgstr "" +#: src/screen_keydef.cxx:395 +msgid "Keybindings unchanged." +msgstr "取消快捷键变更." -#: src/screen_lyrics.cxx:411 -#, c-format -msgid "Editor exited unexpectedly (%d)" -msgstr "" +#: src/screen_keydef.cxx:405 +#, fuzzy +msgid "Unable to write configuration" +msgstr "不完整的快捷键配置" -#: src/screen_lyrics.cxx:414 +#: src/screen_keydef.cxx:421 #, c-format -msgid "Editor exited unexpectedly (signal %d)" -msgstr "" - -#. lyrics for the song were saved on hard disk -#: src/screen_lyrics.cxx:436 -msgid "Lyrics saved" -msgstr "歌词已保存" - -#: src/screen_lyrics.cxx:443 -msgid "Lyrics deleted" -msgstr "歌词已被删除" - -#: src/screen_lyrics.cxx:446 -msgid "No saved lyrics" -msgstr "没有歌词" +msgid "Wrote %s" +msgstr "写入 %s" -#: src/screen_outputs.cxx:60 -#, c-format -msgid "Output '%s' enabled" -msgstr "启用 '%s' 输出" +#: src/screen_keydef.cxx:433 +msgid "===> Apply key bindings " +msgstr "应用快捷键设置 " -#: src/screen_outputs.cxx:71 -#, c-format -msgid "Output '%s' disabled" -msgstr "禁用 '%s' 输出" +#: src/screen_keydef.cxx:435 +msgid "===> Apply & Save key bindings " +msgstr "应用 & 保存快捷键设置 " -#: src/screen_outputs.cxx:162 src/title_bar.cxx:88 -msgid "Outputs" -msgstr "输出" +#: src/screen_keydef.cxx:472 +msgid "Edit key bindings" +msgstr "编辑快捷键设置" -#. get path -#: src/screen_queue.cxx:274 -msgid "Add" -msgstr "增加" +#: src/screen_keydef.cxx:554 +msgid "Note: Did you forget to 'Apply' your changes?" +msgstr "提示: 你忘记了保存你的设置?" -#: src/screen_queue.cxx:382 src/title_bar.cxx:76 -msgid "Queue" +#: src/screen_keydef.cxx:604 +msgid "Keys" msgstr "" -#: src/screen_queue.cxx:384 -#, c-format -msgid "Queue on %s" -msgstr "" +#: src/screen_utils.cxx:124 +msgid "Password" +msgstr "密码" -#: src/screen_search.cxx:48 +#: src/SearchPage.cxx:51 msgid "artist" msgstr "艺术家" -#: src/screen_search.cxx:49 +#: src/SearchPage.cxx:52 msgid "album" msgstr "专辑" -#: src/screen_search.cxx:50 +#: src/SearchPage.cxx:53 msgid "title" msgstr "标题" -#: src/screen_search.cxx:51 +#: src/SearchPage.cxx:54 msgid "track" msgstr "曲目" -#: src/screen_search.cxx:52 +#: src/SearchPage.cxx:55 msgid "name" msgstr "名称" -#: src/screen_search.cxx:53 +#: src/SearchPage.cxx:56 msgid "genre" msgstr "流派" -#: src/screen_search.cxx:54 +#: src/SearchPage.cxx:57 msgid "date" msgstr "日期" -#: src/screen_search.cxx:55 +#: src/SearchPage.cxx:58 msgid "composer" msgstr "作曲" -#: src/screen_search.cxx:56 +#: src/SearchPage.cxx:59 msgid "performer" msgstr "歌手" -#: src/screen_search.cxx:57 +#: src/SearchPage.cxx:60 msgid "comment" msgstr "注释" -#: src/screen_search.cxx:65 +#: src/SearchPage.cxx:68 msgid "file" msgstr "文件" -#: src/screen_search.cxx:82 src/screen_song.cxx:52 +#: src/SearchPage.cxx:85 src/SongPage.cxx:65 msgid "Title" msgstr "标题" -#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79 -msgid "Artist" -msgstr "艺术家" - -#: src/screen_search.cxx:84 src/screen_song.cxx:53 -msgid "Album" -msgstr "专辑" - -#: src/screen_search.cxx:85 +#: src/SearchPage.cxx:88 msgid "Filename" msgstr "文件名" -#: src/screen_search.cxx:86 +#: src/SearchPage.cxx:89 msgid "Artist + Title" msgstr "艺术家 + 标题" -#: src/screen_search.cxx:244 -#, c-format -msgid "No argument for search tag %s" -msgstr "搜索条目 %s 没有参数" - -#: src/screen_search.cxx:253 +#: src/SearchPage.cxx:270 #, c-format msgid "Bad search tag %s" msgstr "不正确的搜索条目 %s" -#. if( pattern==nullptr ) -#. search_new(screen, c); -#. else -#: src/screen_search.cxx:400 +#: src/SearchPage.cxx:284 #, c-format -msgid "Press %s for a new search" -msgstr "按 %s 开始新的搜索" - -#: src/screen_search.cxx:427 -#, c-format -msgid "Search: %s" -msgstr "查找: %s" - -#: src/screen_search.cxx:430 -#, c-format -msgid "Search: Results for %s [%s]" -msgstr "查找: %s [%s] 的结果" +msgid "No argument for search tag %s" +msgstr "搜索条目 %s 没有参数" -#: src/screen_search.cxx:434 -#, c-format -msgid "Search: Press %s for a new search [%s]" -msgstr "查找: 按 %s 开始新的搜索 [%s]" +#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410 +#: src/SearchPage.cxx:414 src/SearchPage.cxx:473 +msgid "Search" +msgstr "查找" -#: src/screen_search.cxx:458 +#: src/SearchPage.cxx:436 #, c-format msgid "Search mode: %s" msgstr "搜索模式: %s" -#: src/screen_song.cxx:54 +#: src/SongPage.cxx:67 msgid "Length" msgstr "时长" -#: src/screen_song.cxx:55 +#: src/SongPage.cxx:68 msgid "Position" msgstr "" -#: src/screen_song.cxx:56 +#: src/SongPage.cxx:69 msgid "Composer" msgstr "作曲" -#: src/screen_song.cxx:57 +#: src/SongPage.cxx:70 msgid "Name" msgstr "名字" -#: src/screen_song.cxx:58 +#: src/SongPage.cxx:71 msgid "Disc" msgstr "碟片" -#: src/screen_song.cxx:59 +#: src/SongPage.cxx:72 msgid "Track" msgstr "音轨" -#: src/screen_song.cxx:60 +#: src/SongPage.cxx:73 msgid "Date" msgstr "日期" -#: src/screen_song.cxx:61 +#: src/SongPage.cxx:74 msgid "Genre" msgstr "流派" -#: src/screen_song.cxx:62 +#: src/SongPage.cxx:75 msgid "Comment" msgstr "注释" -#: src/screen_song.cxx:63 +#: src/SongPage.cxx:76 msgid "Path" msgstr "路径" -#: src/screen_song.cxx:64 +#: src/SongPage.cxx:77 msgid "Bitrate" msgstr "比特率" -#: src/screen_song.cxx:65 +#: src/SongPage.cxx:78 msgid "Format" msgstr "" -#: src/screen_song.cxx:82 +#: src/SongPage.cxx:95 msgid "Number of artists" msgstr "艺术家总数" -#: src/screen_song.cxx:83 +#: src/SongPage.cxx:96 msgid "Number of albums" msgstr "专辑总数" -#: src/screen_song.cxx:84 +#: src/SongPage.cxx:97 msgid "Number of songs" msgstr "歌曲总数" -#: src/screen_song.cxx:85 +#: src/SongPage.cxx:98 msgid "Uptime" msgstr "启动时间" -#: src/screen_song.cxx:86 +#: src/SongPage.cxx:99 msgid "Most recent db update" msgstr "最新DB更新" -#: src/screen_song.cxx:87 +#: src/SongPage.cxx:100 msgid "Playtime" msgstr "播放时间" -#: src/screen_song.cxx:88 +#: src/SongPage.cxx:101 msgid "DB playtime" msgstr "DB 播放时间" -#: src/screen_song.cxx:173 +#: src/SongPage.cxx:204 msgid "Song viewer" msgstr "歌曲查看器" -#: src/screen_song.cxx:337 +#: src/SongPage.cxx:370 msgid "MPD statistics" msgstr "MPD统计" -#: src/screen_song.cxx:427 +#: src/SongPage.cxx:455 msgid "Selected song" msgstr "选中曲目" -#: src/screen_song.cxx:437 +#: src/SongPage.cxx:465 msgid "Currently playing song" msgstr "当前播放曲目" -#: src/screen_song.cxx:442 +#: src/SongPage.cxx:470 #, c-format msgid "%d kbps" msgstr "%d kbps" -#. NOTE: if one day a translator decides to use a multi-byte character -#. for one of the yes/no keys, we'll have to parse it properly -#: src/screen_utils.cxx:80 -#, fuzzy, c-format -msgid "%s [%s/%s] " -msgstr "替换 %s [%s/%s]? " - -#: src/screen_utils.cxx:121 -msgid "Password" -msgstr "密码" +#: src/SongPage.cxx:554 +msgid "Song" +msgstr "" -#: src/status_bar.cxx:121 +#: src/StatusBar.cxx:104 msgid "Playing:" msgstr "播放中" -#: src/status_bar.cxx:124 +#: src/StatusBar.cxx:108 msgid "[Paused]" msgstr "暂停" -#: src/title_bar.cxx:99 +#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350 +#, fuzzy +msgid "Unknown color" +msgstr "未知命令" + +#: src/Styles.cxx:333 +#, fuzzy +msgid "Unknown color field" +msgstr "警告: 未知的颜色块 - %s\n" + +#: src/Styles.cxx:375 +msgid "Terminal lacks color capabilities" +msgstr "终端不支持彩色" + +#: src/time_format.cxx:44 +msgid "year" +msgstr "" + +#: src/time_format.cxx:46 +msgid "years" +msgstr "" + +#: src/time_format.cxx:54 +msgid "week" +msgstr "" + +#: src/time_format.cxx:57 +msgid "weeks" +msgstr "" + +#: src/time_format.cxx:65 +msgid "day" +msgstr "" + +#: src/time_format.cxx:68 +msgid "days" +msgstr "" + +#: src/TitleBar.cxx:100 msgid "Volume n/a" msgstr "音量 n/a" -#: src/title_bar.cxx:101 +#: src/TitleBar.cxx:102 #, c-format msgid "Volume %d%%" msgstr "音量 %d%%" +#, fuzzy +#~ msgid "Add url/file to queue" +#~ msgstr "添加链接/路径到播放列表" + +#~ msgid "Move song up" +#~ msgstr "上移" + +#~ msgid "Move song down" +#~ msgstr "下移" + +#~ msgid "Press %s for a new search" +#~ msgstr "按 %s 开始新的搜索" + +#~ msgid "Search: %s" +#~ msgstr "查找: %s" + +#~ msgid "Search: Results for %s [%s]" +#~ msgstr "查找: %s [%s] 的结果" + +#~ msgid "Search: Press %s for a new search [%s]" +#~ msgstr "查找: 按 %s 开始新的搜索 [%s]" + +#~ msgid "Connecting to %s... [Press %s to abort]" +#~ msgstr "连接到 %s... [按 %s 键取消]" + +#~ msgid "press %s for the key editor" +#~ msgstr "按 %s 编辑快捷键" + +#~ msgid "Album: %s - %s" +#~ msgstr "专辑: %s - %s" + +#~ msgid "Adding album %s..." +#~ msgstr "添加专辑 %s..." + +#~ msgid "Adding %s..." +#~ msgstr "添加 %s..." + +#~ msgid "Error: Screen too small" +#~ msgstr "错误: 屏幕太小" + +#~ msgid "Error: Unable to create directory ~/.ncmpc - %s" +#~ msgstr "错误: 无法创建文件夹 ~/.ncmpc - %s" + +#~ msgid "Error: %s - %s" +#~ msgstr "错误 %s - %s" + +#, fuzzy +#~ msgid "%s [%s/%s] " +#~ msgstr "替换 %s [%s/%s]? " + #~ msgid "Delete playlist %s [%s/%s] ? " #~ msgstr "确定要删除列表 %s[%s/%s] ? " #~ msgid "Warning: Unknown color - %s\n" #~ msgstr "警告: 未知的颜色 - %s\n" -#~ msgid "Connected to %s" -#~ msgstr "连接到 %s" - #~ msgid "Shuffled playlist" #~ msgstr "乱序播放列表"
View file
ncmpc-0.30.tar.xz/src/AlbumListPage.cxx -> ncmpc-0.32.tar.xz/src/AlbumListPage.cxx
Changed
@@ -18,16 +18,14 @@ */ #include "AlbumListPage.hxx" -#include "screen_interface.hxx" #include "screen_status.hxx" #include "screen_find.hxx" #include "FileListPage.hxx" -#include "screen.hxx" +#include "Command.hxx" #include "i18n.h" #include "charset.hxx" #include "mpdclient.hxx" - -#include <glib.h> +#include "util/StringUTF8.hxx" #include <algorithm> @@ -40,17 +38,12 @@ static bool CompareUTF8(const std::string &a, const std::string &b) { - char *key1 = g_utf8_collate_key(a.c_str(), -1); - char *key2 = g_utf8_collate_key(b.c_str(), -1); - int n = strcmp(key1,key2); - g_free(key1); - g_free(key2); - return n < 0; + return CollateUTF8(a.c_str(), b.c_str()) < 0; } const char * AlbumListPage::GetListItemText(char *buffer, size_t size, - unsigned idx) const + unsigned idx) const noexcept { if (idx == 0) return ".."; @@ -61,10 +54,7 @@ assert(idx < album_list.size()); - const char *str_utf8 = album_list[idx].c_str(); - - g_strlcpy(buffer, Utf8ToLocale(str_utf8).c_str(), size); - return buffer; + return utf8_to_locale(album_list[idx].c_str(), buffer, size); } static void @@ -119,30 +109,26 @@ void AlbumListPage::PaintListItem(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, - bool selected) const + bool selected) const noexcept { - const char *p; - char *q = nullptr; - if (i == 0) - p = ".."; + screen_browser_paint_directory(w, width, selected, ".."); else if (i == album_list.size() + 1) - p = _("All tracks"); + screen_browser_paint_directory(w, width, selected, + _("All tracks")); else - p = q = utf8_to_locale(album_list[i - 1].c_str()); - - screen_browser_paint_directory(w, width, selected, p); - g_free(q); + screen_browser_paint_directory(w, width, selected, + Utf8ToLocale(album_list[i - 1].c_str()).c_str()); } void -AlbumListPage::Paint() const +AlbumListPage::Paint() const noexcept { lw.Paint(*this); } const char * -AlbumListPage::GetTitle(char *str, size_t size) const +AlbumListPage::GetTitle(char *str, size_t size) const noexcept { if (artist.empty()) return _("Albums"); @@ -153,7 +139,7 @@ } void -AlbumListPage::Update(struct mpdclient &c, unsigned events) +AlbumListPage::Update(struct mpdclient &c, unsigned events) noexcept { if (events & MPD_IDLE_DATABASE) { /* the db has changed -> update the list */ @@ -189,22 +175,20 @@ } bool -AlbumListPage::OnCommand(struct mpdclient &c, command_t cmd) +AlbumListPage::OnCommand(struct mpdclient &c, Command cmd) { switch(cmd) { const char *selected; - case CMD_PLAY: - if (lw.selected == 0) { + case Command::PLAY: + if (lw.selected == 0 && parent != nullptr) /* handle ".." */ - screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY); - return true; - } + return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY); break; - case CMD_SELECT: - case CMD_ADD: + case Command::SELECT: + case Command::ADD: for (const unsigned i : lw.GetRange()) { if(i == album_list.size() + 1) add_query(&c, MPD_TAG_ARTIST, artist.c_str(), @@ -213,26 +197,26 @@ selected = album_list[lw.selected - 1].c_str(); add_query(&c, MPD_TAG_ALBUM, selected, artist.c_str()); - cmd = CMD_LIST_NEXT; /* continue and select next item... */ + cmd = Command::LIST_NEXT; /* continue and select next item... */ } } break; /* continue and update... */ - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: Reload(c); return false; - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SetDirty(); return true; - case CMD_LIST_JUMP: - screen_jump(screen, &lw, *this, *this); + case Command::LIST_JUMP: + screen_jump(screen, lw, *this, *this); SetDirty(); return true;
View file
ncmpc-0.30.tar.xz/src/AlbumListPage.hxx -> ncmpc-0.32.tar.xz/src/AlbumListPage.hxx
Changed
@@ -31,12 +31,14 @@ class AlbumListPage final : public ListPage, ListRenderer, ListText { ScreenManager &screen; + Page *const parent; std::vector<std::string> album_list; std::string artist; public: - AlbumListPage(ScreenManager &_screen, WINDOW *_w, Size size) - :ListPage(_w, size), screen(_screen) {} + AlbumListPage(ScreenManager &_screen, Page *_parent, + WINDOW *_w, Size size) noexcept + :ListPage(_w, size), screen(_screen), parent(_parent) {} template<typename A> void SetArtist(A &&_artist) { @@ -64,18 +66,18 @@ public: /* virtual methods from class Page */ - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; #endif
View file
ncmpc-0.30.tar.xz/src/ArtistListPage.cxx -> ncmpc-0.32.tar.xz/src/ArtistListPage.cxx
Changed
@@ -18,18 +18,17 @@ */ #include "ArtistListPage.hxx" -#include "screen_interface.hxx" #include "screen_status.hxx" #include "screen_find.hxx" #include "FileListPage.hxx" +#include "Command.hxx" #include "i18n.h" #include "charset.hxx" #include "mpdclient.hxx" +#include "util/StringUTF8.hxx" #include <algorithm> -#include <glib.h> - #include <assert.h> #include <string.h> @@ -39,24 +38,16 @@ static bool CompareUTF8(const std::string &a, const std::string &b) { - char *key1 = g_utf8_collate_key(a.c_str(), -1); - char *key2 = g_utf8_collate_key(b.c_str(), -1); - int n = strcmp(key1,key2); - g_free(key1); - g_free(key2); - return n < 0; + return CollateUTF8(a.c_str(), b.c_str()) < 0; } const char * ArtistListPage::GetListItemText(char *buffer, size_t size, - unsigned idx) const + unsigned idx) const noexcept { assert(idx < artist_list.size()); - const char *str_utf8 = artist_list[idx].c_str(); - - g_strlcpy(buffer, Utf8ToLocale(str_utf8).c_str(), size); - return buffer; + return utf8_to_locale(artist_list[idx].c_str(), buffer, size); } static void @@ -100,26 +91,26 @@ void ArtistListPage::PaintListItem(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, - bool selected) const + bool selected) const noexcept { screen_browser_paint_directory(w, width, selected, Utf8ToLocale(artist_list[i].c_str()).c_str()); } void -ArtistListPage::Paint() const +ArtistListPage::Paint() const noexcept { lw.Paint(*this); } const char * -ArtistListPage::GetTitle(char *, size_t) const +ArtistListPage::GetTitle(char *, size_t) const noexcept { return _("All artists"); } void -ArtistListPage::Update(struct mpdclient &c, unsigned events) +ArtistListPage::Update(struct mpdclient &c, unsigned events) noexcept { if (events & MPD_IDLE_DATABASE) { /* the db has changed -> update the list */ @@ -149,7 +140,7 @@ } inline bool -ArtistListPage::OnListCommand(command_t cmd) +ArtistListPage::OnListCommand(Command cmd) { if (lw.HandleCommand(cmd)) { SetDirty(); @@ -160,39 +151,39 @@ } bool -ArtistListPage::OnCommand(struct mpdclient &c, command_t cmd) +ArtistListPage::OnCommand(struct mpdclient &c, Command cmd) { switch(cmd) { const char *selected; - case CMD_SELECT: - case CMD_ADD: + case Command::SELECT: + case Command::ADD: if (lw.selected >= artist_list.size()) return true; for (const unsigned i : lw.GetRange()) { selected = artist_list[i].c_str(); add_query(&c, MPD_TAG_ARTIST, selected); - cmd = CMD_LIST_NEXT; /* continue and select next item... */ + cmd = Command::LIST_NEXT; /* continue and select next item... */ } break; /* continue and update... */ - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: Reload(c); return false; - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SetDirty(); return true; - case CMD_LIST_JUMP: - screen_jump(screen, &lw, *this, *this); + case Command::LIST_JUMP: + screen_jump(screen, lw, *this, *this); SetDirty(); return true;
View file
ncmpc-0.30.tar.xz/src/ArtistListPage.hxx -> ncmpc-0.32.tar.xz/src/ArtistListPage.hxx
Changed
@@ -47,22 +47,22 @@ void LoadArtistList(struct mpdclient &c); void Reload(struct mpdclient &c); - bool OnListCommand(command_t cmd); + bool OnListCommand(Command cmd); public: /* virtual methods from class Page */ - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; #endif
View file
ncmpc-0.32.tar.xz/src/AsioServiceFwd.hxx
Added
@@ -0,0 +1,42 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef NCMPC_ASIO_SERVICE_FWD_HXX +#define NCMPC_ASIO_SERVICE_FWD_HXX + +/* This header provides a forward declaration for + boost::asio::io_service */ + +#include <boost/version.hpp> + +#if BOOST_VERSION >= 106600 + +/* in Boost 1.66, the API has changed for "Networking TS + compatibility"; the forward declaration above doesn't work because + boost::asio::io_service is a deprecated typedef to + boost::asio::io_context; eventually, we'll switch to the new API, + but this would require dropping support for older Boost versions */ + +#include <boost/asio/io_service.hpp> + +#else +namespace boost { namespace asio { class io_service; }} +#endif + +#endif
View file
ncmpc-0.32.tar.xz/src/BasicColors.cxx
Added
@@ -0,0 +1,71 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "BasicColors.hxx" + +#include <curses.h> + +#include <string.h> +#include <stdlib.h> + +static constexpr const char *basic_color_names[] = { + "black", + "red", + "green", + "yellow", + "blue", + "magenta", + "cyan", + "white", + nullptr +}; + +static_assert(COLOR_BLACK == 0, "Unexpected color value"); +static_assert(COLOR_RED == 1, "Unexpected color value"); +static_assert(COLOR_GREEN == 2, "Unexpected color value"); +static_assert(COLOR_YELLOW == 3, "Unexpected color value"); +static_assert(COLOR_BLUE == 4, "Unexpected color value"); +static_assert(COLOR_MAGENTA == 5, "Unexpected color value"); +static_assert(COLOR_CYAN == 6, "Unexpected color value"); +static_assert(COLOR_WHITE == 7, "Unexpected color value"); + +short +ParseBasicColorName(const char *name) +{ + for (size_t i = 0; basic_color_names[i] != nullptr; ++i) + if (strcasecmp(basic_color_names[i], name) == 0) + return i; + + return -1; +} + +short +ParseColorNameOrNumber(const char *s) +{ + short basic = ParseBasicColorName(s); + if (basic >= 0) + return basic; + + char *endptr; + long numeric = strtol(s, &endptr, 10); + if (endptr > s && *endptr == 0 && numeric >= 0 && numeric <= 0xff) + return numeric; + + return -1; +}
View file
ncmpc-0.32.tar.xz/src/BasicColors.hxx
Added
@@ -0,0 +1,43 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef BASIC_COLORS_HXX +#define BASIC_COLORS_HXX + +#include "util/Compiler.h" + +/** + * Parse an ncurses color name. + * + * @return the COLOR_* integer value or -1 on error + */ +gcc_pure +short +ParseBasicColorName(const char *name); + +/** + * Like ParseBasicColorName(), but also allow numeric colors. + * + * @return the color integer value or -1 on error + */ +gcc_pure +short +ParseColorNameOrNumber(const char *s); + +#endif
View file
ncmpc-0.30.tar.xz/src/BasicMarquee.cxx -> ncmpc-0.32.tar.xz/src/BasicMarquee.cxx
Changed
@@ -18,63 +18,50 @@ */ #include "BasicMarquee.hxx" -#include "charset.hxx" - -#include <glib.h> +#include "util/LocaleString.hxx" #include <algorithm> #include <assert.h> #include <string.h> -char * -BasicMarquee::ScrollString() const +std::pair<const char *, size_t> +BasicMarquee::ScrollString() const noexcept { - assert(text != nullptr); assert(separator != nullptr); - /* create the new scrolled string */ - char *tmp = g_strdup(g_utf8_offset_to_pointer(text_utf8, offset)); - utf8_cut_width(tmp, width); - - /* convert back to locale */ - char *result = utf8_to_locale(tmp); - g_free(tmp); - return result; + const char *p = AtCharMB(buffer.data(), buffer.length(), offset); + const char *end = AtWidthMB(p, strlen(p), width); + return std::make_pair(p, size_t(end - p)); } bool -BasicMarquee::Set(unsigned _width, const char *_text) +BasicMarquee::Set(unsigned _width, const char *_text) noexcept { assert(separator != nullptr); assert(_text != nullptr); - if (text != nullptr && _width == width && strcmp(_text, text) == 0) + if (_width == width && text == _text) /* no change, do nothing (and, most importantly, do not reset the current offset!) */ return false; - Clear(); - width = _width; offset = 0; - text = g_strdup(_text); + text = _text; /* create a buffer containing the string and the separator */ - text_utf8 = replace_locale_to_utf8(g_strconcat(text, separator, - text, separator, - nullptr)); - text_utf8_length = g_utf8_strlen(text_utf8, -1); + buffer = text + separator + text + separator; + max_offset = StringLengthMB(buffer.data(), buffer.length() / 2); return true; } void -BasicMarquee::Clear() +BasicMarquee::Clear() noexcept { - g_free(text); - text = nullptr; - - g_free(std::exchange(text_utf8, nullptr)); + width = 0; + text.clear(); + buffer.clear(); }
View file
ncmpc-0.30.tar.xz/src/BasicMarquee.hxx -> ncmpc-0.32.tar.xz/src/BasicMarquee.hxx
Changed
@@ -20,6 +20,10 @@ #ifndef BASIC_MARQUEE_HXX #define BASIC_MARQUEE_HXX +#include "util/Compiler.h" + +#include <string> + /** * This class is used to auto-scroll text which does not fit on the * screen. Call hscroll_init() to initialize the object, @@ -30,24 +34,24 @@ const char *const separator; /** - * The available screen width (in cells). + * The scrolled text, in the current locale. */ - unsigned width; + std::string text; /** - * The text length in Unicode characters. + * A buffer containing the text plus the separator twice. */ - unsigned text_utf8_length; + std::string buffer; /** - * The scrolled text, in the current locale. + * The text plus separator length in characters. */ - char *text = nullptr; + size_t max_offset; /** - * Thee scrolled text, in UTF-8, including separators. + * The available screen width (in cells). */ - char *text_utf8 = nullptr; + unsigned width = 0; /** * The current scrolling offset. This is a character @@ -56,37 +60,39 @@ unsigned offset; public: - BasicMarquee(const char *_separator) + BasicMarquee(const char *_separator) noexcept :separator(_separator) {} - bool IsDefined() const { - return text != nullptr; + bool IsDefined() const noexcept { + return width > 0; } /** * Sets a text to scroll. Call Clear() to disable it. * + * @param text the text in the locale charset * @return false if nothing was changed */ - bool Set(unsigned width, const char *text); + bool Set(unsigned width, const char *text) noexcept; /** * Removes the text. It may be reused with Set(). */ - void Clear(); + void Clear() noexcept; - void Rewind() { + void Rewind() noexcept { offset = 0; } - void Step() { + void Step() noexcept { ++offset; - if (offset >= text_utf8_length / 2) + if (offset >= max_offset) offset = 0; } - char *ScrollString() const; + gcc_pure + std::pair<const char *, size_t> ScrollString() const noexcept; }; #endif
View file
ncmpc-0.32.tar.xz/src/Bindings.cxx
Added
@@ -0,0 +1,151 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Bindings.hxx" +#include "Command.hxx" +#include "KeyName.hxx" +#include "i18n.h" +#include "util/CharUtil.hxx" + +#include <assert.h> +#include <stdio.h> + +const char * +KeyBindings::GetFirstKeyName(Command command) const noexcept +{ + const auto &b = key_bindings[size_t(command)]; + return b.keys.front() != 0 + ? key2str(b.keys[0]) + : nullptr; +} + +std::string +KeyBindings::GetKeyNames(Command command) const noexcept +{ + const auto &b = key_bindings[size_t(command)]; + + std::string s = key2str(b.keys[0]); + + for (size_t i = 1; i < b.keys.size() && b.keys[i] != 0; ++i) { + s.push_back(' '); + s.append(key2str(b.keys[i])); + } + return s; +} + +Command +KeyBindings::FindKey(int key) const +{ + assert(key != 0); + + for (size_t i = 0; i < size_t(Command::NONE); ++i) { + if (key_bindings[i].HasKey(key)) + return Command(i); + } + + return Command::NONE; +} + +#ifndef NCMPC_MINI + +bool +KeyBindings::Check(char *buf, size_t bufsize) const +{ + bool success = true; + + for (size_t i = 0; i < size_t(Command::NONE); ++i) { + for (const auto key : key_bindings[i].keys) { + if (key == 0) + break; + + Command cmd; + if ((cmd = FindKey(key)) != Command(i)) { + if (buf) { + snprintf(buf, bufsize, + _("Key %s assigned to %s and %s"), + key2str(key), + get_key_command_name(Command(i)), + get_key_command_name(cmd)); + } else { + fprintf(stderr, + _("Key %s assigned to %s and %s"), + key2str(key), + get_key_command_name(Command(i)), + get_key_command_name(cmd)); + fputc('\n', stderr); + } + success = false; + } + } + } + + return success; +} + +void +KeyBinding::WriteToFile(FILE *f, const command_definition_t &cmd, + bool comment) const +{ + fprintf(f, "## %s\n", cmd.description); + if (comment) + fprintf(f, "#"); + fprintf(f, "key %s = ", cmd.name); + + if (keys.front() == 0) { + fputs("0\n\n", f); + return; + } + + bool first = true; + for (const auto key : keys) { + if (key == 0) + break; + + if (first) + first = false; + else + fprintf(f, ", "); + + if (key < 256 && IsAlphaNumericASCII(key)) + fprintf(f, "\'%c\'", key); + else + fprintf(f, "%d", key); + } + fprintf(f,"\n\n"); +} + +bool +KeyBindings::WriteToFile(FILE *f, int flags) const +{ + const auto *cmds = get_command_definitions(); + + if (flags & KEYDEF_WRITE_HEADER) + fprintf(f, "## Key bindings for ncmpc (generated by ncmpc)\n\n"); + + for (size_t i = 0; i < size_t(Command::NONE) && !ferror(f); ++i) { + if (key_bindings[i].modified || flags & KEYDEF_WRITE_ALL) { + key_bindings[i].WriteToFile(f, cmds[i], + flags & KEYDEF_COMMENT_ALL); + } + } + + return ferror(f) == 0; +} + +#endif /* NCMPC_MINI */
View file
ncmpc-0.32.tar.xz/src/Bindings.hxx
Added
@@ -0,0 +1,113 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef BINDINGS_HXX +#define BINDINGS_HXX + +#include "config.h" +#include "Command.hxx" +#include "util/Compiler.h" + +#include <array> +#include <algorithm> +#include <string> + +#include <stddef.h> + +#ifndef NCMPC_MINI +#include <stdio.h> +#endif + +#define MAX_COMMAND_KEYS 3 + +struct KeyBinding { + std::array<int, MAX_COMMAND_KEYS> keys; + +#ifndef NCMPC_MINI + bool modified = false; +#endif + + constexpr KeyBinding(int a, int b=0, int c=0) noexcept + :keys{{a, b, c}} {} + + gcc_pure + bool HasKey(int key) const { + return std::find(keys.begin(), keys.end(), key) != keys.end(); + } + + gcc_pure + size_t GetKeyCount() const { + return std::distance(keys.begin(), + std::find(keys.begin(), keys.end(), 0)); + } + + void SetKey(const std::array<int, MAX_COMMAND_KEYS> &_keys) { + keys = _keys; +#ifndef NCMPC_MINI + modified = true; +#endif + } + +#ifndef NCMPC_MINI + void WriteToFile(FILE *f, const command_definition_t &cmd, + bool comment) const; +#endif +}; + +struct KeyBindings { + std::array<KeyBinding, size_t(Command::NONE)> key_bindings; + + gcc_pure + Command FindKey(int key) const; + + /** + * Returns the name of the first key bound to the given + * command, or nullptr if there is no key binding. + */ + gcc_pure + const char *GetFirstKeyName(Command command) const noexcept; + + gcc_pure + std::string GetKeyNames(Command command) const noexcept; + + void SetKey(Command command, + const std::array<int, MAX_COMMAND_KEYS> &keys) { + auto &b = key_bindings[size_t(command)]; + b.SetKey(keys); + } + +#ifndef NCMPC_MINI + /** + * @return true on success, false on error + */ + bool Check(char *buf, size_t size) const; + + /** + * @return true on success, false on error + */ + bool WriteToFile(FILE *f, int all) const; +#endif +}; + +/* write key bindings flags */ +#define KEYDEF_WRITE_HEADER 0x01 +#define KEYDEF_WRITE_ALL 0x02 +#define KEYDEF_COMMENT_ALL 0x04 + +#endif
View file
ncmpc-0.30.tar.xz/src/ChatPage.cxx -> ncmpc-0.32.tar.xz/src/ChatPage.cxx
Changed
@@ -18,20 +18,19 @@ */ #include "ChatPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen_utils.hxx" #include "screen_status.hxx" #include "TextPage.hxx" #include "mpdclient.hxx" #include "i18n.h" #include "charset.hxx" -#include "options.hxx" +#include "Options.hxx" #include <mpd/idle.h> -#include <glib.h> - #include <string.h> +#include <stdlib.h> static constexpr char chat_channel[] = "chat"; @@ -39,6 +38,8 @@ unsigned last_connection_id = 0; bool was_supported = false; + std::string prefix; + public: ChatPage(ScreenManager &_screen, WINDOW *w, Size size) :TextPage(_screen, w, size) {} @@ -48,12 +49,17 @@ void ProcessMessage(const struct mpd_message &message); + gcc_pure + const std::string &GetPrefix() noexcept; + + void SendMessage(struct mpdclient &c, const char *msg) noexcept; + public: /* virtual methods from class Page */ - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; - const char *GetTitle(char *, size_t) const override { + const char *GetTitle(char *, size_t) const noexcept override { return _("Chat"); } }; @@ -69,22 +75,6 @@ last_connection_id = c.connection_id; - if (c.connection == nullptr) - return (was_supported = false); - - if (mpd_connection_cmp_server_version(c.connection, 0, 17, 0) == -1) { - const unsigned *version = mpd_connection_get_server_version(c.connection); - - char message[256]; - snprintf(message, sizeof(message), - _("connected to MPD %u.%u.%u (you need at least \n" - "version 0.17.0 to use the chat feature)"), - version[0], version[1], version[2]); - Append(message); - - return (was_supported = false); - } - /* mpdclient_get_connection? */ if (!mpdclient_cmd_subscribe(&c, chat_channel)) return (was_supported = false); @@ -93,10 +83,10 @@ return (was_supported = true); } -static Page * +static std::unique_ptr<Page> screen_chat_init(ScreenManager &screen, WINDOW *w, Size size) { - return new ChatPage(screen, w, size); + return std::make_unique<ChatPage>(screen, w, size); } void @@ -106,13 +96,13 @@ client-to-client messages anywhere else */ assert(strcmp(mpd_message_get_channel(&message), chat_channel) == 0); - Append(Utf8ToLocale(mpd_message_get_text(&message)).c_str()); + Append(mpd_message_get_text(&message)); SetDirty(); } void -ChatPage::Update(struct mpdclient &c, unsigned events) +ChatPage::Update(struct mpdclient &c, unsigned events) noexcept { if (CheckChatSupport(c) && (events & MPD_IDLE_MESSAGE)) { auto *connection = c.GetConnection(); @@ -134,42 +124,41 @@ } } -static char * -screen_chat_get_prefix() +const std::string & +ChatPage::GetPrefix() noexcept { - static char *prefix = nullptr; - - if (prefix) + if (!prefix.empty()) return prefix; if (!options.chat_prefix.empty()) { /* Options are encoded in the "locale" charset */ - prefix = locale_to_utf8(options.chat_prefix.c_str()); + prefix = LocaleToUtf8(options.chat_prefix.c_str()).c_str(); return prefix; } - prefix = g_strconcat("<", g_get_user_name(), "> ", nullptr); + const char *user = getenv("USER"); + if (user == nullptr) + user = "nobody"; + + prefix = std::string("<") + user + "> "; return prefix; } -static void -screen_chat_send_message(struct mpdclient *c, const char *msg) +void +ChatPage::SendMessage(struct mpdclient &c, const char *msg) noexcept { - char *prefix = screen_chat_get_prefix(); - char *full_msg = g_strconcat(prefix, LocaleToUtf8(msg).c_str(), - nullptr); + const std::string full_msg = GetPrefix() + LocaleToUtf8(msg).c_str(); - (void) mpdclient_cmd_send_message(c, chat_channel, full_msg); - g_free(full_msg); + (void) mpdclient_cmd_send_message(&c, chat_channel, full_msg.c_str()); } bool -ChatPage::OnCommand(struct mpdclient &c, command_t cmd) +ChatPage::OnCommand(struct mpdclient &c, Command cmd) { if (TextPage::OnCommand(c, cmd)) return true; - if (cmd == CMD_PLAY) { + if (cmd == Command::PLAY) { auto message = screen_readln(_("Your message"), nullptr, nullptr, nullptr); /* the user entered an empty line */ @@ -177,7 +166,7 @@ return true; if (CheckChatSupport(c)) - screen_chat_send_message(&c, message.c_str()); + SendMessage(c, message.c_str()); else screen_status_message(_("Message could not be sent")); @@ -187,7 +176,9 @@ return false; } -const struct screen_functions screen_chat = { +const PageMeta screen_chat = { "chat", + N_("Chat"), + Command::SCREEN_CHAT, screen_chat_init, };
View file
ncmpc-0.30.tar.xz/src/ChatPage.hxx -> ncmpc-0.32.tar.xz/src/ChatPage.hxx
Changed
@@ -24,8 +24,8 @@ #ifdef ENABLE_CHAT_SCREEN -struct screen_functions; -extern const struct screen_functions screen_chat; +struct PageMeta; +extern const PageMeta screen_chat; #endif
View file
ncmpc-0.32.tar.xz/src/Command.cxx
Added
@@ -0,0 +1,268 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Command.hxx" +#include "i18n.h" +#include "util/Macros.hxx" + +#include <string.h> + +static constexpr command_definition_t cmds[] = { +#ifdef ENABLE_KEYDEF_SCREEN + { "screen-keyedit", + N_("Key configuration screen") }, +#endif + { "quit", + N_("Quit") }, + + /* movement */ + { "up", + N_("Move cursor up") }, + { "down", + N_("Move cursor down") }, + { "top", + N_("Move cursor to the top of screen") }, + { "middle", + N_("Move cursor to the middle of screen") }, + { "bottom", + N_("Move cursor to the bottom of screen") }, + { "home", + N_("Move cursor to the top of the list") }, + { "end", + N_("Move cursor to the bottom of the list") }, + { "pgup", + N_("Page up") }, + { "pgdn", + N_("Page down") }, + { "range-select", + N_("Range selection") }, + { "scroll-down-line", + N_("Scroll down one line") }, + { "scroll-up-line", + N_("Scroll up one line") }, + { "scroll-down-half", + N_("Scroll up half a screen") }, + { "scroll-up-half", + N_("Scroll down half a screen") }, + { "select-playing", + N_("Select currently playing song") }, + + + /* basic screens */ + { "screen-help", + N_("Help screen") }, + { "screen-playlist", + N_("Queue screen") }, + { "screen-browse", + N_("Browse screen") }, + + + /* player commands */ + { "play", + N_("Play/Enter directory") }, + { "pause", + N_("Pause") }, + { "stop", + N_("Stop") }, + { "crop", + N_("Crop") }, + { "next", + N_("Next track") }, + { "prev", + N_("Previous track") }, + { "seek-forward", + N_("Seek forward") }, + { "seek-backward", + N_("Seek backward") }, + { "volume-up", + N_("Increase volume") }, + { "volume-down", + N_("Decrease volume") }, + { "select", + N_("Select/deselect song in queue") }, + { "select_all", + N_("Select all listed items") }, + { "delete", + N_("Delete song from queue") }, + { "shuffle", + N_("Shuffle queue") }, + { "clear", + N_("Clear queue") }, + { "repeat", + N_("Toggle repeat mode") }, + { "random", + N_("Toggle random mode") }, + { "single", + N_("Toggle single mode") }, + { "consume", + N_("Toggle consume mode") }, + { "crossfade", + N_("Toggle crossfade mode") }, + { "db-update", + N_("Start a music database update") }, + { "save", + N_("Save queue") }, + { "add", + N_("Append song to queue") }, + + { "go-root-directory", + N_("Go to root directory") }, + { "go-parent-directory", + N_("Go to parent directory") }, + + { "locate", + N_("Locate song in browser") }, + + /* lists */ + { "move-up", + N_("Move item up") }, + { "move-down", + N_("Move item down") }, + { "update", + N_("Refresh screen") }, + + + /* ncmpc options */ + { "wrap-mode", + /* translators: toggle between wrapping and non-wrapping + search */ + N_("Toggle find mode") }, + { "autocenter-mode", + /* translators: the auto center mode always centers the song + currently being played */ + N_("Toggle auto center mode") }, + + + /* change screen */ + { "screen-next", + N_("Next screen") }, + { "screen-prev", + N_("Previous screen") }, + { "screen-swap", + N_("Swap to most recent screen") }, + + + /* find */ + { "find", + N_("Forward find") }, + { "find-next", + N_("Forward find next") }, + { "rfind", + N_("Backward find") }, + { "rfind-next", + N_("Backward find previous") }, + { "jump", + /* translators: this queries the user for a string + * and jumps directly (while the user is typing) + * to the entry which begins with this string */ + N_("Jump to") }, + + + /* extra screens */ +#ifdef ENABLE_ARTIST_SCREEN + { "screen-artist", + N_("Artist screen") }, +#endif +#ifdef ENABLE_SEARCH_SCREEN + { "screen-search", + N_("Search screen") }, + { "search-mode", + N_("Change search mode") }, +#endif +#ifdef ENABLE_SONG_SCREEN + { "view", + N_("View the selected and the currently playing song") }, +#endif +#ifdef ENABLE_LYRICS_SCREEN + { "screen-lyrics", + N_("Lyrics screen") }, + { "lyrics-interrupt", + /* translators: interrupt the current background action, + e.g. stop loading lyrics from the internet */ + N_("Interrupt action") }, + { "lyrics-update", + N_("Update Lyrics") }, + /* this command may move out of #ifdef ENABLE_LYRICS_SCREEN + at some point */ + { "edit", + N_("Edit the current item") }, +#endif + +#ifdef ENABLE_OUTPUTS_SCREEN + { "screen-outputs", + N_("Outputs screen") }, +#endif + +#ifdef ENABLE_CHAT_SCREEN + { "screen-chat", + N_("Chat screen") }, +#endif +}; + +static_assert(ARRAY_SIZE(cmds) == size_t(Command::NONE), + "Wrong command table size"); + +const command_definition_t * +get_command_definitions() +{ + return cmds; +} + +size_t +get_cmds_max_name_width() +{ + static size_t max = 0; + + if (max != 0) + return max; + + for (const auto &i : cmds) { + /* + * width and length are considered the same here, as command + * names are not translated. + */ + size_t len = strlen(i.name); + if (len > max) + max = len; + } + + return max; +} + +const char * +get_key_description(Command command) +{ + return gettext(cmds[size_t(command)].description); +} + +const char * +get_key_command_name(Command command) +{ + return cmds[size_t(command)].name; +} + +Command +get_key_command_from_name(const char *name) +{ + for (size_t i = 0; i < size_t(Command::NONE); ++i) + if (strcmp(name, cmds[i].name) == 0) + return Command(i); + + return Command::NONE; +}
View file
ncmpc-0.32.tar.xz/src/Command.hxx
Added
@@ -0,0 +1,155 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef COMMAND_H +#define COMMAND_H + +#include "config.h" +#include "util/Compiler.h" + +#include <stddef.h> + +/* commands */ +enum class Command : unsigned { +#ifdef ENABLE_KEYDEF_SCREEN + SCREEN_KEYDEF, +#endif + QUIT, + + /* movement */ + LIST_PREVIOUS, + LIST_NEXT, + LIST_TOP, + LIST_MIDDLE, + LIST_BOTTOM, + LIST_FIRST, + LIST_LAST, + LIST_PREVIOUS_PAGE, + LIST_NEXT_PAGE, + LIST_RANGE_SELECT, + LIST_SCROLL_DOWN_LINE, + LIST_SCROLL_UP_LINE, + LIST_SCROLL_DOWN_HALF, + LIST_SCROLL_UP_HALF, + SELECT_PLAYING, + + /* basic screens */ + SCREEN_HELP, + SCREEN_PLAY, + SCREEN_FILE, + + /* player commands */ + PLAY, + PAUSE, + STOP, + CROP, + TRACK_NEXT, + TRACK_PREVIOUS, + SEEK_FORWARD, + SEEK_BACKWARD, + VOLUME_UP, + VOLUME_DOWN, + SELECT, + SELECT_ALL, + DELETE, + SHUFFLE, + CLEAR, + REPEAT, + RANDOM, + SINGLE, + CONSUME, + CROSSFADE, + DB_UPDATE, + SAVE_PLAYLIST, + ADD, + GO_ROOT_DIRECTORY, + GO_PARENT_DIRECTORY, + LOCATE, + + /* lists */ + LIST_MOVE_UP, + LIST_MOVE_DOWN, + SCREEN_UPDATE, + + /* ncmpc options */ + TOGGLE_FIND_WRAP, + TOGGLE_AUTOCENTER, + + /* change screen */ + SCREEN_NEXT, + SCREEN_PREVIOUS, + SCREEN_SWAP, + + /* find */ + LIST_FIND, + LIST_FIND_NEXT, + LIST_RFIND, + LIST_RFIND_NEXT, + LIST_JUMP, + + /* extra screens */ +#ifdef ENABLE_ARTIST_SCREEN + SCREEN_ARTIST, +#endif +#ifdef ENABLE_SEARCH_SCREEN + SCREEN_SEARCH, + SEARCH_MODE, +#endif +#ifdef ENABLE_SONG_SCREEN + SCREEN_SONG, +#endif +#ifdef ENABLE_LYRICS_SCREEN + SCREEN_LYRICS, + INTERRUPT, + LYRICS_UPDATE, + EDIT, +#endif +#ifdef ENABLE_OUTPUTS_SCREEN + SCREEN_OUTPUTS, +#endif +#ifdef ENABLE_CHAT_SCREEN + SCREEN_CHAT, +#endif + + NONE, +}; + +typedef struct { + const char *name; + const char *description; +} command_definition_t; + +const command_definition_t * +get_command_definitions(); + +gcc_const +size_t +get_cmds_max_name_width(); + +gcc_pure +const char *get_key_description(Command command); + +gcc_pure +const char *get_key_command_name(Command command); + +gcc_pure +Command +get_key_command_from_name(const char *name); + +#endif
View file
ncmpc-0.32.tar.xz/src/CustomColors.cxx
Added
@@ -0,0 +1,63 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "CustomColors.hxx" +#include "i18n.h" + +#include <curses.h> + +#include <list> + +#include <stdio.h> + +struct CustomColor { + short color; + short r,g,b; + + constexpr CustomColor(short _color, short _r, short _g, short _b) + :color(_color), r(_r), g(_g), b(_b) {} +}; + +static std::list<CustomColor> custom_colors; + +/* This function is called from conf.c before curses have been started, + * it adds the definition to the color_definition_list and init_color() is + * done in colors_start() */ +void +colors_define(short color, short r, short g, short b) +{ + custom_colors.emplace_back(color, r, g, b); +} + +void +ApplyCustomColors() +{ + if (custom_colors.empty()) + return; + + if (!can_change_color()) { + fprintf(stderr, "%s\n", + _("Terminal lacks support for changing colors")); + return; + } + + for (const auto &i : custom_colors) + if (i.color < COLORS) + init_color(i.color, i.r, i.g, i.b); +}
View file
ncmpc-0.32.tar.xz/src/CustomColors.hxx
Added
@@ -0,0 +1,29 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef CUSTOM_COLORS_HXX +#define CUSTOM_COLORS_HXX + +void +colors_define(short color, short r, short g, short b); + +void +ApplyCustomColors(); + +#endif
View file
ncmpc-0.32.tar.xz/src/DelayedSeek.cxx
Added
@@ -0,0 +1,95 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "DelayedSeek.hxx" +#include "mpdclient.hxx" + +void +DelayedSeek::Commit() noexcept +{ + if (id < 0) + return; + + struct mpd_connection *connection = c.GetConnection(); + if (connection == nullptr) { + id = -1; + return; + } + + if (id == c.GetCurrentSongId()) + if (!mpd_run_seek_id(connection, id, time)) + c.HandleError(); + + id = -1; +} + +void +DelayedSeek::Cancel() noexcept +{ + commit_timer.cancel(); +} + +void +DelayedSeek::OnTimer(const boost::system::error_code &error) noexcept +{ + if (error) + return; + + Commit(); +} + +void +DelayedSeek::ScheduleTimer() noexcept +{ + boost::system::error_code error; + commit_timer.expires_from_now(std::chrono::milliseconds(500), error); + commit_timer.async_wait(std::bind(&DelayedSeek::OnTimer, + this, std::placeholders::_1)); +} + +bool +DelayedSeek::Seek(int offset) noexcept +{ + if (!c.playing_or_paused) + return false; + + int current_id = mpd_status_get_song_id(c.status); + if (current_id < 0) + return false; + + int new_time; + if (current_id == id) { + new_time = time; + } else { + id = current_id; + new_time = mpd_status_get_elapsed_time(c.status); + } + + new_time += offset; + if (new_time < 0) + new_time = 0; + else if ((unsigned)new_time > mpd_status_get_total_time(c.status)) + new_time = mpd_status_get_total_time(c.status); + + time = new_time; + + ScheduleTimer(); + + return true; +}
View file
ncmpc-0.32.tar.xz/src/DelayedSeek.hxx
Added
@@ -0,0 +1,68 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef NCMPC_DELAYED_SEEK_HXX +#define NCMPC_DELAYED_SEEK_HXX + +#include "AsioServiceFwd.hxx" + +#include <boost/asio/steady_timer.hpp> + +struct mpdclient; + +/** + * Helper class which handles user seek commands; it will delay + * actually sending the seek command to MPD. + */ +class DelayedSeek { + struct mpdclient &c; + + int id = -1; + unsigned time; + + boost::asio::steady_timer commit_timer; + +public: + DelayedSeek(boost::asio::io_service &io_service, + struct mpdclient &_c) noexcept + :c(_c), commit_timer(io_service) {} + + ~DelayedSeek() noexcept { + Cancel(); + } + + bool IsSeeking(int _id) const noexcept { + return id >= 0 && _id == id; + } + + unsigned GetTime() const noexcept { + return time; + } + + bool Seek(int offset) noexcept; + + void Commit() noexcept; + void Cancel() noexcept; + +private: + void OnTimer(const boost::system::error_code &error) noexcept; + void ScheduleTimer() noexcept; +}; + +#endif
View file
ncmpc-0.30.tar.xz/src/FileBrowserPage.cxx -> ncmpc-0.32.tar.xz/src/FileBrowserPage.cxx
Changed
@@ -18,7 +18,7 @@ */ #include "FileBrowserPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "FileListPage.hxx" #include "screen_status.hxx" #include "save_playlist.hxx" @@ -30,16 +30,15 @@ #include "filelist.hxx" #include "screen_utils.hxx" #include "screen_client.hxx" -#include "options.hxx" +#include "Options.hxx" +#include "util/UriUtil.hxx" #include <mpd/client.h> #include <string> -#include <ctype.h> #include <stdlib.h> #include <string.h> -#include <glib.h> class FileBrowserPage final : public FileListPage { std::string current_path; @@ -58,7 +57,7 @@ /** * Change to the specified absolute directory. */ - bool ChangeDirectory(struct mpdclient &c, const char *new_path); + bool ChangeDirectory(struct mpdclient &c, std::string &&new_path); /** * Change to the parent directory of the current directory. @@ -77,9 +76,9 @@ public: /* virtual methods from class Page */ - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; }; static void @@ -115,9 +114,9 @@ } bool -FileBrowserPage::ChangeDirectory(struct mpdclient &c, const char *new_path) +FileBrowserPage::ChangeDirectory(struct mpdclient &c, std::string &&new_path) { - current_path = new_path; + current_path = std::move(new_path); Reload(c); @@ -131,14 +130,10 @@ bool FileBrowserPage::ChangeToParent(struct mpdclient &c) { - char *parent = g_path_get_dirname(current_path.c_str()); - if (strcmp(parent, ".") == 0) - parent[0] = '\0'; + auto parent = GetParentUri(current_path.c_str()); + const auto old_path = std::move(current_path); - auto old_path = std::move(current_path); - - bool success = ChangeDirectory(c, parent); - g_free(parent); + bool success = ChangeDirectory(c, std::move(parent)); int idx = success ? filelist->FindDirectory(old_path.c_str()) @@ -178,15 +173,7 @@ /* determine the song's parent directory and go there */ - const char *slash = strrchr(uri, '/'); - char *allocated = nullptr; - const char *parent = slash != nullptr - ? (allocated = g_strndup(uri, slash - uri)) - : ""; - - bool ret = ChangeDirectory(c, parent); - g_free(allocated); - if (!ret) + if (!ChangeDirectory(c, GetParentUri(uri))) return false; /* select the specified song */ @@ -231,11 +218,10 @@ } } - char *defaultname_utf8 = nullptr; if(defaultname) - defaultname_utf8 = utf8_to_locale(defaultname); - playlist_save(&c, nullptr, defaultname_utf8); - g_free(defaultname_utf8); + playlist_save(&c, nullptr, Utf8ToLocale(defaultname).c_str()); + else + playlist_save(&c, nullptr, nullptr); } void @@ -267,7 +253,7 @@ char prompt[256]; snprintf(prompt, sizeof(prompt), _("Delete playlist %s?"), - Utf8ToLocale(g_basename(mpd_playlist_get_path(playlist))).c_str()); + Utf8ToLocale(GetUriFilename(mpd_playlist_get_path(playlist))).c_str()); bool confirmed = screen_get_yesno(prompt, false); if (!confirmed) { /* translators: a dialog was aborted by the user */ @@ -288,14 +274,14 @@ } } -static Page * +static std::unique_ptr<Page> screen_file_init(ScreenManager &_screen, WINDOW *w, Size size) { - return new FileBrowserPage(_screen, w, size); + return std::make_unique<FileBrowserPage>(_screen, w, size); } const char * -FileBrowserPage::GetTitle(char *str, size_t size) const +FileBrowserPage::GetTitle(char *str, size_t size) const noexcept { const char *path = nullptr, *prev = nullptr, *slash = current_path.c_str(); @@ -316,7 +302,7 @@ } void -FileBrowserPage::Update(struct mpdclient &c, unsigned events) +FileBrowserPage::Update(struct mpdclient &c, unsigned events) noexcept { if (events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST)) { /* the db has changed -> update the filelist */ @@ -334,29 +320,29 @@ } bool -FileBrowserPage::OnCommand(struct mpdclient &c, command_t cmd) +FileBrowserPage::OnCommand(struct mpdclient &c, Command cmd) { switch(cmd) { - case CMD_PLAY: + case Command::PLAY: if (HandleEnter(c)) return true; break; - case CMD_GO_ROOT_DIRECTORY: - ChangeDirectory(c, ""); + case Command::GO_ROOT_DIRECTORY: + ChangeDirectory(c, {}); return true; - case CMD_GO_PARENT_DIRECTORY: + case Command::GO_PARENT_DIRECTORY: ChangeToParent(c); return true; - case CMD_LOCATE: + case Command::LOCATE: /* don't let browser_cmd() evaluate the locate command - it's a no-op, and by the way, leads to a segmentation fault in the current implementation */ return false; - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: Reload(c); screen_browser_sync_highlights(filelist, &c.playlist); return false; @@ -372,15 +358,15 @@ return false; switch(cmd) { - case CMD_DELETE: + case Command::DELETE: HandleDelete(c); break; - case CMD_SAVE_PLAYLIST: + case Command::SAVE_PLAYLIST: HandleSave(c); break; - case CMD_DB_UPDATE: + case Command::DB_UPDATE: screen_database_update(&c, current_path.c_str()); return true; @@ -391,8 +377,10 @@ return false; } -const struct screen_functions screen_browse = { +const PageMeta screen_browse = { "browse", + N_("Browse"), + Command::SCREEN_FILE, screen_file_init, };
View file
ncmpc-0.30.tar.xz/src/FileBrowserPage.hxx -> ncmpc-0.32.tar.xz/src/FileBrowserPage.hxx
Changed
@@ -22,9 +22,10 @@ struct mpdclient; struct mpd_song; +struct PageMeta; class ScreenManager; -extern const struct screen_functions screen_browse; +extern const PageMeta screen_browse; bool screen_file_goto_song(ScreenManager &_screen, struct mpdclient &c,
View file
ncmpc-0.30.tar.xz/src/FileListPage.cxx -> ncmpc-0.32.tar.xz/src/FileListPage.cxx
Changed
@@ -22,23 +22,23 @@ #include "FileBrowserPage.hxx" #include "SongPage.hxx" #include "LyricsPage.hxx" +#include "Command.hxx" #include "screen_status.hxx" #include "screen_find.hxx" #include "screen.hxx" #include "i18n.h" -#include "options.hxx" +#include "Options.hxx" #include "charset.hxx" #include "strfsong.hxx" #include "mpdclient.hxx" #include "filelist.hxx" -#include "colors.hxx" +#include "Styles.hxx" #include "paint.hxx" #include "song_paint.hxx" +#include "util/UriUtil.hxx" #include <mpd/client.h> -#include <glib.h> - #include <string.h> #define BUFSIZE 1024 @@ -47,7 +47,7 @@ #define HIGHLIGHT (0x01) #endif -FileListPage::~FileListPage() +FileListPage::~FileListPage() noexcept { delete filelist; } @@ -65,7 +65,7 @@ if (entity != nullptr && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const auto *song = mpd_entity_get_song(entity); - if (playlist->FindUri(*song) >= 0) + if (playlist->ContainsUri(mpd_song_get_uri(song))) entry.flags |= HIGHLIGHT; else entry.flags &= ~HIGHLIGHT; @@ -77,7 +77,7 @@ const char * FileListPage::GetListItemText(char *buffer, size_t size, - unsigned idx) const + unsigned idx) const noexcept { assert(filelist != nullptr); assert(idx < filelist->size()); @@ -90,9 +90,8 @@ if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY) { const auto *dir = mpd_entity_get_directory(entity); - const char *name = g_basename(mpd_directory_get_path(dir)); - g_strlcpy(buffer, Utf8ToLocale(name).c_str(), size); - return buffer; + const char *name = GetUriFilename(mpd_directory_get_path(dir)); + return utf8_to_locale(name, buffer, size); } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { const auto *song = mpd_entity_get_song(entity); @@ -100,9 +99,8 @@ return buffer; } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) { const auto *playlist = mpd_entity_get_playlist(entity); - const char *name = g_basename(mpd_playlist_get_path(playlist)); - g_strlcpy(buffer, Utf8ToLocale(name).c_str(), size); - return buffer; + const char *name = GetUriFilename(mpd_playlist_get_path(playlist)); + return utf8_to_locale(name, buffer, size); } return "Error: Unknown entry!"; @@ -116,8 +114,8 @@ return false; if (mpd_run_load(connection, mpd_playlist_get_path(playlist))) { - const char *name = g_basename(mpd_playlist_get_path(playlist)); - screen_status_printf(_("Loading playlist %s..."), + const char *name = GetUriFilename(mpd_playlist_get_path(playlist)); + screen_status_printf(_("Loading playlist '%s'"), Utf8ToLocale(name).c_str()); c->events |= MPD_IDLE_QUEUE; @@ -142,7 +140,7 @@ id = -1; else #endif - id = c->playlist.FindUri(*song); + id = c->playlist.FindIdByUri(mpd_song_get_uri(song)); if (id < 0) { char buf[BUFSIZE]; @@ -264,7 +262,7 @@ entry->flags |= HIGHLIGHT; #endif - if (mpdclient_cmd_add(c, song)) { + if (c->RunAdd(*song)) { char buf[BUFSIZE]; strfsong(buf, BUFSIZE, @@ -279,8 +277,8 @@ entry->flags &= ~HIGHLIGHT; - while ((idx = c->playlist.FindUri(*song)) >= 0) - mpdclient_cmd_delete(c, idx); + while ((idx = c->playlist.FindByUri(mpd_song_get_uri(song))) >= 0) + c->RunDelete(idx); #endif } @@ -363,7 +361,7 @@ #endif bool -FileListPage::OnCommand(struct mpdclient &c, command_t cmd) +FileListPage::OnCommand(struct mpdclient &c, Command cmd) { if (filelist == nullptr) return false; @@ -376,20 +374,20 @@ const struct mpd_song *song; #endif - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SetDirty(); return true; - case CMD_LIST_JUMP: - screen_jump(screen, &lw, *this, *this); + case Command::LIST_JUMP: + screen_jump(screen, lw, *this, *this); SetDirty(); return true; #ifdef ENABLE_SONG_SCREEN - case CMD_SCREEN_SONG: + case Command::SCREEN_SONG: song = GetSelectedSong(); if (song == nullptr) return false; @@ -399,7 +397,7 @@ #endif #ifdef ENABLE_LYRICS_SCREEN - case CMD_SCREEN_LYRICS: + case Command::SCREEN_LYRICS: song = GetSelectedSong(); if (song == nullptr) return false; @@ -407,7 +405,7 @@ screen_lyrics_switch(screen, c, *song, false); return true; #endif - case CMD_SCREEN_SWAP: + case Command::SCREEN_SWAP: screen.Swap(c, GetSelectedSong()); return true; @@ -421,27 +419,27 @@ switch (cmd) { const struct mpd_song *song; - case CMD_PLAY: + case Command::PLAY: HandleEnter(c); return true; - case CMD_SELECT: + case Command::SELECT: if (HandleSelect(c)) - lw.HandleCommand(CMD_LIST_NEXT); + lw.HandleCommand(Command::LIST_NEXT); SetDirty(); return true; - case CMD_ADD: + case Command::ADD: if (HandleAdd(c)) - lw.HandleCommand(CMD_LIST_NEXT); + lw.HandleCommand(Command::LIST_NEXT); SetDirty(); return true; - case CMD_SELECT_ALL: + case Command::SELECT_ALL: HandleSelectAll(c); return true; - case CMD_LOCATE: + case Command::LOCATE: song = GetSelectedSong(); if (song == nullptr) return false; @@ -460,7 +458,7 @@ screen_browser_paint_directory(WINDOW *w, unsigned width, bool selected, const char *name) { - row_color(w, COLOR_DIRECTORY, selected); + row_color(w, Style::DIRECTORY, selected); waddch(w, '['); waddstr(w, name); @@ -474,13 +472,13 @@ screen_browser_paint_playlist(WINDOW *w, unsigned width, bool selected, const char *name) { - row_paint_text(w, width, COLOR_PLAYLIST, selected, name); + row_paint_text(w, width, Style::PLAYLIST, selected, name); } void FileListPage::PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const + bool selected) const noexcept { assert(filelist != nullptr); assert(i < filelist->size()); @@ -505,7 +503,7 @@ case MPD_ENTITY_TYPE_DIRECTORY: directory = mpd_entity_get_directory(entity); - name = g_basename(mpd_directory_get_path(directory)); + name = GetUriFilename(mpd_directory_get_path(directory)); screen_browser_paint_directory(w, width, selected, Utf8ToLocale(name).c_str()); break; @@ -518,19 +516,20 @@ case MPD_ENTITY_TYPE_PLAYLIST: playlist = mpd_entity_get_playlist(entity); - name = g_basename(mpd_playlist_get_path(playlist)); + name = GetUriFilename(mpd_playlist_get_path(playlist)); screen_browser_paint_playlist(w, width, selected, Utf8ToLocale(name).c_str()); break; default: - row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, + row_paint_text(w, width, + highlight ? Style::LIST_BOLD : Style::LIST, selected, "<unknown>"); } } void -FileListPage::Paint() const +FileListPage::Paint() const noexcept { lw.Paint(*this); }
View file
ncmpc-0.30.tar.xz/src/FileListPage.hxx -> ncmpc-0.32.tar.xz/src/FileListPage.hxx
Changed
@@ -20,13 +20,13 @@ #ifndef FILE_LIST_PAGE_HXX #define FILE_LIST_PAGE_HXX -#include "command.hxx" #include "config.h" -#include "ncmpc_curses.h" #include "ListPage.hxx" #include "ListRenderer.hxx" #include "ListText.hxx" +#include <curses.h> + struct mpdclient; struct MpdQueue; class ScreenManager; @@ -48,7 +48,7 @@ screen(_screen), song_format(_song_format) {} - ~FileListPage() override; + ~FileListPage() noexcept override; protected: gcc_pure @@ -76,16 +76,16 @@ /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const final; + bool selected) const noexcept final; /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; public: /* virtual methods from class Page */ - void Paint() const override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void Paint() const noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; #ifdef HAVE_GETMOUSE bool OnMouse(struct mpdclient &c, Point p,
View file
ncmpc-0.32.tar.xz/src/GlobalBindings.cxx
Added
@@ -0,0 +1,165 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "GlobalBindings.hxx" +#include "Bindings.hxx" + +#include <curses.h> + +#define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */ + +#define BS KEY_BACKSPACE +#define DEL KEY_DC +#define UP KEY_UP +#define DWN KEY_DOWN +#define LEFT KEY_LEFT +#define RGHT KEY_RIGHT +#define HOME KEY_HOME +#define END KEY_END +#define PGDN KEY_NPAGE +#define PGUP KEY_PPAGE +#define TAB 0x09 +#define STAB 0x161 +#define ESC 0x1B +#define RET '\r' +#define F1 KEY_F(1) +#define F2 KEY_F(2) +#define F3 KEY_F(3) +#define F4 KEY_F(4) +#define F5 KEY_F(5) +#define F6 KEY_F(6) +#define F7 KEY_F(7) +#define F8 KEY_F(8) +#define F9 KEY_F(9) +#define C(x) KEY_CTL(x) + +static KeyBindings global_key_bindings{{{ +#ifdef ENABLE_KEYDEF_SCREEN + {'K'}, +#endif + {'q', 'Q', C('C')}, + + /* movement */ + {UP, 'k'}, + {DWN, 'j'}, + {'H'}, + {'M'}, + {'L'}, + {HOME, C('A')}, + {END, C('E')}, + {PGUP}, + {PGDN}, + {'v', 0}, + {C('N'), 0}, + {C('B'), 0}, + {'N', 0}, + {'B', 0}, + {'l'}, + + /* basic screens */ + {'1', F1, 'h'}, + {'2', F2}, + {'3', F3}, + + /* player commands */ + {RET}, + {'P'}, + {'s', BS}, + {'o'}, + {'>'}, + {'<'}, + {'f'}, + {'b'}, + {'+', RGHT}, + {'-', LEFT}, + {' '}, + {'t'}, + {DEL, 'd'}, + {'Z'}, + {'c'}, + {'r'}, + {'z'}, + {'y'}, + {'C'}, + {'x'}, + {C('U')}, + {'S'}, + {'a'}, + + {'!'}, + {'"'}, + + {'G'}, + + /* lists */ + {C('K')}, + {C('J')}, + {C('L')}, + + + /* ncmpc options */ + {'w'}, + {'U'}, + + /* change screen */ + {TAB}, + {STAB}, + {'`'}, + + + /* find */ + {'/'}, + {'n'}, + {'?'}, + {'p'}, + {'.'}, + + + /* extra screens */ +#ifdef ENABLE_ARTIST_SCREEN + {'4', F4}, +#endif +#ifdef ENABLE_SEARCH_SCREEN + {'5', F5}, + {'m'}, +#endif +#ifdef ENABLE_SONG_SCREEN + {'i'}, +#endif +#ifdef ENABLE_LYRICS_SCREEN + {'7', F7}, + {ESC}, + {'u'}, + {'e'}, +#endif + +#ifdef ENABLE_OUTPUTS_SCREEN + {'8', F8}, +#endif + +#ifdef ENABLE_CHAT_SCREEN + {'9', F9}, +#endif +}}}; + +KeyBindings & +GetGlobalKeyBindings() +{ + return global_key_bindings; +}
View file
ncmpc-0.32.tar.xz/src/GlobalBindings.hxx
Added
@@ -0,0 +1,31 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef GLOBAL_BINDINGS_HXX +#define GLOBAL_BINDINGS_HXX + +#include "util/Compiler.h" + +struct KeyBindings; + +gcc_const +KeyBindings & +GetGlobalKeyBindings(); + +#endif
View file
ncmpc-0.30.tar.xz/src/HelpPage.cxx -> ncmpc-0.32.tar.xz/src/HelpPage.cxx
Changed
@@ -18,183 +18,202 @@ */ #include "HelpPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "ListPage.hxx" #include "ListRenderer.hxx" #include "ListText.hxx" #include "screen_find.hxx" #include "paint.hxx" -#include "charset.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "config.h" #include "i18n.h" #include "util/Macros.hxx" +#include "util/LocaleString.hxx" #include <assert.h> -struct help_text_row { +struct HelpRow { signed char highlight; - command_t command; + Command command; const char *text; + + constexpr HelpRow(signed char _highlight, + Command _command, + const char *_text=nullptr) + :highlight(_highlight), command(_command), text(_text) {} + + constexpr HelpRow(Command _command, + const char *_text=nullptr) + :HelpRow(0, _command, _text) {} }; -static const struct help_text_row help_text[] = { - { 1, CMD_NONE, N_("Movement") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_LIST_PREVIOUS, nullptr }, - { 0, CMD_LIST_NEXT, nullptr }, - { 0, CMD_LIST_TOP, nullptr }, - { 0, CMD_LIST_MIDDLE, nullptr }, - { 0, CMD_LIST_BOTTOM, nullptr }, - { 0, CMD_LIST_PREVIOUS_PAGE, nullptr }, - { 0, CMD_LIST_NEXT_PAGE, nullptr }, - { 0, CMD_LIST_FIRST, nullptr }, - { 0, CMD_LIST_LAST, nullptr }, - { 0, CMD_LIST_RANGE_SELECT, nullptr }, - { 0, CMD_LIST_SCROLL_UP_LINE, nullptr}, - { 0, CMD_LIST_SCROLL_DOWN_LINE, nullptr}, - { 0, CMD_LIST_SCROLL_UP_HALF, nullptr}, - { 0, CMD_LIST_SCROLL_DOWN_HALF, nullptr}, - { 0, CMD_NONE, nullptr }, - - { 0, CMD_SCREEN_PREVIOUS,nullptr }, - { 0, CMD_SCREEN_NEXT, nullptr }, - { 0, CMD_SCREEN_SWAP, nullptr }, - { 0, CMD_SCREEN_HELP, nullptr }, - { 0, CMD_SCREEN_PLAY, nullptr }, - { 0, CMD_SCREEN_FILE, nullptr }, +static constexpr HelpRow HLINE{2, Command::NONE}; + +static constexpr HelpRow +Heading(const char *text) +{ + return {1, Command::NONE, text}; +} + +static constexpr HelpRow help_text[] = { + Heading(N_("Movement")), + HLINE, + Command::LIST_PREVIOUS, + Command::LIST_NEXT, + Command::LIST_TOP, + Command::LIST_MIDDLE, + Command::LIST_BOTTOM, + Command::LIST_PREVIOUS_PAGE, + Command::LIST_NEXT_PAGE, + Command::LIST_FIRST, + Command::LIST_LAST, + Command::LIST_RANGE_SELECT, + Command::LIST_SCROLL_UP_LINE, + Command::LIST_SCROLL_DOWN_LINE, + Command::LIST_SCROLL_UP_HALF, + Command::LIST_SCROLL_DOWN_HALF, + Command::NONE, + + Command::SCREEN_PREVIOUS, + Command::SCREEN_NEXT, + Command::SCREEN_SWAP, + Command::SCREEN_HELP, + Command::SCREEN_PLAY, + Command::SCREEN_FILE, #ifdef ENABLE_ARTIST_SCREEN - { 0, CMD_SCREEN_ARTIST, nullptr }, + Command::SCREEN_ARTIST, #endif #ifdef ENABLE_SEARCH_SCREEN - { 0, CMD_SCREEN_SEARCH, nullptr }, + Command::SCREEN_SEARCH, #endif #ifdef ENABLE_LYRICS_SCREEN - { 0, CMD_SCREEN_LYRICS, nullptr }, + Command::SCREEN_LYRICS, #endif #ifdef ENABLE_OUTPUTS_SCREEN - { 0, CMD_SCREEN_OUTPUTS, nullptr }, + Command::SCREEN_OUTPUTS, #endif #ifdef ENABLE_CHAT_SCREEN - { 0, CMD_SCREEN_CHAT, nullptr }, + Command::SCREEN_CHAT, #endif #ifdef ENABLE_KEYDEF_SCREEN - { 0, CMD_SCREEN_KEYDEF, nullptr }, + Command::SCREEN_KEYDEF, #endif - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Global") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_STOP, nullptr }, - { 0, CMD_PAUSE, nullptr }, - { 0, CMD_CROP, nullptr }, - { 0, CMD_TRACK_NEXT, nullptr }, - { 0, CMD_TRACK_PREVIOUS, nullptr }, - { 0, CMD_SEEK_FORWARD, nullptr }, - { 0, CMD_SEEK_BACKWARD, nullptr }, - { 0, CMD_VOLUME_DOWN, nullptr }, - { 0, CMD_VOLUME_UP, nullptr }, - { 0, CMD_NONE, nullptr }, - { 0, CMD_REPEAT, nullptr }, - { 0, CMD_RANDOM, nullptr }, - { 0, CMD_SINGLE, nullptr }, - { 0, CMD_CONSUME, nullptr }, - { 0, CMD_CROSSFADE, nullptr }, - { 0, CMD_SHUFFLE, nullptr }, - { 0, CMD_DB_UPDATE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 0, CMD_LIST_FIND, nullptr }, - { 0, CMD_LIST_RFIND, nullptr }, - { 0, CMD_LIST_FIND_NEXT, nullptr }, - { 0, CMD_LIST_RFIND_NEXT, nullptr }, - { 0, CMD_LIST_JUMP, nullptr }, - { 0, CMD_TOGGLE_FIND_WRAP, nullptr }, - { 0, CMD_LOCATE, nullptr }, + Command::NONE, + Command::NONE, + Heading(N_("Global")), + HLINE, + Command::STOP, + Command::PAUSE, + Command::CROP, + Command::TRACK_NEXT, + Command::TRACK_PREVIOUS, + Command::SEEK_FORWARD, + Command::SEEK_BACKWARD, + Command::VOLUME_DOWN, + Command::VOLUME_UP, + Command::NONE, + Command::REPEAT, + Command::RANDOM, + Command::SINGLE, + Command::CONSUME, + Command::CROSSFADE, + Command::SHUFFLE, + Command::DB_UPDATE, + Command::NONE, + Command::LIST_FIND, + Command::LIST_RFIND, + Command::LIST_FIND_NEXT, + Command::LIST_RFIND_NEXT, + Command::LIST_JUMP, + Command::TOGGLE_FIND_WRAP, + Command::LOCATE, #ifdef ENABLE_SONG_SCREEN - { 0, CMD_SCREEN_SONG, nullptr }, + Command::SCREEN_SONG, #endif - { 0, CMD_NONE, nullptr }, - { 0, CMD_QUIT, nullptr }, - - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Queue screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_PLAY, N_("Play") }, - { 0, CMD_DELETE, nullptr }, - { 0, CMD_CLEAR, nullptr }, - { 0, CMD_LIST_MOVE_UP, N_("Move song up") }, - { 0, CMD_LIST_MOVE_DOWN, N_("Move song down") }, - { 0, CMD_ADD, nullptr }, - { 0, CMD_SAVE_PLAYLIST, nullptr }, - { 0, CMD_SCREEN_UPDATE, N_("Center") }, - { 0, CMD_SELECT_PLAYING, nullptr }, - { 0, CMD_TOGGLE_AUTOCENTER, nullptr }, - - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Browse screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_PLAY, N_("Enter directory/Select and play song") }, - { 0, CMD_SELECT, nullptr }, - { 0, CMD_ADD, N_("Append song to queue") }, - { 0, CMD_SAVE_PLAYLIST, nullptr }, - { 0, CMD_DELETE, N_("Delete playlist") }, - { 0, CMD_GO_PARENT_DIRECTORY, nullptr }, - { 0, CMD_GO_ROOT_DIRECTORY, nullptr }, - { 0, CMD_SCREEN_UPDATE, nullptr }, + Command::NONE, + Command::QUIT, + + Command::NONE, + Command::NONE, + Heading(N_("Queue screen")), + HLINE, + { Command::PLAY, N_("Play") }, + Command::DELETE, + Command::CLEAR, + Command::LIST_MOVE_UP, + Command::LIST_MOVE_DOWN, + Command::ADD, + Command::SAVE_PLAYLIST, + { Command::SCREEN_UPDATE, N_("Center") }, + Command::SELECT_PLAYING, + Command::TOGGLE_AUTOCENTER, + + Command::NONE, + Command::NONE, + Heading(N_("Browse screen")), + HLINE, + { Command::PLAY, N_("Enter directory/Select and play song") }, + Command::SELECT, + Command::ADD, + Command::SAVE_PLAYLIST, + { Command::DELETE, N_("Delete playlist") }, + Command::GO_PARENT_DIRECTORY, + Command::GO_ROOT_DIRECTORY, + Command::SCREEN_UPDATE, #ifdef ENABLE_SEARCH_SCREEN - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Search screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_SCREEN_SEARCH, N_("Search") }, - { 0, CMD_PLAY, N_("Select and play") }, - { 0, CMD_SELECT, nullptr }, - { 0, CMD_ADD, N_("Append song to queue") }, - { 0, CMD_SELECT_ALL, nullptr }, - { 0, CMD_SEARCH_MODE, nullptr }, + Command::NONE, + Command::NONE, + Heading(N_("Search screen")), + HLINE, + { Command::SCREEN_SEARCH, N_("New search") }, + { Command::PLAY, N_("Select and play") }, + Command::SELECT, + { Command::ADD, N_("Append song to queue") }, + Command::SELECT_ALL, + Command::SEARCH_MODE, #endif #ifdef ENABLE_LYRICS_SCREEN - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Lyrics screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_SCREEN_LYRICS, N_("View Lyrics") }, - { 0, CMD_SELECT, N_("(Re)load lyrics") }, + Command::NONE, + Command::NONE, + Heading(N_("Lyrics screen")), + HLINE, + { Command::SCREEN_LYRICS, N_("View Lyrics") }, + { Command::SELECT, N_("(Re)load lyrics") }, /* to translators: this hotkey aborts the retrieval of lyrics from the server */ - { 0, CMD_INTERRUPT, N_("Interrupt retrieval") }, - { 0, CMD_LYRICS_UPDATE, N_("Download lyrics for currently playing song") }, - { 0, CMD_EDIT, N_("Add or edit lyrics") }, - { 0, CMD_SAVE_PLAYLIST, N_("Save lyrics") }, - { 0, CMD_DELETE, N_("Delete saved lyrics") }, + { Command::INTERRUPT, N_("Interrupt retrieval") }, + { Command::LYRICS_UPDATE, N_("Download lyrics for currently playing song") }, + { Command::EDIT, N_("Add or edit lyrics") }, + { Command::SAVE_PLAYLIST, N_("Save lyrics") }, + { Command::DELETE, N_("Delete saved lyrics") }, #endif #ifdef ENABLE_OUTPUTS_SCREEN - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Outputs screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_PLAY, N_("Enable/disable output") }, + Command::NONE, + Command::NONE, + Heading(N_("Outputs screen")), + HLINE, + { Command::PLAY, N_("Enable/disable output") }, #endif #ifdef ENABLE_CHAT_SCREEN - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Chat screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_PLAY, N_("Write a message") }, + Command::NONE, + Command::NONE, + Heading(N_("Chat screen")), + HLINE, + { Command::PLAY, N_("Write a message") }, #endif #ifdef ENABLE_KEYDEF_SCREEN - { 0, CMD_NONE, nullptr }, - { 0, CMD_NONE, nullptr }, - { 1, CMD_NONE, N_("Keydef screen") }, - { 2, CMD_NONE, nullptr }, - { 0, CMD_PLAY, N_("Edit keydefs for selected command") }, - { 0, CMD_DELETE, N_("Remove selected keydef") }, - { 0, CMD_ADD, N_("Add a keydef") }, - { 0, CMD_GO_PARENT_DIRECTORY, N_("Go up a level") }, - { 0, CMD_SAVE_PLAYLIST, N_("Apply and save changes") }, + Command::NONE, + Command::NONE, + Heading(N_("Keydef screen")), + HLINE, + { Command::PLAY, N_("Edit keydefs for selected command") }, + { Command::DELETE, N_("Remove selected keydef") }, + { Command::ADD, N_("Add a keydef") }, + { Command::GO_PARENT_DIRECTORY, N_("Go up a level") }, + { Command::SAVE_PLAYLIST, N_("Apply and save changes") }, #endif }; @@ -212,89 +231,90 @@ /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; /* virtual methods from class Page */ - void Paint() const override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void Paint() const noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; - const char *GetTitle(char *, size_t) const override { + const char *GetTitle(char *, size_t) const noexcept override { return _("Help"); } }; const char * -HelpPage::GetListItemText(char *, size_t, unsigned i) const +HelpPage::GetListItemText(char *, size_t, unsigned i) const noexcept { - const struct help_text_row *row = &help_text[i]; + const auto *row = &help_text[i]; assert(i < ARRAY_SIZE(help_text)); if (row->text != nullptr) - return _(row->text); + return gettext(row->text); - if (row->command != CMD_NONE) + if (row->command != Command::NONE) return get_key_description(row->command); return ""; } -static Page * +static std::unique_ptr<Page> help_init(ScreenManager &screen, WINDOW *w, Size size) { - return new HelpPage(screen, w, size); + return std::make_unique<HelpPage>(screen, w, size); } void HelpPage::PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - gcc_unused bool selected) const + gcc_unused bool selected) const noexcept { - const struct help_text_row *row = &help_text[i]; + const auto *row = &help_text[i]; assert(i < ARRAY_SIZE(help_text)); - row_color(w, row->highlight ? COLOR_LIST_BOLD : COLOR_LIST, false); + row_color(w, row->highlight ? Style::LIST_BOLD : Style::LIST, false); wclrtoeol(w); - if (row->command == CMD_NONE) { + if (row->command == Command::NONE) { if (row->text != nullptr) - mvwaddstr(w, y, 6, _(row->text)); + mvwaddstr(w, y, 6, gettext(row->text)); else if (row->highlight == 2) - mvwhline(w, y, 3, '-', width - 6); + mvwhline(w, y, 3, ACS_HLINE, width - 6); } else { - const char *key = get_key_names(row->command, true); + const auto key = + GetGlobalKeyBindings().GetKeyNames(row->command); - if (utf8_width(key) < 20) - wmove(w, y, 20 - utf8_width(key)); - waddstr(w, key); + if (StringWidthMB(key.c_str()) < 20) + wmove(w, y, 20 - StringWidthMB(key.c_str())); + waddstr(w, key.c_str()); mvwaddch(w, y, 21, ':'); mvwaddstr(w, y, 23, row->text != nullptr - ? _(row->text) + ? gettext(row->text) : get_key_description(row->command)); } } void -HelpPage::Paint() const +HelpPage::Paint() const noexcept { lw.Paint(*this); } bool -HelpPage::OnCommand(struct mpdclient &c, command_t cmd) +HelpPage::OnCommand(struct mpdclient &c, Command cmd) { if (ListPage::OnCommand(c, cmd)) return true; lw.SetCursor(lw.start); - if (screen_find(screen, &lw, cmd, *this)) { + if (screen_find(screen, lw, cmd, *this)) { /* center the row */ lw.Center(lw.selected); SetDirty(); @@ -304,7 +324,9 @@ return false; } -const struct screen_functions screen_help = { +const PageMeta screen_help = { "help", + N_("Help"), + Command::SCREEN_HELP, help_init, };
View file
ncmpc-0.30.tar.xz/src/HelpPage.hxx -> ncmpc-0.32.tar.xz/src/HelpPage.hxx
Changed
@@ -23,7 +23,8 @@ #include "config.h" #ifdef ENABLE_HELP_SCREEN -extern const struct screen_functions screen_help; +struct PageMeta; +extern const PageMeta screen_help; #endif #endif
View file
ncmpc-0.32.tar.xz/src/Instance.cxx
Added
@@ -0,0 +1,70 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Instance.hxx" +#include "Options.hxx" +#include "keyboard.hxx" +#include "xterm_title.hxx" + +Instance::Instance() + :io_service(), +#ifndef _WIN32 + sigterm(io_service, SIGTERM, SIGINT, SIGHUP), + sigwinch(io_service, SIGWINCH, SIGCONT), +#endif + client(io_service, + options.host.empty() ? nullptr : options.host.c_str(), + options.port, + options.timeout_ms, + options.password.empty() ? nullptr : options.password.c_str()), + seek(io_service, client), + reconnect_timer(io_service), + update_timer(io_service), +#ifndef NCMPC_MINI + check_key_bindings_timer(io_service), +#endif + screen_manager(io_service), +#ifdef ENABLE_LIRC + lirc_input(io_service), +#endif + user_input(io_service, *screen_manager.main_window.w) +{ + screen_manager.Init(&client); + + sigterm.async_wait([this](const auto &, int){ + this->io_service.stop(); + }); + +#ifndef _WIN32 + AsyncWaitSigwinch(); +#endif +} + +Instance::~Instance() +{ + screen_manager.Exit(); +} + +void +Instance::Run() +{ + screen_manager.Update(client, seek); + + io_service.run(); +}
View file
ncmpc-0.32.tar.xz/src/Instance.hxx
Added
@@ -0,0 +1,160 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef NCMPC_INSTANCE_HXX +#define NCMPC_INSTANCE_HXX + +#include "config.h" +#include "keyboard.hxx" +#include "mpdclient.hxx" +#include "DelayedSeek.hxx" +#include "screen.hxx" + +#ifdef ENABLE_LIRC +#include "lirc.hxx" +#endif + +#include <boost/asio/io_service.hpp> +#include <boost/asio/steady_timer.hpp> +#ifndef _WIN32 +#include <boost/asio/signal_set.hpp> +#endif + +/** + * A singleton holding global instance variables. + */ +class Instance { + boost::asio::io_service io_service; + +#ifndef _WIN32 + boost::asio::signal_set sigterm, sigwinch; +#endif + + struct mpdclient client; + + DelayedSeek seek; + + /** + * This timer is installed when the connection to the MPD + * server is broken. It tries to recover by reconnecting + * periodically. + */ + boost::asio::steady_timer reconnect_timer; + + boost::asio::steady_timer update_timer; + bool pending_update_timer = false; + +#ifndef NCMPC_MINI + boost::asio::steady_timer check_key_bindings_timer; +#endif + + ScreenManager screen_manager; + +#ifdef ENABLE_LIRC + LircInput lirc_input; +#endif + + UserInput user_input; + +public: + Instance(); + ~Instance(); + + Instance(const Instance &) = delete; + Instance &operator=(const Instance &) = delete; + + auto &get_io_service() { + return io_service; + } + + auto &GetClient() { + return client; + } + + auto &GetSeek() noexcept { + return seek; + } + + auto &GetScreenManager() { + return screen_manager; + } + + void UpdateClient() noexcept; + + void Run(); + + template<typename D> + void ScheduleReconnect(const D &expiry_time) { + boost::system::error_code error; + reconnect_timer.expires_from_now(expiry_time, error); + reconnect_timer.async_wait(std::bind(&Instance::OnReconnectTimer, + this, + std::placeholders::_1)); + } + + void EnableUpdateTimer() noexcept { + if (!pending_update_timer) + ScheduleUpdateTimer(); + } + + void DisableUpdateTimer() noexcept { + if (pending_update_timer) { + pending_update_timer = false; + update_timer.cancel(); + } + } + +#ifndef NCMPC_MINI + void ScheduleCheckKeyBindings() noexcept { + boost::system::error_code error; + check_key_bindings_timer.expires_from_now(std::chrono::seconds(10), + error); + reconnect_timer.async_wait(std::bind(&Instance::OnCheckKeyBindings, + this, + std::placeholders::_1)); + } +#endif + +private: +#ifndef _WIN32 + void InitSignals(); + void OnSigwinch(); + void AsyncWaitSigwinch(); +#endif + + void OnReconnectTimer(const boost::system::error_code &error) noexcept; + + void OnUpdateTimer(const boost::system::error_code &error) noexcept; + + void ScheduleUpdateTimer() noexcept { + pending_update_timer = true; + boost::system::error_code error; + update_timer.expires_from_now(std::chrono::milliseconds(500), + error); + update_timer.async_wait(std::bind(&Instance::OnUpdateTimer, + this, + std::placeholders::_1)); + } + +#ifndef NCMPC_MINI + void OnCheckKeyBindings(const boost::system::error_code &error) noexcept; +#endif +}; + +#endif
View file
ncmpc-0.32.tar.xz/src/KeyName.cxx
Added
@@ -0,0 +1,81 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "KeyName.hxx" +#include "i18n.h" + +#include <curses.h> + +const char * +key2str(int key) +{ + switch(key) { + static char buf[32]; + + case 0: + return _("Undefined"); + case ' ': + return _("Space"); + case '\r': + return _("Enter"); + case KEY_BACKSPACE: + return _("Backspace"); + case KEY_DC: + return _("Delete"); + case KEY_UP: + return _("Up"); + case KEY_DOWN: + return _("Down"); + case KEY_LEFT: + return _("Left"); + case KEY_RIGHT: + return _("Right"); + case KEY_HOME: + return _("Home"); + case KEY_END: + return _("End"); + case KEY_NPAGE: + return _("PageDown"); + case KEY_PPAGE: + return _("PageUp"); + case '\t': + return _("Tab"); + case KEY_BTAB: + return _("Shift+Tab"); + case '\x1b': + return _("Esc"); + case KEY_IC: + return _("Insert"); + default: + for (int i = 0; i <= 63; i++) + if (key == KEY_F(i)) { + snprintf(buf, 32, "F%d", i ); + return buf; + } + if (!(key & ~037)) + snprintf(buf, 32, _("Ctrl-%c"), 'A'+(key & 037)-1 ); + else if ((key & ~037) == 224) + snprintf(buf, 32, _("Alt-%c"), 'A'+(key & 037)-1 ); + else if (key > 32 && key < 256) + snprintf(buf, 32, "%c", key); + else + snprintf(buf, 32, "0x%03X", key); + return buf; + } +}
View file
ncmpc-0.32.tar.xz/src/KeyName.hxx
Added
@@ -0,0 +1,29 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef KEY_NAME_HXX +#define KEY_NAME_HXX + +#include "util/Compiler.h" + +gcc_pure +const char * +key2str(int key); + +#endif
View file
ncmpc-0.30.tar.xz/src/ListPage.hxx -> ncmpc-0.32.tar.xz/src/ListPage.hxx
Changed
@@ -36,11 +36,11 @@ public: /* virtual methods from class Page */ - void OnResize(Size size) override { + void OnResize(Size size) noexcept override { lw.Resize(size); } - bool OnCommand(struct mpdclient &, command_t cmd) override { + bool OnCommand(struct mpdclient &, Command cmd) override { if (lw.hide_cursor ? lw.HandleScrollCommand(cmd) : lw.HandleCommand(cmd)) {
View file
ncmpc-0.30.tar.xz/src/ListRenderer.hxx -> ncmpc-0.32.tar.xz/src/ListRenderer.hxx
Changed
@@ -20,13 +20,13 @@ #ifndef LIST_RENDERER_HXX #define LIST_RENDERER_HXX -#include "ncmpc_curses.h" +#include <curses.h> class ListRenderer { public: virtual void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const = 0; + bool selected) const noexcept = 0; }; #endif
View file
ncmpc-0.30.tar.xz/src/ListText.hxx -> ncmpc-0.32.tar.xz/src/ListText.hxx
Changed
@@ -20,12 +20,18 @@ #ifndef LIST_TEXT_HXX #define LIST_TEXT_HXX +#include "util/Compiler.h" + #include <stddef.h> class ListText { public: + /** + * @return the text in the locale charset + */ + gcc_pure virtual const char *GetListItemText(char *buffer, size_t size, - unsigned i) const = 0; + unsigned i) const noexcept = 0; }; #endif
View file
ncmpc-0.30.tar.xz/src/ListWindow.cxx -> ncmpc-0.32.tar.xz/src/ListWindow.cxx
Changed
@@ -21,25 +21,22 @@ #include "ListRenderer.hxx" #include "ListText.hxx" #include "config.h" -#include "options.hxx" +#include "Options.hxx" #include "charset.hxx" -#include "match.hxx" -#include "command.hxx" -#include "colors.hxx" +#include "Match.hxx" +#include "Command.hxx" #include "paint.hxx" #include "screen_status.hxx" #include "screen_utils.hxx" #include "i18n.h" -#include <glib.h> - #include <assert.h> #include <stdlib.h> #include <unistd.h> #include <string.h> void -ListWindow::Reset() +ListWindow::Reset() noexcept { selected = 0; range_selection = false; @@ -48,7 +45,7 @@ } unsigned -ListWindow::ValidateIndex(unsigned i) const +ListWindow::ValidateIndex(unsigned i) const noexcept { if (length == 0) return 0; @@ -59,7 +56,7 @@ } void -ListWindow::CheckSelected() +ListWindow::CheckSelected() noexcept { selected = ValidateIndex(selected); @@ -68,14 +65,14 @@ } void -ListWindow::Resize(Size _size) +ListWindow::Resize(Size _size) noexcept { size = _size; CheckOrigin(); } void -ListWindow::SetLength(unsigned _length) +ListWindow::SetLength(unsigned _length) noexcept { if (_length == length) return; @@ -87,7 +84,7 @@ } void -ListWindow::Center(unsigned n) +ListWindow::Center(unsigned n) noexcept { if (n > size.height / 2) start = n - size.height / 2; @@ -103,7 +100,7 @@ } void -ListWindow::ScrollTo(unsigned n) +ListWindow::ScrollTo(unsigned n) noexcept { int new_start = start; @@ -128,7 +125,7 @@ } void -ListWindow::SetCursor(unsigned i) +ListWindow::SetCursor(unsigned i) noexcept { range_selection = false; selected = i; @@ -138,7 +135,7 @@ } void -ListWindow::MoveCursor(unsigned n) +ListWindow::MoveCursor(unsigned n) noexcept { selected = n; @@ -147,7 +144,7 @@ } void -ListWindow::FetchCursor() +ListWindow::FetchCursor() noexcept { if (start > 0 && selected < start + options.scroll_offset) @@ -158,7 +155,7 @@ } ListWindowRange -ListWindow::GetRange() const +ListWindow::GetRange() const noexcept { if (length == 0) { /* empty list - no selection */ @@ -177,7 +174,7 @@ } void -ListWindow::MoveCursorNext() +ListWindow::MoveCursorNext() noexcept { if (selected + 1 < length) MoveCursor(selected + 1); @@ -186,7 +183,7 @@ } void -ListWindow::MoveCursorPrevious() +ListWindow::MoveCursorPrevious() noexcept { if (selected > 0) MoveCursor(selected - 1); @@ -195,7 +192,7 @@ } void -ListWindow::MoveCursorTop() +ListWindow::MoveCursorTop() noexcept { if (start == 0) MoveCursor(start); @@ -207,7 +204,7 @@ } void -ListWindow::MoveCursorMiddle() +ListWindow::MoveCursorMiddle() noexcept { if (length >= size.height) MoveCursor(start + size.height / 2); @@ -216,7 +213,7 @@ } void -ListWindow::MoveCursorBottom() +ListWindow::MoveCursorBottom() noexcept { if (length >= size.height) if ((unsigned) options.scroll_offset * 2 >= size.height) @@ -231,13 +228,13 @@ } void -ListWindow::MoveCursorFirst() +ListWindow::MoveCursorFirst() noexcept { MoveCursor(0); } void -ListWindow::MoveCursorLast() +ListWindow::MoveCursorLast() noexcept { if (length > 0) MoveCursor(length - 1); @@ -246,7 +243,7 @@ } void -ListWindow::MoveCursorNextPage() +ListWindow::MoveCursorNextPage() noexcept { if (size.height < 2) return; @@ -257,7 +254,7 @@ } void -ListWindow::MoveCursorPreviousPage() +ListWindow::MoveCursorPreviousPage() noexcept { if (size.height < 2) return; @@ -268,7 +265,7 @@ } void -ListWindow::ScrollUp(unsigned n) +ListWindow::ScrollUp(unsigned n) noexcept { if (start > 0) { if (n > start) @@ -281,7 +278,7 @@ } void -ListWindow::ScrollDown(unsigned n) +ListWindow::ScrollDown(unsigned n) noexcept { if (start + size.height < length) { if (start + size.height + n > length - 1) @@ -294,7 +291,7 @@ } void -ListWindow::Paint(const ListRenderer &renderer) const +ListWindow::Paint(const ListRenderer &renderer) const noexcept { bool show_cursor = !hide_cursor && (!options.hardware_cursor || range_selection); @@ -331,12 +328,16 @@ ListWindow::Find(const ListText &text, const char *str, bool wrap, - bool bell_on_wrap) + bool bell_on_wrap) noexcept { unsigned i = selected + 1; assert(str != nullptr); + MatchExpression m; + if (!m.Compile(str, false)) + return false; + do { while (i < length) { char buffer[1024]; @@ -345,7 +346,7 @@ i); assert(label != nullptr); - if (match_line(label, str)) { + if (m(label)) { MoveCursor(i); return true; } @@ -370,7 +371,7 @@ ListWindow::ReverseFind(const ListText &text, const char *str, bool wrap, - bool bell_on_wrap) + bool bell_on_wrap) noexcept { int i = selected - 1; @@ -379,6 +380,10 @@ if (length == 0) return false; + MatchExpression m; + if (!m.Compile(str, false)) + return false; + do { while (i >= 0) { char buffer[1024]; @@ -387,7 +392,7 @@ i); assert(label != nullptr); - if (match_line(label, str)) { + if (m(label)) { MoveCursor(i); return true; } @@ -406,34 +411,13 @@ return false; } -#ifdef NCMPC_MINI -bool -ListWindow::Jump(const ListText &text, const char *str) -{ - assert(str != nullptr); - - for (unsigned i = 0; i < length; i++) { - char buffer[1024]; - const char *label = - text.GetListItemText(buffer, sizeof(buffer), - i); - assert(label != nullptr); - - if (g_ascii_strncasecmp(label, str, strlen(str)) == 0) { - MoveCursor(i); - return true; - } - } - return false; -} -#else bool -ListWindow::Jump(const ListText &text, const char *str) +ListWindow::Jump(const ListText &text, const char *str) noexcept { assert(str != nullptr); - GRegex *regex = compile_regex(str, options.jump_prefix_only); - if (regex == nullptr) + MatchExpression m; + if (!m.Compile(str, options.jump_prefix_only)) return false; for (unsigned i = 0; i < length; i++) { @@ -443,50 +427,48 @@ i); assert(label != nullptr); - if (match_regex(regex, label)) { - g_regex_unref(regex); + if (m(label)) { MoveCursor(i); return true; } } - g_regex_unref(regex); + return false; } -#endif /* perform basic list window commands (movement) */ bool -ListWindow::HandleCommand(command_t cmd) +ListWindow::HandleCommand(Command cmd) noexcept { switch (cmd) { - case CMD_LIST_PREVIOUS: + case Command::LIST_PREVIOUS: MoveCursorPrevious(); break; - case CMD_LIST_NEXT: + case Command::LIST_NEXT: MoveCursorNext(); break; - case CMD_LIST_TOP: + case Command::LIST_TOP: MoveCursorTop(); break; - case CMD_LIST_MIDDLE: + case Command::LIST_MIDDLE: MoveCursorMiddle(); break; - case CMD_LIST_BOTTOM: + case Command::LIST_BOTTOM: MoveCursorBottom(); break; - case CMD_LIST_FIRST: + case Command::LIST_FIRST: MoveCursorFirst(); break; - case CMD_LIST_LAST: + case Command::LIST_LAST: MoveCursorLast(); break; - case CMD_LIST_NEXT_PAGE: + case Command::LIST_NEXT_PAGE: MoveCursorNextPage(); break; - case CMD_LIST_PREVIOUS_PAGE: + case Command::LIST_PREVIOUS_PAGE: MoveCursorPreviousPage(); break; - case CMD_LIST_RANGE_SELECT: + case Command::LIST_RANGE_SELECT: if(range_selection) { screen_status_message(_("Range selection disabled")); @@ -499,16 +481,16 @@ range_selection = true; } break; - case CMD_LIST_SCROLL_UP_LINE: + case Command::LIST_SCROLL_UP_LINE: ScrollUp(1); break; - case CMD_LIST_SCROLL_DOWN_LINE: + case Command::LIST_SCROLL_DOWN_LINE: ScrollDown(1); break; - case CMD_LIST_SCROLL_UP_HALF: + case Command::LIST_SCROLL_UP_HALF: ScrollUp((size.height - 1) / 2); break; - case CMD_LIST_SCROLL_DOWN_HALF: + case Command::LIST_SCROLL_DOWN_HALF: ScrollDown((size.height - 1) / 2); break; default: @@ -519,33 +501,33 @@ } bool -ListWindow::HandleScrollCommand(command_t cmd) +ListWindow::HandleScrollCommand(Command cmd) noexcept { switch (cmd) { - case CMD_LIST_SCROLL_UP_LINE: - case CMD_LIST_PREVIOUS: + case Command::LIST_SCROLL_UP_LINE: + case Command::LIST_PREVIOUS: if (start > 0) start--; break; - case CMD_LIST_SCROLL_DOWN_LINE: - case CMD_LIST_NEXT: + case Command::LIST_SCROLL_DOWN_LINE: + case Command::LIST_NEXT: if (start + size.height < length) start++; break; - case CMD_LIST_FIRST: + case Command::LIST_FIRST: start = 0; break; - case CMD_LIST_LAST: + case Command::LIST_LAST: if (length > size.height) start = length - size.height; else start = 0; break; - case CMD_LIST_NEXT_PAGE: + case Command::LIST_NEXT_PAGE: start += size.height; if (start + size.height > length) { if (length > size.height) @@ -555,21 +537,21 @@ } break; - case CMD_LIST_PREVIOUS_PAGE: + case Command::LIST_PREVIOUS_PAGE: if (start > size.height) start -= size.height; else start = 0; break; - case CMD_LIST_SCROLL_UP_HALF: + case Command::LIST_SCROLL_UP_HALF: if (start > (size.height - 1) / 2) start -= (size.height - 1) / 2; else start = 0; break; - case CMD_LIST_SCROLL_DOWN_HALF: + case Command::LIST_SCROLL_DOWN_HALF: start += (size.height - 1) / 2; if (start + size.height > length) { if (length > size.height) @@ -588,7 +570,7 @@ #ifdef HAVE_GETMOUSE bool -ListWindow::HandleMouse(mmask_t bstate, int y) +ListWindow::HandleMouse(mmask_t bstate, int y) noexcept { /* if the even occurred above the list window move up */ if (y < 0) {
View file
ncmpc-0.30.tar.xz/src/ListWindow.hxx -> ncmpc-0.32.tar.xz/src/ListWindow.hxx
Changed
@@ -21,11 +21,12 @@ #define LIST_WINDOW_HXX #include "config.h" -#include "command.hxx" -#include "colors.hxx" -#include "ncmpc_curses.h" #include "Size.hxx" +#include "util/Compiler.h" +#include <curses.h> + +enum class Command : unsigned; class ListText; class ListRenderer; @@ -44,45 +45,46 @@ */ unsigned end_index; - constexpr bool empty() const { + constexpr bool empty() const noexcept { return start_index >= end_index; } - constexpr bool Contains(unsigned i) const { + constexpr bool Contains(unsigned i) const noexcept { return i >= start_index && i < end_index; } struct const_iterator { unsigned value; - const_iterator &operator++() { + const_iterator &operator++() noexcept { ++value; return *this; } - constexpr bool operator==(const const_iterator &other) const { + constexpr bool operator==(const const_iterator &other) const noexcept { return value == other.value; } - constexpr bool operator!=(const const_iterator &other) const { + constexpr bool operator!=(const const_iterator &other) const noexcept { return !(*this == other); } - const unsigned &operator *() const { + const unsigned &operator *() const noexcept { return value; } }; - constexpr const_iterator begin() const { + constexpr const_iterator begin() const noexcept { return {start_index}; } - constexpr const_iterator end() const { + constexpr const_iterator end() const noexcept { return {end_index}; } }; -struct ListWindow { +class ListWindow { +public: WINDOW *w; Size size; @@ -106,75 +108,75 @@ bool hide_cursor = false; - ListWindow(WINDOW *_w, Size _size) + ListWindow(WINDOW *_w, Size _size) noexcept :w(_w), size(_size) {} /** reset a list window (selected=0, start=0) */ - void Reset(); + void Reset() noexcept; - void Resize(Size _size); + void Resize(Size _size) noexcept; - void SetLength(unsigned length); + void SetLength(unsigned length) noexcept; - void Paint(const ListRenderer &renderer) const; + void Paint(const ListRenderer &renderer) const noexcept; /** perform basic list window commands (movement) */ - bool HandleCommand(command_t cmd); + bool HandleCommand(Command cmd) noexcept; /** * Scroll the window. Returns true if the command has been * consumed. */ - bool HandleScrollCommand(command_t cmd); + bool HandleScrollCommand(Command cmd) noexcept; #ifdef HAVE_GETMOUSE /** * The mouse was clicked. Check if the list should be scrolled * Returns non-zero if the mouse event has been handled. */ - bool HandleMouse(mmask_t bstate, int y); + bool HandleMouse(mmask_t bstate, int y) noexcept; #endif /** * Centers the visible range around item n on the list. */ - void Center(unsigned n); + void Center(unsigned n) noexcept; /** * Scrolls the view to item n, as if the cursor would have been moved * to the position. */ - void ScrollTo(unsigned n); + void ScrollTo(unsigned n) noexcept; /** * Sets the position of the cursor. Disables range selection. */ - void SetCursor(unsigned i); + void SetCursor(unsigned i) noexcept; /** * Moves the cursor. Modifies the range if range selection is * enabled. */ - void MoveCursor(unsigned n); + void MoveCursor(unsigned n) noexcept; - void MoveCursorNext(); - void MoveCursorPrevious(); - void MoveCursorTop(); - void MoveCursorMiddle(); - void MoveCursorBottom(); - void MoveCursorFirst(); - void MoveCursorLast(); - void MoveCursorNextPage(); - void MoveCursorPreviousPage(); + void MoveCursorNext() noexcept; + void MoveCursorPrevious() noexcept; + void MoveCursorTop() noexcept; + void MoveCursorMiddle() noexcept; + void MoveCursorBottom() noexcept; + void MoveCursorFirst() noexcept; + void MoveCursorLast() noexcept; + void MoveCursorNextPage() noexcept; + void MoveCursorPreviousPage() noexcept; - void ScrollUp(unsigned n); - void ScrollDown(unsigned n); + void ScrollUp(unsigned n) noexcept; + void ScrollDown(unsigned n) noexcept; /** * Ensures that the cursor is visible on the screen, i.e. it is not * outside the current scrolling range. */ - void FetchCursor(); + void FetchCursor() noexcept; /** * Determines the lower and upper bound of the range selection. If @@ -182,7 +184,7 @@ * length is 1). */ gcc_pure - ListWindowRange GetRange() const; + ListWindowRange GetRange() const noexcept; /** * Find a string in a list window. @@ -190,7 +192,7 @@ bool Find(const ListText &text, const char *str, bool wrap, - bool bell_on_wrap); + bool bell_on_wrap) noexcept; /** * Find a string in a list window (reversed). @@ -198,25 +200,25 @@ bool ReverseFind(const ListText &text, const char *str, bool wrap, - bool bell_on_wrap); + bool bell_on_wrap) noexcept; /** * Find a string in a list window which begins with the given * characters in *str. */ - bool Jump(const ListText &text, const char *str); + bool Jump(const ListText &text, const char *str) noexcept; private: gcc_pure - unsigned ValidateIndex(unsigned i) const; + unsigned ValidateIndex(unsigned i) const noexcept; - void CheckSelected(); + void CheckSelected() noexcept; /** * Scroll after the cursor was moved, the list was changed or * the window was resized. */ - void CheckOrigin() { + void CheckOrigin() noexcept { ScrollTo(selected); } };
View file
ncmpc-0.30.tar.xz/src/LyricsPage.cxx -> ncmpc-0.32.tar.xz/src/LyricsPage.cxx
Changed
@@ -18,13 +18,12 @@ */ #include "LyricsPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen_status.hxx" #include "FileBrowserPage.hxx" #include "SongPage.hxx" -#include "Event.hxx" #include "i18n.h" -#include "options.hxx" +#include "Options.hxx" #include "mpdclient.hxx" #include "screen.hxx" #include "lyrics.hxx" @@ -32,13 +31,16 @@ #include "screen_utils.hxx" #include "ncu.hxx" +#include <boost/asio/steady_timer.hpp> + +#include <string> + #include <assert.h> #include <errno.h> #include <sys/stat.h> #include <sys/wait.h> #include <stdlib.h> #include <string.h> -#include <glib.h> #include <unistd.h> #include <stdio.h> @@ -51,20 +53,31 @@ struct mpd_song *song = nullptr; - char *artist = nullptr, *title = nullptr, *plugin_name = nullptr; + /** + * These are pointers into the #mpd_song above, and will + * become invalid as soon as the mpd_song_free() is called. + */ + const char *artist = nullptr, *title = nullptr; + + std::string plugin_name; PluginCycle *loader = nullptr; - guint loader_timeout = 0; + boost::asio::steady_timer loader_timeout; public: LyricsPage(ScreenManager &_screen, WINDOW *w, Size size) - :TextPage(_screen, w, size) {} + :TextPage(_screen, w, size), + loader_timeout(_screen.get_io_service()) {} ~LyricsPage() override { Cancel(); } + auto &get_io_service() noexcept { + return loader_timeout.get_io_service(); + } + private: void Cancel(); @@ -80,7 +93,14 @@ void Set(const char *s); - void Load(const struct mpd_song *song); + void Load(const struct mpd_song &song) noexcept; + void MaybeLoad(const struct mpd_song &new_song) noexcept; + + void MaybeLoad(const struct mpd_song *new_song) noexcept { + if (new_song != nullptr) + MaybeLoad(*new_song); + } + void Reload(); bool Save(); @@ -98,16 +118,14 @@ void PluginCallback(std::string &&result, bool success, const char *plugin_name); - bool TimeoutCallback(); + void OnTimeout(const boost::system::error_code &error) noexcept; public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - - const char *GetTitle(char *, size_t) const override; + void OnOpen(struct mpdclient &c) noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *, size_t) const noexcept override; }; void @@ -118,23 +136,15 @@ loader = nullptr; } - if (loader_timeout != 0) { - g_source_remove(loader_timeout); - loader_timeout = 0; - } - - g_free(plugin_name); - plugin_name = nullptr; - - g_free(artist); - artist = nullptr; + loader_timeout.cancel(); - g_free(title); - title = nullptr; + plugin_name.clear(); if (song != nullptr) { mpd_song_free(song); song = nullptr; + artist = nullptr; + title = nullptr; } } @@ -222,7 +232,10 @@ { assert(loader != nullptr); - plugin_name = g_strdup(_plugin_name); + if (_plugin_name != nullptr) + plugin_name = _plugin_name; + else + plugin_name.clear(); /* Display result, which may be lyrics or error messages */ Set(result.c_str()); @@ -236,79 +249,80 @@ screen_status_message (_("No lyrics")); } - if (loader_timeout != 0) { - g_source_remove(loader_timeout); - loader_timeout = 0; - } + loader_timeout.cancel(); plugin_stop(loader); loader = nullptr; } -inline bool -LyricsPage::TimeoutCallback() +void +LyricsPage::OnTimeout(const boost::system::error_code &error) noexcept { + if (error) + return; + plugin_stop(loader); loader = nullptr; screen_status_printf(_("Lyrics timeout occurred after %d seconds"), - options.lyrics_timeout); - - loader_timeout = 0; - return false; + (int)std::chrono::duration_cast<std::chrono::seconds>(options.lyrics_timeout).count()); } void -LyricsPage::Load(const struct mpd_song *_song) +LyricsPage::Load(const struct mpd_song &_song) noexcept { - assert(_song != nullptr); - Cancel(); Clear(); - const char *_artist = mpd_song_get_tag(_song, MPD_TAG_ARTIST, 0); - const char *_title = mpd_song_get_tag(_song, MPD_TAG_TITLE, 0); + song = mpd_song_dup(&_song); + artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0); + title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0); - song = mpd_song_dup(_song); - artist = g_strdup(_artist); - title = g_strdup(_title); + loader = lyrics_load(get_io_service(), + artist, title, PluginCallback, this); - loader = lyrics_load(artist, title, PluginCallback, this); - - if (options.lyrics_timeout != 0) { - loader_timeout = ScheduleTimeout<LyricsPage, - &LyricsPage::TimeoutCallback>(std::chrono::seconds(options.lyrics_timeout), - *this); + if (options.lyrics_timeout > std::chrono::steady_clock::duration::zero()) { + boost::system::error_code error; + loader_timeout.expires_from_now(options.lyrics_timeout, + error); + loader_timeout.async_wait(std::bind(&LyricsPage::OnTimeout, this, + std::placeholders::_1)); } } void +LyricsPage::MaybeLoad(const struct mpd_song &new_song) noexcept +{ + if (song == nullptr || + strcmp(mpd_song_get_uri(&new_song), + mpd_song_get_uri(song)) != 0) + Load(new_song); +} + +void LyricsPage::Reload() { if (loader == nullptr && artist != nullptr && title != nullptr) { reloading = true; - loader = lyrics_load(artist, title, PluginCallback, nullptr); + loader = lyrics_load(get_io_service(), + artist, title, PluginCallback, nullptr); Repaint(); } } -static Page * +static std::unique_ptr<Page> lyrics_screen_init(ScreenManager &_screen, WINDOW *w, Size size) { - return new LyricsPage(_screen, w, size); + return std::make_unique<LyricsPage>(_screen, w, size); } void -LyricsPage::OnOpen(struct mpdclient &c) +LyricsPage::OnOpen(struct mpdclient &c) noexcept { const struct mpd_song *next_song_c = - next_song != nullptr ? next_song : c.song; + next_song != nullptr ? next_song : c.GetPlayingSong(); - if (next_song_c != nullptr && - (song == nullptr || - strcmp(mpd_song_get_uri(next_song_c), - mpd_song_get_uri(song)) != 0)) - Load(next_song_c); + MaybeLoad(next_song_c); if (next_song != nullptr) { mpd_song_free(next_song); @@ -317,20 +331,14 @@ } void -LyricsPage::Update(struct mpdclient &c, unsigned) +LyricsPage::Update(struct mpdclient &c, unsigned) noexcept { - if (!follow) - return; - - if (c.song != nullptr && - (song == nullptr || - strcmp(mpd_song_get_uri(c.song), - mpd_song_get_uri(song)) != 0)) - Load(c.song); + if (follow) + MaybeLoad(c.GetPlayingSong()); } const char * -LyricsPage::GetTitle(char *str, size_t size) const +LyricsPage::GetTitle(char *str, size_t size) const noexcept { if (loader != nullptr) { snprintf(str, size, "%s (%s)", @@ -345,9 +353,10 @@ _("Lyrics"), artist, title); - if (options.lyrics_show_plugin && plugin_name != nullptr && + if (options.lyrics_show_plugin && !plugin_name.empty() && (unsigned int) n < size - 1) - snprintf(str + n, size - n, " (%s)", plugin_name); + snprintf(str + n, size - n, " (%s)", + plugin_name.c_str()); return str; } else @@ -383,7 +392,7 @@ int status; pid_t pid = fork(); if (pid == -1) { - screen_status_printf(("%s (%s)"), _("Can't start editor"), g_strerror(errno)); + screen_status_printf(("%s (%s)"), _("Can't start editor"), strerror(errno)); ncu_init(); return; } else if (pid == 0) { @@ -409,59 +418,56 @@ else if (WEXITSTATUS(status) == 127) screen_status_message(_("Can't start editor")); else - screen_status_printf(_("Editor exited unexpectedly (%d)"), + screen_status_printf("%s (%d)", + _("Editor exited unexpectedly"), WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { - screen_status_printf(_("Editor exited unexpectedly (signal %d)"), + screen_status_printf("%s (signal %d)", + _("Editor exited unexpectedly"), WTERMSIG(status)); } } bool -LyricsPage::OnCommand(struct mpdclient &c, command_t cmd) +LyricsPage::OnCommand(struct mpdclient &c, Command cmd) { if (TextPage::OnCommand(c, cmd)) return true; switch(cmd) { - case CMD_INTERRUPT: + case Command::INTERRUPT: if (loader != nullptr) { Cancel(); Clear(); } return true; - case CMD_SAVE_PLAYLIST: + case Command::SAVE_PLAYLIST: if (loader == nullptr && artist != nullptr && title != nullptr && Save()) /* lyrics for the song were saved on hard disk */ screen_status_message (_("Lyrics saved")); return true; - case CMD_DELETE: + case Command::DELETE: if (loader == nullptr && artist != nullptr && title != nullptr) { - switch (Delete()) { - case true: - screen_status_message (_("Lyrics deleted")); - break; - case false: - screen_status_message (_("No saved lyrics")); - break; - } + screen_status_message(Delete() + ? _("Lyrics deleted") + : _("No saved lyrics")); } return true; - case CMD_LYRICS_UPDATE: - if (c.song != nullptr) - Load(c.song); + case Command::LYRICS_UPDATE: + if (c.GetPlayingSong() != nullptr) + Load(*c.GetPlayingSong()); return true; - case CMD_EDIT: + case Command::EDIT: Edit(); return true; - case CMD_SELECT: + case Command::SELECT: Reload(); return true; #ifdef ENABLE_SONG_SCREEN - case CMD_SCREEN_SONG: + case Command::SCREEN_SONG: if (song != nullptr) { screen_song_switch(screen, c, *song); return true; @@ -469,11 +475,11 @@ break; #endif - case CMD_SCREEN_SWAP: + case Command::SCREEN_SWAP: screen.Swap(c, song); return true; - case CMD_LOCATE: + case Command::LOCATE: if (song != nullptr) { screen_file_goto_song(screen, c, *song); return true; @@ -488,8 +494,10 @@ return false; } -const struct screen_functions screen_lyrics = { +const PageMeta screen_lyrics = { "lyrics", + N_("Lyrics"), + Command::SCREEN_LYRICS, lyrics_screen_init, };
View file
ncmpc-0.30.tar.xz/src/LyricsPage.hxx -> ncmpc-0.32.tar.xz/src/LyricsPage.hxx
Changed
@@ -26,9 +26,10 @@ struct mpdclient; struct mpd_song; +struct PageMeta; class ScreenManager; -extern const struct screen_functions screen_lyrics; +extern const PageMeta screen_lyrics; void screen_lyrics_switch(ScreenManager &_screen, struct mpdclient &c,
View file
ncmpc-0.30.tar.xz/src/Main.cxx -> ncmpc-0.32.tar.xz/src/Main.cxx
Changed
@@ -18,12 +18,15 @@ */ #include "config.h" +#include "Instance.hxx" #include "ncmpc.hxx" #include "mpdclient.hxx" #include "callbacks.hxx" #include "charset.hxx" -#include "options.hxx" -#include "command.hxx" +#include "Options.hxx" +#include "Command.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "ncu.hxx" #include "screen.hxx" #include "screen_status.hxx" @@ -31,9 +34,8 @@ #include "strfsong.hxx" #include "i18n.h" #include "player_command.hxx" -#include "keyboard.hxx" -#include "lirc.hxx" -#include "signals.hxx" +#include "util/ScopeExit.hxx" +#include "util/StringUTF8.hxx" #ifndef NCMPC_MINI #include "conf.hxx" @@ -45,8 +47,6 @@ #include <mpd/client.h> -#include <glib.h> - #include <stdlib.h> #include <unistd.h> #include <fcntl.h> @@ -57,18 +57,10 @@ #include <locale.h> #endif -/* time between mpd updates [ms] */ -static const guint update_interval = 500; - #define BUFSIZE 1024 +static Instance *global_instance; static struct mpdclient *mpd = nullptr; -static GMainLoop *main_loop; -static guint reconnect_source_id, update_source_id; - -#ifndef NCMPC_MINI -static guint check_key_bindings_source_id; -#endif ScreenManager *screen; @@ -76,11 +68,11 @@ static void update_xterm_title() { - const struct mpd_song *song = mpd->song; + const struct mpd_song *song = mpd->GetPlayingSong(); char tmp[BUFSIZE]; const char *new_title = nullptr; - if (!options.xterm_title_format.empty() && mpd->playing && song) + if (!options.xterm_title_format.empty() && song != nullptr) new_title = strfsong(tmp, BUFSIZE, options.xterm_title_format.c_str(), song) > 0 ? tmp @@ -91,35 +83,12 @@ static char title[BUFSIZE]; if (strncmp(title, new_title, BUFSIZE)) { - g_strlcpy(title, new_title, BUFSIZE); + strcpy(title, new_title); set_xterm_title(title); } } #endif -static gboolean -timer_mpd_update(gpointer data); - -static void -enable_update_timer() -{ - if (update_source_id != 0) - return; - - update_source_id = g_timeout_add(update_interval, - timer_mpd_update, nullptr); -} - -static void -disable_update_timer() -{ - if (update_source_id == 0) - return; - - g_source_remove(update_source_id); - update_source_id = 0; -} - static bool should_enable_update_timer() { @@ -130,68 +99,59 @@ auto_update_timer() { if (should_enable_update_timer()) - enable_update_timer(); + global_instance->EnableUpdateTimer(); else - disable_update_timer(); + global_instance->DisableUpdateTimer(); } -static void -do_mpd_update() +void +Instance::UpdateClient() noexcept { - if (mpd->IsConnected() && - (mpd->events != 0 || mpd->playing)) - mpd->Update(); + if (client.IsConnected() && + (client.events != 0 || client.playing)) + client.Update(); #ifndef NCMPC_MINI if (options.enable_xterm_title) update_xterm_title(); #endif - screen->Update(*mpd); - mpd->events = (enum mpd_idle)0; + screen_manager.Update(client, seek); + client.events = (enum mpd_idle)0; } -/** - * This timer is installed when the connection to the MPD server is - * broken. It tries to recover by reconnecting periodically. - */ -static gboolean -timer_reconnect(gcc_unused gpointer data) +void +Instance::OnReconnectTimer(const boost::system::error_code &error) noexcept { - assert(mpd->IsDead()); + if (error) + return; - reconnect_source_id = 0; + assert(client.IsDead()); - screen_status_printf(_("Connecting to %s... [Press %s to abort]"), - mpd->GetSettingsName().c_str(), - get_key_names(CMD_QUIT, false)); + screen_status_printf(_("Connecting to %s"), + client.GetSettingsName().c_str()); doupdate(); - mpd->Connect(); - - return false; + client.Connect(); } void mpdclient_connected_callback() { - assert(reconnect_source_id == 0); - #ifndef NCMPC_MINI /* quit if mpd is pre 0.14 - song id not supported by mpd */ auto *connection = mpd->GetConnection(); - if (mpd_connection_cmp_server_version(connection, 0, 16, 0) < 0) { + if (mpd_connection_cmp_server_version(connection, 0, 19, 0) < 0) { const unsigned *version = mpd_connection_get_server_version(connection); screen_status_printf(_("Error: MPD version %d.%d.%d is too old (%s needed)"), version[0], version[1], version[2], - "0.16.0"); + "0.19.0"); mpd->Disconnect(); doupdate(); /* try again after 30 seconds */ - reconnect_source_id = - g_timeout_add_seconds(30, timer_reconnect, nullptr); + global_instance->ScheduleReconnect(std::chrono::seconds(30)); return; } #endif @@ -199,7 +159,7 @@ screen->status_bar.ClearMessage(); doupdate(); - do_mpd_update(); + global_instance->UpdateClient(); auto_update_timer(); } @@ -207,20 +167,16 @@ void mpdclient_failed_callback() { - assert(reconnect_source_id == 0); - /* try again in 5 seconds */ - reconnect_source_id = g_timeout_add_seconds(5, timer_reconnect, nullptr); + global_instance->ScheduleReconnect(std::chrono::seconds(5)); } void mpdclient_lost_callback() { - assert(reconnect_source_id == 0); - - screen->Update(*mpd); + screen->Update(*mpd, global_instance->GetSeek()); - reconnect_source_id = g_timeout_add_seconds(1, timer_reconnect, nullptr); + global_instance->ScheduleReconnect(std::chrono::seconds(1)); } /** @@ -235,21 +191,23 @@ update_xterm_title(); #endif - screen->Update(*mpd); + screen->Update(*mpd, global_instance->GetSeek()); auto_update_timer(); } -static gboolean -timer_mpd_update(gcc_unused gpointer data) +void +Instance::OnUpdateTimer(const boost::system::error_code &error) noexcept { - do_mpd_update(); + if (error) + return; + + assert(pending_update_timer); + pending_update_timer = false; + + UpdateClient(); if (should_enable_update_timer()) - return true; - else { - update_source_id = 0; - return false; - } + ScheduleUpdateTimer(); } void begin_input_event() @@ -258,25 +216,25 @@ void end_input_event() { - screen->Update(*mpd); + screen->Update(*mpd, global_instance->GetSeek()); mpd->events = (enum mpd_idle)0; auto_update_timer(); } bool -do_input_event(command_t cmd) +do_input_event(boost::asio::io_service &io_service, Command cmd) { - if (cmd == CMD_QUIT) { - g_main_loop_quit(main_loop); + if (cmd == Command::QUIT) { + io_service.stop(); return false; } - screen->OnCommand(*mpd, cmd); + screen->OnCommand(*mpd, global_instance->GetSeek(), cmd); - if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN) + if (cmd == Command::VOLUME_UP || cmd == Command::VOLUME_DOWN) /* make sure we don't update the volume yet */ - disable_update_timer(); + global_instance->DisableUpdateTimer(); return true; } @@ -286,7 +244,7 @@ void do_mouse_event(Point p, mmask_t bstate) { - screen->OnMouse(*mpd, p, bstate); + screen->OnMouse(*mpd, global_instance->GetSeek(), p, bstate); } #endif @@ -296,35 +254,24 @@ * Check the configured key bindings for errors, and display a status * message every 10 seconds. */ -static gboolean -timer_check_key_bindings(gcc_unused gpointer data) +void +Instance::OnCheckKeyBindings(const boost::system::error_code &error) noexcept { + if (error) + return; + char buf[256]; - if (check_key_bindings(nullptr, buf, sizeof(buf))) { + if (GetGlobalKeyBindings().Check(buf, sizeof(buf))) /* no error: disable this timer for the rest of this process */ - check_key_bindings_source_id = 0; - return false; - } - -#ifdef ENABLE_KEYDEF_SCREEN - g_strchomp(buf); - g_strlcat(buf, " (", sizeof(buf)); - /* to translators: a key was bound twice in the key editor, - and this is a hint for the user what to press to correct - that */ - char comment[64]; - snprintf(comment, sizeof(comment), _("press %s for the key editor"), - get_key_names(CMD_SCREEN_KEYDEF, false)); - g_strlcat(buf, comment, sizeof(buf)); - g_strlcat(buf, ")", sizeof(buf)); -#endif + return; - screen_status_printf("%s", buf); + screen_status_message(buf); doupdate(); - return true; + + ScheduleCheckKeyBindings(); } #endif @@ -332,18 +279,18 @@ main(int argc, const char *argv[]) { #ifdef ENABLE_LOCALE -#ifndef ENABLE_NLS - gcc_unused -#endif - const char *charset = nullptr; /* time and date formatting */ setlocale(LC_TIME,""); /* care about sorting order etc */ setlocale(LC_COLLATE,""); /* charset */ setlocale(LC_CTYPE,""); +#ifdef HAVE_ICONV /* initialize charset conversions */ - charset = charset_init(); + charset_init(); +#endif + + const ScopeInitUTF8 init_utf8; /* initialize i18n support */ #endif @@ -351,9 +298,6 @@ #ifdef ENABLE_NLS setlocale(LC_MESSAGES, ""); bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR); -#ifdef ENABLE_LOCALE - bind_textdomain_codeset(GETTEXT_PACKAGE, charset); -#endif textdomain(GETTEXT_PACKAGE); #endif @@ -365,7 +309,7 @@ read_configuration(); /* check key bindings */ - check_key_bindings(nullptr, nullptr, 0); + GetGlobalKeyBindings().Check(nullptr, 0); #endif /* parse command line options - 2 pass */ @@ -377,66 +321,30 @@ lyrics_init(); #endif - /* create mpdclient instance */ - struct mpdclient client(options.host.empty() ? nullptr : options.host.c_str(), - options.port, - options.timeout_ms, - options.password.empty() ? nullptr : options.password.c_str()); - mpd = &client; - - /* initialize curses */ - ScreenManager screen_manager; - screen_manager.Init(&client); - screen = &screen_manager; - - /* the main loop */ - main_loop = g_main_loop_new(nullptr, false); - - /* watch out for keyboard input */ - keyboard_init(screen_manager.main_window.w); - - /* watch out for lirc input */ - ncmpc_lirc_init(); - - signals_init(main_loop, screen_manager); - - /* attempt to connect */ - reconnect_source_id = g_idle_add(timer_reconnect, nullptr); - - auto_update_timer(); + /* create the global Instance */ + Instance instance; + global_instance = &instance; + mpd = &instance.GetClient(); + screen = &instance.GetScreenManager(); + AtScopeExit() { + /* this must be executed after ~Instance(), so we're + using AtScopeExit() to do the trick */ #ifndef NCMPC_MINI - check_key_bindings_source_id = - g_timeout_add_seconds(10, timer_check_key_bindings, nullptr); + set_xterm_title(""); #endif + printf("\n"); + }; - screen_manager.Update(client); - - g_main_loop_run(main_loop); - g_main_loop_unref(main_loop); - - /* cleanup */ - - cancel_seek_timer(); - - disable_update_timer(); - - if (reconnect_source_id != 0) - g_source_remove(reconnect_source_id); - -#ifndef NCMPC_MINI - if (check_key_bindings_source_id != 0) - g_source_remove(check_key_bindings_source_id); -#endif + /* attempt to connect */ + instance.ScheduleReconnect(std::chrono::seconds(0)); - signals_deinit(); - ncmpc_lirc_deinit(); + auto_update_timer(); - screen_manager.Exit(); #ifndef NCMPC_MINI - set_xterm_title(""); + instance.ScheduleCheckKeyBindings(); #endif - printf("\n"); + instance.Run(); return 0; }
View file
ncmpc-0.32.tar.xz/src/Match.cxx
Added
@@ -0,0 +1,73 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Match.hxx" +#include "charset.hxx" + +#include <assert.h> +#include <string.h> + +MatchExpression::~MatchExpression() noexcept +{ +#ifdef HAVE_PCRE + pcre_free(re); +#endif +} + +bool +MatchExpression::Compile(const char *src, bool anchor) noexcept +{ +#ifndef HAVE_PCRE + assert(expression == nullptr); + + expression = src; + length = strlen(expression); + anchored = anchor; + + return true; +#else + assert(re == nullptr); + + int options = PCRE_CASELESS|PCRE_DOTALL|PCRE_NO_AUTO_CAPTURE; + if (anchor) + options |= PCRE_ANCHORED; + + const char *error_string; + int error_offset; + re = pcre_compile(src, options, &error_string, &error_offset, nullptr); + return re != nullptr; +#endif +} + +bool +MatchExpression::operator()(const char *line) const noexcept +{ +#ifdef NCMPC_MINI + assert(expression != nullptr); + + return anchored + ? strncasecmp(line, expression, length) == 0 + : strstr(line, expression) != nullptr; +#else + assert(re != nullptr); + + return pcre_exec(re, nullptr, line, strlen(line), + 0, 0, nullptr, 0) >= 0; +#endif +}
View file
ncmpc-0.32.tar.xz/src/Match.hxx
Added
@@ -0,0 +1,54 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MATCH_H +#define MATCH_H + +#include "config.h" +#include "util/Compiler.h" + +#ifdef HAVE_PCRE +#include <pcre.h> +#endif + +#include <stddef.h> + +class MatchExpression { +#ifndef HAVE_PCRE + const char *expression; + size_t length; + bool anchored; +#else + pcre *re = nullptr; +#endif + +public: + MatchExpression() = default; + ~MatchExpression() noexcept; + + MatchExpression(const MatchExpression &) = delete; + MatchExpression &operator=(const MatchExpression &) = delete; + + bool Compile(const char *src, bool anchor) noexcept; + + gcc_pure + bool operator()(const char *line) const noexcept; +}; + +#endif
View file
ncmpc-0.32.tar.xz/src/Options.cxx
Added
@@ -0,0 +1,349 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Options.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" +#include "config.h" +#include "charset.hxx" +#include "conf.hxx" +#include "i18n.h" + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +#define ERROR_UNKNOWN_OPTION 0x01 +#define ERROR_BAD_ARGUMENT 0x02 +#define ERROR_GOT_ARGUMENT 0x03 +#define ERROR_MISSING_ARGUMENT 0x04 + +struct OptionDefinition { + int shortopt; + const char *longopt; + const char *argument; + const char *descrition; +}; + +Options options; + +static constexpr OptionDefinition option_table[] = { + { '?', "help", nullptr, "Show this help message" }, + { 'V', "version", nullptr, "Display version information" }, + { 'c', "colors", nullptr, "Enable colors" }, + { 'C', "no-colors", nullptr, "Disable colors" }, +#ifdef HAVE_GETMOUSE + { 'm', "mouse", nullptr, "Enable mouse" }, + { 'M', "no-mouse", nullptr, "Disable mouse" }, +#endif + { 'e', "exit", nullptr, "Exit on connection errors" }, + { 'p', "port", "PORT", "Connect to server on port" }, + { 'h', "host", "HOST", "Connect to server on host" }, + { 'P', "password","PASSWORD", "Connect with password" }, + { 'f', "config", "FILE", "Read configuration from file" }, + { 'k', "key-file","FILE", "Read key bindings from file" }, +#ifndef NDEBUG + { 'K', "dump-keys", nullptr, "Dump key bindings to stdout" }, +#endif +}; + +gcc_pure +static const OptionDefinition * +FindOption(int s) noexcept +{ + for (const auto &i : option_table) + if (s == i.shortopt) + return &i; + + return nullptr; +} + +static const OptionDefinition * +FindOption(const char *l) noexcept +{ + for (const auto &i : option_table) + if (strcmp(l, i.longopt) == 0) + return &i; + + return nullptr; +} + +[[noreturn]] +static void +option_error(int error, const char *option, const char *arg) +{ + switch (error) { + case ERROR_UNKNOWN_OPTION: + fprintf(stderr, PACKAGE ": invalid option %s\n", option); + break; + case ERROR_BAD_ARGUMENT: + fprintf(stderr, PACKAGE ": bad argument: %s\n", option); + break; + case ERROR_GOT_ARGUMENT: + fprintf(stderr, PACKAGE ": invalid option %s=%s\n", option, arg); + break; + case ERROR_MISSING_ARGUMENT: + fprintf(stderr, PACKAGE ": missing value for %s option\n", option); + break; + default: + fprintf(stderr, PACKAGE ": internal error %d\n", error); + break; + } + + exit(EXIT_FAILURE); +} + +static void +display_help() +{ + printf("Usage: %s [OPTION]...\n", PACKAGE); + + for (const auto &i : option_table) { + char tmp[32]; + + if (i.argument) + snprintf(tmp, sizeof(tmp), "%s=%s", + i.longopt, + i.argument); + else + snprintf(tmp, sizeof(tmp), "%s", + i.longopt); + + printf(" -%c, --%-20s %s\n", + i.shortopt, + tmp, + i.descrition); + } +} + +static void +handle_option(int c, const char *arg) +{ + switch (c) { + case '?': /* --help */ + display_help(); + exit(EXIT_SUCCESS); + case 'V': /* --version */ + puts(PACKAGE " version: " VERSION "\n" + "build options:" +#ifdef NCMPC_MINI + " mini" +#endif +#ifndef NDEBUG + " debug" +#endif +#ifdef ENABLE_MULTIBYTE + " multibyte" +#endif +#ifdef HAVE_CURSES_ENHANCED + " wide" +#endif +#ifdef ENABLE_LOCALE + " locale" +#endif +#ifdef HAVE_ICONV + " iconv" +#endif +#ifdef ENABLE_NLS + " nls" +#endif +#ifdef ENABLE_COLORS + " colors" +#else + " no-colors" +#endif +#ifdef ENABLE_LIRC + " lirc" +#endif +#ifdef HAVE_GETMOUSE + " getmouse" +#endif +#ifdef ENABLE_ARTIST_SCREEN + " artist-screen" +#endif +#ifdef ENABLE_HELP_SCREEN + " help-screen" +#endif +#ifdef ENABLE_SEARCH_SCREEN + " search-screen" +#endif +#ifdef ENABLE_SONG_SCREEN + " song-screen" +#endif +#ifdef ENABLE_KEYDEF_SCREEN + " key-screen" +#endif +#ifdef ENABLE_LYRICS_SCREEN + " lyrics-screen" +#endif +#ifdef ENABLE_OUTPUTS_SCREEN + " outputs-screen" +#endif +#ifdef ENABLE_CHAT_SCREEN + " chat-screen" +#endif + + "\n"); +#ifndef NCMPC_MINI + printf("configuration files:\n" + " %s\n" +#ifndef _WIN32 + " %s\n" +#endif + " %s\n\n", + GetUserConfigPath().c_str(), +#ifndef _WIN32 + GetHomeConfigPath().c_str(), +#endif + GetSystemConfigPath().c_str()); + + if (strcmp("translator-credits", _("translator-credits")) != 0) + /* To translators: these credits are shown + when ncmpc is started with "--version" */ + printf("\n%s\n", _("translator-credits")); +#endif + exit(EXIT_SUCCESS); + case 'c': /* --colors */ +#ifdef ENABLE_COLORS + options.enable_colors = true; +#endif + break; + case 'C': /* --no-colors */ +#ifdef ENABLE_COLORS + options.enable_colors = false; +#endif + break; + case 'm': /* --mouse */ +#ifdef HAVE_GETMOUSE + options.enable_mouse = true; +#endif + break; + case 'M': /* --no-mouse */ +#ifdef HAVE_GETMOUSE + options.enable_mouse = false; +#endif + break; + case 'e': /* --exit */ + /* deprecated */ + break; + case 'p': /* --port */ + options.port = atoi(arg); + break; + case 'h': /* --host */ + options.host = arg; + break; + case 'P': /* --password */ + options.password = LocaleToUtf8(arg).c_str(); + break; + case 'f': /* --config */ + options.config_file = arg; + break; + case 'k': /* --key-file */ + options.key_file = arg; + break; +#if !defined(NDEBUG) && !defined(NCMPC_MINI) + case 'K': /* --dump-keys */ + read_configuration(); + GetGlobalKeyBindings().WriteToFile(stdout, + KEYDEF_WRITE_ALL | KEYDEF_COMMENT_ALL); + exit(EXIT_SUCCESS); + break; +#endif + default: + fprintf(stderr,"Unknown Option %c = %s\n", c, arg); + break; + } +} + +void +options_parse(int argc, const char *argv[]) +{ + const OptionDefinition *opt = nullptr; + + for (int i = 1; i < argc; i++) { + const char *arg = argv[i]; + size_t len = strlen(arg); + + /* check for a long option */ + if (strncmp(arg, "--", 2) == 0) { + /* make sure we got an argument for the previous option */ + if( opt && opt->argument ) + option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); + + /* retrieve a option argument */ + std::string name; + const char *value = strrchr(arg + 2, '='); + if (value != nullptr) { + name.assign(arg, value); + value++; + } else + name = arg; + + /* check if the option exists */ + if ((opt = FindOption(name.c_str() + 2)) == nullptr) + option_error(ERROR_UNKNOWN_OPTION, name.c_str(), nullptr); + + /* abort if we got an argument to the option and don't want one */ + if( value && opt->argument==nullptr ) + option_error(ERROR_GOT_ARGUMENT, arg, value); + + /* execute option callback */ + if (value || opt->argument==nullptr) { + handle_option(opt->shortopt, value); + opt = nullptr; + } + } + /* check for short options */ + else if (len >= 2 && *arg == '-') { + size_t j; + + for(j=1; j<len; j++) { + /* make sure we got an argument for the previous option */ + if (opt && opt->argument) + option_error(ERROR_MISSING_ARGUMENT, + opt->longopt, opt->argument); + + /* check if the option exists */ + if ((opt = FindOption(arg[j])) == nullptr) + option_error(ERROR_UNKNOWN_OPTION, arg, nullptr); + + /* if no option argument is needed execute callback */ + if (opt->argument == nullptr) { + handle_option(opt->shortopt, nullptr); + opt = nullptr; + } + } + } else { + /* is this a option argument? */ + if (opt && opt->argument) { + handle_option (opt->shortopt, arg); + opt = nullptr; + } else + option_error(ERROR_BAD_ARGUMENT, arg, nullptr); + } + } + + if (opt && opt->argument == nullptr) + handle_option(opt->shortopt, nullptr); + else if (opt && opt->argument) + option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument); + + if (options.host.empty() && getenv("MPD_HOST")) + options.host = getenv("MPD_HOST"); +}
View file
ncmpc-0.32.tar.xz/src/Options.hxx
Added
@@ -0,0 +1,96 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef OPTIONS_HXX +#define OPTIONS_HXX + +#include "config.h" +#include "defaults.hxx" + +#include <vector> +#include <string> +#include <chrono> + +struct Options { + std::string host; + std::string password; + std::string config_file; + std::string key_file; + std::string list_format = DEFAULT_LIST_FORMAT; + std::string search_format; + std::string status_format = DEFAULT_STATUS_FORMAT; +#ifndef NCMPC_MINI + std::string xterm_title_format; + std::string scroll_sep = DEFAULT_SCROLL_SEP; +#endif + std::vector<std::string> screen_list = DEFAULT_SCREEN_LIST; + bool display_remaining_time; + int port; + int timeout_ms = 0; + int crossfade_time = DEFAULT_CROSSFADE_TIME; + int search_mode; + std::chrono::steady_clock::duration hide_cursor; + int seek_time = 1; +#ifdef ENABLE_LYRICS_SCREEN + std::chrono::steady_clock::duration lyrics_timeout = std::chrono::minutes(1); + bool lyrics_autosave = false; + bool lyrics_show_plugin = false; + std::string text_editor; + bool text_editor_ask = false; +#endif +#ifdef ENABLE_CHAT_SCREEN + std::string chat_prefix; +#endif + bool find_wrap = true; + bool find_show_last_pattern; + bool list_wrap; + int scroll_offset = 0; + bool auto_center; + bool wide_cursor = true; + bool hardware_cursor; + +#ifdef ENABLE_COLORS + bool enable_colors = true; +#endif + bool audible_bell = true; + bool visible_bell; + bool bell_on_wrap = true; + std::chrono::steady_clock::duration status_message_time = std::chrono::seconds(3); +#ifndef NCMPC_MINI + bool enable_xterm_title; +#endif +#ifdef HAVE_GETMOUSE + bool enable_mouse; +#endif +#ifdef NCMPC_MINI + static constexpr bool jump_prefix_only = true; +#else + bool scroll = DEFAULT_SCROLL; + bool visible_bitrate; + bool welcome_screen_list = true; + bool jump_prefix_only = true; + bool second_column = true; +#endif +}; + +extern Options options; + +void options_parse(int argc, const char **argv); + +#endif
View file
ncmpc-0.30.tar.xz/src/OutputsPage.cxx -> ncmpc-0.32.tar.xz/src/OutputsPage.cxx
Changed
@@ -18,11 +18,12 @@ */ #include "OutputsPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "ListPage.hxx" #include "ListRenderer.hxx" #include "screen_status.hxx" #include "paint.hxx" +#include "Command.hxx" #include "i18n.h" #include "mpdclient.hxx" @@ -53,14 +54,14 @@ public: /* virtual methods from class Page */ - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; }; bool @@ -132,14 +133,14 @@ c->FinishCommand(); } -static Page * +static std::unique_ptr<Page> outputs_init(ScreenManager &, WINDOW *w, Size size) { - return new OutputsPage(w, size); + return std::make_unique<OutputsPage>(w, size); } const char * -OutputsPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const +OutputsPage::GetTitle(char *, size_t) const noexcept { return _("Outputs"); } @@ -147,25 +148,25 @@ void OutputsPage::PaintListItem(WINDOW *w, unsigned i, gcc_unused unsigned y, unsigned width, - bool selected) const + bool selected) const noexcept { assert(i < items.size()); const auto *output = items[i].get(); - row_color(w, COLOR_LIST, selected); + row_color(w, Style::LIST, selected); waddstr(w, mpd_output_get_enabled(output) ? "[X] " : "[ ] "); waddstr(w, mpd_output_get_name(output)); row_clear_to_eol(w, width, selected); } void -OutputsPage::Paint() const +OutputsPage::Paint() const noexcept { lw.Paint(*this); } void -OutputsPage::Update(struct mpdclient &c, unsigned events) +OutputsPage::Update(struct mpdclient &c, unsigned events) noexcept { if (events & MPD_IDLE_OUTPUT) { Clear(); @@ -176,17 +177,17 @@ } bool -OutputsPage::OnCommand(struct mpdclient &c, command_t cmd) +OutputsPage::OnCommand(struct mpdclient &c, Command cmd) { if (ListPage::OnCommand(c, cmd)) return true; switch (cmd) { - case CMD_PLAY: + case Command::PLAY: Toggle(c, lw.selected); return true; - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: Clear(); fill_outputs_list(&c, items); lw.SetLength(items.size()); @@ -200,7 +201,9 @@ return false; } -const struct screen_functions screen_outputs = { +const PageMeta screen_outputs = { "outputs", + N_("Outputs"), + Command::SCREEN_OUTPUTS, outputs_init, };
View file
ncmpc-0.30.tar.xz/src/OutputsPage.hxx -> ncmpc-0.32.tar.xz/src/OutputsPage.hxx
Changed
@@ -23,7 +23,8 @@ #include "config.h" #ifdef ENABLE_OUTPUTS_SCREEN -extern const struct screen_functions screen_outputs; +struct PageMeta; +extern const PageMeta screen_outputs; #endif /* ENABLE_OUTPUTS_SCREEN */ #endif
View file
ncmpc-0.30.tar.xz/src/Page.hxx -> ncmpc-0.32.tar.xz/src/Page.hxx
Changed
@@ -21,15 +21,17 @@ #define NCMPC_PAGE_HXX #include "config.h" -#include "command.hxx" -#include "ncmpc_curses.h" #include "Point.hxx" #include "Size.hxx" +#include "util/Compiler.h" + +#include <curses.h> #include <utility> #include <stddef.h> +enum class Command : unsigned; struct mpdclient; class Page { @@ -47,17 +49,17 @@ bool dirty = true; public: - virtual ~Page() = default; + virtual ~Page() noexcept = default; - bool IsDirty() const { + bool IsDirty() const noexcept { return dirty; } - void SetDirty(bool _dirty=true) { + void SetDirty(bool _dirty=true) noexcept { dirty = _dirty; } - void Resize(Size new_size) { + void Resize(Size new_size) noexcept { if (new_size == last_size) return; @@ -65,25 +67,25 @@ OnResize(new_size); } - void AddPendingEvents(unsigned events) { + void AddPendingEvents(unsigned events) noexcept { pending_events |= events; } - void Update(struct mpdclient &c) { + void Update(struct mpdclient &c) noexcept { Update(c, std::exchange(pending_events, 0)); } protected: - const Size &GetLastSize() const { + const Size &GetLastSize() const noexcept { return last_size; } public: - virtual void OnOpen(struct mpdclient &) {} - virtual void OnClose() {} - virtual void OnResize(Size size) = 0; - virtual void Paint() const = 0; - virtual void Update(struct mpdclient &, unsigned) {} + virtual void OnOpen(struct mpdclient &) noexcept {} + virtual void OnClose() noexcept {} + virtual void OnResize(Size size) noexcept = 0; + virtual void Paint() const noexcept = 0; + virtual void Update(struct mpdclient &, unsigned) noexcept {} /** * Handle a command. @@ -91,7 +93,7 @@ * @returns true if the command should not be handled by the * ncmpc core */ - virtual bool OnCommand(struct mpdclient &c, command_t cmd) = 0; + virtual bool OnCommand(struct mpdclient &c, Command cmd) = 0; #ifdef HAVE_GETMOUSE /** @@ -107,7 +109,8 @@ } #endif - virtual const char *GetTitle(char *s, size_t size) const = 0; + gcc_pure + virtual const char *GetTitle(char *s, size_t size) const noexcept = 0; }; #endif
View file
ncmpc-0.32.tar.xz/src/PageMeta.hxx
Added
@@ -0,0 +1,50 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef NCMPC_PAGE_META_HXX +#define NCMPC_PAGE_META_HXX + +#include "Size.hxx" + +#include <memory> + +#include <curses.h> + +enum class Command : unsigned; +class Page; +class ScreenManager; + +struct PageMeta { + const char *name; + + /** + * A title/caption for this page, to be translated using + * gettext(). + */ + const char *title; + + /** + * The command which switches to this page. + */ + Command command; + + std::unique_ptr<Page> (*init)(ScreenManager &screen, WINDOW *w, Size size); +}; + +#endif
View file
ncmpc-0.30.tar.xz/src/ProgressBar.cxx -> ncmpc-0.32.tar.xz/src/ProgressBar.cxx
Changed
@@ -18,7 +18,8 @@ */ #include "ProgressBar.hxx" -#include "colors.hxx" +#include "Styles.hxx" +#include "Options.hxx" #include <assert.h> @@ -26,7 +27,10 @@ :window(p, {_width, 1u}) { leaveok(window.w, true); - wbkgd(window.w, COLOR_PAIR(COLOR_PROGRESSBAR)); +#ifdef ENABLE_COLORS + if (options.enable_colors) + wbkgd(window.w, COLOR_PAIR(Style::PROGRESSBAR)); +#endif } void @@ -35,7 +39,7 @@ if (max > 0) { assert(width < window.size.width); - colors_use(window.w, COLOR_PROGRESSBAR); + SelectStyle(window.w, Style::PROGRESSBAR); if (width > 0) mvwhline(window.w, 0, 0, '=', width); @@ -44,12 +48,12 @@ unsigned x = width + 1; if (x < window.size.width) { - colors_use(window.w, COLOR_PROGRESSBAR_BACKGROUND); + SelectStyle(window.w, Style::PROGRESSBAR_BACKGROUND); mvwhline(window.w, 0, x, ACS_HLINE, window.size.width - x); } } else { /* no progress bar, just a simple horizontal line */ - colors_use(window.w, COLOR_LINE); + SelectStyle(window.w, Style::LINE); mvwhline(window.w, 0, 0, ACS_HLINE, window.size.width); }
View file
ncmpc-0.30.tar.xz/src/ProxyPage.cxx -> ncmpc-0.32.tar.xz/src/ProxyPage.cxx
Changed
@@ -40,7 +40,7 @@ } void -ProxyPage::OnOpen(struct mpdclient &c) +ProxyPage::OnOpen(struct mpdclient &c) noexcept { assert(!is_open); is_open = true; @@ -52,7 +52,7 @@ } void -ProxyPage::OnClose() +ProxyPage::OnClose() noexcept { assert(is_open); is_open = false; @@ -62,7 +62,7 @@ } void -ProxyPage::OnResize(Size size) +ProxyPage::OnResize(Size size) noexcept { if (current_page != nullptr) current_page->Resize(size); @@ -71,7 +71,7 @@ } void -ProxyPage::Paint() const +ProxyPage::Paint() const noexcept { if (current_page != nullptr) current_page->Paint(); @@ -80,7 +80,7 @@ } void -ProxyPage::Update(struct mpdclient &c, unsigned events) +ProxyPage::Update(struct mpdclient &c, unsigned events) noexcept { if (current_page != nullptr) { current_page->AddPendingEvents(events); @@ -90,7 +90,7 @@ } bool -ProxyPage::OnCommand(struct mpdclient &c, command_t cmd) +ProxyPage::OnCommand(struct mpdclient &c, Command cmd) { if (current_page != nullptr) { bool result = current_page->OnCommand(c, cmd); @@ -114,7 +114,7 @@ #endif const char * -ProxyPage::GetTitle(char *s, size_t size) const +ProxyPage::GetTitle(char *s, size_t size) const noexcept { return current_page != nullptr ? current_page->GetTitle(s, size)
View file
ncmpc-0.30.tar.xz/src/ProxyPage.hxx -> ncmpc-0.32.tar.xz/src/ProxyPage.hxx
Changed
@@ -30,7 +30,7 @@ bool is_open = false; public: - explicit ProxyPage(WINDOW *_w):w(_w) {} + explicit ProxyPage(WINDOW *_w) noexcept:w(_w) {} const Page *GetCurrentPage() const { return current_page; @@ -52,18 +52,18 @@ public: /* virtual methods from Page */ - void OnOpen(struct mpdclient &c) override; - void OnClose() override; - void OnResize(Size size) override; - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void OnOpen(struct mpdclient &c) noexcept override; + void OnClose() noexcept override; + void OnResize(Size size) noexcept override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; #ifdef HAVE_GETMOUSE bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate) override; #endif - const char *GetTitle(char *s, size_t size) const override; + const char *GetTitle(char *s, size_t size) const noexcept override; }; #endif
View file
ncmpc-0.30.tar.xz/src/Queue.cxx -> ncmpc-0.32.tar.xz/src/Queue.cxx
Changed
@@ -53,27 +53,28 @@ std::next(items.begin(), dest + 1), std::next(items.begin(), src)); } else { - std::move(std::next(items.begin(), dest), + std::move_backward(std::next(items.begin(), dest), std::next(items.begin(), src), - std::next(items.begin(), dest + 1)); + std::next(items.begin(), src + 1)); } assert(!items[dest]); items[dest] = std::move(song); } -int -MpdQueue::Find(const struct mpd_song &song) const +MpdQueue::size_type +MpdQueue::FindByReference(const struct mpd_song &song) const { - for (size_type i = 0; i < size(); ++i) + for (size_type i = 0;; ++i) { + assert(i < size()); + if (&(*this)[i] == &song) return i; - - return -1; + } } int -MpdQueue::FindId(unsigned id) const +MpdQueue::FindById(unsigned id) const { for (size_type i = 0; i < size(); ++i) { const auto &song = (*this)[i]; @@ -85,7 +86,7 @@ } int -MpdQueue::FindUri(const char *filename) const +MpdQueue::FindByUri(const char *filename) const { for (size_type i = 0; i < size(); ++i) { const auto &song = (*this)[i];
View file
ncmpc-0.30.tar.xz/src/Queue.hxx -> ncmpc-0.32.tar.xz/src/Queue.hxx
Changed
@@ -20,7 +20,7 @@ #ifndef QUEUE_HXX #define QUEUE_HXX -#include "Compiler.h" +#include "util/Compiler.h" #include <mpd/client.h> @@ -86,18 +86,48 @@ void Move(unsigned dest, unsigned src); + /** + * Find a song by its reference. This method compares + * #mpd_song references, so this method makes only sense for + * songs references which were obtained from this container. + * + * @return the song position + */ gcc_pure - int Find(const struct mpd_song &song) const; + size_type FindByReference(const struct mpd_song &song) const; + /** + * Find a song by its id. + * + * @return the song position + */ gcc_pure - int FindId(unsigned id) const; + int FindById(unsigned id) const; + /** + * Find a song by its URI. + * + * @return the song position + */ gcc_pure - int FindUri(const char *uri) const; + int FindByUri(const char *uri) const; + /** + * Like FindByUri(), but return the song id, not the song position + * + * @return the song id + */ gcc_pure - int FindUri(const struct mpd_song &song) const { - return FindUri(mpd_song_get_uri(&song)); + int FindIdByUri(const char *uri) const { + int i = FindByUri(uri); + if (i >= 0) + i = mpd_song_get_id(items[i].get()); + return i; + } + + gcc_pure + bool ContainsUri(const char *uri) const { + return FindByUri(uri) >= 0; } };
View file
ncmpc-0.30.tar.xz/src/QueuePage.cxx -> ncmpc-0.32.tar.xz/src/QueuePage.cxx
Changed
@@ -18,7 +18,7 @@ */ #include "QueuePage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "ListPage.hxx" #include "ListRenderer.hxx" #include "ListText.hxx" @@ -27,21 +27,20 @@ #include "screen_find.hxx" #include "save_playlist.hxx" #include "config.h" -#include "Event.hxx" #include "i18n.h" #include "charset.hxx" -#include "options.hxx" +#include "Options.hxx" #include "mpdclient.hxx" #include "strfsong.hxx" -#include "wreadln.hxx" #include "Completion.hxx" +#include "Styles.hxx" #include "song_paint.hxx" #include "screen.hxx" #include "screen_utils.hxx" #include "SongPage.hxx" #include "LyricsPage.hxx" #include "db_completion.hxx" -#include "Compiler.h" +#include "util/Compiler.h" #ifndef NCMPC_MINI #include "hscroll.hxx" @@ -49,12 +48,12 @@ #include <mpd/client.h> +#include <boost/asio/steady_timer.hpp> + #include <set> #include <string> -#include <ctype.h> #include <string.h> -#include <glib.h> #define MAX_SONG_LENGTH 512 @@ -65,10 +64,11 @@ mutable class hscroll hscroll; #endif + boost::asio::steady_timer hide_cursor_timer; + MpdQueue *playlist = nullptr; int current_song_id = -1; int selected_song_id = -1; - guint timer_hide_cursor_id = 0; unsigned last_connection_id = 0; std::string connection_name; @@ -79,15 +79,19 @@ QueuePage(ScreenManager &_screen, WINDOW *w, Size size) :ListPage(w, size), - screen(_screen) + screen(_screen), #ifndef NCMPC_MINI - , hscroll(w, options.scroll_sep.c_str()) + hscroll(screen.get_io_service(), + w, options.scroll_sep.c_str()), #endif + hide_cursor_timer(screen.get_io_service()) { } private: + gcc_pure const struct mpd_song *GetSelectedSong() const; + void SaveSelection(); void RestoreSelection(); @@ -101,39 +105,40 @@ bool OnSongChange(const struct mpd_status *status); - bool OnHideCursorTimer(); + void OnHideCursorTimer(const boost::system::error_code &error) noexcept; void ScheduleHideCursor() { - assert(options.hide_cursor > 0); - assert(timer_hide_cursor_id == 0); + assert(options.hide_cursor > std::chrono::steady_clock::duration::zero()); - timer_hide_cursor_id = ScheduleTimeout<QueuePage, - &QueuePage::OnHideCursorTimer>(std::chrono::seconds(options.hide_cursor), - *this); + boost::system::error_code error; + hide_cursor_timer.expires_from_now(options.hide_cursor, + error); + hide_cursor_timer.async_wait(std::bind(&QueuePage::OnHideCursorTimer, this, + std::placeholders::_1)); } /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void OnClose() override; - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void OnOpen(struct mpdclient &c) noexcept override; + void OnClose() noexcept override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; #ifdef HAVE_GETMOUSE bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate) override; #endif - const char *GetTitle(char *s, size_t size) const override; + const char *GetTitle(char *s, size_t size) const noexcept override; }; const struct mpd_song * @@ -168,7 +173,7 @@ /* selection is still valid */ return; - int pos = playlist->FindId(selected_song_id); + int pos = playlist->FindById(selected_song_id); if (pos >= 0) lw.SetCursor(pos); @@ -177,7 +182,7 @@ const char * QueuePage::GetListItemText(char *buffer, size_t size, - unsigned idx) const + unsigned idx) const noexcept { assert(idx < playlist->size()); @@ -317,19 +322,19 @@ return 0; } -static Page * +static std::unique_ptr<Page> screen_queue_init(ScreenManager &_screen, WINDOW *w, Size size) { - return new QueuePage(_screen, w, size); + return std::make_unique<QueuePage>(_screen, w, size); } -bool -QueuePage::OnHideCursorTimer() +void +QueuePage::OnHideCursorTimer(const boost::system::error_code &error) noexcept { - assert(options.hide_cursor > 0); - assert(timer_hide_cursor_id != 0); + if (error) + return; - timer_hide_cursor_id = 0; + assert(options.hide_cursor > std::chrono::steady_clock::duration::zero()); /* hide the cursor when mpd is playing and the user is inactive */ @@ -338,17 +343,14 @@ Repaint(); } else ScheduleHideCursor(); - - return false; } void -QueuePage::OnOpen(struct mpdclient &c) +QueuePage::OnOpen(struct mpdclient &c) noexcept { playlist = &c.playlist; - assert(timer_hide_cursor_id == 0); - if (options.hide_cursor > 0) { + if (options.hide_cursor > std::chrono::steady_clock::duration::zero()) { lw.hide_cursor = false; ScheduleHideCursor(); } @@ -358,12 +360,9 @@ } void -QueuePage::OnClose() +QueuePage::OnClose() noexcept { - if (timer_hide_cursor_id != 0) { - g_source_remove(timer_hide_cursor_id); - timer_hide_cursor_id = 0; - } + hide_cursor_timer.cancel(); #ifndef NCMPC_MINI if (options.scroll) @@ -372,7 +371,7 @@ } const char * -QueuePage::GetTitle(char *str, size_t size) const +QueuePage::GetTitle(char *str, size_t size) const noexcept { if (connection_name.empty()) return _("Queue"); @@ -383,7 +382,7 @@ void QueuePage::PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const + bool selected) const noexcept { assert(playlist != nullptr); assert(i < playlist->size()); @@ -401,7 +400,7 @@ } void -QueuePage::Paint() const +QueuePage::Paint() const noexcept { #ifndef NCMPC_MINI if (options.scroll) @@ -412,7 +411,7 @@ } void -QueuePage::Update(struct mpdclient &c, unsigned events) +QueuePage::Update(struct mpdclient &c, unsigned events) noexcept { playing = c.playing; @@ -444,7 +443,11 @@ if (bstate & BUTTON1_DOUBLE_CLICKED) { /* stop */ - screen.OnCommand(c, CMD_STOP); + + auto *connection = c.GetConnection(); + if (connection != nullptr && + !mpd_run_stop(connection)) + c.HandleError(); return true; } @@ -464,7 +467,7 @@ } else if (bstate & BUTTON3_CLICKED) { /* delete */ if (lw.selected == old_selected) - mpdclient_cmd_delete(&c, lw.selected); + c.RunDelete(lw.selected); lw.SetLength(playlist->size()); } @@ -477,22 +480,17 @@ #endif bool -QueuePage::OnCommand(struct mpdclient &c, command_t cmd) +QueuePage::OnCommand(struct mpdclient &c, Command cmd) { struct mpd_connection *connection; - static command_t cached_cmd = CMD_NONE; + static Command cached_cmd = Command::NONE; - const command_t prev_cmd = cached_cmd; + const Command prev_cmd = cached_cmd; cached_cmd = cmd; lw.hide_cursor = false; - if (options.hide_cursor > 0) { - if (timer_hide_cursor_id != 0) { - g_source_remove(timer_hide_cursor_id); - timer_hide_cursor_id = 0; - } - + if (options.hide_cursor > std::chrono::steady_clock::duration::zero()) { ScheduleHideCursor(); } @@ -502,32 +500,38 @@ } switch(cmd) { - case CMD_SCREEN_UPDATE: - CenterPlayingItem(c.status, prev_cmd == CMD_SCREEN_UPDATE); + int pos; + + case Command::SCREEN_UPDATE: + CenterPlayingItem(c.status, prev_cmd == Command::SCREEN_UPDATE); SetDirty(); return false; - case CMD_SELECT_PLAYING: - lw.SetCursor(c.playlist.Find(*c.song)); + case Command::SELECT_PLAYING: + pos = c.GetCurrentSongPos(); + if (pos < 0) + return false; + + lw.SetCursor(pos); SaveSelection(); SetDirty(); return true; - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SaveSelection(); SetDirty(); return true; - case CMD_LIST_JUMP: - screen_jump(screen, &lw, *this, *this); + case Command::LIST_JUMP: + screen_jump(screen, lw, *this, *this); SaveSelection(); SetDirty(); return true; #ifdef ENABLE_SONG_SCREEN - case CMD_SCREEN_SONG: + case Command::SCREEN_SONG: if (GetSelectedSong() != nullptr) { screen_song_switch(screen, c, *GetSelectedSong()); return true; @@ -537,14 +541,12 @@ #endif #ifdef ENABLE_LYRICS_SCREEN - case CMD_SCREEN_LYRICS: - if (lw.selected < c.playlist.size()) { - struct mpd_song &selected = c.playlist[lw.selected]; + case Command::SCREEN_LYRICS: + if (lw.selected < playlist->size()) { + struct mpd_song &selected = (*playlist)[lw.selected]; bool follow = false; - if (c.song && - !strcmp(mpd_song_get_uri(&selected), - mpd_song_get_uri(c.song))) + if (&selected == c.GetPlayingSong()) follow = true; screen_lyrics_switch(screen, c, selected, follow); @@ -553,9 +555,9 @@ break; #endif - case CMD_SCREEN_SWAP: - if (!c.playlist.empty()) - screen.Swap(c, &c.playlist[lw.selected]); + case Command::SCREEN_SWAP: + if (!playlist->empty()) + screen.Swap(c, &(*playlist)[lw.selected]); else screen.Swap(c, nullptr); return true; @@ -571,7 +573,7 @@ const struct mpd_song *song; ListWindowRange range; - case CMD_PLAY: + case Command::PLAY: song = GetSelectedSong(); if (song == nullptr) return false; @@ -583,23 +585,22 @@ return true; - case CMD_DELETE: + case Command::DELETE: range = lw.GetRange(); - mpdclient_cmd_delete_range(&c, range.start_index, - range.end_index); + c.RunDeleteRange(range.start_index, range.end_index); lw.SetCursor(range.start_index); return true; - case CMD_SAVE_PLAYLIST: + case Command::SAVE_PLAYLIST: playlist_save(&c, nullptr, nullptr); return true; - case CMD_ADD: + case Command::ADD: handle_add_to_playlist(&c); return true; - case CMD_SHUFFLE: + case Command::SHUFFLE: range = lw.GetRange(); if (range.end_index <= range.start_index + 1) /* No range selection, shuffle all list. */ @@ -616,13 +617,12 @@ c.HandleError(); return true; - case CMD_LIST_MOVE_UP: + case Command::LIST_MOVE_UP: range = lw.GetRange(); if (range.start_index == 0 || range.empty()) return false; - if (!mpdclient_cmd_move(&c, range.end_index - 1, - range.start_index - 1)) + if (!c.RunMove(range.end_index - 1, range.start_index - 1)) return true; lw.selected--; @@ -635,13 +635,12 @@ SaveSelection(); return true; - case CMD_LIST_MOVE_DOWN: + case Command::LIST_MOVE_DOWN: range = lw.GetRange(); - if (range.end_index >= c.playlist.size()) + if (range.end_index >= playlist->size()) return false; - if (!mpdclient_cmd_move(&c, range.start_index, - range.end_index)) + if (!c.RunMove(range.start_index, range.end_index)) return true; lw.selected++; @@ -654,7 +653,7 @@ SaveSelection(); return true; - case CMD_LOCATE: + case Command::LOCATE: if (GetSelectedSong() != nullptr) { screen_file_goto_song(screen, c, *GetSelectedSong()); return true; @@ -669,7 +668,9 @@ return false; } -const struct screen_functions screen_queue = { +const PageMeta screen_queue = { "playlist", + N_("Queue"), + Command::SCREEN_PLAY, screen_queue_init, };
View file
ncmpc-0.30.tar.xz/src/QueuePage.hxx -> ncmpc-0.32.tar.xz/src/QueuePage.hxx
Changed
@@ -20,6 +20,8 @@ #ifndef NCMPC_QUEUE_PAGE_HXX #define NCMPC_QUEUE_PAGE_HXX -extern const struct screen_functions screen_queue; +struct PageMeta; + +extern const PageMeta screen_queue; #endif
View file
ncmpc-0.30.tar.xz/src/SearchPage.cxx -> ncmpc-0.32.tar.xz/src/SearchPage.cxx
Changed
@@ -18,11 +18,13 @@ */ #include "SearchPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen_status.hxx" #include "TextListRenderer.hxx" #include "i18n.h" -#include "options.hxx" +#include "Options.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "charset.hxx" #include "mpdclient.hxx" #include "strfsong.hxx" @@ -31,8 +33,6 @@ #include "filelist.hxx" #include "util/Macros.hxx" -#include <glib.h> - #include <string.h> enum { @@ -40,7 +40,7 @@ SEARCH_ARTIST_TITLE }; -static const struct { +static constexpr struct { enum mpd_tag_type tag_type; const char *name; const char *localname; @@ -61,7 +61,7 @@ static int search_get_tag_id(const char *name) { - if (g_ascii_strcasecmp(name, "file") == 0 || + if (strcasecmp(name, "file") == 0 || strcasecmp(name, _("file")) == 0) return SEARCH_URI; @@ -78,7 +78,7 @@ const char *label; } search_type_t; -static search_type_t mode[] = { +static constexpr search_type_t mode[] = { { MPD_TAG_TITLE, N_("Title") }, { MPD_TAG_ARTIST, N_("Artist") }, { MPD_TAG_ALBUM, N_("Album") }, @@ -88,6 +88,9 @@ }; static const char *const help_text[] = { + "", + "", + "", "Quick - Enter a string and ncmpc will search according", " to the current search mode (displayed above).", "", @@ -122,20 +125,37 @@ public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; }; /* search info */ class SearchHelpText final : public ListText { public: /* virtual methods from class ListText */ - const char *GetListItemText(char *, size_t, unsigned idx) const override { + const char *GetListItemText(char *buffer, size_t size, + unsigned idx) const noexcept override { assert(idx < ARRAY_SIZE(help_text)); + if (idx == 0) { + snprintf(buffer, size, + " %s : %s", + GetGlobalKeyBindings().GetKeyNames(Command::SCREEN_SEARCH).c_str(), + "New search"); + return buffer; + } + + if (idx == 1) { + snprintf(buffer, size, + " %s : %s [%s]", + GetGlobalKeyBindings().GetKeyNames(Command::SEARCH_MODE).c_str(), + get_key_description(Command::SEARCH_MODE), + gettext(mode[options.search_mode].label)); + return buffer; + } + return help_text[idx]; } }; @@ -212,20 +232,13 @@ if (strchr(query, ':') == nullptr) return nullptr; - int i, j; - char *str = g_strdup(query); - - char *tabv[10]; - char *matchv[10]; - int table[10]; - char *arg[10]; + std::string str(query); - memset(tabv, 0, 10 * sizeof(char *)); - memset(matchv, 0, 10 * sizeof(char *)); - memset(arg, 0, 10 * sizeof(char *)); + static constexpr size_t N = 10; - for (i = 0; i < 10; i++) - table[i] = -1; + char *tabv[N]; + char *matchv[N]; + int table[N]; /* * Replace every : with a '\0' and every space character @@ -233,8 +246,8 @@ * to their proper vector. */ int spi = -1; - j = 0; - for (i = 0; str[i] != '\0' && j < 10; i++) { + size_t n = 0; + for (size_t i = 0; str[i] != '\0' && n < N; i++) { switch(str[i]) { case ' ': spi = i; @@ -244,9 +257,16 @@ if (spi != -1) str[spi] = '\0'; - matchv[j] = str + i + 1; - tabv[j] = str + spi + 1; - j++; + matchv[n] = &str[i + 1]; + tabv[n] = &str[spi + 1]; + table[n] = search_get_tag_id(tabv[n]); + if (table[n] < 0) { + screen_status_printf(_("Bad search tag %s"), + tabv[n]); + return nullptr; + } + + ++n; /* FALLTHROUGH */ default: continue; @@ -254,34 +274,12 @@ } /* Get rid of obvious failure case */ - if (matchv[j - 1][0] == '\0') { - screen_status_printf(_("No argument for search tag %s"), tabv[j - 1]); - g_free(str); + if (matchv[n - 1][0] == '\0') { + screen_status_printf(_("No argument for search tag %s"), tabv[n - 1]); return nullptr; } - int id = j = i = 0; - while (matchv[i] && matchv[i][0] != '\0' && i < 10) { - id = search_get_tag_id(tabv[i]); - if (id == -1) { - screen_status_printf(_("Bad search tag %s"), tabv[i]); - } else { - table[j] = id; - arg[j] = locale_to_utf8(matchv[i]); - j++; - advanced_search_mode = true; - } - - i++; - } - - g_free(str); - - if (!advanced_search_mode || j == 0) { - for (i = 0; arg[i] != nullptr; ++i) - g_free(arg[i]); - return nullptr; - } + advanced_search_mode = true; /*----------------------------------------------------------------------- * NOTE (again): This code exists to test a new search ui, @@ -292,15 +290,18 @@ /** stupid - but this is just a test...... (fulhack) */ mpd_search_db_songs(connection, false); - for (i = 0; i < 10 && arg[i] != nullptr; i++) { + for (size_t i = 0; i < n; i++) { + const LocaleToUtf8 value(matchv[i]); + if (table[i] == SEARCH_URI) mpd_search_add_uri_constraint(connection, MPD_OPERATOR_DEFAULT, - arg[i]); + value.c_str()); else mpd_search_add_tag_constraint(connection, MPD_OPERATOR_DEFAULT, - (enum mpd_tag_type)table[i], arg[i]); + (enum mpd_tag_type)table[i], + value.c_str()); } mpd_search_commit(connection); @@ -310,9 +311,6 @@ fl = nullptr; } - for (i = 0; arg[i] != nullptr; ++i) - g_free(arg[i]); - return fl; } @@ -379,24 +377,14 @@ Reload(c); } -static Page * +static std::unique_ptr<Page> screen_search_init(ScreenManager &_screen, WINDOW *w, Size size) { - return new SearchPage(_screen, w, size); + return std::make_unique<SearchPage>(_screen, w, size); } void -SearchPage::OnOpen(gcc_unused struct mpdclient &c) -{ - // if( pattern==nullptr ) - // search_new(screen, c); - // else - screen_status_printf(_("Press %s for a new search"), - get_key_names(CMD_SCREEN_SEARCH, false)); -} - -void -SearchPage::Paint() const +SearchPage::Paint() const noexcept { if (filelist) { FileListPage::Paint(); @@ -406,25 +394,24 @@ } const char * -SearchPage::GetTitle(char *str, size_t size) const +SearchPage::GetTitle(char *str, size_t size) const noexcept { if (advanced_search_mode && !pattern.empty()) - snprintf(str, size, _("Search: %s"), pattern.c_str()); + snprintf(str, size, "%s '%s'", _("Search"), pattern.c_str()); else if (!pattern.empty()) snprintf(str, size, - _("Search: Results for %s [%s]"), + "%s '%s' [%s]", + _("Search"), pattern.c_str(), - _(mode[options.search_mode].label)); + gettext(mode[options.search_mode].label)); else - snprintf(str, size, _("Search: Press %s for a new search [%s]"), - get_key_names(CMD_SCREEN_SEARCH, false), - _(mode[options.search_mode].label)); + return _("Search"); return str; } void -SearchPage::Update(struct mpdclient &c, unsigned events) +SearchPage::Update(struct mpdclient &c, unsigned events) noexcept { if (filelist != nullptr && events & MPD_IDLE_QUEUE) { screen_browser_sync_highlights(filelist, &c.playlist); @@ -433,25 +420,34 @@ } bool -SearchPage::OnCommand(struct mpdclient &c, command_t cmd) +SearchPage::OnCommand(struct mpdclient &c, Command cmd) { switch (cmd) { - case CMD_SEARCH_MODE: + case Command::SEARCH_MODE: options.search_mode++; if (mode[options.search_mode].label == nullptr) options.search_mode = 0; screen_status_printf(_("Search mode: %s"), - _(mode[options.search_mode].label)); - /* fall through */ - case CMD_SCREEN_UPDATE: + gettext(mode[options.search_mode].label)); + + if (pattern.empty()) + /* show the new mode in the help text */ + SetDirty(); + else if (!advanced_search_mode) + /* reload only if the new search mode is going + to be considered */ + Reload(c); + return true; + + case Command::SCREEN_UPDATE: Reload(c); return true; - case CMD_SCREEN_SEARCH: + case Command::SCREEN_SEARCH: Start(c); return true; - case CMD_CLEAR: + case Command::CLEAR: Clear(true); lw.Reset(); return true; @@ -466,7 +462,9 @@ return false; } -const struct screen_functions screen_search = { +const PageMeta screen_search = { "search", + N_("Search"), + Command::SCREEN_SEARCH, screen_search_init, };
View file
ncmpc-0.30.tar.xz/src/SearchPage.hxx -> ncmpc-0.32.tar.xz/src/SearchPage.hxx
Changed
@@ -23,7 +23,8 @@ #include "config.h" #ifdef ENABLE_SEARCH_SCREEN -extern const struct screen_functions screen_search; +struct PageMeta; +extern const PageMeta screen_search; #endif #endif
View file
ncmpc-0.30.tar.xz/src/SongPage.cxx -> ncmpc-0.32.tar.xz/src/SongPage.cxx
Changed
@@ -18,25 +18,26 @@ */ #include "SongPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "ListPage.hxx" #include "ListText.hxx" #include "TextListRenderer.hxx" #include "FileBrowserPage.hxx" #include "LyricsPage.hxx" #include "screen_find.hxx" +#include "Command.hxx" #include "i18n.h" #include "screen.hxx" #include "charset.hxx" #include "time_format.hxx" #include "mpdclient.hxx" +#include "util/LocaleString.hxx" #include "util/Macros.hxx" #include "util/StringStrip.hxx" #include <mpd/client.h> -#include <glib/gprintf.h> - +#include <algorithm> #include <vector> #include <string> @@ -57,7 +58,7 @@ const char *label; }; -static const struct tag_label tag_labels[] = { +static constexpr struct tag_label tag_labels[] = { { MPD_TAG_ARTIST, N_("Artist") }, { MPD_TAG_TITLE, N_("Title") }, { MPD_TAG_ALBUM, N_("Album") }, @@ -88,7 +89,7 @@ STATS_DBPLAYTIME, }; -static const char *const stats_labels[] = { +static constexpr const char *stats_labels[] = { N_("Number of artists"), N_("Number of albums"), N_("Number of songs"), @@ -111,50 +112,52 @@ std::vector<std::string> lines; public: - SongPage(ScreenManager &_screen, WINDOW *w, Size size) + SongPage(ScreenManager &_screen, WINDOW *w, Size size) noexcept :ListPage(w, size), screen(_screen) { lw.hide_cursor = true; } - ~SongPage() override { + ~SongPage() noexcept override { Clear(); } private: - void Clear(); + void Clear() noexcept; /** * Appends a line with a fixed width for the label column. * Handles nullptr strings gracefully. */ void AppendLine(const char *label, const char *value, - unsigned label_col); + unsigned label_col) noexcept; - void AppendTag(const struct mpd_song *song, enum mpd_tag_type tag); - void AddSong(const struct mpd_song *song); - void AppendStatsLine(enum stats_label label, const char *value); - bool AddStats(struct mpd_connection *connection); + void AppendTag(const struct mpd_song *song, + enum mpd_tag_type tag) noexcept; + void AddSong(const struct mpd_song *song) noexcept; + void AppendStatsLine(enum stats_label label, + const char *value) noexcept; + bool AddStats(struct mpd_connection *connection) noexcept; public: /* virtual methods from class Page */ - void OnClose() override { + void OnClose() noexcept override { Clear(); } - void Paint() const override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Paint() const noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; private: /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; void -SongPage::Clear() +SongPage::Clear() noexcept { lines.clear(); @@ -169,116 +172,116 @@ } const char * -SongPage::GetListItemText(char *, size_t, unsigned idx) const +SongPage::GetListItemText(char *, size_t, unsigned idx) const noexcept { return lines[idx].c_str(); } -static Page * -screen_song_init(ScreenManager &_screen, WINDOW *w, Size size) +static std::unique_ptr<Page> +screen_song_init(ScreenManager &_screen, WINDOW *w, Size size) noexcept { for (unsigned i = 0; tag_labels[i].label != nullptr; ++i) { - unsigned width = utf8_width(_(tag_labels[i].label)); + unsigned width = StringWidthMB(gettext(tag_labels[i].label)); if (width > max_tag_label_width) max_tag_label_width = width; } for (unsigned i = 0; i < ARRAY_SIZE(stats_labels); ++i) { if (stats_labels[i] != nullptr) { - unsigned width = utf8_width(_(stats_labels[i])); + unsigned width = StringWidthMB(gettext(stats_labels[i])); if (width > max_stats_label_width) max_stats_label_width = width; } } - return new SongPage(_screen, w, size); + return std::make_unique<SongPage>(_screen, w, size); } const char * -SongPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const +SongPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const noexcept { return _("Song viewer"); } void -SongPage::Paint() const +SongPage::Paint() const noexcept { lw.Paint(TextListRenderer(*this)); } void -SongPage::AppendLine(const char *label, const char *value, unsigned label_col) +SongPage::AppendLine(const char *label, const char *value_utf8, + unsigned label_col) noexcept { - const unsigned label_width = locale_width(label) + 2; - assert(label != nullptr); - assert(value != nullptr); - assert(g_utf8_validate(value, -1, nullptr)); + assert(value_utf8 != nullptr); + + static constexpr size_t BUFFER_SIZE = 1024; + if (label_col >= BUFFER_SIZE - 16) + return; /* +2 for ': ' */ label_col += 2; const int value_col = lw.size.width - label_col; /* calculate the number of required linebreaks */ - const gchar *value_iter = value; - const size_t label_length = strlen(label); - const size_t label_size = label_length + label_col; + const Utf8ToLocale value_locale(value_utf8); + const char *value = value_locale.c_str(); + + const char *const value_end = value + strlen(value); + const char *value_iter = value; while (*value_iter != 0) { - char *entry = (char *)g_malloc(label_size), *entry_iter; + char buffer[BUFFER_SIZE]; + const char *const buffer_end = buffer + BUFFER_SIZE; + + char *p = buffer; + size_t n_space = label_col; if (value_iter == value) { - memcpy(entry, label, label_length); - entry_iter = entry + label_length; - *entry_iter++ = ':'; + const size_t label_length = std::min(strlen(label), + BUFFER_SIZE - 16); + p = std::copy_n(label, label_length, p); + *p++ = ':'; /* fill the label column with whitespaces */ - size_t n_space = label_col - label_width + 1; - memset(entry_iter, ' ', n_space); - entry_iter += n_space; - } - else { - /* fill the label column with whitespaces */ - memset(entry, ' ', label_col); - entry_iter = entry + label_col; + const unsigned label_width = StringWidthMB(label); + n_space -= label_width + 1; } + + p = std::fill_n(p, n_space, ' '); + /* skip whitespaces */ value_iter = StripLeft(value_iter); - char *p = g_strdup(value_iter); - unsigned width = utf8_cut_width(p, value_col); - if (width == 0) { + const char *value_iter_end = AtWidthMB(value_iter, + value_end - value_iter, + value_col); + if (value_iter_end == value_iter) /* not enough room for anything - bail out */ - g_free(entry); - g_free(p); break; - } - - *entry_iter = 0; - value_iter += strlen(p); - p = replace_utf8_to_locale(p); - char *q = g_strconcat(entry, p, nullptr); - g_free(entry); - g_free(p); + p += snprintf(p, buffer_end - p, "%.*s", + int(value_iter_end - value_iter), value_iter); + value_iter = value_iter_end; - lines.emplace_back(q); - g_free(q); + lines.emplace_back(buffer, p); } } gcc_pure static const char * -get_tag_label(unsigned tag) +get_tag_label(unsigned tag) noexcept { for (unsigned i = 0; tag_labels[i].label != nullptr; ++i) if (tag_labels[i].tag_type == tag) - return _(tag_labels[i].label); + return gettext(tag_labels[i].label); assert(tag < MPD_TAG_COUNT); return mpd_tag_name((enum mpd_tag_type)tag); } void -SongPage::AppendTag(const struct mpd_song *song, enum mpd_tag_type tag) +SongPage::AppendTag(const struct mpd_song *song, + enum mpd_tag_type tag) noexcept { const char *label = get_tag_label(tag); unsigned i = 0; @@ -292,7 +295,7 @@ } void -SongPage::AddSong(const struct mpd_song *song) +SongPage::AddSong(const struct mpd_song *song) noexcept { assert(song != nullptr); @@ -352,14 +355,13 @@ } void -SongPage::AppendStatsLine(enum stats_label label, const char *value) +SongPage::AppendStatsLine(enum stats_label label, const char *value) noexcept { - AppendLine(_(stats_labels[label]), value, - max_stats_label_width); + AppendLine(gettext(stats_labels[label]), value, max_stats_label_width); } bool -SongPage::AddStats(struct mpd_connection *connection) +SongPage::AddStats(struct mpd_connection *connection) noexcept { struct mpd_stats *mpd_stats = mpd_run_stats(connection); if (mpd_stats == nullptr) @@ -400,7 +402,7 @@ static void audio_format_to_string(char *buffer, size_t size, - const struct mpd_audio_format *format) + const struct mpd_audio_format *format) noexcept { #if LIBMPDCLIENT_CHECK_VERSION(2,10,0) if (format->bits == MPD_SAMPLE_FORMAT_FLOAT) { @@ -434,7 +436,7 @@ } void -SongPage::Update(struct mpdclient &c, unsigned) +SongPage::Update(struct mpdclient &c, unsigned) noexcept { lines.clear(); @@ -445,21 +447,22 @@ next_song = nullptr; } + const auto *const playing_song = c.GetPlayingSong(); + if (selected_song != nullptr && - (c.song == nullptr || + (playing_song == nullptr || strcmp(mpd_song_get_uri(selected_song), - mpd_song_get_uri(c.song)) != 0 || - !c.playing_or_paused)) { + mpd_song_get_uri(playing_song)) != 0)) { lines.emplace_back(_("Selected song")); AddSong(selected_song); lines.emplace_back(std::string()); } - if (c.song != nullptr && c.playing_or_paused) { + if (playing_song) { if (played_song != nullptr) mpd_song_free(played_song); - played_song = mpd_song_dup(c.song); + played_song = mpd_song_dup(playing_song); lines.emplace_back(_("Currently playing song")); AddSong(played_song); @@ -493,13 +496,13 @@ } bool -SongPage::OnCommand(struct mpdclient &c, command_t cmd) +SongPage::OnCommand(struct mpdclient &c, Command cmd) { if (ListPage::OnCommand(c, cmd)) return true; switch(cmd) { - case CMD_LOCATE: + case Command::LOCATE: if (selected_song != nullptr) { screen_file_goto_song(screen, c, *selected_song); return true; @@ -512,7 +515,7 @@ return false; #ifdef ENABLE_LYRICS_SCREEN - case CMD_SCREEN_LYRICS: + case Command::SCREEN_LYRICS: if (selected_song != nullptr) { screen_lyrics_switch(screen, c, *selected_song, false); return true; @@ -525,7 +528,7 @@ #endif - case CMD_SCREEN_SWAP: + case Command::SCREEN_SWAP: if (selected_song != nullptr) screen.Swap(c, selected_song); else @@ -537,7 +540,7 @@ break; } - if (screen_find(screen, &lw, cmd, *this)) { + if (screen_find(screen, lw, cmd, *this)) { /* center the row */ lw.Center(lw.selected); SetDirty(); @@ -547,14 +550,16 @@ return false; } -const struct screen_functions screen_song = { +const PageMeta screen_song = { "song", + N_("Song"), + Command::SCREEN_SONG, screen_song_init, }; void screen_song_switch(ScreenManager &_screen, struct mpdclient &c, - const struct mpd_song &song) + const struct mpd_song &song) noexcept { next_song = mpd_song_dup(&song); _screen.Switch(screen_song, c);
View file
ncmpc-0.30.tar.xz/src/SongPage.hxx -> ncmpc-0.32.tar.xz/src/SongPage.hxx
Changed
@@ -26,13 +26,14 @@ struct mpdclient; struct mpd_song; +struct PageMeta; class ScreenManager; -extern const struct screen_functions screen_song; +extern const PageMeta screen_song; void screen_song_switch(ScreenManager &_screen, struct mpdclient &c, - const struct mpd_song &song); + const struct mpd_song &song) noexcept; #endif /* ENABLE_SONG_SCREEN */
View file
ncmpc-0.30.tar.xz/src/StatusBar.cxx -> ncmpc-0.32.tar.xz/src/StatusBar.cxx
Changed
@@ -18,37 +18,37 @@ */ #include "StatusBar.hxx" -#include "Event.hxx" -#include "options.hxx" -#include "colors.hxx" +#include "Options.hxx" +#include "Styles.hxx" #include "i18n.h" -#include "charset.hxx" #include "strfsong.hxx" -#include "player_command.hxx" +#include "DelayedSeek.hxx" #include "time_format.hxx" +#include "util/LocaleString.hxx" #include <mpd/client.h> #include <assert.h> #include <string.h> -StatusBar::StatusBar(Point p, unsigned width) - :window(p, {width, 1u}) +StatusBar::StatusBar(boost::asio::io_service &io_service, + Point p, unsigned width) noexcept + :window(p, {width, 1u}), + message_timer(io_service) #ifndef NCMPC_MINI - , hscroll(window.w, options.scroll_sep.c_str()) + , hscroll(io_service, window.w, options.scroll_sep.c_str()) #endif { - leaveok(window.w, false); keypad(window.w, true); #ifdef ENABLE_COLORS if (options.enable_colors) - wbkgd(window.w, COLOR_PAIR(COLOR_STATUS)); + wbkgd(window.w, COLOR_PAIR(Style::STATUS)); #endif } -StatusBar::~StatusBar() +StatusBar::~StatusBar() noexcept { #ifndef NCMPC_MINI if (options.scroll) @@ -57,24 +57,20 @@ } void -StatusBar::ClearMessage() +StatusBar::ClearMessage() noexcept { - if (message_source_id != 0) { - g_source_remove(message_source_id); - message_source_id = 0; - } + message_timer.cancel(); + message.clear(); - WINDOW *w = window.w; - - wmove(w, 0, 0); - wclrtoeol(w); - wrefresh(w); + Paint(); + doupdate(); } #ifndef NCMPC_MINI static void -format_bitrate(char *p, size_t max_length, const struct mpd_status *status) +format_bitrate(char *p, size_t max_length, + const struct mpd_status *status) noexcept { if (options.visible_bitrate && mpd_status_get_kbit_rate(status) > 0) snprintf(p, max_length, @@ -88,7 +84,8 @@ void StatusBar::Update(const struct mpd_status *status, - const struct mpd_song *song) + const struct mpd_song *song, + const DelayedSeek &seek) noexcept { const auto state = status == nullptr ? MPD_STATE_UNKNOWN @@ -110,13 +107,12 @@ } left_width = left_text != nullptr - ? utf8_width(left_text) + 1 + ? StringWidthMB(left_text) + 1 : 0; if (state == MPD_STATE_PLAY || state == MPD_STATE_PAUSE) { - unsigned elapsed_time = seek_id >= 0 && - seek_id == mpd_status_get_song_id(status) - ? (unsigned)seek_target_time + unsigned elapsed_time = seek.IsSeeking(mpd_status_get_song_id(status)) + ? seek.GetTime() : mpd_status_get_elapsed_time(status); const unsigned total_time = mpd_status_get_total_time(status); @@ -158,7 +154,7 @@ #endif } - right_width = utf8_width(right_text); + right_width = StringWidthMB(right_text); #ifndef NCMPC_MINI int width = COLS - left_width - right_width; @@ -174,10 +170,10 @@ /* scroll if the song name is to long */ #ifndef NCMPC_MINI - center_width = utf8_width(center_text.c_str()); - if (options.scroll && - utf8_width(center_text.c_str()) > (unsigned)width) { - hscroll.Set(left_width, 0, width, center_text.c_str()); + center_width = StringWidthMB(center_text.c_str()); + if (options.scroll && center_width > (unsigned)width) { + hscroll.Set(left_width, 0, width, center_text.c_str(), + Style::STATUS); } else { if (options.scroll) hscroll.Clear(); @@ -196,16 +192,21 @@ } void -StatusBar::Paint() const +StatusBar::Paint() const noexcept { WINDOW *w = window.w; - if (message_source_id != 0) - return; - wmove(w, 0, 0); wclrtoeol(w); - colors_use(w, COLOR_STATUS_BOLD); + + if (!message.empty()) { + SelectStyle(w, Style::STATUS_ALERT); + waddstr(w, message.c_str()); + wnoutrefresh(w); + return; + } + + SelectStyle(w, Style::STATUS_BOLD); if (left_text != nullptr) /* display state */ @@ -214,14 +215,14 @@ if (right_width > 0) { /* display time string */ int x = window.size.width - right_width; - colors_use(w, COLOR_STATUS_TIME); + SelectStyle(w, Style::STATUS_TIME); mvwaddstr(w, 0, x, right_text); } if (!center_text.empty()) { /* display song name */ - colors_use(w, COLOR_STATUS); + SelectStyle(w, Style::STATUS); /* scroll if the song name is to long */ #ifndef NCMPC_MINI @@ -234,47 +235,34 @@ /* display time string */ int x = window.size.width - right_width; - colors_use(w, COLOR_STATUS_TIME); + SelectStyle(w, Style::STATUS_TIME); mvwaddstr(w, 0, x, right_text); wnoutrefresh(w); } void -StatusBar::OnResize(Point p, unsigned width) +StatusBar::OnResize(Point p, unsigned width) noexcept { window.Resize({width, 1u}); window.Move(p); } -inline bool -StatusBar::OnClearMessageTimer() -{ - assert(message_source_id != 0); - message_source_id = 0; - ClearMessage(); - return false; -} - void -StatusBar::SetMessage(const char *msg) +StatusBar::SetMessage(const char *msg) noexcept { - WINDOW *w = window.w; - #ifndef NCMPC_MINI if (options.scroll) hscroll.Clear(); #endif - wmove(w, 0, 0); - wclrtoeol(w); - colors_use(w, COLOR_STATUS_ALERT); - waddstr(w, msg); - wnoutrefresh(w); + message = msg; + Paint(); + doupdate(); - if (message_source_id != 0) - g_source_remove(message_source_id); - message_source_id = ScheduleTimeout<StatusBar, - &StatusBar::OnClearMessageTimer>(options.status_message_time, - *this); + boost::system::error_code error; + message_timer.expires_from_now(options.status_message_time, + error); + message_timer.async_wait(std::bind(&StatusBar::OnMessageTimer, this, + std::placeholders::_1)); }
View file
ncmpc-0.30.tar.xz/src/StatusBar.hxx -> ncmpc-0.32.tar.xz/src/StatusBar.hxx
Changed
@@ -20,6 +20,7 @@ #ifndef NCMPC_STATUS_BAR_HXX #define NCMPC_STATUS_BAR_HXX +#include "config.h" #include "Window.hxx" #ifndef NCMPC_MINI @@ -28,15 +29,19 @@ #include <mpd/status.h> +#include <boost/asio/steady_timer.hpp> + #include <string> struct mpd_status; struct mpd_song; +class DelayedSeek; class StatusBar { Window window; - unsigned message_source_id = 0; + std::string message; + boost::asio::steady_timer message_timer; #ifndef NCMPC_MINI class hscroll hscroll; @@ -53,23 +58,28 @@ #endif public: - StatusBar(Point p, unsigned width); - ~StatusBar(); + StatusBar(boost::asio::io_service &io_service, + Point p, unsigned width) noexcept; + ~StatusBar() noexcept; - Window &GetWindow() { + Window &GetWindow() noexcept { return window; } - void SetMessage(const char *msg); - void ClearMessage(); + void SetMessage(const char *msg) noexcept; + void ClearMessage() noexcept; - void OnResize(Point p, unsigned width); + void OnResize(Point p, unsigned width) noexcept; void Update(const struct mpd_status *status, - const struct mpd_song *song); - void Paint() const; + const struct mpd_song *song, + const DelayedSeek &seek) noexcept; + void Paint() const noexcept; private: - bool OnClearMessageTimer(); + void OnMessageTimer(const boost::system::error_code &error) noexcept { + if (!error) + ClearMessage(); + } }; #endif
View file
ncmpc-0.32.tar.xz/src/Styles.cxx
Added
@@ -0,0 +1,398 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "Styles.hxx" +#include "BasicColors.hxx" +#include "CustomColors.hxx" +#include "i18n.h" +#include "util/StringStrip.hxx" + +#ifdef ENABLE_COLORS +#include "Options.hxx" +#endif + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/** + * Use the terminal's default color. + * + * @see init_pair(3ncurses) + */ +static constexpr short COLOR_NONE = -1; + +/** + * A non-standad magic value which means "inherit this color from the + * parent style". + */ +static constexpr short COLOR_INHERIT = -2; + +/** + * A magic value for certain parser functions to indicate that the + * parser has failed to recognize the string. + */ +static constexpr short COLOR_ERROR = -3; + +/** + * A non-standad magic value which means "inherit attributes from the + * parent style". + */ +static constexpr attr_t A_INHERIT = ~attr_t(0); + +struct StyleData { + /** + * A name which can be used to address this style from the + * configuration file. + */ + const char *const name; + +#ifdef ENABLE_COLORS + /** + * Inherit unspecified values from this style. The special + * value #Style::DEFAULT means "don't inherit". + */ + const Style inherit; + + /** + * The foreground (text) color in "color" mode. + */ + short fg_color; + + /** + * The background (fill) color in "color" mode. + */ + short bg_color; + + /** + * The attributes in "color" mode. + */ + attr_t attr; +#endif + + /** + * The attributes in "mono" mode. + */ + const attr_t mono; + +#ifndef ENABLE_COLORS + constexpr StyleData(const char *_name, Style, + short, short, attr_t, attr_t _mono) + :name(_name), mono(_mono) {} +#endif +}; + +#ifndef ENABLE_COLORS +constexpr +#endif +static StyleData styles[size_t(Style::END)] = { + /* color pair = field name, color, mono */ + { + nullptr, Style::DEFAULT, + COLOR_NONE, COLOR_NONE, A_NORMAL, + A_NORMAL, + }, + { + "title", Style::BACKGROUND, + COLOR_WHITE, COLOR_BLUE, A_NORMAL, + A_NORMAL, + }, + { + "title-bold", Style::TITLE, + COLOR_YELLOW, COLOR_INHERIT, A_BOLD, + A_BOLD, + }, + { + "line", Style::TITLE, + COLOR_WHITE, COLOR_INHERIT, A_NORMAL, + A_NORMAL, + }, + { + "line-bold", Style::LINE, + COLOR_INHERIT, COLOR_INHERIT, A_BOLD, + A_BOLD, + }, + { + "line-flags", Style::LINE, + COLOR_GREEN, COLOR_INHERIT, A_BOLD, + A_NORMAL, + }, + { + "list", Style::BACKGROUND, + COLOR_WHITE, COLOR_INHERIT, A_NORMAL, + A_NORMAL, + }, + { + "list-bold", Style::LIST, + COLOR_INHERIT, COLOR_INHERIT, A_BOLD, + A_BOLD, + }, + { + "progressbar", Style::STATUS, + COLOR_WHITE, COLOR_INHERIT, A_BOLD, + A_NORMAL, + }, + { + "progressbar-background", Style::PROGRESSBAR, + COLOR_BLACK, COLOR_INHERIT, A_BOLD, + A_NORMAL, + }, + { + "status-song", Style::BACKGROUND, + COLOR_WHITE, COLOR_BLUE, A_NORMAL, + A_NORMAL, + }, + { + "status-state", Style::STATUS, + COLOR_GREEN, COLOR_INHERIT, A_BOLD, + A_BOLD, + }, + { + "status-time", Style::STATUS_BOLD, + COLOR_INHERIT, COLOR_INHERIT, A_NORMAL, + A_NORMAL, + }, + { + "alert", Style::STATUS, + COLOR_RED, COLOR_INHERIT, A_BOLD, + A_BOLD, + }, + { + "browser-directory", Style::LIST, + COLOR_YELLOW, COLOR_INHERIT, A_INHERIT, + A_NORMAL, + }, + { + "browser-playlist", Style::LIST, + COLOR_RED, COLOR_INHERIT, A_INHERIT, + A_NORMAL, + }, + { + "background", Style::DEFAULT, + COLOR_NONE, COLOR_BLACK, A_NORMAL, + A_NORMAL, + }, +}; + +static constexpr auto & +GetStyle(Style style) +{ + return styles[size_t(style)]; +} + +#ifdef ENABLE_COLORS + +gcc_pure +static Style +StyleByName(const char *name) +{ + for (size_t i = 1; i < size_t(Style::END); ++i) + if (!strcasecmp(styles[i].name, name)) + return Style(i); + + return Style::END; +} + +static void +colors_update_pair(Style style) +{ + auto &data = GetStyle(style); + + int fg = data.fg_color; + for (Style i = style; fg == COLOR_INHERIT;) { + i = GetStyle(i).inherit; + assert(i != Style::DEFAULT); + fg = GetStyle(i).fg_color; + } + + int bg = data.bg_color; + for (Style i = style; bg == COLOR_INHERIT;) { + i = GetStyle(i).inherit; + assert(i != Style::DEFAULT); + bg = GetStyle(i).bg_color; + } + + /* apply A_INHERIT (modifies the "attr" value, which is + irreversible) */ + for (Style i = style; data.attr == A_INHERIT;) { + i = GetStyle(i).inherit; + assert(i != Style::DEFAULT); + data.attr = GetStyle(i).attr; + } + + init_pair(short(style), fg, bg); +} + +gcc_pure +static short +ParseBackgroundColor(const char *s) +{ + short color = ParseColorNameOrNumber(s); + if (color >= 0) + return color; + + if (!strcasecmp(s, "none")) + return COLOR_NONE; + + return COLOR_ERROR; +} + +static bool +ParseStyle(StyleData &d, const char *str) +{ + std::string copy(str); + + for (char *cur = strtok(©.front(), ","); cur != nullptr; + cur = strtok(nullptr, ",")) { + cur = Strip(cur); + char *slash = strchr(cur, '/'); + if (slash != nullptr) { + const char *name = slash + 1; + short color = ParseBackgroundColor(name); + if (color < 0) { + fprintf(stderr, "%s: %s\n", + _("Unknown color"), name); + return false; + } + + d.bg_color = color; + + *slash = 0; + + if (*cur == 0) + continue; + } + + /* Legacy colors (brightblue,etc) */ + if (!strncasecmp(cur, "bright", 6)) { + d.attr |= A_BOLD; + cur += 6; + } + + /* Colors */ + short b = ParseColorNameOrNumber(cur); + if (b >= 0) { + d.fg_color = b; + continue; + } + + if (!strcasecmp(cur, "none")) + d.fg_color = COLOR_NONE; + else if (!strcasecmp(cur, "grey") || + !strcasecmp(cur, "gray")) { + d.fg_color = COLOR_BLACK; + d.attr |= A_BOLD; + } + + /* Attributes */ + else if (!strcasecmp(cur, "standout")) + d.attr |= A_STANDOUT; + else if (!strcasecmp(cur, "underline")) + d.attr |= A_UNDERLINE; + else if (!strcasecmp(cur, "reverse")) + d.attr |= A_REVERSE; + else if (!strcasecmp(cur, "blink")) + d.attr |= A_BLINK; + else if (!strcasecmp(cur, "dim")) + d.attr |= A_DIM; + else if (!strcasecmp(cur, "bold")) + d.attr |= A_BOLD; + else { + fprintf(stderr, "%s: %s\n", + _("Unknown color"), str); + return false; + } + + } + + return true; +} + +bool +ModifyStyle(const char *name, const char *value) +{ + const auto style = StyleByName(name); + if (style == Style::END) { + fprintf(stderr, "%s: %s", + _("Unknown color field"), name); + return false; + } + + auto &data = GetStyle(style); + + if (style == Style::BACKGROUND) { + /* "background" is a special style which all other + styles inherit their background color from; if the + user configures a color, it will be the background + color, but no attributes */ + short color = ParseBackgroundColor(value); + if (color != COLOR_ERROR) { + data.bg_color = color; + return true; + } else { + fprintf(stderr, "%s: %s\n", + _("Unknown color"), value); + return false; + } + } + + return ParseStyle(data, value); +} + +void +ApplyStyles() +{ + if (has_colors()) { + /* initialize color support */ + start_color(); + use_default_colors(); + /* define any custom colors defined in the configuration file */ + ApplyCustomColors(); + + if (options.enable_colors) { + for (size_t i = 1; i < size_t(Style::END); ++i) + /* update the color pairs */ + colors_update_pair(Style(i)); + } + } else if (options.enable_colors) { + fprintf(stderr, "%s\n", + _("Terminal lacks color capabilities")); + options.enable_colors = false; + } +} +#endif + +void +SelectStyle(WINDOW *w, Style style) +{ + const auto &data = GetStyle(style); + +#ifdef ENABLE_COLORS + if (options.enable_colors) { + /* color mode */ + wattr_set(w, data.attr, short(style), nullptr); + } else { +#endif + /* mono mode */ + (void)wattrset(w, data.mono); +#ifdef ENABLE_COLORS + } +#endif +}
View file
ncmpc-0.32.tar.xz/src/Styles.hxx
Added
@@ -0,0 +1,65 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef STYLES_HXX +#define STYLES_HXX + +#include "config.h" + +#include <curses.h> + +enum class Style : unsigned { + /** + * The ncurses default style. + * + * @see assume_default_colors(3ncurses) + */ + DEFAULT, + + TITLE, + TITLE_BOLD, + LINE, + LINE_BOLD, + LINE_FLAGS, + LIST, + LIST_BOLD, + PROGRESSBAR, + PROGRESSBAR_BACKGROUND, + STATUS, + STATUS_BOLD, + STATUS_TIME, + STATUS_ALERT, + DIRECTORY, + PLAYLIST, + BACKGROUND, + END +}; + +#ifdef ENABLE_COLORS +bool +ModifyStyle(const char *name, const char *value); + +void +ApplyStyles(); +#endif + +void +SelectStyle(WINDOW *w, Style style); + +#endif
View file
ncmpc-0.32.tar.xz/src/TabBar.cxx
Added
@@ -0,0 +1,72 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "TabBar.hxx" +#include "PageMeta.hxx" +#include "screen_list.hxx" +#include "Styles.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" +#include "i18n.h" + +static void +PaintPageTab(WINDOW *w, Command cmd, const char *label, bool selected) +{ + SelectStyle(w, selected ? Style::TITLE : Style::TITLE_BOLD); + if (selected) + wattron(w, A_REVERSE); + + waddch(w, ' '); + + const char *key = GetGlobalKeyBindings().GetFirstKeyName(cmd); + if (key != nullptr) + waddstr(w, key); + + SelectStyle(w, Style::TITLE); + if (selected) + wattron(w, A_REVERSE); + + waddch(w, ':'); + waddstr(w, label); + waddch(w, ' '); + + if (selected) + wattroff(w, A_REVERSE); +} + +void +PaintTabBar(WINDOW *w, const PageMeta ¤t_page_meta, + const char *current_page_title) +{ + for (unsigned i = 0;; ++i) { + const auto *page = GetPageMeta(i); + if (page == nullptr) + break; + + const char *title = nullptr; + if (page == ¤t_page_meta) + title = current_page_title; + + if (title == nullptr) + title = gettext(page->title); + + PaintPageTab(w, page->command, title, + page == ¤t_page_meta); + } +}
View file
ncmpc-0.32.tar.xz/src/TabBar.hxx
Added
@@ -0,0 +1,31 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef NCMPC_TAB_BAR_HXX +#define NCMPC_TAB_BAR_HXX + +#include <curses.h> + +struct PageMeta; + +void +PaintTabBar(WINDOW *w, const PageMeta ¤t_page_meta, + const char *current_page_title); + +#endif
View file
ncmpc-0.30.tar.xz/src/TextListRenderer.cxx -> ncmpc-0.32.tar.xz/src/TextListRenderer.cxx
Changed
@@ -26,15 +26,15 @@ static void list_window_paint_row(WINDOW *w, unsigned width, bool selected, - const char *text) + const char *text) noexcept { - row_paint_text(w, width, COLOR_LIST, + row_paint_text(w, width, Style::LIST, selected, text); } void TextListRenderer::PaintListItem(WINDOW *w, unsigned i, unsigned, - unsigned width, bool selected) const + unsigned width, bool selected) const noexcept { char buffer[1024]; const char *label = text.GetListItemText(buffer, sizeof(buffer), i);
View file
ncmpc-0.30.tar.xz/src/TextListRenderer.hxx -> ncmpc-0.32.tar.xz/src/TextListRenderer.hxx
Changed
@@ -29,12 +29,12 @@ const ListText &text; public: - explicit TextListRenderer(const ListText &_text) + explicit TextListRenderer(const ListText &_text) noexcept :text(_text) {} /* virtual methods from class ListRenderer */ void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width, - bool selected) const override; + bool selected) const noexcept override; }; #endif
View file
ncmpc-0.30.tar.xz/src/TextPage.cxx -> ncmpc-0.32.tar.xz/src/TextPage.cxx
Changed
@@ -22,15 +22,13 @@ #include "screen_find.hxx" #include "charset.hxx" -#include <glib.h> - #include <algorithm> #include <assert.h> #include <string.h> void -TextPage::Clear() +TextPage::Clear() noexcept { lw.Reset(); lines.clear(); @@ -38,7 +36,7 @@ } void -TextPage::Append(const char *str) +TextPage::Append(const char *str) noexcept { assert(str != nullptr); @@ -72,28 +70,27 @@ } const char * -TextPage::GetListItemText(char *buffer, size_t size, unsigned idx) const +TextPage::GetListItemText(char *buffer, size_t size, unsigned idx) const noexcept { assert(idx < lines.size()); - g_strlcpy(buffer, Utf8ToLocale(lines[idx].c_str()).c_str(), size); - return buffer; + return utf8_to_locale(lines[idx].c_str(), buffer, size); } void -TextPage::Paint() const +TextPage::Paint() const noexcept { lw.Paint(TextListRenderer(*this)); } bool -TextPage::OnCommand(struct mpdclient &c, command_t cmd) +TextPage::OnCommand(struct mpdclient &c, Command cmd) { if (ListPage::OnCommand(c, cmd)) return true; lw.SetCursor(lw.start); - if (screen_find(screen, &lw, cmd, *this)) { + if (screen_find(screen, lw, cmd, *this)) { /* center the row */ lw.Center(lw.selected); SetDirty();
View file
ncmpc-0.30.tar.xz/src/TextPage.hxx -> ncmpc-0.32.tar.xz/src/TextPage.hxx
Changed
@@ -33,25 +33,34 @@ protected: ScreenManager &screen; + /** + * Strings are UTF-8. + */ std::vector<std::string> lines; public: TextPage(ScreenManager &_screen, - WINDOW *w, Size size) + WINDOW *w, Size size) noexcept :ListPage(w, size), screen(_screen) { lw.hide_cursor = true; } protected: - bool IsEmpty() const { + bool IsEmpty() const noexcept { return lines.empty(); } - void Clear(); + void Clear() noexcept; - void Append(const char *str); + /** + * @param str a UTF-8 string + */ + void Append(const char *str) noexcept; - void Set(const char *str) { + /** + * @param str a UTF-8 string + */ + void Set(const char *str) noexcept { Clear(); Append(str); } @@ -59,20 +68,20 @@ /** * Repaint and update the screen. */ - void Repaint() { + void Repaint() noexcept { Paint(); wrefresh(lw.w); } public: /* virtual methods from class Page */ - void Paint() const override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void Paint() const noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; private: /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; #endif
View file
ncmpc-0.30.tar.xz/src/TitleBar.cxx -> ncmpc-0.32.tar.xz/src/TitleBar.cxx
Changed
@@ -18,19 +18,16 @@ */ #include "TitleBar.hxx" -#include "colors.hxx" -#include "options.hxx" -#include "command.hxx" +#include "TabBar.hxx" +#include "Styles.hxx" +#include "Options.hxx" #include "i18n.h" -#include "charset.hxx" +#include "util/LocaleString.hxx" #include "config.h" #include <mpd/client.h> -#include <glib.h> - -#include <assert.h> #include <string.h> TitleBar::TitleBar(Point p, unsigned width) @@ -41,24 +38,10 @@ #ifdef ENABLE_COLORS if (options.enable_colors) - wbkgd(window.w, COLOR_PAIR(COLOR_TITLE)); + wbkgd(window.w, COLOR_PAIR(Style::TITLE)); #endif } -#ifndef NCMPC_MINI -static void -print_hotkey(WINDOW *w, command_t cmd, const char *label) -{ - colors_use(w, COLOR_TITLE_BOLD); - waddstr(w, get_key_names(cmd, false)); - colors_use(w, COLOR_TITLE); - waddch(w, ':'); - waddstr(w, label); - waddch(w, ' '); - waddch(w, ' '); -} -#endif - static inline int get_volume(const struct mpd_status *status) { @@ -91,40 +74,25 @@ } void -TitleBar::Paint(const char *title) const +TitleBar::Paint(const PageMeta ¤t_page_meta, const char *title) const { WINDOW *w = window.w; wmove(w, 0, 0); wclrtoeol(w); - if (title[0]) { - colors_use(w, COLOR_TITLE_BOLD); - mvwaddstr(w, 0, 0, title); #ifndef NCMPC_MINI + if (options.welcome_screen_list) { + PaintTabBar(w, current_page_meta, title); } else { -#ifdef ENABLE_HELP_SCREEN - print_hotkey(w, CMD_SCREEN_HELP, _("Help")); -#endif - print_hotkey(w, CMD_SCREEN_PLAY, _("Queue")); - print_hotkey(w, CMD_SCREEN_FILE, _("Browse")); -#ifdef ENABLE_ARTIST_SCREEN - print_hotkey(w, CMD_SCREEN_ARTIST, _("Artist")); -#endif -#ifdef ENABLE_SEARCH_SCREEN - print_hotkey(w, CMD_SCREEN_SEARCH, _("Search")); -#endif -#ifdef ENABLE_LYRICS_SCREEN - print_hotkey(w, CMD_SCREEN_LYRICS, _("Lyrics")); -#endif -#ifdef ENABLE_OUTPUTS_SCREEN - print_hotkey(w, CMD_SCREEN_OUTPUTS, _("Outputs")); -#endif -#ifdef ENABLE_CHAT_SCREEN - print_hotkey(w, CMD_SCREEN_CHAT, _("Chat")); -#endif +#else + (void)current_page_meta; #endif + SelectStyle(w, Style::TITLE_BOLD); + mvwaddstr(w, 0, 0, title); +#ifndef NCMPC_MINI } +#endif char buf[32]; const char *volume_string; @@ -135,18 +103,18 @@ volume_string = buf; } - colors_use(w, COLOR_TITLE); - mvwaddstr(w, 0, window.size.width - utf8_width(volume_string), + SelectStyle(w, Style::TITLE); + mvwaddstr(w, 0, window.size.width - StringWidthMB(volume_string), volume_string); - colors_use(w, COLOR_LINE); + SelectStyle(w, Style::LINE); mvwhline(w, 1, 0, ACS_HLINE, window.size.width); if (flags[0]) { wmove(w, 1, window.size.width - strlen(flags) - 3); waddch(w, '['); - colors_use(w, COLOR_LINE_FLAGS); + SelectStyle(w, Style::LINE_FLAGS); waddstr(w, flags); - colors_use(w, COLOR_LINE); + SelectStyle(w, Style::LINE); waddch(w, ']'); }
View file
ncmpc-0.30.tar.xz/src/TitleBar.hxx -> ncmpc-0.32.tar.xz/src/TitleBar.hxx
Changed
@@ -23,6 +23,7 @@ #include "Window.hxx" struct mpd_status; +struct PageMeta; class TitleBar { Window window; @@ -39,7 +40,7 @@ void OnResize(unsigned width); void Update(const struct mpd_status *status); - void Paint(const char *title) const; + void Paint(const PageMeta ¤t_page_meta, const char *title) const; }; #endif
View file
ncmpc-0.30.tar.xz/src/Window.hxx -> ncmpc-0.32.tar.xz/src/Window.hxx
Changed
@@ -20,10 +20,10 @@ #ifndef NCMPC_WINDOW_HXX #define NCMPC_WINDOW_HXX -#include "config.h" #include "Point.hxx" #include "Size.hxx" -#include "ncmpc_curses.h" + +#include <curses.h> struct Window { WINDOW *const w;
View file
ncmpc-0.30.tar.xz/src/aconnect.cxx -> ncmpc-0.32.tar.xz/src/aconnect.cxx
Changed
@@ -27,135 +27,109 @@ */ #include "aconnect.hxx" -#include "net/async_rconnect.hxx" -#include "net/socket.hxx" -#include "Compiler.h" +#include "net/AsyncResolveConnect.hxx" +#include "net/AsyncHandler.hxx" #include <mpd/client.h> #include <mpd/async.h> -#include <glib.h> +#include <boost/asio/generic/stream_protocol.hpp> -#include <assert.h> -#include <string.h> -#include <stdio.h> -#include <errno.h> +struct AsyncMpdConnect final : AsyncConnectHandler { + AsyncMpdConnectHandler &handler; -struct AsyncMpdConnect { - const AsyncMpdConnectHandler *handler; - void *handler_ctx; + AsyncResolveConnect rconnect; - struct async_rconnect *rconnect; + boost::asio::generic::stream_protocol::socket socket; - int fd; - guint source_id; + char buffer[256]; + + explicit AsyncMpdConnect(boost::asio::io_service &io_service, + AsyncMpdConnectHandler &_handler) noexcept + :handler(_handler), + rconnect(io_service, *this), socket(io_service) {} + + void OnReceive(const boost::system::error_code &error, + std::size_t bytes_transferred) noexcept; + + /* virtual methods from AsyncConnectHandler */ + void OnConnect(boost::asio::generic::stream_protocol::socket socket) override; + void OnConnectError(const char *message) override; }; -static gboolean -aconnect_source_callback(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, - gpointer data) +void +AsyncMpdConnect::OnReceive(const boost::system::error_code &error, + std::size_t bytes_transferred) noexcept { - auto *ac = (AsyncMpdConnect *)data; - assert(ac->source_id != 0); - ac->source_id = 0; + if (error) { + if (error == boost::asio::error::operation_aborted) + /* this object has already been deleted; bail out + quickly without touching anything */ + return; - char buffer[256]; - ssize_t nbytes = recv(ac->fd, buffer, sizeof(buffer) - 1, 0); - if (nbytes < 0) { snprintf(buffer, sizeof(buffer), "Failed to receive from MPD: %s", - strerror(errno)); - close_socket(ac->fd); - ac->handler->error(buffer, ac->handler_ctx); - delete ac; - return false; - } - - if (nbytes == 0) { - close_socket(ac->fd); - ac->handler->error("MPD closed the connection", - ac->handler_ctx); - delete ac; - return false; + error.message().c_str()); + handler.OnAsyncMpdConnectError(buffer); + delete this; + return; } - buffer[nbytes] = 0; + buffer[bytes_transferred] = 0; - struct mpd_async *async = mpd_async_new(ac->fd); + /* the dup() is necessary because Boost 1.62 doesn't have the + release() method yet */ + struct mpd_async *async = mpd_async_new(dup(socket.native_handle())); if (async == nullptr) { - close_socket(ac->fd); - ac->handler->error("Out of memory", ac->handler_ctx); - delete ac; - return false; + handler.OnAsyncMpdConnectError("Out of memory"); + delete this; + return; } struct mpd_connection *c = mpd_connection_new_async(async, buffer); if (c == nullptr) { mpd_async_free(async); - ac->handler->error("Out of memory", ac->handler_ctx); - delete ac; - return false; + handler.OnAsyncMpdConnectError("Out of memory"); + delete this; + return; } - ac->handler->success(c, ac->handler_ctx); - delete ac; - return false; + handler.OnAsyncMpdConnect(c); + delete this; } -static void -aconnect_rconnect_success(int fd, void *ctx) +void +AsyncMpdConnect::OnConnect(boost::asio::generic::stream_protocol::socket _socket) { - auto *ac = (AsyncMpdConnect *)ctx; - ac->rconnect = nullptr; - - ac->fd = fd; - - GIOChannel *channel = g_io_channel_unix_new(fd); - ac->source_id = g_io_add_watch(channel, G_IO_IN, - aconnect_source_callback, ac); - g_io_channel_unref(channel); + socket = std::move(_socket); + socket.async_receive(boost::asio::buffer(buffer, sizeof(buffer) - 1), + std::bind(&AsyncMpdConnect::OnReceive, this, + std::placeholders::_1, + std::placeholders::_2)); } -static void -aconnect_rconnect_error(const char *message, void *ctx) +void +AsyncMpdConnect::OnConnectError(const char *message) { - auto *ac = (AsyncMpdConnect *)ctx; - ac->rconnect = nullptr; - - ac->handler->error(message, ac->handler_ctx); - delete ac; + handler.OnAsyncMpdConnectError(message); + delete this; } -static const struct async_rconnect_handler aconnect_rconnect_handler = { - .success = aconnect_rconnect_success, - .error = aconnect_rconnect_error, -}; - void -aconnect_start(AsyncMpdConnect **acp, +aconnect_start(boost::asio::io_service &io_service, + AsyncMpdConnect **acp, const char *host, unsigned port, - const AsyncMpdConnectHandler &handler, void *ctx) + AsyncMpdConnectHandler &handler) { - auto *ac = new AsyncMpdConnect(); - ac->handler = &handler; - ac->handler_ctx = ctx; + auto *ac = new AsyncMpdConnect(io_service, handler); *acp = ac; - async_rconnect_start(&ac->rconnect, host, port, - &aconnect_rconnect_handler, ac); + ac->rconnect.Start(host, port); } void aconnect_cancel(AsyncMpdConnect *ac) { - if (ac->rconnect != nullptr) - async_rconnect_cancel(ac->rconnect); - else { - g_source_remove(ac->source_id); - close_socket(ac->fd); - } - delete ac; }
View file
ncmpc-0.30.tar.xz/src/aconnect.hxx -> ncmpc-0.32.tar.xz/src/aconnect.hxx
Changed
@@ -29,20 +29,24 @@ #ifndef ACONNECT_H #define ACONNECT_H +#include "AsioServiceFwd.hxx" + #include <mpd/client.h> struct mpd_connection; struct AsyncMpdConnect; -struct AsyncMpdConnectHandler { - void (*success)(struct mpd_connection *c, void *ctx); - void (*error)(const char *message, void *ctx); +class AsyncMpdConnectHandler { +public: + virtual void OnAsyncMpdConnect(struct mpd_connection *c) noexcept = 0; + virtual void OnAsyncMpdConnectError(const char *message) noexcept = 0; }; void -aconnect_start(AsyncMpdConnect **acp, +aconnect_start(boost::asio::io_service &io_service, + AsyncMpdConnect **acp, const char *host, unsigned port, - const AsyncMpdConnectHandler &handler, void *ctx); + AsyncMpdConnectHandler &handler); void aconnect_cancel(AsyncMpdConnect *ac);
View file
ncmpc-0.30.tar.xz/src/callbacks.cxx -> ncmpc-0.32.tar.xz/src/callbacks.cxx
Changed
@@ -21,7 +21,8 @@ #include "screen_utils.hxx" #include "screen_status.hxx" #include "mpdclient.hxx" -#include "ncmpc_curses.h" + +#include <curses.h> static bool _mpdclient_auth_callback(struct mpdclient *c, unsigned recursion)
View file
ncmpc-0.30.tar.xz/src/charset.cxx -> ncmpc-0.32.tar.xz/src/charset.cxx
Changed
@@ -18,231 +18,238 @@ */ #include "charset.hxx" +#include "util/ScopeExit.hxx" + +#include <algorithm> #include <assert.h> #include <string.h> -#include <glib.h> -#ifdef ENABLE_LOCALE +#ifdef HAVE_ICONV +#include <langinfo.h> +#include <iconv.h> +#include <errno.h> +#endif + +#ifdef HAVE_ICONV static bool noconvert = true; static const char *charset; -const char * -charset_init() +void +charset_init() noexcept { - noconvert = g_get_charset(&charset); - return charset; + charset = nl_langinfo(CODESET); + noconvert = charset == nullptr || strcasecmp(charset, "utf-8") == 0; } #endif -#ifdef HAVE_CURSES_ENHANCED -static inline unsigned -unicode_char_width(gunichar ch) +static char * +CopyTruncateString(char *dest, size_t dest_size, + const char *src, size_t src_length) noexcept { - if (g_unichar_iszerowidth(ch)) - return 0; - - if (g_unichar_iswide(ch)) - return 2; - - return 1; + dest = std::copy_n(src, std::min(dest_size - 1, src_length), dest); + *dest = 0; + return dest; } -#endif /* HAVE_CURSES_ENHANCED */ -unsigned -utf8_width(const char *str) -{ - assert(str != nullptr); +#ifdef HAVE_ICONV -#if defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED) - return g_utf8_strlen(str, -1); -#else -#ifdef HAVE_CURSES_ENHANCED - if (g_utf8_validate(str, -1, nullptr)) { - size_t len = g_utf8_strlen(str, -1); - unsigned width = 0; - gunichar c; - - while (len--) { - c = g_utf8_get_char(str); - width += unicode_char_width(c); - str += g_unichar_to_utf8(c, nullptr); - } - - return width; - } else -#endif - return strlen(str); -#endif -} - -unsigned -locale_width(const char *p) +static char * +Iconv(iconv_t i, + char *dest, size_t dest_size, + const char *src, size_t src_length) noexcept { -#if defined(ENABLE_LOCALE) && defined(ENABLE_MULTIBYTE) - char *utf8; - unsigned width; - - if (noconvert) - return utf8_width(p); - - utf8 = locale_to_utf8(p); - width = utf8_width(utf8); - g_free(utf8); + static constexpr char FALLBACK = '?'; + + --dest_size; /* reserve once byte for the null terminator */ + + while (src_length > 0) { + size_t err = iconv(i, + const_cast<char **>(&src), &src_length, + &dest, &dest_size); + if (err == (size_t)-1) { + switch (errno) { + case EILSEQ: + /* invalid sequence: use fallback + character instead */ + ++src; + --src_length; + *dest++ = FALLBACK; + break; + + case EINVAL: + /* incomplete sequence: add fallback + character and stop */ + *dest++ = FALLBACK; + *dest = '\0'; + return dest; + + case E2BIG: + /* output buffer is full: stop here */ + *dest = '\0'; + return dest; + + default: + /* unknown error: stop here */ + *dest = '\0'; + return dest; + } + } + } - return width; -#else - return strlen(p); -#endif + *dest = '\0'; + return dest; } -gcc_unused -static unsigned -ascii_cut_width(char *p, unsigned max_width) +static char * +Iconv(const char *tocode, const char *fromcode, + char *dest, size_t dest_size, + const char *src, size_t src_length) noexcept { - size_t length = strlen(p); - if (length <= (size_t)max_width) - return (unsigned)length; - - p[max_width] = 0; - return max_width; -} + const auto i = iconv_open(tocode, fromcode); + if (i == (iconv_t)-1) { + CopyTruncateString(dest, dest_size, src, src_length); + return dest; + } -gcc_unused -static unsigned -narrow_cut_width(char *p, unsigned max_width) -{ - size_t length = g_utf8_strlen(p, -1); - if (length <= (size_t)max_width) - return (unsigned)length; + AtScopeExit(i) { iconv_close(i); }; - *g_utf8_offset_to_pointer(p, max_width) = 0; - return max_width; + return Iconv(i, dest, dest_size, src, src_length); } -gcc_unused -static unsigned -wide_cut_width(char *p, unsigned max_width) +gcc_pure +static std::string +Iconv(iconv_t i, + const char *src, size_t src_length) noexcept { - size_t length = g_utf8_strlen(p, -1); - unsigned width = 0, prev_width; - - while (length-- > 0) { - gunichar c = g_utf8_get_char(p); - prev_width = width; - width += g_unichar_iswide(c) ? 2 : 1; - if (width > max_width) { - /* too wide - cut the rest off */ - *p = 0; - return prev_width; + static constexpr char FALLBACK = '?'; + + std::string dest; + + while (src_length > 0) { + char buffer[1024], *outbuf = buffer; + size_t outbytesleft = sizeof(buffer); + + size_t err = iconv(i, + const_cast<char **>(&src), &src_length, + &outbuf, &outbytesleft); + dest.append(buffer, outbuf); + if (err == (size_t)-1) { + switch (errno) { + case EILSEQ: + /* invalid sequence: use fallback + character instead */ + ++src; + --src_length; + dest.push_back(FALLBACK); + break; + + case EINVAL: + /* incomplete sequence: add fallback + character and stop */ + dest.push_back(FALLBACK); + return dest; + + case E2BIG: + /* output buffer is full: flush it */ + break; + + default: + /* unknown error: stop here */ + return dest; + } } - - p += g_unichar_to_utf8(c, nullptr); } - return width; + return dest; } -unsigned -utf8_cut_width(char *p, unsigned max_width) +gcc_pure +static std::string +Iconv(const char *tocode, const char *fromcode, + const char *src, size_t src_length) noexcept { - assert(p != nullptr); + const auto i = iconv_open(tocode, fromcode); + if (i == (iconv_t)-1) + return {src, src_length}; -#ifdef HAVE_CURSES_ENHANCED - if (!g_utf8_validate(p, -1, nullptr)) - return ascii_cut_width(p, max_width); + AtScopeExit(i) { iconv_close(i); }; - return wide_cut_width(p, max_width); -#elif defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED) - return narrow_cut_width(p, max_width); -#else - return ascii_cut_width(p, max_width); -#endif + return Iconv(i, src, src_length); } -char * -utf8_to_locale(const char *utf8str) +gcc_pure +static std::string +utf8_to_locale(const char *src, size_t length) noexcept { -#ifdef ENABLE_LOCALE - assert(utf8str != nullptr); + assert(src != nullptr); if (noconvert) - return g_strdup(utf8str); + return {src, length}; - gchar *str = g_convert_with_fallback(utf8str, -1, - charset, "utf-8", - nullptr, nullptr, nullptr, nullptr); - if (str == nullptr) - return g_strdup(utf8str); + return Iconv(charset, "utf-8", + src, length); +} - return str; -#else - return g_strdup(utf8str); #endif -} char * -locale_to_utf8(const char *localestr) +CopyUtf8ToLocale(char *dest, size_t dest_size, const char *src) noexcept { -#ifdef ENABLE_LOCALE - assert(localestr != nullptr); - - if (noconvert) - return g_strdup(localestr); - - gchar *str = g_convert_with_fallback(localestr, -1, - "utf-8", charset, - nullptr, nullptr, nullptr, nullptr); - if (str == nullptr) - return g_strdup(localestr); - - return str; -#else - return g_strdup(localestr); -#endif + return CopyUtf8ToLocale(dest, dest_size, src, strlen(src)); } char * -replace_utf8_to_locale(char *src) +CopyUtf8ToLocale(char *dest, size_t dest_size, + const char *src, size_t src_length) noexcept { -#ifdef ENABLE_LOCALE - assert(src != nullptr); - - if (noconvert) - return src; +#ifdef HAVE_ICONV + if (noconvert) { +#endif + return CopyTruncateString(dest, dest_size, src, src_length); +#ifdef HAVE_ICONV + } else { + return Iconv(charset, "utf-8", dest, dest_size, + src, src_length); + } +#endif +} - return utf8_to_locale(src); +const char * +utf8_to_locale(const char *src, char *buffer, size_t size) noexcept +{ +#ifdef HAVE_ICONV + CopyUtf8ToLocale(buffer, size, src); + return buffer; #else + (void)buffer; + (void)size; return src; #endif } +#ifdef HAVE_ICONV -char * -replace_locale_to_utf8(char *src) +gcc_pure +static std::string +locale_to_utf8(const char *src) noexcept { -#ifdef ENABLE_LOCALE assert(src != nullptr); if (noconvert) return src; - return locale_to_utf8(src); -#else - return src; -#endif + return Iconv("utf-8", charset, + src, strlen(src)); } -#ifdef ENABLE_LOCALE +Utf8ToLocale::Utf8ToLocale(const char *src) noexcept + :Utf8ToLocale(src, strlen(src)) {} -Utf8ToLocale::~Utf8ToLocale() -{ - g_free(value); -} +Utf8ToLocale::Utf8ToLocale(const char *src, size_t length) noexcept + :value(utf8_to_locale(src, length)) {} -LocaleToUtf8::~LocaleToUtf8() -{ - g_free(value); -} +LocaleToUtf8::LocaleToUtf8(const char *src) noexcept + :value(locale_to_utf8(src)) {} #endif
View file
ncmpc-0.30.tar.xz/src/charset.hxx -> ncmpc-0.32.tar.xz/src/charset.hxx
Changed
@@ -21,53 +21,27 @@ #define CHARSET_H #include "config.h" -#include "Compiler.h" +#include "util/Compiler.h" -#ifdef ENABLE_LOCALE -const char * -charset_init(); -#endif - -/** - * Returns the number of terminal cells occupied by this string. - */ -gcc_pure -unsigned -utf8_width(const char *str); - -/** - * Returns the number of terminal cells occupied by this string. - */ -gcc_pure -unsigned -locale_width(const char *p); +#include <string> -/** - * Limits the width of the specified string. Cuts it off before the - * specified width is exceeded. - * - * @return the resulting width of the string - */ -unsigned -utf8_cut_width(char *p, unsigned max_width); +#include <stddef.h> -char *utf8_to_locale(const char *str); -char *locale_to_utf8(const char *str); +#ifdef HAVE_ICONV +void +charset_init() noexcept; +#endif -/** - * Converts the UTF-8 string to the locale, and frees the source - * pointer. Returns the source pointer as-is if no conversion is - * required. - */ char * -replace_utf8_to_locale(char *src); +CopyUtf8ToLocale(char *dest, size_t dest_size, const char *src) noexcept; -/** - * Converts the locale string to UTF-8, and frees the source pointer. - * Returns the source pointer as-is if no conversion is required. - */ char * -replace_locale_to_utf8(char *src); +CopyUtf8ToLocale(char *dest, size_t dest_size, + const char *src, size_t src_length) noexcept; + +gcc_pure +const char * +utf8_to_locale(const char *src, char *buffer, size_t size) noexcept; /** * Convert an UTF-8 string to the locale charset. The source string @@ -75,28 +49,30 @@ * necessary, then this class is a no-op. */ class Utf8ToLocale { -#ifdef ENABLE_LOCALE - char *const value; +#ifdef HAVE_ICONV + const std::string value; #else const char *const value; #endif public: -#ifdef ENABLE_LOCALE - explicit Utf8ToLocale(const char *src) - :value(utf8_to_locale(src)) {} - - ~Utf8ToLocale(); +#ifdef HAVE_ICONV + explicit Utf8ToLocale(const char *src) noexcept; + Utf8ToLocale(const char *src, size_t length) noexcept; Utf8ToLocale(const Utf8ToLocale &) = delete; Utf8ToLocale &operator=(const Utf8ToLocale &) = delete; #else - explicit Utf8ToLocale(const char *src) + explicit Utf8ToLocale(const char *src) noexcept :value(src) {} #endif - const char *c_str() const { + const char *c_str() const noexcept { +#ifdef HAVE_ICONV + return value.c_str(); +#else return value; +#endif } }; @@ -106,28 +82,29 @@ * necessary, then this class is a no-op. */ class LocaleToUtf8 { -#ifdef ENABLE_LOCALE - char *const value; +#ifdef HAVE_ICONV + const std::string value; #else const char *const value; #endif public: -#ifdef ENABLE_LOCALE - explicit LocaleToUtf8(const char *src) - :value(locale_to_utf8(src)) {} - - ~LocaleToUtf8(); +#ifdef HAVE_ICONV + explicit LocaleToUtf8(const char *src) noexcept; LocaleToUtf8(const LocaleToUtf8 &) = delete; LocaleToUtf8 &operator=(const LocaleToUtf8 &) = delete; #else - explicit LocaleToUtf8(const char *src) + explicit LocaleToUtf8(const char *src) noexcept :value(src) {} #endif - const char *c_str() const { + const char *c_str() const noexcept { +#ifdef HAVE_ICONV + return value.c_str(); +#else return value; +#endif } };
View file
ncmpc-0.30.tar.xz/src/conf.cxx -> ncmpc-0.32.tar.xz/src/conf.cxx
Changed
@@ -19,23 +19,32 @@ #include "conf.hxx" #include "config.h" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "defaults.hxx" #include "i18n.h" -#include "command.hxx" -#include "colors.hxx" +#include "Command.hxx" +#include "Styles.hxx" +#include "BasicColors.hxx" +#include "CustomColors.hxx" #include "screen_list.hxx" -#include "options.hxx" +#include "Options.hxx" +#include "io/Path.hxx" #include "util/CharUtil.hxx" +#include "util/ScopeExit.hxx" #include "util/StringStrip.hxx" #include <assert.h> +#include <sys/stat.h> #include <ctype.h> #include <stdio.h> #include <errno.h> #include <stdlib.h> #include <string.h> + +#ifdef _WIN32 #include <glib.h> -#include <glib/gstdio.h> +#endif #define MAX_LINE_LENGTH 1024 #define COMMENT_TOKEN '#' @@ -86,6 +95,14 @@ #define CONF_CHAT_PREFIX "chat-prefix" #define CONF_SECOND_COLUMN "second-column" +#ifdef _WIN32 +#define CONFIG_FILENAME "ncmpc.conf" +#define KEYS_FILENAME "keys.conf" +#else +#define CONFIG_FILENAME "config" +#define KEYS_FILENAME "keys" +#endif + static bool str2bool(char *str) { @@ -150,42 +167,32 @@ parse_key_definition(char *str) { /* get the command name */ - const size_t len = strlen(str); - size_t i = 0; - int j = 0; - char buf[MAX_LINE_LENGTH]; - memset(buf, 0, MAX_LINE_LENGTH); - while (i < len && str[i] != '=' && !IsWhitespaceFast(str[i])) - buf[j++] = str[i++]; - - command_t cmd = get_key_command_from_name(buf); - if(cmd == CMD_NONE) { - /* the hotkey configuration contains an unknown - command */ - print_error(_("Unknown command"), buf); + char *eq = strchr(str, '='); + if (eq == nullptr) { + /* the hotkey configuration line is incomplete */ + print_error(_("Incomplete hotkey configuration"), str); return false; } - /* skip whitespace */ - while (i < len && (str[i] == '=' || IsWhitespaceFast(str[i]))) - i++; + char *command_name = str; + str = StripLeft(eq + 1); - /* get the value part */ - memset(buf, 0, MAX_LINE_LENGTH); - g_strlcpy(buf, str+i, MAX_LINE_LENGTH); - if (*buf == 0) { - /* the hotkey configuration line is incomplete */ - print_error(_("Incomplete hotkey configuration"), str); + *eq = '\0'; + StripRight(command_name); + const auto cmd = get_key_command_from_name(command_name); + if(cmd == Command::NONE) { + /* the hotkey configuration contains an unknown + command */ + print_error(_("Unknown command"), command_name); return false; } /* parse key values */ - i = 0; + size_t i = 0; int key = 0; - char *p = buf; + char *p = str; - int keys[MAX_COMMAND_KEYS]; - memset(keys, 0, sizeof(int)*MAX_COMMAND_KEYS); + std::array<int, MAX_COMMAND_KEYS> keys{0}; while (i < MAX_COMMAND_KEYS && *p != 0 && (key = parse_key_value(p, &p)) >= 0) { keys[i++] = key; @@ -196,7 +203,8 @@ if (key < 0) return false; - return assign_keys(cmd, keys); + GetGlobalKeyBindings().SetKey(cmd, keys); + return true; } static bool @@ -230,8 +238,7 @@ *value++ = 0; - g_strchomp(p); - return StripLeft(value); + return Strip(value); } static bool @@ -241,7 +248,7 @@ if (value == nullptr) return false; - return colors_assign(str, value); + return ModifyStyle(str, value); } /** @@ -260,7 +267,7 @@ } else comma = p + strlen(p); - g_strchomp(p); + StripRight(p); return comma; } @@ -272,7 +279,7 @@ return false; /* get the command name */ - short color = colors_str2color(str); + short color = ParseColorNameOrNumber(str); if (color < 0) { char buf[MAX_LINE_LENGTH]; print_error(_("Bad color name"), buf); @@ -303,7 +310,8 @@ return false; } - return colors_define(str, rgb[0], rgb[1], rgb[2]); + colors_define(color, rgb[0], rgb[1], rgb[2]); + return true; } #endif @@ -320,30 +328,51 @@ return {s, length}; } +static constexpr bool +IsListSeparator(char ch) noexcept +{ + return IsWhitespaceFast(ch) || ch == ','; +} + +static char * +NextItem(char *&src) noexcept +{ + while (*src && IsListSeparator(*src)) + ++src; + + if (!*src) + return nullptr; + + char *value = src; + + while (!IsListSeparator(*src)) + ++src; + + if (*src) + *src++ = 0; + + return value; +} + static std::vector<std::string> check_screen_list(char *value) { - char **tmp = g_strsplit_set(value, " \t,", 100); std::vector<std::string> screen; - int i = 0; - - while( tmp && tmp[i] ) { - char *name = g_ascii_strdown(tmp[i], -1); - if (*name != '\0') { - if (screen_lookup_name(name) == nullptr) { - /* an unknown screen name was specified in the - configuration file */ - print_error(_("Unknown screen name"), name); - } else { - screen.emplace_back(name); - } + + while (char *name = NextItem(value)) { + std::transform(name, name + strlen(name), name, tolower); + + if (screen_lookup_name(name) == nullptr) { + /* an unknown screen name was specified in the + configuration file */ + print_error(_("Unknown screen name"), name); + } else { + screen.emplace_back(name); } - g_free(name); - i++; } - g_strfreev(tmp); + if (screen.empty()) - return DEFAULT_SCREEN_LIST; + screen = DEFAULT_SCREEN_LIST; return screen; } @@ -490,7 +519,7 @@ else if (!strcasecmp(CONF_SEARCH_MODE, name)) options.search_mode = get_search_mode(value); else if (!strcasecmp(CONF_HIDE_CURSOR, name)) - options.hide_cursor = atoi(value); + options.hide_cursor = std::chrono::seconds(atoi(value)); else if (!strcasecmp(CONF_SEEK_TIME, name)) options.seek_time = atoi(value); else if (!strcasecmp(CONF_SCREEN_LIST, name)) { @@ -506,7 +535,7 @@ * 1000 /* seconds -> milliseconds */; else if (!strcasecmp(CONF_LYRICS_TIMEOUT, name)) #ifdef ENABLE_LYRICS_SCREEN - options.lyrics_timeout = atoi(GetStringValue(value).c_str()); + options.lyrics_timeout = std::chrono::seconds(atoi(GetStringValue(value).c_str())); #else {} #endif @@ -569,176 +598,260 @@ return true; } -static int -read_rc_file(char *filename) +static bool +read_rc_file(const char *filename) { assert(filename != nullptr); FILE *file = fopen(filename, "r"); if (file == nullptr) { perror(filename); - return -1; + return false; } char line[MAX_LINE_LENGTH]; while (fgets(line, sizeof(line), file) != nullptr) { char *p = StripLeft(line); - if (*p != 0 && *p != COMMENT_TOKEN) - parse_line(g_strchomp(p)); + if (*p != 0 && *p != COMMENT_TOKEN) { + StripRight(p); + parse_line(p); + } } fclose(file); - return 0; + return true; } -bool -check_user_conf_dir() +gcc_pure +static bool +IsFile(const char *path) noexcept { - char *directory = g_build_filename(g_get_home_dir(), "." PACKAGE, nullptr); + struct stat st; + return stat(path, &st) == 0 && S_ISREG(st.st_mode); +} - if (g_file_test(directory, G_FILE_TEST_IS_DIR)) { - g_free(directory); - return true; - } +gcc_pure +static bool +IsDirectory(const char *path) noexcept +{ + struct stat st; + return stat(path, &st) == 0 && S_ISDIR(st.st_mode); +} + +#ifndef _WIN32 - bool success = g_mkdir(directory, 0755) == 0; - g_free(directory); - return success; +gcc_const +static const char * +GetHomeDirectory() noexcept +{ + return getenv("HOME"); } -char * -build_user_conf_filename() +gcc_const +static std::string +GetHomeConfigDirectory() noexcept { -#ifdef WIN32 - return g_build_filename(g_get_user_config_dir(), PACKAGE, "ncmpc.conf", nullptr); -#else - return g_build_filename(g_get_home_dir(), "." PACKAGE, "config", nullptr); + const char *config_home = getenv("XDG_CONFIG_HOME"); + if (config_home != nullptr && *config_home != 0) + return config_home; + + const char *home = GetHomeDirectory(); + if (home != nullptr) + return BuildPath(home, ".config"); + + return {}; +} + +gcc_pure +static std::string +GetHomeConfigDirectory(const char *package) noexcept +{ + const auto dir = GetHomeConfigDirectory(); + if (dir.empty()) + return {}; + + return BuildPath(dir, package); +} + #endif + +/** + * Find or create the directory for writing configuration files. + * + * @return the absolute path; an empty string indicates that no + * directory could be created + */ +static std::string +MakeUserConfigPath(const char *filename) +{ + const auto directory = GetHomeConfigDirectory(PACKAGE); + if (directory.empty()) + return {}; + + return IsDirectory(directory.c_str()) || + mkdir(directory.c_str(), 0755) == 0 + ? BuildPath(directory, filename) + : std::string(); } -char * -build_system_conf_filename() +std::string +MakeKeysPath() { -#ifdef WIN32 + return MakeUserConfigPath(KEYS_FILENAME); +} + +#ifndef _WIN32 + +std::string +GetHomeConfigPath() +{ + const char *home = GetHomeDirectory(); + if (home == nullptr) + return {}; + + return BuildPath(home, "." PACKAGE, CONFIG_FILENAME); +} + +#endif + +std::string +GetUserConfigPath() +{ + const auto dir = GetHomeConfigDirectory(); + if (dir.empty()) + return {}; + + return BuildPath(dir, PACKAGE, CONFIG_FILENAME); +} + +std::string +GetSystemConfigPath() +{ +#ifdef _WIN32 const gchar* const *system_data_dirs; - gchar *pathname = nullptr; for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != nullptr; system_data_dirs++) { - pathname = g_build_filename(*system_data_dirs, PACKAGE, "ncmpc.conf", nullptr); - if (g_file_test(pathname, G_FILE_TEST_EXISTS)) - { - break; - } - else - { - g_free (pathname); - pathname = nullptr; - } + auto path = BuildPath(*system_data_dirs, PACKAGE, CONFIG_FILENAME); + if (IsFile(path.c_str())) + return path; } - return pathname; + return {}; #else - return g_build_filename(SYSCONFDIR, PACKAGE, "config", nullptr); + return BuildPath(SYSCONFDIR, PACKAGE, CONFIG_FILENAME); #endif } -char * -build_user_key_binding_filename() +#ifndef _WIN32 + +gcc_pure +static std::string +GetHomeKeysPath() { -#ifdef WIN32 - return g_build_filename(g_get_user_config_dir(), PACKAGE, "keys.conf", nullptr); -#else - return g_build_filename(g_get_home_dir(), "." PACKAGE, "keys", nullptr); + const char *home = GetHomeDirectory(); + if (home == nullptr) + return {}; + + return BuildPath(home, "." PACKAGE, KEYS_FILENAME); +} + #endif + +gcc_pure +static std::string +GetUserKeysPath() +{ + const auto dir = GetHomeConfigDirectory(); + if (dir.empty()) + return {}; + + return BuildPath(dir, PACKAGE, KEYS_FILENAME); } -static char * -g_build_system_key_binding_filename() +gcc_pure +static std::string +GetSystemKeysPath() { -#ifdef WIN32 +#ifdef _WIN32 const gchar* const *system_data_dirs; - gchar *pathname = nullptr; for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != nullptr; system_data_dirs++) { - pathname = g_build_filename(*system_data_dirs, PACKAGE, "keys.conf", nullptr); - if (g_file_test(pathname, G_FILE_TEST_EXISTS)) - { - break; - } - else - { - g_free (pathname); - pathname = nullptr; - } + auto path = BuildPath(*system_data_dirs, PACKAGE, KEYS_FILENAME); + if (IsFile(pathname.c_str())) + return path; } - return pathname; + return {} #else - return g_build_filename(SYSCONFDIR, PACKAGE, "keys", nullptr); + return BuildPath(SYSCONFDIR, PACKAGE, KEYS_FILENAME); #endif } -static char * +static std::string find_config_file() { /* check for command line configuration file */ if (!options.config_file.empty()) - return g_strdup(options.config_file.c_str()); + return options.config_file; - /* check for user configuration ~/.ncmpc/config */ - char *filename = build_user_conf_filename(); - if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + /* check for user configuration ~/.config/ncmpc/config */ + auto filename = GetUserConfigPath(); + if (!filename.empty() && IsFile(filename.c_str())) return filename; - g_free(filename); +#ifndef _WIN32 + /* check for user configuration ~/.ncmpc/config */ + filename = GetHomeConfigPath(); + if (!filename.empty() && IsFile(filename.c_str())) + return filename; +#endif /* check for global configuration SYSCONFDIR/ncmpc/config */ - filename = build_system_conf_filename(); - if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + filename = GetSystemConfigPath(); + if (IsFile(filename.c_str())) return filename; - g_free(filename); - return nullptr; + return {}; } -static char * +static std::string find_keys_file() { /* check for command line key binding file */ if (!options.key_file.empty()) - return g_strdup(options.key_file.c_str()); + return options.key_file; - /* check for user key bindings ~/.ncmpc/keys */ - char *filename = build_user_key_binding_filename(); - if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + /* check for user key bindings ~/.config/ncmpc/keys */ + auto filename = GetUserKeysPath(); + if (!filename.empty() && IsFile(filename.c_str())) return filename; - g_free(filename); +#ifndef _WIN32 + /* check for user key bindings ~/.ncmpc/keys */ + filename = GetHomeKeysPath(); + if (!filename.empty() && IsFile(filename.c_str())) + return filename; +#endif /* check for global key bindings SYSCONFDIR/ncmpc/keys */ - filename = g_build_system_key_binding_filename(); - if (g_file_test(filename, G_FILE_TEST_IS_REGULAR)) + filename = GetSystemKeysPath(); + if (IsFile(filename.c_str())) return filename; - g_free(filename); - return nullptr; + return {}; } void read_configuration() { /* load configuration */ - char *filename = find_config_file(); - if (filename != nullptr) { - read_rc_file(filename); - g_free(filename); - } + auto filename = find_config_file(); + if (!filename.empty()) + read_rc_file(filename.c_str()); /* load key bindings */ filename = find_keys_file(); - if (filename != nullptr) { - read_rc_file(filename); - g_free(filename); - } + if (!filename.empty()) + read_rc_file(filename.c_str()); }
View file
ncmpc-0.30.tar.xz/src/conf.hxx -> ncmpc-0.32.tar.xz/src/conf.hxx
Changed
@@ -17,13 +17,21 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -bool -check_user_conf_dir(); +#include <string> -char *build_user_conf_filename(); -char *build_system_conf_filename(); +std::string +MakeKeysPath(); -char *build_user_key_binding_filename(); +#ifndef _WIN32 +std::string +GetHomeConfigPath(); +#endif + +std::string +GetUserConfigPath(); + +std::string +GetSystemConfigPath(); void read_configuration();
View file
ncmpc-0.30.tar.xz/src/db_completion.cxx -> ncmpc-0.32.tar.xz/src/db_completion.cxx
Changed
@@ -21,8 +21,9 @@ #include "Completion.hxx" #include "charset.hxx" #include "mpdclient.hxx" +#include "util/ScopeExit.hxx" -#include <glib.h> +#include <string> void gcmp_list_from_path(struct mpdclient *c, const char *path, @@ -37,30 +38,29 @@ struct mpd_entity *entity; while ((entity = mpd_recv_entity(connection)) != nullptr) { - char *name; + AtScopeExit(entity) { mpd_entity_free(entity); }; + std::string name; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY && types & GCMP_TYPE_DIR) { const struct mpd_directory *dir = mpd_entity_get_directory(entity); - name = g_strconcat(Utf8ToLocale(mpd_directory_get_path(dir)).c_str(), - "/", nullptr); + name = Utf8ToLocale(mpd_directory_get_path(dir)).c_str(); + name.push_back('/'); } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG && types & GCMP_TYPE_FILE) { const struct mpd_song *song = mpd_entity_get_song(entity); - name = utf8_to_locale(mpd_song_get_uri(song)); + name = Utf8ToLocale(mpd_song_get_uri(song)).c_str(); } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST && types & GCMP_TYPE_PLAYLIST) { const struct mpd_playlist *playlist = mpd_entity_get_playlist(entity); - name = utf8_to_locale(mpd_playlist_get_path(playlist)); + name = Utf8ToLocale(mpd_playlist_get_path(playlist)).c_str(); } else { - mpd_entity_free(entity); continue; } - completion.emplace(name); - mpd_entity_free(entity); + completion.emplace(std::move(name)); } }
View file
ncmpc-0.30.tar.xz/src/defaults.hxx -> ncmpc-0.32.tar.xz/src/defaults.hxx
Changed
@@ -27,10 +27,10 @@ #define DEFAULT_SCREEN_LIST {"playlist", "browse"} /* song format - list window */ -#define DEFAULT_LIST_FORMAT "%name%|[%artist% - ][%title%|%shortfile%]" +#define DEFAULT_LIST_FORMAT "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]" /* song format - status window */ -#define DEFAULT_STATUS_FORMAT "[%artist% - ][%title%|%shortfile%]" +#define DEFAULT_STATUS_FORMAT "[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]" #define DEFAULT_LYRICS_TIMEOUT 100
View file
ncmpc-0.30.tar.xz/src/filelist.cxx -> ncmpc-0.32.tar.xz/src/filelist.cxx
Changed
@@ -18,11 +18,10 @@ */ #include "filelist.hxx" +#include "util/StringUTF8.hxx" #include <mpd/client.h> -#include <glib.h> - #include <algorithm> #include <string.h> @@ -48,15 +47,15 @@ break; case MPD_ENTITY_TYPE_DIRECTORY: - return g_utf8_collate(mpd_directory_get_path(mpd_entity_get_directory(&a)), - mpd_directory_get_path(mpd_entity_get_directory(&b))) < 0; + return CollateUTF8(mpd_directory_get_path(mpd_entity_get_directory(&a)), + mpd_directory_get_path(mpd_entity_get_directory(&b))) < 0; case MPD_ENTITY_TYPE_SONG: return false; case MPD_ENTITY_TYPE_PLAYLIST: - return g_utf8_collate(mpd_playlist_get_path(mpd_entity_get_playlist(&a)), - mpd_playlist_get_path(mpd_entity_get_playlist(&b))) < 0; + return CollateUTF8(mpd_playlist_get_path(mpd_entity_get_playlist(&a)), + mpd_playlist_get_path(mpd_entity_get_playlist(&b))) < 0; } return false;
View file
ncmpc-0.30.tar.xz/src/filelist.hxx -> ncmpc-0.32.tar.xz/src/filelist.hxx
Changed
@@ -20,7 +20,7 @@ #ifndef FILELIST_H #define FILELIST_H -#include "Compiler.h" +#include "util/Compiler.h" #include <vector> #include <utility>
View file
ncmpc-0.30.tar.xz/src/gidle.cxx -> ncmpc-0.32.tar.xz/src/gidle.cxx
Changed
@@ -27,159 +27,77 @@ */ #include "gidle.hxx" -#include "Compiler.h" +#include "util/Compiler.h" #include <mpd/async.h> #include <mpd/parser.h> -#include <glib.h> - #include <assert.h> #include <string.h> #include <errno.h> -MpdIdleSource::MpdIdleSource(struct mpd_connection &_connection, - mpd_glib_callback_t _callback, void *_callback_ctx) +MpdIdleSource::MpdIdleSource(boost::asio::io_service &io_service, + struct mpd_connection &_connection, + MpdIdleHandler &_handler) noexcept :connection(&_connection), async(mpd_connection_get_async(connection)), parser(mpd_parser_new()), - callback(_callback), callback_ctx(_callback_ctx), - channel(g_io_channel_unix_new(mpd_async_get_fd(async))) + handler(_handler), + socket(io_service, mpd_async_get_fd(async)) { /* TODO check parser!=nullptr */ } -MpdIdleSource::~MpdIdleSource() +MpdIdleSource::~MpdIdleSource() noexcept { - if (id != 0) - g_source_remove(id); - - g_io_channel_unref(channel); + socket.release(); mpd_parser_free(parser); } -static void -mpd_glib_invoke(const MpdIdleSource *source) -{ - assert(source->id == 0); - - if (source->idle_events != 0) - source->callback(MPD_ERROR_SUCCESS, (enum mpd_server_error)0, - nullptr, - source->idle_events, source->callback_ctx); -} - -static void -mpd_glib_invoke_error(const MpdIdleSource *source, - enum mpd_error error, enum mpd_server_error server_error, - const char *message) -{ - assert(source->id == 0); - - source->callback(error, server_error, message, - 0, source->callback_ctx); -} - -static void -mpd_glib_invoke_async_error(const MpdIdleSource *source) -{ - assert(source->id == 0); - - mpd_glib_invoke_error(source, mpd_async_get_error(source->async), - (enum mpd_server_error)0, - mpd_async_get_error_message(source->async)); -} - -/** - * Converts a GIOCondition bit mask to #mpd_async_event. - */ -static enum mpd_async_event -g_io_condition_to_mpd_async_event(GIOCondition condition) -{ - unsigned events = 0; - - if (condition & G_IO_IN) - events |= MPD_ASYNC_EVENT_READ; - - if (condition & G_IO_OUT) - events |= MPD_ASYNC_EVENT_WRITE; - - if (condition & G_IO_HUP) - events |= MPD_ASYNC_EVENT_HUP; - - if (condition & G_IO_ERR) - events |= MPD_ASYNC_EVENT_ERROR; - - return (enum mpd_async_event)events; -} - -/** - * Converts a #mpd_async_event bit mask to GIOCondition. - */ -static GIOCondition -mpd_async_events_to_g_io_condition(enum mpd_async_event events) +void +MpdIdleSource::InvokeAsyncError() noexcept { - unsigned condition = 0; - - if (events & MPD_ASYNC_EVENT_READ) - condition |= G_IO_IN; - - if (events & MPD_ASYNC_EVENT_WRITE) - condition |= G_IO_OUT; - - if (events & MPD_ASYNC_EVENT_HUP) - condition |= G_IO_HUP; - - if (events & MPD_ASYNC_EVENT_ERROR) - condition |= G_IO_ERR; - - return GIOCondition(condition); + InvokeError(mpd_async_get_error(async), + (enum mpd_server_error)0, + mpd_async_get_error_message(async)); } -/** - * Parses a response line from MPD. - * - * @return true on success, false on error - */ -static bool -mpd_glib_feed(MpdIdleSource *source, char *line) +bool +MpdIdleSource::Feed(char *line) noexcept { enum mpd_parser_result result; - result = mpd_parser_feed(source->parser, line); + result = mpd_parser_feed(parser, line); switch (result) { case MPD_PARSER_MALFORMED: - source->id = 0; - source->io_events = 0; + io_events = 0; - mpd_glib_invoke_error(source, MPD_ERROR_MALFORMED, - (enum mpd_server_error)0, - "Malformed MPD response"); + InvokeError(MPD_ERROR_MALFORMED, + (enum mpd_server_error)0, + "Malformed MPD response"); return false; case MPD_PARSER_SUCCESS: - source->id = 0; - source->io_events = 0; + io_events = 0; - mpd_glib_invoke(source); + InvokeCallback(); return false; case MPD_PARSER_ERROR: - source->id = 0; - source->io_events = 0; + io_events = 0; - mpd_glib_invoke_error(source, MPD_ERROR_SERVER, - mpd_parser_get_server_error(source->parser), - mpd_parser_get_message(source->parser)); + InvokeError(MPD_ERROR_SERVER, + mpd_parser_get_server_error(parser), + mpd_parser_get_message(parser)); return false; case MPD_PARSER_PAIR: - if (strcmp(mpd_parser_get_name(source->parser), + if (strcmp(mpd_parser_get_name(parser), "changed") == 0) - source->idle_events |= - mpd_idle_name_parse(mpd_parser_get_value(source->parser)); + idle_events |= + mpd_idle_name_parse(mpd_parser_get_value(parser)); break; } @@ -187,123 +105,136 @@ return true; } -/** - * Receives and evaluates a portion of the MPD response. - * - * @return true on success, false on error - */ -static bool -mpd_glib_recv(MpdIdleSource *source) +bool +MpdIdleSource::Receive() noexcept { char *line; - while ((line = mpd_async_recv_line(source->async)) != nullptr) { - if (!mpd_glib_feed(source, line)) + while ((line = mpd_async_recv_line(async)) != nullptr) { + if (!Feed(line)) return false; } - if (mpd_async_get_error(source->async) != MPD_ERROR_SUCCESS) { - source->id = 0; - source->io_events = 0; + if (mpd_async_get_error(async) != MPD_ERROR_SUCCESS) { + io_events = 0; - mpd_glib_invoke_async_error(source); + InvokeAsyncError(); return false; } return true; } -static gboolean -mpd_glib_source_callback(gcc_unused GIOChannel *_source, - GIOCondition condition, gpointer data) +void +MpdIdleSource::OnReadable(const boost::system::error_code &error) noexcept { - auto *source = (MpdIdleSource *)data; + io_events &= ~MPD_ASYNC_EVENT_READ; - assert(source->id != 0); - assert(source->io_events != 0); + if (error) { + if (error == boost::asio::error::operation_aborted) + return; - /* let libmpdclient do some I/O */ + // TODO + return; + } - if (!mpd_async_io(source->async, - g_io_condition_to_mpd_async_event(condition))) { - source->id = 0; - source->io_events = 0; + if (!mpd_async_io(async, MPD_ASYNC_EVENT_READ)) { + socket.cancel(); + io_events = 0; - mpd_glib_invoke_async_error(source); - return false; + InvokeAsyncError(); + return; } - /* receive the response */ + if (!Receive()) + return; - if ((condition & G_IO_IN) != 0) { - if (!mpd_glib_recv(source)) - return false; - } + UpdateSocket(); +} - /* continue polling? */ +void +MpdIdleSource::OnWritable(const boost::system::error_code &error) noexcept +{ + io_events &= ~MPD_ASYNC_EVENT_WRITE; - enum mpd_async_event events = mpd_async_events(source->async); - if (events == 0) { - /* no events - disable watch */ - source->id = 0; - source->io_events = 0; + if (error) { + if (error == boost::asio::error::operation_aborted) + return; - return false; - } else if (events != source->io_events) { - /* different event mask: make new watch */ + // TODO + return; + } - g_source_remove(source->id); + if (!mpd_async_io(async, MPD_ASYNC_EVENT_WRITE)) { + socket.cancel(); + io_events = 0; - condition = mpd_async_events_to_g_io_condition(events); - source->id = g_io_add_watch(source->channel, condition, - mpd_glib_source_callback, source); - source->io_events = events; + InvokeAsyncError(); + return; + } - return false; - } else - /* same event mask as before, enable the old watch */ - return true; + UpdateSocket(); +} + +void +MpdIdleSource::AsyncRead() noexcept +{ + io_events |= MPD_ASYNC_EVENT_READ; + socket.async_read_some(boost::asio::null_buffers(), + std::bind(&MpdIdleSource::OnReadable, this, + std::placeholders::_1)); } -static void -mpd_glib_add_watch(MpdIdleSource *source) +void +MpdIdleSource::AsyncWrite() noexcept { - enum mpd_async_event events = mpd_async_events(source->async); + io_events |= MPD_ASYNC_EVENT_WRITE; + socket.async_write_some(boost::asio::null_buffers(), + std::bind(&MpdIdleSource::OnWritable, this, + std::placeholders::_1)); +} - assert(source->io_events == 0); - assert(source->id == 0); +void +MpdIdleSource::UpdateSocket() noexcept +{ + enum mpd_async_event events = mpd_async_events(async); + if (events == io_events) + return; + + socket.cancel(); + + if (events & MPD_ASYNC_EVENT_READ) + AsyncRead(); + + if (events & MPD_ASYNC_EVENT_WRITE) + AsyncWrite(); - GIOCondition condition = mpd_async_events_to_g_io_condition(events); - source->id = g_io_add_watch(source->channel, condition, - mpd_glib_source_callback, source); - source->io_events = events; + io_events = events; } bool -MpdIdleSource::Enter() +MpdIdleSource::Enter() noexcept { assert(io_events == 0); - assert(id == 0); idle_events = 0; if (!mpd_async_send_command(async, "idle", nullptr)) { - mpd_glib_invoke_async_error(this); + InvokeAsyncError(); return false; } - mpd_glib_add_watch(this); + UpdateSocket(); return true; } void -MpdIdleSource::Leave() +MpdIdleSource::Leave() noexcept { - if (id == 0) + if (io_events == 0) /* already left, callback was invoked */ return; - g_source_remove(id); - id = 0; + socket.cancel(); io_events = 0; enum mpd_idle events = idle_events == 0 @@ -319,11 +250,11 @@ ? mpd_connection_get_server_error(connection) : (enum mpd_server_error)0; - mpd_glib_invoke_error(this, error, server_error, - mpd_connection_get_error_message(connection)); + InvokeError(error, server_error, + mpd_connection_get_error_message(connection)); return; } idle_events |= events; - mpd_glib_invoke(this); + InvokeCallback(); }
View file
ncmpc-0.30.tar.xz/src/gidle.hxx -> ncmpc-0.32.tar.xz/src/gidle.hxx
Changed
@@ -29,34 +29,38 @@ #ifndef MPD_GLIB_SOURCE_H #define MPD_GLIB_SOURCE_H +#include "AsioServiceFwd.hxx" + #include <mpd/client.h> -typedef struct _GIOChannel GIOChannel; +#include <boost/asio/posix/stream_descriptor.hpp> -typedef void (*mpd_glib_callback_t)(enum mpd_error error, - enum mpd_server_error server_error, - const char *message, - unsigned events, void *ctx); +class MpdIdleHandler { +public: + virtual void OnIdle(unsigned events) noexcept = 0; + virtual void OnIdleError(enum mpd_error error, + enum mpd_server_error server_error, + const char *message) noexcept = 0; +}; -struct MpdIdleSource { +class MpdIdleSource { struct mpd_connection *connection; struct mpd_async *async; struct mpd_parser *parser; - mpd_glib_callback_t callback; - void *callback_ctx; + MpdIdleHandler &handler; - GIOChannel *channel; + boost::asio::posix::stream_descriptor socket; unsigned io_events = 0; - unsigned id = 0; - unsigned idle_events; - MpdIdleSource(struct mpd_connection &_connection, - mpd_glib_callback_t _callback, void *_callback_ctx); - ~MpdIdleSource(); +public: + MpdIdleSource(boost::asio::io_service &io_service, + struct mpd_connection &_connection, + MpdIdleHandler &_handler) noexcept; + ~MpdIdleSource() noexcept; /** * Enters idle mode. @@ -64,12 +68,47 @@ * @return true if idle mode has been entered, false if not * (e.g. I/O error) */ - bool Enter(); + bool Enter() noexcept; /** * Leaves idle mode and invokes the callback if there were events. */ - void Leave(); + void Leave() noexcept; + +private: + void InvokeCallback() noexcept { + if (idle_events != 0) + handler.OnIdle(idle_events); + } + + void InvokeError(enum mpd_error error, + enum mpd_server_error server_error, + const char *message) noexcept { + handler.OnIdleError(error, server_error, message); + } + + void InvokeAsyncError() noexcept; + + /** + * Parses a response line from MPD. + * + * @return true on success, false on error + */ + bool Feed(char *line) noexcept; + + /** + * Receives and evaluates a portion of the MPD response. + * + * @return true on success, false on error + */ + bool Receive() noexcept; + + void OnReadable(const boost::system::error_code &error) noexcept; + void OnWritable(const boost::system::error_code &error) noexcept; + + void AsyncRead() noexcept; + void AsyncWrite() noexcept; + void UpdateSocket() noexcept; }; #endif
View file
ncmpc-0.30.tar.xz/src/hscroll.cxx -> ncmpc-0.32.tar.xz/src/hscroll.cxx
Changed
@@ -18,69 +18,65 @@ */ #include "hscroll.hxx" +#include "Styles.hxx" #include "charset.hxx" -#include "ncfix.h" -#include "Event.hxx" #include <algorithm> #include <assert.h> -inline bool -hscroll::TimerCallback() +inline void +hscroll::TimerCallback(const boost::system::error_code &error) noexcept { + if (error) + return; + Step(); Paint(); wrefresh(w); - return true; + ScheduleTimer(); } void -hscroll::Set(unsigned _x, unsigned _y, unsigned _width, const char *_text) +hscroll::Set(unsigned _x, unsigned _y, unsigned _width, const char *_text, + Style _style, attr_t _attr) noexcept { assert(w != nullptr); assert(_text != nullptr); x = _x; y = _y; + style = _style; + attr = _attr; if (!basic.Set(_width, _text)) return; - /* obtain the ncurses attributes and the current color, store - them */ - fix_wattr_get(w, &attrs, &pair, nullptr); - - if (source_id == 0) - source_id = ScheduleTimeout<hscroll, &hscroll::TimerCallback>(std::chrono::seconds(1), *this); + ScheduleTimer(); } void -hscroll::Clear() +hscroll::Clear() noexcept { basic.Clear(); - - if (source_id != 0) - g_source_remove(std::exchange(source_id, 0)); + timer.cancel(); } void -hscroll::Paint() const +hscroll::Paint() const noexcept { assert(w != nullptr); assert(basic.IsDefined()); - /* set stored attributes and color */ - attr_t old_attrs; - short old_pair; - fix_wattr_get(w, &old_attrs, &old_pair, nullptr); - wattr_set(w, attrs, pair, nullptr); + SelectStyle(w, style); + + if (attr != 0) + wattron(w, attr); /* scroll the string, and draw it */ - char *p = basic.ScrollString(); - mvwaddstr(w, y, x, p); - g_free(p); + const auto s = basic.ScrollString(); + mvwaddnstr(w, y, x, s.first, s.second); - /* restore previous attributes and color */ - wattr_set(w, old_attrs, old_pair, nullptr); + if (attr != 0) + wattroff(w, attr); }
View file
ncmpc-0.30.tar.xz/src/hscroll.hxx -> ncmpc-0.32.tar.xz/src/hscroll.hxx
Changed
@@ -20,9 +20,14 @@ #ifndef HSCROLL_H #define HSCROLL_H -#include "config.h" -#include "ncmpc_curses.h" #include "BasicMarquee.hxx" +#include "AsioServiceFwd.hxx" + +#include <curses.h> + +#include <boost/asio/steady_timer.hpp> + +enum class Style : unsigned; /** * This class is used to auto-scroll text which does not fit on the @@ -41,27 +46,25 @@ unsigned x, y; /** - * ncurses attributes for drawing the text. + * Style for drawing the text. */ - attr_t attrs; + Style style; - /** - * ncurses colors for drawing the text. - */ - short pair; + attr_t attr; /** - * The id of the timer which updates the scrolled area every - * second. + * A timer which updates the scrolled area every second. */ - unsigned source_id = 0; + boost::asio::steady_timer timer; public: - hscroll(WINDOW *_w, const char *_separator) - :w(_w), basic(_separator) { + hscroll(boost::asio::io_service &io_service, + WINDOW *_w, const char *_separator) noexcept + :w(_w), basic(_separator), timer(io_service) + { } - bool IsDefined() const { + bool IsDefined() const noexcept { return basic.IsDefined(); } @@ -70,19 +73,20 @@ * every second with the current window attributes. Call * hscroll_clear() to disable it. */ - void Set(unsigned x, unsigned y, unsigned width, const char *text); + void Set(unsigned x, unsigned y, unsigned width, const char *text, + Style style, attr_t attr=0) noexcept; /** * Removes the text and the timer. It may be reused with * Set(). */ - void Clear(); + void Clear() noexcept; - void Rewind() { + void Rewind() noexcept { basic.Rewind(); } - void Step() { + void Step() noexcept { basic.Step(); } @@ -90,10 +94,17 @@ * Explicitly draws the scrolled text. Calling this function * is only allowed if there is a text currently. */ - void Paint() const; + void Paint() const noexcept; private: - bool TimerCallback(); + void TimerCallback(const boost::system::error_code &error) noexcept; + + void ScheduleTimer() noexcept { + boost::system::error_code error; + timer.expires_from_now(std::chrono::seconds(1), error); + timer.async_wait(std::bind(&hscroll::TimerCallback, this, + std::placeholders::_1)); + } }; #endif
View file
ncmpc-0.30.tar.xz/src/i18n.h -> ncmpc-0.32.tar.xz/src/i18n.h
Changed
@@ -35,6 +35,7 @@ #endif #else +#define gettext(x) (x) #define _(x) x #define N_(x) x #endif
View file
ncmpc-0.32.tar.xz/src/io
Added
+(directory)
View file
ncmpc-0.32.tar.xz/src/io/Path.hxx
Added
@@ -0,0 +1,126 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef IO_PATH_HXX +#define IO_PATH_HXX + +#include "util/Compiler.h" + +#include <string> + +#include <string.h> + +namespace PathDetail { + +#ifdef _WIN32 +static constexpr char SEPARATOR = '\\'; +#else +static constexpr char SEPARATOR = '/'; +#endif + +gcc_pure +inline size_t +GetLength(const char *s) noexcept +{ + return strlen(s); +} + +gcc_pure +inline size_t +GetLength(const std::string &s) noexcept +{ + return s.length(); +} + +template<typename... Args> +inline size_t +FillLengths(size_t *lengths, Args&&... args) noexcept; + +template<typename First, typename... Args> +inline size_t +FillLengths(size_t *lengths, First &&first, Args&&... args) noexcept +{ + size_t length = GetLength(std::forward<First>(first)); + *lengths++ = length; + return length + FillLengths(lengths, std::forward<Args>(args)...); +} + +template<> +inline size_t +FillLengths(size_t *) noexcept +{ + return 0; +} + +inline std::string & +Append(std::string &dest, const std::string &value, size_t length) noexcept +{ + return dest.append(value, 0, length); +} + +inline std::string & +Append(std::string &dest, const char *value, size_t length) noexcept +{ + return dest.append(value, length); +} + +template<typename... Args> +inline std::string & +AppendWithSeparators(std::string &dest, const size_t *lengths, + Args&&... args) noexcept; + +template<typename First, typename... Args> +inline std::string & +AppendWithSeparators(std::string &dest, const size_t *lengths, + First &&first, Args&&... args) noexcept +{ + dest.push_back(SEPARATOR); + return AppendWithSeparators(Append(dest, std::forward<First>(first), + *lengths), + lengths + 1, + std::forward<Args>(args)...); +} + +template<> +inline std::string & +AppendWithSeparators(std::string &dest, const size_t *) noexcept +{ + return dest; +} + +} // namespace PathDetail + +template<typename First, typename... Args> +std::string +BuildPath(First &&first, Args&&... args) noexcept +{ + constexpr size_t n = sizeof...(args); + + size_t lengths[n + 1]; + const size_t total = PathDetail::FillLengths(lengths, first, args...); + + std::string result; + result.reserve(total + n); + PathDetail::Append(result, std::forward<First>(first), lengths[0]); + PathDetail::AppendWithSeparators(result, lengths + 1, + std::forward<Args>(args)...); + return result; +} + +#endif
View file
ncmpc-0.30.tar.xz/src/keyboard.cxx -> ncmpc-0.32.tar.xz/src/keyboard.cxx
Changed
@@ -19,15 +19,12 @@ #include "config.h" #include "keyboard.hxx" -#include "command.hxx" +#include "Command.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "ncmpc.hxx" -#include "ncmpc_curses.h" -#include "screen.hxx" -#include "Compiler.h" - -#include <glib.h> - -#include <unistd.h> +#include "Point.hxx" +#include "util/Compiler.h" static bool ignore_key(int key) @@ -36,22 +33,25 @@ } gcc_pure -static command_t +static Command translate_key(int key) { - return get_key_command(key); + return GetGlobalKeyBindings().FindKey(key); } -static gboolean -keyboard_event(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, - gpointer data) +void +UserInput::OnReadable(const boost::system::error_code &error) { - auto *w = (WINDOW *)data; + if (error) { + d.get_io_service().stop(); + return; + } - int key = wgetch(w); - if (ignore_key(key)) - return true; + int key = wgetch(&w); + if (ignore_key(key)) { + AsyncWait(); + return; + } #ifdef HAVE_GETMOUSE if (key == KEY_MOUSE) { @@ -68,38 +68,40 @@ do_mouse_event({event.x, event.y}, event.bstate); end_input_event(); - return true; + AsyncWait(); + return; } #endif - command_t cmd = translate_key(key); - if (cmd == CMD_NONE) - return true; + Command cmd = translate_key(key); + if (cmd == Command::NONE) { + AsyncWait(); + return; + } begin_input_event(); - if (!do_input_event(cmd)) - return false; + if (!do_input_event(d.get_io_service(), cmd)) + return; end_input_event(); - return true; + AsyncWait(); } -void -keyboard_init(WINDOW *w) +UserInput::UserInput(boost::asio::io_service &io_service, WINDOW &_w) + :d(io_service), w(_w) { - GIOChannel *channel = g_io_channel_unix_new(STDIN_FILENO); - g_io_add_watch(channel, G_IO_IN, keyboard_event, w); - g_io_channel_unref(channel); + d.assign(STDIN_FILENO); + AsyncWait(); } void -keyboard_unread(int key) +keyboard_unread(boost::asio::io_service &io_service, int key) { if (ignore_key(key)) return; - command_t cmd = translate_key(key); - if (cmd != CMD_NONE) - do_input_event(cmd); + Command cmd = translate_key(key); + if (cmd != Command::NONE) + do_input_event(io_service, cmd); }
View file
ncmpc-0.30.tar.xz/src/keyboard.hxx -> ncmpc-0.32.tar.xz/src/keyboard.hxx
Changed
@@ -20,12 +20,30 @@ #ifndef KEYBOARD_H #define KEYBOARD_H -#include "ncmpc_curses.h" +#include "AsioServiceFwd.hxx" -void -keyboard_init(WINDOW *w); +#include <boost/asio/posix/stream_descriptor.hpp> + +#include <curses.h> + +class UserInput { + boost::asio::posix::stream_descriptor d; + WINDOW &w; + +public: + UserInput(boost::asio::io_service &io_service, WINDOW &_w); + +private: + void AsyncWait() { + d.async_read_some(boost::asio::null_buffers(), + std::bind(&UserInput::OnReadable, this, + std::placeholders::_1)); + } + + void OnReadable(const boost::system::error_code &error); +}; void -keyboard_unread(int key); +keyboard_unread(boost::asio::io_service &io_service, int key); #endif
View file
ncmpc-0.30.tar.xz/src/lirc.cxx -> ncmpc-0.32.tar.xz/src/lirc.cxx
Changed
@@ -19,42 +19,39 @@ #include "lirc.hxx" #include "ncmpc.hxx" -#include "Compiler.h" +#include "Bindings.hxx" +#include "util/Compiler.h" #include <lirc/lirc_client.h> -#include <glib.h> - -static struct lirc_config *lc = nullptr; - -static gboolean -lirc_event(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, gcc_unused gpointer data) +void +LircInput::OnReadable(const boost::system::error_code &error) { + if (error) + return; + char *code, *txt; - command_t cmd; begin_input_event(); if (lirc_nextcode(&code) == 0) { while (lirc_code2char(lc, code, &txt) == 0 && txt != nullptr) { - cmd = get_key_command_from_name(txt); - if (!do_input_event(cmd)) - return false; + const auto cmd = get_key_command_from_name(txt); + if (!do_input_event(d.get_io_service(), cmd)) + return; } } end_input_event(); - return true; + AsyncWait(); } -void -ncmpc_lirc_init() +LircInput::LircInput(boost::asio::io_service &io_service) + :d(io_service) { - char prog[] = "ncmpc"; int lirc_socket = 0; - if ((lirc_socket = lirc_init(prog, 0)) == -1) + if ((lirc_socket = lirc_init(PACKAGE, 0)) == -1) return; if (lirc_readconfig(nullptr, &lc, nullptr)) { @@ -62,15 +59,14 @@ return; } - GIOChannel *channel = g_io_channel_unix_new(lirc_socket); - g_io_add_watch(channel, G_IO_IN, lirc_event, nullptr); - g_io_channel_unref(channel); + d.assign(lirc_socket); + AsyncWait(); } -void -ncmpc_lirc_deinit() +LircInput::~LircInput() { if (lc) lirc_freeconfig(lc); - lirc_deinit(); + if (d.is_open()) + lirc_deinit(); }
View file
ncmpc-0.30.tar.xz/src/lirc.hxx -> ncmpc-0.32.tar.xz/src/lirc.hxx
Changed
@@ -20,24 +20,26 @@ #ifndef LIRC_H #define LIRC_H -#include "config.h" +#include "AsioServiceFwd.hxx" -#ifdef ENABLE_LIRC +#include <boost/asio/posix/stream_descriptor.hpp> -void -ncmpc_lirc_init(); +class LircInput { + boost::asio::posix::stream_descriptor d; + struct lirc_config *lc = nullptr; -void -ncmpc_lirc_deinit(); +public: + explicit LircInput(boost::asio::io_service &io_service); + ~LircInput(); -#else +private: + void AsyncWait() { + d.async_read_some(boost::asio::null_buffers(), + std::bind(&LircInput::OnReadable, this, + std::placeholders::_1)); + } -static inline void -ncmpc_lirc_init(void) {} - -static inline void -ncmpc_lirc_deinit(void) {} - -#endif + void OnReadable(const boost::system::error_code &error); +}; #endif
View file
ncmpc-0.30.tar.xz/src/lyrics.cxx -> ncmpc-0.32.tar.xz/src/lyrics.cxx
Changed
@@ -30,13 +30,14 @@ } PluginCycle * -lyrics_load(const char *artist, const char *title, +lyrics_load(boost::asio::io_service &io_service, + const char *artist, const char *title, plugin_callback_t callback, void *data) { const char *args[3] = { artist, title, nullptr }; if (artist == nullptr || title == nullptr) - return plugin_run(&empty, args, callback, data); + return plugin_run(io_service, &empty, args, callback, data); - return plugin_run(&plugins, args, callback, data); + return plugin_run(io_service, &plugins, args, callback, data); }
View file
ncmpc-0.30.tar.xz/src/lyrics.hxx -> ncmpc-0.32.tar.xz/src/lyrics.hxx
Changed
@@ -21,13 +21,15 @@ #define LYRICS_H #include "plugin.hxx" +#include "AsioServiceFwd.hxx" struct PluginCycle; void lyrics_init(); PluginCycle * -lyrics_load(const char *artist, const char *title, +lyrics_load(boost::asio::io_service &io_service, + const char *artist, const char *title, plugin_callback_t callback, void *callback_data); #endif
View file
ncmpc-0.30.tar.xz/src/mpdclient.cxx -> ncmpc-0.32.tar.xz/src/mpdclient.cxx
Changed
@@ -24,72 +24,49 @@ #include "gidle.hxx" #include "charset.hxx" -#ifdef ENABLE_ASYNC_CONNECT -#include "aconnect.hxx" -#endif - #include <mpd/client.h> -#include <glib.h> - #include <assert.h> -static gboolean -mpdclient_enter_idle_callback(gpointer user_data) +void +mpdclient::OnEnterIdleTimer(const boost::system::error_code &error) noexcept { - auto *c = (struct mpdclient *)user_data; - assert(c->enter_idle_source_id != 0); - assert(c->source != nullptr); - assert(!c->idle); - - c->enter_idle_source_id = 0; - c->idle = c->source->Enter(); - return false; -} + if (error) + return; -static void -mpdclient_schedule_enter_idle(struct mpdclient *c) -{ - assert(c != nullptr); - assert(c->source != nullptr); + assert(source != nullptr); + assert(!idle); - if (c->enter_idle_source_id == 0) - /* automatically re-enter MPD "idle" mode */ - c->enter_idle_source_id = - g_idle_add(mpdclient_enter_idle_callback, c); + idle = source->Enter(); } -static void -mpdclient_cancel_enter_idle(struct mpdclient *c) +void +mpdclient::ScheduleEnterIdle() noexcept { - if (c->enter_idle_source_id != 0) { - g_source_remove(c->enter_idle_source_id); - c->enter_idle_source_id = 0; - } + assert(source != nullptr); + + /* automatically re-enter MPD "idle" mode */ + boost::system::error_code error; + enter_idle_timer.expires_from_now(std::chrono::seconds(0), error); + enter_idle_timer.async_wait(std::bind(&mpdclient::OnEnterIdleTimer, + this, std::placeholders::_1)); } static void mpdclient_invoke_error_callback(enum mpd_error error, const char *message) { - char *allocated; if (error == MPD_ERROR_SERVER) /* server errors are UTF-8, the others are locale */ - message = allocated = utf8_to_locale(message); + mpdclient_error_callback(Utf8ToLocale(message).c_str()); else - allocated = nullptr; - - mpdclient_error_callback(message); - g_free(allocated); + mpdclient_error_callback(message); } -static void -mpdclient_invoke_error_callback1(struct mpdclient *c) +void +mpdclient::InvokeErrorCallback() noexcept { - assert(c != nullptr); - assert(c->connection != nullptr); - - struct mpd_connection *connection = c->connection; + assert(connection != nullptr); enum mpd_error error = mpd_connection_get_error(connection); assert(error != MPD_ERROR_SUCCESS); @@ -98,34 +75,35 @@ mpd_connection_get_error_message(connection)); } -static void -mpdclient_gidle_callback(enum mpd_error error, - gcc_unused enum mpd_server_error server_error, - const char *message, unsigned events, - void *ctx) +void +mpdclient::OnIdle(unsigned _events) noexcept { - auto *c = (struct mpdclient *)ctx; + assert(IsConnected()); - c->idle = false; + idle = false; - assert(c->IsConnected()); + events |= _events; + Update(); - if (error != MPD_ERROR_SUCCESS) { - mpdclient_invoke_error_callback(error, message); - c->Disconnect(); - mpdclient_lost_callback(); - return; - } + mpdclient_idle_callback(events); + events = 0; - c->events |= events; - c->Update(); + if (source != nullptr) + ScheduleEnterIdle(); +} - mpdclient_idle_callback(c->events); +void +mpdclient::OnIdleError(enum mpd_error error, + gcc_unused enum mpd_server_error server_error, + const char *message) noexcept +{ + assert(IsConnected()); - c->events = 0; + idle = false; - if (c->source != nullptr) - mpdclient_schedule_enter_idle(c); + mpdclient_invoke_error_callback(error, message); + Disconnect(); + mpdclient_lost_callback(); } /****************************************************************************/ @@ -156,7 +134,7 @@ } #ifdef ENABLE_ASYNC_CONNECT -#ifndef WIN32 +#ifndef _WIN32 static bool is_local_socket(const char *host) @@ -174,17 +152,19 @@ #endif #endif -mpdclient::mpdclient(const char *_host, unsigned _port, +mpdclient::mpdclient(boost::asio::io_service &io_service, + const char *_host, unsigned _port, unsigned _timeout_ms, const char *_password) - :timeout_ms(_timeout_ms), password(_password) + :timeout_ms(_timeout_ms), password(_password), + enter_idle_timer(io_service) { #ifdef ENABLE_ASYNC_CONNECT settings = mpd_settings_new(_host, _port, _timeout_ms, nullptr, nullptr); if (settings == nullptr) - g_error("Out of memory"); + fprintf(stderr, "Out of memory\n"); -#ifndef WIN32 +#ifndef _WIN32 settings2 = _host == nullptr && _port == 0 && settings_is_local_socket(settings) ? mpd_settings_new(_host, 6600, _timeout_ms, nullptr, nullptr) @@ -235,19 +215,19 @@ #endif } -static void -mpdclient_status_free(struct mpdclient *c) +void +mpdclient::ClearStatus() noexcept { - if (c->status == nullptr) + if (status == nullptr) return; - mpd_status_free(c->status); - c->status = nullptr; + mpd_status_free(status); + status = nullptr; - c->volume = -1; - c->playing = false; - c->playing_or_paused = false; - c->state = MPD_STATE_UNKNOWN; + volume = -1; + playing = false; + playing_or_paused = false; + state = MPD_STATE_UNKNOWN; } void @@ -260,7 +240,7 @@ } #endif - mpdclient_cancel_enter_idle(this); + CancelEnterIdle(); delete source; source = nullptr; @@ -272,53 +252,50 @@ } connection = nullptr; - mpdclient_status_free(this); + ClearStatus(); playlist.clear(); - if (song) - song = nullptr; + current_song = nullptr; /* everything has changed after a disconnect */ events |= MPD_IDLE_ALL; } -static bool -mpdclient_connected(struct mpdclient *c, - struct mpd_connection *connection) +bool +mpdclient::OnConnected(struct mpd_connection *_connection) noexcept { - c->connection = connection; + connection = _connection; if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) { - mpdclient_invoke_error_callback1(c); - c->Disconnect(); + InvokeErrorCallback(); + Disconnect(); mpdclient_failed_callback(); return false; } #ifdef ENABLE_ASYNC_CONNECT - if (c->timeout_ms > 0) - mpd_connection_set_timeout(connection, c->timeout_ms); + if (timeout_ms > 0) + mpd_connection_set_timeout(connection, timeout_ms); #endif /* send password */ - if (c->password != nullptr && - !mpd_run_password(connection, c->password)) { - mpdclient_invoke_error_callback1(c); - c->Disconnect(); + if (password != nullptr && + !mpd_run_password(connection, password)) { + InvokeErrorCallback(); + Disconnect(); mpdclient_failed_callback(); return false; } - c->source = new MpdIdleSource(*connection, - mpdclient_gidle_callback, c); - mpdclient_schedule_enter_idle(c); + source = new MpdIdleSource(get_io_service(), *connection, *this); + ScheduleEnterIdle(); - ++c->connection_id; + ++connection_id; /* everything has changed after a connection has been established */ - c->events = (enum mpd_idle)MPD_IDLE_ALL; + events = (enum mpd_idle)MPD_IDLE_ALL; mpdclient_connected_callback(); return true; @@ -326,51 +303,34 @@ #ifdef ENABLE_ASYNC_CONNECT -static void -mpdclient_aconnect_start(struct mpdclient *c, - const struct mpd_settings *settings); - -static const struct mpd_settings * -mpdclient_get_settings(const struct mpdclient *c) -{ -#ifndef WIN32 - if (c->connecting2) - return c->settings2; -#endif - - return c->settings; -} - -static void -mpdclient_connect_success(struct mpd_connection *connection, void *ctx) +void +mpdclient::OnAsyncMpdConnect(struct mpd_connection *_connection) noexcept { - auto *c = (struct mpdclient *)ctx; - assert(c->async_connect != nullptr); - c->async_connect = nullptr; + assert(async_connect != nullptr); + async_connect = nullptr; - const char *password = - mpd_settings_get_password(mpdclient_get_settings(c)); - if (password != nullptr && !mpd_run_password(connection, password)) { - mpdclient_error_callback(mpd_connection_get_error_message(connection)); - mpd_connection_free(connection); + const char *password2 = + mpd_settings_get_password(&GetSettings()); + if (password2 != nullptr && !mpd_run_password(_connection, password2)) { + mpdclient_error_callback(mpd_connection_get_error_message(_connection)); + mpd_connection_free(_connection); mpdclient_failed_callback(); return; } - mpdclient_connected(c, connection); + OnConnected(_connection); } -static void -mpdclient_connect_error(const char *message, void *ctx) +void +mpdclient::OnAsyncMpdConnectError(const char *message) noexcept { - auto *c = (struct mpdclient *)ctx; - assert(c->async_connect != nullptr); - c->async_connect = nullptr; + assert(async_connect != nullptr); + async_connect = nullptr; -#ifndef WIN32 - if (!c->connecting2 && c->settings2 != nullptr) { - c->connecting2 = true; - mpdclient_aconnect_start(c, c->settings2); +#ifndef _WIN32 + if (!connecting2 && settings2 != nullptr) { + connecting2 = true; + StartConnect(*settings2); return; } #endif @@ -379,19 +339,13 @@ mpdclient_failed_callback(); } -static constexpr AsyncMpdConnectHandler mpdclient_connect_handler = { - .success = mpdclient_connect_success, - .error = mpdclient_connect_error, -}; - -static void -mpdclient_aconnect_start(struct mpdclient *c, - const struct mpd_settings *settings) +void +mpdclient::StartConnect(const struct mpd_settings &s) noexcept { - aconnect_start(&c->async_connect, - mpd_settings_get_host(settings), - mpd_settings_get_port(settings), - mpdclient_connect_handler, c); + aconnect_start(get_io_service(), &async_connect, + mpd_settings_get_host(&s), + mpd_settings_get_port(&s), + *this); } #endif @@ -403,18 +357,18 @@ Disconnect(); #ifdef ENABLE_ASYNC_CONNECT -#ifndef WIN32 +#ifndef _WIN32 connecting2 = false; #endif - mpdclient_aconnect_start(this, settings); + StartConnect(*settings); #else /* connect to MPD */ struct mpd_connection *new_connection = mpd_connection_new(host, port, timeout_ms); if (new_connection == nullptr) - g_error("Out of memory"); + fprintf(stderr, "Out of memory\n"); - mpdclient_connected(this, new_connection); + OnConnected(new_connection); #endif } @@ -427,7 +381,7 @@ return false; /* free the old status */ - mpdclient_status_free(this); + ClearStatus(); /* retrieve new status */ status = mpd_run_status(c); @@ -453,9 +407,8 @@ } /* update the current song */ - if (song == nullptr || mpd_status_get_song_id(status) >= 0) { - song = playlist.GetChecked(mpd_status_get_song_pos(status)); - } + if (current_song == nullptr || mpd_status_get_song_id(status) >= 0) + current_song = playlist.GetChecked(mpd_status_get_song_pos(status)); return true; } @@ -468,26 +421,26 @@ source->Leave(); if (source != nullptr) - mpdclient_schedule_enter_idle(this); + ScheduleEnterIdle(); } return connection; } -static struct mpd_status * -mpdclient_recv_status(struct mpdclient *c) +const struct mpd_status * +mpdclient::ReceiveStatus() noexcept { - assert(c->connection != nullptr); + assert(connection != nullptr); - struct mpd_status *status = mpd_recv_status(c->connection); - if (status == nullptr) { - c->HandleError(); + struct mpd_status *new_status = mpd_recv_status(connection); + if (new_status == nullptr) { + HandleError(); return nullptr; } - if (c->status != nullptr) - mpd_status_free(c->status); - return c->status = status; + if (status != nullptr) + mpd_status_free(status); + return status = new_status; } /****************************************************************************/ @@ -522,78 +475,70 @@ } bool -mpdclient_cmd_clear(struct mpdclient *c) +mpdclient::RunClearQueue() noexcept { - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) + auto *c = GetConnection(); + if (c == nullptr) return false; /* send "clear" and "status" */ - if (!mpd_command_list_begin(connection, false) || - !mpd_send_clear(connection) || - !mpd_send_status(connection) || - !mpd_command_list_end(connection)) - return c->HandleError(); + if (!mpd_command_list_begin(c, false) || + !mpd_send_clear(c) || + !mpd_send_status(c) || + !mpd_command_list_end(c)) + return HandleError(); /* receive the new status, store it in the mpdclient struct */ - struct mpd_status *status = mpdclient_recv_status(c); - if (status == nullptr) + const struct mpd_status *new_status = ReceiveStatus(); + if (new_status == nullptr) return false; - if (!mpd_response_finish(connection)) - return c->HandleError(); + if (!mpd_response_finish(c)) + return HandleError(); /* update mpdclient.playlist */ - if (mpd_status_get_queue_length(status) == 0) { + if (mpd_status_get_queue_length(new_status) == 0) { /* after the "clear" command, the queue is really empty - this means we can clear it locally, reducing the UI latency */ - c->playlist.clear(); - c->playlist.version = mpd_status_get_queue_version(status); - c->song = nullptr; + playlist.clear(); + playlist.version = mpd_status_get_queue_version(new_status); + current_song = nullptr; } - c->events |= MPD_IDLE_QUEUE; + events |= MPD_IDLE_QUEUE; return true; } bool -mpdclient_cmd_volume(struct mpdclient *c, int value) +mpdclient::RunVolume(unsigned value) noexcept { - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) + struct mpd_connection *c = GetConnection(); + if (c == nullptr) return false; - mpd_send_set_volume(connection, value); - return c->FinishCommand(); + mpd_send_set_volume(c, value); + return FinishCommand(); } bool -mpdclient_cmd_volume_up(struct mpdclient *c) +mpdclient::RunVolumeUp() noexcept { - if (c->volume < 0 || c->volume >= 100) + if (volume < 0 || volume >= 100) return true; - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) - return false; - - return mpdclient_cmd_volume(c, ++c->volume); + return RunVolume(++volume); } bool -mpdclient_cmd_volume_down(struct mpdclient *c) +mpdclient::RunVolumeDown() noexcept { - if (c->volume <= 0) + if (volume <= 0) return true; - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) - return false; - - return mpdclient_cmd_volume(c, --c->volume); + return RunVolume(--volume); } bool @@ -608,56 +553,52 @@ } bool -mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song) +mpdclient::RunAdd(const struct mpd_song &song) noexcept { - assert(c != nullptr); - assert(song != nullptr); - - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr || c->status == nullptr) + auto *c = GetConnection(); + if (c == nullptr || status == nullptr) return false; /* send the add command to mpd; at the same time, get the new status (to verify the new playlist id) and the last song (we hope that's the song we just added) */ - if (!mpd_command_list_begin(connection, true) || - !mpd_send_add(connection, mpd_song_get_uri(song)) || - !mpd_send_status(connection) || - !mpd_send_get_queue_song_pos(connection, - c->playlist.size()) || - !mpd_command_list_end(connection) || - !mpd_response_next(connection)) - return c->HandleError(); + if (!mpd_command_list_begin(c, true) || + !mpd_send_add(c, mpd_song_get_uri(&song)) || + !mpd_send_status(c) || + !mpd_send_get_queue_song_pos(c, playlist.size()) || + !mpd_command_list_end(c) || + !mpd_response_next(c)) + return HandleError(); - c->events |= MPD_IDLE_QUEUE; + events |= MPD_IDLE_QUEUE; - struct mpd_status *status = mpdclient_recv_status(c); - if (status == nullptr) + const struct mpd_status *new_status = ReceiveStatus(); + if (new_status == nullptr) return false; - if (!mpd_response_next(connection)) - return c->HandleError(); + if (!mpd_response_next(c)) + return HandleError(); - struct mpd_song *new_song = mpd_recv_song(connection); - if (!mpd_response_finish(connection) || new_song == nullptr) { + struct mpd_song *new_song = mpd_recv_song(c); + if (!mpd_response_finish(c) || new_song == nullptr) { if (new_song != nullptr) mpd_song_free(new_song); - return mpd_connection_clear_error(connection) || - c->HandleError(); + return mpd_connection_clear_error(c) || + HandleError(); } - if (mpd_status_get_queue_length(status) == c->playlist.size() + 1 && - mpd_status_get_queue_version(status) == c->playlist.version + 1) { + if (mpd_status_get_queue_length(new_status) == playlist.size() + 1 && + mpd_status_get_queue_version(new_status) == playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ - c->playlist.version = mpd_status_get_queue_version(status); + playlist.version = mpd_status_get_queue_version(new_status); /* the song we just received has the correct id; append it to the local playlist */ - c->playlist.push_back(*new_song); + playlist.push_back(*new_song); } mpd_song_free(new_song); @@ -666,100 +607,99 @@ } bool -mpdclient_cmd_delete(struct mpdclient *c, int idx) +mpdclient::RunDelete(unsigned pos) noexcept { - struct mpd_connection *connection = c->GetConnection(); - - if (connection == nullptr || c->status == nullptr) + auto *c = GetConnection(); + if (c == nullptr || status == nullptr) return false; - if (idx < 0 || (guint)idx >= c->playlist.size()) + if (pos >= playlist.size()) return false; - const auto &song = c->playlist[idx]; + const auto &song = playlist[pos]; /* send the delete command to mpd; at the same time, get the new status (to verify the playlist id) */ - if (!mpd_command_list_begin(connection, false) || - !mpd_send_delete_id(connection, mpd_song_get_id(&song)) || - !mpd_send_status(connection) || - !mpd_command_list_end(connection)) - return c->HandleError(); + if (!mpd_command_list_begin(c, false) || + !mpd_send_delete_id(c, mpd_song_get_id(&song)) || + !mpd_send_status(c) || + !mpd_command_list_end(c)) + return HandleError(); - c->events |= MPD_IDLE_QUEUE; + events |= MPD_IDLE_QUEUE; - struct mpd_status *status = mpdclient_recv_status(c); - if (status == nullptr) + const struct mpd_status *new_status = ReceiveStatus(); + if (new_status == nullptr) return false; - if (!mpd_response_finish(connection)) - return c->HandleError(); + if (!mpd_response_finish(c)) + return HandleError(); - if (mpd_status_get_queue_length(status) == c->playlist.size() - 1 && - mpd_status_get_queue_version(status) == c->playlist.version + 1) { + if (mpd_status_get_queue_length(new_status) == playlist.size() - 1 && + mpd_status_get_queue_version(new_status) == playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ - c->playlist.version = mpd_status_get_queue_version(status); + playlist.version = mpd_status_get_queue_version(new_status); /* remove the song from the local playlist */ - c->playlist.RemoveIndex(idx); + playlist.RemoveIndex(pos); /* remove references to the song */ - if (c->song == &song) - c->song = nullptr; + if (current_song == &song) + current_song = nullptr; } return true; } bool -mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end) +mpdclient::RunDeleteRange(unsigned start, unsigned end) noexcept { if (end == start + 1) /* if that's not really a range, we choose to use the safer "deleteid" version */ - return mpdclient_cmd_delete(c, start); + return RunDelete(start); - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) + auto *c = GetConnection(); + if (c == nullptr) return false; /* send the delete command to mpd; at the same time, get the new status (to verify the playlist id) */ - if (!mpd_command_list_begin(connection, false) || - !mpd_send_delete_range(connection, start, end) || - !mpd_send_status(connection) || - !mpd_command_list_end(connection)) - return c->HandleError(); + if (!mpd_command_list_begin(c, false) || + !mpd_send_delete_range(c, start, end) || + !mpd_send_status(c) || + !mpd_command_list_end(c)) + return HandleError(); - c->events |= MPD_IDLE_QUEUE; + events |= MPD_IDLE_QUEUE; - struct mpd_status *status = mpdclient_recv_status(c); - if (status == nullptr) + const struct mpd_status *new_status = ReceiveStatus(); + if (new_status == nullptr) return false; - if (!mpd_response_finish(connection)) - return c->HandleError(); + if (!mpd_response_finish(c)) + return HandleError(); - if (mpd_status_get_queue_length(status) == c->playlist.size() - (end - start) && - mpd_status_get_queue_version(status) == c->playlist.version + 1) { + if (mpd_status_get_queue_length(new_status) == playlist.size() - (end - start) && + mpd_status_get_queue_version(new_status) == playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ - c->playlist.version = mpd_status_get_queue_version(status); + playlist.version = mpd_status_get_queue_version(new_status); /* remove the song from the local playlist */ while (end > start) { --end; /* remove references to the song */ - if (c->song == &c->playlist[end]) - c->song = nullptr; + if (current_song == &playlist[end]) + current_song = nullptr; - c->playlist.RemoveIndex(end); + playlist.RemoveIndex(end); } } @@ -767,42 +707,42 @@ } bool -mpdclient_cmd_move(struct mpdclient *c, unsigned dest_pos, unsigned src_pos) +mpdclient::RunMove(unsigned dest_pos, unsigned src_pos) noexcept { if (dest_pos == src_pos) return true; - struct mpd_connection *connection = c->GetConnection(); - if (connection == nullptr) + auto *c = GetConnection(); + if (c == nullptr) return false; /* send the "move" command to MPD; at the same time, get the new status (to verify the playlist id) */ - if (!mpd_command_list_begin(connection, false) || - !mpd_send_move(connection, src_pos, dest_pos) || - !mpd_send_status(connection) || - !mpd_command_list_end(connection)) - return c->HandleError(); + if (!mpd_command_list_begin(c, false) || + !mpd_send_move(c, src_pos, dest_pos) || + !mpd_send_status(c) || + !mpd_command_list_end(c)) + return HandleError(); - c->events |= MPD_IDLE_QUEUE; + events |= MPD_IDLE_QUEUE; - struct mpd_status *status = mpdclient_recv_status(c); + const struct mpd_status *new_status = ReceiveStatus(); if (status == nullptr) return false; - if (!mpd_response_finish(connection)) - return c->HandleError(); + if (!mpd_response_finish(c)) + return HandleError(); - if (mpd_status_get_queue_length(status) == c->playlist.size() && - mpd_status_get_queue_version(status) == c->playlist.version + 1) { + if (mpd_status_get_queue_length(new_status) == playlist.size() && + mpd_status_get_queue_version(new_status) == playlist.version + 1) { /* the cheap route: match on the new playlist length and its version, we can keep our local playlist copy in sync */ - c->playlist.version = mpd_status_get_queue_version(status); + playlist.version = mpd_status_get_queue_version(new_status); /* swap songs in the local playlist */ - c->playlist.Move(dest_pos, src_pos); + playlist.Move(dest_pos, src_pos); } return true; @@ -876,7 +816,7 @@ } playlist.version = mpd_status_get_queue_version(status); - song = nullptr; + current_song = nullptr; return FinishCommand(); } @@ -895,7 +835,7 @@ while ((s = mpd_recv_song(c)) != nullptr) { int pos = mpd_song_get_pos(s); - if (pos >= 0 && (guint)pos < playlist.size()) { + if (pos >= 0 && (unsigned)pos < playlist.size()) { /* update song */ playlist.Replace(pos, *s); } else { @@ -914,7 +854,7 @@ playlist.RemoveIndex(playlist.size() - 1); } - song = nullptr; + current_song = nullptr; playlist.version = mpd_status_get_queue_version(status); return FinishCommand();
View file
ncmpc-0.30.tar.xz/src/mpdclient.hxx -> ncmpc-0.32.tar.xz/src/mpdclient.hxx
Changed
@@ -3,25 +3,38 @@ #include "config.h" #include "Queue.hxx" -#include "Compiler.h" +#include "gidle.hxx" +#include "util/Compiler.h" +#include "AsioServiceFwd.hxx" + +#ifdef ENABLE_ASYNC_CONNECT +#include "aconnect.hxx" +#endif #include <mpd/client.h> +#include <boost/asio/steady_timer.hpp> + #include <string> struct AsyncMpdConnect; struct MpdQueue; -struct MpdIdleSource; +class MpdIdleSource; class FileList; -struct mpdclient { +struct mpdclient final + : MpdIdleHandler +#ifdef ENABLE_ASYNC_CONNECT + , AsyncMpdConnectHandler +#endif +{ #ifdef ENABLE_ASYNC_CONNECT /** * These settings are used to connect to MPD asynchronously. */ struct mpd_settings *settings; -#ifndef WIN32 +#ifndef _WIN32 /** * A second set of settings, just in case #settings did not * work. This is only used if #settings refers to a local @@ -56,13 +69,13 @@ MpdIdleSource *source = nullptr; struct mpd_status *status = nullptr; - const struct mpd_song *song = nullptr; + const struct mpd_song *current_song = nullptr; /** - * The GLib source id which re-enters MPD idle mode before the - * next main loop interation. + * A timer which re-enters MPD idle mode before the next main + * loop iteration. */ - unsigned enter_idle_source_id = 0; + boost::asio::steady_timer enter_idle_timer; /** * This attribute is incremented whenever the connection changes @@ -79,7 +92,7 @@ enum mpd_state state = MPD_STATE_UNKNOWN; -#if defined(ENABLE_ASYNC_CONNECT) && !defined(WIN32) +#if defined(ENABLE_ASYNC_CONNECT) && !defined(_WIN32) bool connecting2; #endif @@ -99,7 +112,8 @@ */ bool playing_or_paused = false; - mpdclient(const char *host, unsigned port, + mpdclient(boost::asio::io_service &io_service, + const char *host, unsigned port, unsigned _timeout_ms, const char *_password); ~mpdclient() { @@ -108,13 +122,30 @@ #ifdef ENABLE_ASYNC_CONNECT mpd_settings_free(settings); -#ifndef WIN32 +#ifndef _WIN32 if (settings2 != nullptr) mpd_settings_free(settings2); #endif #endif } + auto &get_io_service() noexcept { + return enter_idle_timer.get_io_service(); + } + +#ifdef ENABLE_ASYNC_CONNECT + + const struct mpd_settings &GetSettings() const noexcept { +#ifndef _WIN32 + if (connecting2) + return *settings2; +#endif + + return *settings; + } + +#endif + /** * Determine a human-readable "name" of the settings currently used to * connect to MPD. @@ -142,9 +173,43 @@ } gcc_pure + int GetCurrentSongId() const noexcept { + return status != nullptr + ? mpd_status_get_song_id(status) + : -1; + } + + gcc_pure + int GetCurrentSongPos() const noexcept { + return status != nullptr + ? mpd_status_get_song_pos(status) + : -1; + } + + /** + * Returns the song that is "current". This can be valid even + * if MPD is not playing. + */ + gcc_pure const struct mpd_song *GetCurrentSong() const { - return song != nullptr && playing_or_paused - ? song + return current_song; + } + + gcc_pure + int GetPlayingSongId() const noexcept { + return playing_or_paused + ? GetCurrentSongId() + : -1; + } + + /** + * Returns the song that is currently being played (or + * paused). + */ + gcc_pure + const struct mpd_song *GetPlayingSong() const { + return playing_or_paused + ? GetCurrentSong() : nullptr; } @@ -162,9 +227,49 @@ bool Update(); + bool OnConnected(struct mpd_connection *_connection) noexcept; + + const struct mpd_status *ReceiveStatus() noexcept; + + bool RunVolume(unsigned new_volume) noexcept; + bool RunVolumeUp() noexcept; + bool RunVolumeDown() noexcept; + + bool RunClearQueue() noexcept; + bool RunAdd(const struct mpd_song &song) noexcept; + bool RunDelete(unsigned pos) noexcept; + bool RunDeleteRange(unsigned start, unsigned end) noexcept; + bool RunMove(unsigned dest, unsigned src) noexcept; + private: +#ifdef ENABLE_ASYNC_CONNECT + void StartConnect(const struct mpd_settings &s) noexcept; +#endif + + void InvokeErrorCallback() noexcept; + bool UpdateQueue(); bool UpdateQueueChanges(); + + void ClearStatus() noexcept; + + void ScheduleEnterIdle() noexcept; + void CancelEnterIdle() noexcept { + enter_idle_timer.cancel(); + } + void OnEnterIdleTimer(const boost::system::error_code &error) noexcept; + +#ifdef ENABLE_ASYNC_CONNECT + /* virtual methods from AsyncMpdConnectHandler */ + void OnAsyncMpdConnect(struct mpd_connection *c) noexcept override; + void OnAsyncMpdConnectError(const char *message) noexcept override; +#endif + + /* virtual methods from MpdIdleHandler */ + void OnIdle(unsigned events) noexcept override; + void OnIdleError(enum mpd_error error, + enum mpd_server_error server_error, + const char *message) noexcept override; }; enum { @@ -194,30 +299,9 @@ mpdclient_cmd_clear(struct mpdclient *c); bool -mpdclient_cmd_volume(struct mpdclient *c, int value); - -bool -mpdclient_cmd_volume_up(struct mpdclient *c); - -bool -mpdclient_cmd_volume_down(struct mpdclient *c); - -bool mpdclient_cmd_add_path(struct mpdclient *c, const char *path); bool -mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song); - -bool -mpdclient_cmd_delete(struct mpdclient *c, int index); - -bool -mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end); - -bool -mpdclient_cmd_move(struct mpdclient *c, unsigned dest, unsigned src); - -bool mpdclient_cmd_subscribe(struct mpdclient *c, const char *channel); bool
View file
ncmpc-0.30.tar.xz/src/ncmpc.hxx -> ncmpc-0.32.tar.xz/src/ncmpc.hxx
Changed
@@ -20,12 +20,13 @@ #ifndef NCMPC_H #define NCMPC_H -#include "command.hxx" +#include "AsioServiceFwd.hxx" #ifdef HAVE_GETMOUSE -#include "ncmpc_curses.h" +#include <curses.h> #endif +enum class Command : unsigned; struct Point; class ScreenManager; extern ScreenManager *screen; @@ -37,7 +38,7 @@ * @return false if the application shall quit */ bool -do_input_event(command_t cmd); +do_input_event(boost::asio::io_service &io_service, Command cmd); #ifdef HAVE_GETMOUSE void
View file
ncmpc-0.30.tar.xz/src/ncu.cxx -> ncmpc-0.32.tar.xz/src/ncu.cxx
Changed
@@ -19,16 +19,17 @@ #include "ncu.hxx" #include "config.h" -#include "ncmpc_curses.h" #ifdef ENABLE_COLORS -#include "colors.hxx" +#include "Styles.hxx" #endif #ifdef HAVE_GETMOUSE -#include "options.hxx" +#include "Options.hxx" #endif +#include <curses.h> + static SCREEN *ncu_screen; void @@ -39,7 +40,7 @@ /* initialize color support */ #ifdef ENABLE_COLORS - colors_start(); + ApplyStyles(); #endif /* tell curses not to do NL->CR/NL on output */
View file
ncmpc-0.32.tar.xz/src/net/AsyncConnect.cxx
Added
@@ -0,0 +1,55 @@ +/* ncmpc (Ncurses MPD Client) + (c) 2004-2018 The Music Player Daemon Project + Project homepage: http://musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "AsyncConnect.hxx" +#include "AsyncHandler.hxx" + +void +AsyncConnect::OnConnected(const boost::system::error_code &error) noexcept +{ + if (error) { + if (error == boost::asio::error::operation_aborted) + /* this object has already been deleted; bail out + quickly without touching anything */ + return; + + socket.close(); + handler.OnConnectError(error.message().c_str()); + return; + } + + handler.OnConnect(std::move(socket)); +} + +void +AsyncConnect::Start(const boost::asio::ip::tcp::endpoint &endpoint) noexcept +{ + socket.async_connect(endpoint, + std::bind(&AsyncConnect::OnConnected, this, + std::placeholders::_1)); +}
View file
ncmpc-0.32.tar.xz/src/net/AsyncConnect.hxx
Added
@@ -0,0 +1,58 @@ +/* ncmpc (Ncurses MPD Client) + (c) 2004-2018 The Music Player Daemon Project + Project homepage: http://musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef NET_ASYNC_CONNECT_HXX +#define NET_ASYNC_CONNECT_HXX + +#include "AsioServiceFwd.hxx" + +#include <boost/asio/ip/tcp.hpp> + +class AsyncConnectHandler; + +class AsyncConnect { + AsyncConnectHandler &handler; + + boost::asio::ip::tcp::socket socket; + +public: + AsyncConnect(boost::asio::io_service &io_service, + AsyncConnectHandler &_handler) noexcept + :handler(_handler), + socket(io_service) {} + + /** + * Create a socket and connect it to the given address. + */ + void Start(const boost::asio::ip::tcp::endpoint &endpoint) noexcept; + +private: + void OnConnected(const boost::system::error_code &error) noexcept; +}; + +#endif
View file
ncmpc-0.32.tar.xz/src/net/AsyncHandler.hxx
Added
@@ -0,0 +1,40 @@ +/* ncmpc (Ncurses MPD Client) + (c) 2004-2018 The Music Player Daemon Project + Project homepage: http://musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef NET_ASYNC_HANDLER_HXX +#define NET_ASYNC_HANDLER_HXX + +#include <boost/asio/generic/stream_protocol.hpp> + +class AsyncConnectHandler { +public: + virtual void OnConnect(boost::asio::generic::stream_protocol::socket socket) = 0; + virtual void OnConnectError(const char *message) = 0; +}; + +#endif
View file
ncmpc-0.32.tar.xz/src/net/AsyncResolveConnect.cxx
Added
@@ -0,0 +1,89 @@ +/* ncmpc (Ncurses MPD Client) + (c) 2004-2018 The Music Player Daemon Project + Project homepage: http://musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "AsyncResolveConnect.hxx" +#include "AsyncConnect.hxx" +#include "AsyncHandler.hxx" + +#ifndef _WIN32 +#include <boost/asio/local/stream_protocol.hpp> +#endif + +#include <string> + +void +AsyncResolveConnect::OnResolved(const boost::system::error_code &error, + boost::asio::ip::tcp::resolver::iterator i) noexcept +{ + if (error) { + if (error == boost::asio::error::operation_aborted) + /* this object has already been deleted; bail + out quickly without touching anything */ + return; + + handler.OnConnectError(error.message().c_str()); + return; + } + + connect.Start(*i); +} + +void +AsyncResolveConnect::Start(const char *host, unsigned port) noexcept +{ +#ifndef _WIN32 + if (host[0] == '/' || host[0] == '@') { + std::string s(host); + if (host[0] == '@') + /* abstract socket */ + s.front() = 0; + + boost::asio::local::stream_protocol::endpoint ep(std::move(s)); + boost::asio::local::stream_protocol::socket socket(resolver.get_io_service()); + + boost::system::error_code error; + socket.connect(ep, error); + if (error) { + handler.OnConnectError(error.message().c_str()); + return; + } + + handler.OnConnect(std::move(socket)); + return; + } +#endif /* _WIN32 */ + + char service[20]; + snprintf(service, sizeof(service), "%u", port); + + resolver.async_resolve({host, service}, + std::bind(&AsyncResolveConnect::OnResolved, + this, + std::placeholders::_1, + std::placeholders::_2)); +}
View file
ncmpc-0.32.tar.xz/src/net/AsyncResolveConnect.hxx
Added
@@ -0,0 +1,57 @@ +/* ncmpc (Ncurses MPD Client) + (c) 2004-2018 The Music Player Daemon Project + Project homepage: http://musicpd.org + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + - Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + - Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR + CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef NET_ASYNC_RESOLVE_CONNECT_HXX +#define NET_ASYNC_RESOLVE_CONNECT_HXX + +#include "AsyncConnect.hxx" + +class AsyncResolveConnect { + AsyncConnectHandler &handler; + + boost::asio::ip::tcp::resolver resolver; + + AsyncConnect connect; + +public: + AsyncResolveConnect(boost::asio::io_service &io_service, + AsyncConnectHandler &_handler) noexcept + :handler(_handler), resolver(io_service), + connect(io_service, _handler) {} + + /** + * Resolve a host name and connect to it asynchronously. + */ + void Start(const char *host, unsigned port) noexcept; + +private: + void OnResolved(const boost::system::error_code &error, + boost::asio::ip::tcp::resolver::iterator i) noexcept; +}; + +#endif
View file
ncmpc-0.30.tar.xz/src/paint.hxx -> ncmpc-0.32.tar.xz/src/paint.hxx
Changed
@@ -20,17 +20,17 @@ #ifndef NCMPC_PAINT_H #define NCMPC_PAINT_H -#include "colors.hxx" -#include "options.hxx" +#include "Styles.hxx" +#include "Options.hxx" /** * Sets the specified color, and enables "reverse" mode if selected is * true. */ static inline void -row_color(WINDOW *w, enum color color, bool selected) +row_color(WINDOW *w, Style style, bool selected) { - colors_use(w, color); + SelectStyle(w, style); if (selected) wattron(w, A_REVERSE); @@ -67,10 +67,10 @@ */ static inline void row_paint_text(WINDOW *w, unsigned width, - enum color color, bool selected, + Style style, bool selected, const char *text) { - row_color(w, color, selected); + row_color(w, style, selected); waddstr(w, text);
View file
ncmpc-0.30.tar.xz/src/player_command.cxx -> ncmpc-0.32.tar.xz/src/player_command.cxx
Changed
@@ -18,102 +18,31 @@ */ #include "player_command.hxx" +#include "DelayedSeek.hxx" +#include "Command.hxx" #include "mpdclient.hxx" -#include "options.hxx" +#include "Options.hxx" #include "i18n.h" #include "screen_client.hxx" #include "screen_status.hxx" -#include <glib.h> - -int seek_id = -1; -int seek_target_time; - -static guint seek_source_id; - -static void -commit_seek(struct mpdclient &c) -{ - if (seek_id < 0) - return; - - struct mpd_connection *connection = c.GetConnection(); - if (connection == nullptr) { - seek_id = -1; - return; - } - - if (c.song != nullptr && (unsigned)seek_id == mpd_song_get_id(c.song)) - if (!mpd_run_seek_id(connection, seek_id, seek_target_time)) - c.HandleError(); - - seek_id = -1; -} - -/** - * This timer is invoked after seeking when the user hasn't typed a - * key for 500ms. It is used to do the real seeking. - */ -static gboolean -seek_timer(gpointer data) -{ - auto &c = *(struct mpdclient *)data; - - seek_source_id = 0; - commit_seek(c); - return false; -} - -static void -schedule_seek_timer(struct mpdclient &c) -{ - assert(seek_source_id == 0); - - seek_source_id = g_timeout_add(500, seek_timer, &c); -} - -void -cancel_seek_timer() -{ - if (seek_source_id != 0) { - g_source_remove(seek_source_id); - seek_source_id = 0; - } -} - -static bool -setup_seek(struct mpdclient &c) -{ - if (!c.playing_or_paused) - return false; - - if (seek_id != (int)mpd_status_get_song_id(c.status)) { - seek_id = mpd_status_get_song_id(c.status); - seek_target_time = mpd_status_get_elapsed_time(c.status); - } - - schedule_seek_timer(c); - - return true; -} - bool -handle_player_command(struct mpdclient &c, command_t cmd) +handle_player_command(struct mpdclient &c, DelayedSeek &seek, Command cmd) { if (!c.IsConnected() || c.status == nullptr) return false; - cancel_seek_timer(); + seek.Cancel(); switch(cmd) { struct mpd_connection *connection; /* - case CMD_PLAY: + case Command::PLAY: mpdclient_cmd_play(c, MPD_PLAY_AT_BEGINNING); break; */ - case CMD_PAUSE: + case Command::PAUSE: connection = c.GetConnection(); if (connection == nullptr) break; @@ -121,7 +50,7 @@ if (!mpd_run_pause(connection, c.state != MPD_STATE_PAUSE)) c.HandleError(); break; - case CMD_STOP: + case Command::STOP: connection = c.GetConnection(); if (connection == nullptr) break; @@ -129,19 +58,14 @@ if (!mpd_run_stop(connection)) c.HandleError(); break; - case CMD_CROP: + case Command::CROP: mpdclient_cmd_crop(&c); break; - case CMD_SEEK_FORWARD: - if (!setup_seek(c)) - break; - - seek_target_time += options.seek_time; - if (seek_target_time > (int)mpd_status_get_total_time(c.status)) - seek_target_time = mpd_status_get_total_time(c.status); + case Command::SEEK_FORWARD: + seek.Seek(options.seek_time); break; - case CMD_TRACK_NEXT: + case Command::TRACK_NEXT: connection = c.GetConnection(); if (connection == nullptr) break; @@ -149,16 +73,11 @@ if (!mpd_run_next(connection)) c.HandleError(); break; - case CMD_SEEK_BACKWARD: - if (!setup_seek(c)) - break; - - seek_target_time -= options.seek_time; - if (seek_target_time < 0) - seek_target_time = 0; + case Command::SEEK_BACKWARD: + seek.Seek(-int(options.seek_time)); break; - case CMD_TRACK_PREVIOUS: + case Command::TRACK_PREVIOUS: connection = c.GetConnection(); if (connection == nullptr) break; @@ -166,7 +85,7 @@ if (!mpd_run_previous(connection)) c.HandleError(); break; - case CMD_SHUFFLE: + case Command::SHUFFLE: connection = c.GetConnection(); if (connection == nullptr) break; @@ -176,15 +95,11 @@ else c.HandleError(); break; - case CMD_CLEAR: - connection = c.GetConnection(); - if (connection == nullptr) - break; - - if (mpdclient_cmd_clear(&c)) + case Command::CLEAR: + if (c.RunClearQueue()) screen_status_message(_("Cleared queue")); break; - case CMD_REPEAT: + case Command::REPEAT: connection = c.GetConnection(); if (connection == nullptr) break; @@ -193,7 +108,7 @@ !mpd_status_get_repeat(c.status))) c.HandleError(); break; - case CMD_RANDOM: + case Command::RANDOM: connection = c.GetConnection(); if (connection == nullptr) break; @@ -202,7 +117,7 @@ !mpd_status_get_random(c.status))) c.HandleError(); break; - case CMD_SINGLE: + case Command::SINGLE: connection = c.GetConnection(); if (connection == nullptr) break; @@ -211,7 +126,7 @@ !mpd_status_get_single(c.status))) c.HandleError(); break; - case CMD_CONSUME: + case Command::CONSUME: connection = c.GetConnection(); if (connection == nullptr) break; @@ -220,7 +135,7 @@ !mpd_status_get_consume(c.status))) c.HandleError(); break; - case CMD_CROSSFADE: + case Command::CROSSFADE: connection = c.GetConnection(); if (connection == nullptr) break; @@ -230,14 +145,14 @@ ? 0 : options.crossfade_time)) c.HandleError(); break; - case CMD_DB_UPDATE: + case Command::DB_UPDATE: screen_database_update(&c, nullptr); break; - case CMD_VOLUME_UP: - mpdclient_cmd_volume_up(&c); + case Command::VOLUME_UP: + c.RunVolumeUp(); break; - case CMD_VOLUME_DOWN: - mpdclient_cmd_volume_down(&c); + case Command::VOLUME_DOWN: + c.RunVolumeDown(); break; default:
View file
ncmpc-0.30.tar.xz/src/player_command.hxx -> ncmpc-0.32.tar.xz/src/player_command.hxx
Changed
@@ -20,21 +20,11 @@ #ifndef NCMPC_PLAYER_COMMAND_H #define NCMPC_PLAYER_COMMAND_H -#include "command.hxx" - +enum class Command : unsigned; struct mpdclient; - -extern int seek_id; -extern int seek_target_time; - -/** - * Call this before exiting; it will unschedule the timer for delayed - * seeking. - */ -void -cancel_seek_timer(); +class DelayedSeek; bool -handle_player_command(struct mpdclient &c, command_t cmd); +handle_player_command(struct mpdclient &c, DelayedSeek &seek, Command cmd); #endif
View file
ncmpc-0.30.tar.xz/src/plugin.cxx -> ncmpc-0.32.tar.xz/src/plugin.cxx
Changed
@@ -18,18 +18,24 @@ */ #include "plugin.hxx" -#include "Compiler.h" +#include "io/Path.hxx" +#include "util/Compiler.h" +#include "util/ScopeExit.hxx" +#include "util/UriUtil.hxx" -#include <glib.h> +#include <boost/asio/steady_timer.hpp> +#include <boost/asio/posix/stream_descriptor.hpp> #include <algorithm> +#include <memory> #include <assert.h> #include <stdlib.h> #include <unistd.h> +#include <dirent.h> #include <string.h> +#include <signal.h> #include <sys/stat.h> -#include <sys/signal.h> #include <sys/wait.h> struct PluginCycle; @@ -37,25 +43,37 @@ struct PluginPipe { PluginCycle *cycle; - /** the pipe to the plugin process, or -1 if none is currently - open */ - int fd = -1; - /** the GLib IO watch of #fd */ - guint event_id; + /** the pipe to the plugin process */ + boost::asio::posix::stream_descriptor fd; + /** the output of the current plugin */ std::string data; - ~PluginPipe() { + std::array<char, 256> buffer; + + PluginPipe(boost::asio::io_service &io_service) noexcept + :fd(io_service) {} + + ~PluginPipe() noexcept { Close(); } - void Close() { - if (fd < 0) + void AsyncRead() noexcept { + fd.async_read_some(boost::asio::buffer(buffer), + std::bind(&PluginPipe::OnRead, this, + std::placeholders::_1, + std::placeholders::_2)); + } + + void OnRead(const boost::system::error_code &error, + std::size_t bytes_transferred) noexcept; + + void Close() noexcept { + if (!fd.is_open()) return; - g_source_remove(event_id); - close(fd); - fd = -1; + fd.cancel(); + fd.close(); } }; @@ -64,7 +82,7 @@ PluginList *list; /** arguments passed to execv() */ - char **argv; + std::unique_ptr<char *[]> argv; /** caller defined callback function */ plugin_callback_t callback; @@ -73,7 +91,7 @@ /** the index of the next plugin which is going to be invoked */ - guint next_plugin = 0; + unsigned next_plugin = 0; /** the pid of the plugin process, or -1 if none is currently running */ @@ -87,115 +105,124 @@ /** list of all error messages from failed plugins */ std::string all_errors; - PluginCycle(PluginList &_list, char **_argv, - plugin_callback_t _callback, void *_callback_data) - :list(&_list), argv(_argv), - callback(_callback), callback_data(_callback_data), - next_plugin(0) {} + boost::asio::steady_timer delayed_fail_timer; - ~PluginCycle() { - /* free argument list */ - for (unsigned i = 0; i == 0 || argv[i] != nullptr; ++i) - g_free(argv[i]); - g_free(argv); + PluginCycle(boost::asio::io_service &io_service, + PluginList &_list, std::unique_ptr<char *[]> &&_argv, + plugin_callback_t _callback, void *_callback_data) noexcept + :list(&_list), argv(std::move(_argv)), + callback(_callback), callback_data(_callback_data), + pipe_stdout(io_service), pipe_stderr(io_service), + delayed_fail_timer(io_service) {} + + void TryNextPlugin() noexcept; + + void ScheduleDelayedFail() noexcept { + boost::system::error_code error; + delayed_fail_timer.expires_from_now(std::chrono::seconds(0), + error); + delayed_fail_timer.async_wait(std::bind(&PluginCycle::OnDelayedFail, + this, + std::placeholders::_1)); } + + void OnEof() noexcept; + +private: + int LaunchPlugin(const char *plugin_path) noexcept; + + void OnDelayedFail(const boost::system::error_code &error) noexcept; }; static bool -register_plugin(PluginList *list, char *path) +register_plugin(PluginList *list, std::string &&path) noexcept { struct stat st; - if (stat(path, &st) < 0) + if (stat(path.c_str(), &st) < 0) return false; - list->plugins.emplace_back(path); + list->plugins.emplace_back(std::move(path)); return true; } +static constexpr bool +ShallSkipDirectoryEntry(const char *name) noexcept +{ + return name[0] == '.' && (name[1] == 0 || (name[1] == '.' && name[2] == 0)); +} + bool -plugin_list_load_directory(PluginList *list, const char *path) +plugin_list_load_directory(PluginList *list, const char *path) noexcept { - GDir *dir = g_dir_open(path, 0, nullptr); + DIR *dir = opendir(path); if (dir == nullptr) return false; - const char *name; - while ((name = g_dir_read_name(dir)) != nullptr) { - char *plugin = g_build_filename(path, name, nullptr); - register_plugin(list, plugin); - g_free(plugin); - } + AtScopeExit(dir) { closedir(dir); }; - g_dir_close(dir); + while (const auto *e = readdir(dir)) { + const char *name = e->d_name; + if (!ShallSkipDirectoryEntry(name)) + register_plugin(list, BuildPath(path, name)); + } std::sort(list->plugins.begin(), list->plugins.end()); return true; } -static void -next_plugin(PluginCycle *cycle); - -static void -plugin_eof(PluginCycle *cycle, PluginPipe *p) +void +PluginCycle::OnEof() noexcept { - close(p->fd); - p->fd = -1; - /* Only if both pipes are have EOF status we are done */ - if (cycle->pipe_stdout.fd != -1 || cycle->pipe_stderr.fd != -1) + if (pipe_stdout.fd.is_open() || pipe_stderr.fd.is_open()) return; - int status, ret = waitpid(cycle->pid, &status, 0); - cycle->pid = -1; + int status, ret = waitpid(pid, &status, 0); + pid = -1; if (ret < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) { /* If we encountered an error other than service unavailable * (69), log it for later. If all plugins fail, we may get * some hints for debugging.*/ - if (!cycle->pipe_stderr.data.empty() && + if (!pipe_stderr.data.empty() && WEXITSTATUS(status) != 69) { - cycle->all_errors += "*** "; - cycle->all_errors += cycle->argv[0]; - cycle->all_errors += " ***\n\n"; - cycle->all_errors += cycle->pipe_stderr.data; - cycle->all_errors += "\n"; + all_errors += "*** "; + all_errors += argv[0]; + all_errors += " ***\n\n"; + all_errors += pipe_stderr.data; + all_errors += "\n"; } /* the plugin has failed */ - cycle->pipe_stdout.data.clear(); - cycle->pipe_stderr.data.clear(); + pipe_stdout.data.clear(); + pipe_stderr.data.clear(); - next_plugin(cycle); + TryNextPlugin(); } else { /* success: invoke the callback */ - cycle->callback(std::move(cycle->pipe_stdout.data), true, - cycle->argv[0], cycle->callback_data); + callback(std::move(pipe_stdout.data), true, + argv[0], callback_data); } } -static gboolean -plugin_data(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, gpointer data) +void +PluginPipe::OnRead(const boost::system::error_code &error, + std::size_t bytes_transferred) noexcept { - auto *p = (PluginPipe *)data; - assert(p->fd >= 0); - - PluginCycle *cycle = p->cycle; - assert(cycle != nullptr); - assert(cycle->pid > 0); - - char buffer[256]; - ssize_t nbytes = condition & G_IO_IN - ? read(p->fd, buffer, sizeof(buffer)) - : 0; - if (nbytes <= 0) { - plugin_eof(cycle, p); - return false; + if (error) { + if (error == boost::asio::error::operation_aborted) + /* this object has already been deleted; bail out + quickly without touching anything */ + return; + + fd.close(); + cycle->OnEof(); + return; } - p->data.append(buffer, nbytes); - return true; + data.append(&buffer.front(), bytes_transferred); + AsyncRead(); } /** @@ -205,47 +232,40 @@ * Instead, install a timer which calls the plugin callback in the * moment after. */ -static gboolean -plugin_delayed_fail(gpointer data) +void +PluginCycle::OnDelayedFail(const boost::system::error_code &error) noexcept { - auto *cycle = (PluginCycle *)data; - - assert(cycle != nullptr); - assert(cycle->pipe_stdout.fd < 0); - assert(cycle->pipe_stderr.fd < 0); - assert(cycle->pid < 0); + if (error) + return; - cycle->callback(std::move(cycle->all_errors), false, nullptr, - cycle->callback_data); + assert(!pipe_stdout.fd.is_open()); + assert(!pipe_stderr.fd.is_open()); + assert(pid < 0); - return false; + callback(std::move(all_errors), false, nullptr, + callback_data); } static void -plugin_fd_add(PluginCycle *cycle, PluginPipe *p, int fd) +plugin_fd_add(PluginCycle *cycle, PluginPipe *p, int fd) noexcept { p->cycle = cycle; - p->fd = fd; - GIOChannel *channel = g_io_channel_unix_new(fd); - p->event_id = g_io_add_watch(channel, GIOCondition(G_IO_IN|G_IO_HUP), - plugin_data, p); - g_io_channel_unref(channel); + p->fd.assign(fd); + p->AsyncRead(); } -static int -start_plugin(PluginCycle *cycle, const char *plugin_path) +int +PluginCycle::LaunchPlugin(const char *plugin_path) noexcept { - assert(cycle != nullptr); - assert(cycle->pid < 0); - assert(cycle->pipe_stdout.fd < 0); - assert(cycle->pipe_stderr.fd < 0); - assert(cycle->pipe_stdout.data.empty()); - assert(cycle->pipe_stderr.data.empty()); + assert(pid < 0); + assert(!pipe_stdout.fd.is_open()); + assert(!pipe_stderr.fd.is_open()); + assert(pipe_stdout.data.empty()); + assert(pipe_stderr.data.empty()); /* set new program name, but free the one from the previous plugin */ - g_free(cycle->argv[0]); - cycle->argv[0] = g_path_get_basename(plugin_path); + argv[0] = const_cast<char *>(GetUriFilename(plugin_path)); int fds_stdout[2]; if (pipe(fds_stdout) < 0) @@ -258,7 +278,7 @@ return -1; } - pid_t pid = fork(); + pid = fork(); if (pid < 0) { close(fds_stdout[0]); @@ -278,84 +298,85 @@ close(0); /* XXX close other fds? */ - execv(plugin_path, cycle->argv); + execv(plugin_path, argv.get()); _exit(1); } close(fds_stdout[1]); close(fds_stderr[1]); - cycle->pid = pid; - /* XXX CLOEXEC? */ - plugin_fd_add(cycle, &cycle->pipe_stdout, fds_stdout[0]); - plugin_fd_add(cycle, &cycle->pipe_stderr, fds_stderr[0]); + plugin_fd_add(this, &pipe_stdout, fds_stdout[0]); + plugin_fd_add(this, &pipe_stderr, fds_stderr[0]); return 0; } -static void -next_plugin(PluginCycle *cycle) +void +PluginCycle::TryNextPlugin() noexcept { - assert(cycle->pid < 0); - assert(cycle->pipe_stdout.fd < 0); - assert(cycle->pipe_stderr.fd < 0); - assert(cycle->pipe_stdout.data.empty()); - assert(cycle->pipe_stderr.data.empty()); + assert(pid < 0); + assert(!pipe_stdout.fd.is_open()); + assert(!pipe_stderr.fd.is_open()); + assert(pipe_stdout.data.empty()); + assert(pipe_stderr.data.empty()); - if (cycle->next_plugin >= cycle->list->plugins.size()) { + if (next_plugin >= list->plugins.size()) { /* no plugins left */ - g_idle_add(plugin_delayed_fail, cycle); + ScheduleDelayedFail(); return; } const char *plugin_path = (const char *) - cycle->list->plugins[cycle->next_plugin++].c_str(); - if (start_plugin(cycle, plugin_path) < 0) { + list->plugins[next_plugin++].c_str(); + if (LaunchPlugin(plugin_path) < 0) { /* system error */ - g_idle_add(plugin_delayed_fail, cycle); + ScheduleDelayedFail(); return; } } -static char ** -make_argv(const char*const* args) +static auto +make_argv(const char*const* args) noexcept { unsigned num = 0; while (args[num] != nullptr) ++num; num += 2; - char **ret = g_new(char *, num); + std::unique_ptr<char *[]> result(new char *[num]); + + char **ret = result.get(); /* reserve space for the program name */ *ret++ = nullptr; while (*args != nullptr) - *ret++ = g_strdup(*args++); + *ret++ = const_cast<char *>(*args++); /* end of argument vector */ *ret++ = nullptr; - return ret - num; + return result; } PluginCycle * -plugin_run(PluginList *list, const char *const*args, - plugin_callback_t callback, void *callback_data) +plugin_run(boost::asio::io_service &io_service, + PluginList *list, const char *const*args, + plugin_callback_t callback, void *callback_data) noexcept { assert(args != nullptr); - auto *cycle = new PluginCycle(*list, make_argv(args), + auto *cycle = new PluginCycle(io_service, *list, make_argv(args), callback, callback_data); - next_plugin(cycle); + cycle->TryNextPlugin(); return cycle; } void -plugin_stop(PluginCycle *cycle) +plugin_stop(PluginCycle *cycle) noexcept { if (cycle->pid > 0) { /* kill the plugin process */
View file
ncmpc-0.30.tar.xz/src/plugin.hxx -> ncmpc-0.32.tar.xz/src/plugin.hxx
Changed
@@ -20,6 +20,8 @@ #ifndef PLUGIN_H #define PLUGIN_H +#include "AsioServiceFwd.hxx" + #include <vector> #include <string> @@ -55,7 +57,7 @@ * Load all plugins (executables) in a directory. */ bool -plugin_list_load_directory(PluginList *list, const char *path); +plugin_list_load_directory(PluginList *list, const char *path) noexcept; /** * Run plugins in this list, until one returns success (or until the @@ -63,15 +65,16 @@ * * @param list the plugin list * @param args nullptr terminated command line arguments passed to the - * plugin programs + * plugin programs; they must remain valid while the plugin runs * @param callback the callback function which will be called when a * result is available * @param callback_data caller defined pointer which is passed to the * callback function */ PluginCycle * -plugin_run(PluginList *list, const char *const*args, - plugin_callback_t callback, void *callback_data); +plugin_run(boost::asio::io_service &io_service, + PluginList *list, const char *const*args, + plugin_callback_t callback, void *callback_data) noexcept; /** * Stops the plugin cycle and frees resources. This can be called to @@ -79,6 +82,6 @@ * invoked. */ void -plugin_stop(PluginCycle *invocation); +plugin_stop(PluginCycle *invocation) noexcept; #endif
View file
ncmpc-0.30.tar.xz/src/save_playlist.cxx -> ncmpc-0.32.tar.xz/src/save_playlist.cxx
Changed
@@ -27,7 +27,7 @@ #include "wreadln.hxx" #include "Completion.hxx" #include "screen_utils.hxx" -#include "Compiler.h" +#include "util/Compiler.h" #include <mpd/client.h> @@ -68,7 +68,8 @@ #endif int -playlist_save(struct mpdclient *c, char *name, char *defaultname) +playlist_save(struct mpdclient *c, const char *name, + const char *defaultname) noexcept { std::string filename;
View file
ncmpc-0.30.tar.xz/src/save_playlist.hxx -> ncmpc-0.32.tar.xz/src/save_playlist.hxx
Changed
@@ -23,6 +23,7 @@ struct mpdclient; int -playlist_save(struct mpdclient *c, char *name, char *defaultname); +playlist_save(struct mpdclient *c, const char *name, + const char *defaultname) noexcept; #endif
View file
ncmpc-0.30.tar.xz/src/screen.cxx -> ncmpc-0.32.tar.xz/src/screen.cxx
Changed
@@ -18,38 +18,30 @@ */ #include "screen.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen_list.hxx" #include "screen_status.hxx" #include "Page.hxx" +#include "Command.hxx" #include "config.h" #include "i18n.h" #include "charset.hxx" #include "mpdclient.hxx" -#include "options.hxx" +#include "Options.hxx" +#include "DelayedSeek.hxx" #include "player_command.hxx" -#include "HelpPage.hxx" -#include "QueuePage.hxx" -#include "FileBrowserPage.hxx" -#include "screen_artist.hxx" -#include "SearchPage.hxx" #include "SongPage.hxx" -#include "screen_keydef.hxx" #include "LyricsPage.hxx" -#include "OutputsPage.hxx" -#include "ChatPage.hxx" #include <mpd/client.h> -#include <glib.h> - #include <stdlib.h> #include <unistd.h> #include <string.h> #include <time.h> ScreenManager::PageMap::iterator -ScreenManager::MakePage(const struct screen_functions &sf) +ScreenManager::MakePage(const PageMeta &sf) { auto i = pages.find(&sf); if (i != pages.end()) @@ -63,7 +55,7 @@ } void -ScreenManager::Switch(const struct screen_functions &sf, struct mpdclient &c) +ScreenManager::Switch(const PageMeta &sf, struct mpdclient &c) { if (&sf == current_page->first) return; @@ -133,14 +125,14 @@ else if (next>=max) next = 0; - const struct screen_functions *sf = + const PageMeta *sf = screen_lookup_name(options.screen_list[next].c_str()); if (sf != nullptr) Switch(*sf, c); } void -ScreenManager::Update(struct mpdclient &c) +ScreenManager::Update(struct mpdclient &c, const DelayedSeek &seek) noexcept { const unsigned events = c.events; @@ -215,8 +207,8 @@ unsigned elapsed; if (c.status == nullptr) elapsed = 0; - else if (seek_id >= 0 && seek_id == mpd_status_get_song_id(c.status)) - elapsed = seek_target_time; + else if (seek.IsSeeking(mpd_status_get_song_id(c.status))) + elapsed = seek.GetTime(); else elapsed = mpd_status_get_elapsed_time(c.status); @@ -226,7 +218,7 @@ progress_bar.Set(elapsed, duration); - status_bar.Update(c.status, c.song); + status_bar.Update(c.status, c.GetCurrentSong(), seek); for (auto &i : pages) i.second->AddPendingEvents(events); @@ -238,90 +230,43 @@ } void -ScreenManager::OnCommand(struct mpdclient &c, command_t cmd) +ScreenManager::OnCommand(struct mpdclient &c, DelayedSeek &seek, Command cmd) { -#ifndef NCMPC_MINI - if (welcome_source_id != 0) { - g_source_remove(welcome_source_id); - welcome_source_id = 0; - } -#endif - if (current_page->second->OnCommand(c, cmd)) return; - if (handle_player_command(c, cmd)) + if (handle_player_command(c, seek, cmd)) + return; + + const auto *new_page = PageByCommand(cmd); + if (new_page != nullptr) { + Switch(*new_page, c); return; + } switch(cmd) { - case CMD_TOGGLE_FIND_WRAP: + case Command::TOGGLE_FIND_WRAP: options.find_wrap = !options.find_wrap; screen_status_message(options.find_wrap ? _("Find mode: Wrapped") : _("Find mode: Normal")); break; - case CMD_TOGGLE_AUTOCENTER: + case Command::TOGGLE_AUTOCENTER: options.auto_center = !options.auto_center; screen_status_message(options.auto_center ? _("Auto center mode: On") : _("Auto center mode: Off")); break; - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: current_page->second->SetDirty(); break; - case CMD_SCREEN_PREVIOUS: + case Command::SCREEN_PREVIOUS: NextMode(c, -1); break; - case CMD_SCREEN_NEXT: + case Command::SCREEN_NEXT: NextMode(c, 1); break; - case CMD_SCREEN_PLAY: - Switch(screen_queue, c); - break; - case CMD_SCREEN_FILE: - Switch(screen_browse, c); - break; -#ifdef ENABLE_HELP_SCREEN - case CMD_SCREEN_HELP: - Switch(screen_help, c); - break; -#endif -#ifdef ENABLE_SEARCH_SCREEN - case CMD_SCREEN_SEARCH: - Switch(screen_search, c); - break; -#endif -#ifdef ENABLE_ARTIST_SCREEN - case CMD_SCREEN_ARTIST: - Switch(screen_artist, c); - break; -#endif -#ifdef ENABLE_SONG_SCREEN - case CMD_SCREEN_SONG: - Switch(screen_song, c); - break; -#endif -#ifdef ENABLE_KEYDEF_SCREEN - case CMD_SCREEN_KEYDEF: - Switch(screen_keydef, c); - break; -#endif -#ifdef ENABLE_LYRICS_SCREEN - case CMD_SCREEN_LYRICS: - Switch(screen_lyrics, c); - break; -#endif -#ifdef ENABLE_OUTPUTS_SCREEN - case CMD_SCREEN_OUTPUTS: - Switch(screen_outputs, c); - break; -#endif -#ifdef ENABLE_CHAT_SCREEN - case CMD_SCREEN_CHAT: - Switch(screen_chat, c); - break; -#endif - case CMD_SCREEN_SWAP: + case Command::SCREEN_SWAP: Swap(c, nullptr); break; @@ -333,7 +278,8 @@ #ifdef HAVE_GETMOUSE bool -ScreenManager::OnMouse(struct mpdclient &c, Point p, mmask_t bstate) +ScreenManager::OnMouse(struct mpdclient &c, DelayedSeek &seek, + Point p, mmask_t bstate) { if (current_page->second->OnMouse(c, p - GetMainPosition(), bstate)) @@ -341,7 +287,7 @@ /* if button 2 was pressed switch screen */ if (bstate & BUTTON2_CLICKED) { - OnCommand(c, CMD_SCREEN_NEXT); + OnCommand(c, seek, Command::SCREEN_NEXT); return true; }
View file
ncmpc-0.30.tar.xz/src/screen.hxx -> ncmpc-0.32.tar.xz/src/screen.hxx
Changed
@@ -21,14 +21,16 @@ #define SCREEN_H #include "config.h" -#include "command.hxx" #include "Window.hxx" #include "TitleBar.hxx" #include "ProgressBar.hxx" #include "StatusBar.hxx" #include "History.hxx" #include "Point.hxx" -#include "ncmpc_curses.h" +#include "util/Compiler.h" +#include "AsioServiceFwd.hxx" + +#include <curses.h> #include <mpd/client.h> @@ -36,11 +38,15 @@ #include <string> #include <map> +enum class Command : unsigned; struct mpdclient; -struct screen_functions; +struct PageMeta; class Page; +class DelayedSeek; class ScreenManager { + boost::asio::io_service &io_service; + struct Layout { Size size; @@ -82,12 +88,12 @@ StatusBar status_bar; private: - using PageMap = std::map<const struct screen_functions *, + using PageMap = std::map<const PageMeta *, std::unique_ptr<Page>>; PageMap pages; PageMap::iterator current_page = pages.begin(); - const struct screen_functions *mode_fn_prev; + const PageMeta *mode_fn_prev; char *buf; size_t buf_size; @@ -96,17 +102,13 @@ std::string findbuf; History find_history; -#ifndef NCMPC_MINI - /** - * Non-zero when the welcome message is currently being - * displayed. The associated timer will disable it. - */ - unsigned welcome_source_id; -#endif - - ScreenManager(); + explicit ScreenManager(boost::asio::io_service &io_service); ~ScreenManager(); + auto &get_io_service() const { + return io_service; + } + void Init(struct mpdclient *c); void Exit(); @@ -114,7 +116,11 @@ return {0, (int)title_bar.GetHeight()}; } - PageMap::iterator MakePage(const struct screen_functions &sf); + const PageMeta &GetCurrentPageMeta() const { + return *current_page->first; + } + + PageMap::iterator MakePage(const PageMeta &sf); void OnResize(); @@ -123,26 +129,23 @@ return &page == current_page->second.get(); } - void Switch(const struct screen_functions &sf, struct mpdclient &c); + void Switch(const PageMeta &sf, struct mpdclient &c); void Swap(struct mpdclient &c, const struct mpd_song *song); void PaintTopWindow(); void Paint(bool main_dirty); - void Update(struct mpdclient &c); - void OnCommand(struct mpdclient &c, command_t cmd); + void Update(struct mpdclient &c, const DelayedSeek &seek) noexcept; + void OnCommand(struct mpdclient &c, DelayedSeek &seek, Command cmd); #ifdef HAVE_GETMOUSE - bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate); + bool OnMouse(struct mpdclient &c, DelayedSeek &seek, + Point p, mmask_t bstate); #endif private: void NextMode(struct mpdclient &c, int offset); - -#ifndef NCMPC_MINI - bool OnWelcomeTimer(); -#endif }; #endif
View file
ncmpc-0.30.tar.xz/src/screen_artist.cxx -> ncmpc-0.32.tar.xz/src/screen_artist.cxx
Changed
@@ -20,17 +20,18 @@ #include "screen_artist.hxx" #include "ArtistListPage.hxx" #include "AlbumListPage.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen_status.hxx" #include "screen_find.hxx" #include "FileListPage.hxx" +#include "Command.hxx" #include "screen.hxx" #include "ProxyPage.hxx" #include "i18n.h" #include "charset.hxx" #include "mpdclient.hxx" #include "filelist.hxx" -#include "options.hxx" +#include "Options.hxx" #include "util/NulledString.hxx" #include <vector> @@ -41,6 +42,8 @@ #include <string.h> class SongListPage final : public FileListPage { + Page *const parent; + std::string artist; /** @@ -51,9 +54,11 @@ std::string album; public: - SongListPage(ScreenManager &_screen, WINDOW *_w, Size size) + SongListPage(ScreenManager &_screen, Page *_parent, + WINDOW *_w, Size size) noexcept :FileListPage(_screen, _w, size, - options.list_format.c_str()) {} + options.list_format.c_str()), + parent(_parent) {} template<typename A> void SetArtist(A &&_artist) { @@ -78,13 +83,13 @@ void LoadSongList(struct mpdclient &c); /* virtual methods from class Page */ - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; }; void -SongListPage::Update(struct mpdclient &c, unsigned events) +SongListPage::Update(struct mpdclient &c, unsigned events) noexcept { if (events & MPD_IDLE_DATABASE) { LoadSongList(c); @@ -101,8 +106,8 @@ Size size) :ProxyPage(_w), artist_list_page(_screen, _w, size), - album_list_page(_screen, _w, size), - song_list_page(_screen, _w, size) {} + album_list_page(_screen, this, _w, size), + song_list_page(_screen, this, _w, size) {} private: void OpenArtistList(struct mpdclient &c); @@ -112,9 +117,9 @@ public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void Update(struct mpdclient &c, unsigned events) override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void OnOpen(struct mpdclient &c) noexcept override; + void Update(struct mpdclient &c, unsigned events) noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; }; void @@ -169,14 +174,14 @@ SetCurrentPage(c, &song_list_page); } -static Page * +static std::unique_ptr<Page> screen_artist_init(ScreenManager &_screen, WINDOW *w, Size size) { - return new ArtistBrowserPage(_screen, w, size); + return std::make_unique<ArtistBrowserPage>(_screen, w, size); } const char * -SongListPage::GetTitle(char *str, size_t size) const +SongListPage::GetTitle(char *str, size_t size) const noexcept { const Utf8ToLocale artist_locale(artist.c_str()); @@ -186,7 +191,8 @@ artist_locale.c_str()); else if (!album.empty()) { const Utf8ToLocale album_locale(album.c_str()); - snprintf(str, size, _("Album: %s - %s"), + snprintf(str, size, "%s: %s - %s", + _("Album"), artist_locale.c_str(), album_locale.c_str()); } else snprintf(str, size, @@ -197,20 +203,18 @@ } bool -SongListPage::OnCommand(struct mpdclient &c, command_t cmd) +SongListPage::OnCommand(struct mpdclient &c, Command cmd) { switch(cmd) { - case CMD_PLAY: - if (lw.selected == 0) { + case Command::PLAY: + if (lw.selected == 0 && parent != nullptr) /* handle ".." */ - screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY); - return true; - } + return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY); break; /* continue and update... */ - case CMD_SCREEN_UPDATE: + case Command::SCREEN_UPDATE: LoadSongList(c); return false; @@ -222,7 +226,7 @@ } void -ArtistBrowserPage::OnOpen(struct mpdclient &c) +ArtistBrowserPage::OnOpen(struct mpdclient &c) noexcept { ProxyPage::OnOpen(c); @@ -231,7 +235,7 @@ } void -ArtistBrowserPage::Update(struct mpdclient &c, unsigned events) +ArtistBrowserPage::Update(struct mpdclient &c, unsigned events) noexcept { artist_list_page.AddPendingEvents(events); album_list_page.AddPendingEvents(events); @@ -241,13 +245,13 @@ } bool -ArtistBrowserPage::OnCommand(struct mpdclient &c, command_t cmd) +ArtistBrowserPage::OnCommand(struct mpdclient &c, Command cmd) { if (ProxyPage::OnCommand(c, cmd)) return true; switch (cmd) { - case CMD_PLAY: + case Command::PLAY: if (GetCurrentPage() == &artist_list_page) { const char *artist = artist_list_page.GetSelectedValue(); if (artist != nullptr) { @@ -266,7 +270,7 @@ break; - case CMD_GO_ROOT_DIRECTORY: + case Command::GO_ROOT_DIRECTORY: if (GetCurrentPage() != &artist_list_page) { OpenArtistList(c); return true; @@ -274,7 +278,7 @@ break; - case CMD_GO_PARENT_DIRECTORY: + case Command::GO_PARENT_DIRECTORY: if (GetCurrentPage() == &album_list_page) { OpenArtistList(c); return true; @@ -292,7 +296,9 @@ return false; } -const struct screen_functions screen_artist = { +const PageMeta screen_artist = { "artist", + N_("Artist"), + Command::SCREEN_ARTIST, screen_artist_init, };
View file
ncmpc-0.30.tar.xz/src/screen_artist.hxx -> ncmpc-0.32.tar.xz/src/screen_artist.hxx
Changed
@@ -23,7 +23,8 @@ #include "config.h" #ifdef ENABLE_ARTIST_SCREEN -extern const struct screen_functions screen_artist; +struct PageMeta; +extern const PageMeta screen_artist; #endif #endif
View file
ncmpc-0.30.tar.xz/src/screen_client.cxx -> ncmpc-0.32.tar.xz/src/screen_client.cxx
Changed
@@ -23,8 +23,6 @@ #include "i18n.h" #include "charset.hxx" -#include <glib.h> - void screen_database_update(struct mpdclient *c, const char *path) { @@ -40,7 +38,7 @@ if (mpd_connection_get_error(connection) == MPD_ERROR_SERVER && mpd_connection_get_server_error(connection) == MPD_SERVER_ERROR_UPDATE_ALREADY && mpd_connection_clear_error(connection)) - screen_status_message(_("Database update running...")); + screen_status_message(_("Database update running")); else c->HandleError(); return;
View file
ncmpc-0.30.tar.xz/src/screen_find.cxx -> ncmpc-0.32.tar.xz/src/screen_find.cxx
Changed
@@ -24,9 +24,10 @@ #include "ListWindow.hxx" #include "keyboard.hxx" #include "i18n.h" -#include "options.hxx" +#include "Options.hxx" +#include "util/LocaleString.hxx" -#include <glib.h> +#include <ctype.h> #define FIND_PROMPT _("Find") #define RFIND_PROMPT _("Find backward") @@ -34,25 +35,26 @@ /* query user for a string and find it in a list window */ bool -screen_find(ScreenManager &screen, ListWindow *lw, command_t findcmd, - const ListText &text) +screen_find(ScreenManager &screen, ListWindow &lw, Command findcmd, + const ListText &text) noexcept { bool found; const char *prompt = FIND_PROMPT; const bool reversed = - findcmd == CMD_LIST_RFIND || findcmd == CMD_LIST_RFIND_NEXT; + findcmd == Command::LIST_RFIND || + findcmd == Command::LIST_RFIND_NEXT; if (reversed) prompt = RFIND_PROMPT; switch (findcmd) { - case CMD_LIST_FIND: - case CMD_LIST_RFIND: + case Command::LIST_FIND: + case Command::LIST_RFIND: screen.findbuf.clear(); /* fall through */ - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: if (screen.findbuf.empty()) { char *value = options.find_show_last_pattern ? (char *) -1 : nullptr; @@ -66,14 +68,14 @@ return true; found = reversed - ? lw->ReverseFind(text, - screen.findbuf.c_str(), - options.find_wrap, - options.bell_on_wrap) - : lw->Find(text, - screen.findbuf.c_str(), - options.find_wrap, - options.bell_on_wrap); + ? lw.ReverseFind(text, + screen.findbuf.c_str(), + options.find_wrap, + options.bell_on_wrap) + : lw.Find(text, + screen.findbuf.c_str(), + options.find_wrap, + options.bell_on_wrap); if (!found) { screen_status_printf(_("Unable to find \'%s\'"), screen.findbuf.c_str()); @@ -89,15 +91,14 @@ /* query user for a string and jump to the entry * which begins with this string while the users types */ void -screen_jump(ScreenManager &screen, ListWindow *lw, +screen_jump(ScreenManager &screen, ListWindow &lw, const ListText &text, - const ListRenderer &renderer) + const ListRenderer &renderer) noexcept { constexpr size_t WRLN_MAX_LINE_SIZE = 1024; int key = 65; char buffer[WRLN_MAX_LINE_SIZE]; - std::fill_n(buffer, WRLN_MAX_LINE_SIZE, 0); /* In screen.findbuf is the whole string which is displayed in the status_window * and search_str is the string the user entered (without the prompt) */ @@ -108,31 +109,29 @@ key = screen_getch(buffer); /* if backspace or delete was pressed, process instead of ending loop */ if (key == KEY_BACKSPACE || key == KEY_DC) { - int i; - if (search_str <= g_utf8_find_prev_char(buffer, iter)) - iter = g_utf8_find_prev_char(buffer, iter); - for (i = 0; *(iter + i) != '\0'; i++) - *(iter + i) = '\0'; + const char *prev = PrevCharMB(buffer, iter); + if (search_str <= prev) + iter = const_cast<char *>(prev); + *iter = '\0'; continue; } /* if a control key was pressed, end loop */ - else if (g_ascii_iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) { + else if (iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) { break; } - else { - *iter = key; - if (iter < buffer + WRLN_MAX_LINE_SIZE - 3) - ++iter; + else if (iter < buffer + WRLN_MAX_LINE_SIZE - 3) { + *iter++ = key; + *iter = '\0'; } - lw->Jump(text, search_str); + lw.Jump(text, search_str); /* repaint the list_window */ - lw->Paint(renderer); - wrefresh(lw->w); + lw.Paint(renderer); + wrefresh(lw.w); } screen.findbuf = search_str; /* ncmpc should get the command */ - keyboard_unread(key); + keyboard_unread(screen.get_io_service(), key); }
View file
ncmpc-0.30.tar.xz/src/screen_find.hxx -> ncmpc-0.32.tar.xz/src/screen_find.hxx
Changed
@@ -20,8 +20,7 @@ #ifndef NCMPC_SCREEN_FIND_H #define NCMPC_SCREEN_FIND_H -#include "command.hxx" - +enum class Command : unsigned; class ScreenManager; class ListWindow; class ListRenderer; @@ -37,14 +36,14 @@ * @return true if the command has been handled, false if not */ bool -screen_find(ScreenManager &screen, ListWindow *lw, - command_t findcmd, - const ListText &text); +screen_find(ScreenManager &screen, ListWindow &lw, + Command findcmd, + const ListText &text) noexcept; /* query user for a string and jump to the entry * which begins with this string while the users types */ void -screen_jump(ScreenManager &screen, ListWindow *lw, - const ListText &text, const ListRenderer &renderer); +screen_jump(ScreenManager &screen, ListWindow &lw, + const ListText &text, const ListRenderer &renderer) noexcept; #endif
View file
ncmpc-0.30.tar.xz/src/screen_init.cxx -> ncmpc-0.32.tar.xz/src/screen_init.cxx
Changed
@@ -23,47 +23,46 @@ #include "QueuePage.hxx" #include "config.h" #include "i18n.h" -#include "options.hxx" -#include "colors.hxx" -#include "Event.hxx" +#include "Options.hxx" +#include "Styles.hxx" #include <stdlib.h> -#ifndef NCMPC_MINI -/** welcome message time [s] */ -static constexpr std::chrono::seconds SCREEN_WELCOME_TIME(10); -#endif - /* minimum window size */ static const unsigned SCREEN_MIN_COLS = 14; static const unsigned SCREEN_MIN_ROWS = 5; -ScreenManager::ScreenManager() - :layout({std::max<unsigned>(COLS, SCREEN_MIN_COLS), +ScreenManager::ScreenManager(boost::asio::io_service &_io_service) + :io_service(_io_service), + layout({std::max<unsigned>(COLS, SCREEN_MIN_COLS), std::max<unsigned>(LINES, SCREEN_MIN_ROWS)}), title_bar({layout.title_x, layout.title_y}, layout.size.width), main_window({layout.main_x, layout.main_y}, layout.GetMainSize()), progress_bar({layout.progress_x, layout.GetProgressY()}, layout.size.width), - status_bar({layout.status_x, layout.GetStatusY()}, layout.size.width), + status_bar(io_service, + {layout.status_x, layout.GetStatusY()}, layout.size.width), mode_fn_prev(&screen_queue) { buf_size = layout.size.width; - buf = (char *)g_malloc(buf_size); + buf = new char[buf_size]; if (!options.hardware_cursor) leaveok(main_window.w, true); keypad(main_window.w, true); + +#ifdef ENABLE_COLORS + if (options.enable_colors) { + /* set background attributes */ + wbkgd(stdscr, COLOR_PAIR(Style::LIST)); + wbkgd(main_window.w, COLOR_PAIR(Style::LIST)); + } +#endif } ScreenManager::~ScreenManager() { - g_free(buf); - -#ifndef NCMPC_MINI - if (welcome_source_id != 0) - g_source_remove(welcome_source_id); -#endif + delete[] buf; } void @@ -100,8 +99,8 @@ layout.size.width); buf_size = layout.size.width; - g_free(buf); - buf = (char *)g_malloc(buf_size); + delete[] buf; + buf = new char[buf_size]; /* resize all screens */ current_page->second->Resize(main_window.size); @@ -113,37 +112,9 @@ Paint(true); } -#ifndef NCMPC_MINI -inline bool -ScreenManager::OnWelcomeTimer() -{ - welcome_source_id = 0; - - PaintTopWindow(); - doupdate(); - - return false; -} -#endif - void ScreenManager::Init(struct mpdclient *c) { -#ifndef NCMPC_MINI - if (options.welcome_screen_list) - welcome_source_id = ScheduleTimeout<ScreenManager, - &ScreenManager::OnWelcomeTimer>(SCREEN_WELCOME_TIME, - *this); -#endif - -#ifdef ENABLE_COLORS - if (options.enable_colors) { - /* set background attributes */ - wbkgd(stdscr, COLOR_PAIR(COLOR_LIST)); - wbkgd(main_window.w, COLOR_PAIR(COLOR_LIST)); - } -#endif - current_page = MakePage(screen_queue); current_page->second->OnOpen(*c); }
View file
ncmpc-0.30.tar.xz/src/screen_keydef.cxx -> ncmpc-0.32.tar.xz/src/screen_keydef.cxx
Changed
@@ -18,7 +18,7 @@ */ #include "screen_keydef.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "ListPage.hxx" #include "ListText.hxx" #include "TextListRenderer.hxx" @@ -26,27 +26,31 @@ #include "screen_status.hxx" #include "screen_find.hxx" #include "screen.hxx" +#include "KeyName.hxx" #include "i18n.h" #include "conf.hxx" +#include "Bindings.hxx" +#include "GlobalBindings.hxx" #include "screen_utils.hxx" -#include "options.hxx" -#include "Compiler.h" +#include "Options.hxx" +#include "util/Compiler.h" #include <algorithm> #include <assert.h> #include <errno.h> #include <string.h> -#include <glib.h> class CommandKeysPage final : public ListPage, ListText { ScreenManager &screen; + Page *const parent; - command_definition_t *cmds; + const KeyBindings *bindings; + KeyBinding *binding; /** * The command being edited, represented by a array subscript - * to @cmds, or -1, if no command is being edited + * to #bindings, or -1, if no command is being edited */ int subcmd = -1; @@ -54,11 +58,13 @@ unsigned subcmd_n_keys = 0; public: - CommandKeysPage(ScreenManager &_screen, WINDOW *w, Size size) - :ListPage(w, size), screen(_screen) {} + CommandKeysPage(ScreenManager &_screen, Page *_parent, + WINDOW *w, Size size) noexcept + :ListPage(w, size), screen(_screen), parent(_parent) {} - void SetCommand(command_definition_t *_cmds, unsigned _cmd) { - cmds = _cmds; + void SetCommand(KeyBindings *_bindings, unsigned _cmd) { + bindings = _bindings; + binding = &_bindings->key_bindings[_cmd]; subcmd = _cmd; lw.Reset(); check_subcmd_length(); @@ -102,64 +108,56 @@ /** * Delete a key from a given command's definition. * - * @param cmd_index the command * @param key_index the key (see below) */ - void DeleteKey(int cmd_index, int key_index); + void DeleteKey(int key_index); /** * Assigns a new key to a key slot. */ - void OverwriteKey(int cmd_index, int key_index); + void OverwriteKey(int key_index); /** * Assign a new key to a new slot. */ - void AddKey(int cmd_index); + void AddKey(); public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void Paint() const override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void OnOpen(struct mpdclient &c) noexcept override; + void Paint() const noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; private: /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; /* TODO: rename to check_n_keys / subcmd_count_keys? */ void CommandKeysPage::check_subcmd_length() { - unsigned i; - - /* this loops counts the continous valid keys at the start of the the keys - array, so make sure you don't have gaps */ - for (i = 0; i < MAX_COMMAND_KEYS; i++) - if (cmds[subcmd].keys[i] == 0) - break; - subcmd_n_keys = i; + subcmd_n_keys = binding->GetKeyCount(); lw.SetLength(subcmd_length()); } void -CommandKeysPage::DeleteKey(int cmd_index, int key_index) +CommandKeysPage::DeleteKey(int key_index) { /* shift the keys to close the gap that appeared */ int i = key_index+1; - while (i < MAX_COMMAND_KEYS && cmds[cmd_index].keys[i]) - cmds[cmd_index].keys[key_index++] = cmds[cmd_index].keys[i++]; + while (i < MAX_COMMAND_KEYS && binding->keys[i]) + binding->keys[key_index++] = binding->keys[i++]; /* As key_index now holds the index of the last key slot that contained a key, we use it to empty this slot, because this key has been copied to the previous slot in the loop above */ - cmds[cmd_index].keys[key_index] = 0; + binding->keys[key_index] = 0; - cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED; + binding->modified = true; check_subcmd_length(); screen_status_message(_("Deleted")); @@ -168,17 +166,18 @@ SetDirty(); /* update key conflict flags */ - check_key_bindings(cmds, nullptr, 0); + bindings->Check(nullptr, 0); } void -CommandKeysPage::OverwriteKey(int cmd_index, int key_index) +CommandKeysPage::OverwriteKey(int key_index) { assert(key_index < MAX_COMMAND_KEYS); char prompt[256]; snprintf(prompt, sizeof(prompt), - _("Enter new key for %s: "), cmds[cmd_index].name); + _("Enter new key for %s: "), + get_key_command_name(Command(subcmd))); const int key = screen_getch(prompt); if (key == ERR) { @@ -191,38 +190,39 @@ return; } - const command_t cmd = find_key_command(key, cmds); - if (cmd != CMD_NONE) { + const Command cmd = bindings->FindKey(key); + if (cmd != Command::NONE) { screen_status_printf(_("Error: key %s is already used for %s"), key2str(key), get_key_command_name(cmd)); screen_bell(); return; } - cmds[cmd_index].keys[key_index] = key; - cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED; + binding->keys[key_index] = key; + binding->modified = true; screen_status_printf(_("Assigned %s to %s"), - key2str(key),cmds[cmd_index].name); + key2str(key), + get_key_command_name(Command(subcmd))); check_subcmd_length(); /* repaint */ SetDirty(); /* update key conflict flags */ - check_key_bindings(cmds, nullptr, 0); + bindings->Check(nullptr, 0); } void -CommandKeysPage::AddKey(int cmd_index) +CommandKeysPage::AddKey() { if (subcmd_n_keys < MAX_COMMAND_KEYS) - OverwriteKey(cmd_index, subcmd_n_keys); + OverwriteKey(subcmd_n_keys); } const char * CommandKeysPage::GetListItemText(char *buffer, size_t size, - unsigned idx) const + unsigned idx) const noexcept { if (idx == subcmd_item_up()) return "[..]"; @@ -236,64 +236,66 @@ snprintf(buffer, size, "%d. %-20s (%d) ", idx, - key2str(cmds[subcmd].keys[subcmd_item_to_key_id(idx)]), - cmds[subcmd].keys[subcmd_item_to_key_id(idx)]); + key2str(binding->keys[subcmd_item_to_key_id(idx)]), + binding->keys[subcmd_item_to_key_id(idx)]); return buffer; } void -CommandKeysPage::OnOpen(gcc_unused struct mpdclient &c) +CommandKeysPage::OnOpen(gcc_unused struct mpdclient &c) noexcept { // TODO } const char * -CommandKeysPage::GetTitle(char *str, size_t size) const +CommandKeysPage::GetTitle(char *str, size_t size) const noexcept { - snprintf(str, size, _("Edit keys for %s"), cmds[subcmd].name); + snprintf(str, size, _("Edit keys for %s"), + get_key_command_name(Command(subcmd))); return str; } void -CommandKeysPage::Paint() const +CommandKeysPage::Paint() const noexcept { lw.Paint(TextListRenderer(*this)); } bool -CommandKeysPage::OnCommand(struct mpdclient &c, command_t cmd) +CommandKeysPage::OnCommand(struct mpdclient &c, Command cmd) { - if (cmd == CMD_LIST_RANGE_SELECT) + if (cmd == Command::LIST_RANGE_SELECT) return false; if (ListPage::OnCommand(c, cmd)) return true; switch(cmd) { - case CMD_PLAY: + case Command::PLAY: if (lw.selected == subcmd_item_up()) { - screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY); + if (parent != nullptr) + return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY); } else if (lw.selected == subcmd_item_add()) { - AddKey(subcmd); + AddKey(); } else { /* just to be sure ;-) */ assert(subcmd_item_is_key(lw.selected)); - OverwriteKey(subcmd, subcmd_item_to_key_id(lw.selected)); + OverwriteKey(subcmd_item_to_key_id(lw.selected)); } return true; - case CMD_DELETE: + case Command::DELETE: if (subcmd_item_is_key(lw.selected)) - DeleteKey(subcmd, subcmd_item_to_key_id(lw.selected)); + DeleteKey(subcmd_item_to_key_id(lw.selected)); return true; - case CMD_ADD: - AddKey(subcmd); + case Command::ADD: + AddKey(); return true; - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SetDirty(); return true; @@ -309,21 +311,21 @@ class CommandListPage final : public ListPage, ListText { ScreenManager &screen; - command_definition_t *cmds = nullptr; + KeyBindings *bindings; /** the number of commands */ - unsigned command_n_commands = 0; + static constexpr size_t command_n_commands = size_t(Command::NONE); public: CommandListPage(ScreenManager &_screen, WINDOW *w, Size size) :ListPage(w, size), screen(_screen) {} ~CommandListPage() override { - delete[] cmds; + delete bindings; } - command_definition_t *GetCommands() { - return cmds; + KeyBindings *GetBindings() { + return bindings; } int GetSelectedCommand() const { @@ -337,14 +339,12 @@ * the position of the "apply" item. It's the same as command_n_commands, * because array subscripts start at 0, while numbers of items start at 1. */ - gcc_pure - unsigned command_item_apply() const { + static constexpr unsigned command_item_apply() { return command_n_commands; } /** the position of the "apply and save" item */ - gcc_pure - unsigned command_item_save() const { + static constexpr unsigned command_item_save() { return command_item_apply() + 1; } @@ -367,33 +367,32 @@ public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void Paint() const override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; - const char *GetTitle(char *s, size_t size) const override; + void OnOpen(struct mpdclient &c) noexcept override; + void Paint() const noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; + const char *GetTitle(char *s, size_t size) const noexcept override; private: /* virtual methods from class ListText */ const char *GetListItemText(char *buffer, size_t size, - unsigned i) const override; + unsigned i) const noexcept override; }; bool CommandListPage::IsModified() const { - command_definition_t *orginal_cmds = get_command_definitions(); - size_t size = command_n_commands * sizeof(command_definition_t); + const auto &orginal_bindings = GetGlobalKeyBindings(); + constexpr size_t size = sizeof(orginal_bindings); - return memcmp(orginal_cmds, cmds, size) != 0; + return memcmp(&orginal_bindings, &bindings, size) != 0; } void CommandListPage::Apply() { if (IsModified()) { - command_definition_t *orginal_cmds = get_command_definitions(); - - std::copy_n(cmds, command_n_commands, orginal_cmds); + auto &orginal_bindings = GetGlobalKeyBindings(); + orginal_bindings = *bindings; screen_status_message(_("You have new key bindings")); } else screen_status_message(_("Keybindings unchanged.")); @@ -402,46 +401,44 @@ void CommandListPage::Save() { - char *allocated = nullptr; - const char *filename; + std::string filename; if (options.key_file.empty()) { - if (!check_user_conf_dir()) { - screen_status_printf(_("Error: Unable to create directory ~/.ncmpc - %s"), - strerror(errno)); + filename = MakeKeysPath(); + if (filename.empty()) { + screen_status_message(_("Unable to write configuration")); screen_bell(); return; } - - filename = allocated = build_user_key_binding_filename(); } else - filename = options.key_file.c_str(); + filename = options.key_file; - FILE *f = fopen(filename, "w"); + FILE *f = fopen(filename.c_str(), "w"); if (f == nullptr) { - screen_status_printf(_("Error: %s - %s"), filename, strerror(errno)); + screen_status_printf("%s: %s - %s", _("Error"), + filename.c_str(), strerror(errno)); screen_bell(); - g_free(allocated); return; } - if (write_key_bindings(f, KEYDEF_WRITE_HEADER)) - screen_status_printf(_("Wrote %s"), filename); + if (GetGlobalKeyBindings().WriteToFile(f, KEYDEF_WRITE_HEADER)) + screen_status_printf(_("Wrote %s"), filename.c_str()); else - screen_status_printf(_("Error: %s - %s"), filename, strerror(errno)); + screen_status_printf("%s: %s - %s", _("Error"), + filename.c_str(), strerror(errno)); - g_free(allocated); fclose(f); } const char * -CommandListPage::GetListItemText(char *buffer, size_t size, unsigned idx) const +CommandListPage::GetListItemText(char *buffer, size_t size, + unsigned idx) const noexcept { if (idx == command_item_apply()) return _("===> Apply key bindings "); if (idx == command_item_save()) return _("===> Apply & Save key bindings "); - assert(idx < (unsigned) command_n_commands); + assert(idx < command_n_commands); /* * Format the lines in two aligned columnes for the key name and @@ -450,59 +447,52 @@ * this-command - do this * that-one - do that */ - size_t len = strlen(cmds[idx].name); - strncpy(buffer, cmds[idx].name, size); + const char *name = get_key_command_name(Command(idx)); + size_t len = strlen(name); + strncpy(buffer, name, size); - if (len < get_cmds_max_name_width(cmds)) - memset(buffer + len, ' ', get_cmds_max_name_width(cmds) - len); + if (len < get_cmds_max_name_width()) + memset(buffer + len, ' ', get_cmds_max_name_width() - len); - snprintf(buffer + get_cmds_max_name_width(cmds), - size - get_cmds_max_name_width(cmds), - " - %s", _(cmds[idx].description)); + snprintf(buffer + get_cmds_max_name_width(), + size - get_cmds_max_name_width(), + " - %s", gettext(get_command_definitions()[idx].description)); return buffer; } void -CommandListPage::OnOpen(gcc_unused struct mpdclient &c) +CommandListPage::OnOpen(gcc_unused struct mpdclient &c) noexcept { - if (cmds == nullptr) { - command_definition_t *current_cmds = get_command_definitions(); - command_n_commands = 0; - while (current_cmds[command_n_commands].name) - command_n_commands++; - - /* +1 for the terminator element */ - cmds = new command_definition_t[command_n_commands + 1]; - std::copy_n(current_cmds, command_n_commands + 1, cmds); - } + if (bindings == nullptr) + bindings = new KeyBindings(GetGlobalKeyBindings()); lw.SetLength(command_length()); } const char * -CommandListPage::GetTitle(char *, size_t) const +CommandListPage::GetTitle(char *, size_t) const noexcept { return _("Edit key bindings"); } void -CommandListPage::Paint() const +CommandListPage::Paint() const noexcept { lw.Paint(TextListRenderer(*this)); } bool -CommandListPage::OnCommand(struct mpdclient &c, command_t cmd) +CommandListPage::OnCommand(struct mpdclient &c, Command cmd) { - if (cmd == CMD_LIST_RANGE_SELECT) + if (cmd == Command::LIST_RANGE_SELECT) return false; if (ListPage::OnCommand(c, cmd)) return true; switch(cmd) { - case CMD_PLAY: + case Command::PLAY: if (lw.selected == command_item_apply()) { Apply(); return true; @@ -514,11 +504,11 @@ break; - case CMD_LIST_FIND: - case CMD_LIST_RFIND: - case CMD_LIST_FIND_NEXT: - case CMD_LIST_RFIND_NEXT: - screen_find(screen, &lw, cmd, *this); + case Command::LIST_FIND: + case Command::LIST_RFIND: + case Command::LIST_FIND_NEXT: + case Command::LIST_RFIND_NEXT: + screen_find(screen, lw, cmd, *this); SetDirty(); return true; @@ -530,32 +520,30 @@ } class KeyDefPage final : public ProxyPage { - ScreenManager &screen; - CommandListPage command_list_page; CommandKeysPage command_keys_page; public: - KeyDefPage(ScreenManager &_screen, WINDOW *_w, Size size) - :ProxyPage(_w), screen(_screen), - command_list_page(_screen, _w, size), - command_keys_page(_screen, _w, size) {} + KeyDefPage(ScreenManager &screen, WINDOW *_w, Size size) + :ProxyPage(_w), + command_list_page(screen, _w, size), + command_keys_page(screen, this, _w, size) {} public: /* virtual methods from class Page */ - void OnOpen(struct mpdclient &c) override; - void OnClose() override; - bool OnCommand(struct mpdclient &c, command_t cmd) override; + void OnOpen(struct mpdclient &c) noexcept override; + void OnClose() noexcept override; + bool OnCommand(struct mpdclient &c, Command cmd) override; }; -static Page * +static std::unique_ptr<Page> keydef_init(ScreenManager &screen, WINDOW *w, Size size) { - return new KeyDefPage(screen, w, size); + return std::make_unique<KeyDefPage>(screen, w, size); } void -KeyDefPage::OnOpen(struct mpdclient &c) +KeyDefPage::OnOpen(struct mpdclient &c) noexcept { ProxyPage::OnOpen(c); @@ -564,7 +552,7 @@ } void -KeyDefPage::OnClose() +KeyDefPage::OnClose() noexcept { if (command_list_page.IsModified()) screen_status_message(_("Note: Did you forget to \'Apply\' your changes?")); @@ -573,17 +561,17 @@ } bool -KeyDefPage::OnCommand(struct mpdclient &c, command_t cmd) +KeyDefPage::OnCommand(struct mpdclient &c, Command cmd) { if (ProxyPage::OnCommand(c, cmd)) return true; switch(cmd) { - case CMD_PLAY: + case Command::PLAY: if (GetCurrentPage() == &command_list_page) { int s = command_list_page.GetSelectedCommand(); if (s >= 0) { - command_keys_page.SetCommand(command_list_page.GetCommands(), + command_keys_page.SetCommand(command_list_page.GetBindings(), s); SetCurrentPage(c, &command_keys_page); return true; @@ -592,8 +580,8 @@ break; - case CMD_GO_PARENT_DIRECTORY: - case CMD_GO_ROOT_DIRECTORY: + case Command::GO_PARENT_DIRECTORY: + case Command::GO_ROOT_DIRECTORY: if (GetCurrentPage() != &command_list_page) { SetCurrentPage(c, &command_list_page); return true; @@ -601,7 +589,7 @@ break; - case CMD_SAVE_PLAYLIST: + case Command::SAVE_PLAYLIST: command_list_page.Apply(); command_list_page.Save(); return true; @@ -615,7 +603,9 @@ return false; } -const struct screen_functions screen_keydef = { +const PageMeta screen_keydef = { "keydef", + N_("Keys"), + Command::SCREEN_KEYDEF, keydef_init, };
View file
ncmpc-0.30.tar.xz/src/screen_keydef.hxx -> ncmpc-0.32.tar.xz/src/screen_keydef.hxx
Changed
@@ -23,7 +23,8 @@ #include "config.h" #ifdef ENABLE_KEYDEF_SCREEN -extern const struct screen_functions screen_keydef; +struct PageMeta; +extern const PageMeta screen_keydef; #endif /* ENABLE_KEYDEF_SCREEN */ #endif
View file
ncmpc-0.30.tar.xz/src/screen_list.cxx -> ncmpc-0.32.tar.xz/src/screen_list.cxx
Changed
@@ -18,7 +18,7 @@ */ #include "screen_list.hxx" -#include "screen_interface.hxx" +#include "PageMeta.hxx" #include "screen.hxx" #include "HelpPage.hxx" #include "QueuePage.hxx" @@ -30,27 +30,22 @@ #include "LyricsPage.hxx" #include "OutputsPage.hxx" #include "ChatPage.hxx" +#include "util/Macros.hxx" #include <string.h> -static const struct screen_functions *const screens[] = { +static const PageMeta *const screens[] = { +#ifdef ENABLE_HELP_SCREEN + &screen_help, +#endif &screen_queue, &screen_browse, #ifdef ENABLE_ARTIST_SCREEN &screen_artist, #endif -#ifdef ENABLE_HELP_SCREEN - &screen_help, -#endif #ifdef ENABLE_SEARCH_SCREEN &screen_search, #endif -#ifdef ENABLE_SONG_SCREEN - &screen_song, -#endif -#ifdef ENABLE_KEYDEF_SCREEN - &screen_keydef, -#endif #ifdef ENABLE_LYRICS_SCREEN &screen_lyrics, #endif @@ -60,9 +55,23 @@ #ifdef ENABLE_CHAT_SCREEN &screen_chat, #endif +#ifdef ENABLE_SONG_SCREEN + &screen_song, +#endif +#ifdef ENABLE_KEYDEF_SCREEN + &screen_keydef, +#endif }; -const struct screen_functions * +const PageMeta * +GetPageMeta(unsigned i) +{ + return i < ARRAY_SIZE(screens) + ? screens[i] + : nullptr; +} + +const PageMeta * screen_lookup_name(const char *name) { for (const auto *i : screens) @@ -71,3 +80,13 @@ return nullptr; } + +const PageMeta * +PageByCommand(Command cmd) +{ + for (const auto *i : screens) + if (i->command == cmd) + return i; + + return nullptr; +}
View file
ncmpc-0.30.tar.xz/src/screen_list.hxx -> ncmpc-0.32.tar.xz/src/screen_list.hxx
Changed
@@ -20,12 +20,21 @@ #ifndef SCREEN_LIST_H #define SCREEN_LIST_H -#include "config.h" -#include "ncmpc_curses.h" +#include "util/Compiler.h" -struct screen_functions; +enum class Command : unsigned; +struct PageMeta; -const struct screen_functions * +gcc_const +const PageMeta * +GetPageMeta(unsigned i); + +gcc_pure +const PageMeta * screen_lookup_name(const char *name); +gcc_const +const PageMeta * +PageByCommand(Command cmd); + #endif
View file
ncmpc-0.30.tar.xz/src/screen_paint.cxx -> ncmpc-0.32.tar.xz/src/screen_paint.cxx
Changed
@@ -21,8 +21,7 @@ #include "Page.hxx" #include "config.h" #include "mpdclient.hxx" -#include "options.hxx" -#include "player_command.hxx" +#include "Options.hxx" #include <mpd/client.h> @@ -31,14 +30,10 @@ void ScreenManager::PaintTopWindow() { - const char *title = ""; -#ifndef NCMPC_MINI - if (welcome_source_id == 0) -#endif - title = current_page->second->GetTitle(buf, buf_size); + const char *title = current_page->second->GetTitle(buf, buf_size); assert(title != nullptr); - title_bar.Paint(title); + title_bar.Paint(GetCurrentPageMeta(), title); } void
View file
ncmpc-0.30.tar.xz/src/screen_status.hxx -> ncmpc-0.32.tar.xz/src/screen_status.hxx
Changed
@@ -20,7 +20,7 @@ #ifndef NCMPC_SCREEN_STATUS_H #define NCMPC_SCREEN_STATUS_H -#include "Compiler.h" +#include "util/Compiler.h" void screen_status_message(const char *msg);
View file
ncmpc-0.30.tar.xz/src/screen_utils.cxx -> ncmpc-0.32.tar.xz/src/screen_utils.cxx
Changed
@@ -22,18 +22,17 @@ #include "mpdclient.hxx" #include "config.h" #include "i18n.h" -#include "options.hxx" -#include "colors.hxx" +#include "Options.hxx" +#include "Styles.hxx" #include "wreadln.hxx" #include "ncmpc.hxx" #include <mpd/client.h> #include <string.h> -#include <ctype.h> void -screen_bell() +screen_bell() noexcept { if (options.audible_bell) beep(); @@ -41,8 +40,8 @@ flash(); } -static bool -ignore_key(int key) +static constexpr bool +ignore_key(int key) noexcept { return #ifdef HAVE_GETMOUSE @@ -53,11 +52,11 @@ } int -screen_getch(const char *prompt) +screen_getch(const char *prompt) noexcept { WINDOW *w = screen->status_bar.GetWindow().w; - colors_use(w, COLOR_STATUS_ALERT); + SelectStyle(w, Style::STATUS_ALERT); werase(w); wmove(w, 0, 0); waddstr(w, prompt); @@ -75,14 +74,14 @@ } bool -screen_get_yesno(const char *_prompt, bool def) +screen_get_yesno(const char *_prompt, bool def) noexcept { /* NOTE: if one day a translator decides to use a multi-byte character for one of the yes/no keys, we'll have to parse it properly */ char prompt[256]; snprintf(prompt, sizeof(prompt), - _("%s [%s/%s] "), _prompt, + "%s [%s/%s] ", _prompt, YES_TRANSLATION, NO_TRANSLATION); int key = tolower(screen_getch(prompt)); if (key == YES_TRANSLATION[0]) @@ -97,40 +96,55 @@ screen_readln(const char *prompt, const char *value, History *history, - Completion *completion) + Completion *completion) noexcept { auto *window = &screen->status_bar.GetWindow(); WINDOW *w = window->w; wmove(w, 0,0); curs_set(1); - colors_use(w, COLOR_STATUS_ALERT); - auto result = wreadln(w, prompt, value, window->size.width, + + if (prompt != nullptr) { + SelectStyle(w, Style::STATUS_ALERT); + waddstr(w, prompt); + waddstr(w, ": "); + } + + SelectStyle(w, Style::STATUS); + wattron(w, A_REVERSE); + + auto result = wreadln(w, value, window->size.width, history, completion); curs_set(0); - return std::move(result); + return result; } std::string -screen_read_password(const char *prompt) +screen_read_password(const char *prompt) noexcept { auto *window = &screen->status_bar.GetWindow(); WINDOW *w = window->w; wmove(w, 0,0); curs_set(1); - colors_use(w, COLOR_STATUS_ALERT); + SelectStyle(w, Style::STATUS_ALERT); if (prompt == nullptr) prompt = _("Password"); - auto result = wreadln_masked(w, prompt, nullptr, window->size.width); + waddstr(w, prompt); + waddstr(w, ": "); + + SelectStyle(w, Style::STATUS); + wattron(w, A_REVERSE); + + auto result = wreadln_masked(w, nullptr, window->size.width); curs_set(0); - return std::move(result); + return result; } static const char * -CompletionDisplayString(const char *value) +CompletionDisplayString(const char *value) noexcept { const char *slash = strrchr(value, '/'); if (slash == nullptr) @@ -152,7 +166,7 @@ } void -screen_display_completion_list(Completion::Range range) +screen_display_completion_list(Completion::Range range) noexcept { static Completion::Range prev_range; static size_t prev_length = 0; @@ -170,7 +184,7 @@ offset = 0; } - colors_use(w, COLOR_STATUS_ALERT); + SelectStyle(w, Style::STATUS_ALERT); auto i = std::next(range.begin(), offset); for (unsigned y = 0; y < screen->main_window.size.height; ++y, ++i) { @@ -186,5 +200,5 @@ wclrtobot(w); wrefresh(w); - colors_use(w, COLOR_LIST); + SelectStyle(w, Style::LIST); }
View file
ncmpc-0.30.tar.xz/src/screen_utils.hxx -> ncmpc-0.32.tar.xz/src/screen_utils.hxx
Changed
@@ -21,7 +21,7 @@ #define SCREEN_UTILS_H #include "config.h" -#include "command.hxx" +#include "Command.hxx" #include "History.hxx" #include "Completion.hxx" @@ -29,10 +29,12 @@ class Completion; /* sound an audible and/or visible bell */ -void screen_bell(); +void +screen_bell() noexcept; /* read a character from the status window */ -int screen_getch(const char *prompt); +int +screen_getch(const char *prompt) noexcept; /** * display a prompt, wait for the user to press a key, and compare it with @@ -41,16 +43,17 @@ * @returns true, if the user pressed the key for "yes"; false, if the user * pressed the key for "no"; def otherwise */ -bool screen_get_yesno(const char *prompt, bool def); +bool +screen_get_yesno(const char *prompt, bool def) noexcept; std::string -screen_read_password(const char *prompt); +screen_read_password(const char *prompt) noexcept; std::string screen_readln(const char *prompt, const char *value, - History *history, Completion *completion); + History *history, Completion *completion) noexcept; void -screen_display_completion_list(Completion::Range range); +screen_display_completion_list(Completion::Range range) noexcept; #endif
View file
ncmpc-0.30.tar.xz/src/signals.cxx -> ncmpc-0.32.tar.xz/src/signals.cxx
Changed
@@ -17,104 +17,41 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#include "signals.hxx" -#include "screen.hxx" -#include "Compiler.h" +#include "Instance.hxx" -#include <glib-unix.h> - -#include <signal.h> - -static int sigwinch_pipes[2]; - -static gboolean -handle_quit_signal(gpointer data) -{ - auto *main_loop = (GMainLoop *)data; - - g_main_loop_quit(main_loop); - return false; -} - -static gboolean -sigwinch_event(gcc_unused GIOChannel *source, - gcc_unused GIOCondition condition, gpointer data) +void +Instance::OnSigwinch() { - auto &screen = *(ScreenManager *)data; - - char ignoreme[64]; - if (1 > read(sigwinch_pipes[0], ignoreme, 64)) - exit(EXIT_FAILURE); - endwin(); refresh(); - screen.OnResize(); - - return true; + screen_manager.OnResize(); } -static void -catch_sigwinch(gcc_unused int sig) +void +Instance::AsyncWaitSigwinch() { - if (1 != write(sigwinch_pipes[1], "", 1)) - exit(EXIT_FAILURE); + sigwinch.async_wait([this](const auto &error, int){ + if (error) + return; + + this->OnSigwinch(); + this->AsyncWaitSigwinch(); + }); } void -signals_init(GMainLoop *main_loop, ScreenManager &screen) +Instance::InitSignals() { - /* setup quit signals */ - g_unix_signal_add(SIGTERM, handle_quit_signal, main_loop); - g_unix_signal_add(SIGINT, handle_quit_signal, main_loop); - g_unix_signal_add(SIGHUP, handle_quit_signal, main_loop); + AsyncWaitSigwinch(); - /* setup signal behavior - SIGCONT */ + /* ignore SIGPIPE */ struct sigaction act; sigemptyset(&act.sa_mask); - act.sa_flags = 0; - - act.sa_handler = catch_sigwinch; - if (sigaction(SIGCONT, &act, nullptr) < 0) { - perror("sigaction(SIGCONT)"); - exit(EXIT_FAILURE); - } - - /* setup SIGWINCH */ - act.sa_flags = SA_RESTART; - act.sa_handler = catch_sigwinch; - if (sigaction(SIGWINCH, &act, nullptr) < 0) { - perror("sigaction(SIGWINCH)"); - exit(EXIT_FAILURE); - } - -#ifndef WIN32 - if (!pipe(sigwinch_pipes) && - !fcntl(sigwinch_pipes[1], F_SETFL, O_NONBLOCK)) { - GIOChannel *sigwinch_channel = g_io_channel_unix_new(sigwinch_pipes[0]); - g_io_add_watch(sigwinch_channel, G_IO_IN, - sigwinch_event, &screen); - g_io_channel_unref(sigwinch_channel); - } - else { - perror("sigwinch pipe creation failed"); - exit(EXIT_FAILURE); - } -#endif - - /* ignore SIGPIPE */ - act.sa_handler = SIG_IGN; if (sigaction(SIGPIPE, &act, nullptr) < 0) { perror("sigaction(SIGPIPE)"); exit(EXIT_FAILURE); } } - -void -signals_deinit() -{ - close(sigwinch_pipes[0]); - close(sigwinch_pipes[1]); -}
View file
ncmpc-0.30.tar.xz/src/song_paint.cxx -> ncmpc-0.32.tar.xz/src/song_paint.cxx
Changed
@@ -22,8 +22,8 @@ #include "strfsong.hxx" #include "time_format.hxx" #include "hscroll.hxx" -#include "charset.hxx" #include "config.h" +#include "util/LocaleString.hxx" #include <mpd/client.h> @@ -34,10 +34,10 @@ bool selected, bool highlight, const struct mpd_song *song, gcc_unused class hscroll *hscroll, const char *format) { - char buffer[width * 4]; + char buffer[1024]; strfsong(buffer, sizeof(buffer), format, song); - row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, + row_paint_text(w, width, highlight ? Style::LIST_BOLD : Style::LIST, selected, buffer); #ifndef NCMPC_MINI @@ -51,8 +51,10 @@ waddstr(w, duration); } - if (hscroll != nullptr && utf8_width(buffer) >= width) { - hscroll->Set(0, y, width, buffer); + if (hscroll != nullptr && StringWidthMB(buffer) >= width) { + hscroll->Set(0, y, width, buffer, + highlight ? Style::LIST_BOLD : Style::LIST, + selected ? A_REVERSE : 0); hscroll->Paint(); } #endif
View file
ncmpc-0.30.tar.xz/src/song_paint.hxx -> ncmpc-0.32.tar.xz/src/song_paint.hxx
Changed
@@ -20,8 +20,7 @@ #ifndef NCMPC_SONG_PAINT_H #define NCMPC_SONG_PAINT_H -#include "config.h" -#include "ncmpc_curses.h" +#include <curses.h> struct mpd_song; class hscroll;
View file
ncmpc-0.30.tar.xz/src/strfsong.cxx -> ncmpc-0.32.tar.xz/src/strfsong.cxx
Changed
@@ -20,17 +20,19 @@ #include "strfsong.hxx" #include "charset.hxx" #include "time_format.hxx" +#include "util/UriUtil.hxx" #include <mpd/client.h> -#include <glib.h> +#include <algorithm> #include <string.h> +gcc_pure static const char * -skip(const char * p) +skip(const char *p) noexcept { - gint stack = 0; + unsigned stack = 0; while (*p != '\0') { if (*p == '[') @@ -51,83 +53,69 @@ return p; } -#ifndef NCMPC_MINI - static char * -concat_tag_values(const char *a, const char *b) +CopyString(char *dest, char *const dest_end, + const char *src, size_t length) noexcept { - return g_strconcat(a, ", ", b, nullptr); + if (length >= size_t(dest_end - dest)) + length = dest_end - dest - 1; + + return std::copy_n(src, length, dest); } static char * -song_more_tag_values(const struct mpd_song *song, enum mpd_tag_type tag, - const char *first) +CopyStringFromUTF8(char *dest, char *const dest_end, + const char *src_utf8) noexcept { - const char *p = mpd_song_get_tag(song, tag, 1); - if (p == nullptr) - return nullptr; - - char *buffer = concat_tag_values(first, p); - for (unsigned i = 2; (p = mpd_song_get_tag(song, tag, i)) != nullptr; - ++i) { - char *prev = buffer; - buffer = concat_tag_values(buffer, p); - g_free(prev); - } - - return buffer; + return CopyUtf8ToLocale(dest, dest_end - dest, src_utf8); } -#endif /* !NCMPC_MINI */ - static char * -song_tag_locale(const struct mpd_song *song, enum mpd_tag_type tag) +CopyTag(char *dest, char *const end, + const struct mpd_song *song, enum mpd_tag_type tag) noexcept { const char *value = mpd_song_get_tag(song, tag, 0); if (value == nullptr) - return nullptr; - -#ifndef NCMPC_MINI - char *all = song_more_tag_values(song, tag, value); - if (all != nullptr) - value = all; -#endif /* !NCMPC_MINI */ + return dest; - char *result = utf8_to_locale(value); + dest = CopyStringFromUTF8(dest, end, value); -#ifndef NCMPC_MINI - g_free(all); -#endif /* !NCMPC_MINI */ + for (unsigned i = 1; dest + 5 < end && + (value = mpd_song_get_tag(song, tag, i)) != nullptr; + ++i) { + *dest++ = ','; + *dest++ = ' '; + dest = CopyStringFromUTF8(dest, end, value); + } - return result; + return dest; } static size_t -_strfsong(char *s, - size_t max, +_strfsong(char *const s0, char *const end, const char *format, const struct mpd_song *song, - const char **last) + const char **last) noexcept { bool found = false; /* "missed" helps handling the case of mere literal text like found==true instead of found==false. */ bool missed = false; - s[0] = '\0'; - if (song == nullptr) + if (song == nullptr) { + s0[0] = '\0'; return 0; + } + char *s = s0; const char *p; - size_t length = 0; - for (p = format; *p != '\0' && length<max;) { + for (p = format; *p != '\0' && s < end - 1;) { /* OR */ if (p[0] == '|') { ++p; if(missed && !found) { - s[0] = '\0'; - length = 0; + s = s0; missed = false; } else { p = skip(p); @@ -149,150 +137,145 @@ /* EXPRESSION START */ if (p[0] == '[') { - char *temp = (char *)g_malloc0(max); - if( _strfsong(temp, max, p+1, song, &p) >0 ) { - g_strlcat(s, temp, max); - length = strlen(s); + size_t n = _strfsong(s, end, p + 1, + song, &p); + if (n > 0) { + s += n; found = true; } else { missed = true; } - g_free(temp); continue; } /* EXPRESSION END */ if (p[0] == ']') { - if(last) *last = p+1; - if(missed && !found && length) { - s[0] = '\0'; - length = 0; - } - return length; + ++p; + if (missed && !found) + s = s0; + break; } - /* pass-through non-escaped portions of the format string */ - if (p[0] != '#' && p[0] != '%' && length<max) { - s[length++] = *p; - s[length] = '\0'; - p++; + /* let the escape character escape itself */ + if (p[0] == '#' && p[1] != '\0') { + *s++ = p[1]; + p+=2; continue; } - /* let the escape character escape itself */ - if (p[0] == '#' && p[1] != '\0' && length<max) { - s[length++] = *(p+1); - s[length] = '\0'; - p+=2; + /* pass-through non-escaped portions of the format string */ + if (p[0] != '%') { + *s++ = *p++; continue; } /* advance past the esc character */ /* find the extent of this format specifier (stop at \0, ' ', or esc) */ - char *temp = nullptr; - const char *end = p + 1; - while(*end >= 'a' && *end <= 'z') { - end++; - } - size_t n = end - p + 1; - if(*end != '%') + const char *name_end = p + 1; + while (*name_end >= 'a' && *name_end <= 'z') + ++name_end; + size_t n = name_end - p + 1; + + const char *value = nullptr, *value_utf8 = nullptr; + enum mpd_tag_type tag = MPD_TAG_UNKNOWN; + bool short_tag = false; + char buffer[32]; + + if (*name_end != '%') n--; else if (strncmp("%file%", p, n) == 0) - temp = utf8_to_locale(mpd_song_get_uri(song)); - else if (strncmp("%artist%", p, n) == 0) { - temp = song_tag_locale(song, MPD_TAG_ARTIST); - if (temp == nullptr) { - temp = song_tag_locale(song, MPD_TAG_PERFORMER); - if (temp == nullptr) - temp = song_tag_locale(song, MPD_TAG_COMPOSER); - } - } else if (strncmp("%albumartist", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_ALBUM_ARTIST); + value_utf8 = mpd_song_get_uri(song); + else if (strncmp("%artist%", p, n) == 0) + tag = MPD_TAG_ARTIST; + else if (strncmp("%albumartist%", p, n) == 0) + tag = MPD_TAG_ALBUM_ARTIST; else if (strncmp("%composer%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_COMPOSER); + tag = MPD_TAG_COMPOSER; else if (strncmp("%performer%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_PERFORMER); - else if (strncmp("%title%", p, n) == 0) { - temp = song_tag_locale(song, MPD_TAG_TITLE); - if (temp == nullptr) - temp = song_tag_locale(song, MPD_TAG_NAME); - } else if (strncmp("%album%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_ALBUM); + tag = MPD_TAG_PERFORMER; + else if (strncmp("%title%", p, n) == 0) + tag = MPD_TAG_TITLE; + else if (strncmp("%album%", p, n) == 0) + tag = MPD_TAG_ALBUM; else if (strncmp("%shortalbum%", p, n) == 0) { - temp = song_tag_locale(song, MPD_TAG_ALBUM); - if (temp) { - char *temp2 = g_strndup(temp, 25); - if (strlen(temp) > 25) { - temp2[24] = '.'; - temp2[23] = '.'; - temp2[22] = '.'; - } - g_free(temp); - temp = temp2; - } + tag = MPD_TAG_ALBUM; + short_tag = true; } else if (strncmp("%track%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_TRACK); + tag = MPD_TAG_TRACK; else if (strncmp("%disc%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_DISC); + tag = MPD_TAG_DISC; else if (strncmp("%name%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_NAME); + tag = MPD_TAG_NAME; else if (strncmp("%date%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_DATE); + tag = MPD_TAG_DATE; else if (strncmp("%genre%", p, n) == 0) - temp = song_tag_locale(song, MPD_TAG_GENRE); + tag = MPD_TAG_GENRE; else if (strncmp("%shortfile%", p, n) == 0) { const char *uri = mpd_song_get_uri(song); if (strstr(uri, "://") == nullptr) - uri = g_basename(uri); - temp = utf8_to_locale(uri); + uri = GetUriFilename(uri); + value_utf8 = uri; } else if (strncmp("%time%", p, n) == 0) { unsigned duration = mpd_song_get_duration(song); if (duration > 0) { - char buffer[32]; format_duration_short(buffer, sizeof(buffer), duration); - temp = g_strdup(buffer); + value = buffer; } } - if( temp == nullptr) { - size_t templen=n; + /* advance past the specifier */ + p += n; + + if (tag != MPD_TAG_UNKNOWN) { + char *const old = s; + s = CopyTag(s, end, song, tag); + if (s != old) { + found = true; + + if (short_tag && s > old + 25) + s = std::copy_n("...", 3, old + 22); + } else + missed = true; + + continue; + } + + if (value_utf8 != nullptr) { + found = true; + s = CopyStringFromUTF8(s, end, value_utf8); + continue; + } + + size_t value_length; + + if (value == nullptr) { /* just pass-through any unknown specifiers (including esc) */ - if( length+templen > max ) - templen = max-length; - char *ident = g_strndup(p, templen); - g_strlcat(s, ident, max); - length+=templen; - g_free(ident); + value = p; + value_length = n; missed = true; } else { - size_t templen = strlen(temp); + value_length = strlen(value); found = true; - if( length+templen > max ) - templen = max-length; - g_strlcat(s, temp, max); - length+=templen; - g_free(temp); } - /* advance past the specifier */ - p += n; + s = CopyString(s, end, value, value_length); } if(last) *last = p; - return length; + *s = '\0'; + return s - s0; } size_t strfsong(char *s, size_t max, const char *format, - const struct mpd_song *song) + const struct mpd_song *song) noexcept { - return _strfsong(s, max, format, song, nullptr); + return _strfsong(s, s + max, format, song, nullptr); } -
View file
ncmpc-0.30.tar.xz/src/strfsong.hxx -> ncmpc-0.32.tar.xz/src/strfsong.hxx
Changed
@@ -26,6 +26,6 @@ size_t strfsong(char *s, size_t max, const char *format, - const struct mpd_song *song); + const struct mpd_song *song) noexcept; #endif
View file
ncmpc-0.32.tar.xz/src/util/Compiler.h
Changed
(renamed from src/Compiler.h)
View file
ncmpc-0.32.tar.xz/src/util/LocaleString.cxx
Added
@@ -0,0 +1,186 @@ +/* + * Copyright 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "LocaleString.hxx" + +#include <cwchar> + +#include <string.h> + +bool +IsIncompleteCharMB(const char *s, size_t n) noexcept +{ + auto mb = std::mbstate_t(); + const std::size_t length = std::mbrlen(s, n, &mb); + return length == std::size_t(-2); +} + +std::size_t +StringLengthMB(const char *s, size_t byte_length) noexcept +{ + const char *const end = s + byte_length; + auto state = std::mbstate_t(); + + size_t length = 0; + while (s < end) { + wchar_t w; + std::size_t n = std::mbrtowc(&w, s, end - s, &state); + if (n == std::size_t(-2)) + break; + + if (n == std::size_t(-1) || n == 0) { + ++s; + } else { + s += n; + ++length; + } + } + + return length; + +} + +std::size_t +CharSizeMB(const char *s, size_t n) noexcept +{ + auto mb = std::mbstate_t(); + const std::size_t length = std::mbrlen(s, n, &mb); + if (length == std::size_t(-2)) + return n; + + if (length == std::size_t(-1)) + return 1; + + return length; +} + +const char * +PrevCharMB(const char *start, const char *reference) noexcept +{ + const char *p = reference; + + while (p > start) { + --p; + + auto mb = std::mbstate_t(); + const std::size_t length = std::mbrlen(p, reference - p, &mb); + if (length != std::size_t(-1)) + break; + } + + return p; +} + +const char * +AtCharMB(const char *s, size_t length, size_t i) noexcept +{ + const char *const end = s + length; + auto state = std::mbstate_t(); + + while (i > 0) { + wchar_t w; + std::size_t n = std::mbrtowc(&w, s, end - s, &state); + + if (n == std::size_t(-2)) { + s += strlen(s); + break; + } + + --i; + + if (n == std::size_t(-1) || n == 0) + ++s; + else + s += n; + } + + return s; +} + +size_t +StringWidthMB(const char *s, size_t length) noexcept +{ + const char *const end = s + length; + auto state = std::mbstate_t(); + + size_t width = 0; + while (s < end) { + wchar_t w; + std::size_t n = std::mbrtowc(&w, s, end - s, &state); + if (n == std::size_t(-2)) + break; + + if (n == std::size_t(-1) || n == 0) { + ++s; + } else { + s += n; + int cw = wcwidth(w); + if (cw > 0) + width += cw; + } + } + + return width; +} + +size_t +StringWidthMB(const char *s) noexcept +{ + return StringWidthMB(s, strlen(s)); +} + +const char * +AtWidthMB(const char *s, size_t length, size_t width) noexcept +{ + const char *const end = s + length; + auto state = std::mbstate_t(); + + while (width > 0 && s < end) { + wchar_t w; + std::size_t n = std::mbrtowc(&w, s, end - s, &state); + if (n == std::size_t(-2)) + break; + + if (n == std::size_t(-1) || n == 0) { + --width; + ++s; + } else { + int cw = wcwidth(w); + if (cw > 0) { + if (size_t(cw) > width) + break; + width -= cw; + } + + s += n; + } + } + + return s; +}
View file
ncmpc-0.32.tar.xz/src/util/LocaleString.hxx
Added
@@ -0,0 +1,100 @@ +/* + * Copyright 2018 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef LOCALE_STRING_HXX +#define LOCALE_STRING_HXX + +#include "Compiler.h" + +#include <cstddef> + +/** + * Is the given character incomplete? + */ +gcc_pure +bool +IsIncompleteCharMB(const char *s, size_t n) noexcept; + +/** + * Returns the length of the given locale (multi-byte) string in + * characters. + */ +gcc_pure +std::size_t +StringLengthMB(const char *s, size_t n) noexcept; + +/** + * Wrapper for std::mbrlen() which attempts to recover with a best + * effort from invalid or incomplete sequences. + */ +gcc_pure +std::size_t +CharSizeMB(const char *s, size_t n) noexcept; + +/** + * Determine the start of the character preceding the given reference. + * + * @param s the start of the string + */ +gcc_pure +const char * +PrevCharMB(const char *start, const char *reference) noexcept; + +/** + * Find the `i`th character of the given string. Returns the end of + * the string if the string is shorter than `i` characters. + * + * @param s the start of the string + */ +gcc_pure +const char * +AtCharMB(const char *s, size_t length, size_t i) noexcept; + +/** + * Returns the number of terminal cells occupied by this multi-byte + * string. + */ +gcc_pure +size_t +StringWidthMB(const char *s, size_t length) noexcept; + +gcc_pure +size_t +StringWidthMB(const char *s) noexcept; + +/** + * Find the first character which doesn't fully fit into the given width. + * + * @param s the start of the string + */ +gcc_pure +const char * +AtWidthMB(const char *s, size_t length, size_t width) noexcept; + +#endif
View file
ncmpc-0.32.tar.xz/src/util/ScopeExit.hxx
Added
@@ -0,0 +1,87 @@ +/* + * Copyright (C) 2015 Max Kellermann <max.kellermann@gmail.com> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the + * distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SCOPE_EXIT_HXX +#define SCOPE_EXIT_HXX + +#include <utility> + +/** + * Internal class. Do not use directly. + */ +template<typename F> +class ScopeExitGuard : F { + bool enabled = true; + +public: + explicit ScopeExitGuard(F &&f):F(std::forward<F>(f)) {} + + ScopeExitGuard(ScopeExitGuard &&src) + :F(std::move(src)), enabled(src.enabled) { + src.enabled = false; + } + + ~ScopeExitGuard() { + if (enabled) + F::operator()(); + } + + ScopeExitGuard(const ScopeExitGuard &) = delete; + ScopeExitGuard &operator=(const ScopeExitGuard &) = delete; +}; + +/** + * Internal class. Do not use directly. + */ +struct ScopeExitTag { + /* this operator is a trick so we don't need to close + parantheses at the end of the expression AtScopeExit() + call */ + template<typename F> + ScopeExitGuard<F> operator+(F &&f) { + return ScopeExitGuard<F>(std::forward<F>(f)); + } +}; + +#define ScopeExitCat(a, b) a ## b +#define ScopeExitName(line) ScopeExitCat(at_scope_exit_, line) + +/** + * Call the block after this macro at the end of the current scope. + * Parameters are lambda captures. + * + * This is exception-safe, however the given code block must not throw + * exceptions. + * + * This attempts to be a better boost/scope_exit.hpp, without all of + * Boost's compile-time and runtime bloat. + */ +#define AtScopeExit(...) auto ScopeExitName(__LINE__) = ScopeExitTag() + [__VA_ARGS__]() + +#endif
View file
ncmpc-0.30.tar.xz/src/util/StringStrip.cxx -> ncmpc-0.32.tar.xz/src/util/StringStrip.cxx
Changed
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2017 Max Kellermann <max.kellermann@gmail.com> + * Copyright 2009-2018 Max Kellermann <max.kellermann@gmail.com> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions
View file
ncmpc-0.30.tar.xz/src/util/StringStrip.hxx -> ncmpc-0.32.tar.xz/src/util/StringStrip.hxx
Changed
@@ -1,5 +1,5 @@ /* - * Copyright (C) 2009-2017 Max Kellermann <max.kellermann@gmail.com> + * Copyright 2009-2018 Max Kellermann <max.kellermann@gmail.com> * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -35,35 +35,41 @@ #include <stddef.h> /** - * Returns a pointer to the first non-whitespace character in the - * string, or to the end of the string. + * Skips whitespace at the beginning of the string, and returns the + * first non-whitespace character. If the string has no + * non-whitespace characters, then a pointer to the NULL terminator is + * returned. */ -gcc_pure +gcc_pure gcc_returns_nonnull gcc_nonnull_all const char * StripLeft(const char *p) noexcept; -gcc_pure +gcc_pure gcc_returns_nonnull gcc_nonnull_all static inline char * StripLeft(char *p) noexcept { return const_cast<char *>(StripLeft((const char *)p)); } -gcc_pure +/** + * Skips whitespace at the beginning of the string, and returns the + * first non-whitespace character or the end pointer. + */ +gcc_pure gcc_returns_nonnull gcc_nonnull_all const char * StripLeft(const char *p, const char *end) noexcept; /** * Determine the string's end as if it was stripped on the right side. */ -gcc_pure +gcc_pure gcc_returns_nonnull gcc_nonnull_all const char * StripRight(const char *p, const char *end) noexcept; /** * Determine the string's end as if it was stripped on the right side. */ -gcc_pure +gcc_pure gcc_returns_nonnull gcc_nonnull_all static inline char * StripRight(char *p, char *end) noexcept { @@ -75,13 +81,14 @@ * Determine the string's length as if it was stripped on the right * side. */ -gcc_pure +gcc_pure gcc_nonnull_all size_t StripRight(const char *p, size_t length) noexcept; /** * Strip trailing whitespace by null-terminating the string. */ +gcc_nonnull_all void StripRight(char *p) noexcept; @@ -89,6 +96,7 @@ * Skip whitespace at the beginning and terminate the string after the * last non-whitespace character. */ +gcc_returns_nonnull gcc_nonnull_all char * Strip(char *p) noexcept;
View file
ncmpc-0.32.tar.xz/src/util/StringUTF8.cxx
Added
@@ -0,0 +1,71 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "StringUTF8.hxx" + +#include <string.h> + +#ifdef HAVE_LOCALE_T +#include <langinfo.h> +#include <locale.h> + +static locale_t utf8_locale = locale_t(0); + +ScopeInitUTF8::ScopeInitUTF8() noexcept +{ + const char *charset = nl_langinfo(CODESET); + if (charset == nullptr || strcasecmp(charset, "utf-8") == 0) + /* if we're already UTF-8, we don't need a special + UTF-8 locale */ + return; + + locale_t l = duplocale(LC_GLOBAL_LOCALE); + if (l == locale_t(0)) + return; + + locale_t l2 = newlocale(LC_COLLATE_MASK, "en_US.UTF-8", l); + if (l2 == locale_t(0)) { + freelocale(l); + return; + } + + utf8_locale = l2; +} + +ScopeInitUTF8::~ScopeInitUTF8() noexcept +{ + if (utf8_locale != locale_t(0)) { + freelocale(utf8_locale); + utf8_locale = locale_t(0); + } +} + +#endif + +gcc_pure +int +CollateUTF8(const char *a, const char *b) +{ +#ifdef HAVE_LOCALE_T + if (utf8_locale != locale_t(0)) + return strcoll_l(a, b, utf8_locale); +#endif + + return strcoll(a, b); +}
View file
ncmpc-0.32.tar.xz/src/util/StringUTF8.hxx
Added
@@ -0,0 +1,41 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef STRING_UTF8_HXX +#define STRING_UTF8_HXX + +#include "config.h" +#include "Compiler.h" + +class ScopeInitUTF8 { +#ifdef HAVE_LOCALE_T +public: + ScopeInitUTF8() noexcept; + ~ScopeInitUTF8() noexcept; + + ScopeInitUTF8(const ScopeInitUTF8 &) = delete; + ScopeInitUTF8 &operator=(const ScopeInitUTF8 &) = delete; +#endif +}; + +gcc_pure +int +CollateUTF8(const char *a, const char *b); + +#endif
View file
ncmpc-0.32.tar.xz/src/util/UriUtil.cxx
Added
@@ -0,0 +1,38 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "UriUtil.hxx" + +#include <string.h> + +const char * +GetUriFilename(const char *uri) +{ + const char *slash = strrchr(uri, '/'); + return slash != nullptr ? slash + 1 : uri; +} + +std::string +GetParentUri(const char *uri) +{ + const char *slash = strrchr(uri, '/'); + if (slash == nullptr) + slash = uri; + return std::string(uri, slash); +}
View file
ncmpc-0.32.tar.xz/src/util/UriUtil.hxx
Added
@@ -0,0 +1,45 @@ +/* ncmpc (Ncurses MPD Client) + * (c) 2004-2018 The Music Player Daemon Project + * Project homepage: http://musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef URI_UTIL_HXX +#define URI_UTIL_HXX + +#include "Compiler.h" + +#include <string> + +/** + * Determins the last segment of the given URI path, i.e. the portion + * after the last slash. May return an empty string if the URI ends + * with a slash. + */ +gcc_pure +const char * +GetUriFilename(const char *uri); + +/** + * Return the "parent directory" of the given URI path, i.e. the + * portion up to the last (forward) slash. Returns an empty string if + * there is no parent. + */ +gcc_pure +std::string +GetParentUri(const char *uri); + +#endif
View file
ncmpc-0.30.tar.xz/src/wreadln.cxx -> ncmpc-0.32.tar.xz/src/wreadln.cxx
Changed
@@ -23,13 +23,15 @@ #include "screen_utils.hxx" #include "Point.hxx" #include "config.h" +#include "util/LocaleString.hxx" + +#include <string> #include <assert.h> #include <stdlib.h> #include <string.h> -#include <glib.h> -#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32) +#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32) #include <sys/poll.h> #endif @@ -72,27 +74,44 @@ /** the current value */ std::string value; - wreadln(WINDOW *_w, bool _masked) + wreadln(WINDOW *_w, bool _masked) noexcept :w(_w), masked(_masked) {} + + /** draw line buffer and update cursor position */ + void Paint() const noexcept; + + /** returns the screen column where the cursor is located */ + gcc_pure + unsigned GetCursorColumn() const noexcept; + + /** move the cursor one step to the right */ + void MoveCursorRight() noexcept; + + /** move the cursor one step to the left */ + void MoveCursorLeft() noexcept; + + /** move the cursor to the end of the line */ + void MoveCursorToEnd() noexcept; + + void InsertByte(int key) noexcept; + void DeleteChar(size_t x) noexcept; + void DeleteChar() noexcept { + DeleteChar(cursor); + } }; /** max items stored in the history list */ -static const guint wrln_max_history_length = 32; +static constexpr std::size_t wrln_max_history_length = 32; /** converts a byte position to a screen column */ +gcc_pure static unsigned -byte_to_screen(const char *data, size_t x) +byte_to_screen(const char *data, size_t x) noexcept { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) assert(x <= strlen(data)); - char *dup = g_strndup(data, x); - char *p = replace_locale_to_utf8(dup); - - unsigned width = utf8_width(p); - g_free(p); - - return width; + return StringWidthMB(data, x); #else (void)data; @@ -101,25 +120,20 @@ } /** finds the first character which doesn't fit on the screen */ +gcc_pure static size_t -screen_to_bytes(const char *data, unsigned width) +screen_to_bytes(const char *data, unsigned width) noexcept { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) size_t length = strlen(data); - char *dup = g_strdup(data); while (true) { - dup[length] = 0; - unsigned p_width = locale_width(dup); + unsigned p_width = StringWidthMB(data, length); if (p_width <= width) - break; + return length; --length; } - - g_free(dup); - - return length; #else (void)data; @@ -127,44 +141,30 @@ #endif } -/** returns the screen column where the cursor is located */ -static unsigned -cursor_column(const struct wreadln *wr) +unsigned +wreadln::GetCursorColumn() const noexcept { - return byte_to_screen(wr->value.data() + wr->start, - wr->cursor - wr->start); + return byte_to_screen(value.data() + start, cursor - start); } /** returns the offset in the string to align it at the right border of the screen */ +gcc_pure static inline size_t -right_align_bytes(const char *data, size_t right, unsigned width) +right_align_bytes(const char *data, size_t right, unsigned width) noexcept { #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) size_t start = 0; assert(right <= strlen(data)); - char *dup = g_strndup(data, right); - - while (dup[start] != 0) { - char *p = locale_to_utf8(dup + start); - unsigned p_width = utf8_width(p); - - if (p_width < width) { - g_free(p); + while (start < right) { + if (StringWidthMB(data + start, right - start) < width) break; - } - - gunichar c = g_utf8_get_char(p); - p[g_unichar_to_utf8(c, nullptr)] = 0; - start += strlen(Utf8ToLocale(p).c_str()); - g_free(p); + start += CharSizeMB(data + start, right - start); } - g_free(dup); - return start; #else (void)data; @@ -173,130 +173,61 @@ #endif } -/** returns the size (in bytes) of the next character */ -static inline size_t -next_char_size(const char *data) +void +wreadln::MoveCursorRight() noexcept { -#if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) - char *p = locale_to_utf8(data); - - gunichar c = g_utf8_get_char(p); - p[g_unichar_to_utf8(c, nullptr)] = 0; - size_t size = strlen(Utf8ToLocale(p).c_str()); - g_free(p); - - return size; -#else - (void)data; - - return 1; -#endif -} - -/** returns the size (in bytes) of the previous character */ -static inline size_t -prev_char_size(const char *data, size_t x) -{ -#if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE) - assert(x > 0); - - char *p = locale_to_utf8(data); - - char *q = p; - while (true) { - gunichar c = g_utf8_get_char(q); - size_t size = g_unichar_to_utf8(c, nullptr); - if (size > x) - size = x; - x -= size; - if (x == 0) { - g_free(p); - return size; - } - - q += size; - } -#else - (void)data; - (void)x; - - return 1; -#endif -} - -/* move the cursor one step to the right */ -static inline void cursor_move_right(struct wreadln *wr) -{ - if (wr->cursor == wr->value.length()) + if (cursor == value.length()) return; - size_t size = next_char_size(wr->value.data() + wr->cursor); - wr->cursor += size; - if (cursor_column(wr) >= wr->width) - wr->start = right_align_bytes(wr->value.c_str(), - wr->cursor, wr->width); + size_t size = CharSizeMB(value.data() + cursor, + value.length() - cursor); + cursor += size; + if (GetCursorColumn() >= width) + start = right_align_bytes(value.c_str(), cursor, width); } -/* move the cursor one step to the left */ -static inline void cursor_move_left(struct wreadln *wr) +void +wreadln::MoveCursorLeft() noexcept { - if (wr->cursor == 0) - return; - - size_t size = prev_char_size(wr->value.c_str(), wr->cursor); - assert(wr->cursor >= size); - wr->cursor -= size; - if (wr->cursor < wr->start) - wr->start = wr->cursor; + const char *v = value.c_str(); + const char *new_cursor = PrevCharMB(v, v + cursor); + cursor = new_cursor - v; + if (cursor < start) + start = cursor; } -/* move the cursor to the end of the line */ -static inline void cursor_move_to_eol(struct wreadln *wr) +void +wreadln::MoveCursorToEnd() noexcept { - wr->cursor = wr->value.length(); - if (cursor_column(wr) >= wr->width) - wr->start = right_align_bytes(wr->value.c_str(), - wr->cursor, wr->width); + cursor = value.length(); + if (GetCursorColumn() >= width) + start = right_align_bytes(value.c_str(), + cursor, width); } -/* draw line buffer and update cursor position */ -static inline void drawline(const struct wreadln *wr) +void +wreadln::Paint() const noexcept { - wmove(wr->w, wr->point.y, wr->point.x); + wmove(w, point.y, point.x); /* clear input area */ - whline(wr->w, ' ', wr->width); + whline(w, ' ', width); /* print visible part of the line buffer */ - if (wr->masked) - whline(wr->w, '*', utf8_width(wr->value.c_str() + wr->start)); + if (masked) + whline(w, '*', StringWidthMB(value.c_str() + start)); else - waddnstr(wr->w, wr->value.c_str() + wr->start, - screen_to_bytes(wr->value.c_str(), wr->width)); + waddnstr(w, value.c_str() + start, + screen_to_bytes(value.c_str(), width)); /* move the cursor to the correct position */ - wmove(wr->w, wr->point.y, wr->point.x + cursor_column(wr)); + wmove(w, point.y, point.x + GetCursorColumn()); /* tell ncurses to redraw the screen */ doupdate(); } -#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32) -static bool -multibyte_is_complete(const char *p, size_t length) -{ - char *q = g_locale_to_utf8(p, length, - nullptr, nullptr, nullptr); - if (q != nullptr) { - g_free(q); - return true; - } else { - return false; - } -} -#endif - -static void -wreadln_insert_byte(struct wreadln *wr, gint key) +void +wreadln::InsertByte(int key) noexcept { size_t length = 1; -#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined (WIN32) +#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32) char buffer[32] = { (char)key }; struct pollfd pfd = { .fd = 0, @@ -307,7 +238,7 @@ /* wide version: try to complete the multibyte sequence */ while (length < sizeof(buffer)) { - if (multibyte_is_complete(buffer, length)) + if (!IsIncompleteCharMB(buffer, length)) /* sequence is complete */ break; @@ -317,40 +248,38 @@ /* no more input from keyboard */ break; - buffer[length++] = wgetch(wr->w); + buffer[length++] = wgetch(w); } - wr->value.insert(wr->cursor, buffer, length); + value.insert(cursor, buffer, length); #else - wr->value.insert(wr->cursor, key); + value.insert(cursor, key); #endif - wr->cursor += length; - if (cursor_column(wr) >= wr->width) - wr->start = right_align_bytes(wr->value.c_str(), - wr->cursor, wr->width); + cursor += length; + if (GetCursorColumn() >= width) + start = right_align_bytes(value.c_str(), cursor, width); } -static void -wreadln_delete_char(struct wreadln *wr, size_t x) +void +wreadln::DeleteChar(size_t x) noexcept { - assert(x < wr->value.length()); + assert(x < value.length()); - size_t length = next_char_size(&wr->value[x]); - wr->value.erase(x, length); + size_t length = CharSizeMB(value.data() + x, value.length() - x); + value.erase(x, length); } /* libcurses version */ static std::string _wreadln(WINDOW *w, - const char *prompt, const char *initial_value, unsigned x1, History *history, Completion *completion, - bool masked) + bool masked) noexcept { struct wreadln wr(w, masked); History::iterator hlist, hcurrent; @@ -359,15 +288,8 @@ (void)completion; #endif - /* turn off echo */ - noecho(); /* make sure the cursor is visible */ curs_set(1); - /* print prompt string */ - if (prompt) { - waddstr(w, prompt); - waddstr(w, ": "); - } /* retrieve y and x0 position */ getyx(w, wr.point.y, wr.point.x); /* check the x1 value */ @@ -391,16 +313,16 @@ --hlist; wr.value = *hlist; } - cursor_move_to_eol(&wr); - drawline(&wr); + wr.MoveCursorToEnd(); + wr.Paint(); } else if (initial_value) { /* copy the initial value to the line buffer */ wr.value = initial_value; - cursor_move_to_eol(&wr); - drawline(&wr); + wr.MoveCursorToEnd(); + wr.Paint(); } - gint key = 0; + int key = 0; while (key != 13 && key != '\n') { key = wgetch(w); @@ -425,7 +347,7 @@ auto r = completion->Complete(wr.value.c_str()); if (!r.new_prefix.empty()) { wr.value = std::move(r.new_prefix); - cursor_move_to_eol(&wr); + wr.MoveCursorToEnd(); } else screen_bell(); @@ -443,11 +365,11 @@ case KEY_LEFT: case KEY_CTRL_B: - cursor_move_left(&wr); + wr.MoveCursorLeft(); break; case KEY_RIGHT: case KEY_CTRL_F: - cursor_move_right(&wr); + wr.MoveCursorRight(); break; case KEY_HOME: case KEY_CTRL_A: @@ -456,7 +378,7 @@ break; case KEY_END: case KEY_CTRL_E: - cursor_move_to_eol(&wr); + wr.MoveCursorToEnd(); break; case KEY_CTRL_K: wr.value.erase(wr.cursor); @@ -469,28 +391,28 @@ /* Firstly remove trailing spaces. */ for (; wr.cursor > 0 && wr.value[wr.cursor - 1] == ' ';) { - cursor_move_left(&wr); - wreadln_delete_char(&wr, wr.cursor); + wr.MoveCursorLeft(); + wr.DeleteChar(); } /* Then remove word until next space. */ for (; wr.cursor > 0 && wr.value[wr.cursor - 1] != ' ';) { - cursor_move_left(&wr); - wreadln_delete_char(&wr, wr.cursor); + wr.MoveCursorLeft(); + wr.DeleteChar(); } break; case 127: case KEY_BCKSPC: /* handle backspace: copy all */ case KEY_BACKSPACE: /* chars starting from curpos */ if (wr.cursor > 0) { /* - 1 from buf[n+1] to buf */ - cursor_move_left(&wr); - wreadln_delete_char(&wr, wr.cursor); + wr.MoveCursorLeft(); + wr.DeleteChar(); } break; case KEY_DC: /* handle delete key. As above */ case KEY_CTRL_D: if (wr.cursor < wr.value.length()) - wreadln_delete_char(&wr, wr.cursor); + wr.DeleteChar(); break; case KEY_UP: case KEY_CTRL_P: @@ -504,7 +426,7 @@ --hlist; wr.value = *hlist; } - cursor_move_to_eol(&wr); + wr.MoveCursorToEnd(); break; case KEY_DOWN: case KEY_CTRL_N: @@ -514,7 +436,7 @@ ++hlist; wr.value = *hlist; } - cursor_move_to_eol(&wr); + wr.MoveCursorToEnd(); break; case '\n': @@ -527,10 +449,10 @@ break; default: if (key >= 32) - wreadln_insert_byte(&wr, key); + wr.InsertByte(key); } - drawline(&wr); + wr.Paint(); } /* update history */ @@ -555,21 +477,19 @@ std::string wreadln(WINDOW *w, - const char *prompt, const char *initial_value, unsigned x1, History *history, - Completion *completion) + Completion *completion) noexcept { - return _wreadln(w, prompt, initial_value, x1, + return _wreadln(w, initial_value, x1, history, completion, false); } std::string wreadln_masked(WINDOW *w, - const char *prompt, const char *initial_value, - unsigned x1) + unsigned x1) noexcept { - return _wreadln(w, prompt, initial_value, x1, nullptr, nullptr, true); + return _wreadln(w, initial_value, x1, nullptr, nullptr, true); }
View file
ncmpc-0.30.tar.xz/src/wreadln.hxx -> ncmpc-0.32.tar.xz/src/wreadln.hxx
Changed
@@ -20,30 +20,36 @@ #ifndef WREADLN_H #define WREADLN_H -#include "config.h" #include "History.hxx" -#include "ncmpc_curses.h" + +#include <curses.h> #include <string> class Completion; -/* Note, wreadln calls curs_set() and noecho(), to enable cursor and - * disable echo. wreadln will not restore these settings when exiting! */ +/** + * + * This function calls curs_set(1), to enable cursor. It will not + * restore this settings when exiting. + * + * @param the curses window to use + * @param initial_value initial value or nullptr for a empty line; + * (char *) -1 = get value from history + * @param x1 the maximum x position or 0 + * @param history a pointer to a history list or nullptr + * @param a #Completion instance or nullptr + */ std::string -wreadln(WINDOW *w, /* the curses window to use */ - const char *prompt, /* the prompt string or nullptr */ - const char *initial_value, /* initial value or nullptr for a empty line - * (char *) -1 = get value from history */ - unsigned x1, /* the maximum x position or 0 */ - History *history, /* a pointer to a history list or nullptr */ - Completion *completion /* a GCompletion structure or nullptr */ - ); +wreadln(WINDOW *w, + const char *initial_value, + unsigned x1, + History *history, + Completion *completion) noexcept; std::string wreadln_masked(WINDOW *w, - const char *prompt, const char *initial_value, - unsigned x1); + unsigned x1) noexcept; #endif
View file
ncmpc-0.30.tar.xz/src/xterm_title.cxx -> ncmpc-0.32.tar.xz/src/xterm_title.cxx
Changed
@@ -18,7 +18,7 @@ */ #include "xterm_title.hxx" -#include "options.hxx" +#include "Options.hxx" #include <stdio.h> #include <stdlib.h>
View file
ncmpc-0.30.tar.xz/test/meson.build -> ncmpc-0.32.tar.xz/test/meson.build
Changed
@@ -3,10 +3,7 @@ 'run_hscroll.cxx', objects: ncmpc.extract_objects( 'src/BasicMarquee.cxx', - 'src/charset.cxx', + 'src/util/LocaleString.cxx', ), include_directories: inc, - dependencies: [ - glib_dep, - ], )
View file
ncmpc-0.30.tar.xz/test/run_hscroll.cxx -> ncmpc-0.32.tar.xz/test/run_hscroll.cxx
Changed
@@ -1,20 +1,20 @@ #include "BasicMarquee.hxx" #include "config.h" -#include <glib.h> #include <stdlib.h> #ifdef ENABLE_LOCALE #include <locale.h> #endif +#include <stdio.h> + int main(int argc, char **argv) { - char *p; unsigned width, count; if (argc != 5) { - g_printerr("Usage: %s TEXT SEPARATOR WIDTH COUNT\n", argv[0]); + fprintf(stderr, "Usage: %s TEXT SEPARATOR WIDTH COUNT\n", argv[0]); return 1; } @@ -29,9 +29,8 @@ hscroll.Set(width, argv[1]); for (unsigned i = 0; i < count; ++i) { - p = hscroll.ScrollString(); - g_print("%s\n", p); - g_free(p); + const auto s = hscroll.ScrollString(); + fprintf(stderr, "%.*s\n", int(s.second), s.first); hscroll.Step(); }
View file
ncmpc-0.30.tar.xz/valgrind.suppressions -> ncmpc-0.32.tar.xz/valgrind.suppressions
Changed
@@ -1,484 +1,38 @@ -# GLib allocates a lot of memory which is never freed, and this makes -# it too hard to read valgrind memcheck results. You can pass this -# file with "--suppressions=valgrind.suppressions" to disable lots of -# bogus messages. - -{ - g_main_context_dispatch - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slice_alloc0 - fun:get_dispatch - fun:g_main_context_dispatch -} - -{ - g_main_context_default - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slist_append - fun:g_main_context_new - fun:g_main_context_default -} - -{ - g_main_context_default - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_ptr_array_sized_new - fun:g_main_context_new - fun:g_main_context_default -} - -{ - g_main_context_default - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_main_context_new - fun:g_main_context_default -} - -{ - g_main_context_default - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_main_context_add_poll_unlocked - fun:g_main_context_new - fun:g_main_context_default -} - -{ - g_main_context_default - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_slist_prepend - fun:g_main_context_new - fun:g_main_context_default -} - -{ - g_main_loop_run - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_main_context_iterate - fun:g_main_loop_run - fun:main -} - -{ - g_main_loop_run - Memcheck:Leak - fun:malloc - fun:realloc - fun:g_realloc - fun:g_ptr_array_maybe_expand - fun:g_ptr_array_add - fun:g_main_context_check - fun:g_main_context_iterate - fun:g_main_loop_run -} - -{ - g_get_language_names - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_get_language_names -} - -{ - g_get_language_names - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strconcat - fun:_g_compute_locale_variants - fun:g_get_language_names -} - -{ - g_get_language_names - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_get_language_names -} - -{ - g_get_language_names - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_get_language_names -} - -{ - g_static_private_set - Memcheck:Leak - fun:realloc - fun:g_realloc - fun:g_array_maybe_expand - fun:g_array_set_size - fun:g_static_private_set -} - -{ - g_static_private_set - Memcheck:Leak - fun:malloc - fun:realloc - fun:g_realloc - fun:g_array_maybe_expand - fun:g_array_set_size - fun:g_static_private_set -} - -{ - g_get_language_names - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_hash_table_insert_internal - fun:g_get_language_names -} - -{ - g_get_language_names - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_hash_table_insert_internal - fun:g_get_language_names -} - -{ - g_get_language_names - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_hash_table_new_full - fun:g_get_language_names -} - -{ - g_set_prgname - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_set_prgname -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_private_new_posix_impl - fun:_g_messages_thread_init_nomessage - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_private_new_posix_impl - fun:_g_slice_thread_init_nomessage - fun:g_thread_init_glib -} - -{ - g_slice_init_nomessage - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_slice_init_nomessage -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_private_new_posix_impl - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_mutex_new_posix_impl - fun:_g_messages_thread_init_nomessage - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_thread_self - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_mutex_new_posix_impl - fun:_g_slice_thread_init_nomessage - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_cond_new_posix_impl - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_mutex_new_posix_impl - fun:g_thread_init_glib -} - -{ - g_thread_init_glib - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_mutex_new_posix_impl - fun:_g_mem_thread_init_noprivate_nomessage - fun:g_thread_init_glib -} - -{ - g_get_filename_charsets - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_get_filename_charsets -} - -{ - g_get_filename_charsets2 - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_get_filename_charsets -} - -{ - g_static_private_set - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_slice_alloc - fun:g_array_sized_new - fun:g_static_private_set -} - -{ - g_static_private_get - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_thread_self - fun:g_static_private_get -} - -{ - g_get_charset - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_get_charset -} - -{ - g_get_charset2 - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_get_charset -} - -{ - g_quark_from_static_string - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_hash_table_new_full - fun:g_quark_from_static_string -} - -{ - g_quark_from_static_string - Memcheck:Leak - fun:malloc - fun:realloc - fun:g_realloc - fun:g_quark_from_static_string -} - -{ - g_quark_from_string - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_quark_from_string -} - -{ - g_quark_from_string - Memcheck:Leak - fun:calloc - fun:g_malloc0 - fun:g_hash_table_new_full - fun:g_quark_from_string -} - -{ - g_quark_from_string - Memcheck:Leak - fun:malloc - fun:realloc - fun:g_realloc - fun:g_quark_from_string -} - -{ - g_get_any_init_do - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strdup - fun:g_get_any_init_do -} - -{ - g_get_any_init_do - Memcheck:Leak - fun:malloc - fun:g_malloc - fun:g_strjoinv - fun:g_get_any_init_do -} - { ncurses Memcheck:Leak - fun:malloc - fun:_nc_home_terminfo - fun:_nc_next_db - fun:_nc_read_entry - fun:grab_entry - fun:_nc_setupterm - fun:newterm - fun:ncu_init - fun:main + match-leak-kinds: reachable + fun:*alloc + ... + fun:_nc_setup_tinfo } { ncurses Memcheck:Leak + match-leak-kinds: reachable fun:realloc - fun:_nc_doalloc - fun:_nc_trace_alloc - fun:_nc_trace_buf - fun:_nc_visbuf2n - fun:recur_tries - fun:recur_tries - fun:recur_tries - fun:recur_tries - fun:recur_tries - fun:_nc_trace_tries - fun:_nc_keypad - fun:keypad -} - -{ - ncurses - Memcheck:Leak - fun:malloc - fun:_nc_trace_alloc - fun:_nc_trace_buf - fun:_nc_visbuf2n - fun:recur_tries - fun:recur_tries - fun:recur_tries - fun:_nc_trace_tries - fun:_nc_keypad - fun:keypad -} - -{ - ncurses - Memcheck:Leak - fun:calloc - fun:_nc_init_wacs -} - -{ - ncurses - Memcheck:Leak - fun:malloc - fun:_nc_set_buffer - fun:_nc_setupscreen - fun:newterm -} - -{ - ncurses - Memcheck:Leak - fun:realloc - fun:_nc_doalloc + ... fun:get_space - fun:save_number - fun:tparm + ... + fun:tparam_internal } { ncurses Memcheck:Leak + match-leak-kinds: reachable fun:realloc - fun:_nc_doalloc + ... fun:_nc_tparm_analyze - fun:tparm + fun:tparam_internal } { ncurses Memcheck:Leak - fun:malloc - fun:_nc_scroll_optimize + match-leak-kinds: reachable + fun:calloc + fun:_nc_build_names + fun:_nc_find_type_entry }
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.