Overview

Request 4295 (accepted)

No description set
Submit package home:Aloysius:branches:Multimedia / ncmpc to package Multimedia / ncmpc

ncmpc.changes Changed
x
 
1
@@ -1,4 +1,34 @@
2
 -------------------------------------------------------------------
3
+Thu Oct 11 07:38:47 UTC 2018 - aloisio@gmx.com
4
+
5
+- Update to version 0.32
6
+  * fix crash bug on queue page
7
+  * fix crash bug on lyrics page
8
+  * fix off-by-one buffer overflow bug
9
+  * fix manpage installation directory
10
+  * fix build breakages with some ncurses builds
11
+  * work around GCC 4.9 build failure
12
+  * remove doxygen support
13
+  * new dependency: Boost
14
+  * remove dependency on GLib
15
+  version 0.31
16
+  * fix "No such song" in search screen
17
+  * fix progressbar when colors are disabled
18
+  * enable colors by default
19
+  * allow configuring per-style background colors
20
+  * keep current song in xterm title when MPD is paused
21
+  * load configuration from $XDG_CONFIG_HOME/ncmpc/config
22
+  * always show the screen list at the top
23
+  * fix memory leak
24
+  * require MPD 0.19
25
+
26
+- Refreshed ncmpc-fix_meson_docdir.patch
27
+
28
+- Dropped ncmpc-fix_meson_gcc_config.patch and ncmpc-c++11.patch
29
+
30
+- Spec cleanup
31
+
32
+-------------------------------------------------------------------
33
 Sun Apr 15 17:27:33 UTC 2018 - pascal.bleser@opensuse.org
34
 
35
 - change build to use meson+ninja+sphinx
36
ncmpc.spec Changed
128
 
1
@@ -1,4 +1,7 @@
2
-# vim: set sw=4 ts=4 et:
3
+#
4
+# spec file for package ncmpc
5
+#
6
+# Copyright (c) 2018 Packman team: http://packman.links2linux.org/
7
 # Copyright (c) 2012 Pascal Bleser <pascal.bleser@opensuse.org>
8
 #
9
 # All modifications and additions to the file contributed by third parties
10
@@ -14,24 +17,18 @@
11
 
12
 
13
 Name:           ncmpc
14
-Version:        0.30
15
-Release:        1
16
+Version:        0.32
17
+Release:        0
18
 Summary:        Curses Client for the Music Player Daemon
19
-License:        GPL-2.0+
20
+License:        GPL-2.0-or-later
21
 Group:          Productivity/Multimedia/Sound/Players
22
-Source:         http://www.musicpd.org/download/ncmpc/0/ncmpc-%{version}.tar.xz
23
-Patch1:         ncmpc-fix_meson_gcc_config.patch
24
-Patch2:         ncmpc-c++11.patch
25
-Patch3:         ncmpc-fix_meson_docdir.patch
26
 URL:            http://mpd.wikia.com/wiki/Client:Ncmpc
27
-BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-buildroot
28
-%if %{suse_version} > 1500
29
-BuildRequires:  gcc-c++
30
-%else
31
-BuildRequires:  gcc7-c++
32
-%endif
33
+Source:         https://www.musicpd.org/download/ncmpc/0/ncmpc-%{version}.tar.xz
34
+Patch3:         ncmpc-fix_meson_docdir.patch
35
+BuildRequires:  gcc-c++ >= 7
36
+BuildRequires:  libboost_iostreams-devel >= 1.62
37
 BuildRequires:  ncurses-devel
38
-BuildRequires:  pkg-config
39
+BuildRequires:  pkgconfig
40
 BuildRequires:  pkgconfig(glib-2.0) >= 2.30
41
 BuildRequires:  pkgconfig(libmpdclient) >= 2.9
42
 BuildRequires:  python-Sphinx
43
@@ -39,73 +36,39 @@
44
 BuildRequires:  ninja
45
 
46
 %description
47
-ncmpc is a curses client for the Music Player Daemon (MPD). ncmpc connects to 
48
-a MPD running on a machine on the local network, and controls this with an 
49
+ncmpc is a curses client for the Music Player Daemon (MPD). ncmpc connects to
50
+a MPD running on a machine on the local network, and controls this with an
51
 interface inspired by cplay.
52
 
53
 %lang_package
54
 %prep
55
 %setup -q
56
-%patch1
57
-%patch2
58
 %patch3
59
 
60
 %build
61
-export PKG_CONFIG_PATH="$PWD/pc:$PKG_CONFIG_PATH"
62
-mkdir pc
63
-cat<<EOF > pc/ncursesw.pc
64
-prefix=/usr
65
-libdir=%{_libdir}
66
-
67
-Version: `rpm -q --qf='%{VERSION}' ncurses-devel`
68
-Name: ncursesw
69
-Description: ncursesw
70
-Libs: -L\${libdir} -lncursesw
71
-EOF
72
-test -n "$(type -p g++)"   && CXX=$_
73
-test -n "$(type -p g++-7)" && CXX=$_
74
-
75
-CXX="${CXX}" \
76
-meson \
77
-    --prefix '%{_prefix}' \
78
-    --buildtype debug \
79
-    -Dcurses=ncursesw \
80
-    -Dmouse=true \
81
-    -Dcolors=ncursesw \
82
-    -Dmultibyte=true \
83
-    -Dlocale=true \
84
-    -Dnls=true \
85
-    -Dlirc=false \
86
-    -Dtcp=true \
87
-    -Ddocumentation=false \
88
-    . \
89
-    output
90
-
91
-CXX="${CXX}" \
92
-ninja -C output %{?_smp_mflags} -v
93
+%meson \
94
+       -Dhtml_manual=false
95
+%meson_build
96
 
97
 %install
98
-DESTDIR='%{buildroot}' ninja -C output install -v
99
-
100
-%__rm -rf '%{buildroot}%{_datadir}/doc'
101
+%meson_install
102
 
103
 %find_lang %{name}
104
 
105
 # install config.sample and keys.sample in /etc/ncmpc
106
-%__install -D -m 644 doc/keys.sample $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/keys
107
-%__install -D -m 644 doc/config.sample $RPM_BUILD_ROOT/%{_sysconfdir}/%{name}/config
108
+install -D -m 644 doc/keys.sample %{buildroot}%{_sysconfdir}/%{name}/keys
109
+install -D -m 644 doc/config.sample %{buildroot}%{_sysconfdir}/%{name}/config
110
 
111
 %files lang -f %{name}.lang
112
-%defattr(-,root,root)
113
 
114
 %files
115
-%defattr(-,root,root)
116
-%doc AUTHORS COPYING NEWS README.rst
117
+%license COPYING
118
+%doc AUTHORS NEWS README.rst
119
 %doc doc/*.sample doc/ncmpc.lirc
120
 %{_bindir}/ncmpc
121
 %dir %{_sysconfdir}/%{name}
122
 %config %{_sysconfdir}/%{name}/keys
123
 %config %{_sysconfdir}/%{name}/config
124
-%doc %{_mandir}/man1/ncmpc.1*
125
+%doc %{_mandir}/man1/ncmpc.1%{ext_man}
126
 
127
 %changelog
128
ncmpc-c++11.patch Deleted
44
 
1
@@ -1,42 +0,0 @@
2
---- src/BasicMarquee.cxx.orig  2018-04-15 19:07:11.477337687 +0200
3
-+++ src/BasicMarquee.cxx   2018-04-15 19:07:17.257355182 +0200
4
-@@ -76,5 +76,5 @@
5
-   g_free(text);
6
-   text = nullptr;
7
- 
8
--  g_free(std::exchange(text_utf8, nullptr));
9
-+  g_free(std::__exchange(text_utf8, nullptr));
10
- }
11
---- src/hscroll.cxx.orig   2018-04-15 19:07:28.293388583 +0200
12
-+++ src/hscroll.cxx    2018-04-15 19:07:33.585404598 +0200
13
-@@ -61,7 +61,7 @@
14
-   basic.Clear();
15
- 
16
-   if (source_id != 0)
17
--      g_source_remove(std::exchange(source_id, 0));
18
-+      g_source_remove(std::__exchange(source_id, 0));
19
- }
20
- 
21
- void
22
---- src/Page.hxx.orig  2018-04-15 19:07:38.285418822 +0200
23
-+++ src/Page.hxx   2018-04-15 19:07:42.657432051 +0200
24
-@@ -70,7 +70,7 @@
25
-   }
26
- 
27
-   void Update(struct mpdclient &c) {
28
--      Update(c, std::exchange(pending_events, 0));
29
-+      Update(c, std::__exchange(pending_events, 0));
30
-   }
31
- 
32
- protected:
33
---- src/filelist.hxx.orig  2018-04-15 19:06:49.833272166 +0200
34
-+++ src/filelist.hxx   2018-04-15 19:07:01.865308591 +0200
35
-@@ -38,7 +38,7 @@
36
- 
37
-   FileListEntry(FileListEntry &&src)
38
-       :flags(src.flags),
39
--       entity(std::exchange(src.entity, nullptr)) {}
40
-+       entity(std::__exchange(src.entity, nullptr)) {}
41
- 
42
-   FileListEntry &operator=(FileListEntry &&src) {
43
-       using std::swap;
44
ncmpc-fix_meson_docdir.patch Changed
35
 
1
@@ -1,11 +1,29 @@
2
---- meson.build.orig   2018-04-15 19:10:48.613989140 +0200
3
-+++ meson.build    2018-04-15 19:10:59.522020430 +0200
4
-@@ -380,7 +380,7 @@
5
+Index: meson.build
6
+===================================================================
7
+--- meson.build.orig
8
++++ meson.build
9
+@@ -384,8 +384,8 @@ ncmpc = executable('ncmpc',
10
  
11
  configure_file(output: 'config.h', configuration: conf)
12
  
13
 -docdir = join_paths(get_option('datadir'), 'doc', meson.project_name())
14
+-install_data('AUTHORS', 'COPYING', 'NEWS', 'README.rst',
15
 +docdir = join_paths(get_option('datadir'), 'doc', 'packages', meson.project_name())
16
- install_data('AUTHORS', 'COPYING', 'NEWS', 'README.rst',
17
++install_data('AUTHORS', 'NEWS', 'README.rst',
18
    'doc/config.sample',
19
    'doc/keys.sample',
20
+   'doc/ncmpc.lirc',
21
+Index: doc/meson.build
22
+===================================================================
23
+--- doc/meson.build.orig
24
++++ doc/meson.build
25
+@@ -20,7 +20,8 @@ if sphinx.found()
26
+       command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/man_doctrees', meson.current_source_dir(), '@OUTPUT@/man1'],
27
+       build_by_default: true,
28
+       install: true,
29
+-      install_dir: get_option('mandir'),
30
++      install_dir: get_option('datadir'),
31
+     )
32
+   endif
33
+ endif
34
++
35
ncmpc-fix_meson_gcc_config.patch Deleted
13
 
1
@@ -1,11 +0,0 @@
2
---- meson.build.orig   2018-04-15 18:36:58.559796835 +0200
3
-+++ meson.build    2018-04-15 18:37:04.971816648 +0200
4
-@@ -1,7 +1,7 @@
5
- project('ncmpc', 'cpp',
6
-   version: '0.30',
7
-   default_options: [
8
--    'cpp_std=c++14'
9
-+    'cpp_std=c++11'
10
-   ],
11
-   license: 'GPLv2+',
12
- )
13
ncmpc-0.30.tar.xz/doc/doxygen.conf.in Deleted
2443
 
1
@@ -1,2441 +0,0 @@
2
-# Doxyfile 1.8.13
3
-
4
-# This file describes the settings to be used by the documentation system
5
-# doxygen (www.doxygen.org) for a project.
6
-#
7
-# All text after a double hash (##) is considered a comment and is placed in
8
-# front of the TAG it is preceding.
9
-#
10
-# All text after a single hash (#) is considered a comment and will be ignored.
11
-# The format is:
12
-# TAG = value [value, ...]
13
-# For lists, items can also be appended using:
14
-# TAG += value [value, ...]
15
-# Values that contain spaces should be placed between quotes (\" \").
16
-
17
-#---------------------------------------------------------------------------
18
-# Project related configuration options
19
-#---------------------------------------------------------------------------
20
-
21
-# This tag specifies the encoding used for all characters in the config file
22
-# that follow. The default is UTF-8 which is also the encoding used for all text
23
-# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv
24
-# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv
25
-# for the list of possible encodings.
26
-# The default value is: UTF-8.
27
-
28
-DOXYFILE_ENCODING      = UTF-8
29
-
30
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
31
-# double-quotes, unless you are using Doxywizard) that should identify the
32
-# project for which the documentation is generated. This name is used in the
33
-# title of most generated pages and in a few other places.
34
-# The default value is: My Project.
35
-
36
-PROJECT_NAME           = ncmpc
37
-
38
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
39
-# could be handy for archiving the generated documentation or if some version
40
-# control system is used.
41
-
42
-PROJECT_NUMBER         = @VERSION@
43
-
44
-# Using the PROJECT_BRIEF tag one can provide an optional one line description
45
-# for a project that appears at the top of each page and should give viewer a
46
-# quick idea about the purpose of the project. Keep the description short.
47
-
48
-PROJECT_BRIEF          =
49
-
50
-# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
51
-# in the documentation. The maximum height of the logo should not exceed 55
52
-# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
53
-# the logo to the output directory.
54
-
55
-PROJECT_LOGO           =
56
-
57
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
58
-# into which the generated documentation will be written. If a relative path is
59
-# entered, it will be relative to the location where doxygen was started. If
60
-# left blank the current directory will be used.
61
-
62
-OUTPUT_DIRECTORY       = doc
63
-
64
-# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
65
-# directories (in 2 levels) under the output directory of each output format and
66
-# will distribute the generated files over these directories. Enabling this
67
-# option can be useful when feeding doxygen a huge amount of source files, where
68
-# putting all generated files in the same directory would otherwise causes
69
-# performance problems for the file system.
70
-# The default value is: NO.
71
-
72
-CREATE_SUBDIRS         = NO
73
-
74
-# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
75
-# characters to appear in the names of generated files. If set to NO, non-ASCII
76
-# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
77
-# U+3044.
78
-# The default value is: NO.
79
-
80
-ALLOW_UNICODE_NAMES    = NO
81
-
82
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
83
-# documentation generated by doxygen is written. Doxygen will use this
84
-# information to generate all constant output in the proper language.
85
-# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese,
86
-# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States),
87
-# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian,
88
-# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages),
89
-# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian,
90
-# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian,
91
-# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish,
92
-# Ukrainian and Vietnamese.
93
-# The default value is: English.
94
-
95
-OUTPUT_LANGUAGE        = English
96
-
97
-# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
98
-# descriptions after the members that are listed in the file and class
99
-# documentation (similar to Javadoc). Set to NO to disable this.
100
-# The default value is: YES.
101
-
102
-BRIEF_MEMBER_DESC      = YES
103
-
104
-# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
105
-# description of a member or function before the detailed description
106
-#
107
-# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
108
-# brief descriptions will be completely suppressed.
109
-# The default value is: YES.
110
-
111
-REPEAT_BRIEF           = YES
112
-
113
-# This tag implements a quasi-intelligent brief description abbreviator that is
114
-# used to form the text in various listings. Each string in this list, if found
115
-# as the leading text of the brief description, will be stripped from the text
116
-# and the result, after processing the whole list, is used as the annotated
117
-# text. Otherwise, the brief description is used as-is. If left blank, the
118
-# following values are used ($name is automatically replaced with the name of
119
-# the entity):The $name class, The $name widget, The $name file, is, provides,
120
-# specifies, contains, represents, a, an and the.
121
-
122
-ABBREVIATE_BRIEF       =
123
-
124
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
125
-# doxygen will generate a detailed section even if there is only a brief
126
-# description.
127
-# The default value is: NO.
128
-
129
-ALWAYS_DETAILED_SEC    = NO
130
-
131
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
132
-# inherited members of a class in the documentation of that class as if those
133
-# members were ordinary class members. Constructors, destructors and assignment
134
-# operators of the base classes will not be shown.
135
-# The default value is: NO.
136
-
137
-INLINE_INHERITED_MEMB  = NO
138
-
139
-# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
140
-# before files name in the file list and in the header files. If set to NO the
141
-# shortest path that makes the file name unique will be used
142
-# The default value is: YES.
143
-
144
-FULL_PATH_NAMES        = YES
145
-
146
-# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
147
-# Stripping is only done if one of the specified strings matches the left-hand
148
-# part of the path. The tag can be used to show relative paths in the file list.
149
-# If left blank the directory from which doxygen is run is used as the path to
150
-# strip.
151
-#
152
-# Note that you can specify absolute paths here, but also relative paths, which
153
-# will be relative from the directory where doxygen is started.
154
-# This tag requires that the tag FULL_PATH_NAMES is set to YES.
155
-
156
-STRIP_FROM_PATH        = @abs_top_srcdir@
157
-
158
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
159
-# path mentioned in the documentation of a class, which tells the reader which
160
-# header file to include in order to use a class. If left blank only the name of
161
-# the header file containing the class definition is used. Otherwise one should
162
-# specify the list of include paths that are normally passed to the compiler
163
-# using the -I flag.
164
-
165
-STRIP_FROM_INC_PATH    =
166
-
167
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but
168
-# less readable) file names. This can be useful is your file systems doesn't
169
-# support long names like on DOS, Mac, or CD-ROM.
170
-# The default value is: NO.
171
-
172
-SHORT_NAMES            = NO
173
-
174
-# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the
175
-# first line (until the first dot) of a Javadoc-style comment as the brief
176
-# description. If set to NO, the Javadoc-style will behave just like regular Qt-
177
-# style comments (thus requiring an explicit @brief command for a brief
178
-# description.)
179
-# The default value is: NO.
180
-
181
-JAVADOC_AUTOBRIEF      = NO
182
-
183
-# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first
184
-# line (until the first dot) of a Qt-style comment as the brief description. If
185
-# set to NO, the Qt-style will behave just like regular Qt-style comments (thus
186
-# requiring an explicit \brief command for a brief description.)
187
-# The default value is: NO.
188
-
189
-QT_AUTOBRIEF           = NO
190
-
191
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a
192
-# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
193
-# a brief description. This used to be the default behavior. The new default is
194
-# to treat a multi-line C++ comment block as a detailed description. Set this
195
-# tag to YES if you prefer the old behavior instead.
196
-#
197
-# Note that setting this tag to YES also means that rational rose comments are
198
-# not recognized any more.
199
-# The default value is: NO.
200
-
201
-MULTILINE_CPP_IS_BRIEF = NO
202
-
203
-# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
204
-# documentation from any documented member that it re-implements.
205
-# The default value is: YES.
206
-
207
-INHERIT_DOCS           = YES
208
-
209
-# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
210
-# page for each member. If set to NO, the documentation of a member will be part
211
-# of the file/class/namespace that contains it.
212
-# The default value is: NO.
213
-
214
-SEPARATE_MEMBER_PAGES  = NO
215
-
216
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
217
-# uses this value to replace tabs by spaces in code fragments.
218
-# Minimum value: 1, maximum value: 16, default value: 4.
219
-
220
-TAB_SIZE               = 8
221
-
222
-# This tag can be used to specify a number of aliases that act as commands in
223
-# the documentation. An alias has the form:
224
-# name=value
225
-# For example adding
226
-# "sideeffect=@par Side Effects:\n"
227
-# will allow you to put the command \sideeffect (or @sideeffect) in the
228
-# documentation, which will result in a user-defined paragraph with heading
229
-# "Side Effects:". You can put \n's in the value part of an alias to insert
230
-# newlines.
231
-
232
-ALIASES                =
233
-
234
-# This tag can be used to specify a number of word-keyword mappings (TCL only).
235
-# A mapping has the form "name=value". For example adding "class=itcl::class"
236
-# will allow you to use the command class in the itcl::class meaning.
237
-
238
-TCL_SUBST              =
239
-
240
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
241
-# only. Doxygen will then generate output that is more tailored for C. For
242
-# instance, some of the names that are used will be different. The list of all
243
-# members will be omitted, etc.
244
-# The default value is: NO.
245
-
246
-OPTIMIZE_OUTPUT_FOR_C  = YES
247
-
248
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
249
-# Python sources only. Doxygen will then generate output that is more tailored
250
-# for that language. For instance, namespaces will be presented as packages,
251
-# qualified scopes will look different, etc.
252
-# The default value is: NO.
253
-
254
-OPTIMIZE_OUTPUT_JAVA   = NO
255
-
256
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
257
-# sources. Doxygen will then generate output that is tailored for Fortran.
258
-# The default value is: NO.
259
-
260
-OPTIMIZE_FOR_FORTRAN   = NO
261
-
262
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
263
-# sources. Doxygen will then generate output that is tailored for VHDL.
264
-# The default value is: NO.
265
-
266
-OPTIMIZE_OUTPUT_VHDL   = NO
267
-
268
-# Doxygen selects the parser to use depending on the extension of the files it
269
-# parses. With this tag you can assign which parser to use for a given
270
-# extension. Doxygen has a built-in mapping, but you can override or extend it
271
-# using this tag. The format is ext=language, where ext is a file extension, and
272
-# language is one of the parsers supported by doxygen: IDL, Java, Javascript,
273
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
274
-# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
275
-# Fortran. In the later case the parser tries to guess whether the code is fixed
276
-# or free formatted code, this is the default for Fortran type files), VHDL. For
277
-# instance to make doxygen treat .inc files as Fortran files (default is PHP),
278
-# and .f files as C (default is Fortran), use: inc=Fortran f=C.
279
-#
280
-# Note: For files without extension you can use no_extension as a placeholder.
281
-#
282
-# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
283
-# the files are not read by doxygen.
284
-
285
-EXTENSION_MAPPING      =
286
-
287
-# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments
288
-# according to the Markdown format, which allows for more readable
289
-# documentation. See http://daringfireball.net/projects/markdown/ for details.
290
-# The output of markdown processing is further processed by doxygen, so you can
291
-# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in
292
-# case of backward compatibilities issues.
293
-# The default value is: YES.
294
-
295
-MARKDOWN_SUPPORT       = YES
296
-
297
-# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
298
-# to that level are automatically included in the table of contents, even if
299
-# they do not have an id attribute.
300
-# Note: This feature currently applies only to Markdown headings.
301
-# Minimum value: 0, maximum value: 99, default value: 0.
302
-# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
303
-
304
-TOC_INCLUDE_HEADINGS   = 0
305
-
306
-# When enabled doxygen tries to link words that correspond to documented
307
-# classes, or namespaces to their corresponding documentation. Such a link can
308
-# be prevented in individual cases by putting a % sign in front of the word or
309
-# globally by setting AUTOLINK_SUPPORT to NO.
310
-# The default value is: YES.
311
-
312
-AUTOLINK_SUPPORT       = YES
313
-
314
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
315
-# to include (a tag file for) the STL sources as input, then you should set this
316
-# tag to YES in order to let doxygen match functions declarations and
317
-# definitions whose arguments contain STL classes (e.g. func(std::string);
318
-# versus func(std::string) {}). This also make the inheritance and collaboration
319
-# diagrams that involve STL classes more complete and accurate.
320
-# The default value is: NO.
321
-
322
-BUILTIN_STL_SUPPORT    = NO
323
-
324
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
325
-# enable parsing support.
326
-# The default value is: NO.
327
-
328
-CPP_CLI_SUPPORT        = NO
329
-
330
-# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
331
-# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen
332
-# will parse them like normal C++ but will assume all classes use public instead
333
-# of private inheritance when no explicit protection keyword is present.
334
-# The default value is: NO.
335
-
336
-SIP_SUPPORT            = NO
337
-
338
-# For Microsoft's IDL there are propget and propput attributes to indicate
339
-# getter and setter methods for a property. Setting this option to YES will make
340
-# doxygen to replace the get and set methods by a property in the documentation.
341
-# This will only work if the methods are indeed getting or setting a simple
342
-# type. If this is not the case, or you want to show the methods anyway, you
343
-# should set this option to NO.
344
-# The default value is: YES.
345
-
346
-IDL_PROPERTY_SUPPORT   = YES
347
-
348
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
349
-# tag is set to YES then doxygen will reuse the documentation of the first
350
-# member in the group (if any) for the other members of the group. By default
351
-# all members of a group must be documented explicitly.
352
-# The default value is: NO.
353
-
354
-DISTRIBUTE_GROUP_DOC   = NO
355
-
356
-# If one adds a struct or class to a group and this option is enabled, then also
357
-# any nested class or struct is added to the same group. By default this option
358
-# is disabled and one has to add nested compounds explicitly via \ingroup.
359
-# The default value is: NO.
360
-
361
-GROUP_NESTED_COMPOUNDS = NO
362
-
363
-# Set the SUBGROUPING tag to YES to allow class member groups of the same type
364
-# (for instance a group of public functions) to be put as a subgroup of that
365
-# type (e.g. under the Public Functions section). Set it to NO to prevent
366
-# subgrouping. Alternatively, this can be done per class using the
367
-# \nosubgrouping command.
368
-# The default value is: YES.
369
-
370
-SUBGROUPING            = YES
371
-
372
-# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
373
-# are shown inside the group in which they are included (e.g. using \ingroup)
374
-# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
375
-# and RTF).
376
-#
377
-# Note that this feature does not work in combination with
378
-# SEPARATE_MEMBER_PAGES.
379
-# The default value is: NO.
380
-
381
-INLINE_GROUPED_CLASSES = NO
382
-
383
-# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
384
-# with only public data fields or simple typedef fields will be shown inline in
385
-# the documentation of the scope in which they are defined (i.e. file,
386
-# namespace, or group documentation), provided this scope is documented. If set
387
-# to NO, structs, classes, and unions are shown on a separate page (for HTML and
388
-# Man pages) or section (for LaTeX and RTF).
389
-# The default value is: NO.
390
-
391
-INLINE_SIMPLE_STRUCTS  = NO
392
-
393
-# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
394
-# enum is documented as struct, union, or enum with the name of the typedef. So
395
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
396
-# with name TypeT. When disabled the typedef will appear as a member of a file,
397
-# namespace, or class. And the struct will be named TypeS. This can typically be
398
-# useful for C code in case the coding convention dictates that all compound
399
-# types are typedef'ed and only the typedef is referenced, never the tag name.
400
-# The default value is: NO.
401
-
402
-TYPEDEF_HIDES_STRUCT   = NO
403
-
404
-# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
405
-# cache is used to resolve symbols given their name and scope. Since this can be
406
-# an expensive process and often the same symbol appears multiple times in the
407
-# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small
408
-# doxygen will become slower. If the cache is too large, memory is wasted. The
409
-# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
410
-# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
411
-# symbols. At the end of a run doxygen will report the cache usage and suggest
412
-# the optimal cache size from a speed point of view.
413
-# Minimum value: 0, maximum value: 9, default value: 0.
414
-
415
-LOOKUP_CACHE_SIZE      = 0
416
-
417
-#---------------------------------------------------------------------------
418
-# Build related configuration options
419
-#---------------------------------------------------------------------------
420
-
421
-# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
422
-# documentation are documented, even if no documentation was available. Private
423
-# class members and static file members will be hidden unless the
424
-# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
425
-# Note: This will also disable the warnings about undocumented members that are
426
-# normally produced when WARNINGS is set to YES.
427
-# The default value is: NO.
428
-
429
-EXTRACT_ALL            = YES
430
-
431
-# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
432
-# be included in the documentation.
433
-# The default value is: NO.
434
-
435
-EXTRACT_PRIVATE        = NO
436
-
437
-# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
438
-# scope will be included in the documentation.
439
-# The default value is: NO.
440
-
441
-EXTRACT_PACKAGE        = NO
442
-
443
-# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
444
-# included in the documentation.
445
-# The default value is: NO.
446
-
447
-EXTRACT_STATIC         = NO
448
-
449
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
450
-# locally in source files will be included in the documentation. If set to NO,
451
-# only classes defined in header files are included. Does not have any effect
452
-# for Java sources.
453
-# The default value is: YES.
454
-
455
-EXTRACT_LOCAL_CLASSES  = YES
456
-
457
-# This flag is only useful for Objective-C code. If set to YES, local methods,
458
-# which are defined in the implementation section but not in the interface are
459
-# included in the documentation. If set to NO, only methods in the interface are
460
-# included.
461
-# The default value is: NO.
462
-
463
-EXTRACT_LOCAL_METHODS  = NO
464
-
465
-# If this flag is set to YES, the members of anonymous namespaces will be
466
-# extracted and appear in the documentation as a namespace called
467
-# 'anonymous_namespace{file}', where file will be replaced with the base name of
468
-# the file that contains the anonymous namespace. By default anonymous namespace
469
-# are hidden.
470
-# The default value is: NO.
471
-
472
-EXTRACT_ANON_NSPACES   = NO
473
-
474
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all
475
-# undocumented members inside documented classes or files. If set to NO these
476
-# members will be included in the various overviews, but no documentation
477
-# section is generated. This option has no effect if EXTRACT_ALL is enabled.
478
-# The default value is: NO.
479
-
480
-HIDE_UNDOC_MEMBERS     = NO
481
-
482
-# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
483
-# undocumented classes that are normally visible in the class hierarchy. If set
484
-# to NO, these classes will be included in the various overviews. This option
485
-# has no effect if EXTRACT_ALL is enabled.
486
-# The default value is: NO.
487
-
488
-HIDE_UNDOC_CLASSES     = NO
489
-
490
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
491
-# (class|struct|union) declarations. If set to NO, these declarations will be
492
-# included in the documentation.
493
-# The default value is: NO.
494
-
495
-HIDE_FRIEND_COMPOUNDS  = NO
496
-
497
-# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
498
-# documentation blocks found inside the body of a function. If set to NO, these
499
-# blocks will be appended to the function's detailed documentation block.
500
-# The default value is: NO.
501
-
502
-HIDE_IN_BODY_DOCS      = NO
503
-
504
-# The INTERNAL_DOCS tag determines if documentation that is typed after a
505
-# \internal command is included. If the tag is set to NO then the documentation
506
-# will be excluded. Set it to YES to include the internal documentation.
507
-# The default value is: NO.
508
-
509
-INTERNAL_DOCS          = NO
510
-
511
-# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
512
-# names in lower-case letters. If set to YES, upper-case letters are also
513
-# allowed. This is useful if you have classes or files whose names only differ
514
-# in case and if your file system supports case sensitive file names. Windows
515
-# and Mac users are advised to set this option to NO.
516
-# The default value is: system dependent.
517
-
518
-CASE_SENSE_NAMES       = YES
519
-
520
-# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
521
-# their full class and namespace scopes in the documentation. If set to YES, the
522
-# scope will be hidden.
523
-# The default value is: NO.
524
-
525
-HIDE_SCOPE_NAMES       = NO
526
-
527
-# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
528
-# append additional text to a page's title, such as Class Reference. If set to
529
-# YES the compound reference will be hidden.
530
-# The default value is: NO.
531
-
532
-HIDE_COMPOUND_REFERENCE= NO
533
-
534
-# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
535
-# the files that are included by a file in the documentation of that file.
536
-# The default value is: YES.
537
-
538
-SHOW_INCLUDE_FILES     = YES
539
-
540
-# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
541
-# grouped member an include statement to the documentation, telling the reader
542
-# which file to include in order to use the member.
543
-# The default value is: NO.
544
-
545
-SHOW_GROUPED_MEMB_INC  = NO
546
-
547
-# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include
548
-# files with double quotes in the documentation rather than with sharp brackets.
549
-# The default value is: NO.
550
-
551
-FORCE_LOCAL_INCLUDES   = NO
552
-
553
-# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
554
-# documentation for inline members.
555
-# The default value is: YES.
556
-
557
-INLINE_INFO            = YES
558
-
559
-# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
560
-# (detailed) documentation of file and class members alphabetically by member
561
-# name. If set to NO, the members will appear in declaration order.
562
-# The default value is: YES.
563
-
564
-SORT_MEMBER_DOCS       = NO
565
-
566
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
567
-# descriptions of file, namespace and class members alphabetically by member
568
-# name. If set to NO, the members will appear in declaration order. Note that
569
-# this will also influence the order of the classes in the class list.
570
-# The default value is: NO.
571
-
572
-SORT_BRIEF_DOCS        = NO
573
-
574
-# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the
575
-# (brief and detailed) documentation of class members so that constructors and
576
-# destructors are listed first. If set to NO the constructors will appear in the
577
-# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
578
-# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
579
-# member documentation.
580
-# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
581
-# detailed member documentation.
582
-# The default value is: NO.
583
-
584
-SORT_MEMBERS_CTORS_1ST = NO
585
-
586
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy
587
-# of group names into alphabetical order. If set to NO the group names will
588
-# appear in their defined order.
589
-# The default value is: NO.
590
-
591
-SORT_GROUP_NAMES       = NO
592
-
593
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
594
-# fully-qualified names, including namespaces. If set to NO, the class list will
595
-# be sorted only by class name, not including the namespace part.
596
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
597
-# Note: This option applies only to the class list, not to the alphabetical
598
-# list.
599
-# The default value is: NO.
600
-
601
-SORT_BY_SCOPE_NAME     = NO
602
-
603
-# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper
604
-# type resolution of all parameters of a function it will reject a match between
605
-# the prototype and the implementation of a member function even if there is
606
-# only one candidate or it is obvious which candidate to choose by doing a
607
-# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still
608
-# accept a match between prototype and implementation in such cases.
609
-# The default value is: NO.
610
-
611
-STRICT_PROTO_MATCHING  = NO
612
-
613
-# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
614
-# list. This list is created by putting \todo commands in the documentation.
615
-# The default value is: YES.
616
-
617
-GENERATE_TODOLIST      = YES
618
-
619
-# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
620
-# list. This list is created by putting \test commands in the documentation.
621
-# The default value is: YES.
622
-
623
-GENERATE_TESTLIST      = YES
624
-
625
-# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
626
-# list. This list is created by putting \bug commands in the documentation.
627
-# The default value is: YES.
628
-
629
-GENERATE_BUGLIST       = YES
630
-
631
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
632
-# the deprecated list. This list is created by putting \deprecated commands in
633
-# the documentation.
634
-# The default value is: YES.
635
-
636
-GENERATE_DEPRECATEDLIST= YES
637
-
638
-# The ENABLED_SECTIONS tag can be used to enable conditional documentation
639
-# sections, marked by \if <section_label> ... \endif and \cond <section_label>
640
-# ... \endcond blocks.
641
-
642
-ENABLED_SECTIONS       =
643
-
644
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
645
-# initial value of a variable or macro / define can have for it to appear in the
646
-# documentation. If the initializer consists of more lines than specified here
647
-# it will be hidden. Use a value of 0 to hide initializers completely. The
648
-# appearance of the value of individual variables and macros / defines can be
649
-# controlled using \showinitializer or \hideinitializer command in the
650
-# documentation regardless of this setting.
651
-# Minimum value: 0, maximum value: 10000, default value: 30.
652
-
653
-MAX_INITIALIZER_LINES  = 30
654
-
655
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
656
-# the bottom of the documentation of classes and structs. If set to YES, the
657
-# list will mention the files that were used to generate the documentation.
658
-# The default value is: YES.
659
-
660
-SHOW_USED_FILES        = YES
661
-
662
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
663
-# will remove the Files entry from the Quick Index and from the Folder Tree View
664
-# (if specified).
665
-# The default value is: YES.
666
-
667
-SHOW_FILES             = YES
668
-
669
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
670
-# page. This will remove the Namespaces entry from the Quick Index and from the
671
-# Folder Tree View (if specified).
672
-# The default value is: YES.
673
-
674
-SHOW_NAMESPACES        = YES
675
-
676
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
677
-# doxygen should invoke to get the current version for each file (typically from
678
-# the version control system). Doxygen will invoke the program by executing (via
679
-# popen()) the command command input-file, where command is the value of the
680
-# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
681
-# by doxygen. Whatever the program writes to standard output is used as the file
682
-# version. For an example see the documentation.
683
-
684
-FILE_VERSION_FILTER    =
685
-
686
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
687
-# by doxygen. The layout file controls the global structure of the generated
688
-# output files in an output format independent way. To create the layout file
689
-# that represents doxygen's defaults, run doxygen with the -l option. You can
690
-# optionally specify a file name after the option, if omitted DoxygenLayout.xml
691
-# will be used as the name of the layout file.
692
-#
693
-# Note that if you run doxygen from a directory containing a file called
694
-# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE
695
-# tag is left empty.
696
-
697
-LAYOUT_FILE            =
698
-
699
-# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
700
-# the reference definitions. This must be a list of .bib files. The .bib
701
-# extension is automatically appended if omitted. This requires the bibtex tool
702
-# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
703
-# For LaTeX the style of the bibliography can be controlled using
704
-# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
705
-# search path. See also \cite for info how to create references.
706
-
707
-CITE_BIB_FILES         =
708
-
709
-#---------------------------------------------------------------------------
710
-# Configuration options related to warning and progress messages
711
-#---------------------------------------------------------------------------
712
-
713
-# The QUIET tag can be used to turn on/off the messages that are generated to
714
-# standard output by doxygen. If QUIET is set to YES this implies that the
715
-# messages are off.
716
-# The default value is: NO.
717
-
718
-QUIET                  = YES
719
-
720
-# The WARNINGS tag can be used to turn on/off the warning messages that are
721
-# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
722
-# this implies that the warnings are on.
723
-#
724
-# Tip: Turn warnings on while writing the documentation.
725
-# The default value is: YES.
726
-
727
-WARNINGS               = YES
728
-
729
-# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
730
-# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
731
-# will automatically be disabled.
732
-# The default value is: YES.
733
-
734
-WARN_IF_UNDOCUMENTED   = YES
735
-
736
-# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
737
-# potential errors in the documentation, such as not documenting some parameters
738
-# in a documented function, or documenting parameters that don't exist or using
739
-# markup commands wrongly.
740
-# The default value is: YES.
741
-
742
-WARN_IF_DOC_ERROR      = YES
743
-
744
-# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
745
-# are documented, but have no documentation for their parameters or return
746
-# value. If set to NO, doxygen will only warn about wrong or incomplete
747
-# parameter documentation, but not about the absence of documentation.
748
-# The default value is: NO.
749
-
750
-WARN_NO_PARAMDOC       = NO
751
-
752
-# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
753
-# a warning is encountered.
754
-# The default value is: NO.
755
-
756
-WARN_AS_ERROR          = NO
757
-
758
-# The WARN_FORMAT tag determines the format of the warning messages that doxygen
759
-# can produce. The string should contain the $file, $line, and $text tags, which
760
-# will be replaced by the file and line number from which the warning originated
761
-# and the warning text. Optionally the format may contain $version, which will
762
-# be replaced by the version of the file (if it could be obtained via
763
-# FILE_VERSION_FILTER)
764
-# The default value is: $file:$line: $text.
765
-
766
-WARN_FORMAT            = "$file:$line: $text"
767
-
768
-# The WARN_LOGFILE tag can be used to specify a file to which warning and error
769
-# messages should be written. If left blank the output is written to standard
770
-# error (stderr).
771
-
772
-WARN_LOGFILE           =
773
-
774
-#---------------------------------------------------------------------------
775
-# Configuration options related to the input files
776
-#---------------------------------------------------------------------------
777
-
778
-# The INPUT tag is used to specify the files and/or directories that contain
779
-# documented source files. You may enter file names like myfile.cpp or
780
-# directories like /usr/src/myproject. Separate the files or directories with
781
-# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
782
-# Note: If this tag is empty the current directory is searched.
783
-
784
-INPUT                  = @abs_top_srcdir@/src/
785
-
786
-# This tag can be used to specify the character encoding of the source files
787
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
788
-# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
789
-# documentation (see: http://www.gnu.org/software/libiconv) for the list of
790
-# possible encodings.
791
-# The default value is: UTF-8.
792
-
793
-INPUT_ENCODING         = UTF-8
794
-
795
-# If the value of the INPUT tag contains directories, you can use the
796
-# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
797
-# *.h) to filter out the source-files in the directories.
798
-#
799
-# Note that for custom extensions or not directly supported extensions you also
800
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
801
-# read by doxygen.
802
-#
803
-# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
804
-# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
805
-# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
806
-# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
807
-# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
808
-
809
-FILE_PATTERNS          = *.h *.hxx
810
-
811
-# The RECURSIVE tag can be used to specify whether or not subdirectories should
812
-# be searched for input files as well.
813
-# The default value is: NO.
814
-
815
-RECURSIVE              = NO
816
-
817
-# The EXCLUDE tag can be used to specify files and/or directories that should be
818
-# excluded from the INPUT source files. This way you can easily exclude a
819
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
820
-#
821
-# Note that relative paths are relative to the directory from which doxygen is
822
-# run.
823
-
824
-EXCLUDE                =
825
-
826
-# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
827
-# directories that are symbolic links (a Unix file system feature) are excluded
828
-# from the input.
829
-# The default value is: NO.
830
-
831
-EXCLUDE_SYMLINKS       = NO
832
-
833
-# If the value of the INPUT tag contains directories, you can use the
834
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
835
-# certain files from those directories.
836
-#
837
-# Note that the wildcards are matched against the file with absolute path, so to
838
-# exclude all test directories for example use the pattern */test/*
839
-
840
-EXCLUDE_PATTERNS       =
841
-
842
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
843
-# (namespaces, classes, functions, etc.) that should be excluded from the
844
-# output. The symbol name can be a fully qualified name, a word, or if the
845
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
846
-# AClass::ANamespace, ANamespace::*Test
847
-#
848
-# Note that the wildcards are matched against the file with absolute path, so to
849
-# exclude all test directories use the pattern */test/*
850
-
851
-EXCLUDE_SYMBOLS        =
852
-
853
-# The EXAMPLE_PATH tag can be used to specify one or more files or directories
854
-# that contain example code fragments that are included (see the \include
855
-# command).
856
-
857
-EXAMPLE_PATH           =
858
-
859
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
860
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
861
-# *.h) to filter out the source-files in the directories. If left blank all
862
-# files are included.
863
-
864
-EXAMPLE_PATTERNS       =
865
-
866
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
867
-# searched for input files to be used with the \include or \dontinclude commands
868
-# irrespective of the value of the RECURSIVE tag.
869
-# The default value is: NO.
870
-
871
-EXAMPLE_RECURSIVE      = NO
872
-
873
-# The IMAGE_PATH tag can be used to specify one or more files or directories
874
-# that contain images that are to be included in the documentation (see the
875
-# \image command).
876
-
877
-IMAGE_PATH             =
878
-
879
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
880
-# invoke to filter for each input file. Doxygen will invoke the filter program
881
-# by executing (via popen()) the command:
882
-#
883
-# <filter> <input-file>
884
-#
885
-# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
886
-# name of an input file. Doxygen will then use the output that the filter
887
-# program writes to standard output. If FILTER_PATTERNS is specified, this tag
888
-# will be ignored.
889
-#
890
-# Note that the filter must not add or remove lines; it is applied before the
891
-# code is scanned, but not when the output code is generated. If lines are added
892
-# or removed, the anchors will not be placed correctly.
893
-#
894
-# Note that for custom extensions or not directly supported extensions you also
895
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
896
-# properly processed by doxygen.
897
-
898
-INPUT_FILTER           =
899
-
900
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
901
-# basis. Doxygen will compare the file name with each pattern and apply the
902
-# filter if there is a match. The filters are a list of the form: pattern=filter
903
-# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
904
-# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
905
-# patterns match the file name, INPUT_FILTER is applied.
906
-#
907
-# Note that for custom extensions or not directly supported extensions you also
908
-# need to set EXTENSION_MAPPING for the extension otherwise the files are not
909
-# properly processed by doxygen.
910
-
911
-FILTER_PATTERNS        =
912
-
913
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
914
-# INPUT_FILTER) will also be used to filter the input files that are used for
915
-# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
916
-# The default value is: NO.
917
-
918
-FILTER_SOURCE_FILES    = NO
919
-
920
-# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
921
-# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
922
-# it is also possible to disable source filtering for a specific pattern using
923
-# *.ext= (so without naming a filter).
924
-# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
925
-
926
-FILTER_SOURCE_PATTERNS =
927
-
928
-# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
929
-# is part of the input, its contents will be placed on the main page
930
-# (index.html). This can be useful if you have a project on for instance GitHub
931
-# and want to reuse the introduction page also for the doxygen output.
932
-
933
-USE_MDFILE_AS_MAINPAGE =
934
-
935
-#---------------------------------------------------------------------------
936
-# Configuration options related to source browsing
937
-#---------------------------------------------------------------------------
938
-
939
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
940
-# generated. Documented entities will be cross-referenced with these sources.
941
-#
942
-# Note: To get rid of all source code in the generated output, make sure that
943
-# also VERBATIM_HEADERS is set to NO.
944
-# The default value is: NO.
945
-
946
-SOURCE_BROWSER         = NO
947
-
948
-# Setting the INLINE_SOURCES tag to YES will include the body of functions,
949
-# classes and enums directly into the documentation.
950
-# The default value is: NO.
951
-
952
-INLINE_SOURCES         = NO
953
-
954
-# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any
955
-# special comment blocks from generated source code fragments. Normal C, C++ and
956
-# Fortran comments will always remain visible.
957
-# The default value is: YES.
958
-
959
-STRIP_CODE_COMMENTS    = YES
960
-
961
-# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
962
-# function all documented functions referencing it will be listed.
963
-# The default value is: NO.
964
-
965
-REFERENCED_BY_RELATION = NO
966
-
967
-# If the REFERENCES_RELATION tag is set to YES then for each documented function
968
-# all documented entities called/used by that function will be listed.
969
-# The default value is: NO.
970
-
971
-REFERENCES_RELATION    = NO
972
-
973
-# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
974
-# to YES then the hyperlinks from functions in REFERENCES_RELATION and
975
-# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
976
-# link to the documentation.
977
-# The default value is: YES.
978
-
979
-REFERENCES_LINK_SOURCE = YES
980
-
981
-# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
982
-# source code will show a tooltip with additional information such as prototype,
983
-# brief description and links to the definition and documentation. Since this
984
-# will make the HTML file larger and loading of large files a bit slower, you
985
-# can opt to disable this feature.
986
-# The default value is: YES.
987
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
988
-
989
-SOURCE_TOOLTIPS        = YES
990
-
991
-# If the USE_HTAGS tag is set to YES then the references to source code will
992
-# point to the HTML generated by the htags(1) tool instead of doxygen built-in
993
-# source browser. The htags tool is part of GNU's global source tagging system
994
-# (see http://www.gnu.org/software/global/global.html). You will need version
995
-# 4.8.6 or higher.
996
-#
997
-# To use it do the following:
998
-# - Install the latest version of global
999
-# - Enable SOURCE_BROWSER and USE_HTAGS in the config file
1000
-# - Make sure the INPUT points to the root of the source tree
1001
-# - Run doxygen as normal
1002
-#
1003
-# Doxygen will invoke htags (and that will in turn invoke gtags), so these
1004
-# tools must be available from the command line (i.e. in the search path).
1005
-#
1006
-# The result: instead of the source browser generated by doxygen, the links to
1007
-# source code will now point to the output of htags.
1008
-# The default value is: NO.
1009
-# This tag requires that the tag SOURCE_BROWSER is set to YES.
1010
-
1011
-USE_HTAGS              = NO
1012
-
1013
-# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a
1014
-# verbatim copy of the header file for each class for which an include is
1015
-# specified. Set to NO to disable this.
1016
-# See also: Section \class.
1017
-# The default value is: YES.
1018
-
1019
-VERBATIM_HEADERS       = YES
1020
-
1021
-# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
1022
-# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
1023
-# cost of reduced performance. This can be particularly helpful with template
1024
-# rich C++ code for which doxygen's built-in parser lacks the necessary type
1025
-# information.
1026
-# Note: The availability of this option depends on whether or not doxygen was
1027
-# generated with the -Duse-libclang=ON option for CMake.
1028
-# The default value is: NO.
1029
-
1030
-CLANG_ASSISTED_PARSING = NO
1031
-
1032
-# If clang assisted parsing is enabled you can provide the compiler with command
1033
-# line options that you would normally use when invoking the compiler. Note that
1034
-# the include paths will already be set by doxygen for the files and directories
1035
-# specified with INPUT and INCLUDE_PATH.
1036
-# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES.
1037
-
1038
-CLANG_OPTIONS          =
1039
-
1040
-#---------------------------------------------------------------------------
1041
-# Configuration options related to the alphabetical class index
1042
-#---------------------------------------------------------------------------
1043
-
1044
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
1045
-# compounds will be generated. Enable this if the project contains a lot of
1046
-# classes, structs, unions or interfaces.
1047
-# The default value is: YES.
1048
-
1049
-ALPHABETICAL_INDEX     = YES
1050
-
1051
-# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in
1052
-# which the alphabetical index list will be split.
1053
-# Minimum value: 1, maximum value: 20, default value: 5.
1054
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1055
-
1056
-COLS_IN_ALPHA_INDEX    = 5
1057
-
1058
-# In case all classes in a project start with a common prefix, all classes will
1059
-# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
1060
-# can be used to specify a prefix (or a list of prefixes) that should be ignored
1061
-# while generating the index headers.
1062
-# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
1063
-
1064
-IGNORE_PREFIX          =
1065
-
1066
-#---------------------------------------------------------------------------
1067
-# Configuration options related to the HTML output
1068
-#---------------------------------------------------------------------------
1069
-
1070
-# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
1071
-# The default value is: YES.
1072
-
1073
-GENERATE_HTML          = YES
1074
-
1075
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
1076
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1077
-# it.
1078
-# The default directory is: html.
1079
-# This tag requires that the tag GENERATE_HTML is set to YES.
1080
-
1081
-HTML_OUTPUT            = api
1082
-
1083
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
1084
-# generated HTML page (for example: .htm, .php, .asp).
1085
-# The default value is: .html.
1086
-# This tag requires that the tag GENERATE_HTML is set to YES.
1087
-
1088
-HTML_FILE_EXTENSION    = .html
1089
-
1090
-# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
1091
-# each generated HTML page. If the tag is left blank doxygen will generate a
1092
-# standard header.
1093
-#
1094
-# To get valid HTML the header file that includes any scripts and style sheets
1095
-# that doxygen needs, which is dependent on the configuration options used (e.g.
1096
-# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
1097
-# default header using
1098
-# doxygen -w html new_header.html new_footer.html new_stylesheet.css
1099
-# YourConfigFile
1100
-# and then modify the file new_header.html. See also section "Doxygen usage"
1101
-# for information on how to generate the default header that doxygen normally
1102
-# uses.
1103
-# Note: The header is subject to change so you typically have to regenerate the
1104
-# default header when upgrading to a newer version of doxygen. For a description
1105
-# of the possible markers and block names see the documentation.
1106
-# This tag requires that the tag GENERATE_HTML is set to YES.
1107
-
1108
-HTML_HEADER            =
1109
-
1110
-# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
1111
-# generated HTML page. If the tag is left blank doxygen will generate a standard
1112
-# footer. See HTML_HEADER for more information on how to generate a default
1113
-# footer and what special commands can be used inside the footer. See also
1114
-# section "Doxygen usage" for information on how to generate the default footer
1115
-# that doxygen normally uses.
1116
-# This tag requires that the tag GENERATE_HTML is set to YES.
1117
-
1118
-HTML_FOOTER            =
1119
-
1120
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
1121
-# sheet that is used by each HTML page. It can be used to fine-tune the look of
1122
-# the HTML output. If left blank doxygen will generate a default style sheet.
1123
-# See also section "Doxygen usage" for information on how to generate the style
1124
-# sheet that doxygen normally uses.
1125
-# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
1126
-# it is more robust and this tag (HTML_STYLESHEET) will in the future become
1127
-# obsolete.
1128
-# This tag requires that the tag GENERATE_HTML is set to YES.
1129
-
1130
-HTML_STYLESHEET        =
1131
-
1132
-# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1133
-# cascading style sheets that are included after the standard style sheets
1134
-# created by doxygen. Using this option one can overrule certain style aspects.
1135
-# This is preferred over using HTML_STYLESHEET since it does not replace the
1136
-# standard style sheet and is therefore more robust against future updates.
1137
-# Doxygen will copy the style sheet files to the output directory.
1138
-# Note: The order of the extra style sheet files is of importance (e.g. the last
1139
-# style sheet in the list overrules the setting of the previous ones in the
1140
-# list). For an example see the documentation.
1141
-# This tag requires that the tag GENERATE_HTML is set to YES.
1142
-
1143
-HTML_EXTRA_STYLESHEET  =
1144
-
1145
-# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
1146
-# other source files which should be copied to the HTML output directory. Note
1147
-# that these files will be copied to the base HTML output directory. Use the
1148
-# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
1149
-# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
1150
-# files will be copied as-is; there are no commands or markers available.
1151
-# This tag requires that the tag GENERATE_HTML is set to YES.
1152
-
1153
-HTML_EXTRA_FILES       =
1154
-
1155
-# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
1156
-# will adjust the colors in the style sheet and background images according to
1157
-# this color. Hue is specified as an angle on a colorwheel, see
1158
-# http://en.wikipedia.org/wiki/Hue for more information. For instance the value
1159
-# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
1160
-# purple, and 360 is red again.
1161
-# Minimum value: 0, maximum value: 359, default value: 220.
1162
-# This tag requires that the tag GENERATE_HTML is set to YES.
1163
-
1164
-HTML_COLORSTYLE_HUE    = 220
1165
-
1166
-# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
1167
-# in the HTML output. For a value of 0 the output will use grayscales only. A
1168
-# value of 255 will produce the most vivid colors.
1169
-# Minimum value: 0, maximum value: 255, default value: 100.
1170
-# This tag requires that the tag GENERATE_HTML is set to YES.
1171
-
1172
-HTML_COLORSTYLE_SAT    = 100
1173
-
1174
-# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
1175
-# luminance component of the colors in the HTML output. Values below 100
1176
-# gradually make the output lighter, whereas values above 100 make the output
1177
-# darker. The value divided by 100 is the actual gamma applied, so 80 represents
1178
-# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
1179
-# change the gamma.
1180
-# Minimum value: 40, maximum value: 240, default value: 80.
1181
-# This tag requires that the tag GENERATE_HTML is set to YES.
1182
-
1183
-HTML_COLORSTYLE_GAMMA  = 80
1184
-
1185
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
1186
-# page will contain the date and time when the page was generated. Setting this
1187
-# to YES can help to show when doxygen was last run and thus if the
1188
-# documentation is up to date.
1189
-# The default value is: NO.
1190
-# This tag requires that the tag GENERATE_HTML is set to YES.
1191
-
1192
-HTML_TIMESTAMP         = YES
1193
-
1194
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
1195
-# documentation will contain sections that can be hidden and shown after the
1196
-# page has loaded.
1197
-# The default value is: NO.
1198
-# This tag requires that the tag GENERATE_HTML is set to YES.
1199
-
1200
-HTML_DYNAMIC_SECTIONS  = NO
1201
-
1202
-# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
1203
-# shown in the various tree structured indices initially; the user can expand
1204
-# and collapse entries dynamically later on. Doxygen will expand the tree to
1205
-# such a level that at most the specified number of entries are visible (unless
1206
-# a fully collapsed tree already exceeds this amount). So setting the number of
1207
-# entries 1 will produce a full collapsed tree by default. 0 is a special value
1208
-# representing an infinite number of entries and will result in a full expanded
1209
-# tree by default.
1210
-# Minimum value: 0, maximum value: 9999, default value: 100.
1211
-# This tag requires that the tag GENERATE_HTML is set to YES.
1212
-
1213
-HTML_INDEX_NUM_ENTRIES = 100
1214
-
1215
-# If the GENERATE_DOCSET tag is set to YES, additional index files will be
1216
-# generated that can be used as input for Apple's Xcode 3 integrated development
1217
-# environment (see: http://developer.apple.com/tools/xcode/), introduced with
1218
-# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a
1219
-# Makefile in the HTML output directory. Running make will produce the docset in
1220
-# that directory and running make install will install the docset in
1221
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
1222
-# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
1223
-# for more information.
1224
-# The default value is: NO.
1225
-# This tag requires that the tag GENERATE_HTML is set to YES.
1226
-
1227
-GENERATE_DOCSET        = NO
1228
-
1229
-# This tag determines the name of the docset feed. A documentation feed provides
1230
-# an umbrella under which multiple documentation sets from a single provider
1231
-# (such as a company or product suite) can be grouped.
1232
-# The default value is: Doxygen generated docs.
1233
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
1234
-
1235
-DOCSET_FEEDNAME        = "Doxygen generated docs"
1236
-
1237
-# This tag specifies a string that should uniquely identify the documentation
1238
-# set bundle. This should be a reverse domain-name style string, e.g.
1239
-# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
1240
-# The default value is: org.doxygen.Project.
1241
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
1242
-
1243
-DOCSET_BUNDLE_ID       = org.doxygen.Project
1244
-
1245
-# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
1246
-# the documentation publisher. This should be a reverse domain-name style
1247
-# string, e.g. com.mycompany.MyDocSet.documentation.
1248
-# The default value is: org.doxygen.Publisher.
1249
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
1250
-
1251
-DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
1252
-
1253
-# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
1254
-# The default value is: Publisher.
1255
-# This tag requires that the tag GENERATE_DOCSET is set to YES.
1256
-
1257
-DOCSET_PUBLISHER_NAME  = Publisher
1258
-
1259
-# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three
1260
-# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
1261
-# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
1262
-# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on
1263
-# Windows.
1264
-#
1265
-# The HTML Help Workshop contains a compiler that can convert all HTML output
1266
-# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML
1267
-# files are now used as the Windows 98 help format, and will replace the old
1268
-# Windows help format (.hlp) on all Windows platforms in the future. Compressed
1269
-# HTML files also contain an index, a table of contents, and you can search for
1270
-# words in the documentation. The HTML workshop also contains a viewer for
1271
-# compressed HTML files.
1272
-# The default value is: NO.
1273
-# This tag requires that the tag GENERATE_HTML is set to YES.
1274
-
1275
-GENERATE_HTMLHELP      = NO
1276
-
1277
-# The CHM_FILE tag can be used to specify the file name of the resulting .chm
1278
-# file. You can add a path in front of the file if the result should not be
1279
-# written to the html output directory.
1280
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1281
-
1282
-CHM_FILE               =
1283
-
1284
-# The HHC_LOCATION tag can be used to specify the location (absolute path
1285
-# including file name) of the HTML help compiler (hhc.exe). If non-empty,
1286
-# doxygen will try to run the HTML help compiler on the generated index.hhp.
1287
-# The file has to be specified with full path.
1288
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1289
-
1290
-HHC_LOCATION           =
1291
-
1292
-# The GENERATE_CHI flag controls if a separate .chi index file is generated
1293
-# (YES) or that it should be included in the master .chm file (NO).
1294
-# The default value is: NO.
1295
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1296
-
1297
-GENERATE_CHI           = NO
1298
-
1299
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
1300
-# and project file content.
1301
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1302
-
1303
-CHM_INDEX_ENCODING     =
1304
-
1305
-# The BINARY_TOC flag controls whether a binary table of contents is generated
1306
-# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
1307
-# enables the Previous and Next buttons.
1308
-# The default value is: NO.
1309
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1310
-
1311
-BINARY_TOC             = NO
1312
-
1313
-# The TOC_EXPAND flag can be set to YES to add extra items for group members to
1314
-# the table of contents of the HTML help documentation and to the tree view.
1315
-# The default value is: NO.
1316
-# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
1317
-
1318
-TOC_EXPAND             = NO
1319
-
1320
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
1321
-# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
1322
-# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
1323
-# (.qch) of the generated HTML documentation.
1324
-# The default value is: NO.
1325
-# This tag requires that the tag GENERATE_HTML is set to YES.
1326
-
1327
-GENERATE_QHP           = NO
1328
-
1329
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
1330
-# the file name of the resulting .qch file. The path specified is relative to
1331
-# the HTML output folder.
1332
-# This tag requires that the tag GENERATE_QHP is set to YES.
1333
-
1334
-QCH_FILE               =
1335
-
1336
-# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
1337
-# Project output. For more information please see Qt Help Project / Namespace
1338
-# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace).
1339
-# The default value is: org.doxygen.Project.
1340
-# This tag requires that the tag GENERATE_QHP is set to YES.
1341
-
1342
-QHP_NAMESPACE          = org.doxygen.Project
1343
-
1344
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
1345
-# Help Project output. For more information please see Qt Help Project / Virtual
1346
-# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual-
1347
-# folders).
1348
-# The default value is: doc.
1349
-# This tag requires that the tag GENERATE_QHP is set to YES.
1350
-
1351
-QHP_VIRTUAL_FOLDER     = doc
1352
-
1353
-# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
1354
-# filter to add. For more information please see Qt Help Project / Custom
1355
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1356
-# filters).
1357
-# This tag requires that the tag GENERATE_QHP is set to YES.
1358
-
1359
-QHP_CUST_FILTER_NAME   =
1360
-
1361
-# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
1362
-# custom filter to add. For more information please see Qt Help Project / Custom
1363
-# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom-
1364
-# filters).
1365
-# This tag requires that the tag GENERATE_QHP is set to YES.
1366
-
1367
-QHP_CUST_FILTER_ATTRS  =
1368
-
1369
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
1370
-# project's filter section matches. Qt Help Project / Filter Attributes (see:
1371
-# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes).
1372
-# This tag requires that the tag GENERATE_QHP is set to YES.
1373
-
1374
-QHP_SECT_FILTER_ATTRS  =
1375
-
1376
-# The QHG_LOCATION tag can be used to specify the location of Qt's
1377
-# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the
1378
-# generated .qhp file.
1379
-# This tag requires that the tag GENERATE_QHP is set to YES.
1380
-
1381
-QHG_LOCATION           =
1382
-
1383
-# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
1384
-# generated, together with the HTML files, they form an Eclipse help plugin. To
1385
-# install this plugin and make it available under the help contents menu in
1386
-# Eclipse, the contents of the directory containing the HTML and XML files needs
1387
-# to be copied into the plugins directory of eclipse. The name of the directory
1388
-# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
1389
-# After copying Eclipse needs to be restarted before the help appears.
1390
-# The default value is: NO.
1391
-# This tag requires that the tag GENERATE_HTML is set to YES.
1392
-
1393
-GENERATE_ECLIPSEHELP   = NO
1394
-
1395
-# A unique identifier for the Eclipse help plugin. When installing the plugin
1396
-# the directory name containing the HTML and XML files should also have this
1397
-# name. Each documentation set should have its own identifier.
1398
-# The default value is: org.doxygen.Project.
1399
-# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
1400
-
1401
-ECLIPSE_DOC_ID         = org.doxygen.Project
1402
-
1403
-# If you want full control over the layout of the generated HTML pages it might
1404
-# be necessary to disable the index and replace it with your own. The
1405
-# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
1406
-# of each HTML page. A value of NO enables the index and the value YES disables
1407
-# it. Since the tabs in the index contain the same information as the navigation
1408
-# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
1409
-# The default value is: NO.
1410
-# This tag requires that the tag GENERATE_HTML is set to YES.
1411
-
1412
-DISABLE_INDEX          = NO
1413
-
1414
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
1415
-# structure should be generated to display hierarchical information. If the tag
1416
-# value is set to YES, a side panel will be generated containing a tree-like
1417
-# index structure (just like the one that is generated for HTML Help). For this
1418
-# to work a browser that supports JavaScript, DHTML, CSS and frames is required
1419
-# (i.e. any modern browser). Windows users are probably better off using the
1420
-# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
1421
-# further fine-tune the look of the index. As an example, the default style
1422
-# sheet generated by doxygen has an example that shows how to put an image at
1423
-# the root of the tree instead of the PROJECT_NAME. Since the tree basically has
1424
-# the same information as the tab index, you could consider setting
1425
-# DISABLE_INDEX to YES when enabling this option.
1426
-# The default value is: NO.
1427
-# This tag requires that the tag GENERATE_HTML is set to YES.
1428
-
1429
-GENERATE_TREEVIEW      = NO
1430
-
1431
-# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
1432
-# doxygen will group on one line in the generated HTML documentation.
1433
-#
1434
-# Note that a value of 0 will completely suppress the enum values from appearing
1435
-# in the overview section.
1436
-# Minimum value: 0, maximum value: 20, default value: 4.
1437
-# This tag requires that the tag GENERATE_HTML is set to YES.
1438
-
1439
-ENUM_VALUES_PER_LINE   = 4
1440
-
1441
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
1442
-# to set the initial width (in pixels) of the frame in which the tree is shown.
1443
-# Minimum value: 0, maximum value: 1500, default value: 250.
1444
-# This tag requires that the tag GENERATE_HTML is set to YES.
1445
-
1446
-TREEVIEW_WIDTH         = 250
1447
-
1448
-# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
1449
-# external symbols imported via tag files in a separate window.
1450
-# The default value is: NO.
1451
-# This tag requires that the tag GENERATE_HTML is set to YES.
1452
-
1453
-EXT_LINKS_IN_WINDOW    = NO
1454
-
1455
-# Use this tag to change the font size of LaTeX formulas included as images in
1456
-# the HTML documentation. When you change the font size after a successful
1457
-# doxygen run you need to manually remove any form_*.png images from the HTML
1458
-# output directory to force them to be regenerated.
1459
-# Minimum value: 8, maximum value: 50, default value: 10.
1460
-# This tag requires that the tag GENERATE_HTML is set to YES.
1461
-
1462
-FORMULA_FONTSIZE       = 10
1463
-
1464
-# Use the FORMULA_TRANPARENT tag to determine whether or not the images
1465
-# generated for formulas are transparent PNGs. Transparent PNGs are not
1466
-# supported properly for IE 6.0, but are supported on all modern browsers.
1467
-#
1468
-# Note that when changing this option you need to delete any form_*.png files in
1469
-# the HTML output directory before the changes have effect.
1470
-# The default value is: YES.
1471
-# This tag requires that the tag GENERATE_HTML is set to YES.
1472
-
1473
-FORMULA_TRANSPARENT    = YES
1474
-
1475
-# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
1476
-# http://www.mathjax.org) which uses client side Javascript for the rendering
1477
-# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
1478
-# installed or if you want to formulas look prettier in the HTML output. When
1479
-# enabled you may also need to install MathJax separately and configure the path
1480
-# to it using the MATHJAX_RELPATH option.
1481
-# The default value is: NO.
1482
-# This tag requires that the tag GENERATE_HTML is set to YES.
1483
-
1484
-USE_MATHJAX            = NO
1485
-
1486
-# When MathJax is enabled you can set the default output format to be used for
1487
-# the MathJax output. See the MathJax site (see:
1488
-# http://docs.mathjax.org/en/latest/output.html) for more details.
1489
-# Possible values are: HTML-CSS (which is slower, but has the best
1490
-# compatibility), NativeMML (i.e. MathML) and SVG.
1491
-# The default value is: HTML-CSS.
1492
-# This tag requires that the tag USE_MATHJAX is set to YES.
1493
-
1494
-MATHJAX_FORMAT         = HTML-CSS
1495
-
1496
-# When MathJax is enabled you need to specify the location relative to the HTML
1497
-# output directory using the MATHJAX_RELPATH option. The destination directory
1498
-# should contain the MathJax.js script. For instance, if the mathjax directory
1499
-# is located at the same level as the HTML output directory, then
1500
-# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
1501
-# Content Delivery Network so you can quickly see the result without installing
1502
-# MathJax. However, it is strongly recommended to install a local copy of
1503
-# MathJax from http://www.mathjax.org before deployment.
1504
-# The default value is: http://cdn.mathjax.org/mathjax/latest.
1505
-# This tag requires that the tag USE_MATHJAX is set to YES.
1506
-
1507
-MATHJAX_RELPATH        = http://www.mathjax.org/mathjax
1508
-
1509
-# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
1510
-# extension names that should be enabled during MathJax rendering. For example
1511
-# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
1512
-# This tag requires that the tag USE_MATHJAX is set to YES.
1513
-
1514
-MATHJAX_EXTENSIONS     =
1515
-
1516
-# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces
1517
-# of code that will be used on startup of the MathJax code. See the MathJax site
1518
-# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an
1519
-# example see the documentation.
1520
-# This tag requires that the tag USE_MATHJAX is set to YES.
1521
-
1522
-MATHJAX_CODEFILE       =
1523
-
1524
-# When the SEARCHENGINE tag is enabled doxygen will generate a search box for
1525
-# the HTML output. The underlying search engine uses javascript and DHTML and
1526
-# should work on any modern browser. Note that when using HTML help
1527
-# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
1528
-# there is already a search function so this one should typically be disabled.
1529
-# For large projects the javascript based search engine can be slow, then
1530
-# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
1531
-# search using the keyboard; to jump to the search box use <access key> + S
1532
-# (what the <access key> is depends on the OS and browser, but it is typically
1533
-# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
1534
-# key> to jump into the search results window, the results can be navigated
1535
-# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
1536
-# the search. The filter options can be selected when the cursor is inside the
1537
-# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
1538
-# to select a filter and <Enter> or <escape> to activate or cancel the filter
1539
-# option.
1540
-# The default value is: YES.
1541
-# This tag requires that the tag GENERATE_HTML is set to YES.
1542
-
1543
-SEARCHENGINE           = YES
1544
-
1545
-# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
1546
-# implemented using a web server instead of a web client using Javascript. There
1547
-# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
1548
-# setting. When disabled, doxygen will generate a PHP script for searching and
1549
-# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
1550
-# and searching needs to be provided by external tools. See the section
1551
-# "External Indexing and Searching" for details.
1552
-# The default value is: NO.
1553
-# This tag requires that the tag SEARCHENGINE is set to YES.
1554
-
1555
-SERVER_BASED_SEARCH    = NO
1556
-
1557
-# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP
1558
-# script for searching. Instead the search results are written to an XML file
1559
-# which needs to be processed by an external indexer. Doxygen will invoke an
1560
-# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
1561
-# search results.
1562
-#
1563
-# Doxygen ships with an example indexer (doxyindexer) and search engine
1564
-# (doxysearch.cgi) which are based on the open source search engine library
1565
-# Xapian (see: http://xapian.org/).
1566
-#
1567
-# See the section "External Indexing and Searching" for details.
1568
-# The default value is: NO.
1569
-# This tag requires that the tag SEARCHENGINE is set to YES.
1570
-
1571
-EXTERNAL_SEARCH        = NO
1572
-
1573
-# The SEARCHENGINE_URL should point to a search engine hosted by a web server
1574
-# which will return the search results when EXTERNAL_SEARCH is enabled.
1575
-#
1576
-# Doxygen ships with an example indexer (doxyindexer) and search engine
1577
-# (doxysearch.cgi) which are based on the open source search engine library
1578
-# Xapian (see: http://xapian.org/). See the section "External Indexing and
1579
-# Searching" for details.
1580
-# This tag requires that the tag SEARCHENGINE is set to YES.
1581
-
1582
-SEARCHENGINE_URL       =
1583
-
1584
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
1585
-# search data is written to a file for indexing by an external tool. With the
1586
-# SEARCHDATA_FILE tag the name of this file can be specified.
1587
-# The default file is: searchdata.xml.
1588
-# This tag requires that the tag SEARCHENGINE is set to YES.
1589
-
1590
-SEARCHDATA_FILE        = searchdata.xml
1591
-
1592
-# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
1593
-# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
1594
-# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
1595
-# projects and redirect the results back to the right project.
1596
-# This tag requires that the tag SEARCHENGINE is set to YES.
1597
-
1598
-EXTERNAL_SEARCH_ID     =
1599
-
1600
-# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
1601
-# projects other than the one defined by this configuration file, but that are
1602
-# all added to the same external search index. Each project needs to have a
1603
-# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
1604
-# to a relative location where the documentation can be found. The format is:
1605
-# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
1606
-# This tag requires that the tag SEARCHENGINE is set to YES.
1607
-
1608
-EXTRA_SEARCH_MAPPINGS  =
1609
-
1610
-#---------------------------------------------------------------------------
1611
-# Configuration options related to the LaTeX output
1612
-#---------------------------------------------------------------------------
1613
-
1614
-# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
1615
-# The default value is: YES.
1616
-
1617
-GENERATE_LATEX         = NO
1618
-
1619
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
1620
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1621
-# it.
1622
-# The default directory is: latex.
1623
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1624
-
1625
-LATEX_OUTPUT           = latex
1626
-
1627
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
1628
-# invoked.
1629
-#
1630
-# Note that when enabling USE_PDFLATEX this option is only used for generating
1631
-# bitmaps for formulas in the HTML output, but not in the Makefile that is
1632
-# written to the output directory.
1633
-# The default file is: latex.
1634
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1635
-
1636
-LATEX_CMD_NAME         = latex
1637
-
1638
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
1639
-# index for LaTeX.
1640
-# The default file is: makeindex.
1641
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1642
-
1643
-MAKEINDEX_CMD_NAME     = makeindex
1644
-
1645
-# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
1646
-# documents. This may be useful for small projects and may help to save some
1647
-# trees in general.
1648
-# The default value is: NO.
1649
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1650
-
1651
-COMPACT_LATEX          = NO
1652
-
1653
-# The PAPER_TYPE tag can be used to set the paper type that is used by the
1654
-# printer.
1655
-# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
1656
-# 14 inches) and executive (7.25 x 10.5 inches).
1657
-# The default value is: a4.
1658
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1659
-
1660
-PAPER_TYPE             = a4
1661
-
1662
-# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
1663
-# that should be included in the LaTeX output. The package can be specified just
1664
-# by its name or with the correct syntax as to be used with the LaTeX
1665
-# \usepackage command. To get the times font for instance you can specify :
1666
-# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
1667
-# To use the option intlimits with the amsmath package you can specify:
1668
-# EXTRA_PACKAGES=[intlimits]{amsmath}
1669
-# If left blank no extra packages will be included.
1670
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1671
-
1672
-EXTRA_PACKAGES         =
1673
-
1674
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the
1675
-# generated LaTeX document. The header should contain everything until the first
1676
-# chapter. If it is left blank doxygen will generate a standard header. See
1677
-# section "Doxygen usage" for information on how to let doxygen write the
1678
-# default header to a separate file.
1679
-#
1680
-# Note: Only use a user-defined header if you know what you are doing! The
1681
-# following commands have a special meaning inside the header: $title,
1682
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
1683
-# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
1684
-# string, for the replacement values of the other commands the user is referred
1685
-# to HTML_HEADER.
1686
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1687
-
1688
-LATEX_HEADER           =
1689
-
1690
-# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
1691
-# generated LaTeX document. The footer should contain everything after the last
1692
-# chapter. If it is left blank doxygen will generate a standard footer. See
1693
-# LATEX_HEADER for more information on how to generate a default footer and what
1694
-# special commands can be used inside the footer.
1695
-#
1696
-# Note: Only use a user-defined footer if you know what you are doing!
1697
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1698
-
1699
-LATEX_FOOTER           =
1700
-
1701
-# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
1702
-# LaTeX style sheets that are included after the standard style sheets created
1703
-# by doxygen. Using this option one can overrule certain style aspects. Doxygen
1704
-# will copy the style sheet files to the output directory.
1705
-# Note: The order of the extra style sheet files is of importance (e.g. the last
1706
-# style sheet in the list overrules the setting of the previous ones in the
1707
-# list).
1708
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1709
-
1710
-LATEX_EXTRA_STYLESHEET =
1711
-
1712
-# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
1713
-# other source files which should be copied to the LATEX_OUTPUT output
1714
-# directory. Note that the files will be copied as-is; there are no commands or
1715
-# markers available.
1716
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1717
-
1718
-LATEX_EXTRA_FILES      =
1719
-
1720
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
1721
-# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
1722
-# contain links (just like the HTML output) instead of page references. This
1723
-# makes the output suitable for online browsing using a PDF viewer.
1724
-# The default value is: YES.
1725
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1726
-
1727
-PDF_HYPERLINKS         = YES
1728
-
1729
-# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
1730
-# the PDF file directly from the LaTeX files. Set this option to YES, to get a
1731
-# higher quality PDF documentation.
1732
-# The default value is: YES.
1733
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1734
-
1735
-USE_PDFLATEX           = YES
1736
-
1737
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
1738
-# command to the generated LaTeX files. This will instruct LaTeX to keep running
1739
-# if errors occur, instead of asking the user for help. This option is also used
1740
-# when generating formulas in HTML.
1741
-# The default value is: NO.
1742
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1743
-
1744
-LATEX_BATCHMODE        = NO
1745
-
1746
-# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the
1747
-# index chapters (such as File Index, Compound Index, etc.) in the output.
1748
-# The default value is: NO.
1749
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1750
-
1751
-LATEX_HIDE_INDICES     = NO
1752
-
1753
-# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source
1754
-# code with syntax highlighting in the LaTeX output.
1755
-#
1756
-# Note that which sources are shown also depends on other settings such as
1757
-# SOURCE_BROWSER.
1758
-# The default value is: NO.
1759
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1760
-
1761
-LATEX_SOURCE_CODE      = NO
1762
-
1763
-# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
1764
-# bibliography, e.g. plainnat, or ieeetr. See
1765
-# http://en.wikipedia.org/wiki/BibTeX and \cite for more info.
1766
-# The default value is: plain.
1767
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1768
-
1769
-LATEX_BIB_STYLE        = plain
1770
-
1771
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
1772
-# page will contain the date and time when the page was generated. Setting this
1773
-# to NO can help when comparing the output of multiple runs.
1774
-# The default value is: NO.
1775
-# This tag requires that the tag GENERATE_LATEX is set to YES.
1776
-
1777
-LATEX_TIMESTAMP        = NO
1778
-
1779
-#---------------------------------------------------------------------------
1780
-# Configuration options related to the RTF output
1781
-#---------------------------------------------------------------------------
1782
-
1783
-# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
1784
-# RTF output is optimized for Word 97 and may not look too pretty with other RTF
1785
-# readers/editors.
1786
-# The default value is: NO.
1787
-
1788
-GENERATE_RTF           = NO
1789
-
1790
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
1791
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1792
-# it.
1793
-# The default directory is: rtf.
1794
-# This tag requires that the tag GENERATE_RTF is set to YES.
1795
-
1796
-RTF_OUTPUT             = rtf
1797
-
1798
-# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
1799
-# documents. This may be useful for small projects and may help to save some
1800
-# trees in general.
1801
-# The default value is: NO.
1802
-# This tag requires that the tag GENERATE_RTF is set to YES.
1803
-
1804
-COMPACT_RTF            = NO
1805
-
1806
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
1807
-# contain hyperlink fields. The RTF file will contain links (just like the HTML
1808
-# output) instead of page references. This makes the output suitable for online
1809
-# browsing using Word or some other Word compatible readers that support those
1810
-# fields.
1811
-#
1812
-# Note: WordPad (write) and others do not support links.
1813
-# The default value is: NO.
1814
-# This tag requires that the tag GENERATE_RTF is set to YES.
1815
-
1816
-RTF_HYPERLINKS         = NO
1817
-
1818
-# Load stylesheet definitions from file. Syntax is similar to doxygen's config
1819
-# file, i.e. a series of assignments. You only have to provide replacements,
1820
-# missing definitions are set to their default value.
1821
-#
1822
-# See also section "Doxygen usage" for information on how to generate the
1823
-# default style sheet that doxygen normally uses.
1824
-# This tag requires that the tag GENERATE_RTF is set to YES.
1825
-
1826
-RTF_STYLESHEET_FILE    =
1827
-
1828
-# Set optional variables used in the generation of an RTF document. Syntax is
1829
-# similar to doxygen's config file. A template extensions file can be generated
1830
-# using doxygen -e rtf extensionFile.
1831
-# This tag requires that the tag GENERATE_RTF is set to YES.
1832
-
1833
-RTF_EXTENSIONS_FILE    =
1834
-
1835
-# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
1836
-# with syntax highlighting in the RTF output.
1837
-#
1838
-# Note that which sources are shown also depends on other settings such as
1839
-# SOURCE_BROWSER.
1840
-# The default value is: NO.
1841
-# This tag requires that the tag GENERATE_RTF is set to YES.
1842
-
1843
-RTF_SOURCE_CODE        = NO
1844
-
1845
-#---------------------------------------------------------------------------
1846
-# Configuration options related to the man page output
1847
-#---------------------------------------------------------------------------
1848
-
1849
-# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
1850
-# classes and files.
1851
-# The default value is: NO.
1852
-
1853
-GENERATE_MAN           = NO
1854
-
1855
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
1856
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1857
-# it. A directory man3 will be created inside the directory specified by
1858
-# MAN_OUTPUT.
1859
-# The default directory is: man.
1860
-# This tag requires that the tag GENERATE_MAN is set to YES.
1861
-
1862
-MAN_OUTPUT             = man
1863
-
1864
-# The MAN_EXTENSION tag determines the extension that is added to the generated
1865
-# man pages. In case the manual section does not start with a number, the number
1866
-# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
1867
-# optional.
1868
-# The default value is: .3.
1869
-# This tag requires that the tag GENERATE_MAN is set to YES.
1870
-
1871
-MAN_EXTENSION          = .3
1872
-
1873
-# The MAN_SUBDIR tag determines the name of the directory created within
1874
-# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
1875
-# MAN_EXTENSION with the initial . removed.
1876
-# This tag requires that the tag GENERATE_MAN is set to YES.
1877
-
1878
-MAN_SUBDIR             =
1879
-
1880
-# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
1881
-# will generate one additional man file for each entity documented in the real
1882
-# man page(s). These additional files only source the real man page, but without
1883
-# them the man command would be unable to find the correct page.
1884
-# The default value is: NO.
1885
-# This tag requires that the tag GENERATE_MAN is set to YES.
1886
-
1887
-MAN_LINKS              = NO
1888
-
1889
-#---------------------------------------------------------------------------
1890
-# Configuration options related to the XML output
1891
-#---------------------------------------------------------------------------
1892
-
1893
-# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
1894
-# captures the structure of the code including all documentation.
1895
-# The default value is: NO.
1896
-
1897
-GENERATE_XML           = NO
1898
-
1899
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
1900
-# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
1901
-# it.
1902
-# The default directory is: xml.
1903
-# This tag requires that the tag GENERATE_XML is set to YES.
1904
-
1905
-XML_OUTPUT             = xml
1906
-
1907
-# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
1908
-# listings (including syntax highlighting and cross-referencing information) to
1909
-# the XML output. Note that enabling this will significantly increase the size
1910
-# of the XML output.
1911
-# The default value is: YES.
1912
-# This tag requires that the tag GENERATE_XML is set to YES.
1913
-
1914
-XML_PROGRAMLISTING     = YES
1915
-
1916
-#---------------------------------------------------------------------------
1917
-# Configuration options related to the DOCBOOK output
1918
-#---------------------------------------------------------------------------
1919
-
1920
-# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
1921
-# that can be used to generate PDF.
1922
-# The default value is: NO.
1923
-
1924
-GENERATE_DOCBOOK       = NO
1925
-
1926
-# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
1927
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
1928
-# front of it.
1929
-# The default directory is: docbook.
1930
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
1931
-
1932
-DOCBOOK_OUTPUT         = docbook
1933
-
1934
-# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
1935
-# program listings (including syntax highlighting and cross-referencing
1936
-# information) to the DOCBOOK output. Note that enabling this will significantly
1937
-# increase the size of the DOCBOOK output.
1938
-# The default value is: NO.
1939
-# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
1940
-
1941
-DOCBOOK_PROGRAMLISTING = NO
1942
-
1943
-#---------------------------------------------------------------------------
1944
-# Configuration options for the AutoGen Definitions output
1945
-#---------------------------------------------------------------------------
1946
-
1947
-# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
1948
-# AutoGen Definitions (see http://autogen.sf.net) file that captures the
1949
-# structure of the code including all documentation. Note that this feature is
1950
-# still experimental and incomplete at the moment.
1951
-# The default value is: NO.
1952
-
1953
-GENERATE_AUTOGEN_DEF   = NO
1954
-
1955
-#---------------------------------------------------------------------------
1956
-# Configuration options related to the Perl module output
1957
-#---------------------------------------------------------------------------
1958
-
1959
-# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
1960
-# file that captures the structure of the code including all documentation.
1961
-#
1962
-# Note that this feature is still experimental and incomplete at the moment.
1963
-# The default value is: NO.
1964
-
1965
-GENERATE_PERLMOD       = NO
1966
-
1967
-# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
1968
-# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
1969
-# output from the Perl module output.
1970
-# The default value is: NO.
1971
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
1972
-
1973
-PERLMOD_LATEX          = NO
1974
-
1975
-# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
1976
-# formatted so it can be parsed by a human reader. This is useful if you want to
1977
-# understand what is going on. On the other hand, if this tag is set to NO, the
1978
-# size of the Perl module output will be much smaller and Perl will parse it
1979
-# just the same.
1980
-# The default value is: YES.
1981
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
1982
-
1983
-PERLMOD_PRETTY         = YES
1984
-
1985
-# The names of the make variables in the generated doxyrules.make file are
1986
-# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
1987
-# so different doxyrules.make files included by the same Makefile don't
1988
-# overwrite each other's variables.
1989
-# This tag requires that the tag GENERATE_PERLMOD is set to YES.
1990
-
1991
-PERLMOD_MAKEVAR_PREFIX =
1992
-
1993
-#---------------------------------------------------------------------------
1994
-# Configuration options related to the preprocessor
1995
-#---------------------------------------------------------------------------
1996
-
1997
-# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
1998
-# C-preprocessor directives found in the sources and include files.
1999
-# The default value is: YES.
2000
-
2001
-ENABLE_PREPROCESSING   = YES
2002
-
2003
-# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
2004
-# in the source code. If set to NO, only conditional compilation will be
2005
-# performed. Macro expansion can be done in a controlled way by setting
2006
-# EXPAND_ONLY_PREDEF to YES.
2007
-# The default value is: NO.
2008
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2009
-
2010
-MACRO_EXPANSION        = NO
2011
-
2012
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
2013
-# the macro expansion is limited to the macros specified with the PREDEFINED and
2014
-# EXPAND_AS_DEFINED tags.
2015
-# The default value is: NO.
2016
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2017
-
2018
-EXPAND_ONLY_PREDEF     = NO
2019
-
2020
-# If the SEARCH_INCLUDES tag is set to YES, the include files in the
2021
-# INCLUDE_PATH will be searched if a #include is found.
2022
-# The default value is: YES.
2023
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2024
-
2025
-SEARCH_INCLUDES        = YES
2026
-
2027
-# The INCLUDE_PATH tag can be used to specify one or more directories that
2028
-# contain include files that are not input files but should be processed by the
2029
-# preprocessor.
2030
-# This tag requires that the tag SEARCH_INCLUDES is set to YES.
2031
-
2032
-INCLUDE_PATH           =
2033
-
2034
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
2035
-# patterns (like *.h and *.hpp) to filter out the header-files in the
2036
-# directories. If left blank, the patterns specified with FILE_PATTERNS will be
2037
-# used.
2038
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2039
-
2040
-INCLUDE_FILE_PATTERNS  =
2041
-
2042
-# The PREDEFINED tag can be used to specify one or more macro names that are
2043
-# defined before the preprocessor is started (similar to the -D option of e.g.
2044
-# gcc). The argument of the tag is a list of macros of the form: name or
2045
-# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
2046
-# is assumed. To prevent a macro definition from being undefined via #undef or
2047
-# recursively expanded use the := operator instead of the = operator.
2048
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2049
-
2050
-PREDEFINED             =
2051
-
2052
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
2053
-# tag can be used to specify a list of macro names that should be expanded. The
2054
-# macro definition that is found in the sources will be used. Use the PREDEFINED
2055
-# tag if you want to use a different macro definition that overrules the
2056
-# definition found in the source code.
2057
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2058
-
2059
-EXPAND_AS_DEFINED      =
2060
-
2061
-# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
2062
-# remove all references to function-like macros that are alone on a line, have
2063
-# an all uppercase name, and do not end with a semicolon. Such function macros
2064
-# are typically used for boiler-plate code, and will confuse the parser if not
2065
-# removed.
2066
-# The default value is: YES.
2067
-# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
2068
-
2069
-SKIP_FUNCTION_MACROS   = YES
2070
-
2071
-#---------------------------------------------------------------------------
2072
-# Configuration options related to external references
2073
-#---------------------------------------------------------------------------
2074
-
2075
-# The TAGFILES tag can be used to specify one or more tag files. For each tag
2076
-# file the location of the external documentation should be added. The format of
2077
-# a tag file without this location is as follows:
2078
-# TAGFILES = file1 file2 ...
2079
-# Adding location for the tag files is done as follows:
2080
-# TAGFILES = file1=loc1 "file2 = loc2" ...
2081
-# where loc1 and loc2 can be relative or absolute paths or URLs. See the
2082
-# section "Linking to external documentation" for more information about the use
2083
-# of tag files.
2084
-# Note: Each tag file must have a unique name (where the name does NOT include
2085
-# the path). If a tag file is not located in the directory in which doxygen is
2086
-# run, you must also specify the path to the tagfile here.
2087
-
2088
-TAGFILES               =
2089
-
2090
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create a
2091
-# tag file that is based on the input files it reads. See section "Linking to
2092
-# external documentation" for more information about the usage of tag files.
2093
-
2094
-GENERATE_TAGFILE       =
2095
-
2096
-# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
2097
-# the class index. If set to NO, only the inherited external classes will be
2098
-# listed.
2099
-# The default value is: NO.
2100
-
2101
-ALLEXTERNALS           = NO
2102
-
2103
-# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
2104
-# in the modules index. If set to NO, only the current project's groups will be
2105
-# listed.
2106
-# The default value is: YES.
2107
-
2108
-EXTERNAL_GROUPS        = YES
2109
-
2110
-# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
2111
-# the related pages index. If set to NO, only the current project's pages will
2112
-# be listed.
2113
-# The default value is: YES.
2114
-
2115
-EXTERNAL_PAGES         = YES
2116
-
2117
-# The PERL_PATH should be the absolute path and name of the perl script
2118
-# interpreter (i.e. the result of 'which perl').
2119
-# The default file (with absolute path) is: /usr/bin/perl.
2120
-
2121
-PERL_PATH              = /usr/bin/perl
2122
-
2123
-#---------------------------------------------------------------------------
2124
-# Configuration options related to the dot tool
2125
-#---------------------------------------------------------------------------
2126
-
2127
-# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
2128
-# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
2129
-# NO turns the diagrams off. Note that this option also works with HAVE_DOT
2130
-# disabled, but it is recommended to install and use dot, since it yields more
2131
-# powerful graphs.
2132
-# The default value is: YES.
2133
-
2134
-CLASS_DIAGRAMS         = YES
2135
-
2136
-# You can define message sequence charts within doxygen comments using the \msc
2137
-# command. Doxygen will then run the mscgen tool (see:
2138
-# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the
2139
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
2140
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
2141
-# default search path.
2142
-
2143
-MSCGEN_PATH            =
2144
-
2145
-# You can include diagrams made with dia in doxygen documentation. Doxygen will
2146
-# then run dia to produce the diagram and insert it in the documentation. The
2147
-# DIA_PATH tag allows you to specify the directory where the dia binary resides.
2148
-# If left empty dia is assumed to be found in the default search path.
2149
-
2150
-DIA_PATH               =
2151
-
2152
-# If set to YES the inheritance and collaboration graphs will hide inheritance
2153
-# and usage relations if the target is undocumented or is not a class.
2154
-# The default value is: YES.
2155
-
2156
-HIDE_UNDOC_RELATIONS   = YES
2157
-
2158
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
2159
-# available from the path. This tool is part of Graphviz (see:
2160
-# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
2161
-# Bell Labs. The other options in this section have no effect if this option is
2162
-# set to NO
2163
-# The default value is: YES.
2164
-
2165
-HAVE_DOT               = NO
2166
-
2167
-# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed
2168
-# to run in parallel. When set to 0 doxygen will base this on the number of
2169
-# processors available in the system. You can set it explicitly to a value
2170
-# larger than 0 to get control over the balance between CPU load and processing
2171
-# speed.
2172
-# Minimum value: 0, maximum value: 32, default value: 0.
2173
-# This tag requires that the tag HAVE_DOT is set to YES.
2174
-
2175
-DOT_NUM_THREADS        = 0
2176
-
2177
-# When you want a differently looking font in the dot files that doxygen
2178
-# generates you can specify the font name using DOT_FONTNAME. You need to make
2179
-# sure dot is able to find the font, which can be done by putting it in a
2180
-# standard location or by setting the DOTFONTPATH environment variable or by
2181
-# setting DOT_FONTPATH to the directory containing the font.
2182
-# The default value is: Helvetica.
2183
-# This tag requires that the tag HAVE_DOT is set to YES.
2184
-
2185
-DOT_FONTNAME           = Helvetica
2186
-
2187
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
2188
-# dot graphs.
2189
-# Minimum value: 4, maximum value: 24, default value: 10.
2190
-# This tag requires that the tag HAVE_DOT is set to YES.
2191
-
2192
-DOT_FONTSIZE           = 10
2193
-
2194
-# By default doxygen will tell dot to use the default font as specified with
2195
-# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
2196
-# the path where dot can find it using this tag.
2197
-# This tag requires that the tag HAVE_DOT is set to YES.
2198
-
2199
-DOT_FONTPATH           =
2200
-
2201
-# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for
2202
-# each documented class showing the direct and indirect inheritance relations.
2203
-# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO.
2204
-# The default value is: YES.
2205
-# This tag requires that the tag HAVE_DOT is set to YES.
2206
-
2207
-CLASS_GRAPH            = YES
2208
-
2209
-# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a
2210
-# graph for each documented class showing the direct and indirect implementation
2211
-# dependencies (inheritance, containment, and class references variables) of the
2212
-# class with other documented classes.
2213
-# The default value is: YES.
2214
-# This tag requires that the tag HAVE_DOT is set to YES.
2215
-
2216
-COLLABORATION_GRAPH    = YES
2217
-
2218
-# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for
2219
-# groups, showing the direct groups dependencies.
2220
-# The default value is: YES.
2221
-# This tag requires that the tag HAVE_DOT is set to YES.
2222
-
2223
-GROUP_GRAPHS           = YES
2224
-
2225
-# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
2226
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
2227
-# Language.
2228
-# The default value is: NO.
2229
-# This tag requires that the tag HAVE_DOT is set to YES.
2230
-
2231
-UML_LOOK               = NO
2232
-
2233
-# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
2234
-# class node. If there are many fields or methods and many nodes the graph may
2235
-# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
2236
-# number of items for each type to make the size more manageable. Set this to 0
2237
-# for no limit. Note that the threshold may be exceeded by 50% before the limit
2238
-# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
2239
-# but if the number exceeds 15, the total amount of fields shown is limited to
2240
-# 10.
2241
-# Minimum value: 0, maximum value: 100, default value: 10.
2242
-# This tag requires that the tag HAVE_DOT is set to YES.
2243
-
2244
-UML_LIMIT_NUM_FIELDS   = 10
2245
-
2246
-# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
2247
-# collaboration graphs will show the relations between templates and their
2248
-# instances.
2249
-# The default value is: NO.
2250
-# This tag requires that the tag HAVE_DOT is set to YES.
2251
-
2252
-TEMPLATE_RELATIONS     = NO
2253
-
2254
-# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
2255
-# YES then doxygen will generate a graph for each documented file showing the
2256
-# direct and indirect include dependencies of the file with other documented
2257
-# files.
2258
-# The default value is: YES.
2259
-# This tag requires that the tag HAVE_DOT is set to YES.
2260
-
2261
-INCLUDE_GRAPH          = YES
2262
-
2263
-# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
2264
-# set to YES then doxygen will generate a graph for each documented file showing
2265
-# the direct and indirect include dependencies of the file with other documented
2266
-# files.
2267
-# The default value is: YES.
2268
-# This tag requires that the tag HAVE_DOT is set to YES.
2269
-
2270
-INCLUDED_BY_GRAPH      = YES
2271
-
2272
-# If the CALL_GRAPH tag is set to YES then doxygen will generate a call
2273
-# dependency graph for every global function or class method.
2274
-#
2275
-# Note that enabling this option will significantly increase the time of a run.
2276
-# So in most cases it will be better to enable call graphs for selected
2277
-# functions only using the \callgraph command. Disabling a call graph can be
2278
-# accomplished by means of the command \hidecallgraph.
2279
-# The default value is: NO.
2280
-# This tag requires that the tag HAVE_DOT is set to YES.
2281
-
2282
-CALL_GRAPH             = NO
2283
-
2284
-# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller
2285
-# dependency graph for every global function or class method.
2286
-#
2287
-# Note that enabling this option will significantly increase the time of a run.
2288
-# So in most cases it will be better to enable caller graphs for selected
2289
-# functions only using the \callergraph command. Disabling a caller graph can be
2290
-# accomplished by means of the command \hidecallergraph.
2291
-# The default value is: NO.
2292
-# This tag requires that the tag HAVE_DOT is set to YES.
2293
-
2294
-CALLER_GRAPH           = NO
2295
-
2296
-# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical
2297
-# hierarchy of all classes instead of a textual one.
2298
-# The default value is: YES.
2299
-# This tag requires that the tag HAVE_DOT is set to YES.
2300
-
2301
-GRAPHICAL_HIERARCHY    = YES
2302
-
2303
-# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
2304
-# dependencies a directory has on other directories in a graphical way. The
2305
-# dependency relations are determined by the #include relations between the
2306
-# files in the directories.
2307
-# The default value is: YES.
2308
-# This tag requires that the tag HAVE_DOT is set to YES.
2309
-
2310
-DIRECTORY_GRAPH        = YES
2311
-
2312
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
2313
-# generated by dot. For an explanation of the image formats see the section
2314
-# output formats in the documentation of the dot tool (Graphviz (see:
2315
-# http://www.graphviz.org/)).
2316
-# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
2317
-# to make the SVG files visible in IE 9+ (other browsers do not have this
2318
-# requirement).
2319
-# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
2320
-# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
2321
-# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
2322
-# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
2323
-# png:gdiplus:gdiplus.
2324
-# The default value is: png.
2325
-# This tag requires that the tag HAVE_DOT is set to YES.
2326
-
2327
-DOT_IMAGE_FORMAT       = png
2328
-
2329
-# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
2330
-# enable generation of interactive SVG images that allow zooming and panning.
2331
-#
2332
-# Note that this requires a modern browser other than Internet Explorer. Tested
2333
-# and working are Firefox, Chrome, Safari, and Opera.
2334
-# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make
2335
-# the SVG files visible. Older versions of IE do not have SVG support.
2336
-# The default value is: NO.
2337
-# This tag requires that the tag HAVE_DOT is set to YES.
2338
-
2339
-INTERACTIVE_SVG        = NO
2340
-
2341
-# The DOT_PATH tag can be used to specify the path where the dot tool can be
2342
-# found. If left blank, it is assumed the dot tool can be found in the path.
2343
-# This tag requires that the tag HAVE_DOT is set to YES.
2344
-
2345
-DOT_PATH               =
2346
-
2347
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
2348
-# contain dot files that are included in the documentation (see the \dotfile
2349
-# command).
2350
-# This tag requires that the tag HAVE_DOT is set to YES.
2351
-
2352
-DOTFILE_DIRS           =
2353
-
2354
-# The MSCFILE_DIRS tag can be used to specify one or more directories that
2355
-# contain msc files that are included in the documentation (see the \mscfile
2356
-# command).
2357
-
2358
-MSCFILE_DIRS           =
2359
-
2360
-# The DIAFILE_DIRS tag can be used to specify one or more directories that
2361
-# contain dia files that are included in the documentation (see the \diafile
2362
-# command).
2363
-
2364
-DIAFILE_DIRS           =
2365
-
2366
-# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
2367
-# path where java can find the plantuml.jar file. If left blank, it is assumed
2368
-# PlantUML is not used or called during a preprocessing step. Doxygen will
2369
-# generate a warning when it encounters a \startuml command in this case and
2370
-# will not generate output for the diagram.
2371
-
2372
-PLANTUML_JAR_PATH      =
2373
-
2374
-# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
2375
-# configuration file for plantuml.
2376
-
2377
-PLANTUML_CFG_FILE      =
2378
-
2379
-# When using plantuml, the specified paths are searched for files specified by
2380
-# the !include statement in a plantuml block.
2381
-
2382
-PLANTUML_INCLUDE_PATH  =
2383
-
2384
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
2385
-# that will be shown in the graph. If the number of nodes in a graph becomes
2386
-# larger than this value, doxygen will truncate the graph, which is visualized
2387
-# by representing a node as a red box. Note that doxygen if the number of direct
2388
-# children of the root node in a graph is already larger than
2389
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
2390
-# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
2391
-# Minimum value: 0, maximum value: 10000, default value: 50.
2392
-# This tag requires that the tag HAVE_DOT is set to YES.
2393
-
2394
-DOT_GRAPH_MAX_NODES    = 50
2395
-
2396
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
2397
-# generated by dot. A depth value of 3 means that only nodes reachable from the
2398
-# root by following a path via at most 3 edges will be shown. Nodes that lay
2399
-# further from the root node will be omitted. Note that setting this option to 1
2400
-# or 2 may greatly reduce the computation time needed for large code bases. Also
2401
-# note that the size of a graph can be further restricted by
2402
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
2403
-# Minimum value: 0, maximum value: 1000, default value: 0.
2404
-# This tag requires that the tag HAVE_DOT is set to YES.
2405
-
2406
-MAX_DOT_GRAPH_DEPTH    = 0
2407
-
2408
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
2409
-# background. This is disabled by default, because dot on Windows does not seem
2410
-# to support this out of the box.
2411
-#
2412
-# Warning: Depending on the platform used, enabling this option may lead to
2413
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
2414
-# read).
2415
-# The default value is: NO.
2416
-# This tag requires that the tag HAVE_DOT is set to YES.
2417
-
2418
-DOT_TRANSPARENT        = NO
2419
-
2420
-# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
2421
-# files in one run (i.e. multiple -o and -T options on the command line). This
2422
-# makes dot run faster, but since only newer versions of dot (>1.8.10) support
2423
-# this, this feature is disabled by default.
2424
-# The default value is: NO.
2425
-# This tag requires that the tag HAVE_DOT is set to YES.
2426
-
2427
-DOT_MULTI_TARGETS      = YES
2428
-
2429
-# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page
2430
-# explaining the meaning of the various boxes and arrows in the dot generated
2431
-# graphs.
2432
-# The default value is: YES.
2433
-# This tag requires that the tag HAVE_DOT is set to YES.
2434
-
2435
-GENERATE_LEGEND        = YES
2436
-
2437
-# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
2438
-# files that are used to generate the various graphs.
2439
-# The default value is: YES.
2440
-# This tag requires that the tag HAVE_DOT is set to YES.
2441
-
2442
-DOT_CLEANUP            = YES
2443
ncmpc-0.30.tar.xz/src/Event.hxx Deleted
46
 
1
@@ -1,44 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef EVENT_HXX
22
-#define EVENT_HXX
23
-
24
-#include <glib.h>
25
-
26
-#include <chrono>
27
-
28
-template<typename T, bool (T::*method)()>
29
-struct BindTimeoutCallback {
30
-   static gboolean Callback(gpointer data) {
31
-       auto &t = *static_cast<T *>(data);
32
-       return (t.*method)();
33
-   }
34
-};
35
-
36
-template<typename T, bool (T::*method)()>
37
-inline unsigned
38
-ScheduleTimeout(std::chrono::seconds s, T &t)
39
-{
40
-   return g_timeout_add_seconds(s.count(),
41
-                    BindTimeoutCallback<T, method>::Callback,
42
-                    &t);
43
-}
44
-
45
-#endif
46
ncmpc-0.30.tar.xz/src/colors.cxx Deleted
271
 
1
@@ -1,269 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#include "colors.hxx"
22
-#include "i18n.h"
23
-#include "ncfix.h"
24
-
25
-#ifdef ENABLE_COLORS
26
-#include "options.hxx"
27
-#endif
28
-
29
-#include <list>
30
-
31
-#include <assert.h>
32
-#include <stdio.h>
33
-#include <stdlib.h>
34
-#include <string.h>
35
-#include <glib.h>
36
-
37
-#define COLOR_NONE  G_MININT /* left most bit only */
38
-#define COLOR_ERROR -2
39
-
40
-#ifdef ENABLE_COLORS
41
-struct CustomColor {
42
-   short color;
43
-   short r,g,b;
44
-
45
-   constexpr CustomColor(short _color, short _r, short _g, short _b)
46
-       :color(_color), r(_r), g(_g), b(_b) {}
47
-};
48
-#endif
49
-
50
-struct NamedColor {
51
-   const char *name;
52
-#ifdef ENABLE_COLORS
53
-   int color;
54
-#endif
55
-   int mono;
56
-
57
-#ifndef ENABLE_COLORS
58
-   constexpr NamedColor(const char *_name, int, int _mono)
59
-       :name(_name), mono(_mono) {}
60
-#endif
61
-};
62
-
63
-static NamedColor colors[COLOR_END] = {
64
-   /* color pair = field name, color, mono */
65
-   {nullptr, 0, 0},
66
-   {"title",             COLOR_YELLOW,          A_NORMAL},
67
-   {"title-bold",        COLOR_YELLOW | A_BOLD, A_BOLD  },
68
-   {"line",              COLOR_WHITE,           A_NORMAL},
69
-   {"line-bold",         COLOR_WHITE  | A_BOLD, A_BOLD  },
70
-   {"line-flags",        COLOR_YELLOW,          A_NORMAL},
71
-   {"list",              COLOR_GREEN,           A_NORMAL},
72
-   {"list-bold",         COLOR_GREEN  | A_BOLD, A_BOLD  },
73
-   {"progressbar",       COLOR_WHITE,           A_NORMAL},
74
-   {"progressbar-background", COLOR_BLACK | A_BOLD, A_NORMAL},
75
-   {"status-song",       COLOR_YELLOW,          A_NORMAL},
76
-   {"status-state",      COLOR_YELLOW | A_BOLD, A_BOLD  },
77
-   {"status-time",       COLOR_RED,             A_NORMAL},
78
-   {"alert",             COLOR_RED    | A_BOLD, A_BOLD  },
79
-   {"browser-directory", COLOR_YELLOW,          A_NORMAL},
80
-   {"browser-playlist",  COLOR_RED,             A_NORMAL},
81
-   {"background",        COLOR_BLACK,           A_NORMAL},
82
-};
83
-
84
-#ifdef ENABLE_COLORS
85
-
86
-static std::list<CustomColor> custom_colors;
87
-
88
-static NamedColor *
89
-colors_lookup_by_name(const char *name)
90
-{
91
-   for (unsigned i = 1; i < COLOR_END; ++i)
92
-       if (!strcasecmp(colors[i].name, name))
93
-           return &colors[i];
94
-
95
-   return nullptr;
96
-}
97
-
98
-static void
99
-colors_update_pair(enum color id)
100
-{
101
-   assert(id > 0 && id < COLOR_END);
102
-
103
-   int fg = colors[id].color;
104
-   int bg = colors[COLOR_BACKGROUND].color;
105
-
106
-   /* If color == COLOR_NONE (negative),
107
-    * pass -1 to avoid cast errors */
108
-   init_pair(id,
109
-       (fg < 0 ? -1 : fg),
110
-       (bg < 0 ? -1 : bg));
111
-}
112
-
113
-int
114
-colors_str2color(const char *str)
115
-{
116
-   int color = 0;
117
-   char **parts = g_strsplit(str, ",", 0);
118
-   for (int i = 0; parts[i]; i++) {
119
-       char *cur = parts[i];
120
-
121
-       /* Legacy colors (brightblue,etc) */
122
-       if (!strncasecmp(cur, "bright", 6)) {
123
-           color |= A_BOLD;
124
-           cur += 6;
125
-       }
126
-
127
-       /* Colors */
128
-       if (!strcasecmp(cur, "none"))
129
-           color |= COLOR_NONE;
130
-       else if (!strcasecmp(cur, "black"))
131
-           color |= COLOR_BLACK;
132
-       else if (!strcasecmp(cur, "red"))
133
-           color |= COLOR_RED;
134
-       else if (!strcasecmp(cur, "green"))
135
-           color |= COLOR_GREEN;
136
-       else if (!strcasecmp(cur, "yellow"))
137
-           color |= COLOR_YELLOW;
138
-       else if (!strcasecmp(cur, "blue"))
139
-           color |= COLOR_BLUE;
140
-       else if (!strcasecmp(cur, "magenta"))
141
-           color |= COLOR_MAGENTA;
142
-       else if (!strcasecmp(cur, "cyan"))
143
-           color |= COLOR_CYAN;
144
-       else if (!strcasecmp(cur, "white"))
145
-           color |= COLOR_WHITE;
146
-       else if (!strcasecmp(cur, "grey") || !strcasecmp(cur, "gray"))
147
-           color |= COLOR_BLACK | A_BOLD;
148
-
149
-       /* Attributes */
150
-       else if (!strcasecmp(cur, "standout"))
151
-           color |= A_STANDOUT;
152
-       else if (!strcasecmp(cur, "underline"))
153
-           color |= A_UNDERLINE;
154
-       else if (!strcasecmp(cur, "reverse"))
155
-           color |= A_REVERSE;
156
-       else if (!strcasecmp(cur, "blink"))
157
-           color |= A_BLINK;
158
-       else if (!strcasecmp(cur, "dim"))
159
-           color |= A_DIM;
160
-       else if (!strcasecmp(cur, "bold"))
161
-           color |= A_BOLD;
162
-       else {
163
-           /* Numerical colors */
164
-           char *endptr;
165
-           int tmp = strtol(cur, &endptr, 10);
166
-           if (cur != endptr && endptr[0] == '\0') {
167
-               color |= tmp;
168
-           } else {
169
-               fprintf(stderr, "%s: %s\n",
170
-                   _("Unknown color"), str);
171
-               return COLOR_ERROR;
172
-           }
173
-       }
174
-
175
-   }
176
-   g_strfreev(parts);
177
-   return color;
178
-}
179
-
180
-/* This function is called from conf.c before curses have been started,
181
- * it adds the definition to the color_definition_list and init_color() is
182
- * done in colors_start() */
183
-bool
184
-colors_define(const char *name, short r, short g, short b)
185
-{
186
-   int color = colors_str2color(name);
187
-
188
-   if (color < 0)
189
-       return false;
190
-
191
-   custom_colors.emplace_back(color, r, g, b);
192
-   return true;
193
-}
194
-
195
-bool
196
-colors_assign(const char *name, const char *value)
197
-{
198
-   auto *entry = colors_lookup_by_name(name);
199
-
200
-   if (!entry) {
201
-       fprintf(stderr, "%s: %s",
202
-           _("Unknown color field"), name);
203
-       return false;
204
-   }
205
-
206
-   const int color = colors_str2color(value);
207
-   if (color == COLOR_ERROR)
208
-       return false;
209
-
210
-   entry->color = color;
211
-   return true;
212
-}
213
-
214
-void
215
-colors_start()
216
-{
217
-   if (has_colors()) {
218
-       /* initialize color support */
219
-       start_color();
220
-       use_default_colors();
221
-       /* define any custom colors defined in the configuration file */
222
-       if (!custom_colors.empty() && can_change_color()) {
223
-           for (const auto &i : custom_colors)
224
-               if (i.color <= COLORS)
225
-                   init_color(i.color, i.r, i.g, i.b);
226
-       } else if (!custom_colors.empty() && !can_change_color())
227
-           fprintf(stderr, "%s\n",
228
-               _("Terminal lacks support for changing colors"));
229
-
230
-       if (options.enable_colors) {
231
-           for (unsigned i = 1; i < COLOR_END; ++i)
232
-               /* update the color pairs */
233
-               colors_update_pair((enum color)i);
234
-       }
235
-   } else if (options.enable_colors) {
236
-       fprintf(stderr, "%s\n",
237
-           _("Terminal lacks color capabilities"));
238
-       options.enable_colors = 0;
239
-   }
240
-
241
-   /* free the color_definition_list */
242
-   custom_colors.clear();
243
-}
244
-#endif
245
-
246
-void
247
-colors_use(WINDOW *w, enum color id)
248
-{
249
-   auto *entry = &colors[id];
250
-
251
-   assert(id > 0 && id < COLOR_END);
252
-
253
-   attr_t attrs;
254
-   short pair;
255
-   fix_wattr_get(w, &attrs, &pair, nullptr);
256
-
257
-#ifdef ENABLE_COLORS
258
-   if (options.enable_colors) {
259
-       /* color mode */
260
-       if ((int)attrs != entry->color || (short)id != pair)
261
-           wattr_set(w, entry->color, id, nullptr);
262
-   } else {
263
-#endif
264
-       /* mono mode */
265
-       if ((int)attrs != entry->mono)
266
-           (void)wattrset(w, entry->mono);
267
-#ifdef ENABLE_COLORS
268
-   }
269
-#endif
270
-}
271
ncmpc-0.30.tar.xz/src/colors.hxx Deleted
67
 
1
@@ -1,65 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef COLORS_H
22
-#define COLORS_H
23
-
24
-#include "config.h"
25
-#include "ncmpc_curses.h"
26
-#include "Compiler.h"
27
-
28
-
29
-enum color {
30
-   COLOR_TITLE = 1,
31
-   COLOR_TITLE_BOLD,
32
-   COLOR_LINE,
33
-   COLOR_LINE_BOLD,
34
-   COLOR_LINE_FLAGS,
35
-   COLOR_LIST,
36
-   COLOR_LIST_BOLD,
37
-   COLOR_PROGRESSBAR,
38
-   COLOR_PROGRESSBAR_BACKGROUND,
39
-   COLOR_STATUS,
40
-   COLOR_STATUS_BOLD,
41
-   COLOR_STATUS_TIME,
42
-   COLOR_STATUS_ALERT,
43
-   COLOR_DIRECTORY,
44
-   COLOR_PLAYLIST,
45
-   COLOR_BACKGROUND,
46
-   COLOR_END
47
-};
48
-
49
-gcc_pure
50
-int colors_str2color(const char *str);
51
-
52
-#ifdef ENABLE_COLORS
53
-bool
54
-colors_assign(const char *name, const char *value);
55
-
56
-bool
57
-colors_define(const char *name, short r, short g, short b);
58
-
59
-void
60
-colors_start();
61
-#endif
62
-
63
-void
64
-colors_use(WINDOW *w, enum color id);
65
-
66
-#endif /* COLORS_H */
67
ncmpc-0.30.tar.xz/src/command.cxx Deleted
532
 
1
@@ -1,530 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#include "command.hxx"
22
-#include "i18n.h"
23
-#include "ncmpc_curses.h"
24
-
25
-#include <assert.h>
26
-#include <ctype.h>
27
-#include <stdlib.h>
28
-#include <string.h>
29
-#include <ctype.h>
30
-#include <glib.h>
31
-#include <signal.h>
32
-#include <unistd.h>
33
-
34
-#define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */
35
-
36
-#define BS   KEY_BACKSPACE
37
-#define DEL  KEY_DC
38
-#define UP   KEY_UP
39
-#define DWN  KEY_DOWN
40
-#define LEFT KEY_LEFT
41
-#define RGHT KEY_RIGHT
42
-#define HOME KEY_HOME
43
-#define END  KEY_END
44
-#define PGDN KEY_NPAGE
45
-#define PGUP KEY_PPAGE
46
-#define TAB  0x09
47
-#define STAB 0x161
48
-#define ESC  0x1B
49
-#define RET  '\r'
50
-#define F1   KEY_F(1)
51
-#define F2   KEY_F(2)
52
-#define F3   KEY_F(3)
53
-#define F4   KEY_F(4)
54
-#define F5   KEY_F(5)
55
-#define F6   KEY_F(6)
56
-#define F7   KEY_F(7)
57
-#define F8   KEY_F(8)
58
-#define F9   KEY_F(9)
59
-#define C(x) KEY_CTL(x)
60
-
61
-static command_definition_t cmds[] = {
62
-#ifdef ENABLE_KEYDEF_SCREEN
63
-   { {'K', 0, 0 }, 0, CMD_SCREEN_KEYDEF, "screen-keyedit",
64
-     N_("Key configuration screen") },
65
-#endif
66
-   { { 'q', 'Q', C('C') }, 0, CMD_QUIT, "quit",
67
-     N_("Quit") },
68
-
69
-   /* movement */
70
-   { { UP, 'k', 0 }, 0, CMD_LIST_PREVIOUS, "up",
71
-     N_("Move cursor up") },
72
-   { { DWN, 'j', 0 }, 0, CMD_LIST_NEXT, "down",
73
-     N_("Move cursor down") },
74
-   { { 'H', 0, 0 }, 0, CMD_LIST_TOP, "top",
75
-     N_("Move cursor to the top of screen") },
76
-   { { 'M', 0, 0 }, 0, CMD_LIST_MIDDLE, "middle",
77
-     N_("Move cursor to the middle of screen") },
78
-   { { 'L', 0, 0 }, 0, CMD_LIST_BOTTOM, "bottom",
79
-     N_("Move cursor to the bottom of screen") },
80
-   { { HOME, C('A'), 0 }, 0, CMD_LIST_FIRST, "home",
81
-     N_("Move cursor to the top of the list") },
82
-   { { END, C('E'), 0 }, 0, CMD_LIST_LAST, "end",
83
-     N_("Move cursor to the bottom of the list") },
84
-   { { PGUP, 0, 0 }, 0, CMD_LIST_PREVIOUS_PAGE, "pgup",
85
-     N_("Page up") },
86
-   { { PGDN, 0, 0 }, 0, CMD_LIST_NEXT_PAGE, "pgdn",
87
-     N_("Page down") },
88
-   { { 'v',  0, 0 }, 0, CMD_LIST_RANGE_SELECT, "range-select",
89
-     N_("Range selection") },
90
-   { { C('N'),  0, 0 }, 0, CMD_LIST_SCROLL_DOWN_LINE, "scroll-down-line",
91
-     N_("Scroll down one line") },
92
-   { { C('B'),  0, 0 }, 0, CMD_LIST_SCROLL_UP_LINE, "scroll-up-line",
93
-     N_("Scroll up one line") },
94
-   { { 'N',  0, 0 }, 0, CMD_LIST_SCROLL_DOWN_HALF, "scroll-down-half",
95
-     N_("Scroll up half a screen") },
96
-   { { 'B',  0, 0 }, 0, CMD_LIST_SCROLL_UP_HALF, "scroll-up-half",
97
-     N_("Scroll down half a screen") },
98
-   { { 'l', 0, 0 }, 0, CMD_SELECT_PLAYING, "select-playing",
99
-     N_("Select currently playing song") },
100
-
101
-
102
-   /* basic screens */
103
-   { { '1', F1, 'h' }, 0, CMD_SCREEN_HELP, "screen-help",
104
-     N_("Help screen") },
105
-   { { '2', F2, 0 }, 0, CMD_SCREEN_PLAY, "screen-playlist",
106
-     N_("Queue screen") },
107
-   { { '3', F3, 0 }, 0, CMD_SCREEN_FILE, "screen-browse",
108
-     N_("Browse screen") },
109
-
110
-
111
-   /* player commands */
112
-   { { RET, 0, 0 }, 0, CMD_PLAY, "play",
113
-     N_("Play/Enter directory") },
114
-   { { 'P', 0, 0 }, 0, CMD_PAUSE,"pause",
115
-     N_("Pause") },
116
-   { { 's', BS, 0 }, 0, CMD_STOP, "stop",
117
-     N_("Stop") },
118
-   { { 'o', 0, 0 }, 0, CMD_CROP, "crop",
119
-     N_("Crop") },
120
-   { { '>', 0, 0 }, 0, CMD_TRACK_NEXT, "next",
121
-     N_("Next track") },
122
-   { { '<', 0, 0 }, 0, CMD_TRACK_PREVIOUS, "prev",
123
-     N_("Previous track") },
124
-   { { 'f', 0, 0 }, 0, CMD_SEEK_FORWARD, "seek-forward",
125
-     N_("Seek forward") },
126
-   { { 'b', 0, 0 }, 0, CMD_SEEK_BACKWARD, "seek-backward",
127
-     N_("Seek backward") },
128
-   { { '+', RGHT, 0 }, 0, CMD_VOLUME_UP, "volume-up",
129
-     N_("Increase volume") },
130
-   { { '-', LEFT, 0 }, 0, CMD_VOLUME_DOWN, "volume-down",
131
-     N_("Decrease volume") },
132
-   { { ' ', 0, 0 }, 0, CMD_SELECT, "select",
133
-     N_("Select/deselect song in queue") },
134
-   { { 't', 0, 0 }, 0, CMD_SELECT_ALL, "select_all",
135
-     N_("Select all listed items") },
136
-   { { DEL, 'd', 0 }, 0, CMD_DELETE, "delete",
137
-     N_("Delete song from queue") },
138
-   { { 'Z', 0, 0 }, 0, CMD_SHUFFLE, "shuffle",
139
-     N_("Shuffle queue") },
140
-   { { 'c', 0, 0 }, 0, CMD_CLEAR, "clear",
141
-     N_("Clear queue") },
142
-   { { 'r', 0, 0 }, 0, CMD_REPEAT, "repeat",
143
-     N_("Toggle repeat mode") },
144
-   { { 'z', 0, 0 }, 0, CMD_RANDOM, "random",
145
-     N_("Toggle random mode") },
146
-   { { 'y', 0, 0 }, 0, CMD_SINGLE, "single",
147
-     N_("Toggle single mode") },
148
-   { { 'C', 0, 0 }, 0, CMD_CONSUME, "consume",
149
-     N_("Toggle consume mode") },
150
-   { { 'x', 0, 0 }, 0, CMD_CROSSFADE, "crossfade",
151
-     N_("Toggle crossfade mode") },
152
-   { { C('U'), 0, 0 }, 0, CMD_DB_UPDATE, "db-update",
153
-     N_("Start a music database update") },
154
-   { { 'S', 0, 0 }, 0, CMD_SAVE_PLAYLIST, "save",
155
-     N_("Save queue") },
156
-   { { 'a', 0, 0 }, 0, CMD_ADD, "add",
157
-     N_("Add url/file to queue") },
158
-
159
-   { { '!', 0, 0 }, 0, CMD_GO_ROOT_DIRECTORY, "go-root-directory",
160
-     N_("Go to root directory") },
161
-   { { '"', 0, 0 }, 0, CMD_GO_PARENT_DIRECTORY, "go-parent-directory",
162
-     N_("Go to parent directory") },
163
-
164
-   { { 'G', 0, 0 }, 0, CMD_LOCATE, "locate",
165
-     N_("Locate song in browser") },
166
-
167
-   /* lists */
168
-   { { C('K'), 0, 0 }, 0, CMD_LIST_MOVE_UP, "move-up",
169
-     N_("Move item up") },
170
-   { { C('J'), 0, 0 }, 0, CMD_LIST_MOVE_DOWN, "move-down",
171
-     N_("Move item down") },
172
-   { { C('L'), 0, 0 }, 0, CMD_SCREEN_UPDATE, "update",
173
-     N_("Refresh screen") },
174
-
175
-
176
-   /* ncmpc options */
177
-   { { 'w', 0, 0 }, 0, CMD_TOGGLE_FIND_WRAP, "wrap-mode",
178
-     /* translators: toggle between wrapping and non-wrapping
179
-        search */
180
-     N_("Toggle find mode") },
181
-   { { 'U', 0, 0 }, 0, CMD_TOGGLE_AUTOCENTER, "autocenter-mode",
182
-     /* translators: the auto center mode always centers the song
183
-        currently being played */
184
-     N_("Toggle auto center mode") },
185
-
186
-
187
-   /* change screen */
188
-   { { TAB, 0, 0 }, 0, CMD_SCREEN_NEXT, "screen-next",
189
-     N_("Next screen") },
190
-   { { STAB, 0, 0 }, 0, CMD_SCREEN_PREVIOUS, "screen-prev",
191
-     N_("Previous screen") },
192
-   { { '`', 0, 0 }, 0, CMD_SCREEN_SWAP, "screen-swap",
193
-     N_("Swap to most recent screen") },
194
-
195
-
196
-   /* find */
197
-   { { '/', 0, 0 }, 0, CMD_LIST_FIND, "find",
198
-     N_("Forward find") },
199
-   { { 'n', 0, 0 }, 0, CMD_LIST_FIND_NEXT, "find-next",
200
-     N_("Forward find next") },
201
-   { { '?', 0, 0 }, 0, CMD_LIST_RFIND, "rfind",
202
-     N_("Backward find") },
203
-   { { 'p', 0, 0 }, 0, CMD_LIST_RFIND_NEXT, "rfind-next",
204
-     N_("Backward find previous") },
205
-   { { '.', 0, 0 }, 0, CMD_LIST_JUMP, "jump",
206
-       /* translators: this queries the user for a string
207
-        * and jumps directly (while the user is typing)
208
-        * to the entry which begins with this string */
209
-     N_("Jump to") },
210
-
211
-
212
-   /* extra screens */
213
-#ifdef ENABLE_ARTIST_SCREEN
214
-   { {'4', F4, 0 }, 0, CMD_SCREEN_ARTIST, "screen-artist",
215
-     N_("Artist screen") },
216
-#endif
217
-#ifdef ENABLE_SEARCH_SCREEN
218
-   { {'5', F5, 0 }, 0, CMD_SCREEN_SEARCH, "screen-search",
219
-     N_("Search screen") },
220
-   { {'m', 0, 0 }, 0, CMD_SEARCH_MODE, "search-mode",
221
-     N_("Change search mode") },
222
-#endif
223
-#ifdef ENABLE_SONG_SCREEN
224
-   { { 'i', 0, 0 }, 0, CMD_SCREEN_SONG, "view",
225
-     N_("View the selected and the currently playing song") },
226
-#endif
227
-#ifdef ENABLE_LYRICS_SCREEN
228
-   { {'7', F7, 0 }, 0, CMD_SCREEN_LYRICS, "screen-lyrics",
229
-     N_("Lyrics screen") },
230
-   { {ESC, 0, 0 }, 0, CMD_INTERRUPT, "lyrics-interrupt",
231
-     /* translators: interrupt the current background action,
232
-        e.g. stop loading lyrics from the internet */
233
-     N_("Interrupt action") },
234
-   { {'u', 0, 0 }, 0, CMD_LYRICS_UPDATE, "lyrics-update",
235
-     N_("Update Lyrics") },
236
-   /* this command may move out of #ifdef ENABLE_LYRICS_SCREEN
237
-      at some point */
238
-   { {'e', 0, 0 }, 0, CMD_EDIT, "edit",
239
-     N_("Edit the current item") },
240
-#endif
241
-
242
-#ifdef ENABLE_OUTPUTS_SCREEN
243
-   { {'8', F8, 0 }, 0, CMD_SCREEN_OUTPUTS, "screen-outputs",
244
-     N_("Outputs screen") },
245
-#endif
246
-
247
-#ifdef ENABLE_CHAT_SCREEN
248
-   { {'9', F9, 0}, 0, CMD_SCREEN_CHAT, "screen-chat",
249
-     N_("Chat screen") },
250
-#endif
251
-
252
-   { { -1, -1, -1 }, 0, CMD_NONE, nullptr, nullptr }
253
-};
254
-
255
-#ifdef ENABLE_KEYDEF_SCREEN
256
-command_definition_t *
257
-get_command_definitions()
258
-{
259
-   return cmds;
260
-}
261
-
262
-size_t
263
-get_cmds_max_name_width(command_definition_t *c)
264
-{
265
-   static size_t max = 0;
266
-
267
-   if (max != 0)
268
-       return max;
269
-
270
-   for (command_definition_t *p = c; p->name != nullptr; p++) {
271
-       /*
272
-        * width and length are considered the same here, as command
273
-        * names are not translated.
274
-        */
275
-       size_t len = strlen(p->name);
276
-       if (len > max)
277
-           max = len;
278
-   }
279
-
280
-   return max;
281
-}
282
-#endif
283
-
284
-const char *
285
-key2str(int key)
286
-{
287
-   switch(key) {
288
-       static char buf[32];
289
-
290
-   case 0:
291
-       return _("Undefined");
292
-   case ' ':
293
-       return _("Space");
294
-   case RET:
295
-       return _("Enter");
296
-   case BS:
297
-       return _("Backspace");
298
-   case DEL:
299
-       return _("Delete");
300
-   case UP:
301
-       return _("Up");
302
-   case DWN:
303
-       return _("Down");
304
-   case LEFT:
305
-       return _("Left");
306
-   case RGHT:
307
-       return _("Right");
308
-   case HOME:
309
-       return _("Home");
310
-   case END:
311
-       return _("End");
312
-   case PGDN:
313
-       return _("PageDown");
314
-   case PGUP:
315
-       return _("PageUp");
316
-   case TAB:
317
-       return _("Tab");
318
-   case STAB:
319
-       return _("Shift+Tab");
320
-   case ESC:
321
-       return _("Esc");
322
-   case KEY_IC:
323
-       return _("Insert");
324
-   default:
325
-       for (int i = 0; i <= 63; i++)
326
-           if (key == KEY_F(i)) {
327
-               snprintf(buf, 32, _("F%d"), i );
328
-               return buf;
329
-           }
330
-       if (!(key & ~037))
331
-           snprintf(buf, 32, _("Ctrl-%c"), 'A'+(key & 037)-1 );
332
-       else if ((key & ~037) == 224)
333
-           snprintf(buf, 32, _("Alt-%c"), 'A'+(key & 037)-1 );
334
-       else if (key > 32 && key < 256)
335
-           snprintf(buf, 32, "%c", key);
336
-       else
337
-           snprintf(buf, 32, "0x%03X", key);
338
-       return buf;
339
-   }
340
-}
341
-
342
-void
343
-command_dump_keys()
344
-{
345
-   for (size_t i = 0; cmds[i].description; i++)
346
-       if (cmds[i].command != CMD_NONE)
347
-           printf(" %20s : %s\n",
348
-                  get_key_names(cmds[i].command, true),
349
-                  cmds[i].name);
350
-}
351
-
352
-#ifndef NCMPC_MINI
353
-
354
-static void
355
-set_key_flags(command_definition_t *cp, command_t command, int flags)
356
-{
357
-   for (size_t i = 0; cp[i].name; i++) {
358
-       if (cp[i].command == command) {
359
-           cp[i].flags |= flags;
360
-           break;
361
-       }
362
-   }
363
-}
364
-
365
-#endif
366
-
367
-const char *
368
-get_key_names(command_t command, bool all)
369
-{
370
-   for (int i = 0; cmds[i].description; i++) {
371
-       if (cmds[i].command == command) {
372
-           static char keystr[80];
373
-
374
-           g_strlcpy(keystr, key2str(cmds[i].keys[0]), sizeof(keystr));
375
-           if (!all)
376
-               return keystr;
377
-
378
-           for (unsigned j = 1; j < MAX_COMMAND_KEYS &&
379
-                   cmds[i].keys[j] > 0; j++) {
380
-               g_strlcat(keystr, " ", sizeof(keystr));
381
-               g_strlcat(keystr, key2str(cmds[i].keys[j]), sizeof(keystr));
382
-           }
383
-           return keystr;
384
-       }
385
-   }
386
-   return nullptr;
387
-}
388
-
389
-const char *
390
-get_key_description(command_t command)
391
-{
392
-   for (size_t i = 0; cmds[i].description; i++)
393
-       if (cmds[i].command == command)
394
-           return _(cmds[i].description);
395
-
396
-   return nullptr;
397
-}
398
-
399
-const char *
400
-get_key_command_name(command_t command)
401
-{
402
-   for (size_t i = 0; cmds[i].name; i++)
403
-       if (cmds[i].command == command)
404
-           return cmds[i].name;
405
-
406
-   return nullptr;
407
-}
408
-
409
-command_t
410
-get_key_command_from_name(const char *name)
411
-{
412
-   for (size_t i = 0; cmds[i].name; i++)
413
-       if (strcmp(name, cmds[i].name) == 0)
414
-           return cmds[i].command;
415
-
416
-   return CMD_NONE;
417
-}
418
-
419
-command_t
420
-find_key_command(int key, const command_definition_t *c)
421
-{
422
-   assert(key != 0);
423
-   assert(c != nullptr);
424
-
425
-   for (size_t i = 0; c[i].name; i++) {
426
-       for (int j = 0; j < MAX_COMMAND_KEYS; j++)
427
-           if (c[i].keys[j] == key)
428
-               return c[i].command;
429
-   }
430
-
431
-   return CMD_NONE;
432
-}
433
-
434
-command_t
435
-get_key_command(int key)
436
-{
437
-   return find_key_command(key, cmds);
438
-}
439
-
440
-bool
441
-assign_keys(command_t command, int keys[MAX_COMMAND_KEYS])
442
-{
443
-   for (size_t i = 0; cmds[i].name; i++) {
444
-       if (cmds[i].command == command) {
445
-           memcpy(cmds[i].keys, keys, sizeof(int)*MAX_COMMAND_KEYS);
446
-#ifndef NCMPC_MINI
447
-           cmds[i].flags |= COMMAND_KEY_MODIFIED;
448
-#endif
449
-           return true;
450
-       }
451
-   }
452
-
453
-   return false;
454
-}
455
-
456
-#ifndef NCMPC_MINI
457
-
458
-bool
459
-check_key_bindings(command_definition_t *cp, char *buf, size_t bufsize)
460
-{
461
-   bool success = true;
462
-
463
-   if (cp == nullptr)
464
-       cp = cmds;
465
-
466
-   for (size_t i = 0; cp[i].name; i++)
467
-       cp[i].flags &= ~COMMAND_KEY_CONFLICT;
468
-
469
-   for (size_t i = 0; cp[i].name; i++) {
470
-       int j;
471
-       command_t cmd;
472
-
473
-       for(j=0; j<MAX_COMMAND_KEYS; j++) {
474
-           if (cp[i].keys[j] &&
475
-               (cmd = find_key_command(cp[i].keys[j],cp)) != cp[i].command) {
476
-               if (buf) {
477
-                   snprintf(buf, bufsize,
478
-                        _("Key %s assigned to %s and %s"),
479
-                        key2str(cp[i].keys[j]),
480
-                        get_key_command_name(cp[i].command),
481
-                        get_key_command_name(cmd));
482
-               } else {
483
-                   fprintf(stderr,
484
-                       _("Key %s assigned to %s and %s"),
485
-                       key2str(cp[i].keys[j]),
486
-                       get_key_command_name(cp[i].command),
487
-                       get_key_command_name(cmd));
488
-                   fputc('\n', stderr);
489
-               }
490
-               cp[i].flags |= COMMAND_KEY_CONFLICT;
491
-               set_key_flags(cp, cmd, COMMAND_KEY_CONFLICT);
492
-               success = false;
493
-           }
494
-       }
495
-   }
496
-
497
-   return success;
498
-}
499
-
500
-bool
501
-write_key_bindings(FILE *f, int flags)
502
-{
503
-   if (flags & KEYDEF_WRITE_HEADER)
504
-       fprintf(f, "## Key bindings for ncmpc (generated by ncmpc)\n\n");
505
-
506
-   for (size_t i = 0; cmds[i].name && !ferror(f); i++) {
507
-       if (cmds[i].flags & COMMAND_KEY_MODIFIED ||
508
-           flags & KEYDEF_WRITE_ALL) {
509
-           fprintf(f, "## %s\n", cmds[i].description);
510
-           if (flags & KEYDEF_COMMENT_ALL)
511
-               fprintf(f, "#");
512
-           fprintf(f, "key %s = ", cmds[i].name);
513
-           for (int j = 0; j < MAX_COMMAND_KEYS; j++) {
514
-               if (j && cmds[i].keys[j])
515
-                   fprintf(f, ",  ");
516
-               if (!j || cmds[i].keys[j]) {
517
-                   if (cmds[i].keys[j]<256 && (isalpha(cmds[i].keys[j]) ||
518
-                                   isdigit(cmds[i].keys[j])))
519
-                       fprintf(f, "\'%c\'", cmds[i].keys[j]);
520
-                   else
521
-                       fprintf(f, "%d", cmds[i].keys[j]);
522
-               }
523
-           }
524
-           fprintf(f,"\n\n");
525
-       }
526
-   }
527
-
528
-   return ferror(f) == 0;
529
-}
530
-
531
-#endif /* NCMPC_MINI */
532
ncmpc-0.30.tar.xz/src/command.hxx Deleted
182
 
1
@@ -1,180 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef COMMAND_H
22
-#define COMMAND_H
23
-
24
-#include "config.h"
25
-#include "Compiler.h"
26
-
27
-#include <stddef.h>
28
-
29
-#ifndef NCMPC_MINI
30
-#include <stdio.h>
31
-#endif
32
-
33
-#define MAX_COMMAND_KEYS 3
34
-
35
-/* commands */
36
-typedef enum {
37
-   CMD_NONE = 0,
38
-   CMD_PLAY,
39
-   CMD_SELECT,
40
-   CMD_SELECT_ALL,
41
-   CMD_PAUSE,
42
-   CMD_STOP,
43
-   CMD_CROP,
44
-   CMD_TRACK_NEXT,
45
-   CMD_TRACK_PREVIOUS,
46
-   CMD_SEEK_FORWARD,
47
-   CMD_SEEK_BACKWARD,
48
-   CMD_SHUFFLE,
49
-   CMD_RANDOM,
50
-   CMD_CLEAR,
51
-   CMD_DELETE,
52
-   CMD_REPEAT,
53
-   CMD_SINGLE,
54
-   CMD_CONSUME,
55
-   CMD_CROSSFADE,
56
-   CMD_DB_UPDATE,
57
-   CMD_VOLUME_UP,
58
-   CMD_VOLUME_DOWN,
59
-   CMD_ADD,
60
-   CMD_SAVE_PLAYLIST,
61
-   CMD_TOGGLE_FIND_WRAP,
62
-   CMD_TOGGLE_AUTOCENTER,
63
-   CMD_SELECT_PLAYING,
64
-   CMD_SEARCH_MODE,
65
-   CMD_LIST_PREVIOUS,
66
-   CMD_LIST_NEXT,
67
-   CMD_LIST_TOP,
68
-   CMD_LIST_MIDDLE,
69
-   CMD_LIST_BOTTOM,
70
-   CMD_LIST_FIRST,
71
-   CMD_LIST_LAST,
72
-   CMD_LIST_NEXT_PAGE,
73
-   CMD_LIST_PREVIOUS_PAGE,
74
-   CMD_LIST_FIND,
75
-   CMD_LIST_FIND_NEXT,
76
-   CMD_LIST_RFIND,
77
-   CMD_LIST_RFIND_NEXT,
78
-   CMD_LIST_JUMP,
79
-   CMD_LIST_MOVE_UP,
80
-   CMD_LIST_MOVE_DOWN,
81
-   CMD_LIST_RANGE_SELECT,
82
-   CMD_LIST_SCROLL_UP_LINE,
83
-   CMD_LIST_SCROLL_DOWN_LINE,
84
-   CMD_LIST_SCROLL_UP_HALF,
85
-   CMD_LIST_SCROLL_DOWN_HALF,
86
-   CMD_SCREEN_UPDATE,
87
-   CMD_SCREEN_PREVIOUS,
88
-   CMD_SCREEN_NEXT,
89
-   CMD_SCREEN_SWAP,
90
-   CMD_SCREEN_PLAY,
91
-   CMD_SCREEN_FILE,
92
-   CMD_SCREEN_ARTIST,
93
-   CMD_SCREEN_SEARCH,
94
-   CMD_SCREEN_SONG,
95
-   CMD_SCREEN_KEYDEF,
96
-   CMD_SCREEN_HELP,
97
-   CMD_SCREEN_LYRICS,
98
-   CMD_SCREEN_OUTPUTS,
99
-   CMD_SCREEN_CHAT,
100
-   CMD_LYRICS_UPDATE,
101
-   CMD_EDIT,
102
-   CMD_INTERRUPT,
103
-   CMD_GO_ROOT_DIRECTORY,
104
-   CMD_GO_PARENT_DIRECTORY,
105
-   CMD_LOCATE,
106
-   CMD_QUIT
107
-} command_t;
108
-
109
-
110
-#ifndef NCMPC_MINI
111
-/* command definition flags */
112
-#define COMMAND_KEY_MODIFIED  0x01
113
-#define COMMAND_KEY_CONFLICT  0x02
114
-#endif
115
-
116
-/* write key bindings flags */
117
-#define KEYDEF_WRITE_HEADER  0x01
118
-#define KEYDEF_WRITE_ALL     0x02
119
-#define KEYDEF_COMMENT_ALL   0x04
120
-
121
-typedef struct  {
122
-   int keys[MAX_COMMAND_KEYS];
123
-   char flags;
124
-   command_t command;
125
-   const char *name;
126
-   const char *description;
127
-} command_definition_t;
128
-
129
-#ifdef ENABLE_KEYDEF_SCREEN
130
-command_definition_t *get_command_definitions();
131
-size_t get_cmds_max_name_width(command_definition_t *cmds);
132
-#endif
133
-
134
-gcc_pure
135
-command_t
136
-find_key_command(int key, const command_definition_t *cmds);
137
-
138
-void command_dump_keys();
139
-
140
-#ifndef NCMPC_MINI
141
-
142
-/**
143
- * @return true on success, false on error
144
- */
145
-bool
146
-check_key_bindings(command_definition_t *cmds, char *buf, size_t size);
147
-
148
-/**
149
- * @return true on success, false on error
150
- */
151
-bool
152
-write_key_bindings(FILE *f, int all);
153
-
154
-#endif
155
-
156
-gcc_pure
157
-const char *key2str(int key);
158
-
159
-gcc_pure
160
-const char *get_key_description(command_t command);
161
-
162
-gcc_pure
163
-const char *get_key_command_name(command_t command);
164
-
165
-gcc_pure
166
-const char *get_key_names(command_t command, bool all);
167
-
168
-gcc_pure
169
-command_t get_key_command(int key);
170
-
171
-gcc_pure
172
-command_t
173
-get_key_command_from_name(const char *name);
174
-
175
-/**
176
- * @return true on success, false on error
177
- */
178
-bool
179
-assign_keys(command_t command, int keys[MAX_COMMAND_KEYS]);
180
-
181
-#endif
182
ncmpc-0.30.tar.xz/src/match.cxx Deleted
83
 
1
@@ -1,81 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#include "match.hxx"
22
-#include "charset.hxx"
23
-
24
-#include <glib.h>
25
-
26
-#include <string.h>
27
-#include <ctype.h>
28
-
29
-static char *
30
-locale_casefold(const char *src)
31
-{
32
-   return g_utf8_casefold(LocaleToUtf8(src).c_str(), -1);
33
-}
34
-
35
-GRegex *
36
-compile_regex(const char *src, bool anchor)
37
-{
38
-   unsigned compile_flags =
39
-       G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE;
40
-   if (anchor)
41
-       compile_flags |= G_REGEX_ANCHORED;
42
-
43
-   char *src_folded = locale_casefold(src);
44
-   GRegex *regex = g_regex_new ((const gchar*)src_folded,
45
-                    GRegexCompileFlags(compile_flags),
46
-                    GRegexMatchFlags(0), nullptr);
47
-
48
-   g_free(src_folded);
49
-
50
-   return regex;
51
-}
52
-
53
-bool
54
-match_regex(GRegex *regex, const char *line)
55
-{
56
-   char *line_folded = locale_casefold(line);
57
-   GMatchInfo *match_info;
58
-   g_regex_match(regex, line_folded, GRegexMatchFlags(0), &match_info);
59
-   bool match = (bool)g_match_info_matches(match_info);
60
-
61
-   g_match_info_free(match_info);
62
-   g_free(line_folded);
63
-
64
-   return match;
65
-}
66
-
67
-bool
68
-match_line(const char *line, const char *needle)
69
-{
70
-   char *line_folded = locale_casefold(line);
71
-   char *needle_folded = locale_casefold(needle);
72
-
73
-   bool ret = (bool)g_regex_match_simple((const gchar*)needle_folded,
74
-                         (const gchar*)line_folded,
75
-                         GRegexCompileFlags(G_REGEX_CASELESS | G_REGEX_DOTALL | G_REGEX_OPTIMIZE),
76
-                         GRegexMatchFlags(0));
77
-
78
-   g_free(line_folded);
79
-   g_free(needle_folded);
80
-
81
-   return ret;
82
-}
83
ncmpc-0.30.tar.xz/src/match.hxx Deleted
58
 
1
@@ -1,56 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef MATCH_H
22
-#define MATCH_H
23
-
24
-#include "config.h"
25
-#include "Compiler.h"
26
-
27
-#ifdef NCMPC_MINI
28
-
29
-#include <string.h>
30
-
31
-static inline bool
32
-match_line(const char *line, const char *needle)
33
-{
34
-   return strstr(line, needle) != nullptr;
35
-}
36
-#else
37
-
38
-typedef struct _GRegex GRegex;
39
-
40
-GRegex *
41
-compile_regex(const char *src, bool anchor);
42
-
43
-gcc_pure
44
-bool
45
-match_regex(GRegex *regex, const char *line);
46
-
47
-/**
48
- * Checks whether the specified line matches the search string.  Case
49
- * is ignored.
50
- */
51
-gcc_pure
52
-bool
53
-match_line(const char *line, const char *needle);
54
-
55
-#endif
56
-
57
-#endif
58
ncmpc-0.30.tar.xz/src/ncfix.h Deleted
44
 
1
@@ -1,42 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-/*
22
- * Workarounds for libncurses oddities.
23
- */
24
-
25
-#ifndef NCFIX_H
26
-#define NCFIX_H
27
-
28
-#include "ncmpc_curses.h"
29
-
30
-/**
31
- * Workaround for "comparison will always evaluate as 'true' for the
32
- * address of ...".  By wrapping the macro in this inline function,
33
- * gcc stops bitching about this.
34
- */
35
-static inline int
36
-fix_wattr_get(WINDOW *win, attr_t *attrs, short *pair, void *opts)
37
-{
38
-   (void)opts;
39
-
40
-   return wattr_get(win, attrs, pair, opts);
41
-}
42
-
43
-#endif
44
ncmpc-0.30.tar.xz/src/ncmpc_curses.h Deleted
34
 
1
@@ -1,32 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#if defined(HAVE_NCURSESW_CURSES_H)
22
-#  include <ncursesw/curses.h>
23
-#elif defined(HAVE_NCURSESW_H)
24
-#  include <ncursesw.h>
25
-#elif defined(HAVE_NCURSES_CURSES_H)
26
-#  include <ncurses/curses.h>
27
-#elif defined(HAVE_NCURSES_H)
28
-#  include <ncurses.h>
29
-#elif defined(HAVE_CURSES_H)
30
-#  include <curses.h>
31
-#else
32
-#  error "SysV or X/Open-compatible Curses header file required"
33
-#endif
34
ncmpc-0.30.tar.xz/src/net/async_connect.cxx Deleted
134
 
1
@@ -1,132 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#include "async_connect.hxx"
31
-#include "../Compiler.h"
32
-
33
-#include <glib.h>
34
-
35
-#ifdef WIN32
36
-#include <ws2tcpip.h>
37
-#endif
38
-
39
-#include <assert.h>
40
-#include <stdio.h>
41
-#include <string.h>
42
-#include <errno.h>
43
-
44
-struct async_connect {
45
-   const struct async_connect_handler *handler;
46
-   void *handler_ctx;
47
-
48
-   socket_t fd;
49
-
50
-   guint source_id;
51
-};
52
-
53
-static gboolean
54
-async_connect_source_callback(gcc_unused GIOChannel *source,
55
-                 gcc_unused GIOCondition condition,
56
-                 gpointer data)
57
-{
58
-   auto *ac = (struct async_connect *)data;
59
-
60
-   const int fd = ac->fd;
61
-   const struct async_connect_handler *const handler = ac->handler;
62
-   void *const ctx = ac->handler_ctx;
63
-   g_free(ac);
64
-
65
-   int s_err = 0;
66
-   socklen_t s_err_size = sizeof(s_err);
67
-
68
-   if (getsockopt(fd, SOL_SOCKET, SO_ERROR,
69
-              (char*)&s_err, &s_err_size) < 0)
70
-       s_err = -last_socket_error();
71
-
72
-   if (s_err == 0) {
73
-       handler->success(fd, ctx);
74
-   } else {
75
-       close_socket(fd);
76
-       char msg[256];
77
-       snprintf(msg, sizeof(msg), "Failed to connect socket: %s",
78
-            strerror(-s_err));
79
-       handler->error(msg, ctx);
80
-   }
81
-
82
-   return false;
83
-}
84
-
85
-void
86
-async_connect_start(struct async_connect **acp,
87
-           const struct sockaddr *address, size_t address_size,
88
-           const struct async_connect_handler *handler, void *ctx)
89
-{
90
-   socket_t fd = create_socket(address->sa_family, SOCK_STREAM, 0);
91
-   if (fd == INVALID_SOCKET) {
92
-       char msg[256];
93
-       snprintf(msg, sizeof(msg), "Failed to create socket: %s",
94
-            strerror(errno));
95
-       handler->error(msg, ctx);
96
-       return;
97
-   }
98
-
99
-   if (connect(fd, address, address_size) == 0) {
100
-       handler->success(fd, ctx);
101
-       return;
102
-   }
103
-
104
-   const int e = last_socket_error();
105
-   if (!would_block(e)) {
106
-       close_socket(fd);
107
-       char msg[256];
108
-       snprintf(msg, sizeof(msg), "Failed to connect socket: %s",
109
-            strerror(e));
110
-       handler->error(msg, ctx);
111
-       return;
112
-   }
113
-
114
-   struct async_connect *ac = g_new(struct async_connect, 1);
115
-   ac->handler = handler;
116
-   ac->handler_ctx = ctx;
117
-   ac->fd = fd;
118
-
119
-   GIOChannel *channel = g_io_channel_unix_new(fd);
120
-   ac->source_id = g_io_add_watch(channel, G_IO_OUT,
121
-                      async_connect_source_callback, ac);
122
-   g_io_channel_unref(channel);
123
-
124
-   *acp = ac;
125
-}
126
-
127
-void
128
-async_connect_cancel(struct async_connect *ac)
129
-{
130
-   g_source_remove(ac->source_id);
131
-   close_socket(ac->fd);
132
-   g_free(ac);
133
-}
134
ncmpc-0.30.tar.xz/src/net/async_connect.hxx Deleted
58
 
1
@@ -1,56 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#ifndef NET_ASYNC_CONNECT_H
31
-#define NET_ASYNC_CONNECT_H
32
-
33
-#include "socket.hxx"
34
-
35
-#include <stddef.h>
36
-
37
-struct sockaddr;
38
-struct async_connect;
39
-
40
-struct async_connect_handler {
41
-   void (*success)(socket_t fd, void *ctx);
42
-   void (*error)(const char *message, void *ctx);
43
-};
44
-
45
-/**
46
- * Create a socket and connect it to the given address.
47
- */
48
-void
49
-async_connect_start(struct async_connect **acp,
50
-           const struct sockaddr *address,
51
-           size_t address_size,
52
-           const struct async_connect_handler *handler, void *ctx);
53
-
54
-void
55
-async_connect_cancel(struct async_connect *ac);
56
-
57
-#endif
58
ncmpc-0.30.tar.xz/src/net/async_rconnect.cxx Deleted
151
 
1
@@ -1,149 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#include "async_rconnect.hxx"
31
-#include "async_connect.hxx"
32
-#include "resolver.hxx"
33
-#include "../Compiler.h"
34
-
35
-#include <string>
36
-
37
-#include <assert.h>
38
-#include <stdio.h>
39
-#include <string.h>
40
-
41
-struct async_rconnect {
42
-   const struct async_rconnect_handler *handler;
43
-   void *handler_ctx;
44
-
45
-   const char *host;
46
-   struct resolver *resolver;
47
-
48
-   struct async_connect *connect = nullptr;
49
-
50
-   std::string last_error;
51
-
52
-   async_rconnect(const char *_host, struct resolver *_resolver,
53
-              const struct async_rconnect_handler &_handler,
54
-              void *_ctx)
55
-       :handler(&_handler), handler_ctx(_ctx),
56
-        host(_host), resolver(_resolver) {}
57
-
58
-   ~async_rconnect() {
59
-       if (connect != nullptr)
60
-           async_connect_cancel(connect);
61
-       resolver_free(resolver);
62
-   }
63
-};
64
-
65
-static void
66
-async_rconnect_next(struct async_rconnect *rc);
67
-
68
-static void
69
-async_rconnect_success(socket_t fd, void *ctx)
70
-{
71
-   auto *rc = (struct async_rconnect *)ctx;
72
-   rc->connect = nullptr;
73
-
74
-   rc->handler->success(fd, rc->handler_ctx);
75
-
76
-   delete rc;
77
-}
78
-
79
-static void
80
-async_rconnect_error(const char *message, void *ctx)
81
-{
82
-   auto *rc = (struct async_rconnect *)ctx;
83
-   rc->connect = nullptr;
84
-
85
-   rc->last_error = message;
86
-
87
-   async_rconnect_next(rc);
88
-}
89
-
90
-static const struct async_connect_handler async_rconnect_connect_handler = {
91
-   .success = async_rconnect_success,
92
-   .error = async_rconnect_error,
93
-};
94
-
95
-static void
96
-async_rconnect_next(struct async_rconnect *rc)
97
-{
98
-   assert(rc->connect == nullptr);
99
-
100
-   const struct resolver_address *a = resolver_next(rc->resolver);
101
-   if (a == nullptr) {
102
-       char msg[256];
103
-
104
-       if (rc->last_error.empty()) {
105
-           snprintf(msg, sizeof(msg),
106
-                "Host '%s' has no address",
107
-                rc->host);
108
-       } else {
109
-           snprintf(msg, sizeof(msg),
110
-                "Failed to connect to host '%s': %s",
111
-                rc->host, rc->last_error.c_str());
112
-       }
113
-
114
-       rc->handler->error(msg, rc->handler_ctx);
115
-       delete rc;
116
-       return;
117
-   }
118
-
119
-   async_connect_start(&rc->connect, a->addr, a->addrlen,
120
-               &async_rconnect_connect_handler, rc);
121
-}
122
-
123
-void
124
-async_rconnect_start(struct async_rconnect **rcp,
125
-            const char *host, unsigned port,
126
-            const struct async_rconnect_handler *handler, void *ctx)
127
-{
128
-   struct resolver *r = resolver_new(host, port);
129
-   if (host == nullptr)
130
-       host = "[default]";
131
-
132
-   if (r == nullptr) {
133
-       char msg[256];
134
-       snprintf(msg, sizeof(msg), "Failed to resolve host '%s'",
135
-            host);
136
-       handler->error(msg, ctx);
137
-       return;
138
-   }
139
-
140
-   auto *rc = new async_rconnect(host, r, *handler, ctx);
141
-   *rcp = rc;
142
-
143
-   async_rconnect_next(rc);
144
-}
145
-
146
-void
147
-async_rconnect_cancel(struct async_rconnect *rc)
148
-{
149
-   delete rc;
150
-}
151
ncmpc-0.30.tar.xz/src/net/async_rconnect.hxx Deleted
54
 
1
@@ -1,52 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#ifndef NET_ASYNC_RCONNECT_H
31
-#define NET_ASYNC_RCONNECT_H
32
-
33
-#include <mpd/client.h>
34
-
35
-struct async_rconnect;
36
-
37
-struct async_rconnect_handler {
38
-   void (*success)(int fd, void *ctx);
39
-   void (*error)(const char *message, void *ctx);
40
-};
41
-
42
-/**
43
- * Resolve a host name and connect to it asynchronously.
44
- */
45
-void
46
-async_rconnect_start(struct async_rconnect **rcp,
47
-            const char *host, unsigned port,
48
-            const struct async_rconnect_handler *handler, void *ctx);
49
-
50
-void
51
-async_rconnect_cancel(struct async_rconnect *rc);
52
-
53
-#endif
54
ncmpc-0.30.tar.xz/src/net/resolver.cxx Deleted
204
 
1
@@ -1,202 +0,0 @@
2
-/* libmpdclient
3
-   (c) 2003-2018 The Music Player Daemon Project
4
-   This project's homepage is: http://www.musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#include "resolver.hxx"
31
-#include "config.h"
32
-
33
-#include <stdio.h>
34
-#include <stdlib.h>
35
-#include <string.h>
36
-
37
-#ifdef WIN32
38
-#  include <winsock2.h>
39
-#  include <ws2tcpip.h>
40
-#else
41
-#  include <sys/socket.h>
42
-#  include <sys/un.h>
43
-#ifdef ENABLE_TCP
44
-#  include <netinet/in.h>
45
-#  include <arpa/inet.h>
46
-#  include <netdb.h>
47
-#endif
48
-#endif
49
-
50
-struct resolver {
51
-   enum {
52
-       TYPE_ZERO, TYPE_ONE, TYPE_ANY
53
-   } type;
54
-
55
-#ifdef ENABLE_TCP
56
-#ifdef HAVE_GETADDRINFO
57
-   struct addrinfo *ai;
58
-   const struct addrinfo *next;
59
-#else
60
-   struct sockaddr_in sin;
61
-#endif
62
-#endif
63
-
64
-   struct resolver_address current;
65
-
66
-#ifndef WIN32
67
-   struct sockaddr_un saun;
68
-#endif
69
-};
70
-
71
-struct resolver *
72
-resolver_new(const char *host, unsigned port)
73
-{
74
-   struct resolver *resolver = (struct resolver *)malloc(sizeof(*resolver));
75
-   if (resolver == nullptr)
76
-       return nullptr;
77
-
78
-   if (host[0] == '/' || host[0] == '@') {
79
-#ifndef WIN32
80
-       const bool is_abstract = *host == '@';
81
-       /* sun_path must be null-terminated unless it's an abstract
82
-          socket */
83
-       const size_t path_length = strlen(host) + !is_abstract;
84
-       if (path_length > sizeof(resolver->saun.sun_path)) {
85
-           free(resolver);
86
-           return nullptr;
87
-       }
88
-
89
-       resolver->saun.sun_family = AF_UNIX;
90
-       memcpy(resolver->saun.sun_path, host, path_length);
91
-
92
-       if (host[0] == '@')
93
-           /* abstract socket */
94
-           resolver->saun.sun_path[0] = 0;
95
-
96
-       resolver->current.family = PF_UNIX;
97
-       resolver->current.protocol = 0;
98
-       resolver->current.addrlen = sizeof(resolver->saun)
99
-           - sizeof(resolver->saun.sun_path) + path_length;
100
-       resolver->current.addr = (const struct sockaddr *)&resolver->saun;
101
-       resolver->type = resolver::TYPE_ONE;
102
-#else /* WIN32 */
103
-       /* there are no UNIX domain sockets on Windows */
104
-       free(resolver);
105
-       return nullptr;
106
-#endif /* WIN32 */
107
-   } else {
108
-#ifdef ENABLE_TCP
109
-#ifdef HAVE_GETADDRINFO
110
-       struct addrinfo hints;
111
-       char service[20];
112
-       int ret;
113
-
114
-       memset(&hints, 0, sizeof(hints));
115
-       hints.ai_family = PF_UNSPEC;
116
-       hints.ai_socktype = SOCK_STREAM;
117
-       hints.ai_protocol = IPPROTO_TCP;
118
-
119
-       snprintf(service, sizeof(service), "%d", port);
120
-
121
-       ret = getaddrinfo(host, service, &hints, &resolver->ai);
122
-       if (ret != 0) {
123
-           free(resolver);
124
-           return nullptr;
125
-       }
126
-
127
-       resolver->next = resolver->ai;
128
-       resolver->type = resolver::TYPE_ANY;
129
-#else
130
-       const struct hostent *he;
131
-
132
-       he = gethostbyname(host);
133
-       if (he == nullptr) {
134
-           free(resolver);
135
-           return nullptr;
136
-       }
137
-
138
-       if (he->h_addrtype != AF_INET) {
139
-           free(resolver);
140
-           return nullptr;
141
-       }
142
-
143
-
144
-       memset(&resolver->sin, 0, sizeof(resolver->sin));
145
-       resolver->sin.sin_family = AF_INET;
146
-       resolver->sin.sin_port = htons(port);
147
-       memcpy((char *)&resolver->sin.sin_addr.s_addr,
148
-              (char *)he->h_addr, he->h_length);
149
-
150
-       resolver->current.family = PF_INET;
151
-       resolver->current.protocol = 0;
152
-       resolver->current.addrlen = sizeof(resolver->sin);
153
-       resolver->current.addr = (const struct sockaddr *)&resolver->sin;
154
-
155
-       resolver->type = TYPE_ONE;
156
-#endif
157
-#else /* !ENABLE_TCP */
158
-       (void)port;
159
-       free(resolver);
160
-       return nullptr;
161
-#endif
162
-   }
163
-
164
-   return resolver;
165
-}
166
-
167
-void
168
-resolver_free(struct resolver *resolver)
169
-{
170
-#if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO)
171
-   if (resolver->type == resolver::TYPE_ANY)
172
-       freeaddrinfo(resolver->ai);
173
-#endif
174
-   free(resolver);
175
-}
176
-
177
-const struct resolver_address *
178
-resolver_next(struct resolver *resolver)
179
-{
180
-   if (resolver->type == resolver::TYPE_ZERO)
181
-       return nullptr;
182
-
183
-   if (resolver->type == resolver::TYPE_ONE) {
184
-       resolver->type = resolver::TYPE_ZERO;
185
-       return &resolver->current;
186
-   }
187
-
188
-#if defined(ENABLE_TCP) && defined(HAVE_GETADDRINFO)
189
-   if (resolver->next == nullptr)
190
-       return nullptr;
191
-
192
-   resolver->current.family = resolver->next->ai_family;
193
-   resolver->current.protocol = resolver->next->ai_protocol;
194
-   resolver->current.addrlen = resolver->next->ai_addrlen;
195
-   resolver->current.addr = resolver->next->ai_addr;
196
-
197
-   resolver->next = resolver->next->ai_next;
198
-
199
-   return &resolver->current;
200
-#else
201
-   return nullptr;
202
-#endif
203
-}
204
ncmpc-0.30.tar.xz/src/net/resolver.hxx Deleted
54
 
1
@@ -1,52 +0,0 @@
2
-/* libmpdclient
3
-   (c) 2003-2018 The Music Player Daemon Project
4
-   This project's homepage is: http://www.musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#ifndef LIBMPDCLIENT_RESOLVER_H
31
-#define LIBMPDCLIENT_RESOLVER_H
32
-
33
-#include <stddef.h>
34
-
35
-struct resolver;
36
-
37
-struct resolver_address {
38
-   int family;
39
-   int protocol;
40
-   size_t addrlen;
41
-   const struct sockaddr *addr;
42
-};
43
-
44
-struct resolver *
45
-resolver_new(const char *host, unsigned port);
46
-
47
-void
48
-resolver_free(struct resolver *resolver);
49
-
50
-const struct resolver_address *
51
-resolver_next(struct resolver *resolver);
52
-
53
-#endif
54
ncmpc-0.30.tar.xz/src/net/socket.cxx Deleted
78
 
1
@@ -1,76 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#include "socket.hxx"
31
-
32
-#ifndef WIN32
33
-#include <fcntl.h>
34
-#endif
35
-
36
-static void
37
-socket_set_cloexec(socket_t fd)
38
-{
39
-#ifndef WIN32
40
-   fcntl(fd, F_SETFD, FD_CLOEXEC);
41
-#else
42
-   (void)fd;
43
-#endif
44
-}
45
-
46
-static void
47
-socket_set_nonblock(socket_t fd)
48
-{
49
-#ifdef WIN32
50
-   u_long val = 1;
51
-   ioctlsocket(fd, FIONBIO, &val);
52
-#else
53
-   int flags = fcntl(fd, F_GETFL);
54
-   if (flags >= 0)
55
-       fcntl(fd, F_SETFL, flags | O_NONBLOCK);
56
-#endif
57
-}
58
-
59
-socket_t
60
-create_socket(int domain, int type, int protocol)
61
-{
62
-   socket_t fd;
63
-
64
-#if defined(SOCK_CLOEXEC) && defined(SOCK_NONBLOCK)
65
-   fd = socket(domain, type | SOCK_CLOEXEC | SOCK_NONBLOCK, protocol);
66
-   if (fd != INVALID_SOCKET || errno != EINVAL)
67
-       return fd;
68
-#endif
69
-
70
-   fd = socket(domain, type, protocol);
71
-   if (fd != INVALID_SOCKET) {
72
-       socket_set_cloexec(fd);
73
-       socket_set_nonblock(fd);
74
-   }
75
-
76
-   return fd;
77
-}
78
ncmpc-0.30.tar.xz/src/net/socket.hxx Deleted
75
 
1
@@ -1,73 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#ifndef NET_SOCKET_H
31
-#define NET_SOCKET_H
32
-
33
-#include "types.hxx"
34
-
35
-#ifndef WIN32
36
-#include <errno.h>
37
-#include <unistd.h>
38
-#include <sys/socket.h>
39
-#endif
40
-
41
-socket_t
42
-create_socket(int domain, int type, int protocol);
43
-
44
-static inline void
45
-close_socket(socket_t s)
46
-{
47
-#ifdef WIN32
48
-   closesocket(s);
49
-#else
50
-   close(s);
51
-#endif
52
-}
53
-
54
-static inline int
55
-last_socket_error()
56
-{
57
-#ifdef WIN32
58
-   return WSAGetLastError();
59
-#else
60
-   return errno;
61
-#endif
62
-}
63
-
64
-static inline bool
65
-would_block(int e)
66
-{
67
-#ifdef WIN32
68
-   return e == WSAEINPROGRESS || e == WSAEWOULDBLOCK;
69
-#else
70
-   return e == EINPROGRESS || e == EAGAIN;
71
-#endif
72
-}
73
-
74
-#endif
75
ncmpc-0.30.tar.xz/src/net/types.hxx Deleted
46
 
1
@@ -1,44 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
-   (c) 2004-2018 The Music Player Daemon Project
4
-   Project homepage: http://musicpd.org
5
-
6
-   Redistribution and use in source and binary forms, with or without
7
-   modification, are permitted provided that the following conditions
8
-   are met:
9
-
10
-   - Redistributions of source code must retain the above copyright
11
-   notice, this list of conditions and the following disclaimer.
12
-
13
-   - Redistributions in binary form must reproduce the above copyright
14
-   notice, this list of conditions and the following disclaimer in the
15
-   documentation and/or other materials provided with the distribution.
16
-
17
-   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
-   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
-   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
-   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
-   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
-   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
-   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
-   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
-   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
-   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
-   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
-*/
29
-
30
-#ifndef NET_TYPES_H
31
-#define NET_TYPES_H
32
-
33
-#ifdef WIN32
34
-
35
-#include <winsock2.h>
36
-typedef SOCKET socket_t;
37
-
38
-#else
39
-
40
-typedef int socket_t;
41
-#define INVALID_SOCKET -1
42
-
43
-#endif
44
-
45
-#endif
46
ncmpc-0.30.tar.xz/src/options.cxx Deleted
347
 
1
@@ -1,345 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#include "options.hxx"
22
-#include "config.h"
23
-#include "charset.hxx"
24
-#include "command.hxx"
25
-#include "conf.hxx"
26
-#include "i18n.h"
27
-
28
-#include <stdlib.h>
29
-#include <stdio.h>
30
-#include <string.h>
31
-#include <glib.h>
32
-
33
-#define ERROR_UNKNOWN_OPTION    0x01
34
-#define ERROR_BAD_ARGUMENT      0x02
35
-#define ERROR_GOT_ARGUMENT      0x03
36
-#define ERROR_MISSING_ARGUMENT  0x04
37
-
38
-typedef struct {
39
-   int shortopt;
40
-   const char *longopt;
41
-   const char *argument;
42
-   const char *descrition;
43
-} arg_opt_t;
44
-
45
-
46
-typedef void (*option_callback_fn_t)(int c, const char *arg);
47
-
48
-
49
-options_t options;
50
-
51
-static const arg_opt_t option_table[] = {
52
-   { '?', "help", nullptr, "Show this help message" },
53
-   { 'V', "version", nullptr, "Display version information" },
54
-   { 'c', "colors", nullptr, "Enable colors" },
55
-   { 'C', "no-colors", nullptr, "Disable colors" },
56
-#ifdef HAVE_GETMOUSE
57
-   { 'm', "mouse", nullptr, "Enable mouse" },
58
-   { 'M', "no-mouse", nullptr, "Disable mouse" },
59
-#endif
60
-   { 'e', "exit", nullptr, "Exit on connection errors" },
61
-   { 'p', "port", "PORT", "Connect to server on port" },
62
-   { 'h', "host", "HOST", "Connect to server on host" },
63
-   { 'P', "password","PASSWORD", "Connect with password" },
64
-   { 'f', "config", "FILE", "Read configuration from file" },
65
-   { 'k', "key-file","FILE", "Read key bindings from file" },
66
-#ifndef NDEBUG
67
-   { 'K', "dump-keys", nullptr, "Dump key bindings to stdout" },
68
-#endif
69
-};
70
-
71
-static const unsigned option_table_size = sizeof(option_table) / sizeof(option_table[0]);
72
-
73
-static const arg_opt_t *
74
-lookup_option(int s, char *l)
75
-{
76
-   unsigned i;
77
-
78
-   for (i = 0; i < option_table_size; ++i) {
79
-       if (l && strcmp(l, option_table[i].longopt) == 0)
80
-           return &option_table[i];
81
-       if (s && s == option_table[i].shortopt)
82
-           return &option_table[i];
83
-   }
84
-
85
-   return nullptr;
86
-}
87
-
88
-static void
89
-option_error(int error, const char *option, const char *arg)
90
-{
91
-   switch (error) {
92
-   case ERROR_UNKNOWN_OPTION:
93
-       fprintf(stderr, PACKAGE ": invalid option %s\n", option);
94
-       break;
95
-   case ERROR_BAD_ARGUMENT:
96
-       fprintf(stderr, PACKAGE ": bad argument: %s\n", option);
97
-       break;
98
-   case ERROR_GOT_ARGUMENT:
99
-       fprintf(stderr, PACKAGE ": invalid option %s=%s\n", option, arg);
100
-       break;
101
-   case ERROR_MISSING_ARGUMENT:
102
-       fprintf(stderr, PACKAGE ": missing value for %s option\n", option);
103
-       break;
104
-   default:
105
-       fprintf(stderr, PACKAGE ": internal error %d\n", error);
106
-       break;
107
-   }
108
-
109
-   exit(EXIT_FAILURE);
110
-}
111
-
112
-static void
113
-display_help()
114
-{
115
-   printf("Usage: %s [OPTION]...\n", PACKAGE);
116
-
117
-   for (unsigned i = 0; i < option_table_size; ++i) {
118
-       char tmp[32];
119
-
120
-       if (option_table[i].argument)
121
-           snprintf(tmp, sizeof(tmp), "%s=%s",
122
-                option_table[i].longopt,
123
-                option_table[i].argument);
124
-       else
125
-           g_strlcpy(tmp, option_table[i].longopt, 64);
126
-
127
-       printf("  -%c, --%-20s %s\n",
128
-              option_table[i].shortopt,
129
-              tmp,
130
-              option_table[i].descrition);
131
-   }
132
-}
133
-
134
-static void
135
-handle_option(int c, const char *arg)
136
-{
137
-   switch (c) {
138
-   case '?': /* --help */
139
-       display_help();
140
-       exit(EXIT_SUCCESS);
141
-   case 'V': /* --version */
142
-       puts(PACKAGE " version: " VERSION "\n"
143
-            "build options:"
144
-#ifdef NCMPC_MINI
145
-            " mini"
146
-#endif
147
-#ifndef NDEBUG
148
-            " debug"
149
-#endif
150
-#ifdef ENABLE_MULTIBYTE
151
-            " multibyte"
152
-#endif
153
-#ifdef HAVE_CURSES_ENHANCED
154
-            " wide"
155
-#endif
156
-#ifdef ENABLE_LOCALE
157
-            " locale"
158
-#endif
159
-#ifdef ENABLE_NLS
160
-            " nls"
161
-#endif
162
-#ifdef ENABLE_COLORS
163
-            " colors"
164
-#else
165
-            " no-colors"
166
-#endif
167
-#ifdef ENABLE_LIRC
168
-            " lirc"
169
-#endif
170
-#ifdef HAVE_GETMOUSE
171
-            " getmouse"
172
-#endif
173
-#ifdef ENABLE_ARTIST_SCREEN
174
-            " artist-screen"
175
-#endif
176
-#ifdef ENABLE_HELP_SCREEN
177
-            " help-screen"
178
-#endif
179
-#ifdef ENABLE_SEARCH_SCREEN
180
-            " search-screen"
181
-#endif
182
-#ifdef ENABLE_SONG_SCREEN
183
-            " song-screen"
184
-#endif
185
-#ifdef ENABLE_KEYDEF_SCREEN
186
-            " key-screen"
187
-#endif
188
-#ifdef ENABLE_LYRICS_SCREEN
189
-            " lyrics-screen"
190
-#endif
191
-#ifdef ENABLE_OUTPUTS_SCREEN
192
-            " outputs-screen"
193
-#endif
194
-#ifdef ENABLE_CHAT_SCREEN
195
-            " chat-screen"
196
-#endif
197
-
198
-            "\n");
199
-#ifndef NCMPC_MINI
200
-       {
201
-           char *user_conf = build_user_conf_filename();
202
-           char *system_conf = build_system_conf_filename();
203
-
204
-           printf("configuration files:\n %s\n %s\n\n",
205
-                  user_conf, system_conf);
206
-
207
-           g_free(user_conf);
208
-           g_free(system_conf);
209
-       }
210
-       if (strcmp("translator-credits", _("translator-credits")) != 0)
211
-           /* To translators: these credits are shown
212
-              when ncmpc is started with "--version" */
213
-           printf("\n%s\n", _("translator-credits"));
214
-#endif
215
-       exit(EXIT_SUCCESS);
216
-   case 'c': /* --colors */
217
-#ifdef ENABLE_COLORS
218
-       options.enable_colors = true;
219
-#endif
220
-       break;
221
-   case 'C': /* --no-colors */
222
-#ifdef ENABLE_COLORS
223
-       options.enable_colors = false;
224
-#endif
225
-       break;
226
-   case 'm': /* --mouse */
227
-#ifdef HAVE_GETMOUSE
228
-       options.enable_mouse = true;
229
-#endif
230
-       break;
231
-   case 'M': /* --no-mouse */
232
-#ifdef HAVE_GETMOUSE
233
-       options.enable_mouse = false;
234
-#endif
235
-       break;
236
-   case 'e': /* --exit */
237
-       /* deprecated */
238
-       break;
239
-   case 'p': /* --port */
240
-       options.port = atoi(arg);
241
-       break;
242
-   case 'h': /* --host */
243
-       options.host = arg;
244
-       break;
245
-   case 'P': /* --password */
246
-       options.password = LocaleToUtf8(arg).c_str();
247
-       break;
248
-   case 'f': /* --config */
249
-       options.config_file = arg;
250
-       break;
251
-   case 'k': /* --key-file */
252
-       options.key_file = arg;
253
-       break;
254
-#if !defined(NDEBUG) && !defined(NCMPC_MINI)
255
-   case 'K': /* --dump-keys */
256
-       read_configuration();
257
-       write_key_bindings(stdout, KEYDEF_WRITE_ALL | KEYDEF_COMMENT_ALL);
258
-       exit(EXIT_SUCCESS);
259
-       break;
260
-#endif
261
-   default:
262
-       fprintf(stderr,"Unknown Option %c = %s\n", c, arg);
263
-       break;
264
-   }
265
-}
266
-
267
-void
268
-options_parse(int argc, const char *argv[])
269
-{
270
-   const arg_opt_t *opt = nullptr;
271
-   option_callback_fn_t option_cb = handle_option;
272
-
273
-   for (int i = 1; i < argc; i++) {
274
-       const char *arg = argv[i];
275
-       size_t len = strlen(arg);
276
-
277
-       /* check for a long option */
278
-       if (g_str_has_prefix(arg, "--")) {
279
-           char *name, *value;
280
-
281
-           /* make sure we got an argument for the previous option */
282
-           if( opt && opt->argument )
283
-               option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument);
284
-
285
-           /* retrieve a option argument */
286
-           if ((value=g_strrstr(arg+2, "="))) {
287
-               *value = '\0';
288
-               name = g_strdup(arg);
289
-               *value = '=';
290
-               value++;
291
-           } else
292
-               name = g_strdup(arg);
293
-
294
-           /* check if the option exists */
295
-           if( (opt=lookup_option(0, name+2)) == nullptr )
296
-               option_error(ERROR_UNKNOWN_OPTION, name, nullptr);
297
-           g_free(name);
298
-
299
-           /* abort if we got an argument to the option and don't want one */
300
-           if( value && opt->argument==nullptr )
301
-               option_error(ERROR_GOT_ARGUMENT, arg, value);
302
-
303
-           /* execute option callback */
304
-           if (value || opt->argument==nullptr) {
305
-               option_cb (opt->shortopt, value);
306
-               opt = nullptr;
307
-           }
308
-       }
309
-       /* check for short options */
310
-       else if (len>=2 && g_str_has_prefix(arg, "-")) {
311
-           size_t j;
312
-
313
-           for(j=1; j<len; j++) {
314
-               /* make sure we got an argument for the previous option */
315
-               if (opt && opt->argument)
316
-                   option_error(ERROR_MISSING_ARGUMENT,
317
-                            opt->longopt, opt->argument);
318
-
319
-               /* check if the option exists */
320
-               if ((opt=lookup_option(arg[j], nullptr)) == nullptr)
321
-                   option_error(ERROR_UNKNOWN_OPTION, arg, nullptr);
322
-
323
-               /* if no option argument is needed execute callback */
324
-               if (opt->argument == nullptr) {
325
-                   option_cb (opt->shortopt, nullptr);
326
-                   opt = nullptr;
327
-               }
328
-           }
329
-       } else {
330
-           /* is this a option argument? */
331
-           if (opt && opt->argument) {
332
-               option_cb (opt->shortopt, arg);
333
-               opt = nullptr;
334
-           } else
335
-               option_error(ERROR_BAD_ARGUMENT, arg, nullptr);
336
-       }
337
-   }
338
-
339
-   if (opt && opt->argument == nullptr)
340
-       option_cb (opt->shortopt, nullptr);
341
-   else if (opt && opt->argument)
342
-       option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument);
343
-
344
-   if (options.host.empty() && getenv("MPD_HOST"))
345
-       options.host = getenv("MPD_HOST");
346
-}
347
ncmpc-0.30.tar.xz/src/options.hxx Deleted
96
 
1
@@ -1,94 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef OPTIONS_H
22
-#define OPTIONS_H
23
-
24
-#include "config.h"
25
-#include "defaults.hxx"
26
-
27
-#include <vector>
28
-#include <string>
29
-#include <chrono>
30
-
31
-typedef struct {
32
-   std::string host;
33
-   std::string password;
34
-   std::string config_file;
35
-   std::string key_file;
36
-   std::string list_format = DEFAULT_LIST_FORMAT;
37
-   std::string search_format;
38
-   std::string status_format = DEFAULT_STATUS_FORMAT;
39
-#ifndef NCMPC_MINI
40
-   std::string xterm_title_format;
41
-   std::string scroll_sep = DEFAULT_SCROLL_SEP;
42
-#endif
43
-   std::vector<std::string> screen_list = DEFAULT_SCREEN_LIST;
44
-   bool display_remaining_time;
45
-   int port;
46
-   int timeout_ms = 0;
47
-   int crossfade_time = DEFAULT_CROSSFADE_TIME;
48
-   int search_mode;
49
-   int hide_cursor;
50
-   int seek_time = 1;
51
-#ifdef ENABLE_LYRICS_SCREEN
52
-   int lyrics_timeout = DEFAULT_LYRICS_TIMEOUT;
53
-   bool lyrics_autosave = false;
54
-   bool lyrics_show_plugin = false;
55
-   std::string text_editor;
56
-   bool text_editor_ask = false;
57
-#endif
58
-#ifdef ENABLE_CHAT_SCREEN
59
-   std::string chat_prefix;
60
-#endif
61
-   bool find_wrap = true;
62
-   bool find_show_last_pattern;
63
-   bool list_wrap;
64
-   int scroll_offset = 0;
65
-   bool auto_center;
66
-   bool wide_cursor = true;
67
-   bool hardware_cursor;
68
-
69
-#ifdef ENABLE_COLORS
70
-   bool enable_colors;
71
-#endif
72
-   bool audible_bell = true;
73
-   bool visible_bell;
74
-   bool bell_on_wrap = true;
75
-   std::chrono::seconds status_message_time = std::chrono::seconds(3);
76
-#ifndef NCMPC_MINI
77
-   bool enable_xterm_title;
78
-#endif
79
-#ifdef HAVE_GETMOUSE
80
-   bool enable_mouse;
81
-#endif
82
-#ifndef NCMPC_MINI
83
-   bool scroll = DEFAULT_SCROLL;
84
-   bool visible_bitrate;
85
-   bool welcome_screen_list = true;
86
-   bool jump_prefix_only = true;
87
-   bool second_column = true;
88
-#endif
89
-} options_t;
90
-
91
-extern options_t options;
92
-
93
-void options_parse(int argc, const char **argv);
94
-
95
-#endif
96
ncmpc-0.30.tar.xz/src/screen_interface.hxx Deleted
37
 
1
@@ -1,35 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef NCMPC_SCREEN_INTERFACE_H
22
-#define NCMPC_SCREEN_INTERFACE_H
23
-
24
-#include "config.h"
25
-#include "ncmpc_curses.h"
26
-#include "Size.hxx"
27
-
28
-class Page;
29
-class ScreenManager;
30
-
31
-struct screen_functions {
32
-   const char *name;
33
-   Page *(*init)(ScreenManager &screen, WINDOW *w, Size size);
34
-};
35
-
36
-#endif
37
ncmpc-0.30.tar.xz/src/signals.hxx Deleted
50
 
1
@@ -1,48 +0,0 @@
2
-/* ncmpc (Ncurses MPD Client)
3
- * (c) 2004-2018 The Music Player Daemon Project
4
- * Project homepage: http://musicpd.org
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * This program is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License along
17
- * with this program; if not, write to the Free Software Foundation, Inc.,
18
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
- */
20
-
21
-#ifndef SIGNALS_H
22
-#define SIGNALS_H
23
-
24
-typedef struct _GMainLoop GMainLoop;
25
-class ScreenManager;
26
-
27
-#ifdef WIN32
28
-
29
-static inline void
30
-signals_init(GMainLoop *, ScreenManager &)
31
-{
32
-}
33
-
34
-static inline void
35
-signals_deinit()
36
-{
37
-}
38
-
39
-#else
40
-
41
-void
42
-signals_init(GMainLoop *main_loop, ScreenManager &screen);
43
-
44
-void
45
-signals_deinit();
46
-
47
-#endif
48
-
49
-#endif
50
ncmpc-0.30.tar.xz/NEWS -> ncmpc-0.32.tar.xz/NEWS Changed
27
 
1
@@ -1,3 +1,25 @@
2
+ncmpc 0.32 - (2018-10-05)
3
+* fix crash bug on queue page
4
+* fix crash bug on lyrics page
5
+* fix off-by-one buffer overflow bug
6
+* fix manpage installation directory
7
+* fix build breakages with some ncurses builds
8
+* work around GCC 4.9 build failure
9
+* remove doxygen support
10
+* new dependency: Boost
11
+* remove dependency on GLib
12
+
13
+ncmpc 0.31 - (2018-09-19)
14
+* fix "No such song" in search screen
15
+* fix progressbar when colors are disabled
16
+* enable colors by default
17
+* allow configuring per-style background colors
18
+* keep current song in xterm title when MPD is paused
19
+* load configuration from $XDG_CONFIG_HOME/ncmpc/config
20
+* always show the screen list at the top
21
+* fix memory leak
22
+* require MPD 0.19
23
+
24
 ncmpc 0.30 - (2018-04-04)
25
 * fix crash after pressing ^W in search screen
26
 * fix crash bug in chat screen
27
ncmpc-0.30.tar.xz/README.rst -> ncmpc-0.32.tar.xz/README.rst Changed
64
 
1
@@ -4,6 +4,9 @@
2
 ncmpc is a curses client for the `Music Player Daemon
3
 <http://www.musicpd.org/>`__.
4
 
5
+.. image:: https://www.musicpd.org/clients/ncmpc/screenshot.png
6
+  :alt: Screenshot of ncmpc
7
+
8
 
9
 How to compile and install ncmpc
10
 --------------------------------
11
@@ -11,12 +14,21 @@
12
 You need:
13
 
14
 - a C++14 compliant compiler (e.g. gcc or clang)
15
-- libmpdclient 2.9
16
-- `GLib 2.30 <https://developer.gnome.org/glib/>`__
17
+- `libmpdclient <https://www.musicpd.org/libs/libmpdclient/>`__ 2.9
18
+- `Boost 1.62 <https://www.boost.org/>`__
19
 - `ncurses <https://www.gnu.org/software/ncurses/>`__
20
-- `Meson 0.37 <http://mesonbuild.com/>`__ and `Ninja <https://ninja-build.org/>`__
21
+- `Meson 0.47 <http://mesonbuild.com/>`__ and `Ninja <https://ninja-build.org/>`__
22
+
23
+Optional:
24
+
25
+- `PCRE <https://www.pcre.org/>`__ (for regular expression support in
26
+  the "find" command)
27
+- `liblirc <https://sourceforge.net/projects/lirc/>`__ (for infrared
28
+  remote support)
29
+- `Sphinx <http://www.sphinx-doc.org/en/master/>`__ (for building
30
+  documentation)
31
 
32
-Run ``meson``:
33
+Run ``meson``::
34
 
35
  meson . output
36
 
37
@@ -26,24 +38,12 @@
38
  ninja -C output install
39
 
40
 
41
-Usage
42
------
43
-
44
-ncmpc connects to a MPD running on a machine on the local network. 
45
-By default, ncmpc  connects  to  localhost:6600.   This  can  be
46
-changed  either  at  compile-time,  or  by  exporting  the MPD_HOST and
47
-MPD_PORT environment variables, or by the command line options ``--host``
48
-and ``--port``::
49
-
50
- ncmpc --host=musicserver --port=44000
51
-
52
-For more information please view ncmpc's manual page.
53
-
54
-
55
 Links
56
 -----
57
 
58
 - `Home page and download <http://www.musicpd.org/clients/ncmpc/>`__
59
+- `Documentation <https://www.musicpd.org/doc/ncmpc/html/>`__
60
 - `git repository <https://github.com/MusicPlayerDaemon/ncmpc/>`__
61
 - `Bug tracker <https://github.com/MusicPlayerDaemon/ncmpc/issues>`__
62
+- `Help translate ncmpc to your native language <https://hosted.weblate.org/projects/ncmpc/>`__
63
 - `Forum <http://forum.musicpd.org/>`__
64
ncmpc-0.30.tar.xz/build/configure.py -> ncmpc-0.32.tar.xz/build/configure.py Changed
74
 
1
@@ -16,14 +16,50 @@
2
         ],
3
     },
4
 
5
+    'clang': {
6
+        'options': [
7
+            '-Dcurses=ncursesw',
8
+            '-Dmouse=true',
9
+            '-Dlirc=true',
10
+            '-Dlyrics_screen=true',
11
+            '-Dchat_screen=true',
12
+            '-Ddocumentation=false',
13
+        ],
14
+        'env': {
15
+            'CC': 'clang',
16
+            'CXX': 'clang++',
17
+            'LDFLAGS': '-fuse-ld=lld',
18
+        },
19
+    },
20
+
21
     'release': {
22
         'options': [
23
-            '--buildtype', 'release',
24
+            '--buildtype', 'debugoptimized',
25
+            '-Db_ndebug=true',
26
+            '-Db_lto=true',
27
+            '-Dcurses=ncursesw',
28
+            '-Dmouse=true',
29
+            '-Ddocumentation=false',
30
+        ],
31
+        'env': {
32
+            'LDFLAGS': '-fuse-ld=gold -Wl,--gc-sections,--icf=all',
33
+        },
34
+    },
35
+
36
+    'llvm': {
37
+        'options': [
38
+            '--buildtype', 'debugoptimized',
39
             '-Db_ndebug=true',
40
             '-Db_lto=true',
41
             '-Dcurses=ncursesw',
42
             '-Dmouse=true',
43
+            '-Ddocumentation=false',
44
         ],
45
+        'env': {
46
+            'CC': 'clang',
47
+            'CXX': 'clang++',
48
+            'LDFLAGS': '-fuse-ld=lld',
49
+        },
50
     },
51
 
52
     'mini': {
53
@@ -33,7 +69,7 @@
54
             '-Db_lto=true',
55
             '-Dlirc=false',
56
             '-Dcurses=ncurses',
57
-            '-Dcolor=false',
58
+            '-Dcolors=false',
59
             '-Dmouse=false',
60
             '-Dmultibyte=false',
61
             '-Dlocale=false',
62
@@ -41,7 +77,11 @@
63
             '-Dtcp=false',
64
             '-Dasync_connect=false',
65
             '-Dmini=true',
66
+            '-Ddocumentation=false',
67
         ],
68
+        'env': {
69
+            'LDFLAGS': '-fuse-ld=gold -Wl,--gc-sections,--icf=all',
70
+        },
71
     },
72
 }
73
 
74
ncmpc-0.30.tar.xz/doc/conf.py -> ncmpc-0.32.tar.xz/doc/conf.py Changed
10
 
1
@@ -38,7 +38,7 @@
2
 # built documents.
3
 #
4
 # The short X.Y version.
5
-version = '0.30'
6
+version = '0.32'
7
 # The full version, including alpha/beta/rc tags.
8
 release = version
9
 
10
ncmpc-0.30.tar.xz/doc/config.sample -> ncmpc-0.32.tar.xz/doc/config.sample Changed
43
 
1
@@ -1,5 +1,5 @@
2
 ##
3
-## Configuration file for ncmpc (~/.ncmpc/config)
4
+## Configuration file for ncmpc (~/.config/ncmpc/config)
5
 ##
6
 
7
 ############## Connection ###################
8
@@ -57,7 +57,7 @@
9
 #seek-time = 1
10
 
11
 ############## Display ######################
12
-## Show a list of the screens in the top line on startup.
13
+## Show a list of the screens in the top line.
14
 #welcome-screen-list = yes
15
 
16
 ## Make the cursor as wide as the screen.
17
@@ -77,13 +77,13 @@
18
 
19
 ## list-format
20
 ## The format used to display songs in the main window.
21
-#list-format = "%name%|[%artist% - ]%title%|%file%"
22
+#list-format = "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]"
23
 
24
 ## The format used to display songs in the search window.
25
-#search-format = "%name%|[%artist% - ]%title%|%file%"
26
+#search-format = "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]"
27
 
28
 ## The format used to display songs on the status line.
29
-#status-format = "[%artist% - ]%title%|%shortfile%"
30
+#status-format = "[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]"
31
 
32
 ## The time, in seconds, for which status messages will be displayed.
33
 #status-message-time = 3
34
@@ -99,7 +99,7 @@
35
 #set-xterm-title = no
36
 
37
 ## The format used to for the xterm title when ncmpc is playing.
38
-#xterm-title-format = "ncmpc: [ %name%|[%artist% - ]%title%|%file%]"
39
+#xterm-title-format = "ncmpc: [%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]]"
40
 
41
 ## Automatically save the lyrics after receiving them.
42
 #lyrics-autosave = no
43
ncmpc-0.30.tar.xz/doc/index.rst -> ncmpc-0.32.tar.xz/doc/index.rst Changed
116
 
1
@@ -79,8 +79,9 @@
2
 -------------
3
 
4
 When ncmpc starts it tries to read the user's configuration file,
5
-:file:`~/.ncmpc/config`.  If no user configuration file is found then
6
-ncmpc tries to load the global settings from
7
+:file:`$XDG_CONFIG_HOME/ncmpc/config` (usually
8
+:file:`~/.config/ncmpc/config`).  If no user configuration file is
9
+found then ncmpc tries to load the global settings from
10
 :file:`$SYSCONFDIR/ncmpc/config` (the actual path is displayed in the
11
 output of the :option:`--version` option).  An example configuration
12
 file (:file:`config.sample`) is shipped with ncmpc.
13
@@ -172,7 +173,7 @@
14
 ^^^^^^^
15
 
16
 :command:`welcome-screen-list = yes|no` - Show a list of the screens
17
-in the top line on startup.
18
+in the top line.
19
 
20
 :command:`wide-cursor = yes|no` - Make the cursor as wide as the
21
 screen.
22
@@ -209,7 +210,7 @@
23
 elapsed.
24
 
25
 :command:`visible-bitrate = yes|no` - Show the bitrate in the status
26
-bar when playing a stream.  :command:`
27
+bar when playing a stream.
28
 
29
 :command:`set-xterm-title = yes|no` - Change the XTerm title (ncmpc
30
 will not restore the title).
31
@@ -221,18 +222,54 @@
32
 Colors
33
 ^^^^^^
34
 
35
-:command:`enable-colors = yes|no` - Enable/disable colors.
36
+:command:`enable-colors = yes|no` - Enable/disable colors.  Defaults
37
+to ``yes``.
38
 
39
-:command:`color background = COLOR` - Set the background color. If the
40
-background color is assigned to the keyword ":samp:`none`", ncmpc will
41
-not change the background color.  Standard colors are: black, red,
42
-green, yellow, blue, magenta, cyan and white.  Terminal specific
43
-colors can also be given as integers.
44
+The colors used by `ncmpc` can be customized.  The ``color`` directive
45
+can be used to change how a certain style looks.  It can contain a
46
+text color and attributes.  The following standard colors can be
47
+specified by name (`official reference
48
+<https://invisible-island.net/ncurses/man/curs_color.3x.html>`__):
49
+
50
+ ``black``, ``red``, ``green``, ``yellow``, ``blue``, ``magenta``,
51
+ ``cyan``, ``white``
52
+
53
+Example::
54
+
55
+  color list = cyan
56
+
57
+Modern terminals support up to 256 colors, but they are not
58
+standardized.  You can select them by specifying the number.
59
+Example::
60
+
61
+  color title = 42
62
+
63
+The background color can be specified after the text color separated
64
+by a slash.  You can omit the text color if you want to change only
65
+the background color::
66
+
67
+  color title = white/blue
68
+  color title = /blue
69
+
70
+The color ``none`` uses the terminal's default color.
71
+
72
+Attributes can be used to modify the font appearance.  The following
73
+attributes can be specified (`official reference
74
+<https://invisible-island.net/ncurses/man/curs_attr.3x.html>`__),
75
+though many of them are not supported by prevalent terminals:
76
+
77
+ ``standout``, ``underline``, ``reverse``, ``blink``, ``dim``,
78
+ ``bold``
79
+
80
+Example::
81
+
82
+  color alert = red blink
83
+
84
+:command:`color background = COLOR` - Set the default background
85
+color.
86
 
87
 :command:`color title = COLOR[,ATTRIBUTE]...` - Set the text color and
88
-attributes for the title row.  Text colors are the same as for the
89
-background. Valid attributes are: standout, underline, reverse, blink,
90
-dim, and bold.
91
+attributes for the title row.
92
 
93
 :command:`color title-bold = COLOR[,ATTRIBUTE]...` - Set the text
94
 color for the title row (the bold part).
95
@@ -258,7 +295,7 @@
96
 :command:`color progressbar = COLOR[,ATTRIBUTE]...` - Set the color of
97
 the progress indicator.
98
 
99
-:command:`color progressbar = COLOR[,ATTRIBUTE]...` - Set the color of
100
+:command:`color progressbar-background = COLOR[,ATTRIBUTE]...` - Set the color of
101
 the progress indicator background.
102
 
103
 :command:`color status-state = COLOR[,ATTRIBUTE]...` - Set the text
104
@@ -283,8 +320,9 @@
105
 ----
106
 
107
 When ncmpc starts it tries to read user-defined key bindings from the
108
-:file:`~/.ncmpc/keys` file.  If no user-defined key bindings are found
109
-then ncmpc tries to load the global key bindings from
110
+:file:`$XDG_CONFIG_HOME/ncmpc/keys` (usually
111
+:file:`~/.config/ncmpc/keys`) file.  If no user-defined key bindings
112
+are found then ncmpc tries to load the global key bindings from
113
 :file:`$SYSCONFDIR/ncmpc/keys` (the actual path is displayed on the
114
 help screen).
115
 
116
ncmpc-0.30.tar.xz/doc/keys.sample -> ncmpc-0.32.tar.xz/doc/keys.sample Changed
8
 
1
@@ -1,5 +1,5 @@
2
 ##
3
-## Key bindings for ncmpc (~/.ncmpc/keys)
4
+## Key bindings for ncmpc (~/.config/ncmpc/keys)
5
 ## 
6
 ##
7
 ## Its possible to bind maximum three keys to a command
8
ncmpc-0.30.tar.xz/doc/meson.build -> ncmpc-0.32.tar.xz/doc/meson.build Changed
69
 
1
@@ -1,45 +1,26 @@
2
-sphinx = find_program('sphinx-build', required:false)
3
+sphinx = find_program('sphinx-build', required: enable_documentation == 'true')
4
 if sphinx.found()
5
-  custom_target(
6
-    'HTML documentation',
7
-    output: 'html',
8
-    input: ['index.rst', 'conf.py'],
9
-    command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@'],
10
-    build_by_default: true,
11
-    install: true,
12
-    install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()),
13
-  )
14
-
15
-  custom_target(
16
-    'Manpage documentation',
17
-    output: 'man',
18
-    input: ['index.rst', 'conf.py'],
19
-    command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/doctrees', meson.current_source_dir(), '@OUTPUT@/man1'],
20
-    build_by_default: true,
21
-    install: true,
22
-    install_dir: get_option('datadir'),
23
-  )
24
-endif
25
-
26
-if get_option('documentation')
27
-  doxygen = find_program('doxygen', required: false)
28
-
29
-  if doxygen.found()
30
-    dconf = configuration_data()
31
-    dconf.set('VERSION', meson.project_version())
32
-    dconf.set('abs_top_srcdir', meson.source_root())
33
-
34
-    doxyfile = configure_file(input: 'doxygen.conf.in',
35
-                              output: 'doxygen.conf',
36
-                              configuration: dconf)
37
-
38
-    datadir = join_paths(get_option('datadir'), 'doc', 'spede')
39
+  if get_option('html_manual')
40
+    custom_target(
41
+      'HTML documentation',
42
+      output: 'html',
43
+      input: ['index.rst', 'conf.py'],
44
+      command: [sphinx, '-q', '-b', 'html', '-d', '@OUTDIR@/html_doctrees', meson.current_source_dir(), '@OUTPUT@'],
45
+      build_by_default: true,
46
+      install: true,
47
+      install_dir: join_paths(get_option('datadir'), 'doc', meson.project_name()),
48
+    )
49
+  endif
50
 
51
-    html_target = custom_target('apidocs',
52
-                                input: doxyfile,
53
-                                output: 'api',
54
-                                command: [doxygen, doxyfile],
55
-                                install: true,
56
-                                install_dir: docdir)
57
+  if get_option('manual')
58
+    custom_target(
59
+      'Manpage documentation',
60
+      output: 'man',
61
+      input: ['index.rst', 'conf.py'],
62
+      command: [sphinx, '-q', '-b', 'man', '-d', '@OUTDIR@/man_doctrees', meson.current_source_dir(), '@OUTPUT@/man1'],
63
+      build_by_default: true,
64
+      install: true,
65
+      install_dir: get_option('mandir'),
66
+    )
67
   endif
68
 endif
69
ncmpc-0.30.tar.xz/meson.build -> ncmpc-0.32.tar.xz/meson.build Changed
221
 
1
@@ -1,5 +1,5 @@
2
 project('ncmpc', 'cpp',
3
-  version: '0.30',
4
+  version: '0.32',
5
   default_options: [
6
     'cpp_std=c++14'
7
   ],
8
@@ -45,9 +45,11 @@
9
   subdir('po')
10
 endif
11
 
12
+conf.set('HAVE_LOCALE_T', enable_locale and cc.has_header_symbol('locale.h', 'locale_t'))
13
+conf.set('HAVE_ICONV', enable_locale and cc.has_function('iconv'))
14
+
15
 if get_option('tcp')
16
   conf.set('ENABLE_TCP', true)
17
-  conf.set('HAVE_GETADDRINFO', cc.has_function('getaddrinfo'))
18
 endif
19
 
20
 async_connect = get_option('async_connect')
21
@@ -80,38 +82,22 @@
22
   endif
23
 endif
24
 
25
+if not cc.has_header('curses.h', dependencies: curses_dep)
26
+  error('No curses header found')
27
+endif
28
+
29
 if curses == 'ncursesw'
30
   conf.set('HAVE_NCURSESW', true)
31
   curses_enhanced = true
32
   curses_color = true
33
-  if cc.has_header('ncursesw/curses.h', dependencies: curses_dep)
34
-    conf.set('HAVE_NCURSESW_CURSES_H', true)
35
-  elif cc.has_header('ncursesw.h', dependencies: curses_dep)
36
-    conf.set('HAVE_NCURSESW_H', true)
37
-  else
38
-    error('No ncursesw header found')
39
-  endif
40
 elif curses == 'ncurses'
41
   conf.set('HAVE_NCURSES', true)
42
   curses_enhanced = true
43
   curses_color = true
44
-  if cc.has_header('ncurses/curses.h', dependencies: curses_dep)
45
-    conf.set('HAVE_NCURSES_CURSES_H', true)
46
-  elif cc.has_header('ncurses.h', dependencies: curses_dep)
47
-    conf.set('HAVE_NCURSES_H', true)
48
-  else
49
-    error('No ncurses header found')
50
-  endif
51
 else
52
-  if cc.has_header('curses.h', dependencies: curses_dep)
53
-    conf.set('HAVE_CURSES_H', true)
54
-
55
-    # TODO: test this with pdcurses
56
-    curses_enhanced = cc.has_header_symbol('curses.h', '_XOPEN_CURSES', dependencies: curses_dep)
57
-    curses_color = curses_enhanced or cc.has_header_symbol('curses.h', 'COLOR_PAIR', dependencies: curses_dep)
58
-  else
59
-    error('No curses header found')
60
-  endif
61
+  # TODO: test this with pdcurses
62
+  curses_enhanced = cc.has_header_symbol('curses.h', '_XOPEN_CURSES', dependencies: curses_dep)
63
+  curses_color = curses_enhanced or cc.has_header_symbol('curses.h', 'COLOR_PAIR', dependencies: curses_dep)
64
 endif
65
 conf.set('HAVE_CURSES_ENHANCED', curses_enhanced)
66
 
67
@@ -147,11 +133,20 @@
68
 endif
69
 conf.set('ENABLE_LIRC', enable_lirc)
70
 
71
-conf.set('ENABLE_COLORS', curses_color)
72
+conf.set('ENABLE_COLORS', curses_color and get_option('colors'))
73
 
74
 common_cflags = [
75
   # for getaddrinfo() and sigaction() with glibc
76
   '-D_GNU_SOURCE',
77
+
78
+  # no header bloat for the iostream library we don't use
79
+  '-DBOOST_NO_IOSTREAM',
80
+
81
+  # avoid the runtime dependency on libboost_system
82
+  '-DBOOST_ERROR_CODE_HEADER_ONLY',
83
+
84
+  # disable deprecated boost::system features
85
+  '-DBOOST_SYSTEM_NO_DEPRECATED',
86
 ]
87
 
88
 test_cflags = [
89
@@ -167,11 +162,10 @@
90
   '-Wredundant-decls', '-Wundef',
91
   '-Wno-non-virtual-dtor',
92
   '-fvisibility=hidden',
93
-  '-fno-exceptions',
94
-  '-fno-rtti',
95
-]
96
 
97
-test_ldflags = [
98
+  # the only warnings we got from this are from formatted error
99
+  # messages, and their truncation is harmless
100
+  '-Wno-format-truncation',
101
 ]
102
 
103
 if get_option('buildtype') != 'debug'
104
@@ -179,9 +173,6 @@
105
     '-ffunction-sections',
106
     '-fdata-sections',
107
   ]
108
-  test_ldflags += [
109
-    '-Wl,--gc-sections',
110
-  ]
111
 endif
112
 
113
 foreach f: test_cflags
114
@@ -192,15 +183,17 @@
115
 
116
 add_global_arguments(common_cflags, language: 'cpp')
117
 
118
-foreach f: test_ldflags
119
-  if cc.has_argument(f)
120
-    add_global_link_arguments(f, language: 'cpp')
121
-  endif
122
-endforeach
123
-
124
-glib_dep = dependency('glib-2.0', version: '>= 2.30')
125
+thread_dep = dependency('threads')
126
+boost_dep = dependency('boost', version: '>= 1.62')
127
 libmpdclient_dep = dependency('libmpdclient', version: '>= 2.9')
128
 
129
+if not mini
130
+  pcre_dep = dependency('libpcre', required: false)
131
+  conf.set('HAVE_PCRE', pcre_dep.found())
132
+else
133
+  pcre_dep = declare_dependency()
134
+endif
135
+
136
 inc = include_directories(
137
   'src',
138
 
139
@@ -225,17 +218,14 @@
140
     'src/xterm_title.cxx',
141
     'src/BasicMarquee.cxx',
142
     'src/hscroll.cxx',
143
-    'src/match.cxx',
144
     'src/conf.cxx',
145
   ]
146
 endif
147
 
148
 if async_connect
149
   sources += [
150
-    'src/net/socket.cxx',
151
-    'src/net/resolver.cxx',
152
-    'src/net/async_connect.cxx',
153
-    'src/net/async_rconnect.cxx',
154
+    'src/net/AsyncConnect.cxx',
155
+    'src/net/AsyncResolveConnect.cxx',
156
     'src/aconnect.cxx',
157
   ]
158
 endif
159
@@ -331,16 +321,23 @@
160
 
161
 ncmpc = executable('ncmpc',
162
   'src/Main.cxx',
163
+  'src/Instance.cxx',
164
   'src/gidle.cxx',
165
   'src/mpdclient.cxx',
166
   'src/callbacks.cxx',
167
   'src/Queue.cxx',
168
   'src/filelist.cxx',
169
-  'src/options.cxx',
170
-  'src/command.cxx',
171
+  'src/Options.cxx',
172
+  'src/Command.cxx',
173
+  'src/Bindings.cxx',
174
+  'src/GlobalBindings.cxx',
175
   'src/keyboard.cxx',
176
+  'src/KeyName.cxx',
177
+  'src/Match.cxx',
178
   'src/ncu.cxx',
179
   'src/player_command.cxx',
180
+  'src/DelayedSeek.cxx',
181
+  'src/TabBar.cxx',
182
   'src/TitleBar.cxx',
183
   'src/ProgressBar.cxx',
184
   'src/StatusBar.cxx',
185
@@ -360,17 +357,24 @@
186
   'src/TextListRenderer.cxx',
187
   'src/save_playlist.cxx',
188
   'src/song_paint.cxx',
189
-  'src/colors.cxx',
190
+  'src/BasicColors.cxx',
191
+  'src/CustomColors.cxx',
192
+  'src/Styles.cxx',
193
   'src/charset.cxx',
194
   'src/wreadln.cxx',
195
   'src/Completion.cxx',
196
   'src/strfsong.cxx',
197
   'src/time_format.cxx',
198
+  'src/util/LocaleString.cxx',
199
   'src/util/StringStrip.cxx',
200
+  'src/util/StringUTF8.cxx',
201
+  'src/util/UriUtil.cxx',
202
   sources,
203
   include_directories: inc,
204
   dependencies: [
205
-    glib_dep,
206
+    thread_dep,
207
+    boost_dep,
208
+    pcre_dep,
209
     curses_dep,
210
     lirc_dep,
211
     libmpdclient_dep,
212
@@ -391,4 +395,7 @@
213
   subdir('test')
214
 endif
215
 
216
-subdir('doc')
217
+enable_documentation = get_option('documentation')
218
+if enable_documentation != 'false'
219
+  subdir('doc')
220
+endif
221
ncmpc-0.30.tar.xz/meson_options.txt -> ncmpc-0.32.tar.xz/meson_options.txt Changed
31
 
1
@@ -8,9 +8,8 @@
2
   value: 'auto',
3
   description: 'Enable mouse support')
4
 
5
-option('colors', type: 'combo',
6
-  choices: ['ncursesw', 'ncurses', 'auto'],
7
-  value: 'auto',
8
+option('colors', type: 'boolean',
9
+  value: true,
10
   description: 'Enable color support')
11
 
12
 option('multibyte', type: 'boolean',
13
@@ -80,6 +79,14 @@
14
   value: false,
15
   description: 'Enable the chat screen')
16
 
17
-option('documentation', type: 'boolean',
18
-  value: false,
19
-  description: 'Build API documentation')
20
+option('documentation', type: 'combo',
21
+  choices: ['true', 'false', 'auto'], value: 'auto',
22
+  description: 'Build documentation')
23
+
24
+option('manual', type: 'boolean',
25
+   value: true,
26
+   description: 'Build the manual')
27
+
28
+option('html_manual', type: 'boolean',
29
+   value: true,
30
+   description: 'Build the HTML manual')
31
ncmpc-0.30.tar.xz/po/POTFILES -> ncmpc-0.32.tar.xz/po/POTFILES Changed
51
 
1
@@ -1,28 +1,32 @@
2
-src/colors.cxx
3
-src/command.cxx
4
+src/AlbumListPage.cxx
5
+src/ArtistListPage.cxx
6
+src/Bindings.cxx
7
+src/ChatPage.cxx
8
+src/Command.cxx
9
 src/conf.cxx
10
+src/CustomColors.cxx
11
+src/FileBrowserPage.cxx
12
+src/FileListPage.cxx
13
+src/HelpPage.cxx
14
 src/i18n.h
15
-src/list_window.cxx
16
+src/KeyName.cxx
17
+src/ListWindow.cxx
18
+src/LyricsPage.cxx
19
 src/Main.cxx
20
 src/options.cxx
21
+src/OutputsPage.cxx
22
 src/player_command.cxx
23
+src/QueuePage.cxx
24
 src/save_playlist.cxx
25
-src/screen.cxx
26
 src/screen_artist.cxx
27
-src/screen_browser.cxx
28
-src/screen_chat.cxx
29
 src/screen_client.cxx
30
-src/screen_file.cxx
31
+src/screen.cxx
32
 src/screen_find.cxx
33
-src/screen_help.cxx
34
-src/screen_init.cxx
35
 src/screen_keydef.cxx
36
-src/screen_lyrics.cxx
37
-src/screen_outputs.cxx
38
-src/screen_queue.cxx
39
-src/screen_search.cxx
40
-src/screen_song.cxx
41
 src/screen_utils.cxx
42
-src/status_bar.cxx
43
-src/title_bar.cxx
44
-src/utils.cxx
45
+src/SearchPage.cxx
46
+src/SongPage.cxx
47
+src/StatusBar.cxx
48
+src/Styles.cxx
49
+src/time_format.cxx
50
+src/TitleBar.cxx
51
ncmpc-0.30.tar.xz/po/cs.po -> ncmpc-0.32.tar.xz/po/cs.po Changed
1928
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-03-02 13:59+0000\n"
8
 "Last-Translator: Zbyněk Schwarz <Unknown>\n"
9
 "Language-Team: Czech <cs@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
12
 "X-Generator: Launchpad (build 13265)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Neznámý příkaz"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Všechny skladby"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Varování: Neznámé barevné pole - %s\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminál postrádá podporu změny barev"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Alba interpreta: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminál postrádá podporu barev"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Přidávám '%s' do seznamu skladeb"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Všichni interpreti"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Klávesa %s je přiřazena k %s a %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Obrazovka klávesových zkratek"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Ukončit"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Posunout kurzor nahoru"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Posunout kurzoru dolů"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Přesunout kurzor na horní okraj obrazovky"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Přesunout kurzor doprostřed obrazovky"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Přesunout kurzor na dolní okraj obrazovky"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Přesunout kurzor na vrchol seznamu"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Přesunout kurzor na dno seznamu"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Page up"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Page down"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Výběr rozsahu"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Posunout o jeden řádek dolů"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Posunout o jeden řádek nahoru"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Posunout o půlku obrazovky nahoru"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Posunout o půlku obrazovky dolů"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Zvolit právě hrající skladbu"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Obrazovka nápovědy"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Obrazovka keydef"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Obrazovka prohlížení"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Přehrát/Vstoupit do adresáře"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pozastavit"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Stop"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Oříznout"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Následující stopa"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Předchozí stopa"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Přetočit vpřed"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Přetočit zpět"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Zvýšit hlasitost"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Snížit hlasitost"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Vybrat/Zrušit výběr skladby v seznamu skladeb"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Vybrat všechny vypsané položky"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Smazat skladbu ze seznamu skladeb"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Přepnout režim opakování"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Přepnout náhodný režim"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Přepnout jednoduchý mód"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Přepnout režim konzumace"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Zapnout režim přerušení"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Spustit aktualizaci databáze skladeb"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Přidat url/soubor do seznamu skladeb"
286
+msgid "Append song to queue"
287
+msgstr "Přidat skladbu do seznamu skladeb"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Přejít do kořenového adresáře"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Přejít do nadřazeného adresáře"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Najít skladbu v prohlížeči"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Přesunout položku výše"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Přesunout položku níže"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Aktualizovat obrazovku"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Přepnout na režim vyhledávání"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Zapnout režim automatické centrování"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Další obrazovka"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Předchozí obrazovka"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Přepnout na nedávnou obrazovku"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Najít vpřed"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Najít další vpřed"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Najít zpět"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Najít předchozí"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Skočit na"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Obrazovka interpretů"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Obrazovka vyhledávání"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Změnit režim hledání"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Zobrazit vybranou a v současnosti přehrávanou píseň"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Obrazovka textu písně"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Přerušit akci"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Aktualizovat text písně"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Obrazovka výstupů"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Další obrazovka"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Nedefinováno"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Mezera"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Vstup"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Zpět"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Odstranit"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Nahoru"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Dolů"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Doleva"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Doprava"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Domů"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "Konec"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Klávesa %s je přiřazena k %s a %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Chyba"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Neplatná definice klávesové zkratky"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Neznámý příkaz"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Neúplné nastavení klávesových zkratek"
545
 
546
@@ -442,816 +377,882 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Chybný typ zobrazení času"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Chybí '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Chybné jméno barvy"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Neúplná definice barvy"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Neplatné číslo"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Neplatná definice barvy"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Neznámé jméno obrazovky"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Chybný vyhledávací mód"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Neznámý vyhledávací mód"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Neznámý parametr nastavení"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "a"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminál postrádá podporu změny barev"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Smazání této položky není možné"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Výběr rozsahu vypnut"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Smazat seznam skladeb"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Výběr rozsahu zapnut"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Přerušeno"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Připojuji se k %s... [Pro přerušení stiskněte %s]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Seznam skladeb smazán"
647
 
648
-#: src/Main.cxx:182
649
-#, fuzzy, c-format
650
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
651
-msgstr "Chyba: MPD verze %d.%d.%d je příliš stará (potřebuji %s)"
652
+#. translators: caption of the browser screen
653
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
654
+msgid "Browse"
655
+msgstr "Procházet"
656
 
657
-#: src/Main.cxx:317
658
-#, c-format
659
-msgid "press %s for the key editor"
660
-msgstr "stiskněte %s pro otevření správce klávesových zkratek"
661
+#: src/FileListPage.cxx:121
662
+#, fuzzy, c-format
663
+msgid "Loading playlist '%s'"
664
+msgstr "Načítám seznam skladeb: %s..."
665
 
666
-#. To translators: these credits are shown
667
-#. when ncmpc is started with "--version"
668
-#: src/options.cxx:209 src/options.cxx:212
669
-msgid "translator-credits"
670
-msgstr ""
671
-"Launchpad Contributions:\n"
672
-"  Konki https://launchpad.net/~pavel-konkol\n"
673
-"  Vojtěch Trefný https://launchpad.net/~vojtech.trefny\n"
674
-"  Zbyněk Schwarz https://launchpad.net/~tsbook"
675
+#: src/HelpPage.cxx:60
676
+msgid "Movement"
677
+msgstr "Pohyb"
678
 
679
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
680
-msgid "Shuffled queue"
681
-msgstr ""
682
+#: src/HelpPage.cxx:105
683
+msgid "Global"
684
+msgstr "Globální"
685
 
686
-#: src/player_command.cxx:184
687
-msgid "Cleared queue"
688
-msgstr ""
689
+#: src/HelpPage.cxx:142
690
+msgid "Play"
691
+msgstr "Přehrát"
692
 
693
-#. query the user for a filename
694
-#: src/save_playlist.cxx:109
695
-msgid "Save queue as"
696
-msgstr ""
697
+#: src/HelpPage.cxx:149
698
+msgid "Center"
699
+msgstr "Střed"
700
 
701
-#: src/save_playlist.cxx:140
702
-#, fuzzy, c-format
703
-msgid "Replace %s?"
704
-msgstr "Nahradit %s [%s/%s] ? "
705
+#: src/HelpPage.cxx:157
706
+msgid "Enter directory/Select and play song"
707
+msgstr "Vytoupit do adresáře/Vybrat a přehrát skladbu"
708
 
709
-#. translators: a dialog was aborted by the user
710
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
711
-#: src/screen_lyrics.cxx:370
712
-msgid "Aborted"
713
-msgstr "Přerušeno"
714
+#: src/HelpPage.cxx:161
715
+msgid "Delete playlist"
716
+msgstr "Smazat seznam skladeb"
717
 
718
-#. success
719
-#: src/save_playlist.cxx:171
720
-#, c-format
721
-msgid "Saved %s"
722
-msgstr "Uloženo %s"
723
+#: src/HelpPage.cxx:171
724
+#, fuzzy
725
+msgid "New search"
726
+msgstr "Vyhledávání"
727
 
728
-#: src/screen.cxx:154
729
-msgid "Repeat mode is on"
730
-msgstr "Opakování je zapnuto"
731
+#: src/HelpPage.cxx:172
732
+msgid "Select and play"
733
+msgstr "Vybrat a přehrát"
734
 
735
-#: src/screen.cxx:155
736
-msgid "Repeat mode is off"
737
-msgstr "Opakování je vypnuto"
738
+#: src/HelpPage.cxx:183
739
+msgid "View Lyrics"
740
+msgstr "Zobrazit text písně"
741
 
742
-#: src/screen.cxx:159
743
-msgid "Random mode is on"
744
-msgstr "Náhodné přehrávání je zapnuto"
745
+#: src/HelpPage.cxx:184
746
+msgid "(Re)load lyrics"
747
+msgstr "Znovu načíst text písně"
748
 
749
-#: src/screen.cxx:160
750
-msgid "Random mode is off"
751
-msgstr "Náhodné přehrávání je vypnuto"
752
+#. to translators: this hotkey aborts the retrieval of lyrics
753
+#. from the server
754
+#: src/HelpPage.cxx:187
755
+msgid "Interrupt retrieval"
756
+msgstr "Přerušit načítání"
757
 
758
-#. "single" mode means
759
-#. that MPD will
760
-#. automatically stop
761
-#. after playing one
762
-#. single song
763
-#: src/screen.cxx:169
764
-msgid "Single mode is on"
765
-msgstr "Jednoduchý mód je zapnutý"
766
+#: src/HelpPage.cxx:188
767
+msgid "Download lyrics for currently playing song"
768
+msgstr "Stáhnout text pro aktuálně přehrávanou skladbu"
769
 
770
-#: src/screen.cxx:170
771
-msgid "Single mode is off"
772
-msgstr "Jednoduchý mód je vypnutý"
773
+#: src/HelpPage.cxx:189
774
+#, fuzzy
775
+msgid "Add or edit lyrics"
776
+msgstr "Žádný uložený text písně"
777
 
778
-#. "consume" mode means
779
-#. that MPD removes each
780
-#. song which has
781
-#. finished playing
782
-#: src/screen.cxx:178
783
-msgid "Consume mode is on"
784
-msgstr "Režim konzumace zapnut"
785
+#: src/HelpPage.cxx:190
786
+msgid "Save lyrics"
787
+msgstr "Uložit text písně"
788
 
789
-#: src/screen.cxx:179
790
-msgid "Consume mode is off"
791
-msgstr "Režim konzumace vypnut"
792
+#: src/HelpPage.cxx:191
793
+msgid "Delete saved lyrics"
794
+msgstr "Smazat uložený text písně"
795
 
796
-#: src/screen.cxx:182
797
-#, c-format
798
-msgid "Crossfade %d seconds"
799
-msgstr "Přerušení %d sekund"
800
+#: src/HelpPage.cxx:198
801
+msgid "Enable/disable output"
802
+msgstr "Povolit/zakázat výstup"
803
 
804
-#: src/screen.cxx:194
805
-msgid "Database updated"
806
-msgstr "Databáze aktualizována"
807
+#: src/HelpPage.cxx:205
808
+msgid "Write a message"
809
+msgstr ""
810
 
811
-#: src/screen.cxx:226
812
-msgid "Find mode: Wrapped"
813
-msgstr "Režim vyhledávání: Zabalený"
814
+#: src/HelpPage.cxx:210
815
+msgid "Keydef screen"
816
+msgstr "Obrazovka keydef"
817
 
818
-#: src/screen.cxx:227
819
-msgid "Find mode: Normal"
820
-msgstr "Režim vyhledávání: Normální"
821
+#: src/HelpPage.cxx:212
822
+msgid "Edit keydefs for selected command"
823
+msgstr "Upravit keydefs pro vybraný příkaz"
824
 
825
-#: src/screen.cxx:232
826
-msgid "Auto center mode: On"
827
-msgstr "Automatické centrování zapnuto"
828
+#: src/HelpPage.cxx:213
829
+msgid "Remove selected keydef"
830
+msgstr "Odstranit vybraný keydef"
831
 
832
-#: src/screen.cxx:233
833
-msgid "Auto center mode: Off"
834
-msgstr "Automatické centrování vypnuto"
835
+#: src/HelpPage.cxx:214
836
+#, fuzzy
837
+msgid "Add a keydef"
838
+msgstr "Přidat novou klávesovou zkratku"
839
 
840
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
841
-msgid "All tracks"
842
-msgstr "Všechny skladby"
843
+#: src/HelpPage.cxx:215
844
+msgid "Go up a level"
845
+msgstr "Jít o úroveň výš"
846
 
847
-#: src/screen_artist.cxx:384
848
-msgid "All artists"
849
-msgstr "Všichni interpreti"
850
+#: src/HelpPage.cxx:216
851
+msgid "Apply and save changes"
852
+msgstr "Aplikovat a uložit změny"
853
 
854
-#: src/screen_artist.cxx:389
855
-#, c-format
856
-msgid "Albums of artist: %s"
857
-msgstr "Alba interpreta: %s"
858
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
859
+msgid "Help"
860
+msgstr "Nápověda"
861
 
862
-#: src/screen_artist.cxx:398
863
-#, c-format
864
-msgid "All tracks of artist: %s"
865
-msgstr "Všechny skladby interpreta: %s"
866
+#: src/i18n.h:43
867
+msgid "y"
868
+msgstr "a"
869
 
870
-#: src/screen_artist.cxx:401
871
-#, c-format
872
-msgid "Album: %s - %s"
873
-msgstr "Album: %s - %s"
874
+#: src/i18n.h:44
875
+msgid "n"
876
+msgstr "n"
877
 
878
-#: src/screen_artist.cxx:405
879
-#, c-format
880
-msgid "Tracks of no album of artist: %s"
881
-msgstr "Písničky bez alba zpěváka: %s"
882
+#: src/KeyName.cxx:31
883
+msgid "Undefined"
884
+msgstr "Nedefinováno"
885
 
886
-#: src/screen_artist.cxx:450
887
-#, c-format
888
-msgid "Adding album %s..."
889
-msgstr "Přidávám album %s..."
890
+#: src/KeyName.cxx:33
891
+msgid "Space"
892
+msgstr "Mezera"
893
+
894
+#: src/KeyName.cxx:35
895
+msgid "Enter"
896
+msgstr "Vstup"
897
+
898
+#: src/KeyName.cxx:37
899
+msgid "Backspace"
900
+msgstr "Zpět"
901
+
902
+#: src/KeyName.cxx:39
903
+msgid "Delete"
904
+msgstr "Odstranit"
905
+
906
+#: src/KeyName.cxx:41
907
+msgid "Up"
908
+msgstr "Nahoru"
909
+
910
+#: src/KeyName.cxx:43
911
+msgid "Down"
912
+msgstr "Dolů"
913
+
914
+#: src/KeyName.cxx:45
915
+msgid "Left"
916
+msgstr "Doleva"
917
+
918
+#: src/KeyName.cxx:47
919
+msgid "Right"
920
+msgstr "Doprava"
921
+
922
+#: src/KeyName.cxx:49
923
+msgid "Home"
924
+msgstr "Domů"
925
+
926
+#: src/KeyName.cxx:51
927
+msgid "End"
928
+msgstr "Konec"
929
+
930
+#: src/KeyName.cxx:53
931
+msgid "PageDown"
932
+msgstr "PageDown"
933
+
934
+#: src/KeyName.cxx:55
935
+msgid "PageUp"
936
+msgstr "PageUp"
937
+
938
+#: src/KeyName.cxx:57
939
+msgid "Tab"
940
+msgstr "Tab"
941
 
942
-#: src/screen_artist.cxx:452
943
+#: src/KeyName.cxx:59
944
+msgid "Shift+Tab"
945
+msgstr "Shift+Tab"
946
+
947
+#: src/KeyName.cxx:61
948
+msgid "Esc"
949
+msgstr "Esc"
950
+
951
+#: src/KeyName.cxx:63
952
+msgid "Insert"
953
+msgstr "Insert"
954
+
955
+#: src/KeyName.cxx:71
956
 #, c-format
957
-msgid "Adding %s..."
958
-msgstr "Přidávám %s..."
959
+msgid "Ctrl-%c"
960
+msgstr ""
961
 
962
-#: src/screen_browser.cxx:122
963
+#: src/KeyName.cxx:73
964
 #, c-format
965
-msgid "Loading playlist %s..."
966
-msgstr "Načítám seznam skladeb: %s..."
967
+msgid "Alt-%c"
968
+msgstr ""
969
 
970
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
971
-#: src/screen_browser.cxx:279
972
-#, fuzzy, c-format
973
-msgid "Adding '%s' to queue"
974
-msgstr "Přidávám '%s' do seznamu skladeb"
975
+#: src/ListWindow.cxx:491
976
+msgid "Range selection disabled"
977
+msgstr "Výběr rozsahu vypnut"
978
+
979
+#: src/ListWindow.cxx:496
980
+msgid "Range selection enabled"
981
+msgstr "Výběr rozsahu zapnut"
982
 
983
-#: src/screen_chat.cxx:59
984
+#. translators: no lyrics were found for the song
985
+#: src/LyricsPage.cxx:236
986
+msgid "No lyrics"
987
+msgstr "Žádný text písně"
988
+
989
+#: src/LyricsPage.cxx:254
990
 #, c-format
991
-msgid ""
992
-"connected to MPD %u.%u.%u (you need at least \n"
993
-"version 0.17.0 to use the chat feature)"
994
+msgid "Lyrics timeout occurred after %d seconds"
995
 msgstr ""
996
 
997
-#: src/screen_chat.cxx:177
998
-msgid "Your message"
999
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1000
+#: src/LyricsPage.cxx:490
1001
+msgid "Lyrics"
1002
+msgstr "Text písně"
1003
+
1004
+#. translators: this message is displayed
1005
+#. while data is retrieved
1006
+#: src/LyricsPage.cxx:340
1007
+msgid "loading..."
1008
+msgstr "načítám..."
1009
+
1010
+#: src/LyricsPage.cxx:361
1011
+msgid "Editor not configured"
1012
 msgstr ""
1013
 
1014
-#: src/screen_chat.cxx:186
1015
-msgid "Message could not be sent"
1016
+#: src/LyricsPage.cxx:368
1017
+msgid "Do you really want to start an editor and edit these lyrics?"
1018
 msgstr ""
1019
 
1020
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1021
-msgid "Chat"
1022
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1023
+msgid "Can't start editor"
1024
 msgstr ""
1025
 
1026
-#: src/screen_client.cxx:41
1027
-msgid "Database update running..."
1028
-msgstr "Probíhá aktualizace databáze"
1029
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1030
+msgid "Editor exited unexpectedly"
1031
+msgstr ""
1032
 
1033
-#: src/screen_client.cxx:49
1034
-#, c-format
1035
-msgid "Database update of %s started"
1036
-msgstr "Aktualizace databáze %s zahájena"
1037
+#. lyrics for the song were saved on hard disk
1038
+#: src/LyricsPage.cxx:439
1039
+msgid "Lyrics saved"
1040
+msgstr "Text písně uložen"
1041
 
1042
-#: src/screen_client.cxx:52
1043
-msgid "Database update started"
1044
-msgstr "Aktualizace databáze zahájena"
1045
+#: src/LyricsPage.cxx:445
1046
+msgid "Lyrics deleted"
1047
+msgstr "Text písně smazán"
1048
 
1049
-#. translators: the "delete" command is only possible
1050
-#. for playlists; the user attempted to delete a song
1051
-#. or a directory or something else
1052
-#: src/screen_file.cxx:200
1053
-msgid "Deleting this item is not possible"
1054
-msgstr "Smazání této položky není možné"
1055
+#: src/LyricsPage.cxx:446
1056
+msgid "No saved lyrics"
1057
+msgstr "Žádný uložený text písně"
1058
 
1059
-#: src/screen_file.cxx:207
1060
+#: src/Main.cxx:167
1061
 #, fuzzy, c-format
1062
-msgid "Delete playlist %s?"
1063
-msgstr "Smazat seznam skladeb"
1064
+msgid "Connecting to %s"
1065
+msgstr "Připojeno k %s"
1066
 
1067
-#. translators: MPD deleted the playlist, as requested by the
1068
-#. user
1069
-#: src/screen_file.cxx:227
1070
-msgid "Playlist deleted"
1071
-msgstr "Seznam skladeb smazán"
1072
-
1073
-#. translators: caption of the browser screen
1074
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1075
-msgid "Browse"
1076
-msgstr "Procházet"
1077
-
1078
-#: src/screen_find.cxx:29
1079
-msgid "Find"
1080
-msgstr "Najít"
1081
+#: src/Main.cxx:187
1082
+#, fuzzy, c-format
1083
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1084
+msgstr "Chyba: MPD verze %d.%d.%d je příliš stará (potřebuji %s)"
1085
 
1086
-#: src/screen_find.cxx:30
1087
-msgid "Find backward"
1088
-msgstr "Hledat rekurzivně"
1089
+#. To translators: these credits are shown
1090
+#. when ncmpc is started with "--version"
1091
+#: src/options.cxx:213 src/options.cxx:216
1092
+msgid "translator-credits"
1093
+msgstr ""
1094
+"Launchpad Contributions:\n"
1095
+"  Konki https://launchpad.net/~pavel-konkol\n"
1096
+"  Vojtěch Trefný https://launchpad.net/~vojtech.trefny\n"
1097
+"  Zbyněk Schwarz https://launchpad.net/~tsbook"
1098
 
1099
-#: src/screen_find.cxx:31
1100
-msgid "Jump"
1101
-msgstr "Přeskočit"
1102
+#: src/OutputsPage.cxx:87
1103
+#, c-format
1104
+msgid "Output '%s' enabled"
1105
+msgstr "Výstup '%s' povolen"
1106
 
1107
-#: src/screen_find.cxx:82
1108
+#: src/OutputsPage.cxx:98
1109
 #, c-format
1110
-msgid "Unable to find '%s'"
1111
-msgstr "Nemohu najít '%s'"
1112
+msgid "Output '%s' disabled"
1113
+msgstr "Výstup '%s' zakázán"
1114
 
1115
-#: src/screen_help.cxx:39
1116
-msgid "Movement"
1117
-msgstr "Pohyb"
1118
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1119
+msgid "Outputs"
1120
+msgstr "Výstupy"
1121
 
1122
-#: src/screen_help.cxx:84
1123
-msgid "Global"
1124
-msgstr "Globální"
1125
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1126
+msgid "Shuffled queue"
1127
+msgstr ""
1128
 
1129
-#: src/screen_help.cxx:121
1130
-msgid "Play"
1131
-msgstr "Přehrát"
1132
+#: src/player_command.cxx:186
1133
+msgid "Cleared queue"
1134
+msgstr ""
1135
 
1136
-#: src/screen_help.cxx:124
1137
-msgid "Move song up"
1138
-msgstr "Posunout skladbu nahoru"
1139
+#. get path
1140
+#: src/QueuePage.cxx:307
1141
+msgid "Add"
1142
+msgstr "Přidat"
1143
 
1144
-#: src/screen_help.cxx:125
1145
-msgid "Move song down"
1146
-msgstr "Posunout skladbu dolů"
1147
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1148
+msgid "Queue"
1149
+msgstr ""
1150
 
1151
-#: src/screen_help.cxx:128
1152
-msgid "Center"
1153
-msgstr "Střed"
1154
+#: src/QueuePage.cxx:380
1155
+#, c-format
1156
+msgid "Queue on %s"
1157
+msgstr ""
1158
 
1159
-#: src/screen_help.cxx:136
1160
-msgid "Enter directory/Select and play song"
1161
-msgstr "Vytoupit do adresáře/Vybrat a přehrát skladbu"
1162
+#. query the user for a filename
1163
+#: src/save_playlist.cxx:85
1164
+msgid "Save queue as"
1165
+msgstr ""
1166
 
1167
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1168
-#, fuzzy
1169
-msgid "Append song to queue"
1170
-msgstr "Přidat skladbu do seznamu skladeb"
1171
+#: src/save_playlist.cxx:107
1172
+#, fuzzy, c-format
1173
+msgid "Replace %s?"
1174
+msgstr "Nahradit %s [%s/%s] ? "
1175
 
1176
-#: src/screen_help.cxx:140
1177
-msgid "Delete playlist"
1178
-msgstr "Smazat seznam skladeb"
1179
+#. success
1180
+#: src/save_playlist.cxx:128
1181
+#, c-format
1182
+msgid "Saved %s"
1183
+msgstr "Uloženo %s"
1184
 
1185
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1186
-msgid "Search"
1187
-msgstr "Vyhledávání"
1188
+#: src/screen_artist.cxx:186
1189
+#, c-format
1190
+msgid "All tracks of artist: %s"
1191
+msgstr "Všechny skladby interpreta: %s"
1192
 
1193
-#: src/screen_help.cxx:151
1194
-msgid "Select and play"
1195
-msgstr "Vybrat a přehrát"
1196
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1197
+msgid "Album"
1198
+msgstr "Album"
1199
 
1200
-#: src/screen_help.cxx:162
1201
-msgid "View Lyrics"
1202
-msgstr "Zobrazit text písně"
1203
+#: src/screen_artist.cxx:195
1204
+#, c-format
1205
+msgid "Tracks of no album of artist: %s"
1206
+msgstr "Písničky bez alba zpěváka: %s"
1207
 
1208
-#: src/screen_help.cxx:163
1209
-msgid "(Re)load lyrics"
1210
-msgstr "Znovu načíst text písně"
1211
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1212
+msgid "Artist"
1213
+msgstr "Interpret"
1214
 
1215
-#. to translators: this hotkey aborts the retrieval of lyrics
1216
-#. from the server
1217
-#: src/screen_help.cxx:166
1218
-msgid "Interrupt retrieval"
1219
-msgstr "Přerušit načítání"
1220
+#: src/screen_client.cxx:41
1221
+#, fuzzy
1222
+msgid "Database update running"
1223
+msgstr "Probíhá aktualizace databáze"
1224
 
1225
-#: src/screen_help.cxx:167
1226
-msgid "Download lyrics for currently playing song"
1227
-msgstr "Stáhnout text pro aktuálně přehrávanou skladbu"
1228
+#: src/screen_client.cxx:48
1229
+#, c-format
1230
+msgid "Database update of %s started"
1231
+msgstr "Aktualizace databáze %s zahájena"
1232
 
1233
-#: src/screen_help.cxx:168
1234
-#, fuzzy
1235
-msgid "Add or edit lyrics"
1236
-msgstr "Žádný uložený text písně"
1237
+#: src/screen_client.cxx:51
1238
+msgid "Database update started"
1239
+msgstr "Aktualizace databáze zahájena"
1240
 
1241
-#: src/screen_help.cxx:169
1242
-msgid "Save lyrics"
1243
-msgstr "Uložit text písně"
1244
+#: src/screen.cxx:160
1245
+msgid "Repeat mode is on"
1246
+msgstr "Opakování je zapnuto"
1247
 
1248
-#: src/screen_help.cxx:170
1249
-msgid "Delete saved lyrics"
1250
-msgstr "Smazat uložený text písně"
1251
+#: src/screen.cxx:161
1252
+msgid "Repeat mode is off"
1253
+msgstr "Opakování je vypnuto"
1254
 
1255
-#: src/screen_help.cxx:177
1256
-msgid "Enable/disable output"
1257
-msgstr "Povolit/zakázat výstup"
1258
+#: src/screen.cxx:165
1259
+msgid "Random mode is on"
1260
+msgstr "Náhodné přehrávání je zapnuto"
1261
 
1262
-#: src/screen_help.cxx:184
1263
-msgid "Write a message"
1264
-msgstr ""
1265
+#: src/screen.cxx:166
1266
+msgid "Random mode is off"
1267
+msgstr "Náhodné přehrávání je vypnuto"
1268
 
1269
-#: src/screen_help.cxx:189
1270
-msgid "Keydef screen"
1271
-msgstr "Obrazovka keydef"
1272
+#. "single" mode means
1273
+#. that MPD will
1274
+#. automatically stop
1275
+#. after playing one
1276
+#. single song
1277
+#: src/screen.cxx:175
1278
+msgid "Single mode is on"
1279
+msgstr "Jednoduchý mód je zapnutý"
1280
 
1281
-#: src/screen_help.cxx:191
1282
-msgid "Edit keydefs for selected command"
1283
-msgstr "Upravit keydefs pro vybraný příkaz"
1284
+#: src/screen.cxx:176
1285
+msgid "Single mode is off"
1286
+msgstr "Jednoduchý mód je vypnutý"
1287
 
1288
-#: src/screen_help.cxx:192
1289
-msgid "Remove selected keydef"
1290
-msgstr "Odstranit vybraný keydef"
1291
+#. "consume" mode means
1292
+#. that MPD removes each
1293
+#. song which has
1294
+#. finished playing
1295
+#: src/screen.cxx:184
1296
+msgid "Consume mode is on"
1297
+msgstr "Režim konzumace zapnut"
1298
 
1299
-#: src/screen_help.cxx:193
1300
-#, fuzzy
1301
-msgid "Add a keydef"
1302
-msgstr "Přidat novou klávesovou zkratku"
1303
+#: src/screen.cxx:185
1304
+msgid "Consume mode is off"
1305
+msgstr "Režim konzumace vypnut"
1306
 
1307
-#: src/screen_help.cxx:194
1308
-msgid "Go up a level"
1309
-msgstr "Jít o úroveň výš"
1310
+#: src/screen.cxx:188
1311
+#, c-format
1312
+msgid "Crossfade %d seconds"
1313
+msgstr "Přerušení %d sekund"
1314
 
1315
-#: src/screen_help.cxx:195
1316
-msgid "Apply and save changes"
1317
-msgstr "Aplikovat a uložit změny"
1318
+#: src/screen.cxx:200
1319
+msgid "Database updated"
1320
+msgstr "Databáze aktualizována"
1321
 
1322
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1323
-msgid "Help"
1324
-msgstr "Nápověda"
1325
+#: src/screen.cxx:250
1326
+msgid "Find mode: Wrapped"
1327
+msgstr "Režim vyhledávání: Zabalený"
1328
 
1329
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1330
-msgid "Error: Screen too small"
1331
-msgstr "Chyba: Příliš malá obrazovka"
1332
+#: src/screen.cxx:251
1333
+msgid "Find mode: Normal"
1334
+msgstr "Režim vyhledávání: Normální"
1335
 
1336
-#: src/screen_keydef.cxx:141
1337
-msgid "You have new key bindings"
1338
-msgstr "Nové klávesové zkratky"
1339
+#: src/screen.cxx:256
1340
+msgid "Auto center mode: On"
1341
+msgstr "Automatické centrování zapnuto"
1342
 
1343
-#: src/screen_keydef.cxx:143
1344
-msgid "Keybindings unchanged."
1345
-msgstr "Klávesové zkratky nezměněny"
1346
+#: src/screen.cxx:257
1347
+msgid "Auto center mode: Off"
1348
+msgstr "Automatické centrování vypnuto"
1349
 
1350
-#: src/screen_keydef.cxx:153
1351
-#, c-format
1352
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1353
-msgstr "Chyba: Nemohu vytvořit adresář ~/.ncmpc - %s"
1354
+#: src/screen_find.cxx:31
1355
+msgid "Find"
1356
+msgstr "Najít"
1357
 
1358
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1359
-#, c-format
1360
-msgid "Error: %s - %s"
1361
-msgstr "Chyba: %s - %s"
1362
+#: src/screen_find.cxx:32
1363
+msgid "Find backward"
1364
+msgstr "Hledat rekurzivně"
1365
+
1366
+#: src/screen_find.cxx:33
1367
+msgid "Jump"
1368
+msgstr "Přeskočit"
1369
 
1370
-#: src/screen_keydef.cxx:171
1371
+#: src/screen_find.cxx:79
1372
 #, c-format
1373
-msgid "Wrote %s"
1374
-msgstr "Zapsat %s"
1375
+msgid "Unable to find '%s'"
1376
+msgstr "Nemohu najít '%s'"
1377
 
1378
-#: src/screen_keydef.cxx:250
1379
+#: src/screen_keydef.cxx:161
1380
 msgid "Deleted"
1381
 msgstr "Odstraněno"
1382
 
1383
-#: src/screen_keydef.cxx:265
1384
+#: src/screen_keydef.cxx:177
1385
 #, c-format
1386
 msgid "Enter new key for %s: "
1387
 msgstr "Vložte novou klávesu pro %s: "
1388
 
1389
-#: src/screen_keydef.cxx:276
1390
+#: src/screen_keydef.cxx:187
1391
 msgid "Ctrl-Space can't be used"
1392
 msgstr ""
1393
 
1394
-#: src/screen_keydef.cxx:282
1395
+#: src/screen_keydef.cxx:193
1396
 #, c-format
1397
 msgid "Error: key %s is already used for %s"
1398
 msgstr "Chyba: klávesa %s je již použita pro %s"
1399
 
1400
-#: src/screen_keydef.cxx:291
1401
+#: src/screen_keydef.cxx:202
1402
 #, c-format
1403
 msgid "Assigned %s to %s"
1404
 msgstr "%s přiřazeno k %s"
1405
 
1406
-#: src/screen_keydef.cxx:317
1407
-msgid "===> Apply key bindings "
1408
-msgstr "===> Použít klávesové zkratky "
1409
-
1410
-#: src/screen_keydef.cxx:319
1411
-msgid "===> Apply & Save key bindings  "
1412
-msgstr "===> Použít & Uložit klávesové zkratky  "
1413
-
1414
-#: src/screen_keydef.cxx:347
1415
+#: src/screen_keydef.cxx:229
1416
 msgid "Add new key"
1417
 msgstr "Přidat novou klávesovou zkratku"
1418
 
1419
-#: src/screen_keydef.cxx:410
1420
-msgid "Note: Did you forget to 'Apply' your changes?"
1421
-msgstr "Poznámka: Zapomněl jste 'Uplatnit' změny?"
1422
-
1423
-#: src/screen_keydef.cxx:417
1424
-msgid "Edit key bindings"
1425
-msgstr "Upravit klávesové zkratky"
1426
-
1427
-#: src/screen_keydef.cxx:419
1428
+#: src/screen_keydef.cxx:251
1429
 #, c-format
1430
 msgid "Edit keys for %s"
1431
 msgstr "Upravit klávesové zkratky pro %s"
1432
 
1433
-#. translators: no lyrics were found for the song
1434
-#: src/screen_lyrics.cxx:208
1435
-msgid "No lyrics"
1436
-msgstr "Žádný text písně"
1437
-
1438
-#: src/screen_lyrics.cxx:226
1439
-#, c-format
1440
-msgid "Lyrics timeout occurred after %d seconds"
1441
-msgstr ""
1442
-
1443
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1444
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1445
-msgid "Lyrics"
1446
-msgstr "Text písně"
1447
-
1448
-#. translators: this message is displayed
1449
-#. while data is retrieved
1450
-#: src/screen_lyrics.cxx:330
1451
-msgid "loading..."
1452
-msgstr "načítám..."
1453
-
1454
-#: src/screen_lyrics.cxx:361
1455
-msgid "Editor not configured"
1456
-msgstr ""
1457
-
1458
-#: src/screen_lyrics.cxx:367
1459
-msgid "Do you really want to start an editor and edit these lyrics?"
1460
-msgstr ""
1461
+#: src/screen_keydef.cxx:393
1462
+msgid "You have new key bindings"
1463
+msgstr "Nové klávesové zkratky"
1464
 
1465
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1466
-msgid "Can't start editor"
1467
-msgstr ""
1468
+#: src/screen_keydef.cxx:395
1469
+msgid "Keybindings unchanged."
1470
+msgstr "Klávesové zkratky nezměněny"
1471
 
1472
-#: src/screen_lyrics.cxx:411
1473
-#, c-format
1474
-msgid "Editor exited unexpectedly (%d)"
1475
-msgstr ""
1476
+#: src/screen_keydef.cxx:405
1477
+#, fuzzy
1478
+msgid "Unable to write configuration"
1479
+msgstr "Neúplné nastavení klávesových zkratek"
1480
 
1481
-#: src/screen_lyrics.cxx:414
1482
+#: src/screen_keydef.cxx:421
1483
 #, c-format
1484
-msgid "Editor exited unexpectedly (signal %d)"
1485
-msgstr ""
1486
-
1487
-#. lyrics for the song were saved on hard disk
1488
-#: src/screen_lyrics.cxx:436
1489
-msgid "Lyrics saved"
1490
-msgstr "Text písně uložen"
1491
-
1492
-#: src/screen_lyrics.cxx:443
1493
-msgid "Lyrics deleted"
1494
-msgstr "Text písně smazán"
1495
-
1496
-#: src/screen_lyrics.cxx:446
1497
-msgid "No saved lyrics"
1498
-msgstr "Žádný uložený text písně"
1499
+msgid "Wrote %s"
1500
+msgstr "Zapsat %s"
1501
 
1502
-#: src/screen_outputs.cxx:60
1503
-#, c-format
1504
-msgid "Output '%s' enabled"
1505
-msgstr "Výstup '%s' povolen"
1506
+#: src/screen_keydef.cxx:433
1507
+msgid "===> Apply key bindings "
1508
+msgstr "===> Použít klávesové zkratky "
1509
 
1510
-#: src/screen_outputs.cxx:71
1511
-#, c-format
1512
-msgid "Output '%s' disabled"
1513
-msgstr "Výstup '%s' zakázán"
1514
+#: src/screen_keydef.cxx:435
1515
+msgid "===> Apply & Save key bindings  "
1516
+msgstr "===> Použít & Uložit klávesové zkratky  "
1517
 
1518
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1519
-msgid "Outputs"
1520
-msgstr "Výstupy"
1521
+#: src/screen_keydef.cxx:472
1522
+msgid "Edit key bindings"
1523
+msgstr "Upravit klávesové zkratky"
1524
 
1525
-#. get path
1526
-#: src/screen_queue.cxx:274
1527
-msgid "Add"
1528
-msgstr "Přidat"
1529
+#: src/screen_keydef.cxx:554
1530
+msgid "Note: Did you forget to 'Apply' your changes?"
1531
+msgstr "Poznámka: Zapomněl jste 'Uplatnit' změny?"
1532
 
1533
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1534
-msgid "Queue"
1535
+#: src/screen_keydef.cxx:604
1536
+msgid "Keys"
1537
 msgstr ""
1538
 
1539
-#: src/screen_queue.cxx:384
1540
-#, c-format
1541
-msgid "Queue on %s"
1542
-msgstr ""
1543
+#: src/screen_utils.cxx:124
1544
+msgid "Password"
1545
+msgstr "Heslo"
1546
 
1547
-#: src/screen_search.cxx:48
1548
+#: src/SearchPage.cxx:51
1549
 msgid "artist"
1550
 msgstr "interpret"
1551
 
1552
-#: src/screen_search.cxx:49
1553
+#: src/SearchPage.cxx:52
1554
 msgid "album"
1555
 msgstr "album"
1556
 
1557
-#: src/screen_search.cxx:50
1558
+#: src/SearchPage.cxx:53
1559
 msgid "title"
1560
 msgstr "titulek"
1561
 
1562
-#: src/screen_search.cxx:51
1563
+#: src/SearchPage.cxx:54
1564
 msgid "track"
1565
 msgstr "stopa"
1566
 
1567
-#: src/screen_search.cxx:52
1568
+#: src/SearchPage.cxx:55
1569
 msgid "name"
1570
 msgstr "název"
1571
 
1572
-#: src/screen_search.cxx:53
1573
+#: src/SearchPage.cxx:56
1574
 msgid "genre"
1575
 msgstr "žánr"
1576
 
1577
-#: src/screen_search.cxx:54
1578
+#: src/SearchPage.cxx:57
1579
 msgid "date"
1580
 msgstr "datum"
1581
 
1582
-#: src/screen_search.cxx:55
1583
+#: src/SearchPage.cxx:58
1584
 msgid "composer"
1585
 msgstr "skladatel"
1586
 
1587
-#: src/screen_search.cxx:56
1588
+#: src/SearchPage.cxx:59
1589
 msgid "performer"
1590
 msgstr "umělec"
1591
 
1592
-#: src/screen_search.cxx:57
1593
+#: src/SearchPage.cxx:60
1594
 msgid "comment"
1595
 msgstr "poznámka"
1596
 
1597
-#: src/screen_search.cxx:65
1598
+#: src/SearchPage.cxx:68
1599
 msgid "file"
1600
 msgstr "soubor"
1601
 
1602
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1603
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1604
 msgid "Title"
1605
 msgstr "Název"
1606
 
1607
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1608
-msgid "Artist"
1609
-msgstr "Interpret"
1610
-
1611
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1612
-msgid "Album"
1613
-msgstr "Album"
1614
-
1615
-#: src/screen_search.cxx:85
1616
+#: src/SearchPage.cxx:88
1617
 msgid "Filename"
1618
 msgstr "Název souboru"
1619
 
1620
-#: src/screen_search.cxx:86
1621
+#: src/SearchPage.cxx:89
1622
 msgid "Artist + Title"
1623
 msgstr "Interpret + Název"
1624
 
1625
-#: src/screen_search.cxx:244
1626
-#, c-format
1627
-msgid "No argument for search tag %s"
1628
-msgstr "Žádný argument vyhledávání %s"
1629
-
1630
-#: src/screen_search.cxx:253
1631
+#: src/SearchPage.cxx:270
1632
 #, c-format
1633
 msgid "Bad search tag %s"
1634
 msgstr "Chybný tag vyhledávání %s"
1635
 
1636
-#. if( pattern==nullptr )
1637
-#. search_new(screen, c);
1638
-#. else
1639
-#: src/screen_search.cxx:400
1640
+#: src/SearchPage.cxx:284
1641
 #, c-format
1642
-msgid "Press %s for a new search"
1643
-msgstr "Pro nové hledání stiskněte %s"
1644
-
1645
-#: src/screen_search.cxx:427
1646
-#, c-format
1647
-msgid "Search: %s"
1648
-msgstr "Hledání: %s"
1649
-
1650
-#: src/screen_search.cxx:430
1651
-#, c-format
1652
-msgid "Search: Results for %s [%s]"
1653
-msgstr "Hledání: Výsledky pro %s [%s]"
1654
+msgid "No argument for search tag %s"
1655
+msgstr "Žádný argument vyhledávání %s"
1656
 
1657
-#: src/screen_search.cxx:434
1658
-#, c-format
1659
-msgid "Search: Press %s for a new search [%s]"
1660
-msgstr "Hledání: Stiskněte %s pro nové hledání [%s]"
1661
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1662
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1663
+msgid "Search"
1664
+msgstr "Vyhledávání"
1665
 
1666
-#: src/screen_search.cxx:458
1667
+#: src/SearchPage.cxx:436
1668
 #, c-format
1669
 msgid "Search mode: %s"
1670
 msgstr "Režim vyhledávání: %s"
1671
 
1672
-#: src/screen_song.cxx:54
1673
+#: src/SongPage.cxx:67
1674
 msgid "Length"
1675
 msgstr "Délka"
1676
 
1677
-#: src/screen_song.cxx:55
1678
+#: src/SongPage.cxx:68
1679
 msgid "Position"
1680
 msgstr ""
1681
 
1682
-#: src/screen_song.cxx:56
1683
+#: src/SongPage.cxx:69
1684
 msgid "Composer"
1685
 msgstr "Skladatel"
1686
 
1687
-#: src/screen_song.cxx:57
1688
+#: src/SongPage.cxx:70
1689
 msgid "Name"
1690
 msgstr "Název"
1691
 
1692
-#: src/screen_song.cxx:58
1693
+#: src/SongPage.cxx:71
1694
 msgid "Disc"
1695
 msgstr "Disk"
1696
 
1697
-#: src/screen_song.cxx:59
1698
+#: src/SongPage.cxx:72
1699
 msgid "Track"
1700
 msgstr "Skladba"
1701
 
1702
-#: src/screen_song.cxx:60
1703
+#: src/SongPage.cxx:73
1704
 msgid "Date"
1705
 msgstr "Datum"
1706
 
1707
-#: src/screen_song.cxx:61
1708
+#: src/SongPage.cxx:74
1709
 msgid "Genre"
1710
 msgstr "Žánr"
1711
 
1712
-#: src/screen_song.cxx:62
1713
+#: src/SongPage.cxx:75
1714
 msgid "Comment"
1715
 msgstr "Poznámka"
1716
 
1717
-#: src/screen_song.cxx:63
1718
+#: src/SongPage.cxx:76
1719
 msgid "Path"
1720
 msgstr "Cesta"
1721
 
1722
-#: src/screen_song.cxx:64
1723
+#: src/SongPage.cxx:77
1724
 msgid "Bitrate"
1725
 msgstr "Bitrate"
1726
 
1727
-#: src/screen_song.cxx:65
1728
+#: src/SongPage.cxx:78
1729
 msgid "Format"
1730
 msgstr ""
1731
 
1732
-#: src/screen_song.cxx:82
1733
+#: src/SongPage.cxx:95
1734
 msgid "Number of artists"
1735
 msgstr "Počet interpretů"
1736
 
1737
-#: src/screen_song.cxx:83
1738
+#: src/SongPage.cxx:96
1739
 msgid "Number of albums"
1740
 msgstr "Počet alb"
1741
 
1742
-#: src/screen_song.cxx:84
1743
+#: src/SongPage.cxx:97
1744
 msgid "Number of songs"
1745
 msgstr "Počet skladeb"
1746
 
1747
-#: src/screen_song.cxx:85
1748
+#: src/SongPage.cxx:98
1749
 msgid "Uptime"
1750
 msgstr "Doba běhu"
1751
 
1752
-#: src/screen_song.cxx:86
1753
+#: src/SongPage.cxx:99
1754
 msgid "Most recent db update"
1755
 msgstr "Poslední aktualizace db"
1756
 
1757
-#: src/screen_song.cxx:87
1758
+#: src/SongPage.cxx:100
1759
 msgid "Playtime"
1760
 msgstr "Čas přehrávání"
1761
 
1762
-#: src/screen_song.cxx:88
1763
+#: src/SongPage.cxx:101
1764
 msgid "DB playtime"
1765
 msgstr "Čas hraní DB"
1766
 
1767
-#: src/screen_song.cxx:173
1768
+#: src/SongPage.cxx:204
1769
 msgid "Song viewer"
1770
 msgstr "Prohlížeč skladeb"
1771
 
1772
-#: src/screen_song.cxx:337
1773
+#: src/SongPage.cxx:370
1774
 msgid "MPD statistics"
1775
 msgstr "MPD statistiky"
1776
 
1777
-#: src/screen_song.cxx:427
1778
+#: src/SongPage.cxx:455
1779
 msgid "Selected song"
1780
 msgstr "Vybraná skladba"
1781
 
1782
-#: src/screen_song.cxx:437
1783
+#: src/SongPage.cxx:465
1784
 msgid "Currently playing song"
1785
 msgstr "Právě přehrávaná skladba"
1786
 
1787
-#: src/screen_song.cxx:442
1788
+#: src/SongPage.cxx:470
1789
 #, c-format
1790
 msgid "%d kbps"
1791
 msgstr "%d kbps"
1792
 
1793
-#. NOTE: if one day a translator decides to use a multi-byte character
1794
-#. for one of the yes/no keys, we'll have to parse it properly
1795
-#: src/screen_utils.cxx:80
1796
-#, fuzzy, c-format
1797
-msgid "%s [%s/%s] "
1798
-msgstr "Nahradit %s [%s/%s] ? "
1799
-
1800
-#: src/screen_utils.cxx:121
1801
-msgid "Password"
1802
-msgstr "Heslo"
1803
+#: src/SongPage.cxx:554
1804
+msgid "Song"
1805
+msgstr ""
1806
 
1807
-#: src/status_bar.cxx:121
1808
+#: src/StatusBar.cxx:104
1809
 msgid "Playing:"
1810
 msgstr "Přehrávání:"
1811
 
1812
-#: src/status_bar.cxx:124
1813
+#: src/StatusBar.cxx:108
1814
 msgid "[Paused]"
1815
 msgstr "[Pozastaveno]"
1816
 
1817
-#: src/title_bar.cxx:99
1818
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1819
+#, fuzzy
1820
+msgid "Unknown color"
1821
+msgstr "Neznámý příkaz"
1822
+
1823
+#: src/Styles.cxx:333
1824
+#, fuzzy
1825
+msgid "Unknown color field"
1826
+msgstr "Varování: Neznámé barevné pole - %s\n"
1827
+
1828
+#: src/Styles.cxx:375
1829
+msgid "Terminal lacks color capabilities"
1830
+msgstr "Terminál postrádá podporu barev"
1831
+
1832
+#: src/time_format.cxx:44
1833
+msgid "year"
1834
+msgstr ""
1835
+
1836
+#: src/time_format.cxx:46
1837
+msgid "years"
1838
+msgstr ""
1839
+
1840
+#: src/time_format.cxx:54
1841
+msgid "week"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:57
1845
+msgid "weeks"
1846
+msgstr ""
1847
+
1848
+#: src/time_format.cxx:65
1849
+msgid "day"
1850
+msgstr ""
1851
+
1852
+#: src/time_format.cxx:68
1853
+msgid "days"
1854
+msgstr ""
1855
+
1856
+#: src/TitleBar.cxx:100
1857
 msgid "Volume n/a"
1858
 msgstr "Hlasitost n/a"
1859
 
1860
-#: src/title_bar.cxx:101
1861
+#: src/TitleBar.cxx:102
1862
 #, c-format
1863
 msgid "Volume %d%%"
1864
 msgstr "Hlasitost %d%%"
1865
 
1866
+#, fuzzy
1867
+#~ msgid "Add url/file to queue"
1868
+#~ msgstr "Přidat url/soubor do seznamu skladeb"
1869
+
1870
+#~ msgid "Move song up"
1871
+#~ msgstr "Posunout skladbu nahoru"
1872
+
1873
+#~ msgid "Move song down"
1874
+#~ msgstr "Posunout skladbu dolů"
1875
+
1876
+#~ msgid "Press %s for a new search"
1877
+#~ msgstr "Pro nové hledání stiskněte %s"
1878
+
1879
+#~ msgid "Search: %s"
1880
+#~ msgstr "Hledání: %s"
1881
+
1882
+#~ msgid "Search: Results for %s [%s]"
1883
+#~ msgstr "Hledání: Výsledky pro %s [%s]"
1884
+
1885
+#~ msgid "Search: Press %s for a new search [%s]"
1886
+#~ msgstr "Hledání: Stiskněte %s pro nové hledání [%s]"
1887
+
1888
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1889
+#~ msgstr "Připojuji se k %s... [Pro přerušení stiskněte %s]"
1890
+
1891
+#~ msgid "press %s for the key editor"
1892
+#~ msgstr "stiskněte %s pro otevření správce klávesových zkratek"
1893
+
1894
+#~ msgid "Album: %s - %s"
1895
+#~ msgstr "Album: %s - %s"
1896
+
1897
+#~ msgid "Adding album %s..."
1898
+#~ msgstr "Přidávám album %s..."
1899
+
1900
+#~ msgid "Adding %s..."
1901
+#~ msgstr "Přidávám %s..."
1902
+
1903
+#~ msgid "Error: Screen too small"
1904
+#~ msgstr "Chyba: Příliš malá obrazovka"
1905
+
1906
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1907
+#~ msgstr "Chyba: Nemohu vytvořit adresář ~/.ncmpc - %s"
1908
+
1909
+#~ msgid "Error: %s - %s"
1910
+#~ msgstr "Chyba: %s - %s"
1911
+
1912
+#, fuzzy
1913
+#~ msgid "%s [%s/%s] "
1914
+#~ msgstr "Nahradit %s [%s/%s] ? "
1915
+
1916
 #~ msgid "Delete playlist %s [%s/%s] ? "
1917
 #~ msgstr "Smazat seznam skladeb %s[%s/%s] ? "
1918
 
1919
 #~ msgid "Warning: Unknown color - %s\n"
1920
 #~ msgstr "Varování: Neznámá barva - %s\n"
1921
 
1922
-#~ msgid "Connected to %s"
1923
-#~ msgstr "Připojeno k %s"
1924
-
1925
 #~ msgid "Shuffled playlist"
1926
 #~ msgstr "Seznam skladeb zamíchán"
1927
 
1928
ncmpc-0.30.tar.xz/po/da.po -> ncmpc-0.32.tar.xz/po/da.po Changed
1935
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.11.0\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2009-09-24 10:26+0200\n"
8
 "Last-Translator: Niels Anker <nanker@webspeed.dk>\n"
9
 "Language-Team: da <da@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2009-09-24 08:24+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Ukendt kommando"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Alle spor"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Advarsel: Ukendt farve felt - %s.\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminalen understøtter ikke at ændre farver"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Album fra kunstneren: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminalen understøtter ikke farver"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Tilføjer '%s' til listen"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Alle kunstnere"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Tast %s tildelt %s og %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Taste konfigurations skærm"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Afslut"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Flyt markør op"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Flyt markør ned"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Flyt cursor til toppen af skærmen"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Flyt cursor til midten af skærmen"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Flyt cursor til bunden af skærmen"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Flyt cursor til toppen af listen"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Flyt cursor til bunden af listen"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Side op"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Side ned"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Valg af interval"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Scroll en linie ned"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Scroll en linie op"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Scroll en halv skærm op"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Scroll en halv skærm ned"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Vælg den sang der spilles nu"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Hjælp"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Tastdefinitions skærm"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Gennemse"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Afspil/Gå til mappe"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pause"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Stop"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Beskær"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Næste"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Forrige"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Søg fremad"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Søg tilbage"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Hæv volumen"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Sænk volumen"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Marker/afmarker sang i afspilningsliste"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Vælg alle emner på listen"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Slet sang fra afspilningsliste"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Aktiver/deaktiver gentag"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Aktiver/deaktiver tilfældigt valg"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Aktiver/deaktiver enkelt valg"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Aktiver/deaktiver consume valg"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Aktiver/deaktiver crossfade mellem sange"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Opdater databasen"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Tilføj URL eller fil til afspilningslisten"
286
+msgid "Append song to queue"
287
+msgstr "Tilføj spor til afspilningsliste"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Gå til rod mappen"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Gå til forældre mappe"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Lokaliser sang i browseren"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Flyt op"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Flyt ned"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Genopfrisk skærm"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Ændre søge tilstand"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Aktiver/deaktiver automatisk centrering"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Næste skærm"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Forrige skærm"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Skift til seneste skærm"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Søg"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Gentag søg"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Søg baglæns"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Gentag søg baglæns"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Spring til"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Kunstner skærm"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Database søgning"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Ændre søge tilstand"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Vis valgte numre og det der afspilles"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Sangtekst skærm"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Afbryd action"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Opdater sangtekster"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Output skærm"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Næste skærm"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Udefineret"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Mellemrum"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Retur"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Tilbagetast"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Slet"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Op"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Ned"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Venstre"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Højre"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Hjem"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "Slut"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Skift+Tabulator"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Indsæt"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Tast %s tildelt %s og %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Fejl"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Forkert hotkey definition"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Ukendt kommando"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Ufuldstændig hotkey konfiguration"
545
 
546
@@ -442,818 +377,886 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Ringe tidsvisningstype"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Mangler '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Dårligt farvenavn"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Ufuldstændig farve definition"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Ugyldigt tal."
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Forkert farve definition"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Ukendt skærm navn"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Ugyldig søgetilstand"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Ukendt søgetilstand"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Ukendt konfigurations parameter"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "j"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminalen understøtter ikke at ændre farver"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Sletning af dette emne ikke muligt"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Valg af interval slået fra"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Slet afspilningsliste"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Valg af interval slået til"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Afbrudt"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Forbinder til %s... [Tryk %s for at afbryde]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Afspilningslisten slettet"
647
 
648
-#: src/Main.cxx:182
649
-#, fuzzy, c-format
650
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
651
-msgstr "Fejl: MPD version %d.%d.%d er for gammel (mindst %s er nødvendig)"
652
+#. translators: caption of the browser screen
653
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
654
+msgid "Browse"
655
+msgstr "Gennemse"
656
 
657
-#: src/Main.cxx:317
658
-#, c-format
659
-msgid "press %s for the key editor"
660
-msgstr "tryk på %s for at redigere"
661
+#: src/FileListPage.cxx:121
662
+#, fuzzy, c-format
663
+msgid "Loading playlist '%s'"
664
+msgstr "Henter %s..."
665
 
666
-#. To translators: these credits are shown
667
-#. when ncmpc is started with "--version"
668
-#: src/options.cxx:209 src/options.cxx:212
669
-msgid "translator-credits"
670
-msgstr ""
671
-"Launchpad Contributions:\n"
672
-"  Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc\n"
673
-"  Niels Anker https://launchpad.net/~nanker"
674
+#: src/HelpPage.cxx:60
675
+msgid "Movement"
676
+msgstr "Navigation"
677
 
678
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
679
-msgid "Shuffled queue"
680
-msgstr ""
681
+#: src/HelpPage.cxx:105
682
+msgid "Global"
683
+msgstr "Globale"
684
 
685
-#: src/player_command.cxx:184
686
-msgid "Cleared queue"
687
-msgstr ""
688
+#: src/HelpPage.cxx:142
689
+msgid "Play"
690
+msgstr "Afspil"
691
 
692
-#. query the user for a filename
693
-#: src/save_playlist.cxx:109
694
-msgid "Save queue as"
695
-msgstr ""
696
+#: src/HelpPage.cxx:149
697
+msgid "Center"
698
+msgstr "Centrer"
699
 
700
-#: src/save_playlist.cxx:140
701
-#, fuzzy, c-format
702
-msgid "Replace %s?"
703
-msgstr "Erstat '%s' [%s/%s] ? "
704
+#: src/HelpPage.cxx:157
705
+msgid "Enter directory/Select and play song"
706
+msgstr "Skift til bibliotek/Tilføj til afspilningslisten og afspil"
707
 
708
-#. translators: a dialog was aborted by the user
709
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
710
-#: src/screen_lyrics.cxx:370
711
-msgid "Aborted"
712
-msgstr "Afbrudt"
713
+#: src/HelpPage.cxx:161
714
+msgid "Delete playlist"
715
+msgstr "Slet afspilningsliste"
716
 
717
-#. success
718
-#: src/save_playlist.cxx:171
719
-#, c-format
720
-msgid "Saved %s"
721
-msgstr "Gemt %s"
722
+#: src/HelpPage.cxx:171
723
+#, fuzzy
724
+msgid "New search"
725
+msgstr "Søg"
726
 
727
-#: src/screen.cxx:154
728
-msgid "Repeat mode is on"
729
-msgstr "Gentagelse er slået til"
730
+#: src/HelpPage.cxx:172
731
+msgid "Select and play"
732
+msgstr "Vælg og afspil"
733
 
734
-#: src/screen.cxx:155
735
-msgid "Repeat mode is off"
736
-msgstr "Gentagelse er slået fra"
737
+#: src/HelpPage.cxx:183
738
+msgid "View Lyrics"
739
+msgstr "Gennemse sangtekster"
740
 
741
-#: src/screen.cxx:159
742
-msgid "Random mode is on"
743
-msgstr "Tilfældig orden slået til"
744
+#: src/HelpPage.cxx:184
745
+msgid "(Re)load lyrics"
746
+msgstr "(Gen)indlæs santekster"
747
 
748
-#: src/screen.cxx:160
749
-msgid "Random mode is off"
750
-msgstr "Tilfældig orden slået fra"
751
+#. to translators: this hotkey aborts the retrieval of lyrics
752
+#. from the server
753
+#: src/HelpPage.cxx:187
754
+msgid "Interrupt retrieval"
755
+msgstr "Abryd hentning"
756
 
757
-#. "single" mode means
758
-#. that MPD will
759
-#. automatically stop
760
-#. after playing one
761
-#. single song
762
-#: src/screen.cxx:169
763
-msgid "Single mode is on"
764
-msgstr "Single afspilning slået til"
765
+#: src/HelpPage.cxx:188
766
+msgid "Download lyrics for currently playing song"
767
+msgstr "Download tekst for det nummer der afspilles"
768
 
769
-#: src/screen.cxx:170
770
-msgid "Single mode is off"
771
-msgstr "Single afspilning slået fra"
772
+#: src/HelpPage.cxx:189
773
+#, fuzzy
774
+msgid "Add or edit lyrics"
775
+msgstr "Gem sagtekster"
776
 
777
-#. "consume" mode means
778
-#. that MPD removes each
779
-#. song which has
780
-#. finished playing
781
-#: src/screen.cxx:178
782
-msgid "Consume mode is on"
783
-msgstr "\"Consume mode\" er slået til"
784
+#: src/HelpPage.cxx:190
785
+msgid "Save lyrics"
786
+msgstr "Gem sagtekster"
787
 
788
-#: src/screen.cxx:179
789
-msgid "Consume mode is off"
790
-msgstr "\"Consume mode\" er slået fra"
791
+#: src/HelpPage.cxx:191
792
+#, fuzzy
793
+msgid "Delete saved lyrics"
794
+msgstr "Gem sagtekster"
795
 
796
-#: src/screen.cxx:182
797
-#, c-format
798
-msgid "Crossfade %d seconds"
799
-msgstr "Crossfade %d sekunder"
800
+#: src/HelpPage.cxx:198
801
+msgid "Enable/disable output"
802
+msgstr "Slå output til/fra"
803
 
804
-#: src/screen.cxx:194
805
-msgid "Database updated"
806
-msgstr "Databasen er opdateret"
807
+#: src/HelpPage.cxx:205
808
+msgid "Write a message"
809
+msgstr ""
810
 
811
-#: src/screen.cxx:226
812
-msgid "Find mode: Wrapped"
813
-msgstr "Søg (begynd forfra)"
814
+#: src/HelpPage.cxx:210
815
+msgid "Keydef screen"
816
+msgstr "Tastdefinitions skærm"
817
 
818
-#: src/screen.cxx:227
819
-msgid "Find mode: Normal"
820
-msgstr "Søg normalt (start/slut)"
821
+#: src/HelpPage.cxx:212
822
+msgid "Edit keydefs for selected command"
823
+msgstr "Redigér tastdefinitioner for udvalgte kommandoer"
824
 
825
-#: src/screen.cxx:232
826
-msgid "Auto center mode: On"
827
-msgstr "Automatisk centrering er aktiv"
828
+#: src/HelpPage.cxx:213
829
+msgid "Remove selected keydef"
830
+msgstr "Fjern valgte tastdefinitioner"
831
 
832
-#: src/screen.cxx:233
833
-msgid "Auto center mode: Off"
834
-msgstr "Automatisk centrering er inaktiv"
835
+#: src/HelpPage.cxx:214
836
+#, fuzzy
837
+msgid "Add a keydef"
838
+msgstr "Definér ny tast"
839
 
840
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
841
-msgid "All tracks"
842
-msgstr "Alle spor"
843
+#: src/HelpPage.cxx:215
844
+msgid "Go up a level"
845
+msgstr "Gå et niveau op"
846
 
847
-#: src/screen_artist.cxx:384
848
-msgid "All artists"
849
-msgstr "Alle kunstnere"
850
+#: src/HelpPage.cxx:216
851
+msgid "Apply and save changes"
852
+msgstr "Anvend og gem ændringer"
853
 
854
-#: src/screen_artist.cxx:389
855
-#, c-format
856
-msgid "Albums of artist: %s"
857
-msgstr "Album fra kunstneren: %s"
858
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
859
+msgid "Help"
860
+msgstr "Hjælp"
861
 
862
-#: src/screen_artist.cxx:398
863
-#, c-format
864
-msgid "All tracks of artist: %s"
865
-msgstr "Alle spor fra kunstneren: %s"
866
+#: src/i18n.h:43
867
+msgid "y"
868
+msgstr "j"
869
 
870
-#: src/screen_artist.cxx:401
871
-#, c-format
872
-msgid "Album: %s - %s"
873
-msgstr "Album: %s - %s"
874
+#: src/i18n.h:44
875
+msgid "n"
876
+msgstr "n"
877
 
878
-#: src/screen_artist.cxx:405
879
-#, fuzzy, c-format
880
-msgid "Tracks of no album of artist: %s"
881
-msgstr "Album fra kunstneren: %s"
882
+#: src/KeyName.cxx:31
883
+msgid "Undefined"
884
+msgstr "Udefineret"
885
 
886
-#: src/screen_artist.cxx:450
887
-#, fuzzy, c-format
888
-msgid "Adding album %s..."
889
-msgstr "Henter %s..."
890
+#: src/KeyName.cxx:33
891
+msgid "Space"
892
+msgstr "Mellemrum"
893
 
894
-#: src/screen_artist.cxx:452
895
-#, fuzzy, c-format
896
-msgid "Adding %s..."
897
-msgstr "Tilføjer mappen %s...\n"
898
+#: src/KeyName.cxx:35
899
+msgid "Enter"
900
+msgstr "Retur"
901
 
902
-#: src/screen_browser.cxx:122
903
-#, c-format
904
-msgid "Loading playlist %s..."
905
-msgstr "Henter %s..."
906
+#: src/KeyName.cxx:37
907
+msgid "Backspace"
908
+msgstr "Tilbagetast"
909
 
910
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
911
-#: src/screen_browser.cxx:279
912
-#, fuzzy, c-format
913
-msgid "Adding '%s' to queue"
914
-msgstr "Tilføjer '%s' til listen"
915
+#: src/KeyName.cxx:39
916
+msgid "Delete"
917
+msgstr "Slet"
918
+
919
+#: src/KeyName.cxx:41
920
+msgid "Up"
921
+msgstr "Op"
922
+
923
+#: src/KeyName.cxx:43
924
+msgid "Down"
925
+msgstr "Ned"
926
+
927
+#: src/KeyName.cxx:45
928
+msgid "Left"
929
+msgstr "Venstre"
930
+
931
+#: src/KeyName.cxx:47
932
+msgid "Right"
933
+msgstr "Højre"
934
+
935
+#: src/KeyName.cxx:49
936
+msgid "Home"
937
+msgstr "Hjem"
938
+
939
+#: src/KeyName.cxx:51
940
+msgid "End"
941
+msgstr "Slut"
942
+
943
+#: src/KeyName.cxx:53
944
+msgid "PageDown"
945
+msgstr "PageDown"
946
+
947
+#: src/KeyName.cxx:55
948
+msgid "PageUp"
949
+msgstr "PageUp"
950
 
951
-#: src/screen_chat.cxx:59
952
+#: src/KeyName.cxx:57
953
+msgid "Tab"
954
+msgstr "Tab"
955
+
956
+#: src/KeyName.cxx:59
957
+msgid "Shift+Tab"
958
+msgstr "Skift+Tabulator"
959
+
960
+#: src/KeyName.cxx:61
961
+msgid "Esc"
962
+msgstr "Esc"
963
+
964
+#: src/KeyName.cxx:63
965
+msgid "Insert"
966
+msgstr "Indsæt"
967
+
968
+#: src/KeyName.cxx:71
969
 #, c-format
970
-msgid ""
971
-"connected to MPD %u.%u.%u (you need at least \n"
972
-"version 0.17.0 to use the chat feature)"
973
+msgid "Ctrl-%c"
974
 msgstr ""
975
 
976
-#: src/screen_chat.cxx:177
977
-msgid "Your message"
978
+#: src/KeyName.cxx:73
979
+#, c-format
980
+msgid "Alt-%c"
981
 msgstr ""
982
 
983
-#: src/screen_chat.cxx:186
984
-msgid "Message could not be sent"
985
-msgstr ""
986
+#: src/ListWindow.cxx:491
987
+msgid "Range selection disabled"
988
+msgstr "Valg af interval slået fra"
989
 
990
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
991
-msgid "Chat"
992
-msgstr ""
993
+#: src/ListWindow.cxx:496
994
+msgid "Range selection enabled"
995
+msgstr "Valg af interval slået til"
996
 
997
-#: src/screen_client.cxx:41
998
-msgid "Database update running..."
999
-msgstr "Databasen opdateres..."
1000
+#. translators: no lyrics were found for the song
1001
+#: src/LyricsPage.cxx:236
1002
+msgid "No lyrics"
1003
+msgstr "Ingen sangtekster"
1004
 
1005
-#: src/screen_client.cxx:49
1006
+#: src/LyricsPage.cxx:254
1007
 #, c-format
1008
-msgid "Database update of %s started"
1009
-msgstr "Database opdatering af %s startet"
1010
+msgid "Lyrics timeout occurred after %d seconds"
1011
+msgstr ""
1012
 
1013
-#: src/screen_client.cxx:52
1014
-msgid "Database update started"
1015
-msgstr "Database opdatering startet"
1016
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1017
+#: src/LyricsPage.cxx:490
1018
+msgid "Lyrics"
1019
+msgstr "Sangtekster"
1020
 
1021
-#. translators: the "delete" command is only possible
1022
-#. for playlists; the user attempted to delete a song
1023
-#. or a directory or something else
1024
-#: src/screen_file.cxx:200
1025
-msgid "Deleting this item is not possible"
1026
-msgstr "Sletning af dette emne ikke muligt"
1027
+#. translators: this message is displayed
1028
+#. while data is retrieved
1029
+#: src/LyricsPage.cxx:340
1030
+msgid "loading..."
1031
+msgstr "indlæser..."
1032
 
1033
-#: src/screen_file.cxx:207
1034
-#, fuzzy, c-format
1035
-msgid "Delete playlist %s?"
1036
-msgstr "Slet afspilningsliste"
1037
+#: src/LyricsPage.cxx:361
1038
+msgid "Editor not configured"
1039
+msgstr ""
1040
 
1041
-#. translators: MPD deleted the playlist, as requested by the
1042
-#. user
1043
-#: src/screen_file.cxx:227
1044
-msgid "Playlist deleted"
1045
+#: src/LyricsPage.cxx:368
1046
+msgid "Do you really want to start an editor and edit these lyrics?"
1047
+msgstr ""
1048
+
1049
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1050
+msgid "Can't start editor"
1051
+msgstr ""
1052
+
1053
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1054
+msgid "Editor exited unexpectedly"
1055
+msgstr ""
1056
+
1057
+#. lyrics for the song were saved on hard disk
1058
+#: src/LyricsPage.cxx:439
1059
+msgid "Lyrics saved"
1060
+msgstr "Sangtekster gemt"
1061
+
1062
+#: src/LyricsPage.cxx:445
1063
+#, fuzzy
1064
+msgid "Lyrics deleted"
1065
 msgstr "Afspilningslisten slettet"
1066
 
1067
-#. translators: caption of the browser screen
1068
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1069
-msgid "Browse"
1070
-msgstr "Gennemse"
1071
+#: src/LyricsPage.cxx:446
1072
+#, fuzzy
1073
+msgid "No saved lyrics"
1074
+msgstr "Gem sagtekster"
1075
 
1076
-#: src/screen_find.cxx:29
1077
-msgid "Find"
1078
-msgstr "Søg"
1079
+#: src/Main.cxx:167
1080
+#, fuzzy, c-format
1081
+msgid "Connecting to %s"
1082
+msgstr "Forbundet til %s"
1083
 
1084
-#: src/screen_find.cxx:30
1085
-msgid "Find backward"
1086
-msgstr "Søg (baglæns)"
1087
+#: src/Main.cxx:187
1088
+#, fuzzy, c-format
1089
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1090
+msgstr "Fejl: MPD version %d.%d.%d er for gammel (mindst %s er nødvendig)"
1091
 
1092
-#: src/screen_find.cxx:31
1093
-msgid "Jump"
1094
-msgstr "Spring"
1095
+#. To translators: these credits are shown
1096
+#. when ncmpc is started with "--version"
1097
+#: src/options.cxx:213 src/options.cxx:216
1098
+msgid "translator-credits"
1099
+msgstr ""
1100
+"Launchpad Contributions:\n"
1101
+"  Mikkel Kirkgaard Nielsen https://launchpad.net/~ncmpc\n"
1102
+"  Niels Anker https://launchpad.net/~nanker"
1103
 
1104
-#: src/screen_find.cxx:82
1105
+#: src/OutputsPage.cxx:87
1106
 #, c-format
1107
-msgid "Unable to find '%s'"
1108
-msgstr "Kan ikke finde '%s'"
1109
-
1110
-#: src/screen_help.cxx:39
1111
-msgid "Movement"
1112
-msgstr "Navigation"
1113
+msgid "Output '%s' enabled"
1114
+msgstr "Output '%s' slået til"
1115
 
1116
-#: src/screen_help.cxx:84
1117
-msgid "Global"
1118
-msgstr "Globale"
1119
+#: src/OutputsPage.cxx:98
1120
+#, c-format
1121
+msgid "Output '%s' disabled"
1122
+msgstr "Output '%s' slået fra"
1123
 
1124
-#: src/screen_help.cxx:121
1125
-msgid "Play"
1126
-msgstr "Afspil"
1127
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1128
+msgid "Outputs"
1129
+msgstr "Output"
1130
 
1131
-#: src/screen_help.cxx:124
1132
-msgid "Move song up"
1133
-msgstr "Flyt markøren op i afspilningslisten"
1134
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1135
+msgid "Shuffled queue"
1136
+msgstr ""
1137
 
1138
-#: src/screen_help.cxx:125
1139
-msgid "Move song down"
1140
-msgstr "Flyt markøren ned i afspilningslisten"
1141
+#: src/player_command.cxx:186
1142
+msgid "Cleared queue"
1143
+msgstr ""
1144
 
1145
-#: src/screen_help.cxx:128
1146
-msgid "Center"
1147
-msgstr "Centrer"
1148
+#. get path
1149
+#: src/QueuePage.cxx:307
1150
+msgid "Add"
1151
+msgstr "Tilføj"
1152
 
1153
-#: src/screen_help.cxx:136
1154
-msgid "Enter directory/Select and play song"
1155
-msgstr "Skift til bibliotek/Tilføj til afspilningslisten og afspil"
1156
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1157
+msgid "Queue"
1158
+msgstr ""
1159
 
1160
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1161
-#, fuzzy
1162
-msgid "Append song to queue"
1163
-msgstr "Tilføj spor til afspilningsliste"
1164
+#: src/QueuePage.cxx:380
1165
+#, c-format
1166
+msgid "Queue on %s"
1167
+msgstr ""
1168
 
1169
-#: src/screen_help.cxx:140
1170
-msgid "Delete playlist"
1171
-msgstr "Slet afspilningsliste"
1172
+#. query the user for a filename
1173
+#: src/save_playlist.cxx:85
1174
+msgid "Save queue as"
1175
+msgstr ""
1176
 
1177
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1178
-msgid "Search"
1179
-msgstr "Søg"
1180
+#: src/save_playlist.cxx:107
1181
+#, fuzzy, c-format
1182
+msgid "Replace %s?"
1183
+msgstr "Erstat '%s' [%s/%s] ? "
1184
 
1185
-#: src/screen_help.cxx:151
1186
-msgid "Select and play"
1187
-msgstr "Vælg og afspil"
1188
+#. success
1189
+#: src/save_playlist.cxx:128
1190
+#, c-format
1191
+msgid "Saved %s"
1192
+msgstr "Gemt %s"
1193
 
1194
-#: src/screen_help.cxx:162
1195
-msgid "View Lyrics"
1196
-msgstr "Gennemse sangtekster"
1197
+#: src/screen_artist.cxx:186
1198
+#, c-format
1199
+msgid "All tracks of artist: %s"
1200
+msgstr "Alle spor fra kunstneren: %s"
1201
 
1202
-#: src/screen_help.cxx:163
1203
-msgid "(Re)load lyrics"
1204
-msgstr "(Gen)indlæs santekster"
1205
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1206
+msgid "Album"
1207
+msgstr "Album"
1208
 
1209
-#. to translators: this hotkey aborts the retrieval of lyrics
1210
-#. from the server
1211
-#: src/screen_help.cxx:166
1212
-msgid "Interrupt retrieval"
1213
-msgstr "Abryd hentning"
1214
+#: src/screen_artist.cxx:195
1215
+#, fuzzy, c-format
1216
+msgid "Tracks of no album of artist: %s"
1217
+msgstr "Album fra kunstneren: %s"
1218
 
1219
-#: src/screen_help.cxx:167
1220
-msgid "Download lyrics for currently playing song"
1221
-msgstr "Download tekst for det nummer der afspilles"
1222
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1223
+msgid "Artist"
1224
+msgstr "Kunstner"
1225
 
1226
-#: src/screen_help.cxx:168
1227
+#: src/screen_client.cxx:41
1228
 #, fuzzy
1229
-msgid "Add or edit lyrics"
1230
-msgstr "Gem sagtekster"
1231
+msgid "Database update running"
1232
+msgstr "Databasen opdateres..."
1233
 
1234
-#: src/screen_help.cxx:169
1235
-msgid "Save lyrics"
1236
-msgstr "Gem sagtekster"
1237
+#: src/screen_client.cxx:48
1238
+#, c-format
1239
+msgid "Database update of %s started"
1240
+msgstr "Database opdatering af %s startet"
1241
 
1242
-#: src/screen_help.cxx:170
1243
-#, fuzzy
1244
-msgid "Delete saved lyrics"
1245
-msgstr "Gem sagtekster"
1246
+#: src/screen_client.cxx:51
1247
+msgid "Database update started"
1248
+msgstr "Database opdatering startet"
1249
 
1250
-#: src/screen_help.cxx:177
1251
-msgid "Enable/disable output"
1252
-msgstr "Slå output til/fra"
1253
+#: src/screen.cxx:160
1254
+msgid "Repeat mode is on"
1255
+msgstr "Gentagelse er slået til"
1256
 
1257
-#: src/screen_help.cxx:184
1258
-msgid "Write a message"
1259
-msgstr ""
1260
+#: src/screen.cxx:161
1261
+msgid "Repeat mode is off"
1262
+msgstr "Gentagelse er slået fra"
1263
 
1264
-#: src/screen_help.cxx:189
1265
-msgid "Keydef screen"
1266
-msgstr "Tastdefinitions skærm"
1267
+#: src/screen.cxx:165
1268
+msgid "Random mode is on"
1269
+msgstr "Tilfældig orden slået til"
1270
 
1271
-#: src/screen_help.cxx:191
1272
-msgid "Edit keydefs for selected command"
1273
-msgstr "Redigér tastdefinitioner for udvalgte kommandoer"
1274
+#: src/screen.cxx:166
1275
+msgid "Random mode is off"
1276
+msgstr "Tilfældig orden slået fra"
1277
 
1278
-#: src/screen_help.cxx:192
1279
-msgid "Remove selected keydef"
1280
-msgstr "Fjern valgte tastdefinitioner"
1281
+#. "single" mode means
1282
+#. that MPD will
1283
+#. automatically stop
1284
+#. after playing one
1285
+#. single song
1286
+#: src/screen.cxx:175
1287
+msgid "Single mode is on"
1288
+msgstr "Single afspilning slået til"
1289
 
1290
-#: src/screen_help.cxx:193
1291
-#, fuzzy
1292
-msgid "Add a keydef"
1293
-msgstr "Definér ny tast"
1294
+#: src/screen.cxx:176
1295
+msgid "Single mode is off"
1296
+msgstr "Single afspilning slået fra"
1297
 
1298
-#: src/screen_help.cxx:194
1299
-msgid "Go up a level"
1300
-msgstr "Gå et niveau op"
1301
+#. "consume" mode means
1302
+#. that MPD removes each
1303
+#. song which has
1304
+#. finished playing
1305
+#: src/screen.cxx:184
1306
+msgid "Consume mode is on"
1307
+msgstr "\"Consume mode\" er slået til"
1308
 
1309
-#: src/screen_help.cxx:195
1310
-msgid "Apply and save changes"
1311
-msgstr "Anvend og gem ændringer"
1312
+#: src/screen.cxx:185
1313
+msgid "Consume mode is off"
1314
+msgstr "\"Consume mode\" er slået fra"
1315
 
1316
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1317
-msgid "Help"
1318
-msgstr "Hjælp"
1319
+#: src/screen.cxx:188
1320
+#, c-format
1321
+msgid "Crossfade %d seconds"
1322
+msgstr "Crossfade %d sekunder"
1323
 
1324
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1325
-msgid "Error: Screen too small"
1326
-msgstr "Fejl: Skærm for lille"
1327
+#: src/screen.cxx:200
1328
+msgid "Database updated"
1329
+msgstr "Databasen er opdateret"
1330
 
1331
-#: src/screen_keydef.cxx:141
1332
-msgid "You have new key bindings"
1333
-msgstr "Taste bindinger opdaterede"
1334
+#: src/screen.cxx:250
1335
+msgid "Find mode: Wrapped"
1336
+msgstr "Søg (begynd forfra)"
1337
 
1338
-#: src/screen_keydef.cxx:143
1339
-msgid "Keybindings unchanged."
1340
-msgstr "Taste bindinger uændrede!"
1341
+#: src/screen.cxx:251
1342
+msgid "Find mode: Normal"
1343
+msgstr "Søg normalt (start/slut)"
1344
 
1345
-#: src/screen_keydef.cxx:153
1346
-#, c-format
1347
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1348
-msgstr "Fejl: Kunne ikke oprette mappe ~/.ncmpc - %s"
1349
+#: src/screen.cxx:256
1350
+msgid "Auto center mode: On"
1351
+msgstr "Automatisk centrering er aktiv"
1352
 
1353
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1354
-#, c-format
1355
-msgid "Error: %s - %s"
1356
-msgstr "Fejl: %s - %s"
1357
+#: src/screen.cxx:257
1358
+msgid "Auto center mode: Off"
1359
+msgstr "Automatisk centrering er inaktiv"
1360
+
1361
+#: src/screen_find.cxx:31
1362
+msgid "Find"
1363
+msgstr "Søg"
1364
+
1365
+#: src/screen_find.cxx:32
1366
+msgid "Find backward"
1367
+msgstr "Søg (baglæns)"
1368
 
1369
-#: src/screen_keydef.cxx:171
1370
+#: src/screen_find.cxx:33
1371
+msgid "Jump"
1372
+msgstr "Spring"
1373
+
1374
+#: src/screen_find.cxx:79
1375
 #, c-format
1376
-msgid "Wrote %s"
1377
-msgstr "Skrev %s"
1378
+msgid "Unable to find '%s'"
1379
+msgstr "Kan ikke finde '%s'"
1380
 
1381
-#: src/screen_keydef.cxx:250
1382
+#: src/screen_keydef.cxx:161
1383
 msgid "Deleted"
1384
 msgstr "Slettet"
1385
 
1386
-#: src/screen_keydef.cxx:265
1387
+#: src/screen_keydef.cxx:177
1388
 #, c-format
1389
 msgid "Enter new key for %s: "
1390
 msgstr "Ny tast for %s: "
1391
 
1392
-#: src/screen_keydef.cxx:276
1393
+#: src/screen_keydef.cxx:187
1394
 msgid "Ctrl-Space can't be used"
1395
 msgstr ""
1396
 
1397
-#: src/screen_keydef.cxx:282
1398
+#: src/screen_keydef.cxx:193
1399
 #, c-format
1400
 msgid "Error: key %s is already used for %s"
1401
 msgstr "Tasten %s anvendes allerede til %s"
1402
 
1403
-#: src/screen_keydef.cxx:291
1404
+#: src/screen_keydef.cxx:202
1405
 #, c-format
1406
 msgid "Assigned %s to %s"
1407
 msgstr "Tildelt %s til %s"
1408
 
1409
-#: src/screen_keydef.cxx:317
1410
-msgid "===> Apply key bindings "
1411
-msgstr "==> Anvend taste bindinger "
1412
-
1413
-#: src/screen_keydef.cxx:319
1414
-msgid "===> Apply & Save key bindings  "
1415
-msgstr "==> Anvend og gem taste bindinger  "
1416
-
1417
-#: src/screen_keydef.cxx:347
1418
+#: src/screen_keydef.cxx:229
1419
 msgid "Add new key"
1420
 msgstr "Definér ny tast"
1421
 
1422
-#: src/screen_keydef.cxx:410
1423
-msgid "Note: Did you forget to 'Apply' your changes?"
1424
-msgstr "OBS! Du glemte vel ikke at 'anvende' dine ændringer?"
1425
-
1426
-#: src/screen_keydef.cxx:417
1427
-msgid "Edit key bindings"
1428
-msgstr "Modificer taste bindinger"
1429
-
1430
-#: src/screen_keydef.cxx:419
1431
+#: src/screen_keydef.cxx:251
1432
 #, c-format
1433
 msgid "Edit keys for %s"
1434
 msgstr "Modificer tast for '%s'"
1435
 
1436
-#. translators: no lyrics were found for the song
1437
-#: src/screen_lyrics.cxx:208
1438
-msgid "No lyrics"
1439
-msgstr "Ingen sangtekster"
1440
-
1441
-#: src/screen_lyrics.cxx:226
1442
-#, c-format
1443
-msgid "Lyrics timeout occurred after %d seconds"
1444
-msgstr ""
1445
-
1446
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1447
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1448
-msgid "Lyrics"
1449
-msgstr "Sangtekster"
1450
-
1451
-#. translators: this message is displayed
1452
-#. while data is retrieved
1453
-#: src/screen_lyrics.cxx:330
1454
-msgid "loading..."
1455
-msgstr "indlæser..."
1456
-
1457
-#: src/screen_lyrics.cxx:361
1458
-msgid "Editor not configured"
1459
-msgstr ""
1460
-
1461
-#: src/screen_lyrics.cxx:367
1462
-msgid "Do you really want to start an editor and edit these lyrics?"
1463
-msgstr ""
1464
-
1465
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1466
-msgid "Can't start editor"
1467
-msgstr ""
1468
-
1469
-#: src/screen_lyrics.cxx:411
1470
-#, c-format
1471
-msgid "Editor exited unexpectedly (%d)"
1472
-msgstr ""
1473
-
1474
-#: src/screen_lyrics.cxx:414
1475
-#, c-format
1476
-msgid "Editor exited unexpectedly (signal %d)"
1477
-msgstr ""
1478
-
1479
-#. lyrics for the song were saved on hard disk
1480
-#: src/screen_lyrics.cxx:436
1481
-msgid "Lyrics saved"
1482
-msgstr "Sangtekster gemt"
1483
+#: src/screen_keydef.cxx:393
1484
+msgid "You have new key bindings"
1485
+msgstr "Taste bindinger opdaterede"
1486
 
1487
-#: src/screen_lyrics.cxx:443
1488
-#, fuzzy
1489
-msgid "Lyrics deleted"
1490
-msgstr "Afspilningslisten slettet"
1491
+#: src/screen_keydef.cxx:395
1492
+msgid "Keybindings unchanged."
1493
+msgstr "Taste bindinger uændrede!"
1494
 
1495
-#: src/screen_lyrics.cxx:446
1496
+#: src/screen_keydef.cxx:405
1497
 #, fuzzy
1498
-msgid "No saved lyrics"
1499
-msgstr "Gem sagtekster"
1500
+msgid "Unable to write configuration"
1501
+msgstr "Ufuldstændig hotkey konfiguration"
1502
 
1503
-#: src/screen_outputs.cxx:60
1504
+#: src/screen_keydef.cxx:421
1505
 #, c-format
1506
-msgid "Output '%s' enabled"
1507
-msgstr "Output '%s' slået til"
1508
+msgid "Wrote %s"
1509
+msgstr "Skrev %s"
1510
 
1511
-#: src/screen_outputs.cxx:71
1512
-#, c-format
1513
-msgid "Output '%s' disabled"
1514
-msgstr "Output '%s' slået fra"
1515
+#: src/screen_keydef.cxx:433
1516
+msgid "===> Apply key bindings "
1517
+msgstr "==> Anvend taste bindinger "
1518
 
1519
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1520
-msgid "Outputs"
1521
-msgstr "Output"
1522
+#: src/screen_keydef.cxx:435
1523
+msgid "===> Apply & Save key bindings  "
1524
+msgstr "==> Anvend og gem taste bindinger  "
1525
 
1526
-#. get path
1527
-#: src/screen_queue.cxx:274
1528
-msgid "Add"
1529
-msgstr "Tilføj"
1530
+#: src/screen_keydef.cxx:472
1531
+msgid "Edit key bindings"
1532
+msgstr "Modificer taste bindinger"
1533
 
1534
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1535
-msgid "Queue"
1536
-msgstr ""
1537
+#: src/screen_keydef.cxx:554
1538
+msgid "Note: Did you forget to 'Apply' your changes?"
1539
+msgstr "OBS! Du glemte vel ikke at 'anvende' dine ændringer?"
1540
 
1541
-#: src/screen_queue.cxx:384
1542
-#, c-format
1543
-msgid "Queue on %s"
1544
+#: src/screen_keydef.cxx:604
1545
+msgid "Keys"
1546
 msgstr ""
1547
 
1548
-#: src/screen_search.cxx:48
1549
+#: src/screen_utils.cxx:124
1550
+msgid "Password"
1551
+msgstr "Adgangskode"
1552
+
1553
+#: src/SearchPage.cxx:51
1554
 msgid "artist"
1555
 msgstr "kunstner"
1556
 
1557
-#: src/screen_search.cxx:49
1558
+#: src/SearchPage.cxx:52
1559
 msgid "album"
1560
 msgstr "album"
1561
 
1562
-#: src/screen_search.cxx:50
1563
+#: src/SearchPage.cxx:53
1564
 msgid "title"
1565
 msgstr "titel"
1566
 
1567
-#: src/screen_search.cxx:51
1568
+#: src/SearchPage.cxx:54
1569
 msgid "track"
1570
 msgstr "spor"
1571
 
1572
-#: src/screen_search.cxx:52
1573
+#: src/SearchPage.cxx:55
1574
 msgid "name"
1575
 msgstr "navn"
1576
 
1577
-#: src/screen_search.cxx:53
1578
+#: src/SearchPage.cxx:56
1579
 msgid "genre"
1580
 msgstr "genre"
1581
 
1582
-#: src/screen_search.cxx:54
1583
+#: src/SearchPage.cxx:57
1584
 msgid "date"
1585
 msgstr "dato"
1586
 
1587
-#: src/screen_search.cxx:55
1588
+#: src/SearchPage.cxx:58
1589
 msgid "composer"
1590
 msgstr "komponist"
1591
 
1592
-#: src/screen_search.cxx:56
1593
+#: src/SearchPage.cxx:59
1594
 msgid "performer"
1595
 msgstr "udførende"
1596
 
1597
-#: src/screen_search.cxx:57
1598
+#: src/SearchPage.cxx:60
1599
 msgid "comment"
1600
 msgstr "kommentar"
1601
 
1602
-#: src/screen_search.cxx:65
1603
+#: src/SearchPage.cxx:68
1604
 msgid "file"
1605
 msgstr "fil"
1606
 
1607
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1608
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1609
 msgid "Title"
1610
 msgstr "Titel"
1611
 
1612
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1613
-msgid "Artist"
1614
-msgstr "Kunstner"
1615
-
1616
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1617
-msgid "Album"
1618
-msgstr "Album"
1619
-
1620
-#: src/screen_search.cxx:85
1621
+#: src/SearchPage.cxx:88
1622
 msgid "Filename"
1623
 msgstr "Filnavn"
1624
 
1625
-#: src/screen_search.cxx:86
1626
+#: src/SearchPage.cxx:89
1627
 msgid "Artist + Title"
1628
 msgstr "Kunstner + Titel"
1629
 
1630
-#: src/screen_search.cxx:244
1631
-#, c-format
1632
-msgid "No argument for search tag %s"
1633
-msgstr "Inter argument for søge tag %s"
1634
-
1635
-#: src/screen_search.cxx:253
1636
+#: src/SearchPage.cxx:270
1637
 #, c-format
1638
 msgid "Bad search tag %s"
1639
 msgstr "Ugyldigt søge tag %s"
1640
 
1641
-#. if( pattern==nullptr )
1642
-#. search_new(screen, c);
1643
-#. else
1644
-#: src/screen_search.cxx:400
1645
-#, c-format
1646
-msgid "Press %s for a new search"
1647
-msgstr "Tryk på %s for en ny søgning"
1648
-
1649
-#: src/screen_search.cxx:427
1650
-#, c-format
1651
-msgid "Search: %s"
1652
-msgstr "Søg: %s"
1653
-
1654
-#: src/screen_search.cxx:430
1655
+#: src/SearchPage.cxx:284
1656
 #, c-format
1657
-msgid "Search: Results for %s [%s]"
1658
-msgstr "Søg: Resultater for %s [%s]"
1659
+msgid "No argument for search tag %s"
1660
+msgstr "Inter argument for søge tag %s"
1661
 
1662
-#: src/screen_search.cxx:434
1663
-#, c-format
1664
-msgid "Search: Press %s for a new search [%s]"
1665
-msgstr "Tryk på %s for en ny søgning [%s]"
1666
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1667
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1668
+msgid "Search"
1669
+msgstr "Søg"
1670
 
1671
-#: src/screen_search.cxx:458
1672
+#: src/SearchPage.cxx:436
1673
 #, c-format
1674
 msgid "Search mode: %s"
1675
 msgstr "Søg efter: %s"
1676
 
1677
-#: src/screen_song.cxx:54
1678
+#: src/SongPage.cxx:67
1679
 msgid "Length"
1680
 msgstr "Længde"
1681
 
1682
-#: src/screen_song.cxx:55
1683
+#: src/SongPage.cxx:68
1684
 msgid "Position"
1685
 msgstr ""
1686
 
1687
-#: src/screen_song.cxx:56
1688
+#: src/SongPage.cxx:69
1689
 msgid "Composer"
1690
 msgstr "Komponist"
1691
 
1692
-#: src/screen_song.cxx:57
1693
+#: src/SongPage.cxx:70
1694
 msgid "Name"
1695
 msgstr "Navn"
1696
 
1697
-#: src/screen_song.cxx:58
1698
+#: src/SongPage.cxx:71
1699
 msgid "Disc"
1700
 msgstr "Disk"
1701
 
1702
-#: src/screen_song.cxx:59
1703
+#: src/SongPage.cxx:72
1704
 msgid "Track"
1705
 msgstr "Spor"
1706
 
1707
-#: src/screen_song.cxx:60
1708
+#: src/SongPage.cxx:73
1709
 msgid "Date"
1710
 msgstr "Dato"
1711
 
1712
-#: src/screen_song.cxx:61
1713
+#: src/SongPage.cxx:74
1714
 msgid "Genre"
1715
 msgstr "Genre"
1716
 
1717
-#: src/screen_song.cxx:62
1718
+#: src/SongPage.cxx:75
1719
 msgid "Comment"
1720
 msgstr "Kommentar"
1721
 
1722
-#: src/screen_song.cxx:63
1723
+#: src/SongPage.cxx:76
1724
 msgid "Path"
1725
 msgstr "Sti"
1726
 
1727
-#: src/screen_song.cxx:64
1728
+#: src/SongPage.cxx:77
1729
 msgid "Bitrate"
1730
 msgstr "Bithastighed"
1731
 
1732
-#: src/screen_song.cxx:65
1733
+#: src/SongPage.cxx:78
1734
 msgid "Format"
1735
 msgstr ""
1736
 
1737
-#: src/screen_song.cxx:82
1738
+#: src/SongPage.cxx:95
1739
 msgid "Number of artists"
1740
 msgstr "Antal kunstnere"
1741
 
1742
-#: src/screen_song.cxx:83
1743
+#: src/SongPage.cxx:96
1744
 msgid "Number of albums"
1745
 msgstr "Antal albums"
1746
 
1747
-#: src/screen_song.cxx:84
1748
+#: src/SongPage.cxx:97
1749
 msgid "Number of songs"
1750
 msgstr "Antal sange"
1751
 
1752
-#: src/screen_song.cxx:85
1753
+#: src/SongPage.cxx:98
1754
 msgid "Uptime"
1755
 msgstr "Oppetid"
1756
 
1757
-#: src/screen_song.cxx:86
1758
+#: src/SongPage.cxx:99
1759
 msgid "Most recent db update"
1760
 msgstr "Seneste db opdatering"
1761
 
1762
-#: src/screen_song.cxx:87
1763
+#: src/SongPage.cxx:100
1764
 msgid "Playtime"
1765
 msgstr "Spilletid"
1766
 
1767
-#: src/screen_song.cxx:88
1768
+#: src/SongPage.cxx:101
1769
 msgid "DB playtime"
1770
 msgstr "DB spilletid"
1771
 
1772
-#: src/screen_song.cxx:173
1773
+#: src/SongPage.cxx:204
1774
 msgid "Song viewer"
1775
 msgstr "Sang viser"
1776
 
1777
-#: src/screen_song.cxx:337
1778
+#: src/SongPage.cxx:370
1779
 msgid "MPD statistics"
1780
 msgstr "MPD statistik"
1781
 
1782
-#: src/screen_song.cxx:427
1783
+#: src/SongPage.cxx:455
1784
 msgid "Selected song"
1785
 msgstr "Valgt nummer"
1786
 
1787
-#: src/screen_song.cxx:437
1788
+#: src/SongPage.cxx:465
1789
 msgid "Currently playing song"
1790
 msgstr "Nummer der afspilles"
1791
 
1792
-#: src/screen_song.cxx:442
1793
+#: src/SongPage.cxx:470
1794
 #, c-format
1795
 msgid "%d kbps"
1796
 msgstr "%d kb/sek"
1797
 
1798
-#. NOTE: if one day a translator decides to use a multi-byte character
1799
-#. for one of the yes/no keys, we'll have to parse it properly
1800
-#: src/screen_utils.cxx:80
1801
-#, fuzzy, c-format
1802
-msgid "%s [%s/%s] "
1803
-msgstr "Erstat '%s' [%s/%s] ? "
1804
-
1805
-#: src/screen_utils.cxx:121
1806
-msgid "Password"
1807
-msgstr "Adgangskode"
1808
+#: src/SongPage.cxx:554
1809
+msgid "Song"
1810
+msgstr ""
1811
 
1812
-#: src/status_bar.cxx:121
1813
+#: src/StatusBar.cxx:104
1814
 msgid "Playing:"
1815
 msgstr "Afspiller:"
1816
 
1817
-#: src/status_bar.cxx:124
1818
+#: src/StatusBar.cxx:108
1819
 msgid "[Paused]"
1820
 msgstr "[Pause]"
1821
 
1822
-#: src/title_bar.cxx:99
1823
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1824
+#, fuzzy
1825
+msgid "Unknown color"
1826
+msgstr "Ukendt kommando"
1827
+
1828
+#: src/Styles.cxx:333
1829
+#, fuzzy
1830
+msgid "Unknown color field"
1831
+msgstr "Advarsel: Ukendt farve felt - %s.\n"
1832
+
1833
+#: src/Styles.cxx:375
1834
+msgid "Terminal lacks color capabilities"
1835
+msgstr "Terminalen understøtter ikke farver"
1836
+
1837
+#: src/time_format.cxx:44
1838
+msgid "year"
1839
+msgstr ""
1840
+
1841
+#: src/time_format.cxx:46
1842
+msgid "years"
1843
+msgstr ""
1844
+
1845
+#: src/time_format.cxx:54
1846
+msgid "week"
1847
+msgstr ""
1848
+
1849
+#: src/time_format.cxx:57
1850
+msgid "weeks"
1851
+msgstr ""
1852
+
1853
+#: src/time_format.cxx:65
1854
+msgid "day"
1855
+msgstr ""
1856
+
1857
+#: src/time_format.cxx:68
1858
+msgid "days"
1859
+msgstr ""
1860
+
1861
+#: src/TitleBar.cxx:100
1862
 msgid "Volume n/a"
1863
 msgstr "Volumen: n/a"
1864
 
1865
-#: src/title_bar.cxx:101
1866
+#: src/TitleBar.cxx:102
1867
 #, c-format
1868
 msgid "Volume %d%%"
1869
 msgstr "Volumen: %d%%"
1870
 
1871
+#, fuzzy
1872
+#~ msgid "Add url/file to queue"
1873
+#~ msgstr "Tilføj URL eller fil til afspilningslisten"
1874
+
1875
+#~ msgid "Move song up"
1876
+#~ msgstr "Flyt markøren op i afspilningslisten"
1877
+
1878
+#~ msgid "Move song down"
1879
+#~ msgstr "Flyt markøren ned i afspilningslisten"
1880
+
1881
+#~ msgid "Press %s for a new search"
1882
+#~ msgstr "Tryk på %s for en ny søgning"
1883
+
1884
+#~ msgid "Search: %s"
1885
+#~ msgstr "Søg: %s"
1886
+
1887
+#~ msgid "Search: Results for %s [%s]"
1888
+#~ msgstr "Søg: Resultater for %s [%s]"
1889
+
1890
+#~ msgid "Search: Press %s for a new search [%s]"
1891
+#~ msgstr "Tryk på %s for en ny søgning [%s]"
1892
+
1893
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1894
+#~ msgstr "Forbinder til %s... [Tryk %s for at afbryde]"
1895
+
1896
+#~ msgid "press %s for the key editor"
1897
+#~ msgstr "tryk på %s for at redigere"
1898
+
1899
+#~ msgid "Album: %s - %s"
1900
+#~ msgstr "Album: %s - %s"
1901
+
1902
+#, fuzzy
1903
+#~ msgid "Adding album %s..."
1904
+#~ msgstr "Henter %s..."
1905
+
1906
+#, fuzzy
1907
+#~ msgid "Adding %s..."
1908
+#~ msgstr "Tilføjer mappen %s...\n"
1909
+
1910
+#~ msgid "Error: Screen too small"
1911
+#~ msgstr "Fejl: Skærm for lille"
1912
+
1913
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1914
+#~ msgstr "Fejl: Kunne ikke oprette mappe ~/.ncmpc - %s"
1915
+
1916
+#~ msgid "Error: %s - %s"
1917
+#~ msgstr "Fejl: %s - %s"
1918
+
1919
+#, fuzzy
1920
+#~ msgid "%s [%s/%s] "
1921
+#~ msgstr "Erstat '%s' [%s/%s] ? "
1922
+
1923
 #~ msgid "Delete playlist %s [%s/%s] ? "
1924
 #~ msgstr "Slet '%s' [%s/%s] ? "
1925
 
1926
 #~ msgid "Warning: Unknown color - %s\n"
1927
 #~ msgstr "Advarsel: Ukendt farve - %s\n"
1928
 
1929
-#~ msgid "Connected to %s"
1930
-#~ msgstr "Forbundet til %s"
1931
-
1932
 #~ msgid "Shuffled playlist"
1933
 #~ msgstr "Afspilninsglisten blandet"
1934
 
1935
ncmpc-0.30.tar.xz/po/de.po -> ncmpc-0.32.tar.xz/po/de.po Changed
1951
 
1
@@ -8,434 +8,370 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.12\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
-"PO-Revision-Date: 2011-06-21 08:19+0000\n"
7
-"Last-Translator: Christoph Mende <angelos@gentoo.org>\n"
8
-"Language-Team: de <de@li.org>\n"
9
-"Language: \n"
10
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
11
+"PO-Revision-Date: 2018-09-10 18:18+0000\n"
12
+"Last-Translator: Max Kellermann <max.kellermann@gmail.com>\n"
13
+"Language-Team: German <https://hosted.weblate.org/projects/ncmpc/"
14
+"translations/de/>\n"
15
+"Language: de\n"
16
 "MIME-Version: 1.0\n"
17
 "Content-Type: text/plain; charset=UTF-8\n"
18
 "Content-Transfer-Encoding: 8bit\n"
19
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
20
+"X-Generator: Weblate 3.2-dev\n"
21
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
22
-"X-Generator: Launchpad (build 13265)\n"
23
 
24
-#: src/colors.cxx:156
25
-#, fuzzy
26
-msgid "Unknown color"
27
-msgstr "Unbekannter Befehl"
28
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
29
+msgid "All tracks"
30
+msgstr "Alle Stücke"
31
 
32
-#: src/colors.cxx:195
33
-#, fuzzy
34
-msgid "Unknown color field"
35
-msgstr "Warnung: Unbekanntes Farbfeld - %s\n"
36
+#: src/AlbumListPage.cxx:144
37
+msgid "Albums"
38
+msgstr "Alben"
39
 
40
-#: src/colors.cxx:228
41
-msgid "Terminal lacks support for changing colors"
42
-msgstr "Das Terminal unterstützt keine Farbwechsel"
43
+#: src/AlbumListPage.cxx:146
44
+#, c-format
45
+msgid "Albums of artist: %s"
46
+msgstr "Alben des Künstlers: %s"
47
 
48
-#: src/colors.cxx:237
49
-msgid "Terminal lacks color capabilities"
50
-msgstr "Das Terminal unterstützt keine Farben"
51
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
52
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
53
+#, fuzzy, c-format
54
+msgid "Adding '%s' to queue"
55
+msgstr "Füge '%s' der Playlist hinzu"
56
+
57
+#: src/ArtistListPage.cxx:114
58
+msgid "All artists"
59
+msgstr "Alle Künstler"
60
+
61
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
62
+#, c-format
63
+msgid "Key %s assigned to %s and %s"
64
+msgstr "Taste %s ist %s und %s zugeordnet"
65
 
66
-#: src/command.cxx:63
67
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
68
+msgid "Chat"
69
+msgstr ""
70
+
71
+#: src/ChatPage.cxx:160
72
+msgid "Your message"
73
+msgstr "Deine Nachricht"
74
+
75
+#: src/ChatPage.cxx:169
76
+msgid "Message could not be sent"
77
+msgstr "Nachricht konnte nicht gesendet werden"
78
+
79
+#: src/Command.cxx:29
80
 msgid "Key configuration screen"
81
 msgstr "Tastenkonfigurationsanzeige"
82
 
83
-#: src/command.cxx:66
84
+#: src/Command.cxx:32
85
 msgid "Quit"
86
 msgstr "Beenden"
87
 
88
-#: src/command.cxx:70
89
+#: src/Command.cxx:36
90
 msgid "Move cursor up"
91
 msgstr "Cursor nach oben bewegen"
92
 
93
-#: src/command.cxx:72
94
+#: src/Command.cxx:38
95
 msgid "Move cursor down"
96
 msgstr "Cursor nach unten bewegen"
97
 
98
-#: src/command.cxx:74
99
+#: src/Command.cxx:40
100
 msgid "Move cursor to the top of screen"
101
 msgstr "Markierung an den Anfang der Anzeige setzen"
102
 
103
-#: src/command.cxx:76
104
+#: src/Command.cxx:42
105
 msgid "Move cursor to the middle of screen"
106
 msgstr "Markierung in die Mitte der Anzeige setzen"
107
 
108
-#: src/command.cxx:78
109
+#: src/Command.cxx:44
110
 msgid "Move cursor to the bottom of screen"
111
 msgstr "Markierung ans Ende der Anzeige setzen"
112
 
113
-#: src/command.cxx:80
114
+#: src/Command.cxx:46
115
 msgid "Move cursor to the top of the list"
116
 msgstr "Markierung an den Anfang der Liste setzen"
117
 
118
-#: src/command.cxx:82
119
+#: src/Command.cxx:48
120
 msgid "Move cursor to the bottom of the list"
121
 msgstr "Markierung ans Ende der Liste setzen"
122
 
123
-#: src/command.cxx:84
124
+#: src/Command.cxx:50
125
 msgid "Page up"
126
 msgstr "Bild auf"
127
 
128
-#: src/command.cxx:86
129
+#: src/Command.cxx:52
130
 msgid "Page down"
131
 msgstr "Bild ab"
132
 
133
-#: src/command.cxx:88
134
+#: src/Command.cxx:54
135
 msgid "Range selection"
136
 msgstr "Mehrfachauswahl"
137
 
138
-#: src/command.cxx:90
139
+#: src/Command.cxx:56
140
 msgid "Scroll down one line"
141
 msgstr "Eine Zeile nach unten scrollen"
142
 
143
-#: src/command.cxx:92
144
+#: src/Command.cxx:58
145
 msgid "Scroll up one line"
146
 msgstr "Eine Zeile nach oben scrollen"
147
 
148
-#: src/command.cxx:94
149
+#: src/Command.cxx:60
150
 msgid "Scroll up half a screen"
151
 msgstr "Die halbe Anzeige nach oben scrollen"
152
 
153
-#: src/command.cxx:96
154
+#: src/Command.cxx:62
155
 msgid "Scroll down half a screen"
156
 msgstr "Die halbe Anzeige nach unten scrollen"
157
 
158
-#: src/command.cxx:98
159
+#: src/Command.cxx:64
160
 msgid "Select currently playing song"
161
 msgstr "Derzeit spielenden Song auswählen"
162
 
163
-#: src/command.cxx:103
164
+#: src/Command.cxx:69
165
 msgid "Help screen"
166
 msgstr "Hilfeanzeige"
167
 
168
-#: src/command.cxx:105 src/screen_help.cxx:119
169
+#: src/Command.cxx:71 src/HelpPage.cxx:140
170
 #, fuzzy
171
 msgid "Queue screen"
172
 msgstr "Tastenbelegungsanzeige"
173
 
174
-#: src/command.cxx:107 src/screen_help.cxx:134
175
+#: src/Command.cxx:73 src/HelpPage.cxx:155
176
 msgid "Browse screen"
177
 msgstr "Anzeige durchstöbern"
178
 
179
-#: src/command.cxx:112
180
+#: src/Command.cxx:78
181
 msgid "Play/Enter directory"
182
 msgstr "Abspielen/Verzeichnis öffnen"
183
 
184
-#: src/command.cxx:114
185
+#: src/Command.cxx:80
186
 msgid "Pause"
187
 msgstr "Pause"
188
 
189
-#: src/command.cxx:116
190
+#: src/Command.cxx:82
191
 msgid "Stop"
192
 msgstr "Stop"
193
 
194
-#: src/command.cxx:118
195
+#: src/Command.cxx:84
196
 msgid "Crop"
197
 msgstr "Playlist auf das markierte Lied reduzieren"
198
 
199
-#: src/command.cxx:120
200
+#: src/Command.cxx:86
201
 msgid "Next track"
202
 msgstr "Nächstes Stück"
203
 
204
-#: src/command.cxx:122
205
+#: src/Command.cxx:88
206
 msgid "Previous track"
207
 msgstr "Vorheriges Stück"
208
 
209
-#: src/command.cxx:124
210
+#: src/Command.cxx:90
211
 msgid "Seek forward"
212
 msgstr "Vorspulen"
213
 
214
-#: src/command.cxx:126
215
+#: src/Command.cxx:92
216
 msgid "Seek backward"
217
 msgstr "Zurückspulen"
218
 
219
-#: src/command.cxx:128
220
+#: src/Command.cxx:94
221
 msgid "Increase volume"
222
 msgstr "Lautstärke erhöhen"
223
 
224
-#: src/command.cxx:130
225
+#: src/Command.cxx:96
226
 msgid "Decrease volume"
227
 msgstr "Lautstärke verringern"
228
 
229
-#: src/command.cxx:132
230
+#: src/Command.cxx:98
231
 #, fuzzy
232
 msgid "Select/deselect song in queue"
233
 msgstr "Wähle Stück in der Playlist an/ab"
234
 
235
-#: src/command.cxx:134
236
+#: src/Command.cxx:100
237
 msgid "Select all listed items"
238
 msgstr "Alle angezeigten Lieder zur Playlist hinzufügen"
239
 
240
-#: src/command.cxx:136
241
+#: src/Command.cxx:102
242
 #, fuzzy
243
 msgid "Delete song from queue"
244
 msgstr "Lösche Song aus der Playlist"
245
 
246
-#: src/command.cxx:138
247
+#: src/Command.cxx:104
248
 msgid "Shuffle queue"
249
 msgstr ""
250
 
251
-#: src/command.cxx:140
252
+#: src/Command.cxx:106
253
 msgid "Clear queue"
254
 msgstr ""
255
 
256
-#: src/command.cxx:142
257
+#: src/Command.cxx:108
258
 msgid "Toggle repeat mode"
259
 msgstr "Schalte Wiederholungswiedergabe ein/aus"
260
 
261
-#: src/command.cxx:144
262
+#: src/Command.cxx:110
263
 msgid "Toggle random mode"
264
 msgstr "Schalte Zufallswiedergabe ein/aus"
265
 
266
-#: src/command.cxx:146
267
+#: src/Command.cxx:112
268
 msgid "Toggle single mode"
269
 msgstr "Einzelabspiel-Modus umschalten"
270
 
271
-#: src/command.cxx:148
272
+#: src/Command.cxx:114
273
 msgid "Toggle consume mode"
274
 msgstr "Verbrauchs-Modus Umschalten"
275
 
276
-#: src/command.cxx:150
277
+#: src/Command.cxx:116
278
 msgid "Toggle crossfade mode"
279
 msgstr "Schalte Crossfade-Wiedergabe ein/aus"
280
 
281
-#: src/command.cxx:152
282
+#: src/Command.cxx:118
283
 msgid "Start a music database update"
284
 msgstr "Starte eine Aktualisierung der Musikdatenbank"
285
 
286
-#: src/command.cxx:154
287
+#: src/Command.cxx:120
288
 msgid "Save queue"
289
 msgstr ""
290
 
291
-#: src/command.cxx:156
292
+#: src/Command.cxx:122 src/HelpPage.cxx:174
293
 #, fuzzy
294
-msgid "Add url/file to queue"
295
-msgstr "Füge eine URL/Datei der Playlist hinzu"
296
+msgid "Append song to queue"
297
+msgstr "Song zur Playlist hinzufügen"
298
 
299
-#: src/command.cxx:159
300
+#: src/Command.cxx:125
301
 msgid "Go to root directory"
302
 msgstr "Basis-Verzeichnis öffnen"
303
 
304
-#: src/command.cxx:161
305
+#: src/Command.cxx:127
306
 msgid "Go to parent directory"
307
 msgstr "Übergeordnetes Verzeichnis öffnen"
308
 
309
-#: src/command.cxx:164
310
+#: src/Command.cxx:130
311
 msgid "Locate song in browser"
312
 msgstr "Lied in Datenbank orten"
313
 
314
-#: src/command.cxx:168
315
+#: src/Command.cxx:134
316
 msgid "Move item up"
317
 msgstr "Bewege es nach oben"
318
 
319
-#: src/command.cxx:170
320
+#: src/Command.cxx:136
321
 msgid "Move item down"
322
 msgstr "Bewege es nach unten"
323
 
324
-#: src/command.cxx:172
325
+#: src/Command.cxx:138
326
 msgid "Refresh screen"
327
 msgstr "Aktualisiere Anzeige"
328
 
329
 #. translators: toggle between wrapping and non-wrapping
330
 #. search
331
-#: src/command.cxx:179
332
+#: src/Command.cxx:145
333
 msgid "Toggle find mode"
334
 msgstr "Wechsle den Suchmodus"
335
 
336
 #. translators: the auto center mode always centers the song
337
 #. currently being played
338
-#: src/command.cxx:183
339
+#: src/Command.cxx:149
340
 msgid "Toggle auto center mode"
341
 msgstr "Schalte den Autozentrier-Modus ein/aus"
342
 
343
-#: src/command.cxx:188
344
+#: src/Command.cxx:154
345
 msgid "Next screen"
346
 msgstr "Nächste Anzeige"
347
 
348
-#: src/command.cxx:190
349
+#: src/Command.cxx:156
350
 msgid "Previous screen"
351
 msgstr "Vorherige Anzeige"
352
 
353
-#: src/command.cxx:192
354
+#: src/Command.cxx:158
355
 msgid "Swap to most recent screen"
356
 msgstr "Wechsle zur zuletzt benutzten Anzeige"
357
 
358
-#: src/command.cxx:197
359
+#: src/Command.cxx:163
360
 msgid "Forward find"
361
 msgstr "Vorwärtssuche"
362
 
363
-#: src/command.cxx:199
364
+#: src/Command.cxx:165
365
 msgid "Forward find next"
366
 msgstr "Vorwärtssuche fortsetzen"
367
 
368
-#: src/command.cxx:201
369
+#: src/Command.cxx:167
370
 msgid "Backward find"
371
 msgstr "Rückwärtssuche"
372
 
373
-#: src/command.cxx:203
374
+#: src/Command.cxx:169
375
 msgid "Backward find previous"
376
 msgstr "Rückwärtssuche fortsetzen"
377
 
378
 #. translators: this queries the user for a string
379
 #. * and jumps directly (while the user is typing)
380
 #. * to the entry which begins with this string
381
-#: src/command.cxx:208
382
+#: src/Command.cxx:174
383
 msgid "Jump to"
384
 msgstr "Springe zu"
385
 
386
-#: src/command.cxx:214
387
+#: src/Command.cxx:180
388
 msgid "Artist screen"
389
 msgstr "Künstlerdatenbank"
390
 
391
-#: src/command.cxx:218 src/screen_help.cxx:148
392
+#: src/Command.cxx:184 src/HelpPage.cxx:169
393
 msgid "Search screen"
394
 msgstr "Suchanzeige"
395
 
396
-#: src/command.cxx:220
397
+#: src/Command.cxx:186
398
 msgid "Change search mode"
399
 msgstr "Suchmodus wechseln"
400
 
401
-#: src/command.cxx:224
402
+#: src/Command.cxx:190
403
 msgid "View the selected and the currently playing song"
404
 msgstr "Zeige das ausgewählte und das gerade laufende Lied an"
405
 
406
-#: src/command.cxx:228 src/screen_help.cxx:160
407
+#: src/Command.cxx:194 src/HelpPage.cxx:181
408
 msgid "Lyrics screen"
409
 msgstr "Liedtextanzeige"
410
 
411
 #. translators: interrupt the current background action,
412
 #. e.g. stop loading lyrics from the internet
413
-#: src/command.cxx:232
414
+#: src/Command.cxx:198
415
 msgid "Interrupt action"
416
 msgstr "Kommando Unterbrechen"
417
 
418
-#: src/command.cxx:234
419
+#: src/Command.cxx:200
420
 msgid "Update Lyrics"
421
 msgstr "Liedtext aktualisieren"
422
 
423
-#: src/command.cxx:238
424
+#: src/Command.cxx:204
425
 msgid "Edit the current item"
426
 msgstr ""
427
 
428
-#: src/command.cxx:243 src/screen_help.cxx:175
429
+#: src/Command.cxx:209 src/HelpPage.cxx:196
430
 msgid "Outputs screen"
431
 msgstr "Anzeige der Ausgabegeräte"
432
 
433
-#: src/command.cxx:248 src/screen_help.cxx:182
434
+#: src/Command.cxx:214 src/HelpPage.cxx:203
435
 #, fuzzy
436
 msgid "Chat screen"
437
 msgstr "Nächste Anzeige"
438
 
439
-#: src/command.cxx:290
440
-msgid "Undefined"
441
-msgstr "Undefiniert"
442
-
443
-#: src/command.cxx:292
444
-msgid "Space"
445
-msgstr "Leertaste"
446
-
447
-#: src/command.cxx:294
448
-msgid "Enter"
449
-msgstr "Enter"
450
-
451
-#: src/command.cxx:296
452
-msgid "Backspace"
453
-msgstr "Backspace"
454
-
455
-#: src/command.cxx:298
456
-msgid "Delete"
457
-msgstr "Entf"
458
-
459
-#: src/command.cxx:300
460
-msgid "Up"
461
-msgstr "Oben"
462
-
463
-#: src/command.cxx:302
464
-msgid "Down"
465
-msgstr "Unten"
466
-
467
-#: src/command.cxx:304
468
-msgid "Left"
469
-msgstr "Links"
470
-
471
-#: src/command.cxx:306
472
-msgid "Right"
473
-msgstr "Rechts"
474
-
475
-#: src/command.cxx:308
476
-msgid "Home"
477
-msgstr "Pos1"
478
-
479
-#: src/command.cxx:310
480
-msgid "End"
481
-msgstr "Ende"
482
-
483
-#: src/command.cxx:312
484
-msgid "PageDown"
485
-msgstr "Bild ab"
486
-
487
-#: src/command.cxx:314
488
-msgid "PageUp"
489
-msgstr "Bild auf"
490
-
491
-#: src/command.cxx:316
492
-msgid "Tab"
493
-msgstr "Tab"
494
-
495
-#: src/command.cxx:318
496
-msgid "Shift+Tab"
497
-msgstr "Shift+Tab"
498
-
499
-#: src/command.cxx:320
500
-msgid "Esc"
501
-msgstr "Esc"
502
-
503
-#: src/command.cxx:322
504
-msgid "Insert"
505
-msgstr "Einfg"
506
-
507
-#: src/command.cxx:326
508
-#, c-format
509
-msgid "F%d"
510
-msgstr ""
511
-
512
-#: src/command.cxx:330
513
-#, c-format
514
-msgid "Ctrl-%c"
515
-msgstr ""
516
-
517
-#: src/command.cxx:332
518
-#, c-format
519
-msgid "Alt-%c"
520
-msgstr ""
521
-
522
-#: src/command.cxx:477 src/command.cxx:483
523
-#, c-format
524
-msgid "Key %s assigned to %s and %s"
525
-msgstr "Taste %s ist %s und %s zugeordnet"
526
-
527
 #. To translators: prefix for error messages
528
-#: src/conf.cxx:121
529
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
530
 msgid "Error"
531
 msgstr "Fehler"
532
 
533
-#: src/conf.cxx:135
534
+#: src/conf.cxx:128
535
 msgid "Word expected"
536
-msgstr ""
537
+msgstr "Wort erwartet"
538
 
539
-#: src/conf.cxx:152 src/conf.cxx:161
540
+#: src/conf.cxx:145 src/conf.cxx:154
541
 msgid "Malformed hotkey definition"
542
 msgstr "Fehlerhafte Definition der Tastenbelegung"
543
 
544
 #. the hotkey configuration contains an unknown
545
 #. command
546
-#: src/conf.cxx:185
547
+#: src/conf.cxx:178
548
 msgid "Unknown command"
549
 msgstr "Unbekannter Befehl"
550
 
551
 #. the hotkey configuration line is incomplete
552
-#: src/conf.cxx:198
553
+#: src/conf.cxx:191
554
 msgid "Incomplete hotkey configuration"
555
 msgstr "Unvollständige Konfiguration für Tastenbelegung"
556
 
557
@@ -443,821 +379,885 @@
558
 #. "elapsed" or "remaining" time of a song being
559
 #. played; in this case, the configuration file
560
 #. contained an invalid setting
561
-#: src/conf.cxx:234
562
+#: src/conf.cxx:227
563
 msgid "Bad time display type"
564
 msgstr "Ungültige Anzeigeart"
565
 
566
 #. an equals sign '=' was expected while parsing a
567
 #. configuration file line
568
-#: src/conf.cxx:247 src/conf.cxx:427
569
+#: src/conf.cxx:240 src/conf.cxx:418
570
 msgid "Missing '='"
571
 msgstr "Es fehlt ein '='"
572
 
573
-#: src/conf.cxx:298
574
+#: src/conf.cxx:291
575
 msgid "Bad color name"
576
 msgstr "Ungültiger Farbname"
577
 
578
-#: src/conf.cxx:308
579
+#: src/conf.cxx:301
580
 msgid "Incomplete color definition"
581
 msgstr "Unvollständige Farbkonfiguration"
582
 
583
-#: src/conf.cxx:314
584
+#: src/conf.cxx:307
585
 msgid "Invalid number"
586
 msgstr "Ungültige Zahl"
587
 
588
-#: src/conf.cxx:322
589
+#: src/conf.cxx:315
590
 msgid "Malformed color definition"
591
 msgstr "Fehlerhafte Farbdefinition"
592
 
593
 #. an unknown screen name was specified in the
594
 #. configuration file
595
-#: src/conf.cxx:356
596
+#: src/conf.cxx:353
597
 msgid "Unknown screen name"
598
 msgstr "Unbekannter Anzeigenname"
599
 
600
-#: src/conf.cxx:384
601
+#: src/conf.cxx:378
602
 msgid "Invalid search mode"
603
 msgstr "Ungültiger Suchmodus"
604
 
605
-#: src/conf.cxx:407
606
+#: src/conf.cxx:398
607
 msgid "Unknown search mode"
608
 msgstr "Unbekannter Suchmodus"
609
 
610
-#: src/conf.cxx:597
611
+#: src/conf.cxx:581
612
 msgid "Unknown configuration parameter"
613
 msgstr "Unbekannter Konfigurationsparameter"
614
 
615
-#: src/i18n.h:42
616
-msgid "y"
617
-msgstr "j"
618
+#: src/CustomColors.cxx:56
619
+msgid "Terminal lacks support for changing colors"
620
+msgstr "Das Terminal unterstützt keine Farbwechsel"
621
 
622
-#: src/i18n.h:43
623
-msgid "n"
624
-msgstr "n"
625
+#. translators: the "delete" command is only possible
626
+#. for playlists; the user attempted to delete a song
627
+#. or a directory or something else
628
+#: src/FileBrowserPage.cxx:260
629
+msgid "Deleting this item is not possible"
630
+msgstr "Dieses Objekt kann nicht gelöscht werden"
631
 
632
-#: src/list_window.cxx:554
633
-msgid "Range selection disabled"
634
-msgstr "Mehrfachauswahl deaktiviert"
635
+#: src/FileBrowserPage.cxx:268
636
+#, fuzzy, c-format
637
+msgid "Delete playlist %s?"
638
+msgstr "Lösche Playlist"
639
 
640
-#: src/list_window.cxx:559
641
-msgid "Range selection enabled"
642
-msgstr "Mehrfachauswahl aktiviert"
643
+#. translators: a dialog was aborted by the user
644
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
645
+#: src/screen_keydef.cxx:182
646
+msgid "Aborted"
647
+msgstr "Abbruch"
648
 
649
-#: src/Main.cxx:161
650
-#, c-format
651
-msgid "Connecting to %s...  [Press %s to abort]"
652
-msgstr "Verbinde mit %s…   [%s drücken, um abzubrechen]"
653
+#. translators: MPD deleted the playlist, as requested by the
654
+#. user
655
+#: src/FileBrowserPage.cxx:286
656
+msgid "Playlist deleted"
657
+msgstr "Playlist gelöscht"
658
+
659
+#. translators: caption of the browser screen
660
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
661
+msgid "Browse"
662
+msgstr "Stöbern"
663
 
664
-#: src/Main.cxx:182
665
+#: src/FileListPage.cxx:121
666
 #, fuzzy, c-format
667
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
668
-msgstr "Fehler: MPD-Version %d.%d.%d ist zu alt (%s wird benötigt)"
669
+msgid "Loading playlist '%s'"
670
+msgstr "Lade Playlist %s..."
671
 
672
-#: src/Main.cxx:317
673
-#, c-format
674
-msgid "press %s for the key editor"
675
-msgstr "drücken Sie %s für den Tasteneditor"
676
+#: src/HelpPage.cxx:60
677
+msgid "Movement"
678
+msgstr "Bewegung"
679
 
680
-#. To translators: these credits are shown
681
-#. when ncmpc is started with "--version"
682
-#: src/options.cxx:209 src/options.cxx:212
683
-msgid "translator-credits"
684
-msgstr ""
685
-"Übersetzer\n"
686
-"\n"
687
-"Launchpad Contributions:\n"
688
-"  BBO https://launchpad.net/~bbo\n"
689
-"  Christoph Mende https://launchpad.net/~cmende\n"
690
-"  Max Kellermann https://launchpad.net/~max-duempel\n"
691
-"  Monika Brinkert https://launchpad.net/~moni-sunpig\n"
692
-"  Samuel Creshal https://launchpad.net/~samuel-creshal\n"
693
-"  cmdrhenner https://launchpad.net/~cmdrhenner"
694
+#: src/HelpPage.cxx:105
695
+msgid "Global"
696
+msgstr "Global"
697
 
698
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
699
-msgid "Shuffled queue"
700
-msgstr ""
701
+#: src/HelpPage.cxx:142
702
+msgid "Play"
703
+msgstr "Abspielen"
704
 
705
-#: src/player_command.cxx:184
706
-msgid "Cleared queue"
707
-msgstr ""
708
+#: src/HelpPage.cxx:149
709
+msgid "Center"
710
+msgstr "Zentrieren"
711
 
712
-#. query the user for a filename
713
-#: src/save_playlist.cxx:109
714
-msgid "Save queue as"
715
-msgstr ""
716
+#: src/HelpPage.cxx:157
717
+msgid "Enter directory/Select and play song"
718
+msgstr "Verzeichnis öffnen/Stück auswählen und abspielen"
719
 
720
-#: src/save_playlist.cxx:140
721
-#, fuzzy, c-format
722
-msgid "Replace %s?"
723
-msgstr "Ersetze %s [%s/%s] ? "
724
+#: src/HelpPage.cxx:161
725
+msgid "Delete playlist"
726
+msgstr "Lösche Playlist"
727
 
728
-#. translators: a dialog was aborted by the user
729
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
730
-#: src/screen_lyrics.cxx:370
731
-msgid "Aborted"
732
-msgstr "Abbruch"
733
+#: src/HelpPage.cxx:171
734
+#, fuzzy
735
+msgid "New search"
736
+msgstr "Suche"
737
 
738
-#. success
739
-#: src/save_playlist.cxx:171
740
-#, c-format
741
-msgid "Saved %s"
742
-msgstr "%s gespeichert"
743
+#: src/HelpPage.cxx:172
744
+msgid "Select and play"
745
+msgstr "Auswählen und abspielen"
746
 
747
-#: src/screen.cxx:154
748
-msgid "Repeat mode is on"
749
-msgstr "Wiederhol-Modus ist aktiviert"
750
+#: src/HelpPage.cxx:183
751
+msgid "View Lyrics"
752
+msgstr "Liedtext lesen"
753
 
754
-#: src/screen.cxx:155
755
-msgid "Repeat mode is off"
756
-msgstr "Wiederhol-Modus ist deaktiviert"
757
+#: src/HelpPage.cxx:184
758
+msgid "(Re)load lyrics"
759
+msgstr "Text (neu) laden"
760
 
761
-#: src/screen.cxx:159
762
-msgid "Random mode is on"
763
-msgstr "Zufalls-Modus ist aktiviert"
764
+#. to translators: this hotkey aborts the retrieval of lyrics
765
+#. from the server
766
+#: src/HelpPage.cxx:187
767
+msgid "Interrupt retrieval"
768
+msgstr "Laden unterbrechen"
769
 
770
-#: src/screen.cxx:160
771
-msgid "Random mode is off"
772
-msgstr "Zufalls-Modus ist deaktiviert"
773
+#: src/HelpPage.cxx:188
774
+msgid "Download lyrics for currently playing song"
775
+msgstr "Liedtexte für aktuell laufendes Stück herunterladen"
776
 
777
-#. "single" mode means
778
-#. that MPD will
779
-#. automatically stop
780
-#. after playing one
781
-#. single song
782
-#: src/screen.cxx:169
783
-msgid "Single mode is on"
784
-msgstr "Einzelabspiel-Modus ist aktiviert"
785
+#: src/HelpPage.cxx:189
786
+#, fuzzy
787
+msgid "Add or edit lyrics"
788
+msgstr "Keine gespeicherten Texte"
789
 
790
-#: src/screen.cxx:170
791
-msgid "Single mode is off"
792
-msgstr "Einzelabspiel-Modus ist deaktiviert"
793
+#: src/HelpPage.cxx:190
794
+msgid "Save lyrics"
795
+msgstr "Liedtext speichern"
796
 
797
-#. "consume" mode means
798
-#. that MPD removes each
799
-#. song which has
800
-#. finished playing
801
-#: src/screen.cxx:178
802
-msgid "Consume mode is on"
803
-msgstr "Verbrauchs-Modus Aktiviert"
804
+#: src/HelpPage.cxx:191
805
+msgid "Delete saved lyrics"
806
+msgstr "Lösche gespeicherte Texte"
807
 
808
-#: src/screen.cxx:179
809
-msgid "Consume mode is off"
810
-msgstr "Verbrauchs-Modus Deaktiviert"
811
+#: src/HelpPage.cxx:198
812
+msgid "Enable/disable output"
813
+msgstr "Ausgabegerät aktivieren/deaktivieren"
814
 
815
-#: src/screen.cxx:182
816
-#, c-format
817
-msgid "Crossfade %d seconds"
818
-msgstr "%d Sekunden Crossfade"
819
+#: src/HelpPage.cxx:205
820
+msgid "Write a message"
821
+msgstr "Nachricht schreiben"
822
 
823
-#: src/screen.cxx:194
824
-msgid "Database updated"
825
-msgstr "Datenbank aktualisiert"
826
+#: src/HelpPage.cxx:210
827
+msgid "Keydef screen"
828
+msgstr "Tastenbelegungsanzeige"
829
 
830
-#: src/screen.cxx:226
831
-msgid "Find mode: Wrapped"
832
-msgstr "Suchmodus: Wrapped"
833
+#: src/HelpPage.cxx:212
834
+msgid "Edit keydefs for selected command"
835
+msgstr "Tastenbelegung für ausgewählten Befehl bearbeiten"
836
 
837
-#: src/screen.cxx:227
838
-msgid "Find mode: Normal"
839
-msgstr "Suchmodus: Normal"
840
+#: src/HelpPage.cxx:213
841
+msgid "Remove selected keydef"
842
+msgstr "Ausgewählte Tastenbelegung entfernen"
843
 
844
-#: src/screen.cxx:232
845
-msgid "Auto center mode: On"
846
-msgstr "Autozentriermodus: an"
847
+#: src/HelpPage.cxx:214
848
+#, fuzzy
849
+msgid "Add a keydef"
850
+msgstr "Füge neue Taste hinzu"
851
 
852
-#: src/screen.cxx:233
853
-msgid "Auto center mode: Off"
854
-msgstr "Autozentriermodus: aus"
855
+#: src/HelpPage.cxx:215
856
+msgid "Go up a level"
857
+msgstr "Eine Ebene nach oben"
858
 
859
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
860
-msgid "All tracks"
861
-msgstr "Alle Stücke"
862
+#: src/HelpPage.cxx:216
863
+msgid "Apply and save changes"
864
+msgstr "Änderungen bestätigen und speichern"
865
 
866
-#: src/screen_artist.cxx:384
867
-msgid "All artists"
868
-msgstr "Alle Künstler"
869
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
870
+msgid "Help"
871
+msgstr "Hilfe"
872
 
873
-#: src/screen_artist.cxx:389
874
-#, c-format
875
-msgid "Albums of artist: %s"
876
-msgstr "Alben des Künstlers: %s"
877
+#: src/i18n.h:43
878
+msgid "y"
879
+msgstr "j"
880
 
881
-#: src/screen_artist.cxx:398
882
-#, c-format
883
-msgid "All tracks of artist: %s"
884
-msgstr "Alle Lieder des Künstlers: %s"
885
+#: src/i18n.h:44
886
+msgid "n"
887
+msgstr "n"
888
 
889
-#: src/screen_artist.cxx:401
890
-#, c-format
891
-msgid "Album: %s - %s"
892
-msgstr "Album: %s - %s"
893
+#: src/KeyName.cxx:31
894
+msgid "Undefined"
895
+msgstr "Undefiniert"
896
 
897
-#: src/screen_artist.cxx:405
898
-#, c-format
899
-msgid "Tracks of no album of artist: %s"
900
-msgstr "Titel von keinem Album des Künstlers: %s"
901
+#: src/KeyName.cxx:33
902
+msgid "Space"
903
+msgstr "Leertaste"
904
 
905
-#: src/screen_artist.cxx:450
906
-#, c-format
907
-msgid "Adding album %s..."
908
-msgstr "Füge Album %s... hinzu"
909
+#: src/KeyName.cxx:35
910
+msgid "Enter"
911
+msgstr "Enter"
912
 
913
-#: src/screen_artist.cxx:452
914
-#, c-format
915
-msgid "Adding %s..."
916
-msgstr "Hinzufügen %s..."
917
+#: src/KeyName.cxx:37
918
+msgid "Backspace"
919
+msgstr "Backspace"
920
 
921
-#: src/screen_browser.cxx:122
922
-#, c-format
923
-msgid "Loading playlist %s..."
924
-msgstr "Lade Playlist %s..."
925
+#: src/KeyName.cxx:39
926
+msgid "Delete"
927
+msgstr "Entf"
928
 
929
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
930
-#: src/screen_browser.cxx:279
931
-#, fuzzy, c-format
932
-msgid "Adding '%s' to queue"
933
-msgstr "Füge '%s' der Playlist hinzu"
934
+#: src/KeyName.cxx:41
935
+msgid "Up"
936
+msgstr "Oben"
937
 
938
-#: src/screen_chat.cxx:59
939
-#, c-format
940
-msgid ""
941
-"connected to MPD %u.%u.%u (you need at least \n"
942
-"version 0.17.0 to use the chat feature)"
943
-msgstr ""
944
+#: src/KeyName.cxx:43
945
+msgid "Down"
946
+msgstr "Unten"
947
 
948
-#: src/screen_chat.cxx:177
949
-msgid "Your message"
950
-msgstr ""
951
+#: src/KeyName.cxx:45
952
+msgid "Left"
953
+msgstr "Links"
954
 
955
-#: src/screen_chat.cxx:186
956
-msgid "Message could not be sent"
957
-msgstr ""
958
+#: src/KeyName.cxx:47
959
+msgid "Right"
960
+msgstr "Rechts"
961
 
962
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
963
-msgid "Chat"
964
-msgstr ""
965
+#: src/KeyName.cxx:49
966
+msgid "Home"
967
+msgstr "Pos1"
968
 
969
-#: src/screen_client.cxx:41
970
-msgid "Database update running..."
971
-msgstr "Datenbankaktualisierung läuft..."
972
+#: src/KeyName.cxx:51
973
+msgid "End"
974
+msgstr "Ende"
975
 
976
-#: src/screen_client.cxx:49
977
-#, c-format
978
-msgid "Database update of %s started"
979
-msgstr "Datenbankaktualisierung von %s gestartet"
980
+#: src/KeyName.cxx:53
981
+msgid "PageDown"
982
+msgstr "Bild ab"
983
 
984
-#: src/screen_client.cxx:52
985
-msgid "Database update started"
986
-msgstr "Datenbankaktualisierung gestartet"
987
+#: src/KeyName.cxx:55
988
+msgid "PageUp"
989
+msgstr "Bild auf"
990
 
991
-#. translators: the "delete" command is only possible
992
-#. for playlists; the user attempted to delete a song
993
-#. or a directory or something else
994
-#: src/screen_file.cxx:200
995
-msgid "Deleting this item is not possible"
996
-msgstr "Dieses Objekt kann nicht gelöscht werden"
997
+#: src/KeyName.cxx:57
998
+msgid "Tab"
999
+msgstr "Tab"
1000
 
1001
-#: src/screen_file.cxx:207
1002
-#, fuzzy, c-format
1003
-msgid "Delete playlist %s?"
1004
-msgstr "Lösche Playlist"
1005
+#: src/KeyName.cxx:59
1006
+msgid "Shift+Tab"
1007
+msgstr "Shift+Tab"
1008
 
1009
-#. translators: MPD deleted the playlist, as requested by the
1010
-#. user
1011
-#: src/screen_file.cxx:227
1012
-msgid "Playlist deleted"
1013
-msgstr "Playlist gelöscht"
1014
+#: src/KeyName.cxx:61
1015
+msgid "Esc"
1016
+msgstr "Esc"
1017
 
1018
-#. translators: caption of the browser screen
1019
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1020
-msgid "Browse"
1021
-msgstr "Stöbern"
1022
+#: src/KeyName.cxx:63
1023
+msgid "Insert"
1024
+msgstr "Einfg"
1025
 
1026
-#: src/screen_find.cxx:29
1027
-msgid "Find"
1028
-msgstr "Suche"
1029
+#: src/KeyName.cxx:71
1030
+#, c-format
1031
+msgid "Ctrl-%c"
1032
+msgstr "Strg-%c"
1033
 
1034
-#: src/screen_find.cxx:30
1035
-msgid "Find backward"
1036
-msgstr "Suche rückwärts"
1037
+#: src/KeyName.cxx:73
1038
+#, c-format
1039
+msgid "Alt-%c"
1040
+msgstr "Alt-%c"
1041
 
1042
-#: src/screen_find.cxx:31
1043
-msgid "Jump"
1044
-msgstr "Springe zu"
1045
+#: src/ListWindow.cxx:491
1046
+msgid "Range selection disabled"
1047
+msgstr "Mehrfachauswahl deaktiviert"
1048
+
1049
+#: src/ListWindow.cxx:496
1050
+msgid "Range selection enabled"
1051
+msgstr "Mehrfachauswahl aktiviert"
1052
+
1053
+#. translators: no lyrics were found for the song
1054
+#: src/LyricsPage.cxx:236
1055
+msgid "No lyrics"
1056
+msgstr "Kein Liedtext verfügbar"
1057
 
1058
-#: src/screen_find.cxx:82
1059
+#: src/LyricsPage.cxx:254
1060
 #, c-format
1061
-msgid "Unable to find '%s'"
1062
-msgstr "Kann '%s' nicht finden"
1063
+msgid "Lyrics timeout occurred after %d seconds"
1064
+msgstr "Liedtext-Timeout trat nach %d Sekunden auf"
1065
 
1066
-#: src/screen_help.cxx:39
1067
-msgid "Movement"
1068
-msgstr "Bewegung"
1069
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1070
+#: src/LyricsPage.cxx:490
1071
+msgid "Lyrics"
1072
+msgstr "Liedtexte"
1073
 
1074
-#: src/screen_help.cxx:84
1075
-msgid "Global"
1076
-msgstr "Global"
1077
+#. translators: this message is displayed
1078
+#. while data is retrieved
1079
+#: src/LyricsPage.cxx:340
1080
+msgid "loading..."
1081
+msgstr "lade..."
1082
 
1083
-#: src/screen_help.cxx:121
1084
-msgid "Play"
1085
-msgstr "Abspielen"
1086
+#: src/LyricsPage.cxx:361
1087
+msgid "Editor not configured"
1088
+msgstr "Editor nicht konfiguriert"
1089
 
1090
-#: src/screen_help.cxx:124
1091
-msgid "Move song up"
1092
-msgstr "Stück nach oben bewegen"
1093
+#: src/LyricsPage.cxx:368
1094
+msgid "Do you really want to start an editor and edit these lyrics?"
1095
+msgstr ""
1096
 
1097
-#: src/screen_help.cxx:125
1098
-msgid "Move song down"
1099
-msgstr "Stück nach unten bewegen"
1100
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1101
+msgid "Can't start editor"
1102
+msgstr "Editor kann nicht gestartet werden"
1103
 
1104
-#: src/screen_help.cxx:128
1105
-msgid "Center"
1106
-msgstr "Zentrieren"
1107
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1108
+msgid "Editor exited unexpectedly"
1109
+msgstr "Editor unerwartet beendet"
1110
 
1111
-#: src/screen_help.cxx:136
1112
-msgid "Enter directory/Select and play song"
1113
-msgstr "Verzeichnis öffnen/Stück auswählen und abspielen"
1114
+#. lyrics for the song were saved on hard disk
1115
+#: src/LyricsPage.cxx:439
1116
+msgid "Lyrics saved"
1117
+msgstr "Liedtext gespeichert"
1118
 
1119
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1120
-#, fuzzy
1121
-msgid "Append song to queue"
1122
-msgstr "Song zur Playlist hinzufügen"
1123
+#: src/LyricsPage.cxx:445
1124
+msgid "Lyrics deleted"
1125
+msgstr "Texte gelöscht"
1126
 
1127
-#: src/screen_help.cxx:140
1128
-msgid "Delete playlist"
1129
-msgstr "Lösche Playlist"
1130
+#: src/LyricsPage.cxx:446
1131
+msgid "No saved lyrics"
1132
+msgstr "Keine gespeicherten Texte"
1133
 
1134
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1135
-msgid "Search"
1136
-msgstr "Suche"
1137
+#: src/Main.cxx:167
1138
+#, fuzzy, c-format
1139
+msgid "Connecting to %s"
1140
+msgstr "Verbunden mit %s"
1141
 
1142
-#: src/screen_help.cxx:151
1143
-msgid "Select and play"
1144
-msgstr "Auswählen und abspielen"
1145
+#: src/Main.cxx:187
1146
+#, fuzzy, c-format
1147
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1148
+msgstr "Fehler: MPD-Version %d.%d.%d ist zu alt (%s wird benötigt)"
1149
 
1150
-#: src/screen_help.cxx:162
1151
-msgid "View Lyrics"
1152
-msgstr "Liedtext lesen"
1153
+#. To translators: these credits are shown
1154
+#. when ncmpc is started with "--version"
1155
+#: src/options.cxx:213 src/options.cxx:216
1156
+msgid "translator-credits"
1157
+msgstr ""
1158
+"Übersetzer\n"
1159
+"\n"
1160
+"Launchpad Contributions:\n"
1161
+"  BBO https://launchpad.net/~bbo\n"
1162
+"  Christoph Mende https://launchpad.net/~cmende\n"
1163
+"  Max Kellermann https://launchpad.net/~max-duempel\n"
1164
+"  Monika Brinkert https://launchpad.net/~moni-sunpig\n"
1165
+"  Samuel Creshal https://launchpad.net/~samuel-creshal\n"
1166
+"  cmdrhenner https://launchpad.net/~cmdrhenner"
1167
 
1168
-#: src/screen_help.cxx:163
1169
-msgid "(Re)load lyrics"
1170
-msgstr "Text (neu) laden"
1171
+#: src/OutputsPage.cxx:87
1172
+#, c-format
1173
+msgid "Output '%s' enabled"
1174
+msgstr "Ausgabegerät '%s' aktiviert"
1175
 
1176
-#. to translators: this hotkey aborts the retrieval of lyrics
1177
-#. from the server
1178
-#: src/screen_help.cxx:166
1179
-msgid "Interrupt retrieval"
1180
-msgstr "Laden unterbrechen"
1181
+#: src/OutputsPage.cxx:98
1182
+#, c-format
1183
+msgid "Output '%s' disabled"
1184
+msgstr "Ausgabegerät '%s' deaktiviert"
1185
 
1186
-#: src/screen_help.cxx:167
1187
-msgid "Download lyrics for currently playing song"
1188
-msgstr "Liedtexte für aktuell laufendes Stück herunterladen"
1189
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1190
+msgid "Outputs"
1191
+msgstr "Ausgabegeräte"
1192
 
1193
-#: src/screen_help.cxx:168
1194
-#, fuzzy
1195
-msgid "Add or edit lyrics"
1196
-msgstr "Keine gespeicherten Texte"
1197
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1198
+msgid "Shuffled queue"
1199
+msgstr ""
1200
 
1201
-#: src/screen_help.cxx:169
1202
-msgid "Save lyrics"
1203
-msgstr "Liedtext speichern"
1204
+#: src/player_command.cxx:186
1205
+msgid "Cleared queue"
1206
+msgstr ""
1207
 
1208
-#: src/screen_help.cxx:170
1209
-msgid "Delete saved lyrics"
1210
-msgstr "Lösche gespeicherte Texte"
1211
+#. get path
1212
+#: src/QueuePage.cxx:307
1213
+msgid "Add"
1214
+msgstr "Hinzufügen"
1215
 
1216
-#: src/screen_help.cxx:177
1217
-msgid "Enable/disable output"
1218
-msgstr "Ausgabegerät aktivieren/deaktivieren"
1219
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1220
+msgid "Queue"
1221
+msgstr ""
1222
 
1223
-#: src/screen_help.cxx:184
1224
-msgid "Write a message"
1225
+#: src/QueuePage.cxx:380
1226
+#, c-format
1227
+msgid "Queue on %s"
1228
 msgstr ""
1229
 
1230
-#: src/screen_help.cxx:189
1231
-msgid "Keydef screen"
1232
-msgstr "Tastenbelegungsanzeige"
1233
+#. query the user for a filename
1234
+#: src/save_playlist.cxx:85
1235
+msgid "Save queue as"
1236
+msgstr ""
1237
 
1238
-#: src/screen_help.cxx:191
1239
-msgid "Edit keydefs for selected command"
1240
-msgstr "Tastenbelegung für ausgewählten Befehl bearbeiten"
1241
+#: src/save_playlist.cxx:107
1242
+#, fuzzy, c-format
1243
+msgid "Replace %s?"
1244
+msgstr "Ersetze %s [%s/%s] ? "
1245
 
1246
-#: src/screen_help.cxx:192
1247
-msgid "Remove selected keydef"
1248
-msgstr "Ausgewählte Tastenbelegung entfernen"
1249
+#. success
1250
+#: src/save_playlist.cxx:128
1251
+#, c-format
1252
+msgid "Saved %s"
1253
+msgstr "%s gespeichert"
1254
+
1255
+#: src/screen_artist.cxx:186
1256
+#, c-format
1257
+msgid "All tracks of artist: %s"
1258
+msgstr "Alle Lieder des Künstlers: %s"
1259
 
1260
-#: src/screen_help.cxx:193
1261
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1262
+msgid "Album"
1263
+msgstr "Album"
1264
+
1265
+#: src/screen_artist.cxx:195
1266
+#, c-format
1267
+msgid "Tracks of no album of artist: %s"
1268
+msgstr "Titel von keinem Album des Künstlers: %s"
1269
+
1270
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1271
+msgid "Artist"
1272
+msgstr "Künstler"
1273
+
1274
+#: src/screen_client.cxx:41
1275
 #, fuzzy
1276
-msgid "Add a keydef"
1277
-msgstr "Füge neue Taste hinzu"
1278
+msgid "Database update running"
1279
+msgstr "Datenbankaktualisierung läuft..."
1280
 
1281
-#: src/screen_help.cxx:194
1282
-msgid "Go up a level"
1283
-msgstr "Eine Ebene nach oben"
1284
+#: src/screen_client.cxx:48
1285
+#, c-format
1286
+msgid "Database update of %s started"
1287
+msgstr "Datenbankaktualisierung von %s gestartet"
1288
 
1289
-#: src/screen_help.cxx:195
1290
-msgid "Apply and save changes"
1291
-msgstr "Änderungen bestätigen und speichern"
1292
+#: src/screen_client.cxx:51
1293
+msgid "Database update started"
1294
+msgstr "Datenbankaktualisierung gestartet"
1295
 
1296
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1297
-msgid "Help"
1298
-msgstr "Hilfe"
1299
+#: src/screen.cxx:160
1300
+msgid "Repeat mode is on"
1301
+msgstr "Wiederhol-Modus ist aktiviert"
1302
 
1303
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1304
-msgid "Error: Screen too small"
1305
-msgstr "Fehler: Anzeige zu klein"
1306
+#: src/screen.cxx:161
1307
+msgid "Repeat mode is off"
1308
+msgstr "Wiederhol-Modus ist deaktiviert"
1309
 
1310
-#: src/screen_keydef.cxx:141
1311
-msgid "You have new key bindings"
1312
-msgstr "Du hast eine neue Tastenbelegung"
1313
+#: src/screen.cxx:165
1314
+msgid "Random mode is on"
1315
+msgstr "Zufalls-Modus ist aktiviert"
1316
 
1317
-#: src/screen_keydef.cxx:143
1318
-msgid "Keybindings unchanged."
1319
-msgstr "Tastenbelegung unverändert."
1320
+#: src/screen.cxx:166
1321
+msgid "Random mode is off"
1322
+msgstr "Zufalls-Modus ist deaktiviert"
1323
 
1324
-#: src/screen_keydef.cxx:153
1325
-#, c-format
1326
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1327
-msgstr "Fehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellen"
1328
+#. "single" mode means
1329
+#. that MPD will
1330
+#. automatically stop
1331
+#. after playing one
1332
+#. single song
1333
+#: src/screen.cxx:175
1334
+msgid "Single mode is on"
1335
+msgstr "Einzelabspiel-Modus ist aktiviert"
1336
+
1337
+#: src/screen.cxx:176
1338
+msgid "Single mode is off"
1339
+msgstr "Einzelabspiel-Modus ist deaktiviert"
1340
 
1341
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1342
+#. "consume" mode means
1343
+#. that MPD removes each
1344
+#. song which has
1345
+#. finished playing
1346
+#: src/screen.cxx:184
1347
+msgid "Consume mode is on"
1348
+msgstr "Verbrauchs-Modus Aktiviert"
1349
+
1350
+#: src/screen.cxx:185
1351
+msgid "Consume mode is off"
1352
+msgstr "Verbrauchs-Modus Deaktiviert"
1353
+
1354
+#: src/screen.cxx:188
1355
 #, c-format
1356
-msgid "Error: %s - %s"
1357
-msgstr "Fehler: %s - %s"
1358
+msgid "Crossfade %d seconds"
1359
+msgstr "%d Sekunden Crossfade"
1360
 
1361
-#: src/screen_keydef.cxx:171
1362
+#: src/screen.cxx:200
1363
+msgid "Database updated"
1364
+msgstr "Datenbank aktualisiert"
1365
+
1366
+#: src/screen.cxx:250
1367
+msgid "Find mode: Wrapped"
1368
+msgstr "Suchmodus: Wrapped"
1369
+
1370
+#: src/screen.cxx:251
1371
+msgid "Find mode: Normal"
1372
+msgstr "Suchmodus: Normal"
1373
+
1374
+#: src/screen.cxx:256
1375
+msgid "Auto center mode: On"
1376
+msgstr "Autozentriermodus: an"
1377
+
1378
+#: src/screen.cxx:257
1379
+msgid "Auto center mode: Off"
1380
+msgstr "Autozentriermodus: aus"
1381
+
1382
+#: src/screen_find.cxx:31
1383
+msgid "Find"
1384
+msgstr "Suche"
1385
+
1386
+#: src/screen_find.cxx:32
1387
+msgid "Find backward"
1388
+msgstr "Suche rückwärts"
1389
+
1390
+#: src/screen_find.cxx:33
1391
+msgid "Jump"
1392
+msgstr "Springe zu"
1393
+
1394
+#: src/screen_find.cxx:79
1395
 #, c-format
1396
-msgid "Wrote %s"
1397
-msgstr "%s geschrieben"
1398
+msgid "Unable to find '%s'"
1399
+msgstr "Kann '%s' nicht finden"
1400
 
1401
-#: src/screen_keydef.cxx:250
1402
+#: src/screen_keydef.cxx:161
1403
 msgid "Deleted"
1404
 msgstr "Gelöscht"
1405
 
1406
-#: src/screen_keydef.cxx:265
1407
+#: src/screen_keydef.cxx:177
1408
 #, c-format
1409
 msgid "Enter new key for %s: "
1410
 msgstr "Gib neue Taste für %s ein: "
1411
 
1412
-#: src/screen_keydef.cxx:276
1413
+#: src/screen_keydef.cxx:187
1414
 msgid "Ctrl-Space can't be used"
1415
 msgstr ""
1416
 
1417
-#: src/screen_keydef.cxx:282
1418
+#: src/screen_keydef.cxx:193
1419
 #, c-format
1420
 msgid "Error: key %s is already used for %s"
1421
 msgstr "Fehler: Taste %s wird bereits benutzt für %s"
1422
 
1423
-#: src/screen_keydef.cxx:291
1424
+#: src/screen_keydef.cxx:202
1425
 #, c-format
1426
 msgid "Assigned %s to %s"
1427
 msgstr "%s wurde %s zugeordnet"
1428
 
1429
-#: src/screen_keydef.cxx:317
1430
-msgid "===> Apply key bindings "
1431
-msgstr "===> Tastenbelegung anwenden "
1432
-
1433
-#: src/screen_keydef.cxx:319
1434
-msgid "===> Apply & Save key bindings  "
1435
-msgstr "===> Tastenbelegung speichern und anwenden  "
1436
-
1437
-#: src/screen_keydef.cxx:347
1438
+#: src/screen_keydef.cxx:229
1439
 msgid "Add new key"
1440
 msgstr "Füge neue Taste hinzu"
1441
 
1442
-#: src/screen_keydef.cxx:410
1443
-msgid "Note: Did you forget to 'Apply' your changes?"
1444
-msgstr "Tipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?"
1445
-
1446
-#: src/screen_keydef.cxx:417
1447
-msgid "Edit key bindings"
1448
-msgstr "Editiere Tastenbelegungen"
1449
-
1450
-#: src/screen_keydef.cxx:419
1451
+#: src/screen_keydef.cxx:251
1452
 #, c-format
1453
 msgid "Edit keys for %s"
1454
 msgstr "Editiere Tasten für %s"
1455
 
1456
-#. translators: no lyrics were found for the song
1457
-#: src/screen_lyrics.cxx:208
1458
-msgid "No lyrics"
1459
-msgstr "Kein Liedtext verfügbar"
1460
-
1461
-#: src/screen_lyrics.cxx:226
1462
-#, c-format
1463
-msgid "Lyrics timeout occurred after %d seconds"
1464
-msgstr ""
1465
-
1466
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1467
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1468
-msgid "Lyrics"
1469
-msgstr "Liedtexte"
1470
-
1471
-#. translators: this message is displayed
1472
-#. while data is retrieved
1473
-#: src/screen_lyrics.cxx:330
1474
-msgid "loading..."
1475
-msgstr "lade..."
1476
-
1477
-#: src/screen_lyrics.cxx:361
1478
-msgid "Editor not configured"
1479
-msgstr ""
1480
-
1481
-#: src/screen_lyrics.cxx:367
1482
-msgid "Do you really want to start an editor and edit these lyrics?"
1483
-msgstr ""
1484
+#: src/screen_keydef.cxx:393
1485
+msgid "You have new key bindings"
1486
+msgstr "Du hast eine neue Tastenbelegung"
1487
 
1488
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1489
-msgid "Can't start editor"
1490
-msgstr ""
1491
+#: src/screen_keydef.cxx:395
1492
+msgid "Keybindings unchanged."
1493
+msgstr "Tastenbelegung unverändert."
1494
 
1495
-#: src/screen_lyrics.cxx:411
1496
-#, c-format
1497
-msgid "Editor exited unexpectedly (%d)"
1498
-msgstr ""
1499
+#: src/screen_keydef.cxx:405
1500
+#, fuzzy
1501
+msgid "Unable to write configuration"
1502
+msgstr "Unvollständige Konfiguration für Tastenbelegung"
1503
 
1504
-#: src/screen_lyrics.cxx:414
1505
+#: src/screen_keydef.cxx:421
1506
 #, c-format
1507
-msgid "Editor exited unexpectedly (signal %d)"
1508
-msgstr ""
1509
-
1510
-#. lyrics for the song were saved on hard disk
1511
-#: src/screen_lyrics.cxx:436
1512
-msgid "Lyrics saved"
1513
-msgstr "Liedtext gespeichert"
1514
-
1515
-#: src/screen_lyrics.cxx:443
1516
-msgid "Lyrics deleted"
1517
-msgstr "Texte gelöscht"
1518
-
1519
-#: src/screen_lyrics.cxx:446
1520
-msgid "No saved lyrics"
1521
-msgstr "Keine gespeicherten Texte"
1522
+msgid "Wrote %s"
1523
+msgstr "%s geschrieben"
1524
 
1525
-#: src/screen_outputs.cxx:60
1526
-#, c-format
1527
-msgid "Output '%s' enabled"
1528
-msgstr "Ausgabegerät '%s' aktiviert"
1529
+#: src/screen_keydef.cxx:433
1530
+msgid "===> Apply key bindings "
1531
+msgstr "===> Tastenbelegung anwenden "
1532
 
1533
-#: src/screen_outputs.cxx:71
1534
-#, c-format
1535
-msgid "Output '%s' disabled"
1536
-msgstr "Ausgabegerät '%s' deaktiviert"
1537
+#: src/screen_keydef.cxx:435
1538
+msgid "===> Apply & Save key bindings  "
1539
+msgstr "===> Tastenbelegung speichern und anwenden  "
1540
 
1541
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1542
-msgid "Outputs"
1543
-msgstr "Ausgabegeräte"
1544
+#: src/screen_keydef.cxx:472
1545
+msgid "Edit key bindings"
1546
+msgstr "Editiere Tastenbelegungen"
1547
 
1548
-#. get path
1549
-#: src/screen_queue.cxx:274
1550
-msgid "Add"
1551
-msgstr "Hinzufügen"
1552
+#: src/screen_keydef.cxx:554
1553
+msgid "Note: Did you forget to 'Apply' your changes?"
1554
+msgstr "Tipp: Hast du vergessen, deine Änderungen 'Anzuwenden'?"
1555
 
1556
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1557
-msgid "Queue"
1558
-msgstr ""
1559
+#: src/screen_keydef.cxx:604
1560
+msgid "Keys"
1561
+msgstr "Tasten"
1562
 
1563
-#: src/screen_queue.cxx:384
1564
-#, c-format
1565
-msgid "Queue on %s"
1566
-msgstr ""
1567
+#: src/screen_utils.cxx:124
1568
+msgid "Password"
1569
+msgstr "Passwort"
1570
 
1571
-#: src/screen_search.cxx:48
1572
+#: src/SearchPage.cxx:51
1573
 msgid "artist"
1574
 msgstr "Künstler"
1575
 
1576
-#: src/screen_search.cxx:49
1577
+#: src/SearchPage.cxx:52
1578
 msgid "album"
1579
 msgstr "Album"
1580
 
1581
-#: src/screen_search.cxx:50
1582
+#: src/SearchPage.cxx:53
1583
 msgid "title"
1584
 msgstr "Titel"
1585
 
1586
-#: src/screen_search.cxx:51
1587
+#: src/SearchPage.cxx:54
1588
 msgid "track"
1589
 msgstr "Stück"
1590
 
1591
-#: src/screen_search.cxx:52
1592
+#: src/SearchPage.cxx:55
1593
 msgid "name"
1594
 msgstr "Name"
1595
 
1596
-#: src/screen_search.cxx:53
1597
+#: src/SearchPage.cxx:56
1598
 msgid "genre"
1599
 msgstr "Genre"
1600
 
1601
-#: src/screen_search.cxx:54
1602
+#: src/SearchPage.cxx:57
1603
 msgid "date"
1604
 msgstr "Datum"
1605
 
1606
-#: src/screen_search.cxx:55
1607
+#: src/SearchPage.cxx:58
1608
 msgid "composer"
1609
 msgstr "Komponist"
1610
 
1611
-#: src/screen_search.cxx:56
1612
+#: src/SearchPage.cxx:59
1613
 msgid "performer"
1614
 msgstr "Aufführung"
1615
 
1616
-#: src/screen_search.cxx:57
1617
+#: src/SearchPage.cxx:60
1618
 msgid "comment"
1619
 msgstr "Anmerkung"
1620
 
1621
-#: src/screen_search.cxx:65
1622
+#: src/SearchPage.cxx:68
1623
 msgid "file"
1624
 msgstr "Datei"
1625
 
1626
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1627
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1628
 msgid "Title"
1629
 msgstr "Titel"
1630
 
1631
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1632
-msgid "Artist"
1633
-msgstr "Künstler"
1634
-
1635
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1636
-msgid "Album"
1637
-msgstr "Album"
1638
-
1639
-#: src/screen_search.cxx:85
1640
+#: src/SearchPage.cxx:88
1641
 msgid "Filename"
1642
 msgstr "Dateiname"
1643
 
1644
-#: src/screen_search.cxx:86
1645
+#: src/SearchPage.cxx:89
1646
 msgid "Artist + Title"
1647
 msgstr "Künstler + Titel"
1648
 
1649
-#: src/screen_search.cxx:244
1650
-#, c-format
1651
-msgid "No argument for search tag %s"
1652
-msgstr "Kein Argument für Tag %s"
1653
-
1654
-#: src/screen_search.cxx:253
1655
+#: src/SearchPage.cxx:270
1656
 #, c-format
1657
 msgid "Bad search tag %s"
1658
 msgstr "Tag nicht erkannt: %s"
1659
 
1660
-#. if( pattern==nullptr )
1661
-#. search_new(screen, c);
1662
-#. else
1663
-#: src/screen_search.cxx:400
1664
-#, c-format
1665
-msgid "Press %s for a new search"
1666
-msgstr "Drücke %s für eine neue Suche"
1667
-
1668
-#: src/screen_search.cxx:427
1669
+#: src/SearchPage.cxx:284
1670
 #, c-format
1671
-msgid "Search: %s"
1672
-msgstr "Suche: %s"
1673
-
1674
-#: src/screen_search.cxx:430
1675
-#, c-format
1676
-msgid "Search: Results for %s [%s]"
1677
-msgstr "Suche: Ergebnisse für %s [%s]"
1678
+msgid "No argument for search tag %s"
1679
+msgstr "Kein Argument für Tag %s"
1680
 
1681
-#: src/screen_search.cxx:434
1682
-#, c-format
1683
-msgid "Search: Press %s for a new search [%s]"
1684
-msgstr "Suche: Drücke %s für eine neue Suche [%s]"
1685
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1686
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1687
+msgid "Search"
1688
+msgstr "Suche"
1689
 
1690
-#: src/screen_search.cxx:458
1691
+#: src/SearchPage.cxx:436
1692
 #, c-format
1693
 msgid "Search mode: %s"
1694
 msgstr "Suchmodus: %s"
1695
 
1696
-#: src/screen_song.cxx:54
1697
+#: src/SongPage.cxx:67
1698
 msgid "Length"
1699
 msgstr "Länge"
1700
 
1701
-#: src/screen_song.cxx:55
1702
+#: src/SongPage.cxx:68
1703
 msgid "Position"
1704
 msgstr ""
1705
 
1706
-#: src/screen_song.cxx:56
1707
+#: src/SongPage.cxx:69
1708
 msgid "Composer"
1709
 msgstr "Komponist"
1710
 
1711
-#: src/screen_song.cxx:57
1712
+#: src/SongPage.cxx:70
1713
 msgid "Name"
1714
 msgstr "Name"
1715
 
1716
-#: src/screen_song.cxx:58
1717
+#: src/SongPage.cxx:71
1718
 msgid "Disc"
1719
 msgstr "CD"
1720
 
1721
-#: src/screen_song.cxx:59
1722
+#: src/SongPage.cxx:72
1723
 msgid "Track"
1724
 msgstr "Stück"
1725
 
1726
-#: src/screen_song.cxx:60
1727
+#: src/SongPage.cxx:73
1728
 msgid "Date"
1729
 msgstr "Datum"
1730
 
1731
-#: src/screen_song.cxx:61
1732
+#: src/SongPage.cxx:74
1733
 msgid "Genre"
1734
 msgstr "Genre"
1735
 
1736
-#: src/screen_song.cxx:62
1737
+#: src/SongPage.cxx:75
1738
 msgid "Comment"
1739
 msgstr "Anmerkung"
1740
 
1741
-#: src/screen_song.cxx:63
1742
+#: src/SongPage.cxx:76
1743
 msgid "Path"
1744
 msgstr "Pfad"
1745
 
1746
-#: src/screen_song.cxx:64
1747
+#: src/SongPage.cxx:77
1748
 msgid "Bitrate"
1749
 msgstr "Bitrate"
1750
 
1751
-#: src/screen_song.cxx:65
1752
+#: src/SongPage.cxx:78
1753
 msgid "Format"
1754
-msgstr ""
1755
+msgstr "Format"
1756
 
1757
-#: src/screen_song.cxx:82
1758
+#: src/SongPage.cxx:95
1759
 msgid "Number of artists"
1760
 msgstr "Anzahl der Künstler"
1761
 
1762
-#: src/screen_song.cxx:83
1763
+#: src/SongPage.cxx:96
1764
 msgid "Number of albums"
1765
 msgstr "Anzahl der Alben"
1766
 
1767
-#: src/screen_song.cxx:84
1768
+#: src/SongPage.cxx:97
1769
 msgid "Number of songs"
1770
 msgstr "Anzahl der Lieder"
1771
 
1772
-#: src/screen_song.cxx:85
1773
+#: src/SongPage.cxx:98
1774
 msgid "Uptime"
1775
 msgstr "Laufzeit"
1776
 
1777
-#: src/screen_song.cxx:86
1778
+#: src/SongPage.cxx:99
1779
 msgid "Most recent db update"
1780
 msgstr "Letzte db-Aktualisierung"
1781
 
1782
-#: src/screen_song.cxx:87
1783
+#: src/SongPage.cxx:100
1784
 msgid "Playtime"
1785
 msgstr "Spielzeit"
1786
 
1787
-#: src/screen_song.cxx:88
1788
+#: src/SongPage.cxx:101
1789
 msgid "DB playtime"
1790
 msgstr "DB Spielzeit"
1791
 
1792
-#: src/screen_song.cxx:173
1793
+#: src/SongPage.cxx:204
1794
 msgid "Song viewer"
1795
 msgstr "Liedbetrachter"
1796
 
1797
-#: src/screen_song.cxx:337
1798
+#: src/SongPage.cxx:370
1799
 msgid "MPD statistics"
1800
 msgstr "MPD Statistik"
1801
 
1802
-#: src/screen_song.cxx:427
1803
+#: src/SongPage.cxx:455
1804
 msgid "Selected song"
1805
 msgstr "Lied anzeigen"
1806
 
1807
-#: src/screen_song.cxx:437
1808
+#: src/SongPage.cxx:465
1809
 msgid "Currently playing song"
1810
 msgstr "Gerade laufendes Lied"
1811
 
1812
-#: src/screen_song.cxx:442
1813
+#: src/SongPage.cxx:470
1814
 #, c-format
1815
 msgid "%d kbps"
1816
 msgstr "%d kbps"
1817
 
1818
-#. NOTE: if one day a translator decides to use a multi-byte character
1819
-#. for one of the yes/no keys, we'll have to parse it properly
1820
-#: src/screen_utils.cxx:80
1821
-#, fuzzy, c-format
1822
-msgid "%s [%s/%s] "
1823
-msgstr "Ersetze %s [%s/%s] ? "
1824
+#: src/SongPage.cxx:554
1825
+msgid "Song"
1826
+msgstr "Lied"
1827
 
1828
-#: src/screen_utils.cxx:121
1829
-msgid "Password"
1830
-msgstr "Passwort"
1831
-
1832
-#: src/status_bar.cxx:121
1833
+#: src/StatusBar.cxx:104
1834
 msgid "Playing:"
1835
 msgstr "Spiele:"
1836
 
1837
-#: src/status_bar.cxx:124
1838
+#: src/StatusBar.cxx:108
1839
 msgid "[Paused]"
1840
 msgstr "[Pause]"
1841
 
1842
-#: src/title_bar.cxx:99
1843
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1844
+msgid "Unknown color"
1845
+msgstr "Unbekannte Farbe"
1846
+
1847
+#: src/Styles.cxx:333
1848
+msgid "Unknown color field"
1849
+msgstr "Unbekanntes Farbfeld"
1850
+
1851
+#: src/Styles.cxx:375
1852
+msgid "Terminal lacks color capabilities"
1853
+msgstr "Das Terminal unterstützt keine Farben"
1854
+
1855
+#: src/time_format.cxx:44
1856
+msgid "year"
1857
+msgstr "Jahr"
1858
+
1859
+#: src/time_format.cxx:46
1860
+msgid "years"
1861
+msgstr ""
1862
+
1863
+#: src/time_format.cxx:54
1864
+msgid "week"
1865
+msgstr ""
1866
+
1867
+#: src/time_format.cxx:57
1868
+msgid "weeks"
1869
+msgstr ""
1870
+
1871
+#: src/time_format.cxx:65
1872
+msgid "day"
1873
+msgstr ""
1874
+
1875
+#: src/time_format.cxx:68
1876
+msgid "days"
1877
+msgstr ""
1878
+
1879
+#: src/TitleBar.cxx:100
1880
 msgid "Volume n/a"
1881
 msgstr "Lautstärke n/a"
1882
 
1883
-#: src/title_bar.cxx:101
1884
+#: src/TitleBar.cxx:102
1885
 #, c-format
1886
 msgid "Volume %d%%"
1887
 msgstr "Lautstärke %d%%"
1888
 
1889
+#, fuzzy
1890
+#~ msgid "Add url/file to queue"
1891
+#~ msgstr "Füge eine URL/Datei der Playlist hinzu"
1892
+
1893
+#~ msgid "Move song up"
1894
+#~ msgstr "Stück nach oben bewegen"
1895
+
1896
+#~ msgid "Move song down"
1897
+#~ msgstr "Stück nach unten bewegen"
1898
+
1899
+#~ msgid "Press %s for a new search"
1900
+#~ msgstr "Drücke %s für eine neue Suche"
1901
+
1902
+#~ msgid "Search: %s"
1903
+#~ msgstr "Suche: %s"
1904
+
1905
+#~ msgid "Search: Results for %s [%s]"
1906
+#~ msgstr "Suche: Ergebnisse für %s [%s]"
1907
+
1908
+#~ msgid "Search: Press %s for a new search [%s]"
1909
+#~ msgstr "Suche: Drücke %s für eine neue Suche [%s]"
1910
+
1911
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1912
+#~ msgstr "Verbinde mit %s…   [%s drücken, um abzubrechen]"
1913
+
1914
+#~ msgid "press %s for the key editor"
1915
+#~ msgstr "drücken Sie %s für den Tasteneditor"
1916
+
1917
+#~ msgid "Album: %s - %s"
1918
+#~ msgstr "Album: %s - %s"
1919
+
1920
+#~ msgid "Adding album %s..."
1921
+#~ msgstr "Füge Album %s... hinzu"
1922
+
1923
+#~ msgid "Adding %s..."
1924
+#~ msgstr "Hinzufügen %s..."
1925
+
1926
+#~ msgid "Error: Screen too small"
1927
+#~ msgstr "Fehler: Anzeige zu klein"
1928
+
1929
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1930
+#~ msgstr "Fehler: kann Verzeichnis ~/.ncmpc - %s nicht erstellen"
1931
+
1932
+#~ msgid "Error: %s - %s"
1933
+#~ msgstr "Fehler: %s - %s"
1934
+
1935
+#, fuzzy
1936
+#~ msgid "%s [%s/%s] "
1937
+#~ msgstr "Ersetze %s [%s/%s] ? "
1938
+
1939
 #~ msgid "Delete playlist %s [%s/%s] ? "
1940
 #~ msgstr "Lösche Playlist %s [%s/%s] ? "
1941
 
1942
 #~ msgid "Warning: Unknown color - %s\n"
1943
 #~ msgstr "Warnung: Unbekannte Farbe - %s\n"
1944
 
1945
-#~ msgid "Connected to %s"
1946
-#~ msgstr "Verbunden mit %s"
1947
-
1948
 #~ msgid "Shuffled playlist"
1949
 #~ msgstr "Playlist gemischt"
1950
 
1951
ncmpc-0.30.tar.xz/po/eo.po -> ncmpc-0.32.tar.xz/po/eo.po Changed
1753
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-05-16 15:13+0000\n"
8
 "Last-Translator: Aleksej <Unknown>\n"
9
 "Language-Team: Esperanto <eo@li.org>\n"
10
@@ -18,416 +18,352 @@
11
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
12
 "X-Generator: Launchpad (build 13265)\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
17
+msgid "All tracks"
18
 msgstr ""
19
 
20
-#: src/colors.cxx:195
21
-msgid "Unknown color field"
22
+#: src/AlbumListPage.cxx:144
23
+msgid "Albums"
24
 msgstr ""
25
 
26
-#: src/colors.cxx:228
27
-msgid "Terminal lacks support for changing colors"
28
+#: src/AlbumListPage.cxx:146
29
+#, c-format
30
+msgid "Albums of artist: %s"
31
 msgstr ""
32
 
33
-#: src/colors.cxx:237
34
-msgid "Terminal lacks color capabilities"
35
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
36
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
37
+#, fuzzy, c-format
38
+msgid "Adding '%s' to queue"
39
+msgstr "Aldonas \"%s\" al la ludlisto"
40
+
41
+#: src/ArtistListPage.cxx:114
42
+msgid "All artists"
43
+msgstr ""
44
+
45
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
46
+#, c-format
47
+msgid "Key %s assigned to %s and %s"
48
 msgstr ""
49
 
50
-#: src/command.cxx:63
51
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
52
+msgid "Chat"
53
+msgstr ""
54
+
55
+#: src/ChatPage.cxx:160
56
+msgid "Your message"
57
+msgstr ""
58
+
59
+#: src/ChatPage.cxx:169
60
+msgid "Message could not be sent"
61
+msgstr ""
62
+
63
+#: src/Command.cxx:29
64
 msgid "Key configuration screen"
65
 msgstr ""
66
 
67
-#: src/command.cxx:66
68
+#: src/Command.cxx:32
69
 msgid "Quit"
70
 msgstr ""
71
 
72
-#: src/command.cxx:70
73
+#: src/Command.cxx:36
74
 msgid "Move cursor up"
75
 msgstr ""
76
 
77
-#: src/command.cxx:72
78
+#: src/Command.cxx:38
79
 msgid "Move cursor down"
80
 msgstr ""
81
 
82
-#: src/command.cxx:74
83
+#: src/Command.cxx:40
84
 msgid "Move cursor to the top of screen"
85
 msgstr ""
86
 
87
-#: src/command.cxx:76
88
+#: src/Command.cxx:42
89
 msgid "Move cursor to the middle of screen"
90
 msgstr ""
91
 
92
-#: src/command.cxx:78
93
+#: src/Command.cxx:44
94
 msgid "Move cursor to the bottom of screen"
95
 msgstr ""
96
 
97
-#: src/command.cxx:80
98
+#: src/Command.cxx:46
99
 msgid "Move cursor to the top of the list"
100
 msgstr ""
101
 
102
-#: src/command.cxx:82
103
+#: src/Command.cxx:48
104
 msgid "Move cursor to the bottom of the list"
105
 msgstr ""
106
 
107
-#: src/command.cxx:84
108
+#: src/Command.cxx:50
109
 msgid "Page up"
110
 msgstr ""
111
 
112
-#: src/command.cxx:86
113
+#: src/Command.cxx:52
114
 msgid "Page down"
115
 msgstr ""
116
 
117
-#: src/command.cxx:88
118
+#: src/Command.cxx:54
119
 msgid "Range selection"
120
 msgstr ""
121
 
122
-#: src/command.cxx:90
123
+#: src/Command.cxx:56
124
 msgid "Scroll down one line"
125
 msgstr ""
126
 
127
-#: src/command.cxx:92
128
+#: src/Command.cxx:58
129
 msgid "Scroll up one line"
130
 msgstr ""
131
 
132
-#: src/command.cxx:94
133
+#: src/Command.cxx:60
134
 msgid "Scroll up half a screen"
135
 msgstr ""
136
 
137
-#: src/command.cxx:96
138
+#: src/Command.cxx:62
139
 msgid "Scroll down half a screen"
140
 msgstr ""
141
 
142
-#: src/command.cxx:98
143
+#: src/Command.cxx:64
144
 msgid "Select currently playing song"
145
 msgstr ""
146
 
147
-#: src/command.cxx:103
148
+#: src/Command.cxx:69
149
 msgid "Help screen"
150
 msgstr ""
151
 
152
-#: src/command.cxx:105 src/screen_help.cxx:119
153
+#: src/Command.cxx:71 src/HelpPage.cxx:140
154
 msgid "Queue screen"
155
 msgstr ""
156
 
157
-#: src/command.cxx:107 src/screen_help.cxx:134
158
+#: src/Command.cxx:73 src/HelpPage.cxx:155
159
 msgid "Browse screen"
160
 msgstr ""
161
 
162
-#: src/command.cxx:112
163
+#: src/Command.cxx:78
164
 msgid "Play/Enter directory"
165
 msgstr ""
166
 
167
-#: src/command.cxx:114
168
+#: src/Command.cxx:80
169
 msgid "Pause"
170
 msgstr ""
171
 
172
-#: src/command.cxx:116
173
+#: src/Command.cxx:82
174
 msgid "Stop"
175
 msgstr ""
176
 
177
-#: src/command.cxx:118
178
+#: src/Command.cxx:84
179
 msgid "Crop"
180
 msgstr ""
181
 
182
-#: src/command.cxx:120
183
+#: src/Command.cxx:86
184
 msgid "Next track"
185
 msgstr ""
186
 
187
-#: src/command.cxx:122
188
+#: src/Command.cxx:88
189
 msgid "Previous track"
190
 msgstr ""
191
 
192
-#: src/command.cxx:124
193
+#: src/Command.cxx:90
194
 msgid "Seek forward"
195
 msgstr ""
196
 
197
-#: src/command.cxx:126
198
+#: src/Command.cxx:92
199
 msgid "Seek backward"
200
 msgstr ""
201
 
202
-#: src/command.cxx:128
203
+#: src/Command.cxx:94
204
 msgid "Increase volume"
205
 msgstr ""
206
 
207
-#: src/command.cxx:130
208
+#: src/Command.cxx:96
209
 msgid "Decrease volume"
210
 msgstr ""
211
 
212
-#: src/command.cxx:132
213
+#: src/Command.cxx:98
214
 msgid "Select/deselect song in queue"
215
 msgstr ""
216
 
217
-#: src/command.cxx:134
218
+#: src/Command.cxx:100
219
 msgid "Select all listed items"
220
 msgstr ""
221
 
222
-#: src/command.cxx:136
223
+#: src/Command.cxx:102
224
 msgid "Delete song from queue"
225
 msgstr ""
226
 
227
-#: src/command.cxx:138
228
+#: src/Command.cxx:104
229
 msgid "Shuffle queue"
230
 msgstr ""
231
 
232
-#: src/command.cxx:140
233
+#: src/Command.cxx:106
234
 msgid "Clear queue"
235
 msgstr ""
236
 
237
-#: src/command.cxx:142
238
+#: src/Command.cxx:108
239
 msgid "Toggle repeat mode"
240
 msgstr ""
241
 
242
-#: src/command.cxx:144
243
+#: src/Command.cxx:110
244
 msgid "Toggle random mode"
245
 msgstr ""
246
 
247
-#: src/command.cxx:146
248
+#: src/Command.cxx:112
249
 msgid "Toggle single mode"
250
 msgstr ""
251
 
252
-#: src/command.cxx:148
253
+#: src/Command.cxx:114
254
 msgid "Toggle consume mode"
255
 msgstr ""
256
 
257
-#: src/command.cxx:150
258
+#: src/Command.cxx:116
259
 msgid "Toggle crossfade mode"
260
 msgstr ""
261
 
262
-#: src/command.cxx:152
263
+#: src/Command.cxx:118
264
 msgid "Start a music database update"
265
 msgstr ""
266
 
267
-#: src/command.cxx:154
268
+#: src/Command.cxx:120
269
 msgid "Save queue"
270
 msgstr ""
271
 
272
-#: src/command.cxx:156
273
-msgid "Add url/file to queue"
274
+#: src/Command.cxx:122 src/HelpPage.cxx:174
275
+msgid "Append song to queue"
276
 msgstr ""
277
 
278
-#: src/command.cxx:159
279
+#: src/Command.cxx:125
280
 msgid "Go to root directory"
281
 msgstr ""
282
 
283
-#: src/command.cxx:161
284
+#: src/Command.cxx:127
285
 msgid "Go to parent directory"
286
 msgstr ""
287
 
288
-#: src/command.cxx:164
289
+#: src/Command.cxx:130
290
 msgid "Locate song in browser"
291
 msgstr ""
292
 
293
-#: src/command.cxx:168
294
+#: src/Command.cxx:134
295
 msgid "Move item up"
296
 msgstr ""
297
 
298
-#: src/command.cxx:170
299
+#: src/Command.cxx:136
300
 msgid "Move item down"
301
 msgstr ""
302
 
303
-#: src/command.cxx:172
304
+#: src/Command.cxx:138
305
 msgid "Refresh screen"
306
 msgstr ""
307
 
308
 #. translators: toggle between wrapping and non-wrapping
309
 #. search
310
-#: src/command.cxx:179
311
+#: src/Command.cxx:145
312
 msgid "Toggle find mode"
313
 msgstr ""
314
 
315
 #. translators: the auto center mode always centers the song
316
 #. currently being played
317
-#: src/command.cxx:183
318
+#: src/Command.cxx:149
319
 msgid "Toggle auto center mode"
320
 msgstr ""
321
 
322
-#: src/command.cxx:188
323
+#: src/Command.cxx:154
324
 msgid "Next screen"
325
 msgstr ""
326
 
327
-#: src/command.cxx:190
328
+#: src/Command.cxx:156
329
 msgid "Previous screen"
330
 msgstr ""
331
 
332
-#: src/command.cxx:192
333
+#: src/Command.cxx:158
334
 msgid "Swap to most recent screen"
335
 msgstr ""
336
 
337
-#: src/command.cxx:197
338
+#: src/Command.cxx:163
339
 msgid "Forward find"
340
 msgstr ""
341
 
342
-#: src/command.cxx:199
343
+#: src/Command.cxx:165
344
 msgid "Forward find next"
345
 msgstr ""
346
 
347
-#: src/command.cxx:201
348
+#: src/Command.cxx:167
349
 msgid "Backward find"
350
 msgstr ""
351
 
352
-#: src/command.cxx:203
353
+#: src/Command.cxx:169
354
 msgid "Backward find previous"
355
 msgstr ""
356
 
357
 #. translators: this queries the user for a string
358
 #. * and jumps directly (while the user is typing)
359
 #. * to the entry which begins with this string
360
-#: src/command.cxx:208
361
+#: src/Command.cxx:174
362
 msgid "Jump to"
363
 msgstr ""
364
 
365
-#: src/command.cxx:214
366
+#: src/Command.cxx:180
367
 msgid "Artist screen"
368
 msgstr ""
369
 
370
-#: src/command.cxx:218 src/screen_help.cxx:148
371
+#: src/Command.cxx:184 src/HelpPage.cxx:169
372
 msgid "Search screen"
373
 msgstr ""
374
 
375
-#: src/command.cxx:220
376
+#: src/Command.cxx:186
377
 msgid "Change search mode"
378
 msgstr ""
379
 
380
-#: src/command.cxx:224
381
+#: src/Command.cxx:190
382
 msgid "View the selected and the currently playing song"
383
 msgstr ""
384
 
385
-#: src/command.cxx:228 src/screen_help.cxx:160
386
+#: src/Command.cxx:194 src/HelpPage.cxx:181
387
 msgid "Lyrics screen"
388
 msgstr ""
389
 
390
 #. translators: interrupt the current background action,
391
 #. e.g. stop loading lyrics from the internet
392
-#: src/command.cxx:232
393
+#: src/Command.cxx:198
394
 msgid "Interrupt action"
395
 msgstr ""
396
 
397
-#: src/command.cxx:234
398
+#: src/Command.cxx:200
399
 msgid "Update Lyrics"
400
 msgstr ""
401
 
402
-#: src/command.cxx:238
403
+#: src/Command.cxx:204
404
 msgid "Edit the current item"
405
 msgstr ""
406
 
407
-#: src/command.cxx:243 src/screen_help.cxx:175
408
+#: src/Command.cxx:209 src/HelpPage.cxx:196
409
 msgid "Outputs screen"
410
 msgstr ""
411
 
412
-#: src/command.cxx:248 src/screen_help.cxx:182
413
+#: src/Command.cxx:214 src/HelpPage.cxx:203
414
 msgid "Chat screen"
415
 msgstr ""
416
 
417
-#: src/command.cxx:290
418
-msgid "Undefined"
419
-msgstr ""
420
-
421
-#: src/command.cxx:292
422
-msgid "Space"
423
-msgstr ""
424
-
425
-#: src/command.cxx:294
426
-msgid "Enter"
427
-msgstr ""
428
-
429
-#: src/command.cxx:296
430
-msgid "Backspace"
431
-msgstr ""
432
-
433
-#: src/command.cxx:298
434
-msgid "Delete"
435
-msgstr ""
436
-
437
-#: src/command.cxx:300
438
-msgid "Up"
439
-msgstr ""
440
-
441
-#: src/command.cxx:302
442
-msgid "Down"
443
-msgstr ""
444
-
445
-#: src/command.cxx:304
446
-msgid "Left"
447
-msgstr ""
448
-
449
-#: src/command.cxx:306
450
-msgid "Right"
451
-msgstr ""
452
-
453
-#: src/command.cxx:308
454
-msgid "Home"
455
-msgstr ""
456
-
457
-#: src/command.cxx:310
458
-msgid "End"
459
-msgstr ""
460
-
461
-#: src/command.cxx:312
462
-msgid "PageDown"
463
-msgstr ""
464
-
465
-#: src/command.cxx:314
466
-msgid "PageUp"
467
-msgstr ""
468
-
469
-#: src/command.cxx:316
470
-msgid "Tab"
471
-msgstr ""
472
-
473
-#: src/command.cxx:318
474
-msgid "Shift+Tab"
475
-msgstr ""
476
-
477
-#: src/command.cxx:320
478
-msgid "Esc"
479
-msgstr ""
480
-
481
-#: src/command.cxx:322
482
-msgid "Insert"
483
-msgstr ""
484
-
485
-#: src/command.cxx:326
486
-#, c-format
487
-msgid "F%d"
488
-msgstr ""
489
-
490
-#: src/command.cxx:330
491
-#, c-format
492
-msgid "Ctrl-%c"
493
-msgstr ""
494
-
495
-#: src/command.cxx:332
496
-#, c-format
497
-msgid "Alt-%c"
498
-msgstr ""
499
-
500
-#: src/command.cxx:477 src/command.cxx:483
501
-#, c-format
502
-msgid "Key %s assigned to %s and %s"
503
-msgstr ""
504
-
505
 #. To translators: prefix for error messages
506
-#: src/conf.cxx:121
507
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
508
 msgid "Error"
509
 msgstr ""
510
 
511
-#: src/conf.cxx:135
512
+#: src/conf.cxx:128
513
 msgid "Word expected"
514
 msgstr ""
515
 
516
-#: src/conf.cxx:152 src/conf.cxx:161
517
+#: src/conf.cxx:145 src/conf.cxx:154
518
 msgid "Malformed hotkey definition"
519
 msgstr ""
520
 
521
 #. the hotkey configuration contains an unknown
522
 #. command
523
-#: src/conf.cxx:185
524
+#: src/conf.cxx:178
525
 msgid "Unknown command"
526
 msgstr ""
527
 
528
 #. the hotkey configuration line is incomplete
529
-#: src/conf.cxx:198
530
+#: src/conf.cxx:191
531
 msgid "Incomplete hotkey configuration"
532
 msgstr ""
533
 
534
@@ -435,803 +371,819 @@
535
 #. "elapsed" or "remaining" time of a song being
536
 #. played; in this case, the configuration file
537
 #. contained an invalid setting
538
-#: src/conf.cxx:234
539
+#: src/conf.cxx:227
540
 msgid "Bad time display type"
541
 msgstr ""
542
 
543
 #. an equals sign '=' was expected while parsing a
544
 #. configuration file line
545
-#: src/conf.cxx:247 src/conf.cxx:427
546
+#: src/conf.cxx:240 src/conf.cxx:418
547
 msgid "Missing '='"
548
 msgstr ""
549
 
550
-#: src/conf.cxx:298
551
+#: src/conf.cxx:291
552
 msgid "Bad color name"
553
 msgstr ""
554
 
555
-#: src/conf.cxx:308
556
+#: src/conf.cxx:301
557
 msgid "Incomplete color definition"
558
 msgstr ""
559
 
560
-#: src/conf.cxx:314
561
+#: src/conf.cxx:307
562
 msgid "Invalid number"
563
 msgstr ""
564
 
565
-#: src/conf.cxx:322
566
+#: src/conf.cxx:315
567
 msgid "Malformed color definition"
568
 msgstr ""
569
 
570
 #. an unknown screen name was specified in the
571
 #. configuration file
572
-#: src/conf.cxx:356
573
+#: src/conf.cxx:353
574
 msgid "Unknown screen name"
575
 msgstr ""
576
 
577
-#: src/conf.cxx:384
578
+#: src/conf.cxx:378
579
 msgid "Invalid search mode"
580
 msgstr ""
581
 
582
-#: src/conf.cxx:407
583
+#: src/conf.cxx:398
584
 msgid "Unknown search mode"
585
 msgstr ""
586
 
587
-#: src/conf.cxx:597
588
+#: src/conf.cxx:581
589
 msgid "Unknown configuration parameter"
590
 msgstr ""
591
 
592
-#: src/i18n.h:42
593
-msgid "y"
594
-msgstr "j"
595
+#: src/CustomColors.cxx:56
596
+msgid "Terminal lacks support for changing colors"
597
+msgstr ""
598
 
599
-#: src/i18n.h:43
600
-msgid "n"
601
-msgstr "n"
602
+#. translators: the "delete" command is only possible
603
+#. for playlists; the user attempted to delete a song
604
+#. or a directory or something else
605
+#: src/FileBrowserPage.cxx:260
606
+msgid "Deleting this item is not possible"
607
+msgstr ""
608
 
609
-#: src/list_window.cxx:554
610
-msgid "Range selection disabled"
611
+#: src/FileBrowserPage.cxx:268
612
+#, c-format
613
+msgid "Delete playlist %s?"
614
 msgstr ""
615
 
616
-#: src/list_window.cxx:559
617
-msgid "Range selection enabled"
618
+#. translators: a dialog was aborted by the user
619
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
620
+#: src/screen_keydef.cxx:182
621
+msgid "Aborted"
622
 msgstr ""
623
 
624
-#: src/Main.cxx:161
625
-#, c-format
626
-msgid "Connecting to %s...  [Press %s to abort]"
627
-msgstr "Konektiĝado al %s...  [Premu %s por ĉesigi]"
628
+#. translators: MPD deleted the playlist, as requested by the
629
+#. user
630
+#: src/FileBrowserPage.cxx:286
631
+msgid "Playlist deleted"
632
+msgstr ""
633
 
634
-#: src/Main.cxx:182
635
-#, fuzzy, c-format
636
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
637
-msgstr "Problemo: la versio %d.%d.%d de MPD estas tro malnova (necesas %s)"
638
+#. translators: caption of the browser screen
639
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
640
+msgid "Browse"
641
+msgstr ""
642
 
643
-#: src/Main.cxx:317
644
+#: src/FileListPage.cxx:121
645
 #, c-format
646
-msgid "press %s for the key editor"
647
+msgid "Loading playlist '%s'"
648
 msgstr ""
649
 
650
-#. To translators: these credits are shown
651
-#. when ncmpc is started with "--version"
652
-#: src/options.cxx:209 src/options.cxx:212
653
-msgid "translator-credits"
654
+#: src/HelpPage.cxx:60
655
+msgid "Movement"
656
 msgstr ""
657
-"Launchpad Contributions:\n"
658
-"  Aleksej https://launchpad.net/~aleksejrs\n"
659
-"  Kristjan SCHMIDT https://launchpad.net/~kristjan-eo\n"
660
-"  Max Kellermann https://launchpad.net/~max-duempel"
661
 
662
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
663
-msgid "Shuffled queue"
664
+#: src/HelpPage.cxx:105
665
+msgid "Global"
666
 msgstr ""
667
 
668
-#: src/player_command.cxx:184
669
-msgid "Cleared queue"
670
+#: src/HelpPage.cxx:142
671
+msgid "Play"
672
 msgstr ""
673
 
674
-#. query the user for a filename
675
-#: src/save_playlist.cxx:109
676
-msgid "Save queue as"
677
+#: src/HelpPage.cxx:149
678
+msgid "Center"
679
 msgstr ""
680
 
681
-#: src/save_playlist.cxx:140
682
-#, c-format
683
-msgid "Replace %s?"
684
+#: src/HelpPage.cxx:157
685
+msgid "Enter directory/Select and play song"
686
 msgstr ""
687
 
688
-#. translators: a dialog was aborted by the user
689
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
690
-#: src/screen_lyrics.cxx:370
691
-msgid "Aborted"
692
+#: src/HelpPage.cxx:161
693
+msgid "Delete playlist"
694
 msgstr ""
695
 
696
-#. success
697
-#: src/save_playlist.cxx:171
698
-#, c-format
699
-msgid "Saved %s"
700
+#: src/HelpPage.cxx:171
701
+msgid "New search"
702
 msgstr ""
703
 
704
-#: src/screen.cxx:154
705
-msgid "Repeat mode is on"
706
+#: src/HelpPage.cxx:172
707
+msgid "Select and play"
708
 msgstr ""
709
 
710
-#: src/screen.cxx:155
711
-msgid "Repeat mode is off"
712
+#: src/HelpPage.cxx:183
713
+msgid "View Lyrics"
714
 msgstr ""
715
 
716
-#: src/screen.cxx:159
717
-msgid "Random mode is on"
718
+#: src/HelpPage.cxx:184
719
+msgid "(Re)load lyrics"
720
 msgstr ""
721
 
722
-#: src/screen.cxx:160
723
-msgid "Random mode is off"
724
+#. to translators: this hotkey aborts the retrieval of lyrics
725
+#. from the server
726
+#: src/HelpPage.cxx:187
727
+msgid "Interrupt retrieval"
728
 msgstr ""
729
 
730
-#. "single" mode means
731
-#. that MPD will
732
-#. automatically stop
733
-#. after playing one
734
-#. single song
735
-#: src/screen.cxx:169
736
-msgid "Single mode is on"
737
+#: src/HelpPage.cxx:188
738
+msgid "Download lyrics for currently playing song"
739
 msgstr ""
740
 
741
-#: src/screen.cxx:170
742
-msgid "Single mode is off"
743
+#: src/HelpPage.cxx:189
744
+msgid "Add or edit lyrics"
745
 msgstr ""
746
 
747
-#. "consume" mode means
748
-#. that MPD removes each
749
-#. song which has
750
-#. finished playing
751
-#: src/screen.cxx:178
752
-msgid "Consume mode is on"
753
+#: src/HelpPage.cxx:190
754
+msgid "Save lyrics"
755
 msgstr ""
756
 
757
-#: src/screen.cxx:179
758
-msgid "Consume mode is off"
759
+#: src/HelpPage.cxx:191
760
+msgid "Delete saved lyrics"
761
 msgstr ""
762
 
763
-#: src/screen.cxx:182
764
-#, c-format
765
-msgid "Crossfade %d seconds"
766
+#: src/HelpPage.cxx:198
767
+msgid "Enable/disable output"
768
 msgstr ""
769
 
770
-#: src/screen.cxx:194
771
-msgid "Database updated"
772
-msgstr "Ĝisdatigis datumbazon"
773
+#: src/HelpPage.cxx:205
774
+msgid "Write a message"
775
+msgstr ""
776
 
777
-#: src/screen.cxx:226
778
-msgid "Find mode: Wrapped"
779
+#: src/HelpPage.cxx:210
780
+msgid "Keydef screen"
781
 msgstr ""
782
 
783
-#: src/screen.cxx:227
784
-msgid "Find mode: Normal"
785
+#: src/HelpPage.cxx:212
786
+msgid "Edit keydefs for selected command"
787
 msgstr ""
788
 
789
-#: src/screen.cxx:232
790
-msgid "Auto center mode: On"
791
+#: src/HelpPage.cxx:213
792
+msgid "Remove selected keydef"
793
 msgstr ""
794
 
795
-#: src/screen.cxx:233
796
-msgid "Auto center mode: Off"
797
+#: src/HelpPage.cxx:214
798
+msgid "Add a keydef"
799
 msgstr ""
800
 
801
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
802
-msgid "All tracks"
803
+#: src/HelpPage.cxx:215
804
+msgid "Go up a level"
805
 msgstr ""
806
 
807
-#: src/screen_artist.cxx:384
808
-msgid "All artists"
809
+#: src/HelpPage.cxx:216
810
+msgid "Apply and save changes"
811
 msgstr ""
812
 
813
-#: src/screen_artist.cxx:389
814
-#, c-format
815
-msgid "Albums of artist: %s"
816
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
817
+msgid "Help"
818
+msgstr "Helpo"
819
+
820
+#: src/i18n.h:43
821
+msgid "y"
822
+msgstr "j"
823
+
824
+#: src/i18n.h:44
825
+msgid "n"
826
+msgstr "n"
827
+
828
+#: src/KeyName.cxx:31
829
+msgid "Undefined"
830
 msgstr ""
831
 
832
-#: src/screen_artist.cxx:398
833
-#, c-format
834
-msgid "All tracks of artist: %s"
835
+#: src/KeyName.cxx:33
836
+msgid "Space"
837
 msgstr ""
838
 
839
-#: src/screen_artist.cxx:401
840
-#, c-format
841
-msgid "Album: %s - %s"
842
+#: src/KeyName.cxx:35
843
+msgid "Enter"
844
 msgstr ""
845
 
846
-#: src/screen_artist.cxx:405
847
-#, c-format
848
-msgid "Tracks of no album of artist: %s"
849
+#: src/KeyName.cxx:37
850
+msgid "Backspace"
851
 msgstr ""
852
 
853
-#: src/screen_artist.cxx:450
854
-#, c-format
855
-msgid "Adding album %s..."
856
+#: src/KeyName.cxx:39
857
+msgid "Delete"
858
 msgstr ""
859
 
860
-#: src/screen_artist.cxx:452
861
-#, c-format
862
-msgid "Adding %s..."
863
+#: src/KeyName.cxx:41
864
+msgid "Up"
865
 msgstr ""
866
 
867
-#: src/screen_browser.cxx:122
868
-#, c-format
869
-msgid "Loading playlist %s..."
870
+#: src/KeyName.cxx:43
871
+msgid "Down"
872
 msgstr ""
873
 
874
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
875
-#: src/screen_browser.cxx:279
876
-#, fuzzy, c-format
877
-msgid "Adding '%s' to queue"
878
-msgstr "Aldonas \"%s\" al la ludlisto"
879
+#: src/KeyName.cxx:45
880
+msgid "Left"
881
+msgstr ""
882
 
883
-#: src/screen_chat.cxx:59
884
-#, c-format
885
-msgid ""
886
-"connected to MPD %u.%u.%u (you need at least \n"
887
-"version 0.17.0 to use the chat feature)"
888
+#: src/KeyName.cxx:47
889
+msgid "Right"
890
 msgstr ""
891
 
892
-#: src/screen_chat.cxx:177
893
-msgid "Your message"
894
+#: src/KeyName.cxx:49
895
+msgid "Home"
896
 msgstr ""
897
 
898
-#: src/screen_chat.cxx:186
899
-msgid "Message could not be sent"
900
+#: src/KeyName.cxx:51
901
+msgid "End"
902
 msgstr ""
903
 
904
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
905
-msgid "Chat"
906
+#: src/KeyName.cxx:53
907
+msgid "PageDown"
908
 msgstr ""
909
 
910
-#: src/screen_client.cxx:41
911
-msgid "Database update running..."
912
+#: src/KeyName.cxx:55
913
+msgid "PageUp"
914
 msgstr ""
915
 
916
-#: src/screen_client.cxx:49
917
-#, c-format
918
-msgid "Database update of %s started"
919
+#: src/KeyName.cxx:57
920
+msgid "Tab"
921
 msgstr ""
922
 
923
-#: src/screen_client.cxx:52
924
-msgid "Database update started"
925
+#: src/KeyName.cxx:59
926
+msgid "Shift+Tab"
927
 msgstr ""
928
 
929
-#. translators: the "delete" command is only possible
930
-#. for playlists; the user attempted to delete a song
931
-#. or a directory or something else
932
-#: src/screen_file.cxx:200
933
-msgid "Deleting this item is not possible"
934
+#: src/KeyName.cxx:61
935
+msgid "Esc"
936
 msgstr ""
937
 
938
-#: src/screen_file.cxx:207
939
-#, c-format
940
-msgid "Delete playlist %s?"
941
+#: src/KeyName.cxx:63
942
+msgid "Insert"
943
 msgstr ""
944
 
945
-#. translators: MPD deleted the playlist, as requested by the
946
-#. user
947
-#: src/screen_file.cxx:227
948
-msgid "Playlist deleted"
949
+#: src/KeyName.cxx:71
950
+#, c-format
951
+msgid "Ctrl-%c"
952
 msgstr ""
953
 
954
-#. translators: caption of the browser screen
955
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
956
-msgid "Browse"
957
+#: src/KeyName.cxx:73
958
+#, c-format
959
+msgid "Alt-%c"
960
 msgstr ""
961
 
962
-#: src/screen_find.cxx:29
963
-msgid "Find"
964
+#: src/ListWindow.cxx:491
965
+msgid "Range selection disabled"
966
 msgstr ""
967
 
968
-#: src/screen_find.cxx:30
969
-msgid "Find backward"
970
+#: src/ListWindow.cxx:496
971
+msgid "Range selection enabled"
972
 msgstr ""
973
 
974
-#: src/screen_find.cxx:31
975
-msgid "Jump"
976
+#. translators: no lyrics were found for the song
977
+#: src/LyricsPage.cxx:236
978
+msgid "No lyrics"
979
 msgstr ""
980
 
981
-#: src/screen_find.cxx:82
982
+#: src/LyricsPage.cxx:254
983
 #, c-format
984
-msgid "Unable to find '%s'"
985
-msgstr "Ne troviĝis \"%s\""
986
-
987
-#: src/screen_help.cxx:39
988
-msgid "Movement"
989
+msgid "Lyrics timeout occurred after %d seconds"
990
 msgstr ""
991
 
992
-#: src/screen_help.cxx:84
993
-msgid "Global"
994
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
995
+#: src/LyricsPage.cxx:490
996
+msgid "Lyrics"
997
 msgstr ""
998
 
999
-#: src/screen_help.cxx:121
1000
-msgid "Play"
1001
+#. translators: this message is displayed
1002
+#. while data is retrieved
1003
+#: src/LyricsPage.cxx:340
1004
+msgid "loading..."
1005
 msgstr ""
1006
 
1007
-#: src/screen_help.cxx:124
1008
-msgid "Move song up"
1009
+#: src/LyricsPage.cxx:361
1010
+msgid "Editor not configured"
1011
 msgstr ""
1012
 
1013
-#: src/screen_help.cxx:125
1014
-msgid "Move song down"
1015
+#: src/LyricsPage.cxx:368
1016
+msgid "Do you really want to start an editor and edit these lyrics?"
1017
 msgstr ""
1018
 
1019
-#: src/screen_help.cxx:128
1020
-msgid "Center"
1021
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1022
+msgid "Can't start editor"
1023
 msgstr ""
1024
 
1025
-#: src/screen_help.cxx:136
1026
-msgid "Enter directory/Select and play song"
1027
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1028
+msgid "Editor exited unexpectedly"
1029
 msgstr ""
1030
 
1031
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1032
-msgid "Append song to queue"
1033
+#. lyrics for the song were saved on hard disk
1034
+#: src/LyricsPage.cxx:439
1035
+msgid "Lyrics saved"
1036
 msgstr ""
1037
 
1038
-#: src/screen_help.cxx:140
1039
-msgid "Delete playlist"
1040
+#: src/LyricsPage.cxx:445
1041
+msgid "Lyrics deleted"
1042
 msgstr ""
1043
 
1044
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1045
-msgid "Search"
1046
+#: src/LyricsPage.cxx:446
1047
+msgid "No saved lyrics"
1048
 msgstr ""
1049
 
1050
-#: src/screen_help.cxx:151
1051
-msgid "Select and play"
1052
-msgstr ""
1053
+#: src/Main.cxx:167
1054
+#, fuzzy, c-format
1055
+msgid "Connecting to %s"
1056
+msgstr "Konektite al %s"
1057
 
1058
-#: src/screen_help.cxx:162
1059
-msgid "View Lyrics"
1060
+#: src/Main.cxx:187
1061
+#, fuzzy, c-format
1062
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1063
+msgstr "Problemo: la versio %d.%d.%d de MPD estas tro malnova (necesas %s)"
1064
+
1065
+#. To translators: these credits are shown
1066
+#. when ncmpc is started with "--version"
1067
+#: src/options.cxx:213 src/options.cxx:216
1068
+msgid "translator-credits"
1069
 msgstr ""
1070
+"Launchpad Contributions:\n"
1071
+"  Aleksej https://launchpad.net/~aleksejrs\n"
1072
+"  Kristjan SCHMIDT https://launchpad.net/~kristjan-eo\n"
1073
+"  Max Kellermann https://launchpad.net/~max-duempel"
1074
 
1075
-#: src/screen_help.cxx:163
1076
-msgid "(Re)load lyrics"
1077
+#: src/OutputsPage.cxx:87
1078
+#, c-format
1079
+msgid "Output '%s' enabled"
1080
 msgstr ""
1081
 
1082
-#. to translators: this hotkey aborts the retrieval of lyrics
1083
-#. from the server
1084
-#: src/screen_help.cxx:166
1085
-msgid "Interrupt retrieval"
1086
+#: src/OutputsPage.cxx:98
1087
+#, c-format
1088
+msgid "Output '%s' disabled"
1089
 msgstr ""
1090
 
1091
-#: src/screen_help.cxx:167
1092
-msgid "Download lyrics for currently playing song"
1093
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1094
+msgid "Outputs"
1095
 msgstr ""
1096
 
1097
-#: src/screen_help.cxx:168
1098
-msgid "Add or edit lyrics"
1099
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1100
+msgid "Shuffled queue"
1101
 msgstr ""
1102
 
1103
-#: src/screen_help.cxx:169
1104
-msgid "Save lyrics"
1105
+#: src/player_command.cxx:186
1106
+msgid "Cleared queue"
1107
 msgstr ""
1108
 
1109
-#: src/screen_help.cxx:170
1110
-msgid "Delete saved lyrics"
1111
+#. get path
1112
+#: src/QueuePage.cxx:307
1113
+msgid "Add"
1114
+msgstr "Aldoni"
1115
+
1116
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1117
+msgid "Queue"
1118
 msgstr ""
1119
 
1120
-#: src/screen_help.cxx:177
1121
-msgid "Enable/disable output"
1122
+#: src/QueuePage.cxx:380
1123
+#, c-format
1124
+msgid "Queue on %s"
1125
 msgstr ""
1126
 
1127
-#: src/screen_help.cxx:184
1128
-msgid "Write a message"
1129
+#. query the user for a filename
1130
+#: src/save_playlist.cxx:85
1131
+msgid "Save queue as"
1132
 msgstr ""
1133
 
1134
-#: src/screen_help.cxx:189
1135
-msgid "Keydef screen"
1136
+#: src/save_playlist.cxx:107
1137
+#, c-format
1138
+msgid "Replace %s?"
1139
 msgstr ""
1140
 
1141
-#: src/screen_help.cxx:191
1142
-msgid "Edit keydefs for selected command"
1143
+#. success
1144
+#: src/save_playlist.cxx:128
1145
+#, c-format
1146
+msgid "Saved %s"
1147
 msgstr ""
1148
 
1149
-#: src/screen_help.cxx:192
1150
-msgid "Remove selected keydef"
1151
+#: src/screen_artist.cxx:186
1152
+#, c-format
1153
+msgid "All tracks of artist: %s"
1154
 msgstr ""
1155
 
1156
-#: src/screen_help.cxx:193
1157
-msgid "Add a keydef"
1158
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1159
+msgid "Album"
1160
 msgstr ""
1161
 
1162
-#: src/screen_help.cxx:194
1163
-msgid "Go up a level"
1164
+#: src/screen_artist.cxx:195
1165
+#, c-format
1166
+msgid "Tracks of no album of artist: %s"
1167
 msgstr ""
1168
 
1169
-#: src/screen_help.cxx:195
1170
-msgid "Apply and save changes"
1171
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1172
+msgid "Artist"
1173
 msgstr ""
1174
 
1175
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1176
-msgid "Help"
1177
-msgstr "Helpo"
1178
+#: src/screen_client.cxx:41
1179
+#, fuzzy
1180
+msgid "Database update running"
1181
+msgstr "Ĝisdatigis datumbazon"
1182
 
1183
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1184
-msgid "Error: Screen too small"
1185
+#: src/screen_client.cxx:48
1186
+#, c-format
1187
+msgid "Database update of %s started"
1188
 msgstr ""
1189
 
1190
-#: src/screen_keydef.cxx:141
1191
-msgid "You have new key bindings"
1192
+#: src/screen_client.cxx:51
1193
+msgid "Database update started"
1194
 msgstr ""
1195
 
1196
-#: src/screen_keydef.cxx:143
1197
-msgid "Keybindings unchanged."
1198
+#: src/screen.cxx:160
1199
+msgid "Repeat mode is on"
1200
 msgstr ""
1201
 
1202
-#: src/screen_keydef.cxx:153
1203
-#, c-format
1204
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1205
+#: src/screen.cxx:161
1206
+msgid "Repeat mode is off"
1207
 msgstr ""
1208
 
1209
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1210
-#, c-format
1211
-msgid "Error: %s - %s"
1212
+#: src/screen.cxx:165
1213
+msgid "Random mode is on"
1214
 msgstr ""
1215
 
1216
-#: src/screen_keydef.cxx:171
1217
-#, c-format
1218
-msgid "Wrote %s"
1219
+#: src/screen.cxx:166
1220
+msgid "Random mode is off"
1221
 msgstr ""
1222
 
1223
-#: src/screen_keydef.cxx:250
1224
-msgid "Deleted"
1225
+#. "single" mode means
1226
+#. that MPD will
1227
+#. automatically stop
1228
+#. after playing one
1229
+#. single song
1230
+#: src/screen.cxx:175
1231
+msgid "Single mode is on"
1232
 msgstr ""
1233
 
1234
-#: src/screen_keydef.cxx:265
1235
-#, c-format
1236
-msgid "Enter new key for %s: "
1237
+#: src/screen.cxx:176
1238
+msgid "Single mode is off"
1239
 msgstr ""
1240
 
1241
-#: src/screen_keydef.cxx:276
1242
-msgid "Ctrl-Space can't be used"
1243
+#. "consume" mode means
1244
+#. that MPD removes each
1245
+#. song which has
1246
+#. finished playing
1247
+#: src/screen.cxx:184
1248
+msgid "Consume mode is on"
1249
 msgstr ""
1250
 
1251
-#: src/screen_keydef.cxx:282
1252
-#, c-format
1253
-msgid "Error: key %s is already used for %s"
1254
+#: src/screen.cxx:185
1255
+msgid "Consume mode is off"
1256
 msgstr ""
1257
 
1258
-#: src/screen_keydef.cxx:291
1259
+#: src/screen.cxx:188
1260
 #, c-format
1261
-msgid "Assigned %s to %s"
1262
+msgid "Crossfade %d seconds"
1263
 msgstr ""
1264
 
1265
-#: src/screen_keydef.cxx:317
1266
-msgid "===> Apply key bindings "
1267
+#: src/screen.cxx:200
1268
+msgid "Database updated"
1269
+msgstr "Ĝisdatigis datumbazon"
1270
+
1271
+#: src/screen.cxx:250
1272
+msgid "Find mode: Wrapped"
1273
 msgstr ""
1274
 
1275
-#: src/screen_keydef.cxx:319
1276
-msgid "===> Apply & Save key bindings  "
1277
+#: src/screen.cxx:251
1278
+msgid "Find mode: Normal"
1279
 msgstr ""
1280
 
1281
-#: src/screen_keydef.cxx:347
1282
-msgid "Add new key"
1283
+#: src/screen.cxx:256
1284
+msgid "Auto center mode: On"
1285
 msgstr ""
1286
 
1287
-#: src/screen_keydef.cxx:410
1288
-msgid "Note: Did you forget to 'Apply' your changes?"
1289
+#: src/screen.cxx:257
1290
+msgid "Auto center mode: Off"
1291
 msgstr ""
1292
 
1293
-#: src/screen_keydef.cxx:417
1294
-msgid "Edit key bindings"
1295
+#: src/screen_find.cxx:31
1296
+msgid "Find"
1297
 msgstr ""
1298
 
1299
-#: src/screen_keydef.cxx:419
1300
-#, c-format
1301
-msgid "Edit keys for %s"
1302
+#: src/screen_find.cxx:32
1303
+msgid "Find backward"
1304
 msgstr ""
1305
 
1306
-#. translators: no lyrics were found for the song
1307
-#: src/screen_lyrics.cxx:208
1308
-msgid "No lyrics"
1309
+#: src/screen_find.cxx:33
1310
+msgid "Jump"
1311
 msgstr ""
1312
 
1313
-#: src/screen_lyrics.cxx:226
1314
+#: src/screen_find.cxx:79
1315
 #, c-format
1316
-msgid "Lyrics timeout occurred after %d seconds"
1317
-msgstr ""
1318
+msgid "Unable to find '%s'"
1319
+msgstr "Ne troviĝis \"%s\""
1320
 
1321
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1322
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1323
-msgid "Lyrics"
1324
+#: src/screen_keydef.cxx:161
1325
+msgid "Deleted"
1326
 msgstr ""
1327
 
1328
-#. translators: this message is displayed
1329
-#. while data is retrieved
1330
-#: src/screen_lyrics.cxx:330
1331
-msgid "loading..."
1332
+#: src/screen_keydef.cxx:177
1333
+#, c-format
1334
+msgid "Enter new key for %s: "
1335
 msgstr ""
1336
 
1337
-#: src/screen_lyrics.cxx:361
1338
-msgid "Editor not configured"
1339
+#: src/screen_keydef.cxx:187
1340
+msgid "Ctrl-Space can't be used"
1341
 msgstr ""
1342
 
1343
-#: src/screen_lyrics.cxx:367
1344
-msgid "Do you really want to start an editor and edit these lyrics?"
1345
+#: src/screen_keydef.cxx:193
1346
+#, c-format
1347
+msgid "Error: key %s is already used for %s"
1348
 msgstr ""
1349
 
1350
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1351
-msgid "Can't start editor"
1352
+#: src/screen_keydef.cxx:202
1353
+#, c-format
1354
+msgid "Assigned %s to %s"
1355
 msgstr ""
1356
 
1357
-#: src/screen_lyrics.cxx:411
1358
-#, c-format
1359
-msgid "Editor exited unexpectedly (%d)"
1360
+#: src/screen_keydef.cxx:229
1361
+msgid "Add new key"
1362
 msgstr ""
1363
 
1364
-#: src/screen_lyrics.cxx:414
1365
+#: src/screen_keydef.cxx:251
1366
 #, c-format
1367
-msgid "Editor exited unexpectedly (signal %d)"
1368
+msgid "Edit keys for %s"
1369
 msgstr ""
1370
 
1371
-#. lyrics for the song were saved on hard disk
1372
-#: src/screen_lyrics.cxx:436
1373
-msgid "Lyrics saved"
1374
+#: src/screen_keydef.cxx:393
1375
+msgid "You have new key bindings"
1376
 msgstr ""
1377
 
1378
-#: src/screen_lyrics.cxx:443
1379
-msgid "Lyrics deleted"
1380
+#: src/screen_keydef.cxx:395
1381
+msgid "Keybindings unchanged."
1382
 msgstr ""
1383
 
1384
-#: src/screen_lyrics.cxx:446
1385
-msgid "No saved lyrics"
1386
+#: src/screen_keydef.cxx:405
1387
+msgid "Unable to write configuration"
1388
 msgstr ""
1389
 
1390
-#: src/screen_outputs.cxx:60
1391
+#: src/screen_keydef.cxx:421
1392
 #, c-format
1393
-msgid "Output '%s' enabled"
1394
+msgid "Wrote %s"
1395
 msgstr ""
1396
 
1397
-#: src/screen_outputs.cxx:71
1398
-#, c-format
1399
-msgid "Output '%s' disabled"
1400
+#: src/screen_keydef.cxx:433
1401
+msgid "===> Apply key bindings "
1402
 msgstr ""
1403
 
1404
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1405
-msgid "Outputs"
1406
+#: src/screen_keydef.cxx:435
1407
+msgid "===> Apply & Save key bindings  "
1408
 msgstr ""
1409
 
1410
-#. get path
1411
-#: src/screen_queue.cxx:274
1412
-msgid "Add"
1413
-msgstr "Aldoni"
1414
+#: src/screen_keydef.cxx:472
1415
+msgid "Edit key bindings"
1416
+msgstr ""
1417
 
1418
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1419
-msgid "Queue"
1420
+#: src/screen_keydef.cxx:554
1421
+msgid "Note: Did you forget to 'Apply' your changes?"
1422
 msgstr ""
1423
 
1424
-#: src/screen_queue.cxx:384
1425
-#, c-format
1426
-msgid "Queue on %s"
1427
+#: src/screen_keydef.cxx:604
1428
+msgid "Keys"
1429
 msgstr ""
1430
 
1431
-#: src/screen_search.cxx:48
1432
+#: src/screen_utils.cxx:124
1433
+msgid "Password"
1434
+msgstr ""
1435
+
1436
+#: src/SearchPage.cxx:51
1437
 msgid "artist"
1438
 msgstr ""
1439
 
1440
-#: src/screen_search.cxx:49
1441
+#: src/SearchPage.cxx:52
1442
 msgid "album"
1443
 msgstr ""
1444
 
1445
-#: src/screen_search.cxx:50
1446
+#: src/SearchPage.cxx:53
1447
 msgid "title"
1448
 msgstr ""
1449
 
1450
-#: src/screen_search.cxx:51
1451
+#: src/SearchPage.cxx:54
1452
 msgid "track"
1453
 msgstr ""
1454
 
1455
-#: src/screen_search.cxx:52
1456
+#: src/SearchPage.cxx:55
1457
 msgid "name"
1458
 msgstr ""
1459
 
1460
-#: src/screen_search.cxx:53
1461
+#: src/SearchPage.cxx:56
1462
 msgid "genre"
1463
 msgstr ""
1464
 
1465
-#: src/screen_search.cxx:54
1466
+#: src/SearchPage.cxx:57
1467
 msgid "date"
1468
 msgstr "dato"
1469
 
1470
-#: src/screen_search.cxx:55
1471
+#: src/SearchPage.cxx:58
1472
 msgid "composer"
1473
 msgstr ""
1474
 
1475
-#: src/screen_search.cxx:56
1476
+#: src/SearchPage.cxx:59
1477
 msgid "performer"
1478
 msgstr ""
1479
 
1480
-#: src/screen_search.cxx:57
1481
+#: src/SearchPage.cxx:60
1482
 msgid "comment"
1483
 msgstr ""
1484
 
1485
-#: src/screen_search.cxx:65
1486
+#: src/SearchPage.cxx:68
1487
 msgid "file"
1488
 msgstr "dosiero"
1489
 
1490
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1491
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1492
 msgid "Title"
1493
 msgstr "Titolo"
1494
 
1495
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1496
-msgid "Artist"
1497
-msgstr ""
1498
-
1499
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1500
-msgid "Album"
1501
-msgstr ""
1502
-
1503
-#: src/screen_search.cxx:85
1504
+#: src/SearchPage.cxx:88
1505
 msgid "Filename"
1506
 msgstr "Dosiernomo"
1507
 
1508
-#: src/screen_search.cxx:86
1509
+#: src/SearchPage.cxx:89
1510
 msgid "Artist + Title"
1511
 msgstr ""
1512
 
1513
-#: src/screen_search.cxx:244
1514
-#, c-format
1515
-msgid "No argument for search tag %s"
1516
-msgstr ""
1517
-
1518
-#: src/screen_search.cxx:253
1519
+#: src/SearchPage.cxx:270
1520
 #, c-format
1521
 msgid "Bad search tag %s"
1522
 msgstr ""
1523
 
1524
-#. if( pattern==nullptr )
1525
-#. search_new(screen, c);
1526
-#. else
1527
-#: src/screen_search.cxx:400
1528
-#, c-format
1529
-msgid "Press %s for a new search"
1530
-msgstr ""
1531
-
1532
-#: src/screen_search.cxx:427
1533
+#: src/SearchPage.cxx:284
1534
 #, c-format
1535
-msgid "Search: %s"
1536
-msgstr ""
1537
-
1538
-#: src/screen_search.cxx:430
1539
-#, c-format
1540
-msgid "Search: Results for %s [%s]"
1541
+msgid "No argument for search tag %s"
1542
 msgstr ""
1543
 
1544
-#: src/screen_search.cxx:434
1545
-#, c-format
1546
-msgid "Search: Press %s for a new search [%s]"
1547
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1548
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1549
+msgid "Search"
1550
 msgstr ""
1551
 
1552
-#: src/screen_search.cxx:458
1553
+#: src/SearchPage.cxx:436
1554
 #, c-format
1555
 msgid "Search mode: %s"
1556
 msgstr ""
1557
 
1558
-#: src/screen_song.cxx:54
1559
+#: src/SongPage.cxx:67
1560
 msgid "Length"
1561
 msgstr ""
1562
 
1563
-#: src/screen_song.cxx:55
1564
+#: src/SongPage.cxx:68
1565
 msgid "Position"
1566
 msgstr ""
1567
 
1568
-#: src/screen_song.cxx:56
1569
+#: src/SongPage.cxx:69
1570
 msgid "Composer"
1571
 msgstr ""
1572
 
1573
-#: src/screen_song.cxx:57
1574
+#: src/SongPage.cxx:70
1575
 msgid "Name"
1576
 msgstr ""
1577
 
1578
-#: src/screen_song.cxx:58
1579
+#: src/SongPage.cxx:71
1580
 msgid "Disc"
1581
 msgstr ""
1582
 
1583
-#: src/screen_song.cxx:59
1584
+#: src/SongPage.cxx:72
1585
 msgid "Track"
1586
 msgstr ""
1587
 
1588
-#: src/screen_song.cxx:60
1589
+#: src/SongPage.cxx:73
1590
 msgid "Date"
1591
 msgstr ""
1592
 
1593
-#: src/screen_song.cxx:61
1594
+#: src/SongPage.cxx:74
1595
 msgid "Genre"
1596
 msgstr ""
1597
 
1598
-#: src/screen_song.cxx:62
1599
+#: src/SongPage.cxx:75
1600
 msgid "Comment"
1601
 msgstr ""
1602
 
1603
-#: src/screen_song.cxx:63
1604
+#: src/SongPage.cxx:76
1605
 msgid "Path"
1606
 msgstr ""
1607
 
1608
-#: src/screen_song.cxx:64
1609
+#: src/SongPage.cxx:77
1610
 msgid "Bitrate"
1611
 msgstr ""
1612
 
1613
-#: src/screen_song.cxx:65
1614
+#: src/SongPage.cxx:78
1615
 msgid "Format"
1616
 msgstr ""
1617
 
1618
-#: src/screen_song.cxx:82
1619
+#: src/SongPage.cxx:95
1620
 msgid "Number of artists"
1621
 msgstr ""
1622
 
1623
-#: src/screen_song.cxx:83
1624
+#: src/SongPage.cxx:96
1625
 msgid "Number of albums"
1626
 msgstr ""
1627
 
1628
-#: src/screen_song.cxx:84
1629
+#: src/SongPage.cxx:97
1630
 msgid "Number of songs"
1631
 msgstr ""
1632
 
1633
-#: src/screen_song.cxx:85
1634
+#: src/SongPage.cxx:98
1635
 msgid "Uptime"
1636
 msgstr ""
1637
 
1638
-#: src/screen_song.cxx:86
1639
+#: src/SongPage.cxx:99
1640
 msgid "Most recent db update"
1641
 msgstr ""
1642
 
1643
-#: src/screen_song.cxx:87
1644
+#: src/SongPage.cxx:100
1645
 msgid "Playtime"
1646
 msgstr ""
1647
 
1648
-#: src/screen_song.cxx:88
1649
+#: src/SongPage.cxx:101
1650
 msgid "DB playtime"
1651
 msgstr ""
1652
 
1653
-#: src/screen_song.cxx:173
1654
+#: src/SongPage.cxx:204
1655
 msgid "Song viewer"
1656
 msgstr ""
1657
 
1658
-#: src/screen_song.cxx:337
1659
+#: src/SongPage.cxx:370
1660
 msgid "MPD statistics"
1661
 msgstr ""
1662
 
1663
-#: src/screen_song.cxx:427
1664
+#: src/SongPage.cxx:455
1665
 msgid "Selected song"
1666
 msgstr ""
1667
 
1668
-#: src/screen_song.cxx:437
1669
+#: src/SongPage.cxx:465
1670
 msgid "Currently playing song"
1671
 msgstr ""
1672
 
1673
-#: src/screen_song.cxx:442
1674
+#: src/SongPage.cxx:470
1675
 #, c-format
1676
 msgid "%d kbps"
1677
 msgstr ""
1678
 
1679
-#. NOTE: if one day a translator decides to use a multi-byte character
1680
-#. for one of the yes/no keys, we'll have to parse it properly
1681
-#: src/screen_utils.cxx:80
1682
-#, c-format
1683
-msgid "%s [%s/%s] "
1684
-msgstr ""
1685
-
1686
-#: src/screen_utils.cxx:121
1687
-msgid "Password"
1688
+#: src/SongPage.cxx:554
1689
+msgid "Song"
1690
 msgstr ""
1691
 
1692
-#: src/status_bar.cxx:121
1693
+#: src/StatusBar.cxx:104
1694
 msgid "Playing:"
1695
 msgstr ""
1696
 
1697
-#: src/status_bar.cxx:124
1698
+#: src/StatusBar.cxx:108
1699
 msgid "[Paused]"
1700
 msgstr ""
1701
 
1702
-#: src/title_bar.cxx:99
1703
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1704
+msgid "Unknown color"
1705
+msgstr ""
1706
+
1707
+#: src/Styles.cxx:333
1708
+msgid "Unknown color field"
1709
+msgstr ""
1710
+
1711
+#: src/Styles.cxx:375
1712
+msgid "Terminal lacks color capabilities"
1713
+msgstr ""
1714
+
1715
+#: src/time_format.cxx:44
1716
+msgid "year"
1717
+msgstr ""
1718
+
1719
+#: src/time_format.cxx:46
1720
+msgid "years"
1721
+msgstr ""
1722
+
1723
+#: src/time_format.cxx:54
1724
+msgid "week"
1725
+msgstr ""
1726
+
1727
+#: src/time_format.cxx:57
1728
+msgid "weeks"
1729
+msgstr ""
1730
+
1731
+#: src/time_format.cxx:65
1732
+msgid "day"
1733
+msgstr ""
1734
+
1735
+#: src/time_format.cxx:68
1736
+msgid "days"
1737
+msgstr ""
1738
+
1739
+#: src/TitleBar.cxx:100
1740
 msgid "Volume n/a"
1741
 msgstr ""
1742
 
1743
-#: src/title_bar.cxx:101
1744
+#: src/TitleBar.cxx:102
1745
 #, c-format
1746
 msgid "Volume %d%%"
1747
 msgstr ""
1748
 
1749
-#~ msgid "Connected to %s"
1750
-#~ msgstr "Konektite al %s"
1751
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1752
+#~ msgstr "Konektiĝado al %s...  [Premu %s por ĉesigi]"
1753
ncmpc-0.30.tar.xz/po/es.po -> ncmpc-0.32.tar.xz/po/es.po Changed
1941
 
1
@@ -12,7 +12,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2012-01-30 07:08+0000\n"
8
 "Last-Translator: Adolfo Jayme Barrientos <fitoschido@gmail.com>\n"
9
 "Language-Team: es\n"
10
@@ -23,423 +23,358 @@
11
 "X-Launchpad-Export-Date: 2013-04-11 07:56+0000\n"
12
 "X-Generator: Launchpad (build 16550)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Comando desconocido"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Todas las pistas"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Advertencia: Propiedad del color - %s no reconocida\n"
27
+msgid "Albums"
28
+msgstr "Álbum"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "La terminal no soporta el cambio de colores"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Álbumes del artista: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "La terminal no tiene la opcion de diferentes colores"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Añadiendo '%s' a la lista de canciones"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Todos los artistas"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Tecla %s asignada a %s y %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Configuración de teclas"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Salir"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Mover el cursor hacia arriba"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Mover el cursor hacia abajo"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Mover el cursor hasta el principio de la pantalla"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Mover el cursor hasta la mitad de la pantalla"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Mover el cursor hasta el final de la pantalla"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Mover el cursor hasta el principio de la lista"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Mover el cursor hasta el final de la lista"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Página arriba"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Página abajo"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Selección del rango"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Bajar una linea"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Subir una linea"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Subir media pantalla"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Bajar media pantalla"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Seleccionar la actual canción en reproducción"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Ayuda"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Pantalla de teclas de acceso"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Navegador"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Reproducir/Entrar en el directorio"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pausa"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Parar"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Reducir lista de canciónes a canción marcado"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Siguiente"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Anterior"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Avanzar"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Retroceder"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Subir el volumen"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Bajar el volumen"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Seleccionar/Deseleccionar la canción en la lista"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Seleccionar todos"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Borrar la canción de la lista"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Alternar modo repetición"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Alternar modo aleatorio"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Alternar modo compacto"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Alternar modo completo"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Alternar modo crossfade"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Iniciar la actualización de la BD musical"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Añadir una URL o fichero a la lista"
286
+msgid "Append song to queue"
287
+msgstr "Añadir la canción de la lista"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Entrar al directorio fundamental"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Entrar al directorio superior"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Encontrar la canción en el navegador"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Moverlo arriba"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Moverlo abajo"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Actualizar la ventana"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Alternar modo de búsqueda"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Alternar centrado automático de la ventana"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Pantalla siguiente"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Pantalla anterior"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Volver a la anterior pantalla"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Buscar hacia adelante"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Buscar siguiente"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Buscar hacia atrás"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Buscar anterior"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Saltar a"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Artistas"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Búsqueda"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Cambiar el modo de búsqueda"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Ver la canción seleccionada y reproducida"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Letras"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Interrumpir la acción"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Actualizar las letras"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Pantalla de salidas"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Pantalla siguiente"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Indefinido"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Espacio"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Borrar"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Arriba"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Abajo"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Izquierda"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Derecha"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Inicio"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "Fin"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "Pagina siguiente"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "Pagina anterior"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tabulador"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tabulador"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insertar"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Tecla %s asignada a %s y %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Error"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Definición incorrecta de la tecla de acceso"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Comando desconocido"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Configuración incompleta de la tecla de acceso"
545
 
546
@@ -447,823 +382,889 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Configuración incorrecta del tipo de duración mostrada"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Falta un '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Nombre de color incorrecto"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Definición de color incompleta"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Número inválido"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Definición de color erronea"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Nombre de pantalla desconocido"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Modo de búsqueda inválido"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "No se reconoce el modo de búsqueda"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Parámetro de configuración desconocido"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "s"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "La terminal no soporta el cambio de colores"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "No se puede borrar el elemento"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Selección de rango desactivada"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Borrar la lista de canciones"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Selección de rango activada"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Ejecución interrumpida"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Conectándose a %s... [Presiona %s para interrumpir la ejecución]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Lista de reproducción borrada"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Navegar"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr ""
658
-"Error: La versión %d.%d.%d del MPD es demasiado antigua (se necesita al "
659
-"menos la %s)"
660
+msgid "Loading playlist '%s'"
661
+msgstr "Cargando la lista %s..."
662
 
663
-#: src/Main.cxx:317
664
-#, c-format
665
-msgid "press %s for the key editor"
666
-msgstr "pressiona %s para accer al editor de teclas"
667
+#: src/HelpPage.cxx:60
668
+msgid "Movement"
669
+msgstr "Navegar"
670
 
671
-#. To translators: these credits are shown
672
-#. when ncmpc is started with "--version"
673
-#: src/options.cxx:209 src/options.cxx:212
674
-msgid "translator-credits"
675
-msgstr ""
676
-"Launchpad Contributions:\n"
677
-"  Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n"
678
-"  Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount\n"
679
-"  Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet\n"
680
-"  Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n"
681
-"  Luis Miguel D.P. https://launchpad.net/~lmdp\n"
682
-"  Max Kellermann https://launchpad.net/~max-duempel\n"
683
-"  Monkey https://launchpad.net/~monkey-libre\n"
684
-"  Paco Molinero https://launchpad.net/~franciscomol"
685
+#: src/HelpPage.cxx:105
686
+msgid "Global"
687
+msgstr "Global"
688
 
689
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
690
-msgid "Shuffled queue"
691
-msgstr ""
692
+#: src/HelpPage.cxx:142
693
+msgid "Play"
694
+msgstr "Reproducir"
695
 
696
-#: src/player_command.cxx:184
697
-msgid "Cleared queue"
698
-msgstr ""
699
+#: src/HelpPage.cxx:149
700
+msgid "Center"
701
+msgstr "Centro"
702
 
703
-#. query the user for a filename
704
-#: src/save_playlist.cxx:109
705
-msgid "Save queue as"
706
-msgstr ""
707
+#: src/HelpPage.cxx:157
708
+msgid "Enter directory/Select and play song"
709
+msgstr "Acceder al directorio/Seleccionar y reproducir canción"
710
 
711
-#: src/save_playlist.cxx:140
712
-#, fuzzy, c-format
713
-msgid "Replace %s?"
714
-msgstr "Sustituir %s [%s%s] ? "
715
+#: src/HelpPage.cxx:161
716
+msgid "Delete playlist"
717
+msgstr "Borrar la lista de canciones"
718
 
719
-#. translators: a dialog was aborted by the user
720
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
721
-#: src/screen_lyrics.cxx:370
722
-msgid "Aborted"
723
-msgstr "Ejecución interrumpida"
724
+#: src/HelpPage.cxx:171
725
+#, fuzzy
726
+msgid "New search"
727
+msgstr "Búsqueda"
728
 
729
-#. success
730
-#: src/save_playlist.cxx:171
731
-#, c-format
732
-msgid "Saved %s"
733
-msgstr "%s Guardada"
734
+#: src/HelpPage.cxx:172
735
+msgid "Select and play"
736
+msgstr "Seleccionar y reproducir"
737
 
738
-#: src/screen.cxx:154
739
-msgid "Repeat mode is on"
740
-msgstr "Modo repetición activado"
741
+#: src/HelpPage.cxx:183
742
+msgid "View Lyrics"
743
+msgstr "Ver letras"
744
 
745
-#: src/screen.cxx:155
746
-msgid "Repeat mode is off"
747
-msgstr "Modo repetición desactivado"
748
+#: src/HelpPage.cxx:184
749
+msgid "(Re)load lyrics"
750
+msgstr "(Re)cargar letras"
751
 
752
-#: src/screen.cxx:159
753
-msgid "Random mode is on"
754
-msgstr "Modo aleatorio activado"
755
+#. to translators: this hotkey aborts the retrieval of lyrics
756
+#. from the server
757
+#: src/HelpPage.cxx:187
758
+msgid "Interrupt retrieval"
759
+msgstr "Interrumpir la descarga"
760
 
761
-#: src/screen.cxx:160
762
-msgid "Random mode is off"
763
-msgstr "Modo aleatorio desactivado"
764
+#: src/HelpPage.cxx:188
765
+msgid "Download lyrics for currently playing song"
766
+msgstr "Obtener las letras de la canción reproducida"
767
 
768
-#. "single" mode means
769
-#. that MPD will
770
-#. automatically stop
771
-#. after playing one
772
-#. single song
773
-#: src/screen.cxx:169
774
-msgid "Single mode is on"
775
-msgstr "Modo compacto activado"
776
+#: src/HelpPage.cxx:189
777
+#, fuzzy
778
+msgid "Add or edit lyrics"
779
+msgstr "No hay letras guardadas"
780
 
781
-#: src/screen.cxx:170
782
-msgid "Single mode is off"
783
-msgstr "Modo compacto desactivado"
784
+#: src/HelpPage.cxx:190
785
+msgid "Save lyrics"
786
+msgstr "Guardar las letras"
787
 
788
-#. "consume" mode means
789
-#. that MPD removes each
790
-#. song which has
791
-#. finished playing
792
-#: src/screen.cxx:178
793
-msgid "Consume mode is on"
794
-msgstr "Modo completo activado"
795
+#: src/HelpPage.cxx:191
796
+msgid "Delete saved lyrics"
797
+msgstr "Borrar letras guardadas"
798
 
799
-#: src/screen.cxx:179
800
-msgid "Consume mode is off"
801
-msgstr "Modo compacto desactivado"
802
+#: src/HelpPage.cxx:198
803
+msgid "Enable/disable output"
804
+msgstr "Activar/desactivar la salida"
805
 
806
-#: src/screen.cxx:182
807
-#, c-format
808
-msgid "Crossfade %d seconds"
809
-msgstr "Desvanecimiento de %d segundos"
810
+#: src/HelpPage.cxx:205
811
+msgid "Write a message"
812
+msgstr ""
813
 
814
-#: src/screen.cxx:194
815
-msgid "Database updated"
816
-msgstr "Base de datos actualizada"
817
+#: src/HelpPage.cxx:210
818
+msgid "Keydef screen"
819
+msgstr "Pantalla de teclas de acceso"
820
 
821
-#: src/screen.cxx:226
822
-msgid "Find mode: Wrapped"
823
-msgstr "Tipo de búsqueda: simple"
824
+#: src/HelpPage.cxx:212
825
+msgid "Edit keydefs for selected command"
826
+msgstr "Cambia las teclas de acceso rápido para el comando seleccionado"
827
 
828
-#: src/screen.cxx:227
829
-msgid "Find mode: Normal"
830
-msgstr "Tipo de búsqueda: Normal"
831
+#: src/HelpPage.cxx:213
832
+msgid "Remove selected keydef"
833
+msgstr "ELiminar la tecla de acceso rápido seleccionada"
834
 
835
-#: src/screen.cxx:232
836
-msgid "Auto center mode: On"
837
-msgstr "Modo autocentrado activado"
838
+#: src/HelpPage.cxx:214
839
+#, fuzzy
840
+msgid "Add a keydef"
841
+msgstr "Introduce una nueva tecla"
842
 
843
-#: src/screen.cxx:233
844
-msgid "Auto center mode: Off"
845
-msgstr "Modo autocentrado desactivado"
846
+#: src/HelpPage.cxx:215
847
+msgid "Go up a level"
848
+msgstr "Subir un nivel"
849
 
850
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
851
-msgid "All tracks"
852
-msgstr "Todas las pistas"
853
+#: src/HelpPage.cxx:216
854
+msgid "Apply and save changes"
855
+msgstr "Aplicar y guardar los cambios"
856
 
857
-#: src/screen_artist.cxx:384
858
-msgid "All artists"
859
-msgstr "Todos los artistas"
860
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
861
+msgid "Help"
862
+msgstr "Ayuda"
863
 
864
-#: src/screen_artist.cxx:389
865
-#, c-format
866
-msgid "Albums of artist: %s"
867
-msgstr "Álbumes del artista: %s"
868
+#: src/i18n.h:43
869
+msgid "y"
870
+msgstr "s"
871
 
872
-#: src/screen_artist.cxx:398
873
-#, c-format
874
-msgid "All tracks of artist: %s"
875
-msgstr "Todas las pistas del artista: %s"
876
+#: src/i18n.h:44
877
+msgid "n"
878
+msgstr "n"
879
 
880
-#: src/screen_artist.cxx:401
881
-#, c-format
882
-msgid "Album: %s - %s"
883
-msgstr "Álbum: %s - %s"
884
+#: src/KeyName.cxx:31
885
+msgid "Undefined"
886
+msgstr "Indefinido"
887
 
888
-#: src/screen_artist.cxx:405
889
-#, c-format
890
-msgid "Tracks of no album of artist: %s"
891
-msgstr "Pistas del no álbum de artista: %s"
892
+#: src/KeyName.cxx:33
893
+msgid "Space"
894
+msgstr "Espacio"
895
 
896
-#: src/screen_artist.cxx:450
897
-#, c-format
898
-msgid "Adding album %s..."
899
-msgstr "Agregando álbum %s..."
900
+#: src/KeyName.cxx:35
901
+msgid "Enter"
902
+msgstr "Enter"
903
+
904
+#: src/KeyName.cxx:37
905
+msgid "Backspace"
906
+msgstr "Backspace"
907
+
908
+#: src/KeyName.cxx:39
909
+msgid "Delete"
910
+msgstr "Borrar"
911
+
912
+#: src/KeyName.cxx:41
913
+msgid "Up"
914
+msgstr "Arriba"
915
+
916
+#: src/KeyName.cxx:43
917
+msgid "Down"
918
+msgstr "Abajo"
919
+
920
+#: src/KeyName.cxx:45
921
+msgid "Left"
922
+msgstr "Izquierda"
923
+
924
+#: src/KeyName.cxx:47
925
+msgid "Right"
926
+msgstr "Derecha"
927
+
928
+#: src/KeyName.cxx:49
929
+msgid "Home"
930
+msgstr "Inicio"
931
+
932
+#: src/KeyName.cxx:51
933
+msgid "End"
934
+msgstr "Fin"
935
+
936
+#: src/KeyName.cxx:53
937
+msgid "PageDown"
938
+msgstr "Pagina siguiente"
939
+
940
+#: src/KeyName.cxx:55
941
+msgid "PageUp"
942
+msgstr "Pagina anterior"
943
+
944
+#: src/KeyName.cxx:57
945
+msgid "Tab"
946
+msgstr "Tabulador"
947
 
948
-#: src/screen_artist.cxx:452
949
+#: src/KeyName.cxx:59
950
+msgid "Shift+Tab"
951
+msgstr "Shift+Tabulador"
952
+
953
+#: src/KeyName.cxx:61
954
+msgid "Esc"
955
+msgstr "Esc"
956
+
957
+#: src/KeyName.cxx:63
958
+msgid "Insert"
959
+msgstr "Insertar"
960
+
961
+#: src/KeyName.cxx:71
962
 #, c-format
963
-msgid "Adding %s..."
964
-msgstr "Agregando %s..."
965
+msgid "Ctrl-%c"
966
+msgstr ""
967
 
968
-#: src/screen_browser.cxx:122
969
+#: src/KeyName.cxx:73
970
 #, c-format
971
-msgid "Loading playlist %s..."
972
-msgstr "Cargando la lista %s..."
973
+msgid "Alt-%c"
974
+msgstr ""
975
 
976
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
977
-#: src/screen_browser.cxx:279
978
-#, fuzzy, c-format
979
-msgid "Adding '%s' to queue"
980
-msgstr "Añadiendo '%s' a la lista de canciones"
981
+#: src/ListWindow.cxx:491
982
+msgid "Range selection disabled"
983
+msgstr "Selección de rango desactivada"
984
+
985
+#: src/ListWindow.cxx:496
986
+msgid "Range selection enabled"
987
+msgstr "Selección de rango activada"
988
+
989
+#. translators: no lyrics were found for the song
990
+#: src/LyricsPage.cxx:236
991
+msgid "No lyrics"
992
+msgstr "No hay letras disponibles"
993
 
994
-#: src/screen_chat.cxx:59
995
+#: src/LyricsPage.cxx:254
996
 #, c-format
997
-msgid ""
998
-"connected to MPD %u.%u.%u (you need at least \n"
999
-"version 0.17.0 to use the chat feature)"
1000
+msgid "Lyrics timeout occurred after %d seconds"
1001
 msgstr ""
1002
 
1003
-#: src/screen_chat.cxx:177
1004
-msgid "Your message"
1005
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1006
+#: src/LyricsPage.cxx:490
1007
+msgid "Lyrics"
1008
+msgstr "Letras"
1009
+
1010
+#. translators: this message is displayed
1011
+#. while data is retrieved
1012
+#: src/LyricsPage.cxx:340
1013
+msgid "loading..."
1014
+msgstr "cargando…"
1015
+
1016
+#: src/LyricsPage.cxx:361
1017
+msgid "Editor not configured"
1018
 msgstr ""
1019
 
1020
-#: src/screen_chat.cxx:186
1021
-msgid "Message could not be sent"
1022
+#: src/LyricsPage.cxx:368
1023
+msgid "Do you really want to start an editor and edit these lyrics?"
1024
 msgstr ""
1025
 
1026
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1027
-msgid "Chat"
1028
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1029
+msgid "Can't start editor"
1030
 msgstr ""
1031
 
1032
-#: src/screen_client.cxx:41
1033
-msgid "Database update running..."
1034
-msgstr "Actualizando la base de datos..."
1035
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1036
+msgid "Editor exited unexpectedly"
1037
+msgstr ""
1038
 
1039
-#: src/screen_client.cxx:49
1040
-#, c-format
1041
-msgid "Database update of %s started"
1042
-msgstr "Ha comenzado la actualización de la base de datos %s"
1043
+#. lyrics for the song were saved on hard disk
1044
+#: src/LyricsPage.cxx:439
1045
+msgid "Lyrics saved"
1046
+msgstr "Letras guardadas"
1047
 
1048
-#: src/screen_client.cxx:52
1049
-msgid "Database update started"
1050
-msgstr "Ha comenzado la actualización de la base de datos"
1051
+#: src/LyricsPage.cxx:445
1052
+msgid "Lyrics deleted"
1053
+msgstr "Letras borradas"
1054
 
1055
-#. translators: the "delete" command is only possible
1056
-#. for playlists; the user attempted to delete a song
1057
-#. or a directory or something else
1058
-#: src/screen_file.cxx:200
1059
-msgid "Deleting this item is not possible"
1060
-msgstr "No se puede borrar el elemento"
1061
+#: src/LyricsPage.cxx:446
1062
+msgid "No saved lyrics"
1063
+msgstr "No hay letras guardadas"
1064
 
1065
-#: src/screen_file.cxx:207
1066
+#: src/Main.cxx:167
1067
 #, fuzzy, c-format
1068
-msgid "Delete playlist %s?"
1069
-msgstr "Borrar la lista de canciones"
1070
-
1071
-#. translators: MPD deleted the playlist, as requested by the
1072
-#. user
1073
-#: src/screen_file.cxx:227
1074
-msgid "Playlist deleted"
1075
-msgstr "Lista de reproducción borrada"
1076
-
1077
-#. translators: caption of the browser screen
1078
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1079
-msgid "Browse"
1080
-msgstr "Navegar"
1081
+msgid "Connecting to %s"
1082
+msgstr "Conectado a %s"
1083
 
1084
-#: src/screen_find.cxx:29
1085
-msgid "Find"
1086
-msgstr "Buscar"
1087
+#: src/Main.cxx:187
1088
+#, fuzzy, c-format
1089
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1090
+msgstr ""
1091
+"Error: La versión %d.%d.%d del MPD es demasiado antigua (se necesita al "
1092
+"menos la %s)"
1093
 
1094
-#: src/screen_find.cxx:30
1095
-msgid "Find backward"
1096
-msgstr "Buscar hacia atrás"
1097
+#. To translators: these credits are shown
1098
+#. when ncmpc is started with "--version"
1099
+#: src/options.cxx:213 src/options.cxx:216
1100
+msgid "translator-credits"
1101
+msgstr ""
1102
+"Launchpad Contributions:\n"
1103
+"  Adolfo Jayme Barrientos https://launchpad.net/~fitoschido\n"
1104
+"  Feder Sáiz https://launchpad.net/~federsaiz-deactivatedaccount\n"
1105
+"  Johám-Luís Miguéns Vila https://launchpad.net/~ashtophet\n"
1106
+"  Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n"
1107
+"  Luis Miguel D.P. https://launchpad.net/~lmdp\n"
1108
+"  Max Kellermann https://launchpad.net/~max-duempel\n"
1109
+"  Monkey https://launchpad.net/~monkey-libre\n"
1110
+"  Paco Molinero https://launchpad.net/~franciscomol"
1111
 
1112
-#: src/screen_find.cxx:31
1113
-msgid "Jump"
1114
-msgstr "Saltar"
1115
+#: src/OutputsPage.cxx:87
1116
+#, c-format
1117
+msgid "Output '%s' enabled"
1118
+msgstr "Se activó la salida '%s'"
1119
 
1120
-#: src/screen_find.cxx:82
1121
+#: src/OutputsPage.cxx:98
1122
 #, c-format
1123
-msgid "Unable to find '%s'"
1124
-msgstr "No se pudo encontrar %s"
1125
+msgid "Output '%s' disabled"
1126
+msgstr "Se desactivó la salida '%s'"
1127
 
1128
-#: src/screen_help.cxx:39
1129
-msgid "Movement"
1130
-msgstr "Navegar"
1131
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1132
+msgid "Outputs"
1133
+msgstr "Salidas"
1134
 
1135
-#: src/screen_help.cxx:84
1136
-msgid "Global"
1137
-msgstr "Global"
1138
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1139
+msgid "Shuffled queue"
1140
+msgstr ""
1141
 
1142
-#: src/screen_help.cxx:121
1143
-msgid "Play"
1144
-msgstr "Reproducir"
1145
+#: src/player_command.cxx:186
1146
+msgid "Cleared queue"
1147
+msgstr ""
1148
 
1149
-#: src/screen_help.cxx:124
1150
-msgid "Move song up"
1151
-msgstr "Mover la canción arriba"
1152
+#. get path
1153
+#: src/QueuePage.cxx:307
1154
+msgid "Add"
1155
+msgstr "Añadir"
1156
 
1157
-#: src/screen_help.cxx:125
1158
-msgid "Move song down"
1159
-msgstr "Mover la canción abajo"
1160
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1161
+msgid "Queue"
1162
+msgstr ""
1163
 
1164
-#: src/screen_help.cxx:128
1165
-msgid "Center"
1166
-msgstr "Centro"
1167
+#: src/QueuePage.cxx:380
1168
+#, c-format
1169
+msgid "Queue on %s"
1170
+msgstr ""
1171
 
1172
-#: src/screen_help.cxx:136
1173
-msgid "Enter directory/Select and play song"
1174
-msgstr "Acceder al directorio/Seleccionar y reproducir canción"
1175
+#. query the user for a filename
1176
+#: src/save_playlist.cxx:85
1177
+msgid "Save queue as"
1178
+msgstr ""
1179
 
1180
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1181
-#, fuzzy
1182
-msgid "Append song to queue"
1183
-msgstr "Añadir la canción de la lista"
1184
+#: src/save_playlist.cxx:107
1185
+#, fuzzy, c-format
1186
+msgid "Replace %s?"
1187
+msgstr "Sustituir %s [%s%s] ? "
1188
 
1189
-#: src/screen_help.cxx:140
1190
-msgid "Delete playlist"
1191
-msgstr "Borrar la lista de canciones"
1192
+#. success
1193
+#: src/save_playlist.cxx:128
1194
+#, c-format
1195
+msgid "Saved %s"
1196
+msgstr "%s Guardada"
1197
 
1198
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1199
-msgid "Search"
1200
-msgstr "Búsqueda"
1201
+#: src/screen_artist.cxx:186
1202
+#, c-format
1203
+msgid "All tracks of artist: %s"
1204
+msgstr "Todas las pistas del artista: %s"
1205
 
1206
-#: src/screen_help.cxx:151
1207
-msgid "Select and play"
1208
-msgstr "Seleccionar y reproducir"
1209
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1210
+msgid "Album"
1211
+msgstr "Álbum"
1212
 
1213
-#: src/screen_help.cxx:162
1214
-msgid "View Lyrics"
1215
-msgstr "Ver letras"
1216
+#: src/screen_artist.cxx:195
1217
+#, c-format
1218
+msgid "Tracks of no album of artist: %s"
1219
+msgstr "Pistas del no álbum de artista: %s"
1220
 
1221
-#: src/screen_help.cxx:163
1222
-msgid "(Re)load lyrics"
1223
-msgstr "(Re)cargar letras"
1224
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1225
+msgid "Artist"
1226
+msgstr "Artista"
1227
 
1228
-#. to translators: this hotkey aborts the retrieval of lyrics
1229
-#. from the server
1230
-#: src/screen_help.cxx:166
1231
-msgid "Interrupt retrieval"
1232
-msgstr "Interrumpir la descarga"
1233
+#: src/screen_client.cxx:41
1234
+#, fuzzy
1235
+msgid "Database update running"
1236
+msgstr "Actualizando la base de datos..."
1237
 
1238
-#: src/screen_help.cxx:167
1239
-msgid "Download lyrics for currently playing song"
1240
-msgstr "Obtener las letras de la canción reproducida"
1241
+#: src/screen_client.cxx:48
1242
+#, c-format
1243
+msgid "Database update of %s started"
1244
+msgstr "Ha comenzado la actualización de la base de datos %s"
1245
 
1246
-#: src/screen_help.cxx:168
1247
-#, fuzzy
1248
-msgid "Add or edit lyrics"
1249
-msgstr "No hay letras guardadas"
1250
+#: src/screen_client.cxx:51
1251
+msgid "Database update started"
1252
+msgstr "Ha comenzado la actualización de la base de datos"
1253
 
1254
-#: src/screen_help.cxx:169
1255
-msgid "Save lyrics"
1256
-msgstr "Guardar las letras"
1257
+#: src/screen.cxx:160
1258
+msgid "Repeat mode is on"
1259
+msgstr "Modo repetición activado"
1260
 
1261
-#: src/screen_help.cxx:170
1262
-msgid "Delete saved lyrics"
1263
-msgstr "Borrar letras guardadas"
1264
+#: src/screen.cxx:161
1265
+msgid "Repeat mode is off"
1266
+msgstr "Modo repetición desactivado"
1267
 
1268
-#: src/screen_help.cxx:177
1269
-msgid "Enable/disable output"
1270
-msgstr "Activar/desactivar la salida"
1271
+#: src/screen.cxx:165
1272
+msgid "Random mode is on"
1273
+msgstr "Modo aleatorio activado"
1274
 
1275
-#: src/screen_help.cxx:184
1276
-msgid "Write a message"
1277
-msgstr ""
1278
+#: src/screen.cxx:166
1279
+msgid "Random mode is off"
1280
+msgstr "Modo aleatorio desactivado"
1281
 
1282
-#: src/screen_help.cxx:189
1283
-msgid "Keydef screen"
1284
-msgstr "Pantalla de teclas de acceso"
1285
+#. "single" mode means
1286
+#. that MPD will
1287
+#. automatically stop
1288
+#. after playing one
1289
+#. single song
1290
+#: src/screen.cxx:175
1291
+msgid "Single mode is on"
1292
+msgstr "Modo compacto activado"
1293
 
1294
-#: src/screen_help.cxx:191
1295
-msgid "Edit keydefs for selected command"
1296
-msgstr "Cambia las teclas de acceso rápido para el comando seleccionado"
1297
+#: src/screen.cxx:176
1298
+msgid "Single mode is off"
1299
+msgstr "Modo compacto desactivado"
1300
 
1301
-#: src/screen_help.cxx:192
1302
-msgid "Remove selected keydef"
1303
-msgstr "ELiminar la tecla de acceso rápido seleccionada"
1304
+#. "consume" mode means
1305
+#. that MPD removes each
1306
+#. song which has
1307
+#. finished playing
1308
+#: src/screen.cxx:184
1309
+msgid "Consume mode is on"
1310
+msgstr "Modo completo activado"
1311
 
1312
-#: src/screen_help.cxx:193
1313
-#, fuzzy
1314
-msgid "Add a keydef"
1315
-msgstr "Introduce una nueva tecla"
1316
+#: src/screen.cxx:185
1317
+msgid "Consume mode is off"
1318
+msgstr "Modo compacto desactivado"
1319
 
1320
-#: src/screen_help.cxx:194
1321
-msgid "Go up a level"
1322
-msgstr "Subir un nivel"
1323
+#: src/screen.cxx:188
1324
+#, c-format
1325
+msgid "Crossfade %d seconds"
1326
+msgstr "Desvanecimiento de %d segundos"
1327
 
1328
-#: src/screen_help.cxx:195
1329
-msgid "Apply and save changes"
1330
-msgstr "Aplicar y guardar los cambios"
1331
+#: src/screen.cxx:200
1332
+msgid "Database updated"
1333
+msgstr "Base de datos actualizada"
1334
 
1335
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1336
-msgid "Help"
1337
-msgstr "Ayuda"
1338
+#: src/screen.cxx:250
1339
+msgid "Find mode: Wrapped"
1340
+msgstr "Tipo de búsqueda: simple"
1341
 
1342
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1343
-msgid "Error: Screen too small"
1344
-msgstr "Error: La ventana/pantalla es muy pequeña"
1345
+#: src/screen.cxx:251
1346
+msgid "Find mode: Normal"
1347
+msgstr "Tipo de búsqueda: Normal"
1348
 
1349
-#: src/screen_keydef.cxx:141
1350
-msgid "You have new key bindings"
1351
-msgstr "Has definido nuevas teclas de acceso rápido"
1352
+#: src/screen.cxx:256
1353
+msgid "Auto center mode: On"
1354
+msgstr "Modo autocentrado activado"
1355
 
1356
-#: src/screen_keydef.cxx:143
1357
-msgid "Keybindings unchanged."
1358
-msgstr "Las teclas de acceso rápido no han sido modificadas."
1359
+#: src/screen.cxx:257
1360
+msgid "Auto center mode: Off"
1361
+msgstr "Modo autocentrado desactivado"
1362
 
1363
-#: src/screen_keydef.cxx:153
1364
-#, c-format
1365
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1366
-msgstr "Error: No se ha podido crear el directorio ~/.ncmpc - %s"
1367
+#: src/screen_find.cxx:31
1368
+msgid "Find"
1369
+msgstr "Buscar"
1370
 
1371
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1372
-#, c-format
1373
-msgid "Error: %s - %s"
1374
-msgstr "Error: %s - %s"
1375
+#: src/screen_find.cxx:32
1376
+msgid "Find backward"
1377
+msgstr "Buscar hacia atrás"
1378
 
1379
-#: src/screen_keydef.cxx:171
1380
+#: src/screen_find.cxx:33
1381
+msgid "Jump"
1382
+msgstr "Saltar"
1383
+
1384
+#: src/screen_find.cxx:79
1385
 #, c-format
1386
-msgid "Wrote %s"
1387
-msgstr "%s creado"
1388
+msgid "Unable to find '%s'"
1389
+msgstr "No se pudo encontrar %s"
1390
 
1391
-#: src/screen_keydef.cxx:250
1392
+#: src/screen_keydef.cxx:161
1393
 msgid "Deleted"
1394
 msgstr "Borrado"
1395
 
1396
-#: src/screen_keydef.cxx:265
1397
+#: src/screen_keydef.cxx:177
1398
 #, c-format
1399
 msgid "Enter new key for %s: "
1400
 msgstr "Introduce tecla de acceso rápido para %s: "
1401
 
1402
-#: src/screen_keydef.cxx:276
1403
+#: src/screen_keydef.cxx:187
1404
 msgid "Ctrl-Space can't be used"
1405
 msgstr ""
1406
 
1407
-#: src/screen_keydef.cxx:282
1408
+#: src/screen_keydef.cxx:193
1409
 #, c-format
1410
 msgid "Error: key %s is already used for %s"
1411
 msgstr "Error: la tecla %s ya está asignada a %s"
1412
 
1413
-#: src/screen_keydef.cxx:291
1414
+#: src/screen_keydef.cxx:202
1415
 #, c-format
1416
 msgid "Assigned %s to %s"
1417
 msgstr "%s asignada a %s"
1418
 
1419
-#: src/screen_keydef.cxx:317
1420
-msgid "===> Apply key bindings "
1421
-msgstr "===> Aplicar las teclas de acceso rápido "
1422
-
1423
-#: src/screen_keydef.cxx:319
1424
-msgid "===> Apply & Save key bindings  "
1425
-msgstr "===> Aplicar y guardar las teclas de acceso rápido  "
1426
-
1427
-#: src/screen_keydef.cxx:347
1428
+#: src/screen_keydef.cxx:229
1429
 msgid "Add new key"
1430
 msgstr "Introduce una nueva tecla"
1431
 
1432
-#: src/screen_keydef.cxx:410
1433
-msgid "Note: Did you forget to 'Apply' your changes?"
1434
-msgstr "Nota: Has olvidado 'Aplicar' tus cambios?"
1435
-
1436
-#: src/screen_keydef.cxx:417
1437
-msgid "Edit key bindings"
1438
-msgstr "Cambia las teclas de acceso rápido"
1439
-
1440
-#: src/screen_keydef.cxx:419
1441
+#: src/screen_keydef.cxx:251
1442
 #, c-format
1443
 msgid "Edit keys for %s"
1444
 msgstr "Cambia las teclas para %s"
1445
 
1446
-#. translators: no lyrics were found for the song
1447
-#: src/screen_lyrics.cxx:208
1448
-msgid "No lyrics"
1449
-msgstr "No hay letras disponibles"
1450
-
1451
-#: src/screen_lyrics.cxx:226
1452
-#, c-format
1453
-msgid "Lyrics timeout occurred after %d seconds"
1454
-msgstr ""
1455
-
1456
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1457
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1458
-msgid "Lyrics"
1459
-msgstr "Letras"
1460
-
1461
-#. translators: this message is displayed
1462
-#. while data is retrieved
1463
-#: src/screen_lyrics.cxx:330
1464
-msgid "loading..."
1465
-msgstr "cargando…"
1466
-
1467
-#: src/screen_lyrics.cxx:361
1468
-msgid "Editor not configured"
1469
-msgstr ""
1470
-
1471
-#: src/screen_lyrics.cxx:367
1472
-msgid "Do you really want to start an editor and edit these lyrics?"
1473
-msgstr ""
1474
+#: src/screen_keydef.cxx:393
1475
+msgid "You have new key bindings"
1476
+msgstr "Has definido nuevas teclas de acceso rápido"
1477
 
1478
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1479
-msgid "Can't start editor"
1480
-msgstr ""
1481
+#: src/screen_keydef.cxx:395
1482
+msgid "Keybindings unchanged."
1483
+msgstr "Las teclas de acceso rápido no han sido modificadas."
1484
 
1485
-#: src/screen_lyrics.cxx:411
1486
-#, c-format
1487
-msgid "Editor exited unexpectedly (%d)"
1488
-msgstr ""
1489
+#: src/screen_keydef.cxx:405
1490
+#, fuzzy
1491
+msgid "Unable to write configuration"
1492
+msgstr "Configuración incompleta de la tecla de acceso"
1493
 
1494
-#: src/screen_lyrics.cxx:414
1495
+#: src/screen_keydef.cxx:421
1496
 #, c-format
1497
-msgid "Editor exited unexpectedly (signal %d)"
1498
-msgstr ""
1499
-
1500
-#. lyrics for the song were saved on hard disk
1501
-#: src/screen_lyrics.cxx:436
1502
-msgid "Lyrics saved"
1503
-msgstr "Letras guardadas"
1504
-
1505
-#: src/screen_lyrics.cxx:443
1506
-msgid "Lyrics deleted"
1507
-msgstr "Letras borradas"
1508
-
1509
-#: src/screen_lyrics.cxx:446
1510
-msgid "No saved lyrics"
1511
-msgstr "No hay letras guardadas"
1512
+msgid "Wrote %s"
1513
+msgstr "%s creado"
1514
 
1515
-#: src/screen_outputs.cxx:60
1516
-#, c-format
1517
-msgid "Output '%s' enabled"
1518
-msgstr "Se activó la salida '%s'"
1519
+#: src/screen_keydef.cxx:433
1520
+msgid "===> Apply key bindings "
1521
+msgstr "===> Aplicar las teclas de acceso rápido "
1522
 
1523
-#: src/screen_outputs.cxx:71
1524
-#, c-format
1525
-msgid "Output '%s' disabled"
1526
-msgstr "Se desactivó la salida '%s'"
1527
+#: src/screen_keydef.cxx:435
1528
+msgid "===> Apply & Save key bindings  "
1529
+msgstr "===> Aplicar y guardar las teclas de acceso rápido  "
1530
 
1531
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1532
-msgid "Outputs"
1533
-msgstr "Salidas"
1534
+#: src/screen_keydef.cxx:472
1535
+msgid "Edit key bindings"
1536
+msgstr "Cambia las teclas de acceso rápido"
1537
 
1538
-#. get path
1539
-#: src/screen_queue.cxx:274
1540
-msgid "Add"
1541
-msgstr "Añadir"
1542
+#: src/screen_keydef.cxx:554
1543
+msgid "Note: Did you forget to 'Apply' your changes?"
1544
+msgstr "Nota: Has olvidado 'Aplicar' tus cambios?"
1545
 
1546
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1547
-msgid "Queue"
1548
+#: src/screen_keydef.cxx:604
1549
+msgid "Keys"
1550
 msgstr ""
1551
 
1552
-#: src/screen_queue.cxx:384
1553
-#, c-format
1554
-msgid "Queue on %s"
1555
-msgstr ""
1556
+#: src/screen_utils.cxx:124
1557
+msgid "Password"
1558
+msgstr "Contraseña"
1559
 
1560
-#: src/screen_search.cxx:48
1561
+#: src/SearchPage.cxx:51
1562
 msgid "artist"
1563
 msgstr "artista"
1564
 
1565
-#: src/screen_search.cxx:49
1566
+#: src/SearchPage.cxx:52
1567
 msgid "album"
1568
 msgstr "álbum"
1569
 
1570
-#: src/screen_search.cxx:50
1571
+#: src/SearchPage.cxx:53
1572
 msgid "title"
1573
 msgstr "título"
1574
 
1575
-#: src/screen_search.cxx:51
1576
+#: src/SearchPage.cxx:54
1577
 msgid "track"
1578
 msgstr "canción"
1579
 
1580
-#: src/screen_search.cxx:52
1581
+#: src/SearchPage.cxx:55
1582
 msgid "name"
1583
 msgstr "nombre"
1584
 
1585
-#: src/screen_search.cxx:53
1586
+#: src/SearchPage.cxx:56
1587
 msgid "genre"
1588
 msgstr "estilo"
1589
 
1590
-#: src/screen_search.cxx:54
1591
+#: src/SearchPage.cxx:57
1592
 msgid "date"
1593
 msgstr "fecha"
1594
 
1595
-#: src/screen_search.cxx:55
1596
+#: src/SearchPage.cxx:58
1597
 msgid "composer"
1598
 msgstr "compositor"
1599
 
1600
-#: src/screen_search.cxx:56
1601
+#: src/SearchPage.cxx:59
1602
 msgid "performer"
1603
 msgstr "intérprete"
1604
 
1605
-#: src/screen_search.cxx:57
1606
+#: src/SearchPage.cxx:60
1607
 msgid "comment"
1608
 msgstr "comentario"
1609
 
1610
-#: src/screen_search.cxx:65
1611
+#: src/SearchPage.cxx:68
1612
 msgid "file"
1613
 msgstr "fichero"
1614
 
1615
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1616
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1617
 msgid "Title"
1618
 msgstr "Título"
1619
 
1620
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1621
-msgid "Artist"
1622
-msgstr "Artista"
1623
-
1624
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1625
-msgid "Album"
1626
-msgstr "Álbum"
1627
-
1628
-#: src/screen_search.cxx:85
1629
+#: src/SearchPage.cxx:88
1630
 msgid "Filename"
1631
 msgstr "Nombre de archivo"
1632
 
1633
-#: src/screen_search.cxx:86
1634
+#: src/SearchPage.cxx:89
1635
 msgid "Artist + Title"
1636
 msgstr "Artista + Título"
1637
 
1638
-#: src/screen_search.cxx:244
1639
-#, c-format
1640
-msgid "No argument for search tag %s"
1641
-msgstr "Sin argumentos para la etiqueta de búsqueda %s"
1642
-
1643
-#: src/screen_search.cxx:253
1644
+#: src/SearchPage.cxx:270
1645
 #, c-format
1646
 msgid "Bad search tag %s"
1647
 msgstr "Etiqueta de búsqueda inválida: %s"
1648
 
1649
-#. if( pattern==nullptr )
1650
-#. search_new(screen, c);
1651
-#. else
1652
-#: src/screen_search.cxx:400
1653
-#, c-format
1654
-msgid "Press %s for a new search"
1655
-msgstr "Pulsa %s para una nueva búsqueda"
1656
-
1657
-#: src/screen_search.cxx:427
1658
-#, c-format
1659
-msgid "Search: %s"
1660
-msgstr "Buscar: %s"
1661
-
1662
-#: src/screen_search.cxx:430
1663
+#: src/SearchPage.cxx:284
1664
 #, c-format
1665
-msgid "Search: Results for %s [%s]"
1666
-msgstr "Búsqueda: Resultados para %s [%s]"
1667
+msgid "No argument for search tag %s"
1668
+msgstr "Sin argumentos para la etiqueta de búsqueda %s"
1669
 
1670
-#: src/screen_search.cxx:434
1671
-#, c-format
1672
-msgid "Search: Press %s for a new search [%s]"
1673
-msgstr "Búsqueda: Pulsar %s para una nueva búsqueda [%s]"
1674
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1675
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1676
+msgid "Search"
1677
+msgstr "Búsqueda"
1678
 
1679
-#: src/screen_search.cxx:458
1680
+#: src/SearchPage.cxx:436
1681
 #, c-format
1682
 msgid "Search mode: %s"
1683
 msgstr "Modo de búsqueda: %s"
1684
 
1685
-#: src/screen_song.cxx:54
1686
+#: src/SongPage.cxx:67
1687
 msgid "Length"
1688
 msgstr "Duración"
1689
 
1690
-#: src/screen_song.cxx:55
1691
+#: src/SongPage.cxx:68
1692
 msgid "Position"
1693
 msgstr ""
1694
 
1695
-#: src/screen_song.cxx:56
1696
+#: src/SongPage.cxx:69
1697
 msgid "Composer"
1698
 msgstr "Compositor"
1699
 
1700
-#: src/screen_song.cxx:57
1701
+#: src/SongPage.cxx:70
1702
 msgid "Name"
1703
 msgstr "Nombre"
1704
 
1705
-#: src/screen_song.cxx:58
1706
+#: src/SongPage.cxx:71
1707
 msgid "Disc"
1708
 msgstr "Disco"
1709
 
1710
-#: src/screen_song.cxx:59
1711
+#: src/SongPage.cxx:72
1712
 msgid "Track"
1713
 msgstr "Pista"
1714
 
1715
-#: src/screen_song.cxx:60
1716
+#: src/SongPage.cxx:73
1717
 msgid "Date"
1718
 msgstr "Fecha"
1719
 
1720
-#: src/screen_song.cxx:61
1721
+#: src/SongPage.cxx:74
1722
 msgid "Genre"
1723
 msgstr "Estilo"
1724
 
1725
-#: src/screen_song.cxx:62
1726
+#: src/SongPage.cxx:75
1727
 msgid "Comment"
1728
 msgstr "Comentario"
1729
 
1730
-#: src/screen_song.cxx:63
1731
+#: src/SongPage.cxx:76
1732
 msgid "Path"
1733
 msgstr "Ruta"
1734
 
1735
-#: src/screen_song.cxx:64
1736
+#: src/SongPage.cxx:77
1737
 msgid "Bitrate"
1738
 msgstr "Bitrate"
1739
 
1740
-#: src/screen_song.cxx:65
1741
+#: src/SongPage.cxx:78
1742
 msgid "Format"
1743
 msgstr ""
1744
 
1745
-#: src/screen_song.cxx:82
1746
+#: src/SongPage.cxx:95
1747
 msgid "Number of artists"
1748
 msgstr "Número de artistas"
1749
 
1750
-#: src/screen_song.cxx:83
1751
+#: src/SongPage.cxx:96
1752
 msgid "Number of albums"
1753
 msgstr "Número de álbumes"
1754
 
1755
-#: src/screen_song.cxx:84
1756
+#: src/SongPage.cxx:97
1757
 msgid "Number of songs"
1758
 msgstr "Número de canciones"
1759
 
1760
-#: src/screen_song.cxx:85
1761
+#: src/SongPage.cxx:98
1762
 msgid "Uptime"
1763
 msgstr "Tiempo de ejecución"
1764
 
1765
-#: src/screen_song.cxx:86
1766
+#: src/SongPage.cxx:99
1767
 msgid "Most recent db update"
1768
 msgstr "Actualización más reciente de la BD"
1769
 
1770
-#: src/screen_song.cxx:87
1771
+#: src/SongPage.cxx:100
1772
 msgid "Playtime"
1773
 msgstr "Tiempo de reproducción"
1774
 
1775
-#: src/screen_song.cxx:88
1776
+#: src/SongPage.cxx:101
1777
 msgid "DB playtime"
1778
 msgstr "Duración de la BD"
1779
 
1780
-#: src/screen_song.cxx:173
1781
+#: src/SongPage.cxx:204
1782
 msgid "Song viewer"
1783
 msgstr "Visor de la canción"
1784
 
1785
-#: src/screen_song.cxx:337
1786
+#: src/SongPage.cxx:370
1787
 msgid "MPD statistics"
1788
 msgstr "Estadísticas del MPD"
1789
 
1790
-#: src/screen_song.cxx:427
1791
+#: src/SongPage.cxx:455
1792
 msgid "Selected song"
1793
 msgstr "Canción seleccionada"
1794
 
1795
-#: src/screen_song.cxx:437
1796
+#: src/SongPage.cxx:465
1797
 msgid "Currently playing song"
1798
 msgstr "Canción reproducida"
1799
 
1800
-#: src/screen_song.cxx:442
1801
+#: src/SongPage.cxx:470
1802
 #, c-format
1803
 msgid "%d kbps"
1804
 msgstr "%d kbps"
1805
 
1806
-#. NOTE: if one day a translator decides to use a multi-byte character
1807
-#. for one of the yes/no keys, we'll have to parse it properly
1808
-#: src/screen_utils.cxx:80
1809
-#, fuzzy, c-format
1810
-msgid "%s [%s/%s] "
1811
-msgstr "Sustituir %s [%s%s] ? "
1812
-
1813
-#: src/screen_utils.cxx:121
1814
-msgid "Password"
1815
-msgstr "Contraseña"
1816
+#: src/SongPage.cxx:554
1817
+msgid "Song"
1818
+msgstr ""
1819
 
1820
-#: src/status_bar.cxx:121
1821
+#: src/StatusBar.cxx:104
1822
 msgid "Playing:"
1823
 msgstr "Escuchando:"
1824
 
1825
-#: src/status_bar.cxx:124
1826
+#: src/StatusBar.cxx:108
1827
 msgid "[Paused]"
1828
 msgstr "[Parado]"
1829
 
1830
-#: src/title_bar.cxx:99
1831
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1832
+#, fuzzy
1833
+msgid "Unknown color"
1834
+msgstr "Comando desconocido"
1835
+
1836
+#: src/Styles.cxx:333
1837
+#, fuzzy
1838
+msgid "Unknown color field"
1839
+msgstr "Advertencia: Propiedad del color - %s no reconocida\n"
1840
+
1841
+#: src/Styles.cxx:375
1842
+msgid "Terminal lacks color capabilities"
1843
+msgstr "La terminal no tiene la opcion de diferentes colores"
1844
+
1845
+#: src/time_format.cxx:44
1846
+msgid "year"
1847
+msgstr ""
1848
+
1849
+#: src/time_format.cxx:46
1850
+msgid "years"
1851
+msgstr ""
1852
+
1853
+#: src/time_format.cxx:54
1854
+msgid "week"
1855
+msgstr ""
1856
+
1857
+#: src/time_format.cxx:57
1858
+msgid "weeks"
1859
+msgstr ""
1860
+
1861
+#: src/time_format.cxx:65
1862
+msgid "day"
1863
+msgstr ""
1864
+
1865
+#: src/time_format.cxx:68
1866
+msgid "days"
1867
+msgstr ""
1868
+
1869
+#: src/TitleBar.cxx:100
1870
 msgid "Volume n/a"
1871
 msgstr "Volumen n/a"
1872
 
1873
-#: src/title_bar.cxx:101
1874
+#: src/TitleBar.cxx:102
1875
 #, c-format
1876
 msgid "Volume %d%%"
1877
 msgstr "Volumen %d%%"
1878
 
1879
+#, fuzzy
1880
+#~ msgid "Add url/file to queue"
1881
+#~ msgstr "Añadir una URL o fichero a la lista"
1882
+
1883
+#~ msgid "Move song up"
1884
+#~ msgstr "Mover la canción arriba"
1885
+
1886
+#~ msgid "Move song down"
1887
+#~ msgstr "Mover la canción abajo"
1888
+
1889
+#~ msgid "Press %s for a new search"
1890
+#~ msgstr "Pulsa %s para una nueva búsqueda"
1891
+
1892
+#~ msgid "Search: %s"
1893
+#~ msgstr "Buscar: %s"
1894
+
1895
+#~ msgid "Search: Results for %s [%s]"
1896
+#~ msgstr "Búsqueda: Resultados para %s [%s]"
1897
+
1898
+#~ msgid "Search: Press %s for a new search [%s]"
1899
+#~ msgstr "Búsqueda: Pulsar %s para una nueva búsqueda [%s]"
1900
+
1901
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1902
+#~ msgstr "Conectándose a %s... [Presiona %s para interrumpir la ejecución]"
1903
+
1904
+#~ msgid "press %s for the key editor"
1905
+#~ msgstr "pressiona %s para accer al editor de teclas"
1906
+
1907
+#~ msgid "Album: %s - %s"
1908
+#~ msgstr "Álbum: %s - %s"
1909
+
1910
+#~ msgid "Adding album %s..."
1911
+#~ msgstr "Agregando álbum %s..."
1912
+
1913
+#~ msgid "Adding %s..."
1914
+#~ msgstr "Agregando %s..."
1915
+
1916
+#~ msgid "Error: Screen too small"
1917
+#~ msgstr "Error: La ventana/pantalla es muy pequeña"
1918
+
1919
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1920
+#~ msgstr "Error: No se ha podido crear el directorio ~/.ncmpc - %s"
1921
+
1922
+#~ msgid "Error: %s - %s"
1923
+#~ msgstr "Error: %s - %s"
1924
+
1925
+#, fuzzy
1926
+#~ msgid "%s [%s/%s] "
1927
+#~ msgstr "Sustituir %s [%s%s] ? "
1928
+
1929
 #~ msgid "Delete playlist %s [%s/%s] ? "
1930
 #~ msgstr "Borrar la lista de reproducción %s [%s/%s] ? "
1931
 
1932
 #~ msgid "Warning: Unknown color - %s\n"
1933
 #~ msgstr "Advertencia: Color %s - no reconocido\n"
1934
 
1935
-#~ msgid "Connected to %s"
1936
-#~ msgstr "Conectado a %s"
1937
-
1938
 #~ msgid "Shuffled playlist"
1939
 #~ msgstr "Lista de canciones barajada"
1940
 
1941
ncmpc-0.30.tar.xz/po/fi.po -> ncmpc-0.32.tar.xz/po/fi.po Changed
1895
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-03-06 16:02+0000\n"
8
 "Last-Translator: Sami Sankala <Unknown>\n"
9
 "Language-Team: Finnish <fi@li.org>\n"
10
@@ -18,418 +18,356 @@
11
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
12
 "X-Generator: Launchpad (build 13265)\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
17
+msgid "All tracks"
18
+msgstr "Kaikki kappaleet"
19
+
20
+#: src/AlbumListPage.cxx:144
21
+#, fuzzy
22
+msgid "Albums"
23
+msgstr "Albumi"
24
+
25
+#: src/AlbumListPage.cxx:146
26
+#, c-format
27
+msgid "Albums of artist: %s"
28
+msgstr "Kaikki albumit esittäjältä: %s"
29
+
30
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
31
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
32
+#, fuzzy, c-format
33
+msgid "Adding '%s' to queue"
34
+msgstr "Soittolistaan lisätään '%s'"
35
+
36
+#: src/ArtistListPage.cxx:114
37
+msgid "All artists"
38
+msgstr "Kaikki esittäjät"
39
+
40
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
41
+#, c-format
42
+msgid "Key %s assigned to %s and %s"
43
 msgstr ""
44
 
45
-#: src/colors.cxx:195
46
-msgid "Unknown color field"
47
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
48
+msgid "Chat"
49
 msgstr ""
50
 
51
-#: src/colors.cxx:228
52
-msgid "Terminal lacks support for changing colors"
53
+#: src/ChatPage.cxx:160
54
+msgid "Your message"
55
 msgstr ""
56
 
57
-#: src/colors.cxx:237
58
-msgid "Terminal lacks color capabilities"
59
+#: src/ChatPage.cxx:169
60
+msgid "Message could not be sent"
61
 msgstr ""
62
 
63
-#: src/command.cxx:63
64
+#: src/Command.cxx:29
65
 msgid "Key configuration screen"
66
 msgstr ""
67
 
68
-#: src/command.cxx:66
69
+#: src/Command.cxx:32
70
 msgid "Quit"
71
 msgstr ""
72
 
73
-#: src/command.cxx:70
74
+#: src/Command.cxx:36
75
 msgid "Move cursor up"
76
 msgstr ""
77
 
78
-#: src/command.cxx:72
79
+#: src/Command.cxx:38
80
 msgid "Move cursor down"
81
 msgstr ""
82
 
83
-#: src/command.cxx:74
84
+#: src/Command.cxx:40
85
 msgid "Move cursor to the top of screen"
86
 msgstr ""
87
 
88
-#: src/command.cxx:76
89
+#: src/Command.cxx:42
90
 msgid "Move cursor to the middle of screen"
91
 msgstr ""
92
 
93
-#: src/command.cxx:78
94
+#: src/Command.cxx:44
95
 msgid "Move cursor to the bottom of screen"
96
 msgstr ""
97
 
98
-#: src/command.cxx:80
99
+#: src/Command.cxx:46
100
 msgid "Move cursor to the top of the list"
101
 msgstr ""
102
 
103
-#: src/command.cxx:82
104
+#: src/Command.cxx:48
105
 msgid "Move cursor to the bottom of the list"
106
 msgstr ""
107
 
108
-#: src/command.cxx:84
109
+#: src/Command.cxx:50
110
 msgid "Page up"
111
 msgstr ""
112
 
113
-#: src/command.cxx:86
114
+#: src/Command.cxx:52
115
 msgid "Page down"
116
 msgstr ""
117
 
118
-#: src/command.cxx:88
119
+#: src/Command.cxx:54
120
 msgid "Range selection"
121
 msgstr ""
122
 
123
-#: src/command.cxx:90
124
+#: src/Command.cxx:56
125
 msgid "Scroll down one line"
126
 msgstr ""
127
 
128
-#: src/command.cxx:92
129
+#: src/Command.cxx:58
130
 msgid "Scroll up one line"
131
 msgstr ""
132
 
133
-#: src/command.cxx:94
134
+#: src/Command.cxx:60
135
 msgid "Scroll up half a screen"
136
 msgstr ""
137
 
138
-#: src/command.cxx:96
139
+#: src/Command.cxx:62
140
 msgid "Scroll down half a screen"
141
 msgstr ""
142
 
143
-#: src/command.cxx:98
144
+#: src/Command.cxx:64
145
 msgid "Select currently playing song"
146
 msgstr ""
147
 
148
-#: src/command.cxx:103
149
+#: src/Command.cxx:69
150
 msgid "Help screen"
151
 msgstr ""
152
 
153
-#: src/command.cxx:105 src/screen_help.cxx:119
154
+#: src/Command.cxx:71 src/HelpPage.cxx:140
155
 #, fuzzy
156
 msgid "Queue screen"
157
 msgstr "Näppäinmäärittely ruutu"
158
 
159
-#: src/command.cxx:107 src/screen_help.cxx:134
160
+#: src/Command.cxx:73 src/HelpPage.cxx:155
161
 msgid "Browse screen"
162
 msgstr "Selailunäkymä"
163
 
164
-#: src/command.cxx:112
165
+#: src/Command.cxx:78
166
 msgid "Play/Enter directory"
167
 msgstr ""
168
 
169
-#: src/command.cxx:114
170
+#: src/Command.cxx:80
171
 msgid "Pause"
172
 msgstr ""
173
 
174
-#: src/command.cxx:116
175
+#: src/Command.cxx:82
176
 msgid "Stop"
177
 msgstr ""
178
 
179
-#: src/command.cxx:118
180
+#: src/Command.cxx:84
181
 msgid "Crop"
182
 msgstr ""
183
 
184
-#: src/command.cxx:120
185
+#: src/Command.cxx:86
186
 msgid "Next track"
187
 msgstr ""
188
 
189
-#: src/command.cxx:122
190
+#: src/Command.cxx:88
191
 msgid "Previous track"
192
 msgstr ""
193
 
194
-#: src/command.cxx:124
195
+#: src/Command.cxx:90
196
 msgid "Seek forward"
197
 msgstr ""
198
 
199
-#: src/command.cxx:126
200
+#: src/Command.cxx:92
201
 msgid "Seek backward"
202
 msgstr ""
203
 
204
-#: src/command.cxx:128
205
+#: src/Command.cxx:94
206
 msgid "Increase volume"
207
 msgstr ""
208
 
209
-#: src/command.cxx:130
210
+#: src/Command.cxx:96
211
 msgid "Decrease volume"
212
 msgstr ""
213
 
214
-#: src/command.cxx:132
215
+#: src/Command.cxx:98
216
 msgid "Select/deselect song in queue"
217
 msgstr ""
218
 
219
-#: src/command.cxx:134
220
+#: src/Command.cxx:100
221
 msgid "Select all listed items"
222
 msgstr ""
223
 
224
-#: src/command.cxx:136
225
+#: src/Command.cxx:102
226
 msgid "Delete song from queue"
227
 msgstr ""
228
 
229
-#: src/command.cxx:138
230
+#: src/Command.cxx:104
231
 msgid "Shuffle queue"
232
 msgstr ""
233
 
234
-#: src/command.cxx:140
235
+#: src/Command.cxx:106
236
 msgid "Clear queue"
237
 msgstr ""
238
 
239
-#: src/command.cxx:142
240
+#: src/Command.cxx:108
241
 msgid "Toggle repeat mode"
242
 msgstr ""
243
 
244
-#: src/command.cxx:144
245
+#: src/Command.cxx:110
246
 msgid "Toggle random mode"
247
 msgstr ""
248
 
249
-#: src/command.cxx:146
250
+#: src/Command.cxx:112
251
 msgid "Toggle single mode"
252
 msgstr ""
253
 
254
-#: src/command.cxx:148
255
+#: src/Command.cxx:114
256
 msgid "Toggle consume mode"
257
 msgstr ""
258
 
259
-#: src/command.cxx:150
260
+#: src/Command.cxx:116
261
 msgid "Toggle crossfade mode"
262
 msgstr ""
263
 
264
-#: src/command.cxx:152
265
+#: src/Command.cxx:118
266
 msgid "Start a music database update"
267
 msgstr ""
268
 
269
-#: src/command.cxx:154
270
+#: src/Command.cxx:120
271
 msgid "Save queue"
272
 msgstr ""
273
 
274
-#: src/command.cxx:156
275
-msgid "Add url/file to queue"
276
-msgstr ""
277
+#: src/Command.cxx:122 src/HelpPage.cxx:174
278
+#, fuzzy
279
+msgid "Append song to queue"
280
+msgstr "Lisää kappale soittolistaan"
281
 
282
-#: src/command.cxx:159
283
+#: src/Command.cxx:125
284
 msgid "Go to root directory"
285
 msgstr ""
286
 
287
-#: src/command.cxx:161
288
+#: src/Command.cxx:127
289
 msgid "Go to parent directory"
290
 msgstr ""
291
 
292
-#: src/command.cxx:164
293
+#: src/Command.cxx:130
294
 msgid "Locate song in browser"
295
 msgstr ""
296
 
297
-#: src/command.cxx:168
298
+#: src/Command.cxx:134
299
 msgid "Move item up"
300
 msgstr ""
301
 
302
-#: src/command.cxx:170
303
+#: src/Command.cxx:136
304
 msgid "Move item down"
305
 msgstr ""
306
 
307
-#: src/command.cxx:172
308
+#: src/Command.cxx:138
309
 msgid "Refresh screen"
310
 msgstr ""
311
 
312
 #. translators: toggle between wrapping and non-wrapping
313
 #. search
314
-#: src/command.cxx:179
315
+#: src/Command.cxx:145
316
 msgid "Toggle find mode"
317
 msgstr ""
318
 
319
 #. translators: the auto center mode always centers the song
320
 #. currently being played
321
-#: src/command.cxx:183
322
+#: src/Command.cxx:149
323
 msgid "Toggle auto center mode"
324
 msgstr ""
325
 
326
-#: src/command.cxx:188
327
+#: src/Command.cxx:154
328
 msgid "Next screen"
329
 msgstr ""
330
 
331
-#: src/command.cxx:190
332
+#: src/Command.cxx:156
333
 msgid "Previous screen"
334
 msgstr ""
335
 
336
-#: src/command.cxx:192
337
+#: src/Command.cxx:158
338
 msgid "Swap to most recent screen"
339
 msgstr ""
340
 
341
-#: src/command.cxx:197
342
+#: src/Command.cxx:163
343
 msgid "Forward find"
344
 msgstr ""
345
 
346
-#: src/command.cxx:199
347
+#: src/Command.cxx:165
348
 msgid "Forward find next"
349
 msgstr ""
350
 
351
-#: src/command.cxx:201
352
+#: src/Command.cxx:167
353
 msgid "Backward find"
354
 msgstr ""
355
 
356
-#: src/command.cxx:203
357
+#: src/Command.cxx:169
358
 msgid "Backward find previous"
359
 msgstr ""
360
 
361
 #. translators: this queries the user for a string
362
 #. * and jumps directly (while the user is typing)
363
 #. * to the entry which begins with this string
364
-#: src/command.cxx:208
365
+#: src/Command.cxx:174
366
 msgid "Jump to"
367
 msgstr ""
368
 
369
-#: src/command.cxx:214
370
+#: src/Command.cxx:180
371
 msgid "Artist screen"
372
 msgstr ""
373
 
374
-#: src/command.cxx:218 src/screen_help.cxx:148
375
+#: src/Command.cxx:184 src/HelpPage.cxx:169
376
 msgid "Search screen"
377
 msgstr "Hakunäkymä"
378
 
379
-#: src/command.cxx:220
380
+#: src/Command.cxx:186
381
 msgid "Change search mode"
382
 msgstr ""
383
 
384
-#: src/command.cxx:224
385
+#: src/Command.cxx:190
386
 msgid "View the selected and the currently playing song"
387
 msgstr ""
388
 
389
-#: src/command.cxx:228 src/screen_help.cxx:160
390
+#: src/Command.cxx:194 src/HelpPage.cxx:181
391
 msgid "Lyrics screen"
392
 msgstr "Sanoitusnäkymä"
393
 
394
 #. translators: interrupt the current background action,
395
 #. e.g. stop loading lyrics from the internet
396
-#: src/command.cxx:232
397
+#: src/Command.cxx:198
398
 msgid "Interrupt action"
399
 msgstr ""
400
 
401
-#: src/command.cxx:234
402
+#: src/Command.cxx:200
403
 msgid "Update Lyrics"
404
 msgstr ""
405
 
406
-#: src/command.cxx:238
407
+#: src/Command.cxx:204
408
 msgid "Edit the current item"
409
 msgstr ""
410
 
411
-#: src/command.cxx:243 src/screen_help.cxx:175
412
+#: src/Command.cxx:209 src/HelpPage.cxx:196
413
 msgid "Outputs screen"
414
 msgstr ""
415
 
416
-#: src/command.cxx:248 src/screen_help.cxx:182
417
+#: src/Command.cxx:214 src/HelpPage.cxx:203
418
 #, fuzzy
419
 msgid "Chat screen"
420
 msgstr "Soittolista näyttö"
421
 
422
-#: src/command.cxx:290
423
-msgid "Undefined"
424
-msgstr ""
425
-
426
-#: src/command.cxx:292
427
-msgid "Space"
428
-msgstr ""
429
-
430
-#: src/command.cxx:294
431
-msgid "Enter"
432
-msgstr ""
433
-
434
-#: src/command.cxx:296
435
-msgid "Backspace"
436
-msgstr ""
437
-
438
-#: src/command.cxx:298
439
-msgid "Delete"
440
-msgstr ""
441
-
442
-#: src/command.cxx:300
443
-msgid "Up"
444
-msgstr ""
445
-
446
-#: src/command.cxx:302
447
-msgid "Down"
448
-msgstr ""
449
-
450
-#: src/command.cxx:304
451
-msgid "Left"
452
-msgstr ""
453
-
454
-#: src/command.cxx:306
455
-msgid "Right"
456
-msgstr ""
457
-
458
-#: src/command.cxx:308
459
-msgid "Home"
460
-msgstr ""
461
-
462
-#: src/command.cxx:310
463
-msgid "End"
464
-msgstr ""
465
-
466
-#: src/command.cxx:312
467
-msgid "PageDown"
468
-msgstr ""
469
-
470
-#: src/command.cxx:314
471
-msgid "PageUp"
472
-msgstr ""
473
-
474
-#: src/command.cxx:316
475
-msgid "Tab"
476
-msgstr ""
477
-
478
-#: src/command.cxx:318
479
-msgid "Shift+Tab"
480
-msgstr ""
481
-
482
-#: src/command.cxx:320
483
-msgid "Esc"
484
-msgstr ""
485
-
486
-#: src/command.cxx:322
487
-msgid "Insert"
488
-msgstr ""
489
-
490
-#: src/command.cxx:326
491
-#, c-format
492
-msgid "F%d"
493
-msgstr ""
494
-
495
-#: src/command.cxx:330
496
-#, c-format
497
-msgid "Ctrl-%c"
498
-msgstr ""
499
-
500
-#: src/command.cxx:332
501
-#, c-format
502
-msgid "Alt-%c"
503
-msgstr ""
504
-
505
-#: src/command.cxx:477 src/command.cxx:483
506
-#, c-format
507
-msgid "Key %s assigned to %s and %s"
508
-msgstr ""
509
-
510
 #. To translators: prefix for error messages
511
-#: src/conf.cxx:121
512
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
513
 msgid "Error"
514
 msgstr ""
515
 
516
-#: src/conf.cxx:135
517
+#: src/conf.cxx:128
518
 msgid "Word expected"
519
 msgstr ""
520
 
521
-#: src/conf.cxx:152 src/conf.cxx:161
522
+#: src/conf.cxx:145 src/conf.cxx:154
523
 msgid "Malformed hotkey definition"
524
 msgstr ""
525
 
526
 #. the hotkey configuration contains an unknown
527
 #. command
528
-#: src/conf.cxx:185
529
+#: src/conf.cxx:178
530
 msgid "Unknown command"
531
 msgstr ""
532
 
533
 #. the hotkey configuration line is incomplete
534
-#: src/conf.cxx:198
535
+#: src/conf.cxx:191
536
 msgid "Incomplete hotkey configuration"
537
 msgstr ""
538
 
539
@@ -437,808 +375,867 @@
540
 #. "elapsed" or "remaining" time of a song being
541
 #. played; in this case, the configuration file
542
 #. contained an invalid setting
543
-#: src/conf.cxx:234
544
+#: src/conf.cxx:227
545
 msgid "Bad time display type"
546
 msgstr ""
547
 
548
 #. an equals sign '=' was expected while parsing a
549
 #. configuration file line
550
-#: src/conf.cxx:247 src/conf.cxx:427
551
+#: src/conf.cxx:240 src/conf.cxx:418
552
 msgid "Missing '='"
553
 msgstr ""
554
 
555
-#: src/conf.cxx:298
556
+#: src/conf.cxx:291
557
 msgid "Bad color name"
558
 msgstr ""
559
 
560
-#: src/conf.cxx:308
561
+#: src/conf.cxx:301
562
 msgid "Incomplete color definition"
563
 msgstr ""
564
 
565
-#: src/conf.cxx:314
566
+#: src/conf.cxx:307
567
 msgid "Invalid number"
568
 msgstr ""
569
 
570
-#: src/conf.cxx:322
571
+#: src/conf.cxx:315
572
 msgid "Malformed color definition"
573
 msgstr ""
574
 
575
 #. an unknown screen name was specified in the
576
 #. configuration file
577
-#: src/conf.cxx:356
578
+#: src/conf.cxx:353
579
 msgid "Unknown screen name"
580
 msgstr ""
581
 
582
-#: src/conf.cxx:384
583
+#: src/conf.cxx:378
584
 msgid "Invalid search mode"
585
 msgstr ""
586
 
587
-#: src/conf.cxx:407
588
+#: src/conf.cxx:398
589
 msgid "Unknown search mode"
590
 msgstr ""
591
 
592
-#: src/conf.cxx:597
593
+#: src/conf.cxx:581
594
 msgid "Unknown configuration parameter"
595
 msgstr ""
596
 
597
-#: src/i18n.h:42
598
-msgid "y"
599
-msgstr "k"
600
+#: src/CustomColors.cxx:56
601
+msgid "Terminal lacks support for changing colors"
602
+msgstr ""
603
 
604
-#: src/i18n.h:43
605
-msgid "n"
606
-msgstr "e"
607
+#. translators: the "delete" command is only possible
608
+#. for playlists; the user attempted to delete a song
609
+#. or a directory or something else
610
+#: src/FileBrowserPage.cxx:260
611
+msgid "Deleting this item is not possible"
612
+msgstr "Tämän kohteen poistaminen ei ole mahdollista"
613
 
614
-#: src/list_window.cxx:554
615
-msgid "Range selection disabled"
616
-msgstr ""
617
+#: src/FileBrowserPage.cxx:268
618
+#, fuzzy, c-format
619
+msgid "Delete playlist %s?"
620
+msgstr "Poista soittolista"
621
 
622
-#: src/list_window.cxx:559
623
-msgid "Range selection enabled"
624
-msgstr ""
625
+#. translators: a dialog was aborted by the user
626
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
627
+#: src/screen_keydef.cxx:182
628
+msgid "Aborted"
629
+msgstr "Keskeytetty"
630
 
631
-#: src/Main.cxx:161
632
-#, c-format
633
-msgid "Connecting to %s...  [Press %s to abort]"
634
-msgstr "Yhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]"
635
+#. translators: MPD deleted the playlist, as requested by the
636
+#. user
637
+#: src/FileBrowserPage.cxx:286
638
+msgid "Playlist deleted"
639
+msgstr "Soittolista poistettu"
640
 
641
-#: src/Main.cxx:182
642
-#, fuzzy, c-format
643
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
644
-msgstr "Virhe: MPD versio %d.%d.%d on liian vanha (tarvitaan %s)"
645
+#. translators: caption of the browser screen
646
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
647
+msgid "Browse"
648
+msgstr "Selaa"
649
 
650
-#: src/Main.cxx:317
651
-#, c-format
652
-msgid "press %s for the key editor"
653
-msgstr "Painalla %s pääset näppäineditoriin"
654
+#: src/FileListPage.cxx:121
655
+#, fuzzy, c-format
656
+msgid "Loading playlist '%s'"
657
+msgstr "Ladataan soittolistaa %s..."
658
 
659
-#. To translators: these credits are shown
660
-#. when ncmpc is started with "--version"
661
-#: src/options.cxx:209 src/options.cxx:212
662
-msgid "translator-credits"
663
+#: src/HelpPage.cxx:60
664
+msgid "Movement"
665
 msgstr ""
666
-"Launchpad Contributions:\n"
667
-"  Katja Viljakainen https://launchpad.net/~katja-viljakainen\n"
668
-"  Sami Sankala https://launchpad.net/~valijumi"
669
 
670
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
671
-msgid "Shuffled queue"
672
+#: src/HelpPage.cxx:105
673
+msgid "Global"
674
 msgstr ""
675
 
676
-#: src/player_command.cxx:184
677
-msgid "Cleared queue"
678
+#: src/HelpPage.cxx:142
679
+msgid "Play"
680
+msgstr "Toista"
681
+
682
+#: src/HelpPage.cxx:149
683
+msgid "Center"
684
 msgstr ""
685
 
686
-#. query the user for a filename
687
-#: src/save_playlist.cxx:109
688
-msgid "Save queue as"
689
+#: src/HelpPage.cxx:157
690
+msgid "Enter directory/Select and play song"
691
 msgstr ""
692
 
693
-#: src/save_playlist.cxx:140
694
-#, fuzzy, c-format
695
-msgid "Replace %s?"
696
-msgstr "Korvaa %s [%s/%s] ? "
697
+#: src/HelpPage.cxx:161
698
+msgid "Delete playlist"
699
+msgstr "Poista soittolista"
700
 
701
-#. translators: a dialog was aborted by the user
702
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
703
-#: src/screen_lyrics.cxx:370
704
-msgid "Aborted"
705
-msgstr "Keskeytetty"
706
+#: src/HelpPage.cxx:171
707
+#, fuzzy
708
+msgid "New search"
709
+msgstr "Haku"
710
 
711
-#. success
712
-#: src/save_playlist.cxx:171
713
-#, c-format
714
-msgid "Saved %s"
715
-msgstr "Tallennettu %s"
716
+#: src/HelpPage.cxx:172
717
+msgid "Select and play"
718
+msgstr "Valitse ja toista"
719
 
720
-#: src/screen.cxx:154
721
-msgid "Repeat mode is on"
722
-msgstr "Jatkuva toisto on päällä"
723
+#: src/HelpPage.cxx:183
724
+msgid "View Lyrics"
725
+msgstr "Näytä sanoitukset"
726
 
727
-#: src/screen.cxx:155
728
-msgid "Repeat mode is off"
729
-msgstr "Jatkuva toisto on poissa päältä"
730
+#: src/HelpPage.cxx:184
731
+msgid "(Re)load lyrics"
732
+msgstr "Lataa sanoitukset"
733
 
734
-#: src/screen.cxx:159
735
-msgid "Random mode is on"
736
-msgstr "Satunnaistoisto on päällä"
737
+#. to translators: this hotkey aborts the retrieval of lyrics
738
+#. from the server
739
+#: src/HelpPage.cxx:187
740
+msgid "Interrupt retrieval"
741
+msgstr "Keskeytä sanoitusten noutaminen"
742
 
743
-#: src/screen.cxx:160
744
-msgid "Random mode is off"
745
-msgstr "Satunnaistoisto poissa päältä"
746
+#: src/HelpPage.cxx:188
747
+msgid "Download lyrics for currently playing song"
748
+msgstr "Lataa sanoitukset toistettavaan kappaleeseen"
749
 
750
-#. "single" mode means
751
-#. that MPD will
752
-#. automatically stop
753
-#. after playing one
754
-#. single song
755
-#: src/screen.cxx:169
756
-msgid "Single mode is on"
757
-msgstr "Kertatoisto on päällä"
758
+#: src/HelpPage.cxx:189
759
+#, fuzzy
760
+msgid "Add or edit lyrics"
761
+msgstr "Ei talletettuja sanoituksia"
762
 
763
-#: src/screen.cxx:170
764
-msgid "Single mode is off"
765
-msgstr "Kertatoisto on poissa päältä"
766
+#: src/HelpPage.cxx:190
767
+msgid "Save lyrics"
768
+msgstr "Tallenna sanoitukset"
769
 
770
-#. "consume" mode means
771
-#. that MPD removes each
772
-#. song which has
773
-#. finished playing
774
-#: src/screen.cxx:178
775
-msgid "Consume mode is on"
776
-msgstr "Kertakäyttökuuntelu päällä"
777
+#: src/HelpPage.cxx:191
778
+msgid "Delete saved lyrics"
779
+msgstr "Poista tallennettut sanoitukset"
780
 
781
-#: src/screen.cxx:179
782
-msgid "Consume mode is off"
783
-msgstr "Kertakäyttökuuntelu poissa päältä"
784
+#: src/HelpPage.cxx:198
785
+msgid "Enable/disable output"
786
+msgstr "Ulostulo päälle/poissa"
787
 
788
-#: src/screen.cxx:182
789
-#, c-format
790
-msgid "Crossfade %d seconds"
791
-msgstr "Ristiinhäivytys %d sekuntia"
792
+#: src/HelpPage.cxx:205
793
+msgid "Write a message"
794
+msgstr ""
795
 
796
-#: src/screen.cxx:194
797
-msgid "Database updated"
798
-msgstr "Tietokanta päivitetty"
799
+#: src/HelpPage.cxx:210
800
+msgid "Keydef screen"
801
+msgstr "Näppäinmäärittely ruutu"
802
 
803
-#: src/screen.cxx:226
804
-msgid "Find mode: Wrapped"
805
-msgstr "Hakutyyli: 'Wrapped'"
806
+#: src/HelpPage.cxx:212
807
+msgid "Edit keydefs for selected command"
808
+msgstr "Muokkaa näppäinmäärittelyjä halutulle komennolle"
809
 
810
-#: src/screen.cxx:227
811
-msgid "Find mode: Normal"
812
-msgstr "Hakutyyli: Normaali"
813
+#: src/HelpPage.cxx:213
814
+msgid "Remove selected keydef"
815
+msgstr "Poista valittu näppäinmäärittely"
816
 
817
-#: src/screen.cxx:232
818
-msgid "Auto center mode: On"
819
-msgstr ""
820
+#: src/HelpPage.cxx:214
821
+#, fuzzy
822
+msgid "Add a keydef"
823
+msgstr "Lisää uusi näppäin"
824
 
825
-#: src/screen.cxx:233
826
-msgid "Auto center mode: Off"
827
-msgstr ""
828
+#: src/HelpPage.cxx:215
829
+msgid "Go up a level"
830
+msgstr "Siirry taso ylöspäin"
831
 
832
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
833
-msgid "All tracks"
834
-msgstr "Kaikki kappaleet"
835
+#: src/HelpPage.cxx:216
836
+msgid "Apply and save changes"
837
+msgstr "Toteuta ja tallenna muutokset"
838
 
839
-#: src/screen_artist.cxx:384
840
-msgid "All artists"
841
-msgstr "Kaikki esittäjät"
842
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
843
+msgid "Help"
844
+msgstr "Ohje"
845
 
846
-#: src/screen_artist.cxx:389
847
-#, c-format
848
-msgid "Albums of artist: %s"
849
-msgstr "Kaikki albumit esittäjältä: %s"
850
+#: src/i18n.h:43
851
+msgid "y"
852
+msgstr "k"
853
 
854
-#: src/screen_artist.cxx:398
855
-#, c-format
856
-msgid "All tracks of artist: %s"
857
-msgstr "Kaikki kappaleet esittäjältä: %s"
858
+#: src/i18n.h:44
859
+msgid "n"
860
+msgstr "e"
861
 
862
-#: src/screen_artist.cxx:401
863
-#, c-format
864
-msgid "Album: %s - %s"
865
-msgstr "Levy: %s - %s"
866
-
867
-#: src/screen_artist.cxx:405
868
-#, c-format
869
-msgid "Tracks of no album of artist: %s"
870
-msgstr "Kappaleet tuntemattomista albumeista esittäjältä: %s"
871
-
872
-#: src/screen_artist.cxx:450
873
-#, c-format
874
-msgid "Adding album %s..."
875
-msgstr "Lisätään albumia %s..."
876
+#: src/KeyName.cxx:31
877
+msgid "Undefined"
878
+msgstr ""
879
 
880
-#: src/screen_artist.cxx:452
881
-#, c-format
882
-msgid "Adding %s..."
883
-msgstr "Lisätään %s..."
884
+#: src/KeyName.cxx:33
885
+msgid "Space"
886
+msgstr ""
887
 
888
-#: src/screen_browser.cxx:122
889
-#, c-format
890
-msgid "Loading playlist %s..."
891
-msgstr "Ladataan soittolistaa %s..."
892
+#: src/KeyName.cxx:35
893
+msgid "Enter"
894
+msgstr ""
895
 
896
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
897
-#: src/screen_browser.cxx:279
898
-#, fuzzy, c-format
899
-msgid "Adding '%s' to queue"
900
-msgstr "Soittolistaan lisätään '%s'"
901
+#: src/KeyName.cxx:37
902
+msgid "Backspace"
903
+msgstr ""
904
 
905
-#: src/screen_chat.cxx:59
906
-#, c-format
907
-msgid ""
908
-"connected to MPD %u.%u.%u (you need at least \n"
909
-"version 0.17.0 to use the chat feature)"
910
+#: src/KeyName.cxx:39
911
+msgid "Delete"
912
 msgstr ""
913
 
914
-#: src/screen_chat.cxx:177
915
-msgid "Your message"
916
+#: src/KeyName.cxx:41
917
+msgid "Up"
918
 msgstr ""
919
 
920
-#: src/screen_chat.cxx:186
921
-msgid "Message could not be sent"
922
+#: src/KeyName.cxx:43
923
+msgid "Down"
924
 msgstr ""
925
 
926
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
927
-msgid "Chat"
928
+#: src/KeyName.cxx:45
929
+msgid "Left"
930
 msgstr ""
931
 
932
-#: src/screen_client.cxx:41
933
-msgid "Database update running..."
934
-msgstr "Tietokannan päivitys käynnissä..."
935
+#: src/KeyName.cxx:47
936
+msgid "Right"
937
+msgstr ""
938
 
939
-#: src/screen_client.cxx:49
940
-#, c-format
941
-msgid "Database update of %s started"
942
-msgstr "Tietokannan %s päivitys käynnistyi"
943
+#: src/KeyName.cxx:49
944
+msgid "Home"
945
+msgstr ""
946
 
947
-#: src/screen_client.cxx:52
948
-msgid "Database update started"
949
-msgstr "Tietokannan päivitys käynnistyi"
950
+#: src/KeyName.cxx:51
951
+msgid "End"
952
+msgstr ""
953
 
954
-#. translators: the "delete" command is only possible
955
-#. for playlists; the user attempted to delete a song
956
-#. or a directory or something else
957
-#: src/screen_file.cxx:200
958
-msgid "Deleting this item is not possible"
959
-msgstr "Tämän kohteen poistaminen ei ole mahdollista"
960
+#: src/KeyName.cxx:53
961
+msgid "PageDown"
962
+msgstr ""
963
 
964
-#: src/screen_file.cxx:207
965
-#, fuzzy, c-format
966
-msgid "Delete playlist %s?"
967
-msgstr "Poista soittolista"
968
+#: src/KeyName.cxx:55
969
+msgid "PageUp"
970
+msgstr ""
971
 
972
-#. translators: MPD deleted the playlist, as requested by the
973
-#. user
974
-#: src/screen_file.cxx:227
975
-msgid "Playlist deleted"
976
-msgstr "Soittolista poistettu"
977
+#: src/KeyName.cxx:57
978
+msgid "Tab"
979
+msgstr ""
980
 
981
-#. translators: caption of the browser screen
982
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
983
-msgid "Browse"
984
-msgstr "Selaa"
985
+#: src/KeyName.cxx:59
986
+msgid "Shift+Tab"
987
+msgstr ""
988
 
989
-#: src/screen_find.cxx:29
990
-msgid "Find"
991
-msgstr "Etsi"
992
+#: src/KeyName.cxx:61
993
+msgid "Esc"
994
+msgstr ""
995
 
996
-#: src/screen_find.cxx:30
997
-msgid "Find backward"
998
-msgstr "Etsi alustapäin"
999
+#: src/KeyName.cxx:63
1000
+msgid "Insert"
1001
+msgstr ""
1002
 
1003
-#: src/screen_find.cxx:31
1004
-msgid "Jump"
1005
-msgstr "Siirry"
1006
+#: src/KeyName.cxx:71
1007
+#, c-format
1008
+msgid "Ctrl-%c"
1009
+msgstr ""
1010
 
1011
-#: src/screen_find.cxx:82
1012
+#: src/KeyName.cxx:73
1013
 #, c-format
1014
-msgid "Unable to find '%s'"
1015
-msgstr "Haku '%s' ei tuottanut tuloksia"
1016
+msgid "Alt-%c"
1017
+msgstr ""
1018
 
1019
-#: src/screen_help.cxx:39
1020
-msgid "Movement"
1021
+#: src/ListWindow.cxx:491
1022
+msgid "Range selection disabled"
1023
 msgstr ""
1024
 
1025
-#: src/screen_help.cxx:84
1026
-msgid "Global"
1027
+#: src/ListWindow.cxx:496
1028
+msgid "Range selection enabled"
1029
 msgstr ""
1030
 
1031
-#: src/screen_help.cxx:121
1032
-msgid "Play"
1033
-msgstr "Toista"
1034
+#. translators: no lyrics were found for the song
1035
+#: src/LyricsPage.cxx:236
1036
+msgid "No lyrics"
1037
+msgstr "Sanoituksia ei löytynyt"
1038
+
1039
+#: src/LyricsPage.cxx:254
1040
+#, c-format
1041
+msgid "Lyrics timeout occurred after %d seconds"
1042
+msgstr ""
1043
 
1044
-#: src/screen_help.cxx:124
1045
-msgid "Move song up"
1046
-msgstr "Siirrä kappaletta ylemmäksi"
1047
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1048
+#: src/LyricsPage.cxx:490
1049
+msgid "Lyrics"
1050
+msgstr "Sanoitukset"
1051
 
1052
-#: src/screen_help.cxx:125
1053
-msgid "Move song down"
1054
-msgstr "Siirrä kappaletta alemmaksi"
1055
+#. translators: this message is displayed
1056
+#. while data is retrieved
1057
+#: src/LyricsPage.cxx:340
1058
+msgid "loading..."
1059
+msgstr "latautuu..."
1060
 
1061
-#: src/screen_help.cxx:128
1062
-msgid "Center"
1063
+#: src/LyricsPage.cxx:361
1064
+msgid "Editor not configured"
1065
 msgstr ""
1066
 
1067
-#: src/screen_help.cxx:136
1068
-msgid "Enter directory/Select and play song"
1069
+#: src/LyricsPage.cxx:368
1070
+msgid "Do you really want to start an editor and edit these lyrics?"
1071
 msgstr ""
1072
 
1073
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1074
-#, fuzzy
1075
-msgid "Append song to queue"
1076
-msgstr "Lisää kappale soittolistaan"
1077
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1078
+msgid "Can't start editor"
1079
+msgstr ""
1080
 
1081
-#: src/screen_help.cxx:140
1082
-msgid "Delete playlist"
1083
-msgstr "Poista soittolista"
1084
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1085
+msgid "Editor exited unexpectedly"
1086
+msgstr ""
1087
 
1088
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1089
-msgid "Search"
1090
-msgstr "Haku"
1091
+#. lyrics for the song were saved on hard disk
1092
+#: src/LyricsPage.cxx:439
1093
+msgid "Lyrics saved"
1094
+msgstr "Sanoitukset talletettu"
1095
 
1096
-#: src/screen_help.cxx:151
1097
-msgid "Select and play"
1098
-msgstr "Valitse ja toista"
1099
+#: src/LyricsPage.cxx:445
1100
+msgid "Lyrics deleted"
1101
+msgstr "Sanoitukset poistettu"
1102
 
1103
-#: src/screen_help.cxx:162
1104
-msgid "View Lyrics"
1105
-msgstr "Näytä sanoitukset"
1106
+#: src/LyricsPage.cxx:446
1107
+msgid "No saved lyrics"
1108
+msgstr "Ei talletettuja sanoituksia"
1109
 
1110
-#: src/screen_help.cxx:163
1111
-msgid "(Re)load lyrics"
1112
-msgstr "Lataa sanoitukset"
1113
+#: src/Main.cxx:167
1114
+#, fuzzy, c-format
1115
+msgid "Connecting to %s"
1116
+msgstr "Yhdistetty kohteeseen %s"
1117
 
1118
-#. to translators: this hotkey aborts the retrieval of lyrics
1119
-#. from the server
1120
-#: src/screen_help.cxx:166
1121
-msgid "Interrupt retrieval"
1122
-msgstr "Keskeytä sanoitusten noutaminen"
1123
+#: src/Main.cxx:187
1124
+#, fuzzy, c-format
1125
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1126
+msgstr "Virhe: MPD versio %d.%d.%d on liian vanha (tarvitaan %s)"
1127
 
1128
-#: src/screen_help.cxx:167
1129
-msgid "Download lyrics for currently playing song"
1130
-msgstr "Lataa sanoitukset toistettavaan kappaleeseen"
1131
+#. To translators: these credits are shown
1132
+#. when ncmpc is started with "--version"
1133
+#: src/options.cxx:213 src/options.cxx:216
1134
+msgid "translator-credits"
1135
+msgstr ""
1136
+"Launchpad Contributions:\n"
1137
+"  Katja Viljakainen https://launchpad.net/~katja-viljakainen\n"
1138
+"  Sami Sankala https://launchpad.net/~valijumi"
1139
 
1140
-#: src/screen_help.cxx:168
1141
-#, fuzzy
1142
-msgid "Add or edit lyrics"
1143
-msgstr "Ei talletettuja sanoituksia"
1144
+#: src/OutputsPage.cxx:87
1145
+#, c-format
1146
+msgid "Output '%s' enabled"
1147
+msgstr "Ulostulo '%s' päällä"
1148
 
1149
-#: src/screen_help.cxx:169
1150
-msgid "Save lyrics"
1151
-msgstr "Tallenna sanoitukset"
1152
+#: src/OutputsPage.cxx:98
1153
+#, c-format
1154
+msgid "Output '%s' disabled"
1155
+msgstr "Ulostulo '%s' poissa päältä"
1156
 
1157
-#: src/screen_help.cxx:170
1158
-msgid "Delete saved lyrics"
1159
-msgstr "Poista tallennettut sanoitukset"
1160
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1161
+msgid "Outputs"
1162
+msgstr "Ulostulot"
1163
 
1164
-#: src/screen_help.cxx:177
1165
-msgid "Enable/disable output"
1166
-msgstr "Ulostulo päälle/poissa"
1167
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1168
+msgid "Shuffled queue"
1169
+msgstr ""
1170
 
1171
-#: src/screen_help.cxx:184
1172
-msgid "Write a message"
1173
+#: src/player_command.cxx:186
1174
+msgid "Cleared queue"
1175
 msgstr ""
1176
 
1177
-#: src/screen_help.cxx:189
1178
-msgid "Keydef screen"
1179
-msgstr "Näppäinmäärittely ruutu"
1180
+#. get path
1181
+#: src/QueuePage.cxx:307
1182
+msgid "Add"
1183
+msgstr "Lisää"
1184
 
1185
-#: src/screen_help.cxx:191
1186
-msgid "Edit keydefs for selected command"
1187
-msgstr "Muokkaa näppäinmäärittelyjä halutulle komennolle"
1188
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1189
+msgid "Queue"
1190
+msgstr ""
1191
 
1192
-#: src/screen_help.cxx:192
1193
-msgid "Remove selected keydef"
1194
-msgstr "Poista valittu näppäinmäärittely"
1195
+#: src/QueuePage.cxx:380
1196
+#, c-format
1197
+msgid "Queue on %s"
1198
+msgstr ""
1199
 
1200
-#: src/screen_help.cxx:193
1201
-#, fuzzy
1202
-msgid "Add a keydef"
1203
-msgstr "Lisää uusi näppäin"
1204
+#. query the user for a filename
1205
+#: src/save_playlist.cxx:85
1206
+msgid "Save queue as"
1207
+msgstr ""
1208
 
1209
-#: src/screen_help.cxx:194
1210
-msgid "Go up a level"
1211
-msgstr "Siirry taso ylöspäin"
1212
+#: src/save_playlist.cxx:107
1213
+#, fuzzy, c-format
1214
+msgid "Replace %s?"
1215
+msgstr "Korvaa %s [%s/%s] ? "
1216
 
1217
-#: src/screen_help.cxx:195
1218
-msgid "Apply and save changes"
1219
-msgstr "Toteuta ja tallenna muutokset"
1220
+#. success
1221
+#: src/save_playlist.cxx:128
1222
+#, c-format
1223
+msgid "Saved %s"
1224
+msgstr "Tallennettu %s"
1225
 
1226
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1227
-msgid "Help"
1228
-msgstr "Ohje"
1229
+#: src/screen_artist.cxx:186
1230
+#, c-format
1231
+msgid "All tracks of artist: %s"
1232
+msgstr "Kaikki kappaleet esittäjältä: %s"
1233
 
1234
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1235
-msgid "Error: Screen too small"
1236
-msgstr "Virhe: Ruutu on liian pieni"
1237
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1238
+msgid "Album"
1239
+msgstr "Albumi"
1240
 
1241
-#: src/screen_keydef.cxx:141
1242
-msgid "You have new key bindings"
1243
-msgstr "Uusia näppäinmäärittelyjä"
1244
+#: src/screen_artist.cxx:195
1245
+#, c-format
1246
+msgid "Tracks of no album of artist: %s"
1247
+msgstr "Kappaleet tuntemattomista albumeista esittäjältä: %s"
1248
 
1249
-#: src/screen_keydef.cxx:143
1250
-msgid "Keybindings unchanged."
1251
-msgstr "Näppäinmäärittelyjä ei muutettu"
1252
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1253
+msgid "Artist"
1254
+msgstr "Esittäjä"
1255
 
1256
-#: src/screen_keydef.cxx:153
1257
+#: src/screen_client.cxx:41
1258
+#, fuzzy
1259
+msgid "Database update running"
1260
+msgstr "Tietokannan päivitys käynnissä..."
1261
+
1262
+#: src/screen_client.cxx:48
1263
 #, c-format
1264
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1265
-msgstr "Virhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaan"
1266
+msgid "Database update of %s started"
1267
+msgstr "Tietokannan %s päivitys käynnistyi"
1268
+
1269
+#: src/screen_client.cxx:51
1270
+msgid "Database update started"
1271
+msgstr "Tietokannan päivitys käynnistyi"
1272
+
1273
+#: src/screen.cxx:160
1274
+msgid "Repeat mode is on"
1275
+msgstr "Jatkuva toisto on päällä"
1276
 
1277
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1278
+#: src/screen.cxx:161
1279
+msgid "Repeat mode is off"
1280
+msgstr "Jatkuva toisto on poissa päältä"
1281
+
1282
+#: src/screen.cxx:165
1283
+msgid "Random mode is on"
1284
+msgstr "Satunnaistoisto on päällä"
1285
+
1286
+#: src/screen.cxx:166
1287
+msgid "Random mode is off"
1288
+msgstr "Satunnaistoisto poissa päältä"
1289
+
1290
+#. "single" mode means
1291
+#. that MPD will
1292
+#. automatically stop
1293
+#. after playing one
1294
+#. single song
1295
+#: src/screen.cxx:175
1296
+msgid "Single mode is on"
1297
+msgstr "Kertatoisto on päällä"
1298
+
1299
+#: src/screen.cxx:176
1300
+msgid "Single mode is off"
1301
+msgstr "Kertatoisto on poissa päältä"
1302
+
1303
+#. "consume" mode means
1304
+#. that MPD removes each
1305
+#. song which has
1306
+#. finished playing
1307
+#: src/screen.cxx:184
1308
+msgid "Consume mode is on"
1309
+msgstr "Kertakäyttökuuntelu päällä"
1310
+
1311
+#: src/screen.cxx:185
1312
+msgid "Consume mode is off"
1313
+msgstr "Kertakäyttökuuntelu poissa päältä"
1314
+
1315
+#: src/screen.cxx:188
1316
 #, c-format
1317
-msgid "Error: %s - %s"
1318
-msgstr "Virhe: %s - %s"
1319
+msgid "Crossfade %d seconds"
1320
+msgstr "Ristiinhäivytys %d sekuntia"
1321
+
1322
+#: src/screen.cxx:200
1323
+msgid "Database updated"
1324
+msgstr "Tietokanta päivitetty"
1325
+
1326
+#: src/screen.cxx:250
1327
+msgid "Find mode: Wrapped"
1328
+msgstr "Hakutyyli: 'Wrapped'"
1329
+
1330
+#: src/screen.cxx:251
1331
+msgid "Find mode: Normal"
1332
+msgstr "Hakutyyli: Normaali"
1333
+
1334
+#: src/screen.cxx:256
1335
+msgid "Auto center mode: On"
1336
+msgstr ""
1337
+
1338
+#: src/screen.cxx:257
1339
+msgid "Auto center mode: Off"
1340
+msgstr ""
1341
 
1342
-#: src/screen_keydef.cxx:171
1343
+#: src/screen_find.cxx:31
1344
+msgid "Find"
1345
+msgstr "Etsi"
1346
+
1347
+#: src/screen_find.cxx:32
1348
+msgid "Find backward"
1349
+msgstr "Etsi alustapäin"
1350
+
1351
+#: src/screen_find.cxx:33
1352
+msgid "Jump"
1353
+msgstr "Siirry"
1354
+
1355
+#: src/screen_find.cxx:79
1356
 #, c-format
1357
-msgid "Wrote %s"
1358
-msgstr "Kirjoitettiin %s"
1359
+msgid "Unable to find '%s'"
1360
+msgstr "Haku '%s' ei tuottanut tuloksia"
1361
 
1362
-#: src/screen_keydef.cxx:250
1363
+#: src/screen_keydef.cxx:161
1364
 msgid "Deleted"
1365
 msgstr "Poistettu"
1366
 
1367
-#: src/screen_keydef.cxx:265
1368
+#: src/screen_keydef.cxx:177
1369
 #, c-format
1370
 msgid "Enter new key for %s: "
1371
 msgstr ""
1372
 
1373
-#: src/screen_keydef.cxx:276
1374
+#: src/screen_keydef.cxx:187
1375
 msgid "Ctrl-Space can't be used"
1376
 msgstr ""
1377
 
1378
-#: src/screen_keydef.cxx:282
1379
+#: src/screen_keydef.cxx:193
1380
 #, c-format
1381
 msgid "Error: key %s is already used for %s"
1382
 msgstr "Virhe: näppäin %s on jo %s käytössä"
1383
 
1384
-#: src/screen_keydef.cxx:291
1385
+#: src/screen_keydef.cxx:202
1386
 #, c-format
1387
 msgid "Assigned %s to %s"
1388
 msgstr "Asetettu %s %s:ksi"
1389
 
1390
-#: src/screen_keydef.cxx:317
1391
-msgid "===> Apply key bindings "
1392
-msgstr ""
1393
-
1394
-#: src/screen_keydef.cxx:319
1395
-msgid "===> Apply & Save key bindings  "
1396
-msgstr ""
1397
-
1398
-#: src/screen_keydef.cxx:347
1399
+#: src/screen_keydef.cxx:229
1400
 msgid "Add new key"
1401
 msgstr "Lisää uusi näppäin"
1402
 
1403
-#: src/screen_keydef.cxx:410
1404
-msgid "Note: Did you forget to 'Apply' your changes?"
1405
-msgstr "Huomio: Unohditko 'Toteuttaa' muutokset?"
1406
-
1407
-#: src/screen_keydef.cxx:417
1408
-msgid "Edit key bindings"
1409
-msgstr "Muuta näppäinasetteluja"
1410
-
1411
-#: src/screen_keydef.cxx:419
1412
+#: src/screen_keydef.cxx:251
1413
 #, c-format
1414
 msgid "Edit keys for %s"
1415
 msgstr "Muokkaa %s näppäimiä"
1416
 
1417
-#. translators: no lyrics were found for the song
1418
-#: src/screen_lyrics.cxx:208
1419
-msgid "No lyrics"
1420
-msgstr "Sanoituksia ei löytynyt"
1421
-
1422
-#: src/screen_lyrics.cxx:226
1423
-#, c-format
1424
-msgid "Lyrics timeout occurred after %d seconds"
1425
-msgstr ""
1426
-
1427
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1428
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1429
-msgid "Lyrics"
1430
-msgstr "Sanoitukset"
1431
-
1432
-#. translators: this message is displayed
1433
-#. while data is retrieved
1434
-#: src/screen_lyrics.cxx:330
1435
-msgid "loading..."
1436
-msgstr "latautuu..."
1437
-
1438
-#: src/screen_lyrics.cxx:361
1439
-msgid "Editor not configured"
1440
-msgstr ""
1441
+#: src/screen_keydef.cxx:393
1442
+msgid "You have new key bindings"
1443
+msgstr "Uusia näppäinmäärittelyjä"
1444
 
1445
-#: src/screen_lyrics.cxx:367
1446
-msgid "Do you really want to start an editor and edit these lyrics?"
1447
-msgstr ""
1448
+#: src/screen_keydef.cxx:395
1449
+msgid "Keybindings unchanged."
1450
+msgstr "Näppäinmäärittelyjä ei muutettu"
1451
 
1452
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1453
-msgid "Can't start editor"
1454
+#: src/screen_keydef.cxx:405
1455
+msgid "Unable to write configuration"
1456
 msgstr ""
1457
 
1458
-#: src/screen_lyrics.cxx:411
1459
+#: src/screen_keydef.cxx:421
1460
 #, c-format
1461
-msgid "Editor exited unexpectedly (%d)"
1462
-msgstr ""
1463
+msgid "Wrote %s"
1464
+msgstr "Kirjoitettiin %s"
1465
 
1466
-#: src/screen_lyrics.cxx:414
1467
-#, c-format
1468
-msgid "Editor exited unexpectedly (signal %d)"
1469
+#: src/screen_keydef.cxx:433
1470
+msgid "===> Apply key bindings "
1471
 msgstr ""
1472
 
1473
-#. lyrics for the song were saved on hard disk
1474
-#: src/screen_lyrics.cxx:436
1475
-msgid "Lyrics saved"
1476
-msgstr "Sanoitukset talletettu"
1477
-
1478
-#: src/screen_lyrics.cxx:443
1479
-msgid "Lyrics deleted"
1480
-msgstr "Sanoitukset poistettu"
1481
-
1482
-#: src/screen_lyrics.cxx:446
1483
-msgid "No saved lyrics"
1484
-msgstr "Ei talletettuja sanoituksia"
1485
-
1486
-#: src/screen_outputs.cxx:60
1487
-#, c-format
1488
-msgid "Output '%s' enabled"
1489
-msgstr "Ulostulo '%s' päällä"
1490
-
1491
-#: src/screen_outputs.cxx:71
1492
-#, c-format
1493
-msgid "Output '%s' disabled"
1494
-msgstr "Ulostulo '%s' poissa päältä"
1495
+#: src/screen_keydef.cxx:435
1496
+msgid "===> Apply & Save key bindings  "
1497
+msgstr ""
1498
 
1499
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1500
-msgid "Outputs"
1501
-msgstr "Ulostulot"
1502
+#: src/screen_keydef.cxx:472
1503
+msgid "Edit key bindings"
1504
+msgstr "Muuta näppäinasetteluja"
1505
 
1506
-#. get path
1507
-#: src/screen_queue.cxx:274
1508
-msgid "Add"
1509
-msgstr "Lisää"
1510
+#: src/screen_keydef.cxx:554
1511
+msgid "Note: Did you forget to 'Apply' your changes?"
1512
+msgstr "Huomio: Unohditko 'Toteuttaa' muutokset?"
1513
 
1514
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1515
-msgid "Queue"
1516
+#: src/screen_keydef.cxx:604
1517
+msgid "Keys"
1518
 msgstr ""
1519
 
1520
-#: src/screen_queue.cxx:384
1521
-#, c-format
1522
-msgid "Queue on %s"
1523
-msgstr ""
1524
+#: src/screen_utils.cxx:124
1525
+msgid "Password"
1526
+msgstr "Salasana"
1527
 
1528
-#: src/screen_search.cxx:48
1529
+#: src/SearchPage.cxx:51
1530
 msgid "artist"
1531
 msgstr "esittäjä"
1532
 
1533
-#: src/screen_search.cxx:49
1534
+#: src/SearchPage.cxx:52
1535
 msgid "album"
1536
 msgstr "levy"
1537
 
1538
-#: src/screen_search.cxx:50
1539
+#: src/SearchPage.cxx:53
1540
 msgid "title"
1541
 msgstr "nimi"
1542
 
1543
-#: src/screen_search.cxx:51
1544
+#: src/SearchPage.cxx:54
1545
 msgid "track"
1546
 msgstr "kappale"
1547
 
1548
-#: src/screen_search.cxx:52
1549
+#: src/SearchPage.cxx:55
1550
 msgid "name"
1551
 msgstr "nimi"
1552
 
1553
-#: src/screen_search.cxx:53
1554
+#: src/SearchPage.cxx:56
1555
 msgid "genre"
1556
 msgstr "tyylilaji"
1557
 
1558
-#: src/screen_search.cxx:54
1559
+#: src/SearchPage.cxx:57
1560
 msgid "date"
1561
 msgstr "päiväys:"
1562
 
1563
-#: src/screen_search.cxx:55
1564
+#: src/SearchPage.cxx:58
1565
 msgid "composer"
1566
 msgstr "säveltäjä"
1567
 
1568
-#: src/screen_search.cxx:56
1569
+#: src/SearchPage.cxx:59
1570
 msgid "performer"
1571
 msgstr "esittäjä"
1572
 
1573
-#: src/screen_search.cxx:57
1574
+#: src/SearchPage.cxx:60
1575
 msgid "comment"
1576
 msgstr "kommentti"
1577
 
1578
-#: src/screen_search.cxx:65
1579
+#: src/SearchPage.cxx:68
1580
 msgid "file"
1581
 msgstr "tiedosto"
1582
 
1583
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1584
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1585
 msgid "Title"
1586
 msgstr "Kappale"
1587
 
1588
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1589
-msgid "Artist"
1590
-msgstr "Esittäjä"
1591
-
1592
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1593
-msgid "Album"
1594
-msgstr "Albumi"
1595
-
1596
-#: src/screen_search.cxx:85
1597
+#: src/SearchPage.cxx:88
1598
 msgid "Filename"
1599
 msgstr "Tiedostonimi"
1600
 
1601
-#: src/screen_search.cxx:86
1602
+#: src/SearchPage.cxx:89
1603
 msgid "Artist + Title"
1604
 msgstr "Esittäjä + Kappale"
1605
 
1606
-#: src/screen_search.cxx:244
1607
-#, c-format
1608
-msgid "No argument for search tag %s"
1609
-msgstr ""
1610
-
1611
-#: src/screen_search.cxx:253
1612
+#: src/SearchPage.cxx:270
1613
 #, c-format
1614
 msgid "Bad search tag %s"
1615
 msgstr ""
1616
 
1617
-#. if( pattern==nullptr )
1618
-#. search_new(screen, c);
1619
-#. else
1620
-#: src/screen_search.cxx:400
1621
-#, c-format
1622
-msgid "Press %s for a new search"
1623
-msgstr "Paina %s uuteen hakuun"
1624
-
1625
-#: src/screen_search.cxx:427
1626
+#: src/SearchPage.cxx:284
1627
 #, c-format
1628
-msgid "Search: %s"
1629
-msgstr "Haku: %s"
1630
-
1631
-#: src/screen_search.cxx:430
1632
-#, c-format
1633
-msgid "Search: Results for %s [%s]"
1634
-msgstr "Haku: Tulokset hauelle %s [%s]"
1635
+msgid "No argument for search tag %s"
1636
+msgstr ""
1637
 
1638
-#: src/screen_search.cxx:434
1639
-#, c-format
1640
-msgid "Search: Press %s for a new search [%s]"
1641
-msgstr "Haku: Paina %s hakeaksesi uudelleen [%s]"
1642
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1643
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1644
+msgid "Search"
1645
+msgstr "Haku"
1646
 
1647
-#: src/screen_search.cxx:458
1648
+#: src/SearchPage.cxx:436
1649
 #, c-format
1650
 msgid "Search mode: %s"
1651
 msgstr "Hakutyyli: %s"
1652
 
1653
-#: src/screen_song.cxx:54
1654
+#: src/SongPage.cxx:67
1655
 msgid "Length"
1656
 msgstr "Kesto"
1657
 
1658
-#: src/screen_song.cxx:55
1659
+#: src/SongPage.cxx:68
1660
 msgid "Position"
1661
 msgstr ""
1662
 
1663
-#: src/screen_song.cxx:56
1664
+#: src/SongPage.cxx:69
1665
 msgid "Composer"
1666
 msgstr "Säveltäjä"
1667
 
1668
-#: src/screen_song.cxx:57
1669
+#: src/SongPage.cxx:70
1670
 msgid "Name"
1671
 msgstr "Nimi"
1672
 
1673
-#: src/screen_song.cxx:58
1674
+#: src/SongPage.cxx:71
1675
 msgid "Disc"
1676
 msgstr "Levy"
1677
 
1678
-#: src/screen_song.cxx:59
1679
+#: src/SongPage.cxx:72
1680
 msgid "Track"
1681
 msgstr "Kappale"
1682
 
1683
-#: src/screen_song.cxx:60
1684
+#: src/SongPage.cxx:73
1685
 msgid "Date"
1686
 msgstr ""
1687
 
1688
-#: src/screen_song.cxx:61
1689
+#: src/SongPage.cxx:74
1690
 msgid "Genre"
1691
 msgstr ""
1692
 
1693
-#: src/screen_song.cxx:62
1694
+#: src/SongPage.cxx:75
1695
 msgid "Comment"
1696
 msgstr ""
1697
 
1698
-#: src/screen_song.cxx:63
1699
+#: src/SongPage.cxx:76
1700
 msgid "Path"
1701
 msgstr ""
1702
 
1703
-#: src/screen_song.cxx:64
1704
+#: src/SongPage.cxx:77
1705
 msgid "Bitrate"
1706
 msgstr ""
1707
 
1708
-#: src/screen_song.cxx:65
1709
+#: src/SongPage.cxx:78
1710
 msgid "Format"
1711
 msgstr ""
1712
 
1713
-#: src/screen_song.cxx:82
1714
+#: src/SongPage.cxx:95
1715
 msgid "Number of artists"
1716
 msgstr ""
1717
 
1718
-#: src/screen_song.cxx:83
1719
+#: src/SongPage.cxx:96
1720
 msgid "Number of albums"
1721
 msgstr ""
1722
 
1723
-#: src/screen_song.cxx:84
1724
+#: src/SongPage.cxx:97
1725
 msgid "Number of songs"
1726
 msgstr ""
1727
 
1728
-#: src/screen_song.cxx:85
1729
+#: src/SongPage.cxx:98
1730
 msgid "Uptime"
1731
 msgstr ""
1732
 
1733
-#: src/screen_song.cxx:86
1734
+#: src/SongPage.cxx:99
1735
 msgid "Most recent db update"
1736
 msgstr ""
1737
 
1738
-#: src/screen_song.cxx:87
1739
+#: src/SongPage.cxx:100
1740
 msgid "Playtime"
1741
 msgstr ""
1742
 
1743
-#: src/screen_song.cxx:88
1744
+#: src/SongPage.cxx:101
1745
 msgid "DB playtime"
1746
 msgstr ""
1747
 
1748
-#: src/screen_song.cxx:173
1749
+#: src/SongPage.cxx:204
1750
 msgid "Song viewer"
1751
 msgstr ""
1752
 
1753
-#: src/screen_song.cxx:337
1754
+#: src/SongPage.cxx:370
1755
 msgid "MPD statistics"
1756
 msgstr ""
1757
 
1758
-#: src/screen_song.cxx:427
1759
+#: src/SongPage.cxx:455
1760
 msgid "Selected song"
1761
 msgstr ""
1762
 
1763
-#: src/screen_song.cxx:437
1764
+#: src/SongPage.cxx:465
1765
 msgid "Currently playing song"
1766
 msgstr ""
1767
 
1768
-#: src/screen_song.cxx:442
1769
+#: src/SongPage.cxx:470
1770
 #, c-format
1771
 msgid "%d kbps"
1772
 msgstr ""
1773
 
1774
-#. NOTE: if one day a translator decides to use a multi-byte character
1775
-#. for one of the yes/no keys, we'll have to parse it properly
1776
-#: src/screen_utils.cxx:80
1777
-#, fuzzy, c-format
1778
-msgid "%s [%s/%s] "
1779
-msgstr "Korvaa %s [%s/%s] ? "
1780
-
1781
-#: src/screen_utils.cxx:121
1782
-msgid "Password"
1783
-msgstr "Salasana"
1784
+#: src/SongPage.cxx:554
1785
+msgid "Song"
1786
+msgstr ""
1787
 
1788
-#: src/status_bar.cxx:121
1789
+#: src/StatusBar.cxx:104
1790
 msgid "Playing:"
1791
 msgstr ""
1792
 
1793
-#: src/status_bar.cxx:124
1794
+#: src/StatusBar.cxx:108
1795
 msgid "[Paused]"
1796
 msgstr ""
1797
 
1798
-#: src/title_bar.cxx:99
1799
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1800
+msgid "Unknown color"
1801
+msgstr ""
1802
+
1803
+#: src/Styles.cxx:333
1804
+msgid "Unknown color field"
1805
+msgstr ""
1806
+
1807
+#: src/Styles.cxx:375
1808
+msgid "Terminal lacks color capabilities"
1809
+msgstr ""
1810
+
1811
+#: src/time_format.cxx:44
1812
+msgid "year"
1813
+msgstr ""
1814
+
1815
+#: src/time_format.cxx:46
1816
+msgid "years"
1817
+msgstr ""
1818
+
1819
+#: src/time_format.cxx:54
1820
+msgid "week"
1821
+msgstr ""
1822
+
1823
+#: src/time_format.cxx:57
1824
+msgid "weeks"
1825
+msgstr ""
1826
+
1827
+#: src/time_format.cxx:65
1828
+msgid "day"
1829
+msgstr ""
1830
+
1831
+#: src/time_format.cxx:68
1832
+msgid "days"
1833
+msgstr ""
1834
+
1835
+#: src/TitleBar.cxx:100
1836
 msgid "Volume n/a"
1837
 msgstr ""
1838
 
1839
-#: src/title_bar.cxx:101
1840
+#: src/TitleBar.cxx:102
1841
 #, c-format
1842
 msgid "Volume %d%%"
1843
 msgstr ""
1844
 
1845
-#~ msgid "Connected to %s"
1846
-#~ msgstr "Yhdistetty kohteeseen %s"
1847
+#~ msgid "Move song up"
1848
+#~ msgstr "Siirrä kappaletta ylemmäksi"
1849
+
1850
+#~ msgid "Move song down"
1851
+#~ msgstr "Siirrä kappaletta alemmaksi"
1852
+
1853
+#~ msgid "Press %s for a new search"
1854
+#~ msgstr "Paina %s uuteen hakuun"
1855
+
1856
+#~ msgid "Search: %s"
1857
+#~ msgstr "Haku: %s"
1858
+
1859
+#~ msgid "Search: Results for %s [%s]"
1860
+#~ msgstr "Haku: Tulokset hauelle %s [%s]"
1861
+
1862
+#~ msgid "Search: Press %s for a new search [%s]"
1863
+#~ msgstr "Haku: Paina %s hakeaksesi uudelleen [%s]"
1864
+
1865
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1866
+#~ msgstr "Yhdistetään kohteeseen %s... [Paina %s keskeyttääksesi]"
1867
+
1868
+#~ msgid "press %s for the key editor"
1869
+#~ msgstr "Painalla %s pääset näppäineditoriin"
1870
+
1871
+#~ msgid "Album: %s - %s"
1872
+#~ msgstr "Levy: %s - %s"
1873
+
1874
+#~ msgid "Adding album %s..."
1875
+#~ msgstr "Lisätään albumia %s..."
1876
+
1877
+#~ msgid "Adding %s..."
1878
+#~ msgstr "Lisätään %s..."
1879
+
1880
+#~ msgid "Error: Screen too small"
1881
+#~ msgstr "Virhe: Ruutu on liian pieni"
1882
+
1883
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1884
+#~ msgstr "Virhe: Hakemistoa ~/ncmpc - %s ei pystytty luomaan"
1885
+
1886
+#~ msgid "Error: %s - %s"
1887
+#~ msgstr "Virhe: %s - %s"
1888
+
1889
+#, fuzzy
1890
+#~ msgid "%s [%s/%s] "
1891
+#~ msgstr "Korvaa %s [%s/%s] ? "
1892
 
1893
 #~ msgid "Shuffled playlist"
1894
 #~ msgstr "Sekoitettu soittolista"
1895
ncmpc-0.30.tar.xz/po/fr.po -> ncmpc-0.32.tar.xz/po/fr.po Changed
1937
 
1
@@ -9,7 +9,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.14.0\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-09-23 11:15+0000\n"
8
 "Last-Translator: Thibault Févry <Unknown>\n"
9
 "Language-Team: <fr@li.org>\n"
10
@@ -20,423 +20,358 @@
11
 "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n"
12
 "X-Generator: Launchpad (build 12138)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Commande inconnue"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Toutes les pistes"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Attention: Champ de couleur inconnu - %s\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Le terminal ne supporte pas le changement de couleurs"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Albums de l'artiste : %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Le terminal ne dispose pas de la gestion des couleurs"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Ajout de '%s' à la liste de lecture"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Tous les artistes"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "La touche %s est assignée à %s et à %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Ecran de configuration des touches"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Quitter"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Déplacer le curseur vers le haut"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Déplacer le curseur vers le bas"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Déplacer le curseur vers le haut de l'écran"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Déplacer le curseur vers le milieu de l'écran"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Déplacer le curseur vers le bas de l'écran"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Déplacer le curseur vers le haut de la liste"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Déplacer le curseur vers le bas de la liste"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Monter d'une page"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Descendre d'une page"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Sélection multi-ligne"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Défiler d'une ligne vers le bas"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Défiler d'une ligne vers le haut"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Défiler d'une moitié d'écran vers le haut"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Défiler d'une moitié d'écran vers le bas"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Sélectionner la chanson actuellement jouée"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Ecran d'aide"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Écran du paramétrage des raccourcis"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Ecran de Navigation"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Jouer/Entrer dans le répertoire"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pause"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Stop"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Couper"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Piste suivante"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Piste précédente"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Avancer"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Reculer"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Augmenter le volume"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Diminuer le volume"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Sélectionner/Désélectionner la chanson dans la liste de lecture"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Selectionner tous les éléments listés"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Enlever la chanson de la liste de lecture"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Activer/désactiver le mode répétition"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Activer/désactiver le mode aléatoire"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Basculer le mode seul"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Basculer le mode consommation"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Activer/désactiver le mode de fondu"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Mettre à jour la base de données musicale"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Ajouter une url/un fichier à la liste de lecture"
286
+msgid "Append song to queue"
287
+msgstr "Ajouter la chanson à la liste de lecture"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Aller au répertoire racine"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Aller au répertoire supérieur"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Localiser la chanson dans le navigateur"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Déplacer l'élément vers le haut"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Déplacer l'élément vers le bas"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Rafraîchir l'écran"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Activer le mode de recherche"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Activer le mode d'auto-centrage"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Ecran suivant"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Ecran précédent"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Passer à l'écran le plus récent"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Chercher après"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Chercher après/suivant"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Chercher avant"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Chercher avant/précédent"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Aller à"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Ecran sur l'Artiste"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Ecran de recherche"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Changer le mode de recherche"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Voir la chanson sélectionnée et actuellement jouée"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Ecran des paroles"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Interrompre l'action"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Mettre à jour les paroles"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Ecran des sorties"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Ecran suivant"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Indéfini"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Espace"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Entrée"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Suppr"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Haut"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Bas"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Gauche"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Droite"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Début"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "Fin"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageBas"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageHaut"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Echap"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Inser"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "La touche %s est assignée à %s et à %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Erreur"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Définition de raccourci malformée"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Commande inconnue"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Configuration de raccourci incomplète"
545
 
546
@@ -444,821 +379,887 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Mauvais type d'affichage du temps"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Manque '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Mauvais nom de couleur"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Définition de couleur incomplète"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Nombre invalide"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Définition de couleur malformée"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Nom d'écran inconnu"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Mode de recherche invalide"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Mode de recherche inconnu"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Paramètre de configuration inconnu"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "o"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Le terminal ne supporte pas le changement de couleurs"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Impossible d'effacer ce type d'objet"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Sélection multi-ligne désactivée"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Effacer la liste de lecture"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Sélection multi-ligne activée"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Annulé"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Connexion à %s...  [Appuyez sur %s pour annuler]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Liste de lecture effacée"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Parcourir"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Erreur: la version %d.%d.%d de MPD est trop ancienne (%s requise)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Chargement de la liste de lecture %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "appuyez sur %s pour l'éditeur de touches"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Déplacements"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Traduction française : Yann Cézard <eesprit@free.fr>\n"
675
-"\n"
676
-"Launchpad Contributions:\n"
677
-"  Bastien Leblanc https://launchpad.net/~bass000\n"
678
-"  François Blondel https://launchpad.net/~francoisblondel\n"
679
-"  Max Kellermann https://launchpad.net/~max-duempel\n"
680
-"  Romain Bignon https://launchpad.net/~romain-peerfuse\n"
681
-"  Thibault Févry https://launchpad.net/~thibaultfevry\n"
682
-"  Yann Cézard https://launchpad.net/~eesprit"
683
+#: src/HelpPage.cxx:105
684
+msgid "Global"
685
+msgstr "Globales"
686
 
687
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
688
-msgid "Shuffled queue"
689
-msgstr ""
690
+#: src/HelpPage.cxx:142
691
+msgid "Play"
692
+msgstr "Lire"
693
 
694
-#: src/player_command.cxx:184
695
-msgid "Cleared queue"
696
-msgstr ""
697
+#: src/HelpPage.cxx:149
698
+msgid "Center"
699
+msgstr "Centrer"
700
 
701
-#. query the user for a filename
702
-#: src/save_playlist.cxx:109
703
-msgid "Save queue as"
704
-msgstr ""
705
+#: src/HelpPage.cxx:157
706
+msgid "Enter directory/Select and play song"
707
+msgstr "Entrer dans le répertoire/Sélectionner et lire la chanson"
708
 
709
-#: src/save_playlist.cxx:140
710
-#, fuzzy, c-format
711
-msgid "Replace %s?"
712
-msgstr "Remplacer %s [%s/%s] ? "
713
+#: src/HelpPage.cxx:161
714
+msgid "Delete playlist"
715
+msgstr "Effacer la liste de lecture"
716
 
717
-#. translators: a dialog was aborted by the user
718
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
719
-#: src/screen_lyrics.cxx:370
720
-msgid "Aborted"
721
-msgstr "Annulé"
722
+#: src/HelpPage.cxx:171
723
+#, fuzzy
724
+msgid "New search"
725
+msgstr "Rechercher"
726
 
727
-#. success
728
-#: src/save_playlist.cxx:171
729
-#, c-format
730
-msgid "Saved %s"
731
-msgstr "%s enregistré"
732
+#: src/HelpPage.cxx:172
733
+msgid "Select and play"
734
+msgstr "Sélectionner et Lire"
735
 
736
-#: src/screen.cxx:154
737
-msgid "Repeat mode is on"
738
-msgstr "Répétition activé"
739
+#: src/HelpPage.cxx:183
740
+msgid "View Lyrics"
741
+msgstr "Voir les Paroles"
742
 
743
-#: src/screen.cxx:155
744
-msgid "Repeat mode is off"
745
-msgstr "Répétition désactivé"
746
+#: src/HelpPage.cxx:184
747
+msgid "(Re)load lyrics"
748
+msgstr "(Re)charger les paroles"
749
 
750
-#: src/screen.cxx:159
751
-msgid "Random mode is on"
752
-msgstr "Mode Aléatoire activé"
753
+#. to translators: this hotkey aborts the retrieval of lyrics
754
+#. from the server
755
+#: src/HelpPage.cxx:187
756
+msgid "Interrupt retrieval"
757
+msgstr "Récupération interrompue"
758
 
759
-#: src/screen.cxx:160
760
-msgid "Random mode is off"
761
-msgstr "Mode Aléatoire désactivé"
762
+#: src/HelpPage.cxx:188
763
+msgid "Download lyrics for currently playing song"
764
+msgstr "Télécharger les paroles de la chanson en lecture"
765
 
766
-#. "single" mode means
767
-#. that MPD will
768
-#. automatically stop
769
-#. after playing one
770
-#. single song
771
-#: src/screen.cxx:169
772
-msgid "Single mode is on"
773
-msgstr "Mode seul activé"
774
+#: src/HelpPage.cxx:189
775
+#, fuzzy
776
+msgid "Add or edit lyrics"
777
+msgstr "Aucune parole sauvée"
778
 
779
-#: src/screen.cxx:170
780
-msgid "Single mode is off"
781
-msgstr "Mode seul désactivé"
782
+#: src/HelpPage.cxx:190
783
+msgid "Save lyrics"
784
+msgstr "Enregistrer les paroles"
785
 
786
-#. "consume" mode means
787
-#. that MPD removes each
788
-#. song which has
789
-#. finished playing
790
-#: src/screen.cxx:178
791
-msgid "Consume mode is on"
792
-msgstr "Mode consommateur activé"
793
+#: src/HelpPage.cxx:191
794
+msgid "Delete saved lyrics"
795
+msgstr "Supprimer les paroles sauvées"
796
 
797
-#: src/screen.cxx:179
798
-msgid "Consume mode is off"
799
-msgstr "Mode consommateur activé"
800
+#: src/HelpPage.cxx:198
801
+msgid "Enable/disable output"
802
+msgstr "Activer/désactiver une sortie"
803
 
804
-#: src/screen.cxx:182
805
-#, c-format
806
-msgid "Crossfade %d seconds"
807
-msgstr "Fondu sur %d seconde(s)"
808
+#: src/HelpPage.cxx:205
809
+msgid "Write a message"
810
+msgstr ""
811
 
812
-#: src/screen.cxx:194
813
-msgid "Database updated"
814
-msgstr "Base de données mise à jour"
815
+#: src/HelpPage.cxx:210
816
+msgid "Keydef screen"
817
+msgstr "Écran du paramétrage des raccourcis"
818
 
819
-#: src/screen.cxx:226
820
-msgid "Find mode: Wrapped"
821
-msgstr "Mode de recherche: Enveloppe"
822
+#: src/HelpPage.cxx:212
823
+msgid "Edit keydefs for selected command"
824
+msgstr "Éditer les raccourcis pour la commande sélectionnée"
825
 
826
-#: src/screen.cxx:227
827
-msgid "Find mode: Normal"
828
-msgstr "Mode de recherche: Normal"
829
+#: src/HelpPage.cxx:213
830
+msgid "Remove selected keydef"
831
+msgstr "Supprimer le raccourci sélectionné"
832
 
833
-#: src/screen.cxx:232
834
-msgid "Auto center mode: On"
835
-msgstr "Mode d'auto-centrage: Actif"
836
+#: src/HelpPage.cxx:214
837
+#, fuzzy
838
+msgid "Add a keydef"
839
+msgstr "Ajouter une nouvelle touche"
840
 
841
-#: src/screen.cxx:233
842
-msgid "Auto center mode: Off"
843
-msgstr "Mode d'auto-centrage: Inactif"
844
+#: src/HelpPage.cxx:215
845
+msgid "Go up a level"
846
+msgstr "Aller au dossier parent"
847
 
848
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
849
-msgid "All tracks"
850
-msgstr "Toutes les pistes"
851
+#: src/HelpPage.cxx:216
852
+msgid "Apply and save changes"
853
+msgstr "Appliquer et sauvegarder les changements"
854
 
855
-#: src/screen_artist.cxx:384
856
-msgid "All artists"
857
-msgstr "Tous les artistes"
858
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
859
+msgid "Help"
860
+msgstr "Aide"
861
 
862
-#: src/screen_artist.cxx:389
863
-#, c-format
864
-msgid "Albums of artist: %s"
865
-msgstr "Albums de l'artiste : %s"
866
+#: src/i18n.h:43
867
+msgid "y"
868
+msgstr "o"
869
 
870
-#: src/screen_artist.cxx:398
871
-#, c-format
872
-msgid "All tracks of artist: %s"
873
-msgstr "Toutes les pistes de l'artiste : %s"
874
+#: src/i18n.h:44
875
+msgid "n"
876
+msgstr "n"
877
 
878
-#: src/screen_artist.cxx:401
879
-#, c-format
880
-msgid "Album: %s - %s"
881
-msgstr "Album: %s - %s"
882
+#: src/KeyName.cxx:31
883
+msgid "Undefined"
884
+msgstr "Indéfini"
885
 
886
-#: src/screen_artist.cxx:405
887
-#, c-format
888
-msgid "Tracks of no album of artist: %s"
889
-msgstr "Piste sans album de l'artiste : %s"
890
+#: src/KeyName.cxx:33
891
+msgid "Space"
892
+msgstr "Espace"
893
 
894
-#: src/screen_artist.cxx:450
895
-#, c-format
896
-msgid "Adding album %s..."
897
-msgstr "Ajout de l'album %s en cours..."
898
+#: src/KeyName.cxx:35
899
+msgid "Enter"
900
+msgstr "Entrée"
901
 
902
-#: src/screen_artist.cxx:452
903
+#: src/KeyName.cxx:37
904
+msgid "Backspace"
905
+msgstr "Backspace"
906
+
907
+#: src/KeyName.cxx:39
908
+msgid "Delete"
909
+msgstr "Suppr"
910
+
911
+#: src/KeyName.cxx:41
912
+msgid "Up"
913
+msgstr "Haut"
914
+
915
+#: src/KeyName.cxx:43
916
+msgid "Down"
917
+msgstr "Bas"
918
+
919
+#: src/KeyName.cxx:45
920
+msgid "Left"
921
+msgstr "Gauche"
922
+
923
+#: src/KeyName.cxx:47
924
+msgid "Right"
925
+msgstr "Droite"
926
+
927
+#: src/KeyName.cxx:49
928
+msgid "Home"
929
+msgstr "Début"
930
+
931
+#: src/KeyName.cxx:51
932
+msgid "End"
933
+msgstr "Fin"
934
+
935
+#: src/KeyName.cxx:53
936
+msgid "PageDown"
937
+msgstr "PageBas"
938
+
939
+#: src/KeyName.cxx:55
940
+msgid "PageUp"
941
+msgstr "PageHaut"
942
+
943
+#: src/KeyName.cxx:57
944
+msgid "Tab"
945
+msgstr "Tab"
946
+
947
+#: src/KeyName.cxx:59
948
+msgid "Shift+Tab"
949
+msgstr "Shift+Tab"
950
+
951
+#: src/KeyName.cxx:61
952
+msgid "Esc"
953
+msgstr "Echap"
954
+
955
+#: src/KeyName.cxx:63
956
+msgid "Insert"
957
+msgstr "Inser"
958
+
959
+#: src/KeyName.cxx:71
960
 #, c-format
961
-msgid "Adding %s..."
962
-msgstr "Ajout de %s en cours..."
963
+msgid "Ctrl-%c"
964
+msgstr ""
965
 
966
-#: src/screen_browser.cxx:122
967
+#: src/KeyName.cxx:73
968
 #, c-format
969
-msgid "Loading playlist %s..."
970
-msgstr "Chargement de la liste de lecture %s..."
971
+msgid "Alt-%c"
972
+msgstr ""
973
 
974
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
975
-#: src/screen_browser.cxx:279
976
-#, fuzzy, c-format
977
-msgid "Adding '%s' to queue"
978
-msgstr "Ajout de '%s' à la liste de lecture"
979
+#: src/ListWindow.cxx:491
980
+msgid "Range selection disabled"
981
+msgstr "Sélection multi-ligne désactivée"
982
+
983
+#: src/ListWindow.cxx:496
984
+msgid "Range selection enabled"
985
+msgstr "Sélection multi-ligne activée"
986
 
987
-#: src/screen_chat.cxx:59
988
+#. translators: no lyrics were found for the song
989
+#: src/LyricsPage.cxx:236
990
+msgid "No lyrics"
991
+msgstr "Pas de paroles"
992
+
993
+#: src/LyricsPage.cxx:254
994
 #, c-format
995
-msgid ""
996
-"connected to MPD %u.%u.%u (you need at least \n"
997
-"version 0.17.0 to use the chat feature)"
998
+msgid "Lyrics timeout occurred after %d seconds"
999
 msgstr ""
1000
 
1001
-#: src/screen_chat.cxx:177
1002
-msgid "Your message"
1003
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1004
+#: src/LyricsPage.cxx:490
1005
+msgid "Lyrics"
1006
+msgstr "Paroles"
1007
+
1008
+#. translators: this message is displayed
1009
+#. while data is retrieved
1010
+#: src/LyricsPage.cxx:340
1011
+msgid "loading..."
1012
+msgstr "Chargement..."
1013
+
1014
+#: src/LyricsPage.cxx:361
1015
+msgid "Editor not configured"
1016
 msgstr ""
1017
 
1018
-#: src/screen_chat.cxx:186
1019
-msgid "Message could not be sent"
1020
+#: src/LyricsPage.cxx:368
1021
+msgid "Do you really want to start an editor and edit these lyrics?"
1022
 msgstr ""
1023
 
1024
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1025
-msgid "Chat"
1026
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1027
+msgid "Can't start editor"
1028
 msgstr ""
1029
 
1030
-#: src/screen_client.cxx:41
1031
-msgid "Database update running..."
1032
-msgstr "Mise à jour de la base de données en cours..."
1033
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1034
+msgid "Editor exited unexpectedly"
1035
+msgstr ""
1036
 
1037
-#: src/screen_client.cxx:49
1038
-#, c-format
1039
-msgid "Database update of %s started"
1040
-msgstr "Mise à jour de la base de données de %s commençée"
1041
+#. lyrics for the song were saved on hard disk
1042
+#: src/LyricsPage.cxx:439
1043
+msgid "Lyrics saved"
1044
+msgstr "Paroles enregistrées"
1045
 
1046
-#: src/screen_client.cxx:52
1047
-msgid "Database update started"
1048
-msgstr "Début de la mise à jour de la base de données"
1049
+#: src/LyricsPage.cxx:445
1050
+msgid "Lyrics deleted"
1051
+msgstr "Paroles supprimées"
1052
 
1053
-#. translators: the "delete" command is only possible
1054
-#. for playlists; the user attempted to delete a song
1055
-#. or a directory or something else
1056
-#: src/screen_file.cxx:200
1057
-msgid "Deleting this item is not possible"
1058
-msgstr "Impossible d'effacer ce type d'objet"
1059
+#: src/LyricsPage.cxx:446
1060
+msgid "No saved lyrics"
1061
+msgstr "Aucune parole sauvée"
1062
 
1063
-#: src/screen_file.cxx:207
1064
+#: src/Main.cxx:167
1065
 #, fuzzy, c-format
1066
-msgid "Delete playlist %s?"
1067
-msgstr "Effacer la liste de lecture"
1068
+msgid "Connecting to %s"
1069
+msgstr "Connecté à %s"
1070
 
1071
-#. translators: MPD deleted the playlist, as requested by the
1072
-#. user
1073
-#: src/screen_file.cxx:227
1074
-msgid "Playlist deleted"
1075
-msgstr "Liste de lecture effacée"
1076
-
1077
-#. translators: caption of the browser screen
1078
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1079
-msgid "Browse"
1080
-msgstr "Parcourir"
1081
-
1082
-#: src/screen_find.cxx:29
1083
-msgid "Find"
1084
-msgstr "Trouver"
1085
+#: src/Main.cxx:187
1086
+#, fuzzy, c-format
1087
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1088
+msgstr "Erreur: la version %d.%d.%d de MPD est trop ancienne (%s requise)"
1089
 
1090
-#: src/screen_find.cxx:30
1091
-msgid "Find backward"
1092
-msgstr "Trouver avant"
1093
+#. To translators: these credits are shown
1094
+#. when ncmpc is started with "--version"
1095
+#: src/options.cxx:213 src/options.cxx:216
1096
+msgid "translator-credits"
1097
+msgstr ""
1098
+"Traduction française : Yann Cézard <eesprit@free.fr>\n"
1099
+"\n"
1100
+"Launchpad Contributions:\n"
1101
+"  Bastien Leblanc https://launchpad.net/~bass000\n"
1102
+"  François Blondel https://launchpad.net/~francoisblondel\n"
1103
+"  Max Kellermann https://launchpad.net/~max-duempel\n"
1104
+"  Romain Bignon https://launchpad.net/~romain-peerfuse\n"
1105
+"  Thibault Févry https://launchpad.net/~thibaultfevry\n"
1106
+"  Yann Cézard https://launchpad.net/~eesprit"
1107
 
1108
-#: src/screen_find.cxx:31
1109
-msgid "Jump"
1110
-msgstr "Sauter"
1111
+#: src/OutputsPage.cxx:87
1112
+#, c-format
1113
+msgid "Output '%s' enabled"
1114
+msgstr "Sortie %s activée"
1115
 
1116
-#: src/screen_find.cxx:82
1117
+#: src/OutputsPage.cxx:98
1118
 #, c-format
1119
-msgid "Unable to find '%s'"
1120
-msgstr "Impossible de trouver '%s'"
1121
+msgid "Output '%s' disabled"
1122
+msgstr "Sortie %s désactivée"
1123
 
1124
-#: src/screen_help.cxx:39
1125
-msgid "Movement"
1126
-msgstr "Déplacements"
1127
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1128
+msgid "Outputs"
1129
+msgstr "Sorties"
1130
 
1131
-#: src/screen_help.cxx:84
1132
-msgid "Global"
1133
-msgstr "Globales"
1134
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1135
+msgid "Shuffled queue"
1136
+msgstr ""
1137
 
1138
-#: src/screen_help.cxx:121
1139
-msgid "Play"
1140
-msgstr "Lire"
1141
+#: src/player_command.cxx:186
1142
+msgid "Cleared queue"
1143
+msgstr ""
1144
 
1145
-#: src/screen_help.cxx:124
1146
-msgid "Move song up"
1147
-msgstr "Déplacer la chanson vers le haut"
1148
+#. get path
1149
+#: src/QueuePage.cxx:307
1150
+msgid "Add"
1151
+msgstr "Ajouter"
1152
 
1153
-#: src/screen_help.cxx:125
1154
-msgid "Move song down"
1155
-msgstr "Déplacer la chanson vers le bas"
1156
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1157
+msgid "Queue"
1158
+msgstr ""
1159
 
1160
-#: src/screen_help.cxx:128
1161
-msgid "Center"
1162
-msgstr "Centrer"
1163
+#: src/QueuePage.cxx:380
1164
+#, c-format
1165
+msgid "Queue on %s"
1166
+msgstr ""
1167
 
1168
-#: src/screen_help.cxx:136
1169
-msgid "Enter directory/Select and play song"
1170
-msgstr "Entrer dans le répertoire/Sélectionner et lire la chanson"
1171
+#. query the user for a filename
1172
+#: src/save_playlist.cxx:85
1173
+msgid "Save queue as"
1174
+msgstr ""
1175
 
1176
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1177
-#, fuzzy
1178
-msgid "Append song to queue"
1179
-msgstr "Ajouter la chanson à la liste de lecture"
1180
+#: src/save_playlist.cxx:107
1181
+#, fuzzy, c-format
1182
+msgid "Replace %s?"
1183
+msgstr "Remplacer %s [%s/%s] ? "
1184
 
1185
-#: src/screen_help.cxx:140
1186
-msgid "Delete playlist"
1187
-msgstr "Effacer la liste de lecture"
1188
+#. success
1189
+#: src/save_playlist.cxx:128
1190
+#, c-format
1191
+msgid "Saved %s"
1192
+msgstr "%s enregistré"
1193
 
1194
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1195
-msgid "Search"
1196
-msgstr "Rechercher"
1197
+#: src/screen_artist.cxx:186
1198
+#, c-format
1199
+msgid "All tracks of artist: %s"
1200
+msgstr "Toutes les pistes de l'artiste : %s"
1201
 
1202
-#: src/screen_help.cxx:151
1203
-msgid "Select and play"
1204
-msgstr "Sélectionner et Lire"
1205
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1206
+msgid "Album"
1207
+msgstr "Album"
1208
 
1209
-#: src/screen_help.cxx:162
1210
-msgid "View Lyrics"
1211
-msgstr "Voir les Paroles"
1212
+#: src/screen_artist.cxx:195
1213
+#, c-format
1214
+msgid "Tracks of no album of artist: %s"
1215
+msgstr "Piste sans album de l'artiste : %s"
1216
 
1217
-#: src/screen_help.cxx:163
1218
-msgid "(Re)load lyrics"
1219
-msgstr "(Re)charger les paroles"
1220
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1221
+msgid "Artist"
1222
+msgstr "Artiste"
1223
 
1224
-#. to translators: this hotkey aborts the retrieval of lyrics
1225
-#. from the server
1226
-#: src/screen_help.cxx:166
1227
-msgid "Interrupt retrieval"
1228
-msgstr "Récupération interrompue"
1229
+#: src/screen_client.cxx:41
1230
+#, fuzzy
1231
+msgid "Database update running"
1232
+msgstr "Mise à jour de la base de données en cours..."
1233
 
1234
-#: src/screen_help.cxx:167
1235
-msgid "Download lyrics for currently playing song"
1236
-msgstr "Télécharger les paroles de la chanson en lecture"
1237
+#: src/screen_client.cxx:48
1238
+#, c-format
1239
+msgid "Database update of %s started"
1240
+msgstr "Mise à jour de la base de données de %s commençée"
1241
 
1242
-#: src/screen_help.cxx:168
1243
-#, fuzzy
1244
-msgid "Add or edit lyrics"
1245
-msgstr "Aucune parole sauvée"
1246
+#: src/screen_client.cxx:51
1247
+msgid "Database update started"
1248
+msgstr "Début de la mise à jour de la base de données"
1249
 
1250
-#: src/screen_help.cxx:169
1251
-msgid "Save lyrics"
1252
-msgstr "Enregistrer les paroles"
1253
+#: src/screen.cxx:160
1254
+msgid "Repeat mode is on"
1255
+msgstr "Répétition activé"
1256
 
1257
-#: src/screen_help.cxx:170
1258
-msgid "Delete saved lyrics"
1259
-msgstr "Supprimer les paroles sauvées"
1260
+#: src/screen.cxx:161
1261
+msgid "Repeat mode is off"
1262
+msgstr "Répétition désactivé"
1263
 
1264
-#: src/screen_help.cxx:177
1265
-msgid "Enable/disable output"
1266
-msgstr "Activer/désactiver une sortie"
1267
+#: src/screen.cxx:165
1268
+msgid "Random mode is on"
1269
+msgstr "Mode Aléatoire activé"
1270
 
1271
-#: src/screen_help.cxx:184
1272
-msgid "Write a message"
1273
-msgstr ""
1274
+#: src/screen.cxx:166
1275
+msgid "Random mode is off"
1276
+msgstr "Mode Aléatoire désactivé"
1277
 
1278
-#: src/screen_help.cxx:189
1279
-msgid "Keydef screen"
1280
-msgstr "Écran du paramétrage des raccourcis"
1281
+#. "single" mode means
1282
+#. that MPD will
1283
+#. automatically stop
1284
+#. after playing one
1285
+#. single song
1286
+#: src/screen.cxx:175
1287
+msgid "Single mode is on"
1288
+msgstr "Mode seul activé"
1289
 
1290
-#: src/screen_help.cxx:191
1291
-msgid "Edit keydefs for selected command"
1292
-msgstr "Éditer les raccourcis pour la commande sélectionnée"
1293
+#: src/screen.cxx:176
1294
+msgid "Single mode is off"
1295
+msgstr "Mode seul désactivé"
1296
 
1297
-#: src/screen_help.cxx:192
1298
-msgid "Remove selected keydef"
1299
-msgstr "Supprimer le raccourci sélectionné"
1300
+#. "consume" mode means
1301
+#. that MPD removes each
1302
+#. song which has
1303
+#. finished playing
1304
+#: src/screen.cxx:184
1305
+msgid "Consume mode is on"
1306
+msgstr "Mode consommateur activé"
1307
 
1308
-#: src/screen_help.cxx:193
1309
-#, fuzzy
1310
-msgid "Add a keydef"
1311
-msgstr "Ajouter une nouvelle touche"
1312
+#: src/screen.cxx:185
1313
+msgid "Consume mode is off"
1314
+msgstr "Mode consommateur activé"
1315
 
1316
-#: src/screen_help.cxx:194
1317
-msgid "Go up a level"
1318
-msgstr "Aller au dossier parent"
1319
+#: src/screen.cxx:188
1320
+#, c-format
1321
+msgid "Crossfade %d seconds"
1322
+msgstr "Fondu sur %d seconde(s)"
1323
 
1324
-#: src/screen_help.cxx:195
1325
-msgid "Apply and save changes"
1326
-msgstr "Appliquer et sauvegarder les changements"
1327
+#: src/screen.cxx:200
1328
+msgid "Database updated"
1329
+msgstr "Base de données mise à jour"
1330
 
1331
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1332
-msgid "Help"
1333
-msgstr "Aide"
1334
+#: src/screen.cxx:250
1335
+msgid "Find mode: Wrapped"
1336
+msgstr "Mode de recherche: Enveloppe"
1337
 
1338
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1339
-msgid "Error: Screen too small"
1340
-msgstr "Erreur: Ecran trop petit"
1341
+#: src/screen.cxx:251
1342
+msgid "Find mode: Normal"
1343
+msgstr "Mode de recherche: Normal"
1344
 
1345
-#: src/screen_keydef.cxx:141
1346
-msgid "You have new key bindings"
1347
-msgstr "Vous avez une nouvelle correspondance de touches"
1348
+#: src/screen.cxx:256
1349
+msgid "Auto center mode: On"
1350
+msgstr "Mode d'auto-centrage: Actif"
1351
 
1352
-#: src/screen_keydef.cxx:143
1353
-msgid "Keybindings unchanged."
1354
-msgstr "La correspondance des touches n'a pas été changée."
1355
+#: src/screen.cxx:257
1356
+msgid "Auto center mode: Off"
1357
+msgstr "Mode d'auto-centrage: Inactif"
1358
 
1359
-#: src/screen_keydef.cxx:153
1360
-#, c-format
1361
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1362
-msgstr "Erreur : Impossible de créer le répertoire ~/.ncmpc - %s"
1363
+#: src/screen_find.cxx:31
1364
+msgid "Find"
1365
+msgstr "Trouver"
1366
 
1367
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1368
-#, c-format
1369
-msgid "Error: %s - %s"
1370
-msgstr "Erreur: %s - %s"
1371
+#: src/screen_find.cxx:32
1372
+msgid "Find backward"
1373
+msgstr "Trouver avant"
1374
+
1375
+#: src/screen_find.cxx:33
1376
+msgid "Jump"
1377
+msgstr "Sauter"
1378
 
1379
-#: src/screen_keydef.cxx:171
1380
+#: src/screen_find.cxx:79
1381
 #, c-format
1382
-msgid "Wrote %s"
1383
-msgstr "%s écrit"
1384
+msgid "Unable to find '%s'"
1385
+msgstr "Impossible de trouver '%s'"
1386
 
1387
-#: src/screen_keydef.cxx:250
1388
+#: src/screen_keydef.cxx:161
1389
 msgid "Deleted"
1390
 msgstr "Effacé"
1391
 
1392
-#: src/screen_keydef.cxx:265
1393
+#: src/screen_keydef.cxx:177
1394
 #, c-format
1395
 msgid "Enter new key for %s: "
1396
 msgstr "Entrez la nouvelle touche pour %s: "
1397
 
1398
-#: src/screen_keydef.cxx:276
1399
+#: src/screen_keydef.cxx:187
1400
 msgid "Ctrl-Space can't be used"
1401
 msgstr ""
1402
 
1403
-#: src/screen_keydef.cxx:282
1404
+#: src/screen_keydef.cxx:193
1405
 #, c-format
1406
 msgid "Error: key %s is already used for %s"
1407
 msgstr "Erreur: la touche %s est déja attribuée à %s"
1408
 
1409
-#: src/screen_keydef.cxx:291
1410
+#: src/screen_keydef.cxx:202
1411
 #, c-format
1412
 msgid "Assigned %s to %s"
1413
 msgstr "%s assignée à %s"
1414
 
1415
-#: src/screen_keydef.cxx:317
1416
-msgid "===> Apply key bindings "
1417
-msgstr "===> Appliquer la correspondance des touches "
1418
-
1419
-#: src/screen_keydef.cxx:319
1420
-msgid "===> Apply & Save key bindings  "
1421
-msgstr "===> Appliquer et Enregistrer la correspondance des touches  "
1422
-
1423
-#: src/screen_keydef.cxx:347
1424
+#: src/screen_keydef.cxx:229
1425
 msgid "Add new key"
1426
 msgstr "Ajouter une nouvelle touche"
1427
 
1428
-#: src/screen_keydef.cxx:410
1429
-msgid "Note: Did you forget to 'Apply' your changes?"
1430
-msgstr "Note: Auriez-vous oublié d''Appliquer' vos changements?"
1431
-
1432
-#: src/screen_keydef.cxx:417
1433
-msgid "Edit key bindings"
1434
-msgstr "Editer les correspondances de touches"
1435
-
1436
-#: src/screen_keydef.cxx:419
1437
+#: src/screen_keydef.cxx:251
1438
 #, c-format
1439
 msgid "Edit keys for %s"
1440
 msgstr "Editer les touches pour %s"
1441
 
1442
-#. translators: no lyrics were found for the song
1443
-#: src/screen_lyrics.cxx:208
1444
-msgid "No lyrics"
1445
-msgstr "Pas de paroles"
1446
-
1447
-#: src/screen_lyrics.cxx:226
1448
-#, c-format
1449
-msgid "Lyrics timeout occurred after %d seconds"
1450
-msgstr ""
1451
-
1452
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1453
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1454
-msgid "Lyrics"
1455
-msgstr "Paroles"
1456
-
1457
-#. translators: this message is displayed
1458
-#. while data is retrieved
1459
-#: src/screen_lyrics.cxx:330
1460
-msgid "loading..."
1461
-msgstr "Chargement..."
1462
-
1463
-#: src/screen_lyrics.cxx:361
1464
-msgid "Editor not configured"
1465
-msgstr ""
1466
-
1467
-#: src/screen_lyrics.cxx:367
1468
-msgid "Do you really want to start an editor and edit these lyrics?"
1469
-msgstr ""
1470
+#: src/screen_keydef.cxx:393
1471
+msgid "You have new key bindings"
1472
+msgstr "Vous avez une nouvelle correspondance de touches"
1473
 
1474
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1475
-msgid "Can't start editor"
1476
-msgstr ""
1477
+#: src/screen_keydef.cxx:395
1478
+msgid "Keybindings unchanged."
1479
+msgstr "La correspondance des touches n'a pas été changée."
1480
 
1481
-#: src/screen_lyrics.cxx:411
1482
-#, c-format
1483
-msgid "Editor exited unexpectedly (%d)"
1484
-msgstr ""
1485
+#: src/screen_keydef.cxx:405
1486
+#, fuzzy
1487
+msgid "Unable to write configuration"
1488
+msgstr "Configuration de raccourci incomplète"
1489
 
1490
-#: src/screen_lyrics.cxx:414
1491
+#: src/screen_keydef.cxx:421
1492
 #, c-format
1493
-msgid "Editor exited unexpectedly (signal %d)"
1494
-msgstr ""
1495
-
1496
-#. lyrics for the song were saved on hard disk
1497
-#: src/screen_lyrics.cxx:436
1498
-msgid "Lyrics saved"
1499
-msgstr "Paroles enregistrées"
1500
-
1501
-#: src/screen_lyrics.cxx:443
1502
-msgid "Lyrics deleted"
1503
-msgstr "Paroles supprimées"
1504
-
1505
-#: src/screen_lyrics.cxx:446
1506
-msgid "No saved lyrics"
1507
-msgstr "Aucune parole sauvée"
1508
+msgid "Wrote %s"
1509
+msgstr "%s écrit"
1510
 
1511
-#: src/screen_outputs.cxx:60
1512
-#, c-format
1513
-msgid "Output '%s' enabled"
1514
-msgstr "Sortie %s activée"
1515
+#: src/screen_keydef.cxx:433
1516
+msgid "===> Apply key bindings "
1517
+msgstr "===> Appliquer la correspondance des touches "
1518
 
1519
-#: src/screen_outputs.cxx:71
1520
-#, c-format
1521
-msgid "Output '%s' disabled"
1522
-msgstr "Sortie %s désactivée"
1523
+#: src/screen_keydef.cxx:435
1524
+msgid "===> Apply & Save key bindings  "
1525
+msgstr "===> Appliquer et Enregistrer la correspondance des touches  "
1526
 
1527
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1528
-msgid "Outputs"
1529
-msgstr "Sorties"
1530
+#: src/screen_keydef.cxx:472
1531
+msgid "Edit key bindings"
1532
+msgstr "Editer les correspondances de touches"
1533
 
1534
-#. get path
1535
-#: src/screen_queue.cxx:274
1536
-msgid "Add"
1537
-msgstr "Ajouter"
1538
+#: src/screen_keydef.cxx:554
1539
+msgid "Note: Did you forget to 'Apply' your changes?"
1540
+msgstr "Note: Auriez-vous oublié d''Appliquer' vos changements?"
1541
 
1542
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1543
-msgid "Queue"
1544
+#: src/screen_keydef.cxx:604
1545
+msgid "Keys"
1546
 msgstr ""
1547
 
1548
-#: src/screen_queue.cxx:384
1549
-#, c-format
1550
-msgid "Queue on %s"
1551
-msgstr ""
1552
+#: src/screen_utils.cxx:124
1553
+msgid "Password"
1554
+msgstr "Mot de passe"
1555
 
1556
-#: src/screen_search.cxx:48
1557
+#: src/SearchPage.cxx:51
1558
 msgid "artist"
1559
 msgstr "artiste"
1560
 
1561
-#: src/screen_search.cxx:49
1562
+#: src/SearchPage.cxx:52
1563
 msgid "album"
1564
 msgstr "album"
1565
 
1566
-#: src/screen_search.cxx:50
1567
+#: src/SearchPage.cxx:53
1568
 msgid "title"
1569
 msgstr "titre"
1570
 
1571
-#: src/screen_search.cxx:51
1572
+#: src/SearchPage.cxx:54
1573
 msgid "track"
1574
 msgstr "piste"
1575
 
1576
-#: src/screen_search.cxx:52
1577
+#: src/SearchPage.cxx:55
1578
 msgid "name"
1579
 msgstr "nom"
1580
 
1581
-#: src/screen_search.cxx:53
1582
+#: src/SearchPage.cxx:56
1583
 msgid "genre"
1584
 msgstr "genre"
1585
 
1586
-#: src/screen_search.cxx:54
1587
+#: src/SearchPage.cxx:57
1588
 msgid "date"
1589
 msgstr "date"
1590
 
1591
-#: src/screen_search.cxx:55
1592
+#: src/SearchPage.cxx:58
1593
 msgid "composer"
1594
 msgstr "compositeur"
1595
 
1596
-#: src/screen_search.cxx:56
1597
+#: src/SearchPage.cxx:59
1598
 msgid "performer"
1599
 msgstr "interprète"
1600
 
1601
-#: src/screen_search.cxx:57
1602
+#: src/SearchPage.cxx:60
1603
 msgid "comment"
1604
 msgstr "commentaire"
1605
 
1606
-#: src/screen_search.cxx:65
1607
+#: src/SearchPage.cxx:68
1608
 msgid "file"
1609
 msgstr "fichier"
1610
 
1611
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1612
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1613
 msgid "Title"
1614
 msgstr "Titre"
1615
 
1616
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1617
-msgid "Artist"
1618
-msgstr "Artiste"
1619
-
1620
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1621
-msgid "Album"
1622
-msgstr "Album"
1623
-
1624
-#: src/screen_search.cxx:85
1625
+#: src/SearchPage.cxx:88
1626
 msgid "Filename"
1627
 msgstr "Nom de fichier"
1628
 
1629
-#: src/screen_search.cxx:86
1630
+#: src/SearchPage.cxx:89
1631
 msgid "Artist + Title"
1632
 msgstr "Artiste + Titre"
1633
 
1634
-#: src/screen_search.cxx:244
1635
-#, c-format
1636
-msgid "No argument for search tag %s"
1637
-msgstr "Pas d'argument pour le champ recherché %s"
1638
-
1639
-#: src/screen_search.cxx:253
1640
+#: src/SearchPage.cxx:270
1641
 #, c-format
1642
 msgid "Bad search tag %s"
1643
 msgstr "Mauvais champ recherché %s"
1644
 
1645
-#. if( pattern==nullptr )
1646
-#. search_new(screen, c);
1647
-#. else
1648
-#: src/screen_search.cxx:400
1649
-#, c-format
1650
-msgid "Press %s for a new search"
1651
-msgstr "Appuyez sur %s pour une nouvelle recherche"
1652
-
1653
-#: src/screen_search.cxx:427
1654
-#, c-format
1655
-msgid "Search: %s"
1656
-msgstr "Rechercher: %s"
1657
-
1658
-#: src/screen_search.cxx:430
1659
+#: src/SearchPage.cxx:284
1660
 #, c-format
1661
-msgid "Search: Results for %s [%s]"
1662
-msgstr "Rechercher: Résultats pour %s [%s]"
1663
+msgid "No argument for search tag %s"
1664
+msgstr "Pas d'argument pour le champ recherché %s"
1665
 
1666
-#: src/screen_search.cxx:434
1667
-#, c-format
1668
-msgid "Search: Press %s for a new search [%s]"
1669
-msgstr "Rechercher: Appuyez sur %s pour une nouvelle recherche [%s]"
1670
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1671
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1672
+msgid "Search"
1673
+msgstr "Rechercher"
1674
 
1675
-#: src/screen_search.cxx:458
1676
+#: src/SearchPage.cxx:436
1677
 #, c-format
1678
 msgid "Search mode: %s"
1679
 msgstr "Mode de recherche : %s"
1680
 
1681
-#: src/screen_song.cxx:54
1682
+#: src/SongPage.cxx:67
1683
 msgid "Length"
1684
 msgstr "Durée"
1685
 
1686
-#: src/screen_song.cxx:55
1687
+#: src/SongPage.cxx:68
1688
 msgid "Position"
1689
 msgstr ""
1690
 
1691
-#: src/screen_song.cxx:56
1692
+#: src/SongPage.cxx:69
1693
 msgid "Composer"
1694
 msgstr "Compositeur"
1695
 
1696
-#: src/screen_song.cxx:57
1697
+#: src/SongPage.cxx:70
1698
 msgid "Name"
1699
 msgstr "Nom"
1700
 
1701
-#: src/screen_song.cxx:58
1702
+#: src/SongPage.cxx:71
1703
 msgid "Disc"
1704
 msgstr "Disque"
1705
 
1706
-#: src/screen_song.cxx:59
1707
+#: src/SongPage.cxx:72
1708
 msgid "Track"
1709
 msgstr "Piste"
1710
 
1711
-#: src/screen_song.cxx:60
1712
+#: src/SongPage.cxx:73
1713
 msgid "Date"
1714
 msgstr "Date"
1715
 
1716
-#: src/screen_song.cxx:61
1717
+#: src/SongPage.cxx:74
1718
 msgid "Genre"
1719
 msgstr "Style"
1720
 
1721
-#: src/screen_song.cxx:62
1722
+#: src/SongPage.cxx:75
1723
 msgid "Comment"
1724
 msgstr "Commentaire"
1725
 
1726
-#: src/screen_song.cxx:63
1727
+#: src/SongPage.cxx:76
1728
 msgid "Path"
1729
 msgstr "Chemin"
1730
 
1731
-#: src/screen_song.cxx:64
1732
+#: src/SongPage.cxx:77
1733
 msgid "Bitrate"
1734
 msgstr "Débit"
1735
 
1736
-#: src/screen_song.cxx:65
1737
+#: src/SongPage.cxx:78
1738
 msgid "Format"
1739
 msgstr ""
1740
 
1741
-#: src/screen_song.cxx:82
1742
+#: src/SongPage.cxx:95
1743
 msgid "Number of artists"
1744
 msgstr "Nombre d'artistes"
1745
 
1746
-#: src/screen_song.cxx:83
1747
+#: src/SongPage.cxx:96
1748
 msgid "Number of albums"
1749
 msgstr "Nombre d'albums"
1750
 
1751
-#: src/screen_song.cxx:84
1752
+#: src/SongPage.cxx:97
1753
 msgid "Number of songs"
1754
 msgstr "Nombre de chansons"
1755
 
1756
-#: src/screen_song.cxx:85
1757
+#: src/SongPage.cxx:98
1758
 msgid "Uptime"
1759
 msgstr "Temps de service"
1760
 
1761
-#: src/screen_song.cxx:86
1762
+#: src/SongPage.cxx:99
1763
 msgid "Most recent db update"
1764
 msgstr "Mise à jour de la BD la plus récente"
1765
 
1766
-#: src/screen_song.cxx:87
1767
+#: src/SongPage.cxx:100
1768
 msgid "Playtime"
1769
 msgstr "Temps de lecture"
1770
 
1771
-#: src/screen_song.cxx:88
1772
+#: src/SongPage.cxx:101
1773
 msgid "DB playtime"
1774
 msgstr "Temps de lecture de la BD"
1775
 
1776
-#: src/screen_song.cxx:173
1777
+#: src/SongPage.cxx:204
1778
 msgid "Song viewer"
1779
 msgstr "Visualiseur de chanson"
1780
 
1781
-#: src/screen_song.cxx:337
1782
+#: src/SongPage.cxx:370
1783
 msgid "MPD statistics"
1784
 msgstr "Statistiques MPD"
1785
 
1786
-#: src/screen_song.cxx:427
1787
+#: src/SongPage.cxx:455
1788
 msgid "Selected song"
1789
 msgstr "Chanson sélectionnée"
1790
 
1791
-#: src/screen_song.cxx:437
1792
+#: src/SongPage.cxx:465
1793
 msgid "Currently playing song"
1794
 msgstr "Chanson actuellement jouée"
1795
 
1796
-#: src/screen_song.cxx:442
1797
+#: src/SongPage.cxx:470
1798
 #, c-format
1799
 msgid "%d kbps"
1800
 msgstr "%d kbps"
1801
 
1802
-#. NOTE: if one day a translator decides to use a multi-byte character
1803
-#. for one of the yes/no keys, we'll have to parse it properly
1804
-#: src/screen_utils.cxx:80
1805
-#, fuzzy, c-format
1806
-msgid "%s [%s/%s] "
1807
-msgstr "Remplacer %s [%s/%s] ? "
1808
-
1809
-#: src/screen_utils.cxx:121
1810
-msgid "Password"
1811
-msgstr "Mot de passe"
1812
+#: src/SongPage.cxx:554
1813
+msgid "Song"
1814
+msgstr ""
1815
 
1816
-#: src/status_bar.cxx:121
1817
+#: src/StatusBar.cxx:104
1818
 msgid "Playing:"
1819
 msgstr "En Lecture:"
1820
 
1821
-#: src/status_bar.cxx:124
1822
+#: src/StatusBar.cxx:108
1823
 msgid "[Paused]"
1824
 msgstr "[En Pause]"
1825
 
1826
-#: src/title_bar.cxx:99
1827
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1828
+#, fuzzy
1829
+msgid "Unknown color"
1830
+msgstr "Commande inconnue"
1831
+
1832
+#: src/Styles.cxx:333
1833
+#, fuzzy
1834
+msgid "Unknown color field"
1835
+msgstr "Attention: Champ de couleur inconnu - %s\n"
1836
+
1837
+#: src/Styles.cxx:375
1838
+msgid "Terminal lacks color capabilities"
1839
+msgstr "Le terminal ne dispose pas de la gestion des couleurs"
1840
+
1841
+#: src/time_format.cxx:44
1842
+msgid "year"
1843
+msgstr ""
1844
+
1845
+#: src/time_format.cxx:46
1846
+msgid "years"
1847
+msgstr ""
1848
+
1849
+#: src/time_format.cxx:54
1850
+msgid "week"
1851
+msgstr ""
1852
+
1853
+#: src/time_format.cxx:57
1854
+msgid "weeks"
1855
+msgstr ""
1856
+
1857
+#: src/time_format.cxx:65
1858
+msgid "day"
1859
+msgstr ""
1860
+
1861
+#: src/time_format.cxx:68
1862
+msgid "days"
1863
+msgstr ""
1864
+
1865
+#: src/TitleBar.cxx:100
1866
 msgid "Volume n/a"
1867
 msgstr "Volume n/a"
1868
 
1869
-#: src/title_bar.cxx:101
1870
+#: src/TitleBar.cxx:102
1871
 #, c-format
1872
 msgid "Volume %d%%"
1873
 msgstr "Volume %d%%"
1874
 
1875
+#, fuzzy
1876
+#~ msgid "Add url/file to queue"
1877
+#~ msgstr "Ajouter une url/un fichier à la liste de lecture"
1878
+
1879
+#~ msgid "Move song up"
1880
+#~ msgstr "Déplacer la chanson vers le haut"
1881
+
1882
+#~ msgid "Move song down"
1883
+#~ msgstr "Déplacer la chanson vers le bas"
1884
+
1885
+#~ msgid "Press %s for a new search"
1886
+#~ msgstr "Appuyez sur %s pour une nouvelle recherche"
1887
+
1888
+#~ msgid "Search: %s"
1889
+#~ msgstr "Rechercher: %s"
1890
+
1891
+#~ msgid "Search: Results for %s [%s]"
1892
+#~ msgstr "Rechercher: Résultats pour %s [%s]"
1893
+
1894
+#~ msgid "Search: Press %s for a new search [%s]"
1895
+#~ msgstr "Rechercher: Appuyez sur %s pour une nouvelle recherche [%s]"
1896
+
1897
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1898
+#~ msgstr "Connexion à %s...  [Appuyez sur %s pour annuler]"
1899
+
1900
+#~ msgid "press %s for the key editor"
1901
+#~ msgstr "appuyez sur %s pour l'éditeur de touches"
1902
+
1903
+#~ msgid "Album: %s - %s"
1904
+#~ msgstr "Album: %s - %s"
1905
+
1906
+#~ msgid "Adding album %s..."
1907
+#~ msgstr "Ajout de l'album %s en cours..."
1908
+
1909
+#~ msgid "Adding %s..."
1910
+#~ msgstr "Ajout de %s en cours..."
1911
+
1912
+#~ msgid "Error: Screen too small"
1913
+#~ msgstr "Erreur: Ecran trop petit"
1914
+
1915
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1916
+#~ msgstr "Erreur : Impossible de créer le répertoire ~/.ncmpc - %s"
1917
+
1918
+#~ msgid "Error: %s - %s"
1919
+#~ msgstr "Erreur: %s - %s"
1920
+
1921
+#, fuzzy
1922
+#~ msgid "%s [%s/%s] "
1923
+#~ msgstr "Remplacer %s [%s/%s] ? "
1924
+
1925
 #~ msgid "Delete playlist %s [%s/%s] ? "
1926
 #~ msgstr "Effacer la liste de lecture %s [%s/%s] ? "
1927
 
1928
 #~ msgid "Warning: Unknown color - %s\n"
1929
 #~ msgstr "Attention: Couleur inconnue - %s\n"
1930
 
1931
-#~ msgid "Connected to %s"
1932
-#~ msgstr "Connecté à %s"
1933
-
1934
 #~ msgid "Shuffled playlist"
1935
 #~ msgstr "Liste de lecture aléatoire"
1936
 
1937
ncmpc-0.30.tar.xz/po/gl.po -> ncmpc-0.32.tar.xz/po/gl.po Changed
1931
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-03-25 19:34+0000\n"
8
 "Last-Translator: Miguel Anxo Bouzada <mbouzada@gmail.com>\n"
9
 "Language-Team: galician\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
12
 "X-Generator: Launchpad (build 13265)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Orde descoñecida"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Todas as pistas"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Aviso: Campo de cor descoñecido - %s\n"
27
+msgid "Albums"
28
+msgstr "Álbum"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "A terminal non admite o cambio das cores"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Álbumes do artista: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "A terminal non ten funcionalidades de cor"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Engadindo «%s» á lista de reprodución"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Todos os artistas"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "A tecla %s asignouse a %s e a %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Pantalla de configuración dos atallos"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Saír"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Mover o cursor cara enriba"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Mover o cursor cara embaixo"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Mover o cursor até ao comezo da pantalla"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Mover o cursor até á metade da pantalla"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Mover o cursor até ao pe da pantalla"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Mover o cursor até ao comezo da lista"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Mover o cursor até ao pe da lista"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Páxina enriba"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Páxina embaixo"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Selección do rango"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Baixar unha liña"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Subir unha liña"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Subir media pantalla"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Baixar media pantalla"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Seleccionar a cannción actual canción en reprodución"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Pantalla de axuda"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Pantalla de atallos"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Pantalla do explorador"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Reproducir/Entrar nun cartafol"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pausa"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Deter"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Cortar"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Seguinte pista"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Pista anterior"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Avanzar"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Retroceder"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Aumentar volume"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Diminuir volume"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Seleccionar/deseleccionar a canción na lista de reprodución"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Seleccionar todos os elementos da lista"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Borrar a canción da lista de reproducción"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Activar/desactivar o modo repetición"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Activar/desactivar o modo aleatorio"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Alternar o modo compacto"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Alternar o modo completo"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Activar/desactivar o modo de esvaecimento cruzado"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Comezar unha actualización da BD"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Engadir url/ficheiro á lista de reprodución"
286
+msgid "Append song to queue"
287
+msgstr "Engadir a canción á lista de reprodución"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Ir ao cartafol raíz"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Ir ao cartafol pai"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Atopar a canción no explorador"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Movera o elemento cara arriba."
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Mover o elemento cara abaixo"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Actualizar a pantalla"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Alternar o modo de busca"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Alternar o modo de autocentrado"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Seguinte pantalla"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Pantalla anterior"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Volvar á pantalla anterior"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Buscar cara adiante"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Buscar cara adiante, seguinte"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Buscar cara atrás"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Buscar cara atrás, anterior"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Ir a"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Pantalla de Artistas"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Pantalla de busca"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Cambiar o modo de buscas"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Ver a canción seleccionada e a que se está a reproducir"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Pantalla das letras de cancións"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Interromper a acción"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Actualizar as letras de cancións"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Pantalla de saída"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Seguinte pantalla"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Sen definir"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Espazo"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Entrar"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Retroceso"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Borrar"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Arriba"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Abaixo"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Esquerda"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Direita"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Inicio"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "Fin"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PáxEmbaixo"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PáxEnriba"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tabulador"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Maiús + Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Inserir"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "A tecla %s asignouse a %s e a %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Erro"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Definición incorrecta da tecla de acceso rápido."
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Orde descoñecida"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Configuraión incompleta da tecla de acceso rápido"
545
 
546
@@ -442,818 +377,884 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Configuración incorrecta da duración mostrada"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Falta o signo «=»"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Nome de cor incorrecto"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Definición incompleta da cor"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Número incorrecto"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Definición incorrecta da cor"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Nome de pantalla descoñecido"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "O modo de busca é incorrecto"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Modo de busca descoñecido"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Parámetro de configuración descoñecido"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "s"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "A terminal non admite o cambio das cores"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Non é possíbel borrar este elemento"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "A selección de rango está desactivada"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Borrar a lista de reprodución"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "A selección de rango está sactivada"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Interrompido"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Conectandose con %s... [Prema %s para interromper]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Lista de reprodución borrada"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Explorar"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Erro: a versión %d.%d.%d do MPD é moi antiga (precisase a %s)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Cargando a lista de reprodución %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "prema %s para ir ao editor de atallos"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Movemento"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"ashtophet\n"
675
-"\n"
676
-"Launchpad Contributions:\n"
677
-"  Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive\n"
678
-"  Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n"
679
-"  Miguel Anxo Bouzada https://launchpad.net/~mbouzada"
680
+#: src/HelpPage.cxx:105
681
+msgid "Global"
682
+msgstr "Global"
683
 
684
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
685
-msgid "Shuffled queue"
686
-msgstr ""
687
+#: src/HelpPage.cxx:142
688
+msgid "Play"
689
+msgstr "Reproducir"
690
 
691
-#: src/player_command.cxx:184
692
-msgid "Cleared queue"
693
-msgstr ""
694
+#: src/HelpPage.cxx:149
695
+msgid "Center"
696
+msgstr "Centrar"
697
 
698
-#. query the user for a filename
699
-#: src/save_playlist.cxx:109
700
-msgid "Save queue as"
701
-msgstr ""
702
+#: src/HelpPage.cxx:157
703
+msgid "Enter directory/Select and play song"
704
+msgstr "Entre no cartafol/Seleccione e reproduza a canción"
705
 
706
-#: src/save_playlist.cxx:140
707
-#, fuzzy, c-format
708
-msgid "Replace %s?"
709
-msgstr "Substituir %s [%s/%s] ? "
710
+#: src/HelpPage.cxx:161
711
+msgid "Delete playlist"
712
+msgstr "Borrar a lista de reprodución"
713
 
714
-#. translators: a dialog was aborted by the user
715
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
716
-#: src/screen_lyrics.cxx:370
717
-msgid "Aborted"
718
-msgstr "Interrompido"
719
+#: src/HelpPage.cxx:171
720
+#, fuzzy
721
+msgid "New search"
722
+msgstr "Buscar"
723
 
724
-#. success
725
-#: src/save_playlist.cxx:171
726
-#, c-format
727
-msgid "Saved %s"
728
-msgstr "Gardouse %s"
729
+#: src/HelpPage.cxx:172
730
+msgid "Select and play"
731
+msgstr "Seleccionar e reproducir"
732
 
733
-#: src/screen.cxx:154
734
-msgid "Repeat mode is on"
735
-msgstr "Activado o modo de repetición"
736
+#: src/HelpPage.cxx:183
737
+msgid "View Lyrics"
738
+msgstr "Ver as letras de cancións"
739
 
740
-#: src/screen.cxx:155
741
-msgid "Repeat mode is off"
742
-msgstr "Modo repetición desactivado"
743
+#: src/HelpPage.cxx:184
744
+msgid "(Re)load lyrics"
745
+msgstr "(Re)cargar as letras de cancións"
746
 
747
-#: src/screen.cxx:159
748
-msgid "Random mode is on"
749
-msgstr "Modo aleatório activado"
750
+#. to translators: this hotkey aborts the retrieval of lyrics
751
+#. from the server
752
+#: src/HelpPage.cxx:187
753
+msgid "Interrupt retrieval"
754
+msgstr "Interromper a descarga"
755
 
756
-#: src/screen.cxx:160
757
-msgid "Random mode is off"
758
-msgstr "Modo aleatório desactivado"
759
+#: src/HelpPage.cxx:188
760
+msgid "Download lyrics for currently playing song"
761
+msgstr "Obter as letras da canción reproducida"
762
 
763
-#. "single" mode means
764
-#. that MPD will
765
-#. automatically stop
766
-#. after playing one
767
-#. single song
768
-#: src/screen.cxx:169
769
-msgid "Single mode is on"
770
-msgstr "Modo compacto activado"
771
+#: src/HelpPage.cxx:189
772
+#, fuzzy
773
+msgid "Add or edit lyrics"
774
+msgstr "Letras de cancións sen gardar"
775
 
776
-#: src/screen.cxx:170
777
-msgid "Single mode is off"
778
-msgstr "Modo compacto desactivado"
779
+#: src/HelpPage.cxx:190
780
+msgid "Save lyrics"
781
+msgstr "Guardar as letras de cancións"
782
 
783
-#. "consume" mode means
784
-#. that MPD removes each
785
-#. song which has
786
-#. finished playing
787
-#: src/screen.cxx:178
788
-msgid "Consume mode is on"
789
-msgstr "Modo completo activado"
790
+#: src/HelpPage.cxx:191
791
+msgid "Delete saved lyrics"
792
+msgstr "Eliminar as letras de cancións gardadas"
793
 
794
-#: src/screen.cxx:179
795
-msgid "Consume mode is off"
796
-msgstr "Modo completo desactivado"
797
+#: src/HelpPage.cxx:198
798
+msgid "Enable/disable output"
799
+msgstr "Activar/Desactivar a saída"
800
 
801
-#: src/screen.cxx:182
802
-#, c-format
803
-msgid "Crossfade %d seconds"
804
-msgstr "Esvaecemento cruzado %d segundos"
805
+#: src/HelpPage.cxx:205
806
+msgid "Write a message"
807
+msgstr ""
808
 
809
-#: src/screen.cxx:194
810
-msgid "Database updated"
811
-msgstr "Base de dados actualizada"
812
+#: src/HelpPage.cxx:210
813
+msgid "Keydef screen"
814
+msgstr "Pantalla de atallos"
815
 
816
-#: src/screen.cxx:226
817
-msgid "Find mode: Wrapped"
818
-msgstr "Modo de busca: Limitada"
819
+#: src/HelpPage.cxx:212
820
+msgid "Edit keydefs for selected command"
821
+msgstr "Editar atallos para a orde seleccionada"
822
 
823
-#: src/screen.cxx:227
824
-msgid "Find mode: Normal"
825
-msgstr "Modo de busca: Normal"
826
+#: src/HelpPage.cxx:213
827
+msgid "Remove selected keydef"
828
+msgstr "Eliminar o atallo seleccionado"
829
 
830
-#: src/screen.cxx:232
831
-msgid "Auto center mode: On"
832
-msgstr "Modo de autocentrado: activado"
833
+#: src/HelpPage.cxx:214
834
+#, fuzzy
835
+msgid "Add a keydef"
836
+msgstr "Engadir un novo atallo"
837
 
838
-#: src/screen.cxx:233
839
-msgid "Auto center mode: Off"
840
-msgstr "Modo de autocentrado: desactivado"
841
+#: src/HelpPage.cxx:215
842
+msgid "Go up a level"
843
+msgstr "Subir un nivel"
844
 
845
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
846
-msgid "All tracks"
847
-msgstr "Todas as pistas"
848
+#: src/HelpPage.cxx:216
849
+msgid "Apply and save changes"
850
+msgstr "Aplicar e gardar os cambios"
851
 
852
-#: src/screen_artist.cxx:384
853
-msgid "All artists"
854
-msgstr "Todos os artistas"
855
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
856
+msgid "Help"
857
+msgstr "Axuda"
858
 
859
-#: src/screen_artist.cxx:389
860
-#, c-format
861
-msgid "Albums of artist: %s"
862
-msgstr "Álbumes do artista: %s"
863
+#: src/i18n.h:43
864
+msgid "y"
865
+msgstr "s"
866
 
867
-#: src/screen_artist.cxx:398
868
-#, c-format
869
-msgid "All tracks of artist: %s"
870
-msgstr "Todas as pistas do artista: %s"
871
+#: src/i18n.h:44
872
+msgid "n"
873
+msgstr "n"
874
 
875
-#: src/screen_artist.cxx:401
876
-#, c-format
877
-msgid "Album: %s - %s"
878
-msgstr "Álbum: %s - %s"
879
+#: src/KeyName.cxx:31
880
+msgid "Undefined"
881
+msgstr "Sen definir"
882
 
883
-#: src/screen_artist.cxx:405
884
-#, c-format
885
-msgid "Tracks of no album of artist: %s"
886
-msgstr "Pistas de ningún álbum do artista: %s"
887
+#: src/KeyName.cxx:33
888
+msgid "Space"
889
+msgstr "Espazo"
890
 
891
-#: src/screen_artist.cxx:450
892
-#, c-format
893
-msgid "Adding album %s..."
894
-msgstr "Engadindo álbum %s..."
895
+#: src/KeyName.cxx:35
896
+msgid "Enter"
897
+msgstr "Entrar"
898
+
899
+#: src/KeyName.cxx:37
900
+msgid "Backspace"
901
+msgstr "Retroceso"
902
+
903
+#: src/KeyName.cxx:39
904
+msgid "Delete"
905
+msgstr "Borrar"
906
+
907
+#: src/KeyName.cxx:41
908
+msgid "Up"
909
+msgstr "Arriba"
910
+
911
+#: src/KeyName.cxx:43
912
+msgid "Down"
913
+msgstr "Abaixo"
914
+
915
+#: src/KeyName.cxx:45
916
+msgid "Left"
917
+msgstr "Esquerda"
918
+
919
+#: src/KeyName.cxx:47
920
+msgid "Right"
921
+msgstr "Direita"
922
+
923
+#: src/KeyName.cxx:49
924
+msgid "Home"
925
+msgstr "Inicio"
926
+
927
+#: src/KeyName.cxx:51
928
+msgid "End"
929
+msgstr "Fin"
930
+
931
+#: src/KeyName.cxx:53
932
+msgid "PageDown"
933
+msgstr "PáxEmbaixo"
934
+
935
+#: src/KeyName.cxx:55
936
+msgid "PageUp"
937
+msgstr "PáxEnriba"
938
+
939
+#: src/KeyName.cxx:57
940
+msgid "Tab"
941
+msgstr "Tabulador"
942
 
943
-#: src/screen_artist.cxx:452
944
+#: src/KeyName.cxx:59
945
+msgid "Shift+Tab"
946
+msgstr "Maiús + Tab"
947
+
948
+#: src/KeyName.cxx:61
949
+msgid "Esc"
950
+msgstr "Esc"
951
+
952
+#: src/KeyName.cxx:63
953
+msgid "Insert"
954
+msgstr "Inserir"
955
+
956
+#: src/KeyName.cxx:71
957
 #, c-format
958
-msgid "Adding %s..."
959
-msgstr "Engadindo %s..."
960
+msgid "Ctrl-%c"
961
+msgstr ""
962
 
963
-#: src/screen_browser.cxx:122
964
+#: src/KeyName.cxx:73
965
 #, c-format
966
-msgid "Loading playlist %s..."
967
-msgstr "Cargando a lista de reprodución %s..."
968
+msgid "Alt-%c"
969
+msgstr ""
970
 
971
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
972
-#: src/screen_browser.cxx:279
973
-#, fuzzy, c-format
974
-msgid "Adding '%s' to queue"
975
-msgstr "Engadindo «%s» á lista de reprodución"
976
+#: src/ListWindow.cxx:491
977
+msgid "Range selection disabled"
978
+msgstr "A selección de rango está desactivada"
979
+
980
+#: src/ListWindow.cxx:496
981
+msgid "Range selection enabled"
982
+msgstr "A selección de rango está sactivada"
983
 
984
-#: src/screen_chat.cxx:59
985
+#. translators: no lyrics were found for the song
986
+#: src/LyricsPage.cxx:236
987
+msgid "No lyrics"
988
+msgstr "Sen letras de cancións"
989
+
990
+#: src/LyricsPage.cxx:254
991
 #, c-format
992
-msgid ""
993
-"connected to MPD %u.%u.%u (you need at least \n"
994
-"version 0.17.0 to use the chat feature)"
995
+msgid "Lyrics timeout occurred after %d seconds"
996
 msgstr ""
997
 
998
-#: src/screen_chat.cxx:177
999
-msgid "Your message"
1000
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1001
+#: src/LyricsPage.cxx:490
1002
+msgid "Lyrics"
1003
+msgstr "Letras de cancións"
1004
+
1005
+#. translators: this message is displayed
1006
+#. while data is retrieved
1007
+#: src/LyricsPage.cxx:340
1008
+msgid "loading..."
1009
+msgstr "cargando..."
1010
+
1011
+#: src/LyricsPage.cxx:361
1012
+msgid "Editor not configured"
1013
 msgstr ""
1014
 
1015
-#: src/screen_chat.cxx:186
1016
-msgid "Message could not be sent"
1017
+#: src/LyricsPage.cxx:368
1018
+msgid "Do you really want to start an editor and edit these lyrics?"
1019
 msgstr ""
1020
 
1021
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1022
-msgid "Chat"
1023
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1024
+msgid "Can't start editor"
1025
 msgstr ""
1026
 
1027
-#: src/screen_client.cxx:41
1028
-msgid "Database update running..."
1029
-msgstr "A base de datos estase actualizando..."
1030
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1031
+msgid "Editor exited unexpectedly"
1032
+msgstr ""
1033
 
1034
-#: src/screen_client.cxx:49
1035
-#, c-format
1036
-msgid "Database update of %s started"
1037
-msgstr "Comezou a actualización da base de datos de %s"
1038
+#. lyrics for the song were saved on hard disk
1039
+#: src/LyricsPage.cxx:439
1040
+msgid "Lyrics saved"
1041
+msgstr "Letras de cancións gardadas"
1042
 
1043
-#: src/screen_client.cxx:52
1044
-msgid "Database update started"
1045
-msgstr "Comezou a actualización da base de datos"
1046
+#: src/LyricsPage.cxx:445
1047
+msgid "Lyrics deleted"
1048
+msgstr "Letras de cancións eliminadas"
1049
 
1050
-#. translators: the "delete" command is only possible
1051
-#. for playlists; the user attempted to delete a song
1052
-#. or a directory or something else
1053
-#: src/screen_file.cxx:200
1054
-msgid "Deleting this item is not possible"
1055
-msgstr "Non é possíbel borrar este elemento"
1056
+#: src/LyricsPage.cxx:446
1057
+msgid "No saved lyrics"
1058
+msgstr "Letras de cancións sen gardar"
1059
 
1060
-#: src/screen_file.cxx:207
1061
+#: src/Main.cxx:167
1062
 #, fuzzy, c-format
1063
-msgid "Delete playlist %s?"
1064
-msgstr "Borrar a lista de reprodución"
1065
+msgid "Connecting to %s"
1066
+msgstr "Conectado a %s"
1067
 
1068
-#. translators: MPD deleted the playlist, as requested by the
1069
-#. user
1070
-#: src/screen_file.cxx:227
1071
-msgid "Playlist deleted"
1072
-msgstr "Lista de reprodución borrada"
1073
-
1074
-#. translators: caption of the browser screen
1075
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1076
-msgid "Browse"
1077
-msgstr "Explorar"
1078
-
1079
-#: src/screen_find.cxx:29
1080
-msgid "Find"
1081
-msgstr "Buscar"
1082
+#: src/Main.cxx:187
1083
+#, fuzzy, c-format
1084
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1085
+msgstr "Erro: a versión %d.%d.%d do MPD é moi antiga (precisase a %s)"
1086
 
1087
-#: src/screen_find.cxx:30
1088
-msgid "Find backward"
1089
-msgstr "Buscar cara atrás"
1090
+#. To translators: these credits are shown
1091
+#. when ncmpc is started with "--version"
1092
+#: src/options.cxx:213 src/options.cxx:216
1093
+msgid "translator-credits"
1094
+msgstr ""
1095
+"ashtophet\n"
1096
+"\n"
1097
+"Launchpad Contributions:\n"
1098
+"  Johám-Luís Miguéns Vila https://launchpad.net/~galiza-ceive\n"
1099
+"  Johám-Luís Miguéns Vila https://launchpad.net/~miluxovi\n"
1100
+"  Miguel Anxo Bouzada https://launchpad.net/~mbouzada"
1101
 
1102
-#: src/screen_find.cxx:31
1103
-msgid "Jump"
1104
-msgstr "Ir a"
1105
+#: src/OutputsPage.cxx:87
1106
+#, c-format
1107
+msgid "Output '%s' enabled"
1108
+msgstr "Activouse a saída «%s»"
1109
 
1110
-#: src/screen_find.cxx:82
1111
+#: src/OutputsPage.cxx:98
1112
 #, c-format
1113
-msgid "Unable to find '%s'"
1114
-msgstr "Non se puido atopar «%s»"
1115
+msgid "Output '%s' disabled"
1116
+msgstr "Desactivouse a saída «%s»"
1117
 
1118
-#: src/screen_help.cxx:39
1119
-msgid "Movement"
1120
-msgstr "Movemento"
1121
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1122
+msgid "Outputs"
1123
+msgstr "Saídas"
1124
 
1125
-#: src/screen_help.cxx:84
1126
-msgid "Global"
1127
-msgstr "Global"
1128
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1129
+msgid "Shuffled queue"
1130
+msgstr ""
1131
 
1132
-#: src/screen_help.cxx:121
1133
-msgid "Play"
1134
-msgstr "Reproducir"
1135
+#: src/player_command.cxx:186
1136
+msgid "Cleared queue"
1137
+msgstr ""
1138
 
1139
-#: src/screen_help.cxx:124
1140
-msgid "Move song up"
1141
-msgstr "Mover a canción cara enrriba"
1142
+#. get path
1143
+#: src/QueuePage.cxx:307
1144
+msgid "Add"
1145
+msgstr "Engadir"
1146
 
1147
-#: src/screen_help.cxx:125
1148
-msgid "Move song down"
1149
-msgstr "Mover a canción cara embaixo"
1150
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1151
+msgid "Queue"
1152
+msgstr ""
1153
 
1154
-#: src/screen_help.cxx:128
1155
-msgid "Center"
1156
-msgstr "Centrar"
1157
+#: src/QueuePage.cxx:380
1158
+#, c-format
1159
+msgid "Queue on %s"
1160
+msgstr ""
1161
 
1162
-#: src/screen_help.cxx:136
1163
-msgid "Enter directory/Select and play song"
1164
-msgstr "Entre no cartafol/Seleccione e reproduza a canción"
1165
+#. query the user for a filename
1166
+#: src/save_playlist.cxx:85
1167
+msgid "Save queue as"
1168
+msgstr ""
1169
 
1170
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1171
-#, fuzzy
1172
-msgid "Append song to queue"
1173
-msgstr "Engadir a canción á lista de reprodución"
1174
+#: src/save_playlist.cxx:107
1175
+#, fuzzy, c-format
1176
+msgid "Replace %s?"
1177
+msgstr "Substituir %s [%s/%s] ? "
1178
 
1179
-#: src/screen_help.cxx:140
1180
-msgid "Delete playlist"
1181
-msgstr "Borrar a lista de reprodución"
1182
+#. success
1183
+#: src/save_playlist.cxx:128
1184
+#, c-format
1185
+msgid "Saved %s"
1186
+msgstr "Gardouse %s"
1187
 
1188
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1189
-msgid "Search"
1190
-msgstr "Buscar"
1191
+#: src/screen_artist.cxx:186
1192
+#, c-format
1193
+msgid "All tracks of artist: %s"
1194
+msgstr "Todas as pistas do artista: %s"
1195
 
1196
-#: src/screen_help.cxx:151
1197
-msgid "Select and play"
1198
-msgstr "Seleccionar e reproducir"
1199
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1200
+msgid "Album"
1201
+msgstr "Álbum"
1202
 
1203
-#: src/screen_help.cxx:162
1204
-msgid "View Lyrics"
1205
-msgstr "Ver as letras de cancións"
1206
+#: src/screen_artist.cxx:195
1207
+#, c-format
1208
+msgid "Tracks of no album of artist: %s"
1209
+msgstr "Pistas de ningún álbum do artista: %s"
1210
 
1211
-#: src/screen_help.cxx:163
1212
-msgid "(Re)load lyrics"
1213
-msgstr "(Re)cargar as letras de cancións"
1214
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1215
+msgid "Artist"
1216
+msgstr "Artista"
1217
 
1218
-#. to translators: this hotkey aborts the retrieval of lyrics
1219
-#. from the server
1220
-#: src/screen_help.cxx:166
1221
-msgid "Interrupt retrieval"
1222
-msgstr "Interromper a descarga"
1223
+#: src/screen_client.cxx:41
1224
+#, fuzzy
1225
+msgid "Database update running"
1226
+msgstr "A base de datos estase actualizando..."
1227
 
1228
-#: src/screen_help.cxx:167
1229
-msgid "Download lyrics for currently playing song"
1230
-msgstr "Obter as letras da canción reproducida"
1231
+#: src/screen_client.cxx:48
1232
+#, c-format
1233
+msgid "Database update of %s started"
1234
+msgstr "Comezou a actualización da base de datos de %s"
1235
 
1236
-#: src/screen_help.cxx:168
1237
-#, fuzzy
1238
-msgid "Add or edit lyrics"
1239
-msgstr "Letras de cancións sen gardar"
1240
+#: src/screen_client.cxx:51
1241
+msgid "Database update started"
1242
+msgstr "Comezou a actualización da base de datos"
1243
 
1244
-#: src/screen_help.cxx:169
1245
-msgid "Save lyrics"
1246
-msgstr "Guardar as letras de cancións"
1247
+#: src/screen.cxx:160
1248
+msgid "Repeat mode is on"
1249
+msgstr "Activado o modo de repetición"
1250
 
1251
-#: src/screen_help.cxx:170
1252
-msgid "Delete saved lyrics"
1253
-msgstr "Eliminar as letras de cancións gardadas"
1254
+#: src/screen.cxx:161
1255
+msgid "Repeat mode is off"
1256
+msgstr "Modo repetición desactivado"
1257
 
1258
-#: src/screen_help.cxx:177
1259
-msgid "Enable/disable output"
1260
-msgstr "Activar/Desactivar a saída"
1261
+#: src/screen.cxx:165
1262
+msgid "Random mode is on"
1263
+msgstr "Modo aleatório activado"
1264
 
1265
-#: src/screen_help.cxx:184
1266
-msgid "Write a message"
1267
-msgstr ""
1268
+#: src/screen.cxx:166
1269
+msgid "Random mode is off"
1270
+msgstr "Modo aleatório desactivado"
1271
 
1272
-#: src/screen_help.cxx:189
1273
-msgid "Keydef screen"
1274
-msgstr "Pantalla de atallos"
1275
+#. "single" mode means
1276
+#. that MPD will
1277
+#. automatically stop
1278
+#. after playing one
1279
+#. single song
1280
+#: src/screen.cxx:175
1281
+msgid "Single mode is on"
1282
+msgstr "Modo compacto activado"
1283
 
1284
-#: src/screen_help.cxx:191
1285
-msgid "Edit keydefs for selected command"
1286
-msgstr "Editar atallos para a orde seleccionada"
1287
+#: src/screen.cxx:176
1288
+msgid "Single mode is off"
1289
+msgstr "Modo compacto desactivado"
1290
 
1291
-#: src/screen_help.cxx:192
1292
-msgid "Remove selected keydef"
1293
-msgstr "Eliminar o atallo seleccionado"
1294
+#. "consume" mode means
1295
+#. that MPD removes each
1296
+#. song which has
1297
+#. finished playing
1298
+#: src/screen.cxx:184
1299
+msgid "Consume mode is on"
1300
+msgstr "Modo completo activado"
1301
 
1302
-#: src/screen_help.cxx:193
1303
-#, fuzzy
1304
-msgid "Add a keydef"
1305
-msgstr "Engadir un novo atallo"
1306
+#: src/screen.cxx:185
1307
+msgid "Consume mode is off"
1308
+msgstr "Modo completo desactivado"
1309
 
1310
-#: src/screen_help.cxx:194
1311
-msgid "Go up a level"
1312
-msgstr "Subir un nivel"
1313
+#: src/screen.cxx:188
1314
+#, c-format
1315
+msgid "Crossfade %d seconds"
1316
+msgstr "Esvaecemento cruzado %d segundos"
1317
 
1318
-#: src/screen_help.cxx:195
1319
-msgid "Apply and save changes"
1320
-msgstr "Aplicar e gardar os cambios"
1321
+#: src/screen.cxx:200
1322
+msgid "Database updated"
1323
+msgstr "Base de dados actualizada"
1324
 
1325
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1326
-msgid "Help"
1327
-msgstr "Axuda"
1328
+#: src/screen.cxx:250
1329
+msgid "Find mode: Wrapped"
1330
+msgstr "Modo de busca: Limitada"
1331
 
1332
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1333
-msgid "Error: Screen too small"
1334
-msgstr "Erro: A pantalla é moi pequena"
1335
+#: src/screen.cxx:251
1336
+msgid "Find mode: Normal"
1337
+msgstr "Modo de busca: Normal"
1338
 
1339
-#: src/screen_keydef.cxx:141
1340
-msgid "You have new key bindings"
1341
-msgstr "Ten novos atallos de teclado"
1342
+#: src/screen.cxx:256
1343
+msgid "Auto center mode: On"
1344
+msgstr "Modo de autocentrado: activado"
1345
 
1346
-#: src/screen_keydef.cxx:143
1347
-msgid "Keybindings unchanged."
1348
-msgstr "Non se cambiaron os atallos de teclado"
1349
+#: src/screen.cxx:257
1350
+msgid "Auto center mode: Off"
1351
+msgstr "Modo de autocentrado: desactivado"
1352
 
1353
-#: src/screen_keydef.cxx:153
1354
-#, c-format
1355
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1356
-msgstr "Erro: Non se puido crear o cartafol ~/.ncmpc - %s"
1357
+#: src/screen_find.cxx:31
1358
+msgid "Find"
1359
+msgstr "Buscar"
1360
 
1361
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1362
-#, c-format
1363
-msgid "Error: %s - %s"
1364
-msgstr "Erro: %s - %s"
1365
+#: src/screen_find.cxx:32
1366
+msgid "Find backward"
1367
+msgstr "Buscar cara atrás"
1368
 
1369
-#: src/screen_keydef.cxx:171
1370
+#: src/screen_find.cxx:33
1371
+msgid "Jump"
1372
+msgstr "Ir a"
1373
+
1374
+#: src/screen_find.cxx:79
1375
 #, c-format
1376
-msgid "Wrote %s"
1377
-msgstr "Escribiuse %s"
1378
+msgid "Unable to find '%s'"
1379
+msgstr "Non se puido atopar «%s»"
1380
 
1381
-#: src/screen_keydef.cxx:250
1382
+#: src/screen_keydef.cxx:161
1383
 msgid "Deleted"
1384
 msgstr "Borrada"
1385
 
1386
-#: src/screen_keydef.cxx:265
1387
+#: src/screen_keydef.cxx:177
1388
 #, c-format
1389
 msgid "Enter new key for %s: "
1390
 msgstr "Introduza un novo atallo para %s: "
1391
 
1392
-#: src/screen_keydef.cxx:276
1393
+#: src/screen_keydef.cxx:187
1394
 msgid "Ctrl-Space can't be used"
1395
 msgstr ""
1396
 
1397
-#: src/screen_keydef.cxx:282
1398
+#: src/screen_keydef.cxx:193
1399
 #, c-format
1400
 msgid "Error: key %s is already used for %s"
1401
 msgstr "Erro: a tecla %s xá está sendo utilizada por %s"
1402
 
1403
-#: src/screen_keydef.cxx:291
1404
+#: src/screen_keydef.cxx:202
1405
 #, c-format
1406
 msgid "Assigned %s to %s"
1407
 msgstr "Asignouse %s a %s"
1408
 
1409
-#: src/screen_keydef.cxx:317
1410
-msgid "===> Apply key bindings "
1411
-msgstr "===> Aplicar os atallos de teclado "
1412
-
1413
-#: src/screen_keydef.cxx:319
1414
-msgid "===> Apply & Save key bindings  "
1415
-msgstr "===> Aplicar e guardar os atallos de teclado  "
1416
-
1417
-#: src/screen_keydef.cxx:347
1418
+#: src/screen_keydef.cxx:229
1419
 msgid "Add new key"
1420
 msgstr "Engadir un novo atallo"
1421
 
1422
-#: src/screen_keydef.cxx:410
1423
-msgid "Note: Did you forget to 'Apply' your changes?"
1424
-msgstr "Nota: Esquecuse de «Aplicar» os cambios?"
1425
-
1426
-#: src/screen_keydef.cxx:417
1427
-msgid "Edit key bindings"
1428
-msgstr "Editar os atallos de teclado"
1429
-
1430
-#: src/screen_keydef.cxx:419
1431
+#: src/screen_keydef.cxx:251
1432
 #, c-format
1433
 msgid "Edit keys for %s"
1434
 msgstr "Editar atallos para %s"
1435
 
1436
-#. translators: no lyrics were found for the song
1437
-#: src/screen_lyrics.cxx:208
1438
-msgid "No lyrics"
1439
-msgstr "Sen letras de cancións"
1440
-
1441
-#: src/screen_lyrics.cxx:226
1442
-#, c-format
1443
-msgid "Lyrics timeout occurred after %d seconds"
1444
-msgstr ""
1445
-
1446
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1447
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1448
-msgid "Lyrics"
1449
-msgstr "Letras de cancións"
1450
-
1451
-#. translators: this message is displayed
1452
-#. while data is retrieved
1453
-#: src/screen_lyrics.cxx:330
1454
-msgid "loading..."
1455
-msgstr "cargando..."
1456
-
1457
-#: src/screen_lyrics.cxx:361
1458
-msgid "Editor not configured"
1459
-msgstr ""
1460
-
1461
-#: src/screen_lyrics.cxx:367
1462
-msgid "Do you really want to start an editor and edit these lyrics?"
1463
-msgstr ""
1464
+#: src/screen_keydef.cxx:393
1465
+msgid "You have new key bindings"
1466
+msgstr "Ten novos atallos de teclado"
1467
 
1468
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1469
-msgid "Can't start editor"
1470
-msgstr ""
1471
+#: src/screen_keydef.cxx:395
1472
+msgid "Keybindings unchanged."
1473
+msgstr "Non se cambiaron os atallos de teclado"
1474
 
1475
-#: src/screen_lyrics.cxx:411
1476
-#, c-format
1477
-msgid "Editor exited unexpectedly (%d)"
1478
-msgstr ""
1479
+#: src/screen_keydef.cxx:405
1480
+#, fuzzy
1481
+msgid "Unable to write configuration"
1482
+msgstr "Configuraión incompleta da tecla de acceso rápido"
1483
 
1484
-#: src/screen_lyrics.cxx:414
1485
+#: src/screen_keydef.cxx:421
1486
 #, c-format
1487
-msgid "Editor exited unexpectedly (signal %d)"
1488
-msgstr ""
1489
-
1490
-#. lyrics for the song were saved on hard disk
1491
-#: src/screen_lyrics.cxx:436
1492
-msgid "Lyrics saved"
1493
-msgstr "Letras de cancións gardadas"
1494
-
1495
-#: src/screen_lyrics.cxx:443
1496
-msgid "Lyrics deleted"
1497
-msgstr "Letras de cancións eliminadas"
1498
-
1499
-#: src/screen_lyrics.cxx:446
1500
-msgid "No saved lyrics"
1501
-msgstr "Letras de cancións sen gardar"
1502
+msgid "Wrote %s"
1503
+msgstr "Escribiuse %s"
1504
 
1505
-#: src/screen_outputs.cxx:60
1506
-#, c-format
1507
-msgid "Output '%s' enabled"
1508
-msgstr "Activouse a saída «%s»"
1509
+#: src/screen_keydef.cxx:433
1510
+msgid "===> Apply key bindings "
1511
+msgstr "===> Aplicar os atallos de teclado "
1512
 
1513
-#: src/screen_outputs.cxx:71
1514
-#, c-format
1515
-msgid "Output '%s' disabled"
1516
-msgstr "Desactivouse a saída «%s»"
1517
+#: src/screen_keydef.cxx:435
1518
+msgid "===> Apply & Save key bindings  "
1519
+msgstr "===> Aplicar e guardar os atallos de teclado  "
1520
 
1521
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1522
-msgid "Outputs"
1523
-msgstr "Saídas"
1524
+#: src/screen_keydef.cxx:472
1525
+msgid "Edit key bindings"
1526
+msgstr "Editar os atallos de teclado"
1527
 
1528
-#. get path
1529
-#: src/screen_queue.cxx:274
1530
-msgid "Add"
1531
-msgstr "Engadir"
1532
+#: src/screen_keydef.cxx:554
1533
+msgid "Note: Did you forget to 'Apply' your changes?"
1534
+msgstr "Nota: Esquecuse de «Aplicar» os cambios?"
1535
 
1536
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1537
-msgid "Queue"
1538
+#: src/screen_keydef.cxx:604
1539
+msgid "Keys"
1540
 msgstr ""
1541
 
1542
-#: src/screen_queue.cxx:384
1543
-#, c-format
1544
-msgid "Queue on %s"
1545
-msgstr ""
1546
+#: src/screen_utils.cxx:124
1547
+msgid "Password"
1548
+msgstr "Contrasinal"
1549
 
1550
-#: src/screen_search.cxx:48
1551
+#: src/SearchPage.cxx:51
1552
 msgid "artist"
1553
 msgstr "artista"
1554
 
1555
-#: src/screen_search.cxx:49
1556
+#: src/SearchPage.cxx:52
1557
 msgid "album"
1558
 msgstr "álbum"
1559
 
1560
-#: src/screen_search.cxx:50
1561
+#: src/SearchPage.cxx:53
1562
 msgid "title"
1563
 msgstr "título"
1564
 
1565
-#: src/screen_search.cxx:51
1566
+#: src/SearchPage.cxx:54
1567
 msgid "track"
1568
 msgstr "pista"
1569
 
1570
-#: src/screen_search.cxx:52
1571
+#: src/SearchPage.cxx:55
1572
 msgid "name"
1573
 msgstr "nome"
1574
 
1575
-#: src/screen_search.cxx:53
1576
+#: src/SearchPage.cxx:56
1577
 msgid "genre"
1578
 msgstr "xénero"
1579
 
1580
-#: src/screen_search.cxx:54
1581
+#: src/SearchPage.cxx:57
1582
 msgid "date"
1583
 msgstr "data"
1584
 
1585
-#: src/screen_search.cxx:55
1586
+#: src/SearchPage.cxx:58
1587
 msgid "composer"
1588
 msgstr "compositor"
1589
 
1590
-#: src/screen_search.cxx:56
1591
+#: src/SearchPage.cxx:59
1592
 msgid "performer"
1593
 msgstr "interprete"
1594
 
1595
-#: src/screen_search.cxx:57
1596
+#: src/SearchPage.cxx:60
1597
 msgid "comment"
1598
 msgstr "comentário"
1599
 
1600
-#: src/screen_search.cxx:65
1601
+#: src/SearchPage.cxx:68
1602
 msgid "file"
1603
 msgstr "ficheiro"
1604
 
1605
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1606
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1607
 msgid "Title"
1608
 msgstr "Título"
1609
 
1610
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1611
-msgid "Artist"
1612
-msgstr "Artista"
1613
-
1614
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1615
-msgid "Album"
1616
-msgstr "Álbum"
1617
-
1618
-#: src/screen_search.cxx:85
1619
+#: src/SearchPage.cxx:88
1620
 msgid "Filename"
1621
 msgstr "Nome do ficheiro"
1622
 
1623
-#: src/screen_search.cxx:86
1624
+#: src/SearchPage.cxx:89
1625
 msgid "Artist + Title"
1626
 msgstr "Artista + Título"
1627
 
1628
-#: src/screen_search.cxx:244
1629
-#, c-format
1630
-msgid "No argument for search tag %s"
1631
-msgstr "Sen argumento para a busca da etiqueta %s"
1632
-
1633
-#: src/screen_search.cxx:253
1634
+#: src/SearchPage.cxx:270
1635
 #, c-format
1636
 msgid "Bad search tag %s"
1637
 msgstr "Etiqueta de busca errónea %s"
1638
 
1639
-#. if( pattern==nullptr )
1640
-#. search_new(screen, c);
1641
-#. else
1642
-#: src/screen_search.cxx:400
1643
+#: src/SearchPage.cxx:284
1644
 #, c-format
1645
-msgid "Press %s for a new search"
1646
-msgstr "Prema %s para unha nova busca"
1647
-
1648
-#: src/screen_search.cxx:427
1649
-#, c-format
1650
-msgid "Search: %s"
1651
-msgstr "Buscar: %s"
1652
-
1653
-#: src/screen_search.cxx:430
1654
-#, c-format
1655
-msgid "Search: Results for %s [%s]"
1656
-msgstr "Buscar: Resultados para %s [%s]"
1657
+msgid "No argument for search tag %s"
1658
+msgstr "Sen argumento para a busca da etiqueta %s"
1659
 
1660
-#: src/screen_search.cxx:434
1661
-#, c-format
1662
-msgid "Search: Press %s for a new search [%s]"
1663
-msgstr "Buscar: Prema %s para unha nova busca [%s]"
1664
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1665
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1666
+msgid "Search"
1667
+msgstr "Buscar"
1668
 
1669
-#: src/screen_search.cxx:458
1670
+#: src/SearchPage.cxx:436
1671
 #, c-format
1672
 msgid "Search mode: %s"
1673
 msgstr "Modo da busca: %s"
1674
 
1675
-#: src/screen_song.cxx:54
1676
+#: src/SongPage.cxx:67
1677
 msgid "Length"
1678
 msgstr "Duración"
1679
 
1680
-#: src/screen_song.cxx:55
1681
+#: src/SongPage.cxx:68
1682
 msgid "Position"
1683
 msgstr ""
1684
 
1685
-#: src/screen_song.cxx:56
1686
+#: src/SongPage.cxx:69
1687
 msgid "Composer"
1688
 msgstr "Compositor"
1689
 
1690
-#: src/screen_song.cxx:57
1691
+#: src/SongPage.cxx:70
1692
 msgid "Name"
1693
 msgstr "Nome"
1694
 
1695
-#: src/screen_song.cxx:58
1696
+#: src/SongPage.cxx:71
1697
 msgid "Disc"
1698
 msgstr "Disco"
1699
 
1700
-#: src/screen_song.cxx:59
1701
+#: src/SongPage.cxx:72
1702
 msgid "Track"
1703
 msgstr "Pista"
1704
 
1705
-#: src/screen_song.cxx:60
1706
+#: src/SongPage.cxx:73
1707
 msgid "Date"
1708
 msgstr "Data"
1709
 
1710
-#: src/screen_song.cxx:61
1711
+#: src/SongPage.cxx:74
1712
 msgid "Genre"
1713
 msgstr "Xénero"
1714
 
1715
-#: src/screen_song.cxx:62
1716
+#: src/SongPage.cxx:75
1717
 msgid "Comment"
1718
 msgstr "Comentario"
1719
 
1720
-#: src/screen_song.cxx:63
1721
+#: src/SongPage.cxx:76
1722
 msgid "Path"
1723
 msgstr "Ruta"
1724
 
1725
-#: src/screen_song.cxx:64
1726
+#: src/SongPage.cxx:77
1727
 msgid "Bitrate"
1728
 msgstr "Taxa de bits"
1729
 
1730
-#: src/screen_song.cxx:65
1731
+#: src/SongPage.cxx:78
1732
 msgid "Format"
1733
 msgstr ""
1734
 
1735
-#: src/screen_song.cxx:82
1736
+#: src/SongPage.cxx:95
1737
 msgid "Number of artists"
1738
 msgstr "Número de artistas"
1739
 
1740
-#: src/screen_song.cxx:83
1741
+#: src/SongPage.cxx:96
1742
 msgid "Number of albums"
1743
 msgstr "Número de álbumes"
1744
 
1745
-#: src/screen_song.cxx:84
1746
+#: src/SongPage.cxx:97
1747
 msgid "Number of songs"
1748
 msgstr "Número de cancións"
1749
 
1750
-#: src/screen_song.cxx:85
1751
+#: src/SongPage.cxx:98
1752
 msgid "Uptime"
1753
 msgstr "Tempo de execución"
1754
 
1755
-#: src/screen_song.cxx:86
1756
+#: src/SongPage.cxx:99
1757
 msgid "Most recent db update"
1758
 msgstr "Actualización máis recente da BD"
1759
 
1760
-#: src/screen_song.cxx:87
1761
+#: src/SongPage.cxx:100
1762
 msgid "Playtime"
1763
 msgstr "Tempo de reprodución"
1764
 
1765
-#: src/screen_song.cxx:88
1766
+#: src/SongPage.cxx:101
1767
 msgid "DB playtime"
1768
 msgstr "Duraciónacumulada da BD"
1769
 
1770
-#: src/screen_song.cxx:173
1771
+#: src/SongPage.cxx:204
1772
 msgid "Song viewer"
1773
 msgstr "Visor da canción"
1774
 
1775
-#: src/screen_song.cxx:337
1776
+#: src/SongPage.cxx:370
1777
 msgid "MPD statistics"
1778
 msgstr "Estatísticas do MPD"
1779
 
1780
-#: src/screen_song.cxx:427
1781
+#: src/SongPage.cxx:455
1782
 msgid "Selected song"
1783
 msgstr "Canción seleccionada"
1784
 
1785
-#: src/screen_song.cxx:437
1786
+#: src/SongPage.cxx:465
1787
 msgid "Currently playing song"
1788
 msgstr "Canción que se está reproducindo"
1789
 
1790
-#: src/screen_song.cxx:442
1791
+#: src/SongPage.cxx:470
1792
 #, c-format
1793
 msgid "%d kbps"
1794
 msgstr "%d kbps"
1795
 
1796
-#. NOTE: if one day a translator decides to use a multi-byte character
1797
-#. for one of the yes/no keys, we'll have to parse it properly
1798
-#: src/screen_utils.cxx:80
1799
-#, fuzzy, c-format
1800
-msgid "%s [%s/%s] "
1801
-msgstr "Substituir %s [%s/%s] ? "
1802
-
1803
-#: src/screen_utils.cxx:121
1804
-msgid "Password"
1805
-msgstr "Contrasinal"
1806
+#: src/SongPage.cxx:554
1807
+msgid "Song"
1808
+msgstr ""
1809
 
1810
-#: src/status_bar.cxx:121
1811
+#: src/StatusBar.cxx:104
1812
 msgid "Playing:"
1813
 msgstr "Reproducindo:"
1814
 
1815
-#: src/status_bar.cxx:124
1816
+#: src/StatusBar.cxx:108
1817
 msgid "[Paused]"
1818
 msgstr "[En Pausa]"
1819
 
1820
-#: src/title_bar.cxx:99
1821
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1822
+#, fuzzy
1823
+msgid "Unknown color"
1824
+msgstr "Orde descoñecida"
1825
+
1826
+#: src/Styles.cxx:333
1827
+#, fuzzy
1828
+msgid "Unknown color field"
1829
+msgstr "Aviso: Campo de cor descoñecido - %s\n"
1830
+
1831
+#: src/Styles.cxx:375
1832
+msgid "Terminal lacks color capabilities"
1833
+msgstr "A terminal non ten funcionalidades de cor"
1834
+
1835
+#: src/time_format.cxx:44
1836
+msgid "year"
1837
+msgstr ""
1838
+
1839
+#: src/time_format.cxx:46
1840
+msgid "years"
1841
+msgstr ""
1842
+
1843
+#: src/time_format.cxx:54
1844
+msgid "week"
1845
+msgstr ""
1846
+
1847
+#: src/time_format.cxx:57
1848
+msgid "weeks"
1849
+msgstr ""
1850
+
1851
+#: src/time_format.cxx:65
1852
+msgid "day"
1853
+msgstr ""
1854
+
1855
+#: src/time_format.cxx:68
1856
+msgid "days"
1857
+msgstr ""
1858
+
1859
+#: src/TitleBar.cxx:100
1860
 msgid "Volume n/a"
1861
 msgstr "Volume n/a"
1862
 
1863
-#: src/title_bar.cxx:101
1864
+#: src/TitleBar.cxx:102
1865
 #, c-format
1866
 msgid "Volume %d%%"
1867
 msgstr "Volume %d%%"
1868
 
1869
+#, fuzzy
1870
+#~ msgid "Add url/file to queue"
1871
+#~ msgstr "Engadir url/ficheiro á lista de reprodución"
1872
+
1873
+#~ msgid "Move song up"
1874
+#~ msgstr "Mover a canción cara enrriba"
1875
+
1876
+#~ msgid "Move song down"
1877
+#~ msgstr "Mover a canción cara embaixo"
1878
+
1879
+#~ msgid "Press %s for a new search"
1880
+#~ msgstr "Prema %s para unha nova busca"
1881
+
1882
+#~ msgid "Search: %s"
1883
+#~ msgstr "Buscar: %s"
1884
+
1885
+#~ msgid "Search: Results for %s [%s]"
1886
+#~ msgstr "Buscar: Resultados para %s [%s]"
1887
+
1888
+#~ msgid "Search: Press %s for a new search [%s]"
1889
+#~ msgstr "Buscar: Prema %s para unha nova busca [%s]"
1890
+
1891
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1892
+#~ msgstr "Conectandose con %s... [Prema %s para interromper]"
1893
+
1894
+#~ msgid "press %s for the key editor"
1895
+#~ msgstr "prema %s para ir ao editor de atallos"
1896
+
1897
+#~ msgid "Album: %s - %s"
1898
+#~ msgstr "Álbum: %s - %s"
1899
+
1900
+#~ msgid "Adding album %s..."
1901
+#~ msgstr "Engadindo álbum %s..."
1902
+
1903
+#~ msgid "Adding %s..."
1904
+#~ msgstr "Engadindo %s..."
1905
+
1906
+#~ msgid "Error: Screen too small"
1907
+#~ msgstr "Erro: A pantalla é moi pequena"
1908
+
1909
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1910
+#~ msgstr "Erro: Non se puido crear o cartafol ~/.ncmpc - %s"
1911
+
1912
+#~ msgid "Error: %s - %s"
1913
+#~ msgstr "Erro: %s - %s"
1914
+
1915
+#, fuzzy
1916
+#~ msgid "%s [%s/%s] "
1917
+#~ msgstr "Substituir %s [%s/%s] ? "
1918
+
1919
 #~ msgid "Delete playlist %s [%s/%s] ? "
1920
 #~ msgstr "Borrar a lista de reprodución %s [%s/%s] ? "
1921
 
1922
 #~ msgid "Warning: Unknown color - %s\n"
1923
 #~ msgstr "Aviso: Cor descoñecida - %s\n"
1924
 
1925
-#~ msgid "Connected to %s"
1926
-#~ msgstr "Conectado a %s"
1927
-
1928
 #~ msgid "Shuffled playlist"
1929
 #~ msgstr "Lista de reprodución aleatoria"
1930
 
1931
ncmpc-0.30.tar.xz/po/he.po -> ncmpc-0.32.tar.xz/po/he.po Changed
1924
 
1
@@ -2,7 +2,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-09-07 20:35+0200\n"
8
 "Last-Translator: zeltak <Unknown>\n"
9
 "Language-Team: he <he@li.org>\n"
10
@@ -13,423 +13,358 @@
11
 "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "פקודה לא ידועה"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "כל השירים"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "אזהרה: צבע לא מוכ בתחום  - %s\n"
27
+msgid "Albums"
28
+msgstr "אלבום"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "המסוף ללא תמיכה בצבעים"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "אלבום של אומן %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "המסוף ללא  יכולת תמיכה בצבעים"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "מוסיף %s לרשימת השירים"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "כל האמנים"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "מקש %s מוקצה ל %s ו %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "מסך קינפוג מקשים"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "צא מהתוכנה"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "הזז סמן למעלה"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "הזז סמן למטה"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "הזז סמן לקצה העליון של המסך"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "הזז סמן לאמצע של המסך"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "הזז סמן לקצה התחתון של המסך"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "הזז סמן לקצה העליון של הרשימה"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "הזז סמן לקצה התחתון של הרשימה"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "דף למעלה"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "דף למטה"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "בחירת טווח"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "גלול שורה אחת"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "גלול שורה אחת למעלה"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "גלול חצי מסך למעלה"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "גלול חצי מסך למטה"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "בחר בשיר שכרגע מנגן"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "מסך עזרה"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "מסך שוני מקשים"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "דפדף במסך"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "נגן/הכנס תיקיה"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "הפסק"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "עצור"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "חתוך"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "רצועה הבאה"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "רצועה קודמת"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "דלג קדימה"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "דלג אחורה"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "הגבר"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "הנמך"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "בחר/הסר שיר ברשימת שירים"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "בחר את הכל"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "מחק שיר מרשימת השירים"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "הפעל מצב חזרה"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "הפעל מצב רנדומלי"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "הפעל מצב יחיד"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "הפעל מצב מתכלה"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "הפעל קרוספייד"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "התחל עדכון בסיס הנתונים המוזיקלי"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "הוסף לינק/קובץ לרשימת שירים"
286
+msgid "Append song to queue"
287
+msgstr "הוסף שיר לרשימת שירים"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "לך לתיקיה שורש"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "לך לתיקיה עליונה"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "מצא שיר בדפדפן"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "הזז למעלה"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "הזז למטה"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "רענן מסך"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "הפעל מצב חיפוש"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "הפעל מירכוז אוטומטי"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "מסך הבא"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "מסך קודם"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "החלף למסך אחרון"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "מצא קדימה"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "מצא קדימה הבא"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "מצא אחורה"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "מצא אחורה הבא"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "קפוץ ל"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "מסך אומן"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "חפש במסך"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "שנה תצורת מסך"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "הראה את השיר הנבחר והמנגן"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "מסך מילות השיר"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "הפסק פעולה"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "רענן מילים לשיר"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "מסך הפלט"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "מסך הבא"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "לא מוגדר"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "רווח"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "הכנס"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "אחורה"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "מחק"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "למעלה"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "למטה"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "שמאלה"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "חמינה"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "בית"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "סוף"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "דף למטה"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "דף למעלה"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "טאב"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "מקש %s מוקצה ל %s ו %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "שגיאה"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "הגדרת המקשים החמים שגויה"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "פקודה לא ידועה"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "הגדרת המקשים החמים חסרה"
545
 
546
@@ -437,813 +372,881 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "תצוגת זמן שגויה"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "חסר '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "צבע שגוי"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "הגדרת צבעים חסרה"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "מספר לא תקין"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "הגדרת צבעים שגויה"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "שם מסך לא ידוע"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "חיפוש לא תקין"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "מצב חיפוש לא ידוע"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "פרמטר קונפיג לא ידוע"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "כן"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "המסוף ללא תמיכה בצבעים"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "לא"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "מחיקת פריט זה בלתי אפשרית"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "טווח בחירה מאושר"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "מחק רשימת שירים"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "טווח בחירה מבוטל"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "בוטל"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "מתחבר ל %s [לחץ על %s לביטול]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "רשימת שירים נמחקה"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "דפדף"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "שגיאה: גרסת התוכנה %d.%d.%d ישנה מדי (צריך %s)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "טוען רשימת שירים %s...."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "%s לעורך המקשים לחץ"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "תנועה"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Launchpad Contributions:\n"
675
-"  zeltak https://launchpad.net/~zeltak"
676
+#: src/HelpPage.cxx:105
677
+msgid "Global"
678
+msgstr "גלובלי"
679
 
680
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
681
-msgid "Shuffled queue"
682
-msgstr ""
683
+#: src/HelpPage.cxx:142
684
+msgid "Play"
685
+msgstr "נגן"
686
 
687
-#: src/player_command.cxx:184
688
-msgid "Cleared queue"
689
-msgstr ""
690
+#: src/HelpPage.cxx:149
691
+msgid "Center"
692
+msgstr "מרכז"
693
 
694
-#. query the user for a filename
695
-#: src/save_playlist.cxx:109
696
-msgid "Save queue as"
697
-msgstr ""
698
+#: src/HelpPage.cxx:157
699
+msgid "Enter directory/Select and play song"
700
+msgstr "הכנס תיקיה/בחר ונגן שיר"
701
 
702
-#: src/save_playlist.cxx:140
703
-#, fuzzy, c-format
704
-msgid "Replace %s?"
705
-msgstr "החלף  %s [%s/%s] ? "
706
+#: src/HelpPage.cxx:161
707
+msgid "Delete playlist"
708
+msgstr "מחק רשימת שירים"
709
 
710
-#. translators: a dialog was aborted by the user
711
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
712
-#: src/screen_lyrics.cxx:370
713
-msgid "Aborted"
714
-msgstr "בוטל"
715
+#: src/HelpPage.cxx:171
716
+#, fuzzy
717
+msgid "New search"
718
+msgstr "חיפוש"
719
 
720
-#. success
721
-#: src/save_playlist.cxx:171
722
-#, c-format
723
-msgid "Saved %s"
724
-msgstr "שמירת %s"
725
+#: src/HelpPage.cxx:172
726
+msgid "Select and play"
727
+msgstr "בחר ונגן"
728
 
729
-#: src/screen.cxx:154
730
-msgid "Repeat mode is on"
731
-msgstr "מצב חזרה מופעל"
732
+#: src/HelpPage.cxx:183
733
+msgid "View Lyrics"
734
+msgstr "הצג מילים לשיר"
735
 
736
-#: src/screen.cxx:155
737
-msgid "Repeat mode is off"
738
-msgstr "מצב חזרה מופסק"
739
+#: src/HelpPage.cxx:184
740
+msgid "(Re)load lyrics"
741
+msgstr "הטען מחדש מילים לשיר"
742
 
743
-#: src/screen.cxx:159
744
-msgid "Random mode is on"
745
-msgstr "מצב רנדומלי מופעל"
746
+#. to translators: this hotkey aborts the retrieval of lyrics
747
+#. from the server
748
+#: src/HelpPage.cxx:187
749
+msgid "Interrupt retrieval"
750
+msgstr "שליפת המידע הופסקה"
751
 
752
-#: src/screen.cxx:160
753
-msgid "Random mode is off"
754
-msgstr "מצב רנדומלי מופסק"
755
+#: src/HelpPage.cxx:188
756
+msgid "Download lyrics for currently playing song"
757
+msgstr "הורד מילים לשיר המנגן כרגע"
758
 
759
-#. "single" mode means
760
-#. that MPD will
761
-#. automatically stop
762
-#. after playing one
763
-#. single song
764
-#: src/screen.cxx:169
765
-msgid "Single mode is on"
766
-msgstr "מצב יחיד מופעל"
767
+#: src/HelpPage.cxx:189
768
+msgid "Add or edit lyrics"
769
+msgstr ""
770
 
771
-#: src/screen.cxx:170
772
-msgid "Single mode is off"
773
-msgstr "מצב יחיד מופסק"
774
+#: src/HelpPage.cxx:190
775
+msgid "Save lyrics"
776
+msgstr "שמור מילים לשיר"
777
 
778
-#. "consume" mode means
779
-#. that MPD removes each
780
-#. song which has
781
-#. finished playing
782
-#: src/screen.cxx:178
783
-msgid "Consume mode is on"
784
-msgstr "מצב מתכלה מופעל"
785
+#: src/HelpPage.cxx:191
786
+msgid "Delete saved lyrics"
787
+msgstr ""
788
 
789
-#: src/screen.cxx:179
790
-msgid "Consume mode is off"
791
-msgstr "מצב יחיד מופסק"
792
+#: src/HelpPage.cxx:198
793
+msgid "Enable/disable output"
794
+msgstr "אשר/אסור על פלט"
795
 
796
-#: src/screen.cxx:182
797
-#, c-format
798
-msgid "Crossfade %d seconds"
799
-msgstr "קרוספייד שניות %d"
800
+#: src/HelpPage.cxx:205
801
+msgid "Write a message"
802
+msgstr ""
803
 
804
-#: src/screen.cxx:194
805
-msgid "Database updated"
806
-msgstr "בסיס הנתונים עודכן"
807
+#: src/HelpPage.cxx:210
808
+msgid "Keydef screen"
809
+msgstr "מסך שוני מקשים"
810
 
811
-#: src/screen.cxx:226
812
-msgid "Find mode: Wrapped"
813
-msgstr "מצב סופי: כרוך"
814
+#: src/HelpPage.cxx:212
815
+msgid "Edit keydefs for selected command"
816
+msgstr "ערוך שוני מקשים לפקודות שונות"
817
 
818
-#: src/screen.cxx:227
819
-msgid "Find mode: Normal"
820
-msgstr "מצב סופי: נורמלי"
821
+#: src/HelpPage.cxx:213
822
+msgid "Remove selected keydef"
823
+msgstr "הסר שוני מקשים"
824
 
825
-#: src/screen.cxx:232
826
-msgid "Auto center mode: On"
827
-msgstr "מצב מרכז אוטומטי: מופעל"
828
+#: src/HelpPage.cxx:214
829
+#, fuzzy
830
+msgid "Add a keydef"
831
+msgstr "הוסף מקש חדש"
832
 
833
-#: src/screen.cxx:233
834
-msgid "Auto center mode: Off"
835
-msgstr "מצב מרכז אוטומטי: מופסק"
836
+#: src/HelpPage.cxx:215
837
+msgid "Go up a level"
838
+msgstr "עלה רמה אחת"
839
 
840
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
841
-msgid "All tracks"
842
-msgstr "כל השירים"
843
+#: src/HelpPage.cxx:216
844
+msgid "Apply and save changes"
845
+msgstr "ישם ושמור שינויים"
846
 
847
-#: src/screen_artist.cxx:384
848
-msgid "All artists"
849
-msgstr "כל האמנים"
850
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
851
+msgid "Help"
852
+msgstr "עזרה"
853
 
854
-#: src/screen_artist.cxx:389
855
-#, c-format
856
-msgid "Albums of artist: %s"
857
-msgstr "אלבום של אומן %s"
858
+#: src/i18n.h:43
859
+msgid "y"
860
+msgstr "כן"
861
 
862
-#: src/screen_artist.cxx:398
863
-#, c-format
864
-msgid "All tracks of artist: %s"
865
-msgstr "כל השירים של אומן: %s"
866
+#: src/i18n.h:44
867
+msgid "n"
868
+msgstr "לא"
869
 
870
-#: src/screen_artist.cxx:401
871
-#, c-format
872
-msgid "Album: %s - %s"
873
-msgstr "אלבום:%s-%s"
874
+#: src/KeyName.cxx:31
875
+msgid "Undefined"
876
+msgstr "לא מוגדר"
877
 
878
-#: src/screen_artist.cxx:405
879
-#, fuzzy, c-format
880
-msgid "Tracks of no album of artist: %s"
881
-msgstr "אלבום של אומן %s"
882
+#: src/KeyName.cxx:33
883
+msgid "Space"
884
+msgstr "רווח"
885
 
886
-#: src/screen_artist.cxx:450
887
-#, fuzzy, c-format
888
-msgid "Adding album %s..."
889
-msgstr "טוען רשימת שירים %s...."
890
+#: src/KeyName.cxx:35
891
+msgid "Enter"
892
+msgstr "הכנס"
893
 
894
-#: src/screen_artist.cxx:452
895
-#, fuzzy, c-format
896
-msgid "Adding %s..."
897
-msgstr "טוען...."
898
+#: src/KeyName.cxx:37
899
+msgid "Backspace"
900
+msgstr "אחורה"
901
 
902
-#: src/screen_browser.cxx:122
903
-#, c-format
904
-msgid "Loading playlist %s..."
905
-msgstr "טוען רשימת שירים %s...."
906
+#: src/KeyName.cxx:39
907
+msgid "Delete"
908
+msgstr "מחק"
909
 
910
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
911
-#: src/screen_browser.cxx:279
912
-#, fuzzy, c-format
913
-msgid "Adding '%s' to queue"
914
-msgstr "מוסיף %s לרשימת השירים"
915
+#: src/KeyName.cxx:41
916
+msgid "Up"
917
+msgstr "למעלה"
918
 
919
-#: src/screen_chat.cxx:59
920
-#, c-format
921
-msgid ""
922
-"connected to MPD %u.%u.%u (you need at least \n"
923
-"version 0.17.0 to use the chat feature)"
924
-msgstr ""
925
+#: src/KeyName.cxx:43
926
+msgid "Down"
927
+msgstr "למטה"
928
 
929
-#: src/screen_chat.cxx:177
930
-msgid "Your message"
931
-msgstr ""
932
+#: src/KeyName.cxx:45
933
+msgid "Left"
934
+msgstr "שמאלה"
935
 
936
-#: src/screen_chat.cxx:186
937
-msgid "Message could not be sent"
938
-msgstr ""
939
+#: src/KeyName.cxx:47
940
+msgid "Right"
941
+msgstr "חמינה"
942
 
943
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
944
-msgid "Chat"
945
-msgstr ""
946
+#: src/KeyName.cxx:49
947
+msgid "Home"
948
+msgstr "בית"
949
 
950
-#: src/screen_client.cxx:41
951
-msgid "Database update running..."
952
-msgstr "עדכון בסיס הנתנונים פועל...."
953
+#: src/KeyName.cxx:51
954
+msgid "End"
955
+msgstr "סוף"
956
 
957
-#: src/screen_client.cxx:49
958
-#, c-format
959
-msgid "Database update of %s started"
960
-msgstr "עדכון בסיס הנתנונים החל %s"
961
+#: src/KeyName.cxx:53
962
+msgid "PageDown"
963
+msgstr "דף למטה"
964
 
965
-#: src/screen_client.cxx:52
966
-msgid "Database update started"
967
-msgstr "עדכון בסיס הנתנונים החל"
968
+#: src/KeyName.cxx:55
969
+msgid "PageUp"
970
+msgstr "דף למעלה"
971
 
972
-#. translators: the "delete" command is only possible
973
-#. for playlists; the user attempted to delete a song
974
-#. or a directory or something else
975
-#: src/screen_file.cxx:200
976
-msgid "Deleting this item is not possible"
977
-msgstr "מחיקת פריט זה בלתי אפשרית"
978
+#: src/KeyName.cxx:57
979
+msgid "Tab"
980
+msgstr "טאב"
981
 
982
-#: src/screen_file.cxx:207
983
-#, fuzzy, c-format
984
-msgid "Delete playlist %s?"
985
-msgstr "מחק רשימת שירים"
986
+#: src/KeyName.cxx:59
987
+msgid "Shift+Tab"
988
+msgstr "Shift+Tab"
989
 
990
-#. translators: MPD deleted the playlist, as requested by the
991
-#. user
992
-#: src/screen_file.cxx:227
993
-msgid "Playlist deleted"
994
-msgstr "רשימת שירים נמחקה"
995
+#: src/KeyName.cxx:61
996
+msgid "Esc"
997
+msgstr "esc"
998
 
999
-#. translators: caption of the browser screen
1000
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1001
-msgid "Browse"
1002
-msgstr "דפדף"
1003
+#: src/KeyName.cxx:63
1004
+msgid "Insert"
1005
+msgstr "Insert"
1006
 
1007
-#: src/screen_find.cxx:29
1008
-msgid "Find"
1009
-msgstr "חיפוש"
1010
+#: src/KeyName.cxx:71
1011
+#, c-format
1012
+msgid "Ctrl-%c"
1013
+msgstr ""
1014
 
1015
-#: src/screen_find.cxx:30
1016
-msgid "Find backward"
1017
-msgstr "חיפוש לאחור"
1018
+#: src/KeyName.cxx:73
1019
+#, c-format
1020
+msgid "Alt-%c"
1021
+msgstr ""
1022
 
1023
-#: src/screen_find.cxx:31
1024
-msgid "Jump"
1025
-msgstr "קפיצה"
1026
+#: src/ListWindow.cxx:491
1027
+msgid "Range selection disabled"
1028
+msgstr "טווח בחירה מאושר"
1029
+
1030
+#: src/ListWindow.cxx:496
1031
+msgid "Range selection enabled"
1032
+msgstr "טווח בחירה מבוטל"
1033
+
1034
+#. translators: no lyrics were found for the song
1035
+#: src/LyricsPage.cxx:236
1036
+msgid "No lyrics"
1037
+msgstr "אין מילים לשיר"
1038
 
1039
-#: src/screen_find.cxx:82
1040
+#: src/LyricsPage.cxx:254
1041
 #, c-format
1042
-msgid "Unable to find '%s'"
1043
-msgstr "לא ניתן למצוא את '%s'"
1044
+msgid "Lyrics timeout occurred after %d seconds"
1045
+msgstr ""
1046
 
1047
-#: src/screen_help.cxx:39
1048
-msgid "Movement"
1049
-msgstr "תנועה"
1050
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1051
+#: src/LyricsPage.cxx:490
1052
+msgid "Lyrics"
1053
+msgstr "מילים"
1054
 
1055
-#: src/screen_help.cxx:84
1056
-msgid "Global"
1057
-msgstr "גלובלי"
1058
+#. translators: this message is displayed
1059
+#. while data is retrieved
1060
+#: src/LyricsPage.cxx:340
1061
+msgid "loading..."
1062
+msgstr "טוען...."
1063
 
1064
-#: src/screen_help.cxx:121
1065
-msgid "Play"
1066
-msgstr "נגן"
1067
+#: src/LyricsPage.cxx:361
1068
+msgid "Editor not configured"
1069
+msgstr ""
1070
 
1071
-#: src/screen_help.cxx:124
1072
-msgid "Move song up"
1073
-msgstr "הזז שיר למעלה"
1074
+#: src/LyricsPage.cxx:368
1075
+msgid "Do you really want to start an editor and edit these lyrics?"
1076
+msgstr ""
1077
 
1078
-#: src/screen_help.cxx:125
1079
-msgid "Move song down"
1080
-msgstr "הזז שיר למטה"
1081
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1082
+msgid "Can't start editor"
1083
+msgstr ""
1084
 
1085
-#: src/screen_help.cxx:128
1086
-msgid "Center"
1087
-msgstr "מרכז"
1088
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1089
+msgid "Editor exited unexpectedly"
1090
+msgstr ""
1091
 
1092
-#: src/screen_help.cxx:136
1093
-msgid "Enter directory/Select and play song"
1094
-msgstr "הכנס תיקיה/בחר ונגן שיר"
1095
+#. lyrics for the song were saved on hard disk
1096
+#: src/LyricsPage.cxx:439
1097
+msgid "Lyrics saved"
1098
+msgstr "מילים לשיר נשמרו"
1099
 
1100
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1101
-#, fuzzy
1102
-msgid "Append song to queue"
1103
-msgstr "הוסף שיר לרשימת שירים"
1104
+#: src/LyricsPage.cxx:445
1105
+msgid "Lyrics deleted"
1106
+msgstr ""
1107
 
1108
-#: src/screen_help.cxx:140
1109
-msgid "Delete playlist"
1110
-msgstr "מחק רשימת שירים"
1111
+#: src/LyricsPage.cxx:446
1112
+msgid "No saved lyrics"
1113
+msgstr ""
1114
 
1115
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1116
-msgid "Search"
1117
-msgstr "חיפוש"
1118
+#: src/Main.cxx:167
1119
+#, fuzzy, c-format
1120
+msgid "Connecting to %s"
1121
+msgstr "מתחבר ל %s"
1122
 
1123
-#: src/screen_help.cxx:151
1124
-msgid "Select and play"
1125
-msgstr "בחר ונגן"
1126
+#: src/Main.cxx:187
1127
+#, fuzzy, c-format
1128
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1129
+msgstr "שגיאה: גרסת התוכנה %d.%d.%d ישנה מדי (צריך %s)"
1130
 
1131
-#: src/screen_help.cxx:162
1132
-msgid "View Lyrics"
1133
-msgstr "הצג מילים לשיר"
1134
+#. To translators: these credits are shown
1135
+#. when ncmpc is started with "--version"
1136
+#: src/options.cxx:213 src/options.cxx:216
1137
+msgid "translator-credits"
1138
+msgstr ""
1139
+"Launchpad Contributions:\n"
1140
+"  zeltak https://launchpad.net/~zeltak"
1141
 
1142
-#: src/screen_help.cxx:163
1143
-msgid "(Re)load lyrics"
1144
-msgstr "הטען מחדש מילים לשיר"
1145
+#: src/OutputsPage.cxx:87
1146
+#, c-format
1147
+msgid "Output '%s' enabled"
1148
+msgstr "פלט  '%s' אפשרי"
1149
 
1150
-#. to translators: this hotkey aborts the retrieval of lyrics
1151
-#. from the server
1152
-#: src/screen_help.cxx:166
1153
-msgid "Interrupt retrieval"
1154
-msgstr "שליפת המידע הופסקה"
1155
+#: src/OutputsPage.cxx:98
1156
+#, c-format
1157
+msgid "Output '%s' disabled"
1158
+msgstr "פלט  '%s' אינו אפשרי"
1159
 
1160
-#: src/screen_help.cxx:167
1161
-msgid "Download lyrics for currently playing song"
1162
-msgstr "הורד מילים לשיר המנגן כרגע"
1163
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1164
+msgid "Outputs"
1165
+msgstr "פלטים"
1166
 
1167
-#: src/screen_help.cxx:168
1168
-msgid "Add or edit lyrics"
1169
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1170
+msgid "Shuffled queue"
1171
 msgstr ""
1172
 
1173
-#: src/screen_help.cxx:169
1174
-msgid "Save lyrics"
1175
-msgstr "שמור מילים לשיר"
1176
+#: src/player_command.cxx:186
1177
+msgid "Cleared queue"
1178
+msgstr ""
1179
 
1180
-#: src/screen_help.cxx:170
1181
-msgid "Delete saved lyrics"
1182
+#. get path
1183
+#: src/QueuePage.cxx:307
1184
+msgid "Add"
1185
+msgstr "הוסף"
1186
+
1187
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1188
+msgid "Queue"
1189
 msgstr ""
1190
 
1191
-#: src/screen_help.cxx:177
1192
-msgid "Enable/disable output"
1193
-msgstr "אשר/אסור על פלט"
1194
+#: src/QueuePage.cxx:380
1195
+#, c-format
1196
+msgid "Queue on %s"
1197
+msgstr ""
1198
 
1199
-#: src/screen_help.cxx:184
1200
-msgid "Write a message"
1201
+#. query the user for a filename
1202
+#: src/save_playlist.cxx:85
1203
+msgid "Save queue as"
1204
 msgstr ""
1205
 
1206
-#: src/screen_help.cxx:189
1207
-msgid "Keydef screen"
1208
-msgstr "מסך שוני מקשים"
1209
+#: src/save_playlist.cxx:107
1210
+#, fuzzy, c-format
1211
+msgid "Replace %s?"
1212
+msgstr "החלף  %s [%s/%s] ? "
1213
 
1214
-#: src/screen_help.cxx:191
1215
-msgid "Edit keydefs for selected command"
1216
-msgstr "ערוך שוני מקשים לפקודות שונות"
1217
+#. success
1218
+#: src/save_playlist.cxx:128
1219
+#, c-format
1220
+msgid "Saved %s"
1221
+msgstr "שמירת %s"
1222
 
1223
-#: src/screen_help.cxx:192
1224
-msgid "Remove selected keydef"
1225
-msgstr "הסר שוני מקשים"
1226
+#: src/screen_artist.cxx:186
1227
+#, c-format
1228
+msgid "All tracks of artist: %s"
1229
+msgstr "כל השירים של אומן: %s"
1230
+
1231
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1232
+msgid "Album"
1233
+msgstr "אלבום"
1234
+
1235
+#: src/screen_artist.cxx:195
1236
+#, fuzzy, c-format
1237
+msgid "Tracks of no album of artist: %s"
1238
+msgstr "אלבום של אומן %s"
1239
 
1240
-#: src/screen_help.cxx:193
1241
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1242
+msgid "Artist"
1243
+msgstr "אומן"
1244
+
1245
+#: src/screen_client.cxx:41
1246
 #, fuzzy
1247
-msgid "Add a keydef"
1248
-msgstr "הוסף מקש חדש"
1249
+msgid "Database update running"
1250
+msgstr "עדכון בסיס הנתנונים פועל...."
1251
 
1252
-#: src/screen_help.cxx:194
1253
-msgid "Go up a level"
1254
-msgstr "עלה רמה אחת"
1255
+#: src/screen_client.cxx:48
1256
+#, c-format
1257
+msgid "Database update of %s started"
1258
+msgstr "עדכון בסיס הנתנונים החל %s"
1259
 
1260
-#: src/screen_help.cxx:195
1261
-msgid "Apply and save changes"
1262
-msgstr "ישם ושמור שינויים"
1263
+#: src/screen_client.cxx:51
1264
+msgid "Database update started"
1265
+msgstr "עדכון בסיס הנתנונים החל"
1266
 
1267
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1268
-msgid "Help"
1269
-msgstr "עזרה"
1270
+#: src/screen.cxx:160
1271
+msgid "Repeat mode is on"
1272
+msgstr "מצב חזרה מופעל"
1273
 
1274
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1275
-msgid "Error: Screen too small"
1276
-msgstr "שגיאה: המסך קטן מידי"
1277
+#: src/screen.cxx:161
1278
+msgid "Repeat mode is off"
1279
+msgstr "מצב חזרה מופסק"
1280
 
1281
-#: src/screen_keydef.cxx:141
1282
-msgid "You have new key bindings"
1283
-msgstr "יש תצורת מקשים חדשה"
1284
+#: src/screen.cxx:165
1285
+msgid "Random mode is on"
1286
+msgstr "מצב רנדומלי מופעל"
1287
 
1288
-#: src/screen_keydef.cxx:143
1289
-msgid "Keybindings unchanged."
1290
-msgstr "תצורת מקשים לא שונתה."
1291
+#: src/screen.cxx:166
1292
+msgid "Random mode is off"
1293
+msgstr "מצב רנדומלי מופסק"
1294
 
1295
-#: src/screen_keydef.cxx:153
1296
-#, c-format
1297
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1298
-msgstr "שגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %s"
1299
+#. "single" mode means
1300
+#. that MPD will
1301
+#. automatically stop
1302
+#. after playing one
1303
+#. single song
1304
+#: src/screen.cxx:175
1305
+msgid "Single mode is on"
1306
+msgstr "מצב יחיד מופעל"
1307
+
1308
+#: src/screen.cxx:176
1309
+msgid "Single mode is off"
1310
+msgstr "מצב יחיד מופסק"
1311
+
1312
+#. "consume" mode means
1313
+#. that MPD removes each
1314
+#. song which has
1315
+#. finished playing
1316
+#: src/screen.cxx:184
1317
+msgid "Consume mode is on"
1318
+msgstr "מצב מתכלה מופעל"
1319
+
1320
+#: src/screen.cxx:185
1321
+msgid "Consume mode is off"
1322
+msgstr "מצב יחיד מופסק"
1323
 
1324
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1325
+#: src/screen.cxx:188
1326
 #, c-format
1327
-msgid "Error: %s - %s"
1328
-msgstr "שגיאה:  %s - %s"
1329
+msgid "Crossfade %d seconds"
1330
+msgstr "קרוספייד שניות %d"
1331
+
1332
+#: src/screen.cxx:200
1333
+msgid "Database updated"
1334
+msgstr "בסיס הנתונים עודכן"
1335
+
1336
+#: src/screen.cxx:250
1337
+msgid "Find mode: Wrapped"
1338
+msgstr "מצב סופי: כרוך"
1339
+
1340
+#: src/screen.cxx:251
1341
+msgid "Find mode: Normal"
1342
+msgstr "מצב סופי: נורמלי"
1343
+
1344
+#: src/screen.cxx:256
1345
+msgid "Auto center mode: On"
1346
+msgstr "מצב מרכז אוטומטי: מופעל"
1347
 
1348
-#: src/screen_keydef.cxx:171
1349
+#: src/screen.cxx:257
1350
+msgid "Auto center mode: Off"
1351
+msgstr "מצב מרכז אוטומטי: מופסק"
1352
+
1353
+#: src/screen_find.cxx:31
1354
+msgid "Find"
1355
+msgstr "חיפוש"
1356
+
1357
+#: src/screen_find.cxx:32
1358
+msgid "Find backward"
1359
+msgstr "חיפוש לאחור"
1360
+
1361
+#: src/screen_find.cxx:33
1362
+msgid "Jump"
1363
+msgstr "קפיצה"
1364
+
1365
+#: src/screen_find.cxx:79
1366
 #, c-format
1367
-msgid "Wrote %s"
1368
-msgstr "נכתב %s"
1369
+msgid "Unable to find '%s'"
1370
+msgstr "לא ניתן למצוא את '%s'"
1371
 
1372
-#: src/screen_keydef.cxx:250
1373
+#: src/screen_keydef.cxx:161
1374
 msgid "Deleted"
1375
 msgstr "נמחק"
1376
 
1377
-#: src/screen_keydef.cxx:265
1378
+#: src/screen_keydef.cxx:177
1379
 #, c-format
1380
 msgid "Enter new key for %s: "
1381
 msgstr "הכנס מקש חדש ל %s "
1382
 
1383
-#: src/screen_keydef.cxx:276
1384
+#: src/screen_keydef.cxx:187
1385
 msgid "Ctrl-Space can't be used"
1386
 msgstr ""
1387
 
1388
-#: src/screen_keydef.cxx:282
1389
+#: src/screen_keydef.cxx:193
1390
 #, c-format
1391
 msgid "Error: key %s is already used for %s"
1392
 msgstr "שגיאה: המקש %s כבר קיים ל %s"
1393
 
1394
-#: src/screen_keydef.cxx:291
1395
+#: src/screen_keydef.cxx:202
1396
 #, c-format
1397
 msgid "Assigned %s to %s"
1398
 msgstr "הוקצה  %s ל %s"
1399
 
1400
-#: src/screen_keydef.cxx:317
1401
-msgid "===> Apply key bindings "
1402
-msgstr "=====> ישם תצורת מקשים "
1403
-
1404
-#: src/screen_keydef.cxx:319
1405
-msgid "===> Apply & Save key bindings  "
1406
-msgstr "=====> ישם ושמור תצורת מקשים  "
1407
-
1408
-#: src/screen_keydef.cxx:347
1409
+#: src/screen_keydef.cxx:229
1410
 msgid "Add new key"
1411
 msgstr "הוסף מקש חדש"
1412
 
1413
-#: src/screen_keydef.cxx:410
1414
-msgid "Note: Did you forget to 'Apply' your changes?"
1415
-msgstr "הזהרה: האם שכחת 'לישם' את השינוים"
1416
-
1417
-#: src/screen_keydef.cxx:417
1418
-msgid "Edit key bindings"
1419
-msgstr "ערוך את תצורת המקשים"
1420
-
1421
-#: src/screen_keydef.cxx:419
1422
+#: src/screen_keydef.cxx:251
1423
 #, c-format
1424
 msgid "Edit keys for %s"
1425
 msgstr "ערוך את המקש ל %s"
1426
 
1427
-#. translators: no lyrics were found for the song
1428
-#: src/screen_lyrics.cxx:208
1429
-msgid "No lyrics"
1430
-msgstr "אין מילים לשיר"
1431
-
1432
-#: src/screen_lyrics.cxx:226
1433
-#, c-format
1434
-msgid "Lyrics timeout occurred after %d seconds"
1435
-msgstr ""
1436
-
1437
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1438
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1439
-msgid "Lyrics"
1440
-msgstr "מילים"
1441
-
1442
-#. translators: this message is displayed
1443
-#. while data is retrieved
1444
-#: src/screen_lyrics.cxx:330
1445
-msgid "loading..."
1446
-msgstr "טוען...."
1447
-
1448
-#: src/screen_lyrics.cxx:361
1449
-msgid "Editor not configured"
1450
-msgstr ""
1451
-
1452
-#: src/screen_lyrics.cxx:367
1453
-msgid "Do you really want to start an editor and edit these lyrics?"
1454
-msgstr ""
1455
+#: src/screen_keydef.cxx:393
1456
+msgid "You have new key bindings"
1457
+msgstr "יש תצורת מקשים חדשה"
1458
 
1459
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1460
-msgid "Can't start editor"
1461
-msgstr ""
1462
+#: src/screen_keydef.cxx:395
1463
+msgid "Keybindings unchanged."
1464
+msgstr "תצורת מקשים לא שונתה."
1465
 
1466
-#: src/screen_lyrics.cxx:411
1467
-#, c-format
1468
-msgid "Editor exited unexpectedly (%d)"
1469
-msgstr ""
1470
+#: src/screen_keydef.cxx:405
1471
+#, fuzzy
1472
+msgid "Unable to write configuration"
1473
+msgstr "הגדרת המקשים החמים חסרה"
1474
 
1475
-#: src/screen_lyrics.cxx:414
1476
+#: src/screen_keydef.cxx:421
1477
 #, c-format
1478
-msgid "Editor exited unexpectedly (signal %d)"
1479
-msgstr ""
1480
-
1481
-#. lyrics for the song were saved on hard disk
1482
-#: src/screen_lyrics.cxx:436
1483
-msgid "Lyrics saved"
1484
-msgstr "מילים לשיר נשמרו"
1485
-
1486
-#: src/screen_lyrics.cxx:443
1487
-msgid "Lyrics deleted"
1488
-msgstr ""
1489
-
1490
-#: src/screen_lyrics.cxx:446
1491
-msgid "No saved lyrics"
1492
-msgstr ""
1493
+msgid "Wrote %s"
1494
+msgstr "נכתב %s"
1495
 
1496
-#: src/screen_outputs.cxx:60
1497
-#, c-format
1498
-msgid "Output '%s' enabled"
1499
-msgstr "פלט  '%s' אפשרי"
1500
+#: src/screen_keydef.cxx:433
1501
+msgid "===> Apply key bindings "
1502
+msgstr "=====> ישם תצורת מקשים "
1503
 
1504
-#: src/screen_outputs.cxx:71
1505
-#, c-format
1506
-msgid "Output '%s' disabled"
1507
-msgstr "פלט  '%s' אינו אפשרי"
1508
+#: src/screen_keydef.cxx:435
1509
+msgid "===> Apply & Save key bindings  "
1510
+msgstr "=====> ישם ושמור תצורת מקשים  "
1511
 
1512
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1513
-msgid "Outputs"
1514
-msgstr "פלטים"
1515
+#: src/screen_keydef.cxx:472
1516
+msgid "Edit key bindings"
1517
+msgstr "ערוך את תצורת המקשים"
1518
 
1519
-#. get path
1520
-#: src/screen_queue.cxx:274
1521
-msgid "Add"
1522
-msgstr "הוסף"
1523
+#: src/screen_keydef.cxx:554
1524
+msgid "Note: Did you forget to 'Apply' your changes?"
1525
+msgstr "הזהרה: האם שכחת 'לישם' את השינוים"
1526
 
1527
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1528
-msgid "Queue"
1529
+#: src/screen_keydef.cxx:604
1530
+msgid "Keys"
1531
 msgstr ""
1532
 
1533
-#: src/screen_queue.cxx:384
1534
-#, c-format
1535
-msgid "Queue on %s"
1536
-msgstr ""
1537
+#: src/screen_utils.cxx:124
1538
+msgid "Password"
1539
+msgstr "סיסמה"
1540
 
1541
-#: src/screen_search.cxx:48
1542
+#: src/SearchPage.cxx:51
1543
 msgid "artist"
1544
 msgstr "אומן"
1545
 
1546
-#: src/screen_search.cxx:49
1547
+#: src/SearchPage.cxx:52
1548
 msgid "album"
1549
 msgstr "אלבום"
1550
 
1551
-#: src/screen_search.cxx:50
1552
+#: src/SearchPage.cxx:53
1553
 msgid "title"
1554
 msgstr "שם"
1555
 
1556
-#: src/screen_search.cxx:51
1557
+#: src/SearchPage.cxx:54
1558
 msgid "track"
1559
 msgstr "רצועה"
1560
 
1561
-#: src/screen_search.cxx:52
1562
+#: src/SearchPage.cxx:55
1563
 msgid "name"
1564
 msgstr "שם"
1565
 
1566
-#: src/screen_search.cxx:53
1567
+#: src/SearchPage.cxx:56
1568
 msgid "genre"
1569
 msgstr "ג'אנר"
1570
 
1571
-#: src/screen_search.cxx:54
1572
+#: src/SearchPage.cxx:57
1573
 msgid "date"
1574
 msgstr "תאריך"
1575
 
1576
-#: src/screen_search.cxx:55
1577
+#: src/SearchPage.cxx:58
1578
 msgid "composer"
1579
 msgstr "מלחין"
1580
 
1581
-#: src/screen_search.cxx:56
1582
+#: src/SearchPage.cxx:59
1583
 msgid "performer"
1584
 msgstr "מבצע"
1585
 
1586
-#: src/screen_search.cxx:57
1587
+#: src/SearchPage.cxx:60
1588
 msgid "comment"
1589
 msgstr "הערות"
1590
 
1591
-#: src/screen_search.cxx:65
1592
+#: src/SearchPage.cxx:68
1593
 msgid "file"
1594
 msgstr "קובץ"
1595
 
1596
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1597
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1598
 msgid "Title"
1599
 msgstr "שם"
1600
 
1601
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1602
-msgid "Artist"
1603
-msgstr "אומן"
1604
-
1605
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1606
-msgid "Album"
1607
-msgstr "אלבום"
1608
-
1609
-#: src/screen_search.cxx:85
1610
+#: src/SearchPage.cxx:88
1611
 msgid "Filename"
1612
 msgstr "שם קובץ"
1613
 
1614
-#: src/screen_search.cxx:86
1615
+#: src/SearchPage.cxx:89
1616
 msgid "Artist + Title"
1617
 msgstr "אומן+שם"
1618
 
1619
-#: src/screen_search.cxx:244
1620
-#, c-format
1621
-msgid "No argument for search tag %s"
1622
-msgstr "אין טעון לחיפוש תגית %s"
1623
-
1624
-#: src/screen_search.cxx:253
1625
+#: src/SearchPage.cxx:270
1626
 #, c-format
1627
 msgid "Bad search tag %s"
1628
 msgstr "חיפוש לא תקין של תגית %s"
1629
 
1630
-#. if( pattern==nullptr )
1631
-#. search_new(screen, c);
1632
-#. else
1633
-#: src/screen_search.cxx:400
1634
-#, c-format
1635
-msgid "Press %s for a new search"
1636
-msgstr "לחץ %s לביצוע חיפוש חדש"
1637
-
1638
-#: src/screen_search.cxx:427
1639
+#: src/SearchPage.cxx:284
1640
 #, c-format
1641
-msgid "Search: %s"
1642
-msgstr "חיפוש: %s"
1643
-
1644
-#: src/screen_search.cxx:430
1645
-#, c-format
1646
-msgid "Search: Results for %s [%s]"
1647
-msgstr "חיפוש: תוצאוצ חיפוש ל %s [%s]"
1648
+msgid "No argument for search tag %s"
1649
+msgstr "אין טעון לחיפוש תגית %s"
1650
 
1651
-#: src/screen_search.cxx:434
1652
-#, c-format
1653
-msgid "Search: Press %s for a new search [%s]"
1654
-msgstr "חיפוש: לחץ %s לחיפוש חדש [%s]"
1655
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1656
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1657
+msgid "Search"
1658
+msgstr "חיפוש"
1659
 
1660
-#: src/screen_search.cxx:458
1661
+#: src/SearchPage.cxx:436
1662
 #, c-format
1663
 msgid "Search mode: %s"
1664
 msgstr "צורת חיפוש: %s"
1665
 
1666
-#: src/screen_song.cxx:54
1667
+#: src/SongPage.cxx:67
1668
 msgid "Length"
1669
 msgstr ""
1670
 
1671
-#: src/screen_song.cxx:55
1672
+#: src/SongPage.cxx:68
1673
 msgid "Position"
1674
 msgstr ""
1675
 
1676
-#: src/screen_song.cxx:56
1677
+#: src/SongPage.cxx:69
1678
 msgid "Composer"
1679
 msgstr "מלחון"
1680
 
1681
-#: src/screen_song.cxx:57
1682
+#: src/SongPage.cxx:70
1683
 msgid "Name"
1684
 msgstr "שם"
1685
 
1686
-#: src/screen_song.cxx:58
1687
+#: src/SongPage.cxx:71
1688
 msgid "Disc"
1689
 msgstr "דיסק"
1690
 
1691
-#: src/screen_song.cxx:59
1692
+#: src/SongPage.cxx:72
1693
 msgid "Track"
1694
 msgstr "רצועה"
1695
 
1696
-#: src/screen_song.cxx:60
1697
+#: src/SongPage.cxx:73
1698
 msgid "Date"
1699
 msgstr "תאריך"
1700
 
1701
-#: src/screen_song.cxx:61
1702
+#: src/SongPage.cxx:74
1703
 msgid "Genre"
1704
 msgstr "ג'אנר"
1705
 
1706
-#: src/screen_song.cxx:62
1707
+#: src/SongPage.cxx:75
1708
 msgid "Comment"
1709
 msgstr "הערה"
1710
 
1711
-#: src/screen_song.cxx:63
1712
+#: src/SongPage.cxx:76
1713
 msgid "Path"
1714
 msgstr "נתיב"
1715
 
1716
-#: src/screen_song.cxx:64
1717
+#: src/SongPage.cxx:77
1718
 msgid "Bitrate"
1719
 msgstr "ביטרייט"
1720
 
1721
-#: src/screen_song.cxx:65
1722
+#: src/SongPage.cxx:78
1723
 msgid "Format"
1724
 msgstr ""
1725
 
1726
-#: src/screen_song.cxx:82
1727
+#: src/SongPage.cxx:95
1728
 msgid "Number of artists"
1729
 msgstr "מספר אומנים"
1730
 
1731
-#: src/screen_song.cxx:83
1732
+#: src/SongPage.cxx:96
1733
 msgid "Number of albums"
1734
 msgstr "מספר אלבומים"
1735
 
1736
-#: src/screen_song.cxx:84
1737
+#: src/SongPage.cxx:97
1738
 msgid "Number of songs"
1739
 msgstr "מספר שירים"
1740
 
1741
-#: src/screen_song.cxx:85
1742
+#: src/SongPage.cxx:98
1743
 msgid "Uptime"
1744
 msgstr "זמן פעילות"
1745
 
1746
-#: src/screen_song.cxx:86
1747
+#: src/SongPage.cxx:99
1748
 msgid "Most recent db update"
1749
 msgstr "עדכון עדכני אחרון של בסיב נתונים"
1750
 
1751
-#: src/screen_song.cxx:87
1752
+#: src/SongPage.cxx:100
1753
 msgid "Playtime"
1754
 msgstr "זמן נגינה"
1755
 
1756
-#: src/screen_song.cxx:88
1757
+#: src/SongPage.cxx:101
1758
 msgid "DB playtime"
1759
 msgstr "זמן נגינה בסיס נתונים"
1760
 
1761
-#: src/screen_song.cxx:173
1762
+#: src/SongPage.cxx:204
1763
 msgid "Song viewer"
1764
 msgstr "הצגת השיר"
1765
 
1766
-#: src/screen_song.cxx:337
1767
+#: src/SongPage.cxx:370
1768
 msgid "MPD statistics"
1769
 msgstr "סטטיסטיקה MPD"
1770
 
1771
-#: src/screen_song.cxx:427
1772
+#: src/SongPage.cxx:455
1773
 msgid "Selected song"
1774
 msgstr "בחר שיר"
1775
 
1776
-#: src/screen_song.cxx:437
1777
+#: src/SongPage.cxx:465
1778
 msgid "Currently playing song"
1779
 msgstr "שיר עכשווי"
1780
 
1781
-#: src/screen_song.cxx:442
1782
+#: src/SongPage.cxx:470
1783
 #, c-format
1784
 msgid "%d kbps"
1785
 msgstr "%d kbps"
1786
 
1787
-#. NOTE: if one day a translator decides to use a multi-byte character
1788
-#. for one of the yes/no keys, we'll have to parse it properly
1789
-#: src/screen_utils.cxx:80
1790
-#, fuzzy, c-format
1791
-msgid "%s [%s/%s] "
1792
-msgstr "החלף  %s [%s/%s] ? "
1793
-
1794
-#: src/screen_utils.cxx:121
1795
-msgid "Password"
1796
-msgstr "סיסמה"
1797
+#: src/SongPage.cxx:554
1798
+msgid "Song"
1799
+msgstr ""
1800
 
1801
-#: src/status_bar.cxx:121
1802
+#: src/StatusBar.cxx:104
1803
 msgid "Playing:"
1804
 msgstr "מנגן:"
1805
 
1806
-#: src/status_bar.cxx:124
1807
+#: src/StatusBar.cxx:108
1808
 msgid "[Paused]"
1809
 msgstr "[הפסקה]"
1810
 
1811
-#: src/title_bar.cxx:99
1812
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1813
+#, fuzzy
1814
+msgid "Unknown color"
1815
+msgstr "פקודה לא ידועה"
1816
+
1817
+#: src/Styles.cxx:333
1818
+#, fuzzy
1819
+msgid "Unknown color field"
1820
+msgstr "אזהרה: צבע לא מוכ בתחום  - %s\n"
1821
+
1822
+#: src/Styles.cxx:375
1823
+msgid "Terminal lacks color capabilities"
1824
+msgstr "המסוף ללא  יכולת תמיכה בצבעים"
1825
+
1826
+#: src/time_format.cxx:44
1827
+msgid "year"
1828
+msgstr ""
1829
+
1830
+#: src/time_format.cxx:46
1831
+msgid "years"
1832
+msgstr ""
1833
+
1834
+#: src/time_format.cxx:54
1835
+msgid "week"
1836
+msgstr ""
1837
+
1838
+#: src/time_format.cxx:57
1839
+msgid "weeks"
1840
+msgstr ""
1841
+
1842
+#: src/time_format.cxx:65
1843
+msgid "day"
1844
+msgstr ""
1845
+
1846
+#: src/time_format.cxx:68
1847
+msgid "days"
1848
+msgstr ""
1849
+
1850
+#: src/TitleBar.cxx:100
1851
 msgid "Volume n/a"
1852
 msgstr "ב n/a"
1853
 
1854
-#: src/title_bar.cxx:101
1855
+#: src/TitleBar.cxx:102
1856
 #, c-format
1857
 msgid "Volume %d%%"
1858
 msgstr "ווליום %d%%"
1859
 
1860
+#, fuzzy
1861
+#~ msgid "Add url/file to queue"
1862
+#~ msgstr "הוסף לינק/קובץ לרשימת שירים"
1863
+
1864
+#~ msgid "Move song up"
1865
+#~ msgstr "הזז שיר למעלה"
1866
+
1867
+#~ msgid "Move song down"
1868
+#~ msgstr "הזז שיר למטה"
1869
+
1870
+#~ msgid "Press %s for a new search"
1871
+#~ msgstr "לחץ %s לביצוע חיפוש חדש"
1872
+
1873
+#~ msgid "Search: %s"
1874
+#~ msgstr "חיפוש: %s"
1875
+
1876
+#~ msgid "Search: Results for %s [%s]"
1877
+#~ msgstr "חיפוש: תוצאוצ חיפוש ל %s [%s]"
1878
+
1879
+#~ msgid "Search: Press %s for a new search [%s]"
1880
+#~ msgstr "חיפוש: לחץ %s לחיפוש חדש [%s]"
1881
+
1882
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1883
+#~ msgstr "מתחבר ל %s [לחץ על %s לביטול]"
1884
+
1885
+#~ msgid "press %s for the key editor"
1886
+#~ msgstr "%s לעורך המקשים לחץ"
1887
+
1888
+#~ msgid "Album: %s - %s"
1889
+#~ msgstr "אלבום:%s-%s"
1890
+
1891
+#, fuzzy
1892
+#~ msgid "Adding album %s..."
1893
+#~ msgstr "טוען רשימת שירים %s...."
1894
+
1895
+#, fuzzy
1896
+#~ msgid "Adding %s..."
1897
+#~ msgstr "טוען...."
1898
+
1899
+#~ msgid "Error: Screen too small"
1900
+#~ msgstr "שגיאה: המסך קטן מידי"
1901
+
1902
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1903
+#~ msgstr "שגיאה: לא ניתן ליצור את התיקיה ~/.ncmpc - %s"
1904
+
1905
+#~ msgid "Error: %s - %s"
1906
+#~ msgstr "שגיאה:  %s - %s"
1907
+
1908
+#, fuzzy
1909
+#~ msgid "%s [%s/%s] "
1910
+#~ msgstr "החלף  %s [%s/%s] ? "
1911
+
1912
 #~ msgid "Delete playlist %s [%s/%s] ? "
1913
 #~ msgstr "%s [%s/%s] ? מחיקת רשימת שירים "
1914
 
1915
 #~ msgid "Warning: Unknown color - %s\n"
1916
 #~ msgstr "אזהרה: צבע לא מוכר  - %s\n"
1917
 
1918
-#~ msgid "Connected to %s"
1919
-#~ msgstr "מתחבר ל %s"
1920
-
1921
 #~ msgid "Shuffled playlist"
1922
 #~ msgstr "רשימת שירים מעורבבת"
1923
 
1924
ncmpc-0.30.tar.xz/po/hu.po -> ncmpc-0.32.tar.xz/po/hu.po Changed
1927
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2009-09-24 21:45+0000\n"
8
 "Last-Translator: Kiszel Kristóf <Unknown>\n"
9
 "Language-Team: Hungarian <hu@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2010-09-07 18:28+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Ismeretlen parancs"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Minden szám"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Figyelem: ismeretlen szín mező - %s\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "A terminál nem támogatja a színek változtatását"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "%s előadó albumai"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "A terminál nem támogatja a színeket"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "'%s' hozzáadása a lejátszólistához"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Minden előadó"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "A(z) %s gomb a követlezőkhoz van rendelve: %s és %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Billentyű beállító képernyő"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Kilép"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Kurzormozgatás felfelé"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Kurzormozgatás lefelé"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Kurzor mozgatása a képernyő tetejére"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Kurzor mozgatása a képernyő közepére"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Kurzor mozgatása a képernyő aljára"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Kurzor mozgatása a lista tetejére"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Kurzor mozgatása a lista aljára"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Egy oldalt fel"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Egy oldalt le"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Tartomány kiválasztása"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Görgetés egy sorral le"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Görgetés egy sorral fel"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Görgetés fél képernyőnyivel fel"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Görgetés fél képernyőnyivel le"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Most lejátszott szám kiválasztása"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Segítség"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Billentyű beállító képernyő"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Tallózás"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Lejátszás/Belépés könyvtárba"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Szüneteltetés"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Leállítás"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Vágás"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Következő szám"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Előző szám"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Tekerés előre"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Tekerés hátra"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Hangerő növelése"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Hangerő csökkentése"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Szám kiválasztása a lejátszólistában"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Minden listázott elem kiválasztása"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Szám törlése a lejátszólistából"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Ismétlő mód ki- és bekapcsolása"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Véletlenszerű lejátszás ki- és bekapcsolása"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Egyszeri mód átkapcsolása"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Fogyasztó mód átkapcsolása"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Egymásba mosás ki- és bekapcsolása"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "A zenei adatbázis frissítésének indítása"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "URL vagy fájl hozzáadása a lejátszólistához"
286
+msgid "Append song to queue"
287
+msgstr "Szám hozzáadása a lejátszólistához"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Mozgás a gyökér könyvtárba"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Mozgás a szülő könyvtárba"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Szám megtekintése a tallozóban"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Elem mozgatása fel"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Elem mozgatása le"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Képernyő frissítése"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Kereső mód ki- és bekapcsolása"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Középre igazítás ki- és bekapcsolása"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Kövezkező képernyő"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Előző képernyő"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Váltás a legutóbbi képernyőre"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Keresés előre"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Következő keresése előre"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Keresés hátra"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Előző keresése hátra"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Ugrás oda"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Előadó képernyő"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Kereső képernyő"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Kereső mód váltása"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "A kiválasztott és épp lejátszott szám megtekintése"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Dalszöveg képernyő"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "parancs megszakítása"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Dalszövegek frissítése"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Kimenetek"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Kövezkező képernyő"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Meghatározatlan"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Szóköz"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Delete"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Up"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Down"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Left"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Right"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "A(z) %s gomb a követlezőkhoz van rendelve: %s és %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Hiba"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Hibás gyorsbillentyű definíció"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Ismeretlen parancs"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Hiányos gyorsbillentyű definíció"
545
 
546
@@ -442,814 +377,883 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Hibás időkijelzési típus"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Hiányzó egyenlőség jel"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Hibás szín megnevezés"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Hiányos szín megadás"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Érvénytelen szám"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Hibás szín megadás"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Ismeretlen képernyő név"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Érvénytelen keresési mód"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Ismeretlen keresési mód"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Ismeretlen konfigurációs paraméter"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "i"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "A terminál nem támogatja a színek változtatását"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Ez az elem nem törölhető"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Tartomány kiválasztás letiltva"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Lejátszólista törlése"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Tartomány kiválasztás engedélyezve"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Megszakítva"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Kapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Lejátszólista törölve"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Tallózás"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Hiba: a(z) %d.%d.%d MPD verzió túl régi (%s kell)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "%s lejátszólista betöltése..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "nyomj %s-t a szerkesztéshez"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Mozgás"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Launchpad Contributions:\n"
675
-"  Kiszel Kristóf https://launchpad.net/~ulysses\n"
676
-"  Laszlo Ashin https://launchpad.net/~kodest"
677
+#: src/HelpPage.cxx:105
678
+msgid "Global"
679
+msgstr "Általános"
680
 
681
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
682
-msgid "Shuffled queue"
683
-msgstr ""
684
+#: src/HelpPage.cxx:142
685
+msgid "Play"
686
+msgstr "Lejátszás"
687
 
688
-#: src/player_command.cxx:184
689
-msgid "Cleared queue"
690
-msgstr ""
691
+#: src/HelpPage.cxx:149
692
+msgid "Center"
693
+msgstr "Közép"
694
 
695
-#. query the user for a filename
696
-#: src/save_playlist.cxx:109
697
-msgid "Save queue as"
698
-msgstr ""
699
+#: src/HelpPage.cxx:157
700
+msgid "Enter directory/Select and play song"
701
+msgstr "Könyvtár megadása/szám kiválasztása és lejátszása"
702
 
703
-#: src/save_playlist.cxx:140
704
-#, fuzzy, c-format
705
-msgid "Replace %s?"
706
-msgstr "Cserélni a következőt: %s [%s/%s]? "
707
+#: src/HelpPage.cxx:161
708
+msgid "Delete playlist"
709
+msgstr "Lejátszólista törlése"
710
 
711
-#. translators: a dialog was aborted by the user
712
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
713
-#: src/screen_lyrics.cxx:370
714
-msgid "Aborted"
715
-msgstr "Megszakítva"
716
+#: src/HelpPage.cxx:171
717
+#, fuzzy
718
+msgid "New search"
719
+msgstr "Keresés"
720
 
721
-#. success
722
-#: src/save_playlist.cxx:171
723
-#, c-format
724
-msgid "Saved %s"
725
-msgstr "%s elmentve"
726
+#: src/HelpPage.cxx:172
727
+msgid "Select and play"
728
+msgstr "Kiválasztás és lejátszás"
729
 
730
-#: src/screen.cxx:154
731
-msgid "Repeat mode is on"
732
-msgstr "Ismétlő mód be"
733
+#: src/HelpPage.cxx:183
734
+msgid "View Lyrics"
735
+msgstr "Dalszövegek megtekintése"
736
 
737
-#: src/screen.cxx:155
738
-msgid "Repeat mode is off"
739
-msgstr "Ismétlő mód ki"
740
+#: src/HelpPage.cxx:184
741
+msgid "(Re)load lyrics"
742
+msgstr "Dalszövegek (újra)töltése"
743
 
744
-#: src/screen.cxx:159
745
-msgid "Random mode is on"
746
-msgstr "Véletlen mód be"
747
+#. to translators: this hotkey aborts the retrieval of lyrics
748
+#. from the server
749
+#: src/HelpPage.cxx:187
750
+msgid "Interrupt retrieval"
751
+msgstr "Újrapróbálkozás megszakítása"
752
 
753
-#: src/screen.cxx:160
754
-msgid "Random mode is off"
755
-msgstr "Véletlen mód ki"
756
+#: src/HelpPage.cxx:188
757
+msgid "Download lyrics for currently playing song"
758
+msgstr "Dalszöveg letöltése a jelenlegi zenéhez"
759
 
760
-#. "single" mode means
761
-#. that MPD will
762
-#. automatically stop
763
-#. after playing one
764
-#. single song
765
-#: src/screen.cxx:169
766
-msgid "Single mode is on"
767
-msgstr "Egyszeri lejátszás mód be"
768
+#: src/HelpPage.cxx:189
769
+msgid "Add or edit lyrics"
770
+msgstr ""
771
 
772
-#: src/screen.cxx:170
773
-msgid "Single mode is off"
774
-msgstr "Egyszeri lejátszás mód ki"
775
+#: src/HelpPage.cxx:190
776
+msgid "Save lyrics"
777
+msgstr "Dalszövegek mentése"
778
 
779
-#. "consume" mode means
780
-#. that MPD removes each
781
-#. song which has
782
-#. finished playing
783
-#: src/screen.cxx:178
784
-msgid "Consume mode is on"
785
-msgstr "Fogyasztó mód be"
786
+#: src/HelpPage.cxx:191
787
+msgid "Delete saved lyrics"
788
+msgstr ""
789
 
790
-#: src/screen.cxx:179
791
-msgid "Consume mode is off"
792
-msgstr "Fogyasztó mód ki"
793
+#: src/HelpPage.cxx:198
794
+msgid "Enable/disable output"
795
+msgstr "Kimenet engedélyezése/tiltása"
796
 
797
-#: src/screen.cxx:182
798
-#, c-format
799
-msgid "Crossfade %d seconds"
800
-msgstr "Egymásba mosás %d másodperc"
801
+#: src/HelpPage.cxx:205
802
+msgid "Write a message"
803
+msgstr ""
804
 
805
-#: src/screen.cxx:194
806
-msgid "Database updated"
807
-msgstr "Adatbázis frissítve"
808
+#: src/HelpPage.cxx:210
809
+msgid "Keydef screen"
810
+msgstr "Billentyű beállító képernyő"
811
 
812
-#: src/screen.cxx:226
813
-msgid "Find mode: Wrapped"
814
-msgstr "Keresési mód: újrakezdő"
815
+#: src/HelpPage.cxx:212
816
+msgid "Edit keydefs for selected command"
817
+msgstr "Billentyű szerkesztése a kiválasztott parancshoz"
818
 
819
-#: src/screen.cxx:227
820
-msgid "Find mode: Normal"
821
-msgstr "Keresési mód: normál"
822
+#: src/HelpPage.cxx:213
823
+msgid "Remove selected keydef"
824
+msgstr "Billentyű hozzárendelés megszűntetése"
825
 
826
-#: src/screen.cxx:232
827
-msgid "Auto center mode: On"
828
-msgstr "Középre igazítás bekapcsolva"
829
+#: src/HelpPage.cxx:214
830
+#, fuzzy
831
+msgid "Add a keydef"
832
+msgstr "Új gomb hozzáadása"
833
 
834
-#: src/screen.cxx:233
835
-msgid "Auto center mode: Off"
836
-msgstr "Középre igazítás kikapcsolva"
837
+#: src/HelpPage.cxx:215
838
+msgid "Go up a level"
839
+msgstr "Egy szinttel feljebb"
840
 
841
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
842
-msgid "All tracks"
843
-msgstr "Minden szám"
844
+#: src/HelpPage.cxx:216
845
+msgid "Apply and save changes"
846
+msgstr "Alkalmaz és menti a változásokat"
847
 
848
-#: src/screen_artist.cxx:384
849
-msgid "All artists"
850
-msgstr "Minden előadó"
851
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
852
+msgid "Help"
853
+msgstr "Súgó"
854
 
855
-#: src/screen_artist.cxx:389
856
-#, c-format
857
-msgid "Albums of artist: %s"
858
-msgstr "%s előadó albumai"
859
+#: src/i18n.h:43
860
+msgid "y"
861
+msgstr "i"
862
 
863
-#: src/screen_artist.cxx:398
864
-#, c-format
865
-msgid "All tracks of artist: %s"
866
-msgstr "%s előadó minden száma"
867
+#: src/i18n.h:44
868
+msgid "n"
869
+msgstr "n"
870
 
871
-#: src/screen_artist.cxx:401
872
-#, c-format
873
-msgid "Album: %s - %s"
874
-msgstr "Album: %s - %s"
875
+#: src/KeyName.cxx:31
876
+msgid "Undefined"
877
+msgstr "Meghatározatlan"
878
 
879
-#: src/screen_artist.cxx:405
880
-#, fuzzy, c-format
881
-msgid "Tracks of no album of artist: %s"
882
-msgstr "%s előadó albumai"
883
+#: src/KeyName.cxx:33
884
+msgid "Space"
885
+msgstr "Szóköz"
886
 
887
-#: src/screen_artist.cxx:450
888
-#, fuzzy, c-format
889
-msgid "Adding album %s..."
890
-msgstr "%s lejátszólista betöltése..."
891
+#: src/KeyName.cxx:35
892
+msgid "Enter"
893
+msgstr "Enter"
894
 
895
-#: src/screen_artist.cxx:452
896
-#, fuzzy, c-format
897
-msgid "Adding %s..."
898
-msgstr "%s könyvtár hozzáadása...\n"
899
+#: src/KeyName.cxx:37
900
+msgid "Backspace"
901
+msgstr "Backspace"
902
 
903
-#: src/screen_browser.cxx:122
904
-#, c-format
905
-msgid "Loading playlist %s..."
906
-msgstr "%s lejátszólista betöltése..."
907
+#: src/KeyName.cxx:39
908
+msgid "Delete"
909
+msgstr "Delete"
910
 
911
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
912
-#: src/screen_browser.cxx:279
913
-#, fuzzy, c-format
914
-msgid "Adding '%s' to queue"
915
-msgstr "'%s' hozzáadása a lejátszólistához"
916
+#: src/KeyName.cxx:41
917
+msgid "Up"
918
+msgstr "Up"
919
 
920
-#: src/screen_chat.cxx:59
921
-#, c-format
922
-msgid ""
923
-"connected to MPD %u.%u.%u (you need at least \n"
924
-"version 0.17.0 to use the chat feature)"
925
-msgstr ""
926
+#: src/KeyName.cxx:43
927
+msgid "Down"
928
+msgstr "Down"
929
 
930
-#: src/screen_chat.cxx:177
931
-msgid "Your message"
932
-msgstr ""
933
+#: src/KeyName.cxx:45
934
+msgid "Left"
935
+msgstr "Left"
936
 
937
-#: src/screen_chat.cxx:186
938
-msgid "Message could not be sent"
939
-msgstr ""
940
+#: src/KeyName.cxx:47
941
+msgid "Right"
942
+msgstr "Right"
943
 
944
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
945
-msgid "Chat"
946
-msgstr ""
947
+#: src/KeyName.cxx:49
948
+msgid "Home"
949
+msgstr "Home"
950
 
951
-#: src/screen_client.cxx:41
952
-msgid "Database update running..."
953
-msgstr "Adatbázis frissítés folyamatban..."
954
+#: src/KeyName.cxx:51
955
+msgid "End"
956
+msgstr "End"
957
 
958
-#: src/screen_client.cxx:49
959
-#, c-format
960
-msgid "Database update of %s started"
961
-msgstr "%s adatbázis frissítése elkezdődött"
962
+#: src/KeyName.cxx:53
963
+msgid "PageDown"
964
+msgstr "PageDown"
965
 
966
-#: src/screen_client.cxx:52
967
-msgid "Database update started"
968
-msgstr "Adatbázis frissítés elindult"
969
+#: src/KeyName.cxx:55
970
+msgid "PageUp"
971
+msgstr "PageUp"
972
 
973
-#. translators: the "delete" command is only possible
974
-#. for playlists; the user attempted to delete a song
975
-#. or a directory or something else
976
-#: src/screen_file.cxx:200
977
-msgid "Deleting this item is not possible"
978
-msgstr "Ez az elem nem törölhető"
979
+#: src/KeyName.cxx:57
980
+msgid "Tab"
981
+msgstr "Tab"
982
 
983
-#: src/screen_file.cxx:207
984
-#, fuzzy, c-format
985
-msgid "Delete playlist %s?"
986
-msgstr "Lejátszólista törlése"
987
+#: src/KeyName.cxx:59
988
+msgid "Shift+Tab"
989
+msgstr "Shift+Tab"
990
 
991
-#. translators: MPD deleted the playlist, as requested by the
992
-#. user
993
-#: src/screen_file.cxx:227
994
-msgid "Playlist deleted"
995
-msgstr "Lejátszólista törölve"
996
+#: src/KeyName.cxx:61
997
+msgid "Esc"
998
+msgstr "Esc"
999
 
1000
-#. translators: caption of the browser screen
1001
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1002
-msgid "Browse"
1003
-msgstr "Tallózás"
1004
+#: src/KeyName.cxx:63
1005
+msgid "Insert"
1006
+msgstr "Insert"
1007
 
1008
-#: src/screen_find.cxx:29
1009
-msgid "Find"
1010
-msgstr "Keresés"
1011
+#: src/KeyName.cxx:71
1012
+#, c-format
1013
+msgid "Ctrl-%c"
1014
+msgstr ""
1015
 
1016
-#: src/screen_find.cxx:30
1017
-msgid "Find backward"
1018
-msgstr "Keresés visszafelé"
1019
+#: src/KeyName.cxx:73
1020
+#, c-format
1021
+msgid "Alt-%c"
1022
+msgstr ""
1023
 
1024
-#: src/screen_find.cxx:31
1025
-msgid "Jump"
1026
-msgstr "Ugrás"
1027
+#: src/ListWindow.cxx:491
1028
+msgid "Range selection disabled"
1029
+msgstr "Tartomány kiválasztás letiltva"
1030
+
1031
+#: src/ListWindow.cxx:496
1032
+msgid "Range selection enabled"
1033
+msgstr "Tartomány kiválasztás engedélyezve"
1034
+
1035
+#. translators: no lyrics were found for the song
1036
+#: src/LyricsPage.cxx:236
1037
+msgid "No lyrics"
1038
+msgstr "Nincs dalszöveg"
1039
 
1040
-#: src/screen_find.cxx:82
1041
+#: src/LyricsPage.cxx:254
1042
 #, c-format
1043
-msgid "Unable to find '%s'"
1044
-msgstr "'%s' nem található"
1045
+msgid "Lyrics timeout occurred after %d seconds"
1046
+msgstr ""
1047
 
1048
-#: src/screen_help.cxx:39
1049
-msgid "Movement"
1050
-msgstr "Mozgás"
1051
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1052
+#: src/LyricsPage.cxx:490
1053
+msgid "Lyrics"
1054
+msgstr "Dalszövegek"
1055
 
1056
-#: src/screen_help.cxx:84
1057
-msgid "Global"
1058
-msgstr "Általános"
1059
+#. translators: this message is displayed
1060
+#. while data is retrieved
1061
+#: src/LyricsPage.cxx:340
1062
+msgid "loading..."
1063
+msgstr "betöltés..."
1064
 
1065
-#: src/screen_help.cxx:121
1066
-msgid "Play"
1067
-msgstr "Lejátszás"
1068
+#: src/LyricsPage.cxx:361
1069
+msgid "Editor not configured"
1070
+msgstr ""
1071
 
1072
-#: src/screen_help.cxx:124
1073
-msgid "Move song up"
1074
-msgstr "Szám mozgatása felfelé"
1075
+#: src/LyricsPage.cxx:368
1076
+msgid "Do you really want to start an editor and edit these lyrics?"
1077
+msgstr ""
1078
 
1079
-#: src/screen_help.cxx:125
1080
-msgid "Move song down"
1081
-msgstr "Szám mozgatása lefelé"
1082
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1083
+msgid "Can't start editor"
1084
+msgstr ""
1085
 
1086
-#: src/screen_help.cxx:128
1087
-msgid "Center"
1088
-msgstr "Közép"
1089
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1090
+msgid "Editor exited unexpectedly"
1091
+msgstr ""
1092
 
1093
-#: src/screen_help.cxx:136
1094
-msgid "Enter directory/Select and play song"
1095
-msgstr "Könyvtár megadása/szám kiválasztása és lejátszása"
1096
+#. lyrics for the song were saved on hard disk
1097
+#: src/LyricsPage.cxx:439
1098
+msgid "Lyrics saved"
1099
+msgstr "Dalszövegek elmentve"
1100
 
1101
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1102
-#, fuzzy
1103
-msgid "Append song to queue"
1104
-msgstr "Szám hozzáadása a lejátszólistához"
1105
+#: src/LyricsPage.cxx:445
1106
+msgid "Lyrics deleted"
1107
+msgstr ""
1108
 
1109
-#: src/screen_help.cxx:140
1110
-msgid "Delete playlist"
1111
-msgstr "Lejátszólista törlése"
1112
+#: src/LyricsPage.cxx:446
1113
+msgid "No saved lyrics"
1114
+msgstr ""
1115
 
1116
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1117
-msgid "Search"
1118
-msgstr "Keresés"
1119
+#: src/Main.cxx:167
1120
+#, fuzzy, c-format
1121
+msgid "Connecting to %s"
1122
+msgstr "Csatlakoztatva ide: %s"
1123
 
1124
-#: src/screen_help.cxx:151
1125
-msgid "Select and play"
1126
-msgstr "Kiválasztás és lejátszás"
1127
+#: src/Main.cxx:187
1128
+#, fuzzy, c-format
1129
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1130
+msgstr "Hiba: a(z) %d.%d.%d MPD verzió túl régi (%s kell)"
1131
 
1132
-#: src/screen_help.cxx:162
1133
-msgid "View Lyrics"
1134
-msgstr "Dalszövegek megtekintése"
1135
+#. To translators: these credits are shown
1136
+#. when ncmpc is started with "--version"
1137
+#: src/options.cxx:213 src/options.cxx:216
1138
+msgid "translator-credits"
1139
+msgstr ""
1140
+"Launchpad Contributions:\n"
1141
+"  Kiszel Kristóf https://launchpad.net/~ulysses\n"
1142
+"  Laszlo Ashin https://launchpad.net/~kodest"
1143
 
1144
-#: src/screen_help.cxx:163
1145
-msgid "(Re)load lyrics"
1146
-msgstr "Dalszövegek (újra)töltése"
1147
+#: src/OutputsPage.cxx:87
1148
+#, c-format
1149
+msgid "Output '%s' enabled"
1150
+msgstr "Kimenet engedélyezve: %s"
1151
 
1152
-#. to translators: this hotkey aborts the retrieval of lyrics
1153
-#. from the server
1154
-#: src/screen_help.cxx:166
1155
-msgid "Interrupt retrieval"
1156
-msgstr "Újrapróbálkozás megszakítása"
1157
+#: src/OutputsPage.cxx:98
1158
+#, c-format
1159
+msgid "Output '%s' disabled"
1160
+msgstr "Kimenet tiltva: %s"
1161
 
1162
-#: src/screen_help.cxx:167
1163
-msgid "Download lyrics for currently playing song"
1164
-msgstr "Dalszöveg letöltése a jelenlegi zenéhez"
1165
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1166
+msgid "Outputs"
1167
+msgstr "Kimenetek"
1168
 
1169
-#: src/screen_help.cxx:168
1170
-msgid "Add or edit lyrics"
1171
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1172
+msgid "Shuffled queue"
1173
 msgstr ""
1174
 
1175
-#: src/screen_help.cxx:169
1176
-msgid "Save lyrics"
1177
-msgstr "Dalszövegek mentése"
1178
+#: src/player_command.cxx:186
1179
+msgid "Cleared queue"
1180
+msgstr ""
1181
 
1182
-#: src/screen_help.cxx:170
1183
-msgid "Delete saved lyrics"
1184
+#. get path
1185
+#: src/QueuePage.cxx:307
1186
+msgid "Add"
1187
+msgstr "Hozzáadás"
1188
+
1189
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1190
+msgid "Queue"
1191
 msgstr ""
1192
 
1193
-#: src/screen_help.cxx:177
1194
-msgid "Enable/disable output"
1195
-msgstr "Kimenet engedélyezése/tiltása"
1196
+#: src/QueuePage.cxx:380
1197
+#, c-format
1198
+msgid "Queue on %s"
1199
+msgstr ""
1200
 
1201
-#: src/screen_help.cxx:184
1202
-msgid "Write a message"
1203
+#. query the user for a filename
1204
+#: src/save_playlist.cxx:85
1205
+msgid "Save queue as"
1206
 msgstr ""
1207
 
1208
-#: src/screen_help.cxx:189
1209
-msgid "Keydef screen"
1210
-msgstr "Billentyű beállító képernyő"
1211
+#: src/save_playlist.cxx:107
1212
+#, fuzzy, c-format
1213
+msgid "Replace %s?"
1214
+msgstr "Cserélni a következőt: %s [%s/%s]? "
1215
 
1216
-#: src/screen_help.cxx:191
1217
-msgid "Edit keydefs for selected command"
1218
-msgstr "Billentyű szerkesztése a kiválasztott parancshoz"
1219
+#. success
1220
+#: src/save_playlist.cxx:128
1221
+#, c-format
1222
+msgid "Saved %s"
1223
+msgstr "%s elmentve"
1224
 
1225
-#: src/screen_help.cxx:192
1226
-msgid "Remove selected keydef"
1227
-msgstr "Billentyű hozzárendelés megszűntetése"
1228
+#: src/screen_artist.cxx:186
1229
+#, c-format
1230
+msgid "All tracks of artist: %s"
1231
+msgstr "%s előadó minden száma"
1232
+
1233
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1234
+msgid "Album"
1235
+msgstr "Album"
1236
+
1237
+#: src/screen_artist.cxx:195
1238
+#, fuzzy, c-format
1239
+msgid "Tracks of no album of artist: %s"
1240
+msgstr "%s előadó albumai"
1241
 
1242
-#: src/screen_help.cxx:193
1243
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1244
+msgid "Artist"
1245
+msgstr "Előadó"
1246
+
1247
+#: src/screen_client.cxx:41
1248
 #, fuzzy
1249
-msgid "Add a keydef"
1250
-msgstr "Új gomb hozzáadása"
1251
+msgid "Database update running"
1252
+msgstr "Adatbázis frissítés folyamatban..."
1253
 
1254
-#: src/screen_help.cxx:194
1255
-msgid "Go up a level"
1256
-msgstr "Egy szinttel feljebb"
1257
+#: src/screen_client.cxx:48
1258
+#, c-format
1259
+msgid "Database update of %s started"
1260
+msgstr "%s adatbázis frissítése elkezdődött"
1261
 
1262
-#: src/screen_help.cxx:195
1263
-msgid "Apply and save changes"
1264
-msgstr "Alkalmaz és menti a változásokat"
1265
+#: src/screen_client.cxx:51
1266
+msgid "Database update started"
1267
+msgstr "Adatbázis frissítés elindult"
1268
 
1269
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1270
-msgid "Help"
1271
-msgstr "Súgó"
1272
+#: src/screen.cxx:160
1273
+msgid "Repeat mode is on"
1274
+msgstr "Ismétlő mód be"
1275
 
1276
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1277
-msgid "Error: Screen too small"
1278
-msgstr "Hiba: a képernyő túl kicsi"
1279
+#: src/screen.cxx:161
1280
+msgid "Repeat mode is off"
1281
+msgstr "Ismétlő mód ki"
1282
 
1283
-#: src/screen_keydef.cxx:141
1284
-msgid "You have new key bindings"
1285
-msgstr "Új billentyű beállításaid vannak"
1286
+#: src/screen.cxx:165
1287
+msgid "Random mode is on"
1288
+msgstr "Véletlen mód be"
1289
 
1290
-#: src/screen_keydef.cxx:143
1291
-msgid "Keybindings unchanged."
1292
-msgstr "A billentyű beállítások változatlanok."
1293
+#: src/screen.cxx:166
1294
+msgid "Random mode is off"
1295
+msgstr "Véletlen mód ki"
1296
 
1297
-#: src/screen_keydef.cxx:153
1298
-#, c-format
1299
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1300
-msgstr "Hiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %s"
1301
+#. "single" mode means
1302
+#. that MPD will
1303
+#. automatically stop
1304
+#. after playing one
1305
+#. single song
1306
+#: src/screen.cxx:175
1307
+msgid "Single mode is on"
1308
+msgstr "Egyszeri lejátszás mód be"
1309
+
1310
+#: src/screen.cxx:176
1311
+msgid "Single mode is off"
1312
+msgstr "Egyszeri lejátszás mód ki"
1313
+
1314
+#. "consume" mode means
1315
+#. that MPD removes each
1316
+#. song which has
1317
+#. finished playing
1318
+#: src/screen.cxx:184
1319
+msgid "Consume mode is on"
1320
+msgstr "Fogyasztó mód be"
1321
 
1322
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1323
+#: src/screen.cxx:185
1324
+msgid "Consume mode is off"
1325
+msgstr "Fogyasztó mód ki"
1326
+
1327
+#: src/screen.cxx:188
1328
 #, c-format
1329
-msgid "Error: %s - %s"
1330
-msgstr "Hiba: %s - %s"
1331
+msgid "Crossfade %d seconds"
1332
+msgstr "Egymásba mosás %d másodperc"
1333
+
1334
+#: src/screen.cxx:200
1335
+msgid "Database updated"
1336
+msgstr "Adatbázis frissítve"
1337
+
1338
+#: src/screen.cxx:250
1339
+msgid "Find mode: Wrapped"
1340
+msgstr "Keresési mód: újrakezdő"
1341
+
1342
+#: src/screen.cxx:251
1343
+msgid "Find mode: Normal"
1344
+msgstr "Keresési mód: normál"
1345
 
1346
-#: src/screen_keydef.cxx:171
1347
+#: src/screen.cxx:256
1348
+msgid "Auto center mode: On"
1349
+msgstr "Középre igazítás bekapcsolva"
1350
+
1351
+#: src/screen.cxx:257
1352
+msgid "Auto center mode: Off"
1353
+msgstr "Középre igazítás kikapcsolva"
1354
+
1355
+#: src/screen_find.cxx:31
1356
+msgid "Find"
1357
+msgstr "Keresés"
1358
+
1359
+#: src/screen_find.cxx:32
1360
+msgid "Find backward"
1361
+msgstr "Keresés visszafelé"
1362
+
1363
+#: src/screen_find.cxx:33
1364
+msgid "Jump"
1365
+msgstr "Ugrás"
1366
+
1367
+#: src/screen_find.cxx:79
1368
 #, c-format
1369
-msgid "Wrote %s"
1370
-msgstr "%s elmentve"
1371
+msgid "Unable to find '%s'"
1372
+msgstr "'%s' nem található"
1373
 
1374
-#: src/screen_keydef.cxx:250
1375
+#: src/screen_keydef.cxx:161
1376
 msgid "Deleted"
1377
 msgstr "Törölve"
1378
 
1379
-#: src/screen_keydef.cxx:265
1380
+#: src/screen_keydef.cxx:177
1381
 #, c-format
1382
 msgid "Enter new key for %s: "
1383
 msgstr "Nyomd meg az új gombot a következőhöz: %s: "
1384
 
1385
-#: src/screen_keydef.cxx:276
1386
+#: src/screen_keydef.cxx:187
1387
 msgid "Ctrl-Space can't be used"
1388
 msgstr ""
1389
 
1390
-#: src/screen_keydef.cxx:282
1391
+#: src/screen_keydef.cxx:193
1392
 #, c-format
1393
 msgid "Error: key %s is already used for %s"
1394
 msgstr "Hiba: %s gombot már a következő funkció használja: %s"
1395
 
1396
-#: src/screen_keydef.cxx:291
1397
+#: src/screen_keydef.cxx:202
1398
 #, c-format
1399
 msgid "Assigned %s to %s"
1400
 msgstr "%s hozzárendelve a következőhöz: %s"
1401
 
1402
-#: src/screen_keydef.cxx:317
1403
-msgid "===> Apply key bindings "
1404
-msgstr "===> Billentyű beállítások használata "
1405
-
1406
-#: src/screen_keydef.cxx:319
1407
-msgid "===> Apply & Save key bindings  "
1408
-msgstr "===> Alkalmaz és Menti a billentyű beállításokat  "
1409
-
1410
-#: src/screen_keydef.cxx:347
1411
+#: src/screen_keydef.cxx:229
1412
 msgid "Add new key"
1413
 msgstr "Új gomb hozzáadása"
1414
 
1415
-#: src/screen_keydef.cxx:410
1416
-msgid "Note: Did you forget to 'Apply' your changes?"
1417
-msgstr "Észrevétel: nem felejtetted el érvényesíteni a változtatásaidat?"
1418
-
1419
-#: src/screen_keydef.cxx:417
1420
-msgid "Edit key bindings"
1421
-msgstr "Billentyűk változtatása"
1422
-
1423
-#: src/screen_keydef.cxx:419
1424
+#: src/screen_keydef.cxx:251
1425
 #, c-format
1426
 msgid "Edit keys for %s"
1427
 msgstr "Gombok módosítása a következőhöz: %s"
1428
 
1429
-#. translators: no lyrics were found for the song
1430
-#: src/screen_lyrics.cxx:208
1431
-msgid "No lyrics"
1432
-msgstr "Nincs dalszöveg"
1433
-
1434
-#: src/screen_lyrics.cxx:226
1435
-#, c-format
1436
-msgid "Lyrics timeout occurred after %d seconds"
1437
-msgstr ""
1438
-
1439
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1440
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1441
-msgid "Lyrics"
1442
-msgstr "Dalszövegek"
1443
-
1444
-#. translators: this message is displayed
1445
-#. while data is retrieved
1446
-#: src/screen_lyrics.cxx:330
1447
-msgid "loading..."
1448
-msgstr "betöltés..."
1449
-
1450
-#: src/screen_lyrics.cxx:361
1451
-msgid "Editor not configured"
1452
-msgstr ""
1453
-
1454
-#: src/screen_lyrics.cxx:367
1455
-msgid "Do you really want to start an editor and edit these lyrics?"
1456
-msgstr ""
1457
+#: src/screen_keydef.cxx:393
1458
+msgid "You have new key bindings"
1459
+msgstr "Új billentyű beállításaid vannak"
1460
 
1461
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1462
-msgid "Can't start editor"
1463
-msgstr ""
1464
+#: src/screen_keydef.cxx:395
1465
+msgid "Keybindings unchanged."
1466
+msgstr "A billentyű beállítások változatlanok."
1467
 
1468
-#: src/screen_lyrics.cxx:411
1469
-#, c-format
1470
-msgid "Editor exited unexpectedly (%d)"
1471
-msgstr ""
1472
+#: src/screen_keydef.cxx:405
1473
+#, fuzzy
1474
+msgid "Unable to write configuration"
1475
+msgstr "Hiányos gyorsbillentyű definíció"
1476
 
1477
-#: src/screen_lyrics.cxx:414
1478
+#: src/screen_keydef.cxx:421
1479
 #, c-format
1480
-msgid "Editor exited unexpectedly (signal %d)"
1481
-msgstr ""
1482
-
1483
-#. lyrics for the song were saved on hard disk
1484
-#: src/screen_lyrics.cxx:436
1485
-msgid "Lyrics saved"
1486
-msgstr "Dalszövegek elmentve"
1487
-
1488
-#: src/screen_lyrics.cxx:443
1489
-msgid "Lyrics deleted"
1490
-msgstr ""
1491
-
1492
-#: src/screen_lyrics.cxx:446
1493
-msgid "No saved lyrics"
1494
-msgstr ""
1495
+msgid "Wrote %s"
1496
+msgstr "%s elmentve"
1497
 
1498
-#: src/screen_outputs.cxx:60
1499
-#, c-format
1500
-msgid "Output '%s' enabled"
1501
-msgstr "Kimenet engedélyezve: %s"
1502
+#: src/screen_keydef.cxx:433
1503
+msgid "===> Apply key bindings "
1504
+msgstr "===> Billentyű beállítások használata "
1505
 
1506
-#: src/screen_outputs.cxx:71
1507
-#, c-format
1508
-msgid "Output '%s' disabled"
1509
-msgstr "Kimenet tiltva: %s"
1510
+#: src/screen_keydef.cxx:435
1511
+msgid "===> Apply & Save key bindings  "
1512
+msgstr "===> Alkalmaz és Menti a billentyű beállításokat  "
1513
 
1514
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1515
-msgid "Outputs"
1516
-msgstr "Kimenetek"
1517
+#: src/screen_keydef.cxx:472
1518
+msgid "Edit key bindings"
1519
+msgstr "Billentyűk változtatása"
1520
 
1521
-#. get path
1522
-#: src/screen_queue.cxx:274
1523
-msgid "Add"
1524
-msgstr "Hozzáadás"
1525
+#: src/screen_keydef.cxx:554
1526
+msgid "Note: Did you forget to 'Apply' your changes?"
1527
+msgstr "Észrevétel: nem felejtetted el érvényesíteni a változtatásaidat?"
1528
 
1529
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1530
-msgid "Queue"
1531
+#: src/screen_keydef.cxx:604
1532
+msgid "Keys"
1533
 msgstr ""
1534
 
1535
-#: src/screen_queue.cxx:384
1536
-#, c-format
1537
-msgid "Queue on %s"
1538
-msgstr ""
1539
+#: src/screen_utils.cxx:124
1540
+msgid "Password"
1541
+msgstr "Jelszó"
1542
 
1543
-#: src/screen_search.cxx:48
1544
+#: src/SearchPage.cxx:51
1545
 msgid "artist"
1546
 msgstr "előadó"
1547
 
1548
-#: src/screen_search.cxx:49
1549
+#: src/SearchPage.cxx:52
1550
 msgid "album"
1551
 msgstr "album"
1552
 
1553
-#: src/screen_search.cxx:50
1554
+#: src/SearchPage.cxx:53
1555
 msgid "title"
1556
 msgstr "cím"
1557
 
1558
-#: src/screen_search.cxx:51
1559
+#: src/SearchPage.cxx:54
1560
 msgid "track"
1561
 msgstr "szám"
1562
 
1563
-#: src/screen_search.cxx:52
1564
+#: src/SearchPage.cxx:55
1565
 msgid "name"
1566
 msgstr "név"
1567
 
1568
-#: src/screen_search.cxx:53
1569
+#: src/SearchPage.cxx:56
1570
 msgid "genre"
1571
 msgstr "műfaj"
1572
 
1573
-#: src/screen_search.cxx:54
1574
+#: src/SearchPage.cxx:57
1575
 msgid "date"
1576
 msgstr "dátum"
1577
 
1578
-#: src/screen_search.cxx:55
1579
+#: src/SearchPage.cxx:58
1580
 msgid "composer"
1581
 msgstr "zeneszerző"
1582
 
1583
-#: src/screen_search.cxx:56
1584
+#: src/SearchPage.cxx:59
1585
 msgid "performer"
1586
 msgstr "előadó"
1587
 
1588
-#: src/screen_search.cxx:57
1589
+#: src/SearchPage.cxx:60
1590
 msgid "comment"
1591
 msgstr "megjegyzés"
1592
 
1593
-#: src/screen_search.cxx:65
1594
+#: src/SearchPage.cxx:68
1595
 msgid "file"
1596
 msgstr "fájl"
1597
 
1598
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1599
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1600
 msgid "Title"
1601
 msgstr "Cím"
1602
 
1603
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1604
-msgid "Artist"
1605
-msgstr "Előadó"
1606
-
1607
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1608
-msgid "Album"
1609
-msgstr "Album"
1610
-
1611
-#: src/screen_search.cxx:85
1612
+#: src/SearchPage.cxx:88
1613
 msgid "Filename"
1614
 msgstr "Fájlnév"
1615
 
1616
-#: src/screen_search.cxx:86
1617
+#: src/SearchPage.cxx:89
1618
 msgid "Artist + Title"
1619
 msgstr "Előadó és Cím"
1620
 
1621
-#: src/screen_search.cxx:244
1622
-#, c-format
1623
-msgid "No argument for search tag %s"
1624
-msgstr "Nincs argumentuma a(z) %s keresési elemnek"
1625
-
1626
-#: src/screen_search.cxx:253
1627
+#: src/SearchPage.cxx:270
1628
 #, c-format
1629
 msgid "Bad search tag %s"
1630
 msgstr "Hibás keresési elem %s"
1631
 
1632
-#. if( pattern==nullptr )
1633
-#. search_new(screen, c);
1634
-#. else
1635
-#: src/screen_search.cxx:400
1636
-#, c-format
1637
-msgid "Press %s for a new search"
1638
-msgstr "Új kereséshez nyomj %s gombot"
1639
-
1640
-#: src/screen_search.cxx:427
1641
-#, c-format
1642
-msgid "Search: %s"
1643
-msgstr "Keresés: %s"
1644
-
1645
-#: src/screen_search.cxx:430
1646
+#: src/SearchPage.cxx:284
1647
 #, c-format
1648
-msgid "Search: Results for %s [%s]"
1649
-msgstr "Keresés: találatok a következőhöz %s [%s]"
1650
+msgid "No argument for search tag %s"
1651
+msgstr "Nincs argumentuma a(z) %s keresési elemnek"
1652
 
1653
-#: src/screen_search.cxx:434
1654
-#, c-format
1655
-msgid "Search: Press %s for a new search [%s]"
1656
-msgstr "Keresés: új kereséshez nyomj %s gombot [%s]"
1657
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1658
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1659
+msgid "Search"
1660
+msgstr "Keresés"
1661
 
1662
-#: src/screen_search.cxx:458
1663
+#: src/SearchPage.cxx:436
1664
 #, c-format
1665
 msgid "Search mode: %s"
1666
 msgstr "Keresési mód: %s"
1667
 
1668
-#: src/screen_song.cxx:54
1669
+#: src/SongPage.cxx:67
1670
 msgid "Length"
1671
 msgstr "Hossz"
1672
 
1673
-#: src/screen_song.cxx:55
1674
+#: src/SongPage.cxx:68
1675
 msgid "Position"
1676
 msgstr ""
1677
 
1678
-#: src/screen_song.cxx:56
1679
+#: src/SongPage.cxx:69
1680
 msgid "Composer"
1681
 msgstr "Zeneszerző"
1682
 
1683
-#: src/screen_song.cxx:57
1684
+#: src/SongPage.cxx:70
1685
 msgid "Name"
1686
 msgstr "Név"
1687
 
1688
-#: src/screen_song.cxx:58
1689
+#: src/SongPage.cxx:71
1690
 msgid "Disc"
1691
 msgstr "Lemez"
1692
 
1693
-#: src/screen_song.cxx:59
1694
+#: src/SongPage.cxx:72
1695
 msgid "Track"
1696
 msgstr "Szám"
1697
 
1698
-#: src/screen_song.cxx:60
1699
+#: src/SongPage.cxx:73
1700
 msgid "Date"
1701
 msgstr "Dátum"
1702
 
1703
-#: src/screen_song.cxx:61
1704
+#: src/SongPage.cxx:74
1705
 msgid "Genre"
1706
 msgstr "Műfaj"
1707
 
1708
-#: src/screen_song.cxx:62
1709
+#: src/SongPage.cxx:75
1710
 msgid "Comment"
1711
 msgstr "Megjegyzés"
1712
 
1713
-#: src/screen_song.cxx:63
1714
+#: src/SongPage.cxx:76
1715
 msgid "Path"
1716
 msgstr "Elérési út"
1717
 
1718
-#: src/screen_song.cxx:64
1719
+#: src/SongPage.cxx:77
1720
 msgid "Bitrate"
1721
 msgstr "Bitráta"
1722
 
1723
-#: src/screen_song.cxx:65
1724
+#: src/SongPage.cxx:78
1725
 msgid "Format"
1726
 msgstr ""
1727
 
1728
-#: src/screen_song.cxx:82
1729
+#: src/SongPage.cxx:95
1730
 msgid "Number of artists"
1731
 msgstr "Előadók száma"
1732
 
1733
-#: src/screen_song.cxx:83
1734
+#: src/SongPage.cxx:96
1735
 msgid "Number of albums"
1736
 msgstr "Albumok száma"
1737
 
1738
-#: src/screen_song.cxx:84
1739
+#: src/SongPage.cxx:97
1740
 msgid "Number of songs"
1741
 msgstr "Zenék száma"
1742
 
1743
-#: src/screen_song.cxx:85
1744
+#: src/SongPage.cxx:98
1745
 msgid "Uptime"
1746
 msgstr "Üzemidő"
1747
 
1748
-#: src/screen_song.cxx:86
1749
+#: src/SongPage.cxx:99
1750
 msgid "Most recent db update"
1751
 msgstr "Legutóbbi adatbázis frissítés"
1752
 
1753
-#: src/screen_song.cxx:87
1754
+#: src/SongPage.cxx:100
1755
 msgid "Playtime"
1756
 msgstr "Lejátszási idő"
1757
 
1758
-#: src/screen_song.cxx:88
1759
+#: src/SongPage.cxx:101
1760
 msgid "DB playtime"
1761
 msgstr "Teljes adatbázis lejátszási ideje"
1762
 
1763
-#: src/screen_song.cxx:173
1764
+#: src/SongPage.cxx:204
1765
 msgid "Song viewer"
1766
 msgstr "Szám néző"
1767
 
1768
-#: src/screen_song.cxx:337
1769
+#: src/SongPage.cxx:370
1770
 msgid "MPD statistics"
1771
 msgstr "MPD statisztika"
1772
 
1773
-#: src/screen_song.cxx:427
1774
+#: src/SongPage.cxx:455
1775
 msgid "Selected song"
1776
 msgstr "Kiválasztott zene"
1777
 
1778
-#: src/screen_song.cxx:437
1779
+#: src/SongPage.cxx:465
1780
 msgid "Currently playing song"
1781
 msgstr "Jelenlegi zene"
1782
 
1783
-#: src/screen_song.cxx:442
1784
+#: src/SongPage.cxx:470
1785
 #, c-format
1786
 msgid "%d kbps"
1787
 msgstr "%d kbps"
1788
 
1789
-#. NOTE: if one day a translator decides to use a multi-byte character
1790
-#. for one of the yes/no keys, we'll have to parse it properly
1791
-#: src/screen_utils.cxx:80
1792
-#, fuzzy, c-format
1793
-msgid "%s [%s/%s] "
1794
-msgstr "Cserélni a következőt: %s [%s/%s]? "
1795
-
1796
-#: src/screen_utils.cxx:121
1797
-msgid "Password"
1798
-msgstr "Jelszó"
1799
+#: src/SongPage.cxx:554
1800
+msgid "Song"
1801
+msgstr ""
1802
 
1803
-#: src/status_bar.cxx:121
1804
+#: src/StatusBar.cxx:104
1805
 msgid "Playing:"
1806
 msgstr "Ami szól:"
1807
 
1808
-#: src/status_bar.cxx:124
1809
+#: src/StatusBar.cxx:108
1810
 msgid "[Paused]"
1811
 msgstr "[Szüneteltetve]"
1812
 
1813
-#: src/title_bar.cxx:99
1814
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1815
+#, fuzzy
1816
+msgid "Unknown color"
1817
+msgstr "Ismeretlen parancs"
1818
+
1819
+#: src/Styles.cxx:333
1820
+#, fuzzy
1821
+msgid "Unknown color field"
1822
+msgstr "Figyelem: ismeretlen szín mező - %s\n"
1823
+
1824
+#: src/Styles.cxx:375
1825
+msgid "Terminal lacks color capabilities"
1826
+msgstr "A terminál nem támogatja a színeket"
1827
+
1828
+#: src/time_format.cxx:44
1829
+msgid "year"
1830
+msgstr ""
1831
+
1832
+#: src/time_format.cxx:46
1833
+msgid "years"
1834
+msgstr ""
1835
+
1836
+#: src/time_format.cxx:54
1837
+msgid "week"
1838
+msgstr ""
1839
+
1840
+#: src/time_format.cxx:57
1841
+msgid "weeks"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:65
1845
+msgid "day"
1846
+msgstr ""
1847
+
1848
+#: src/time_format.cxx:68
1849
+msgid "days"
1850
+msgstr ""
1851
+
1852
+#: src/TitleBar.cxx:100
1853
 msgid "Volume n/a"
1854
 msgstr "Hangerő ismeretlen"
1855
 
1856
-#: src/title_bar.cxx:101
1857
+#: src/TitleBar.cxx:102
1858
 #, c-format
1859
 msgid "Volume %d%%"
1860
 msgstr "Hangerő %d%%"
1861
 
1862
+#, fuzzy
1863
+#~ msgid "Add url/file to queue"
1864
+#~ msgstr "URL vagy fájl hozzáadása a lejátszólistához"
1865
+
1866
+#~ msgid "Move song up"
1867
+#~ msgstr "Szám mozgatása felfelé"
1868
+
1869
+#~ msgid "Move song down"
1870
+#~ msgstr "Szám mozgatása lefelé"
1871
+
1872
+#~ msgid "Press %s for a new search"
1873
+#~ msgstr "Új kereséshez nyomj %s gombot"
1874
+
1875
+#~ msgid "Search: %s"
1876
+#~ msgstr "Keresés: %s"
1877
+
1878
+#~ msgid "Search: Results for %s [%s]"
1879
+#~ msgstr "Keresés: találatok a következőhöz %s [%s]"
1880
+
1881
+#~ msgid "Search: Press %s for a new search [%s]"
1882
+#~ msgstr "Keresés: új kereséshez nyomj %s gombot [%s]"
1883
+
1884
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1885
+#~ msgstr ""
1886
+#~ "Kapcsolódás a következőhöz: %s... [Nyomj %s gombot a megszakításhoz]"
1887
+
1888
+#~ msgid "press %s for the key editor"
1889
+#~ msgstr "nyomj %s-t a szerkesztéshez"
1890
+
1891
+#~ msgid "Album: %s - %s"
1892
+#~ msgstr "Album: %s - %s"
1893
+
1894
+#, fuzzy
1895
+#~ msgid "Adding album %s..."
1896
+#~ msgstr "%s lejátszólista betöltése..."
1897
+
1898
+#, fuzzy
1899
+#~ msgid "Adding %s..."
1900
+#~ msgstr "%s könyvtár hozzáadása...\n"
1901
+
1902
+#~ msgid "Error: Screen too small"
1903
+#~ msgstr "Hiba: a képernyő túl kicsi"
1904
+
1905
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1906
+#~ msgstr "Hiba: nem sikerül létrehozni a ~/.ncmpc katalógust - %s"
1907
+
1908
+#~ msgid "Error: %s - %s"
1909
+#~ msgstr "Hiba: %s - %s"
1910
+
1911
+#, fuzzy
1912
+#~ msgid "%s [%s/%s] "
1913
+#~ msgstr "Cserélni a következőt: %s [%s/%s]? "
1914
+
1915
 #~ msgid "Delete playlist %s [%s/%s] ? "
1916
 #~ msgstr "Törlöd a %s lejátszólistát [%s/%s]? "
1917
 
1918
 #~ msgid "Warning: Unknown color - %s\n"
1919
 #~ msgstr "Figyelem: ismeretlen szín - %s\n"
1920
 
1921
-#~ msgid "Connected to %s"
1922
-#~ msgstr "Csatlakoztatva ide: %s"
1923
-
1924
 #~ msgid "Shuffled playlist"
1925
 #~ msgstr "Lejátszólista összekeverve"
1926
 
1927
ncmpc-0.30.tar.xz/po/it.po -> ncmpc-0.32.tar.xz/po/it.po Changed
1907
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-10-31 19:53+0000\n"
8
 "Last-Translator: simone.sandri <Unknown>\n"
9
 "Language-Team: Italian <it@li.org>\n"
10
@@ -18,418 +18,356 @@
11
 "X-Launchpad-Export-Date: 2011-01-05 20:00+0000\n"
12
 "X-Generator: Launchpad (build 12138)\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
17
+msgid "All tracks"
18
+msgstr "Tutte le piste"
19
+
20
+#: src/AlbumListPage.cxx:144
21
+#, fuzzy
22
+msgid "Albums"
23
+msgstr "Album"
24
+
25
+#: src/AlbumListPage.cxx:146
26
+#, c-format
27
+msgid "Albums of artist: %s"
28
+msgstr "Album del artista: %s"
29
+
30
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
31
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
32
+#, fuzzy, c-format
33
+msgid "Adding '%s' to queue"
34
+msgstr "Aggiungendo '%s' alla lista di canzoni"
35
+
36
+#: src/ArtistListPage.cxx:114
37
+msgid "All artists"
38
+msgstr "Tutti gli artisti"
39
+
40
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
41
+#, c-format
42
+msgid "Key %s assigned to %s and %s"
43
 msgstr ""
44
 
45
-#: src/colors.cxx:195
46
-msgid "Unknown color field"
47
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
48
+msgid "Chat"
49
 msgstr ""
50
 
51
-#: src/colors.cxx:228
52
-msgid "Terminal lacks support for changing colors"
53
+#: src/ChatPage.cxx:160
54
+msgid "Your message"
55
 msgstr ""
56
 
57
-#: src/colors.cxx:237
58
-msgid "Terminal lacks color capabilities"
59
+#: src/ChatPage.cxx:169
60
+msgid "Message could not be sent"
61
 msgstr ""
62
 
63
-#: src/command.cxx:63
64
+#: src/Command.cxx:29
65
 msgid "Key configuration screen"
66
 msgstr ""
67
 
68
-#: src/command.cxx:66
69
+#: src/Command.cxx:32
70
 msgid "Quit"
71
 msgstr "Esci"
72
 
73
-#: src/command.cxx:70
74
+#: src/Command.cxx:36
75
 msgid "Move cursor up"
76
 msgstr "Muovi cursore in alto"
77
 
78
-#: src/command.cxx:72
79
+#: src/Command.cxx:38
80
 msgid "Move cursor down"
81
 msgstr "Muovi cursore in basso"
82
 
83
-#: src/command.cxx:74
84
+#: src/Command.cxx:40
85
 msgid "Move cursor to the top of screen"
86
 msgstr "Muovi cursore in cima allo schermo"
87
 
88
-#: src/command.cxx:76
89
+#: src/Command.cxx:42
90
 msgid "Move cursor to the middle of screen"
91
 msgstr "Muovi cursore in mezzo allo schermo"
92
 
93
-#: src/command.cxx:78
94
+#: src/Command.cxx:44
95
 msgid "Move cursor to the bottom of screen"
96
 msgstr "Muovi cursore in fondo allo schermo"
97
 
98
-#: src/command.cxx:80
99
+#: src/Command.cxx:46
100
 msgid "Move cursor to the top of the list"
101
 msgstr "Muovi cursore in cima alla lista"
102
 
103
-#: src/command.cxx:82
104
+#: src/Command.cxx:48
105
 msgid "Move cursor to the bottom of the list"
106
 msgstr "Muovi cursore in fondo alla lista"
107
 
108
-#: src/command.cxx:84
109
+#: src/Command.cxx:50
110
 msgid "Page up"
111
 msgstr "Pagina sopra"
112
 
113
-#: src/command.cxx:86
114
+#: src/Command.cxx:52
115
 msgid "Page down"
116
 msgstr "Pagina sotto"
117
 
118
-#: src/command.cxx:88
119
+#: src/Command.cxx:54
120
 msgid "Range selection"
121
 msgstr ""
122
 
123
-#: src/command.cxx:90
124
+#: src/Command.cxx:56
125
 msgid "Scroll down one line"
126
 msgstr ""
127
 
128
-#: src/command.cxx:92
129
+#: src/Command.cxx:58
130
 msgid "Scroll up one line"
131
 msgstr ""
132
 
133
-#: src/command.cxx:94
134
+#: src/Command.cxx:60
135
 msgid "Scroll up half a screen"
136
 msgstr ""
137
 
138
-#: src/command.cxx:96
139
+#: src/Command.cxx:62
140
 msgid "Scroll down half a screen"
141
 msgstr ""
142
 
143
-#: src/command.cxx:98
144
+#: src/Command.cxx:64
145
 msgid "Select currently playing song"
146
 msgstr ""
147
 
148
-#: src/command.cxx:103
149
+#: src/Command.cxx:69
150
 msgid "Help screen"
151
 msgstr ""
152
 
153
-#: src/command.cxx:105 src/screen_help.cxx:119
154
+#: src/Command.cxx:71 src/HelpPage.cxx:140
155
 #, fuzzy
156
 msgid "Queue screen"
157
 msgstr "Schermo di tasti di acceso"
158
 
159
-#: src/command.cxx:107 src/screen_help.cxx:134
160
+#: src/Command.cxx:73 src/HelpPage.cxx:155
161
 msgid "Browse screen"
162
 msgstr ""
163
 
164
-#: src/command.cxx:112
165
+#: src/Command.cxx:78
166
 msgid "Play/Enter directory"
167
 msgstr "Esegui/Entra nella cartella"
168
 
169
-#: src/command.cxx:114
170
+#: src/Command.cxx:80
171
 msgid "Pause"
172
 msgstr "Pausa"
173
 
174
-#: src/command.cxx:116
175
+#: src/Command.cxx:82
176
 msgid "Stop"
177
 msgstr "Ferma"
178
 
179
-#: src/command.cxx:118
180
+#: src/Command.cxx:84
181
 msgid "Crop"
182
 msgstr ""
183
 
184
-#: src/command.cxx:120
185
+#: src/Command.cxx:86
186
 msgid "Next track"
187
 msgstr "Prossima traccia"
188
 
189
-#: src/command.cxx:122
190
+#: src/Command.cxx:88
191
 msgid "Previous track"
192
 msgstr "Traccia precedente"
193
 
194
-#: src/command.cxx:124
195
+#: src/Command.cxx:90
196
 msgid "Seek forward"
197
 msgstr ""
198
 
199
-#: src/command.cxx:126
200
+#: src/Command.cxx:92
201
 msgid "Seek backward"
202
 msgstr ""
203
 
204
-#: src/command.cxx:128
205
+#: src/Command.cxx:94
206
 msgid "Increase volume"
207
 msgstr "Alza volume"
208
 
209
-#: src/command.cxx:130
210
+#: src/Command.cxx:96
211
 msgid "Decrease volume"
212
 msgstr "Abbassa volume"
213
 
214
-#: src/command.cxx:132
215
+#: src/Command.cxx:98
216
 msgid "Select/deselect song in queue"
217
 msgstr ""
218
 
219
-#: src/command.cxx:134
220
+#: src/Command.cxx:100
221
 msgid "Select all listed items"
222
 msgstr "Seleziona tutti gli oggetti della lista"
223
 
224
-#: src/command.cxx:136
225
+#: src/Command.cxx:102
226
 msgid "Delete song from queue"
227
 msgstr ""
228
 
229
-#: src/command.cxx:138
230
+#: src/Command.cxx:104
231
 msgid "Shuffle queue"
232
 msgstr ""
233
 
234
-#: src/command.cxx:140
235
+#: src/Command.cxx:106
236
 msgid "Clear queue"
237
 msgstr ""
238
 
239
-#: src/command.cxx:142
240
+#: src/Command.cxx:108
241
 msgid "Toggle repeat mode"
242
 msgstr ""
243
 
244
-#: src/command.cxx:144
245
+#: src/Command.cxx:110
246
 msgid "Toggle random mode"
247
 msgstr ""
248
 
249
-#: src/command.cxx:146
250
+#: src/Command.cxx:112
251
 msgid "Toggle single mode"
252
 msgstr ""
253
 
254
-#: src/command.cxx:148
255
+#: src/Command.cxx:114
256
 msgid "Toggle consume mode"
257
 msgstr ""
258
 
259
-#: src/command.cxx:150
260
+#: src/Command.cxx:116
261
 msgid "Toggle crossfade mode"
262
 msgstr ""
263
 
264
-#: src/command.cxx:152
265
+#: src/Command.cxx:118
266
 msgid "Start a music database update"
267
 msgstr ""
268
 
269
-#: src/command.cxx:154
270
+#: src/Command.cxx:120
271
 msgid "Save queue"
272
 msgstr ""
273
 
274
-#: src/command.cxx:156
275
-msgid "Add url/file to queue"
276
-msgstr ""
277
+#: src/Command.cxx:122 src/HelpPage.cxx:174
278
+#, fuzzy
279
+msgid "Append song to queue"
280
+msgstr "Aggiungere la canzone alla lista"
281
 
282
-#: src/command.cxx:159
283
+#: src/Command.cxx:125
284
 msgid "Go to root directory"
285
 msgstr ""
286
 
287
-#: src/command.cxx:161
288
+#: src/Command.cxx:127
289
 msgid "Go to parent directory"
290
 msgstr ""
291
 
292
-#: src/command.cxx:164
293
+#: src/Command.cxx:130
294
 msgid "Locate song in browser"
295
 msgstr ""
296
 
297
-#: src/command.cxx:168
298
+#: src/Command.cxx:134
299
 msgid "Move item up"
300
 msgstr ""
301
 
302
-#: src/command.cxx:170
303
+#: src/Command.cxx:136
304
 msgid "Move item down"
305
 msgstr ""
306
 
307
-#: src/command.cxx:172
308
+#: src/Command.cxx:138
309
 msgid "Refresh screen"
310
 msgstr ""
311
 
312
 #. translators: toggle between wrapping and non-wrapping
313
 #. search
314
-#: src/command.cxx:179
315
+#: src/Command.cxx:145
316
 msgid "Toggle find mode"
317
 msgstr ""
318
 
319
 #. translators: the auto center mode always centers the song
320
 #. currently being played
321
-#: src/command.cxx:183
322
+#: src/Command.cxx:149
323
 msgid "Toggle auto center mode"
324
 msgstr ""
325
 
326
-#: src/command.cxx:188
327
+#: src/Command.cxx:154
328
 msgid "Next screen"
329
 msgstr ""
330
 
331
-#: src/command.cxx:190
332
+#: src/Command.cxx:156
333
 msgid "Previous screen"
334
 msgstr ""
335
 
336
-#: src/command.cxx:192
337
+#: src/Command.cxx:158
338
 msgid "Swap to most recent screen"
339
 msgstr ""
340
 
341
-#: src/command.cxx:197
342
+#: src/Command.cxx:163
343
 msgid "Forward find"
344
 msgstr ""
345
 
346
-#: src/command.cxx:199
347
+#: src/Command.cxx:165
348
 msgid "Forward find next"
349
 msgstr ""
350
 
351
-#: src/command.cxx:201
352
+#: src/Command.cxx:167
353
 msgid "Backward find"
354
 msgstr ""
355
 
356
-#: src/command.cxx:203
357
+#: src/Command.cxx:169
358
 msgid "Backward find previous"
359
 msgstr ""
360
 
361
 #. translators: this queries the user for a string
362
 #. * and jumps directly (while the user is typing)
363
 #. * to the entry which begins with this string
364
-#: src/command.cxx:208
365
+#: src/Command.cxx:174
366
 msgid "Jump to"
367
 msgstr ""
368
 
369
-#: src/command.cxx:214
370
+#: src/Command.cxx:180
371
 msgid "Artist screen"
372
 msgstr ""
373
 
374
-#: src/command.cxx:218 src/screen_help.cxx:148
375
+#: src/Command.cxx:184 src/HelpPage.cxx:169
376
 msgid "Search screen"
377
 msgstr "Ricerca"
378
 
379
-#: src/command.cxx:220
380
+#: src/Command.cxx:186
381
 msgid "Change search mode"
382
 msgstr ""
383
 
384
-#: src/command.cxx:224
385
+#: src/Command.cxx:190
386
 msgid "View the selected and the currently playing song"
387
 msgstr ""
388
 
389
-#: src/command.cxx:228 src/screen_help.cxx:160
390
+#: src/Command.cxx:194 src/HelpPage.cxx:181
391
 msgid "Lyrics screen"
392
 msgstr "Lettere"
393
 
394
 #. translators: interrupt the current background action,
395
 #. e.g. stop loading lyrics from the internet
396
-#: src/command.cxx:232
397
+#: src/Command.cxx:198
398
 msgid "Interrupt action"
399
 msgstr ""
400
 
401
-#: src/command.cxx:234
402
+#: src/Command.cxx:200
403
 msgid "Update Lyrics"
404
 msgstr ""
405
 
406
-#: src/command.cxx:238
407
+#: src/Command.cxx:204
408
 msgid "Edit the current item"
409
 msgstr ""
410
 
411
-#: src/command.cxx:243 src/screen_help.cxx:175
412
+#: src/Command.cxx:209 src/HelpPage.cxx:196
413
 msgid "Outputs screen"
414
 msgstr "Schermo di uscite"
415
 
416
-#: src/command.cxx:248 src/screen_help.cxx:182
417
+#: src/Command.cxx:214 src/HelpPage.cxx:203
418
 #, fuzzy
419
 msgid "Chat screen"
420
 msgstr "Lista di canzoni"
421
 
422
-#: src/command.cxx:290
423
-msgid "Undefined"
424
-msgstr ""
425
-
426
-#: src/command.cxx:292
427
-msgid "Space"
428
-msgstr ""
429
-
430
-#: src/command.cxx:294
431
-msgid "Enter"
432
-msgstr ""
433
-
434
-#: src/command.cxx:296
435
-msgid "Backspace"
436
-msgstr ""
437
-
438
-#: src/command.cxx:298
439
-msgid "Delete"
440
-msgstr ""
441
-
442
-#: src/command.cxx:300
443
-msgid "Up"
444
-msgstr ""
445
-
446
-#: src/command.cxx:302
447
-msgid "Down"
448
-msgstr ""
449
-
450
-#: src/command.cxx:304
451
-msgid "Left"
452
-msgstr ""
453
-
454
-#: src/command.cxx:306
455
-msgid "Right"
456
-msgstr ""
457
-
458
-#: src/command.cxx:308
459
-msgid "Home"
460
-msgstr ""
461
-
462
-#: src/command.cxx:310
463
-msgid "End"
464
-msgstr ""
465
-
466
-#: src/command.cxx:312
467
-msgid "PageDown"
468
-msgstr ""
469
-
470
-#: src/command.cxx:314
471
-msgid "PageUp"
472
-msgstr ""
473
-
474
-#: src/command.cxx:316
475
-msgid "Tab"
476
-msgstr ""
477
-
478
-#: src/command.cxx:318
479
-msgid "Shift+Tab"
480
-msgstr ""
481
-
482
-#: src/command.cxx:320
483
-msgid "Esc"
484
-msgstr ""
485
-
486
-#: src/command.cxx:322
487
-msgid "Insert"
488
-msgstr ""
489
-
490
-#: src/command.cxx:326
491
-#, c-format
492
-msgid "F%d"
493
-msgstr ""
494
-
495
-#: src/command.cxx:330
496
-#, c-format
497
-msgid "Ctrl-%c"
498
-msgstr ""
499
-
500
-#: src/command.cxx:332
501
-#, c-format
502
-msgid "Alt-%c"
503
-msgstr ""
504
-
505
-#: src/command.cxx:477 src/command.cxx:483
506
-#, c-format
507
-msgid "Key %s assigned to %s and %s"
508
-msgstr ""
509
-
510
 #. To translators: prefix for error messages
511
-#: src/conf.cxx:121
512
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
513
 msgid "Error"
514
 msgstr ""
515
 
516
-#: src/conf.cxx:135
517
+#: src/conf.cxx:128
518
 msgid "Word expected"
519
 msgstr ""
520
 
521
-#: src/conf.cxx:152 src/conf.cxx:161
522
+#: src/conf.cxx:145 src/conf.cxx:154
523
 msgid "Malformed hotkey definition"
524
 msgstr ""
525
 
526
 #. the hotkey configuration contains an unknown
527
 #. command
528
-#: src/conf.cxx:185
529
+#: src/conf.cxx:178
530
 msgid "Unknown command"
531
 msgstr ""
532
 
533
 #. the hotkey configuration line is incomplete
534
-#: src/conf.cxx:198
535
+#: src/conf.cxx:191
536
 msgid "Incomplete hotkey configuration"
537
 msgstr ""
538
 
539
@@ -437,815 +375,868 @@
540
 #. "elapsed" or "remaining" time of a song being
541
 #. played; in this case, the configuration file
542
 #. contained an invalid setting
543
-#: src/conf.cxx:234
544
+#: src/conf.cxx:227
545
 msgid "Bad time display type"
546
 msgstr ""
547
 
548
 #. an equals sign '=' was expected while parsing a
549
 #. configuration file line
550
-#: src/conf.cxx:247 src/conf.cxx:427
551
+#: src/conf.cxx:240 src/conf.cxx:418
552
 msgid "Missing '='"
553
 msgstr ""
554
 
555
-#: src/conf.cxx:298
556
+#: src/conf.cxx:291
557
 msgid "Bad color name"
558
 msgstr ""
559
 
560
-#: src/conf.cxx:308
561
+#: src/conf.cxx:301
562
 msgid "Incomplete color definition"
563
 msgstr ""
564
 
565
-#: src/conf.cxx:314
566
+#: src/conf.cxx:307
567
 msgid "Invalid number"
568
 msgstr ""
569
 
570
-#: src/conf.cxx:322
571
+#: src/conf.cxx:315
572
 msgid "Malformed color definition"
573
 msgstr ""
574
 
575
 #. an unknown screen name was specified in the
576
 #. configuration file
577
-#: src/conf.cxx:356
578
+#: src/conf.cxx:353
579
 msgid "Unknown screen name"
580
 msgstr ""
581
 
582
-#: src/conf.cxx:384
583
+#: src/conf.cxx:378
584
 msgid "Invalid search mode"
585
 msgstr ""
586
 
587
-#: src/conf.cxx:407
588
+#: src/conf.cxx:398
589
 msgid "Unknown search mode"
590
 msgstr ""
591
 
592
-#: src/conf.cxx:597
593
+#: src/conf.cxx:581
594
 msgid "Unknown configuration parameter"
595
 msgstr ""
596
 
597
-#: src/i18n.h:42
598
-msgid "y"
599
-msgstr "e"
600
-
601
-#: src/i18n.h:43
602
-msgid "n"
603
-msgstr "n"
604
-
605
-#: src/list_window.cxx:554
606
-msgid "Range selection disabled"
607
-msgstr ""
608
-
609
-#: src/list_window.cxx:559
610
-msgid "Range selection enabled"
611
-msgstr ""
612
-
613
-#: src/Main.cxx:161
614
-#, c-format
615
-msgid "Connecting to %s...  [Press %s to abort]"
616
-msgstr "Collegandosi a %s... [Preme %s per annullare]"
617
-
618
-#: src/Main.cxx:182
619
-#, fuzzy, c-format
620
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
621
-msgstr ""
622
-"Errore: La versione di MPD %d.%d.%d è troppo vecchia (bisogna avere al meno "
623
-"la %s)"
624
-
625
-#: src/Main.cxx:317
626
-#, c-format
627
-msgid "press %s for the key editor"
628
-msgstr "preme %s per accedere al editore di tasti"
629
-
630
-#. To translators: these credits are shown
631
-#. when ncmpc is started with "--version"
632
-#: src/options.cxx:209 src/options.cxx:212
633
-msgid "translator-credits"
634
-msgstr ""
635
-"Launchpad Contributions:\n"
636
-"  Luis Miguel D.P. https://launchpad.net/~lmdp\n"
637
-"  Max Kellermann https://launchpad.net/~max-duempel\n"
638
-"  simone.sandri https://launchpad.net/~lexluxsox"
639
-
640
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
641
-msgid "Shuffled queue"
642
-msgstr ""
643
-
644
-#: src/player_command.cxx:184
645
-msgid "Cleared queue"
646
+#: src/CustomColors.cxx:56
647
+msgid "Terminal lacks support for changing colors"
648
 msgstr ""
649
 
650
-#. query the user for a filename
651
-#: src/save_playlist.cxx:109
652
-msgid "Save queue as"
653
-msgstr ""
654
+#. translators: the "delete" command is only possible
655
+#. for playlists; the user attempted to delete a song
656
+#. or a directory or something else
657
+#: src/FileBrowserPage.cxx:260
658
+msgid "Deleting this item is not possible"
659
+msgstr "Non è possibile rimuovere questo elemento."
660
 
661
-#: src/save_playlist.cxx:140
662
+#: src/FileBrowserPage.cxx:268
663
 #, fuzzy, c-format
664
-msgid "Replace %s?"
665
-msgstr "Sostituire %s [%s%s] ? "
666
+msgid "Delete playlist %s?"
667
+msgstr "Rimuove la playlist"
668
 
669
 #. translators: a dialog was aborted by the user
670
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
671
-#: src/screen_lyrics.cxx:370
672
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
673
+#: src/screen_keydef.cxx:182
674
 msgid "Aborted"
675
 msgstr "Annullato"
676
 
677
-#. success
678
-#: src/save_playlist.cxx:171
679
-#, c-format
680
-msgid "Saved %s"
681
-msgstr "%s salvato"
682
-
683
-#: src/screen.cxx:154
684
-msgid "Repeat mode is on"
685
-msgstr "Modo ripetizione attivato"
686
+#. translators: MPD deleted the playlist, as requested by the
687
+#. user
688
+#: src/FileBrowserPage.cxx:286
689
+msgid "Playlist deleted"
690
+msgstr "Playlist rimossa."
691
 
692
-#: src/screen.cxx:155
693
-msgid "Repeat mode is off"
694
-msgstr "Modo ripetizione disattivato"
695
+#. translators: caption of the browser screen
696
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
697
+msgid "Browse"
698
+msgstr "Esplora"
699
 
700
-#: src/screen.cxx:159
701
-msgid "Random mode is on"
702
-msgstr "Modo randomizzato attivo"
703
+#: src/FileListPage.cxx:121
704
+#, fuzzy, c-format
705
+msgid "Loading playlist '%s'"
706
+msgstr "Caricando la lista %s"
707
 
708
-#: src/screen.cxx:160
709
-msgid "Random mode is off"
710
-msgstr "Modo randomizzato disattivato"
711
+#: src/HelpPage.cxx:60
712
+msgid "Movement"
713
+msgstr "Movimento"
714
 
715
-#. "single" mode means
716
-#. that MPD will
717
-#. automatically stop
718
-#. after playing one
719
-#. single song
720
-#: src/screen.cxx:169
721
-msgid "Single mode is on"
722
-msgstr "Modo singolo attivato"
723
+#: src/HelpPage.cxx:105
724
+msgid "Global"
725
+msgstr "Globale"
726
 
727
-#: src/screen.cxx:170
728
-msgid "Single mode is off"
729
-msgstr "Modo singolo disattivato"
730
+#: src/HelpPage.cxx:142
731
+msgid "Play"
732
+msgstr "Play"
733
 
734
-#. "consume" mode means
735
-#. that MPD removes each
736
-#. song which has
737
-#. finished playing
738
-#: src/screen.cxx:178
739
-msgid "Consume mode is on"
740
-msgstr "Modo consumazione attivato"
741
+#: src/HelpPage.cxx:149
742
+msgid "Center"
743
+msgstr "Centrare"
744
 
745
-#: src/screen.cxx:179
746
-msgid "Consume mode is off"
747
-msgstr "Modo consumazione disattivato"
748
+#: src/HelpPage.cxx:157
749
+msgid "Enter directory/Select and play song"
750
+msgstr "Accedere alla cartella/Selezionare e riprodurre la canzone"
751
 
752
-#: src/screen.cxx:182
753
-#, c-format
754
-msgid "Crossfade %d seconds"
755
-msgstr ""
756
+#: src/HelpPage.cxx:161
757
+msgid "Delete playlist"
758
+msgstr "Rimuove la playlist"
759
 
760
-#: src/screen.cxx:194
761
-msgid "Database updated"
762
-msgstr "Database aggiornato"
763
+#: src/HelpPage.cxx:171
764
+#, fuzzy
765
+msgid "New search"
766
+msgstr "Cerca"
767
 
768
-#: src/screen.cxx:226
769
-msgid "Find mode: Wrapped"
770
-msgstr "Modo di ricerca: semplice"
771
+#: src/HelpPage.cxx:172
772
+msgid "Select and play"
773
+msgstr "Seleziona e riprodurre"
774
 
775
-#: src/screen.cxx:227
776
-msgid "Find mode: Normal"
777
-msgstr "Modo di ricerca: Normale"
778
+#: src/HelpPage.cxx:183
779
+msgid "View Lyrics"
780
+msgstr "Vedere le lettere"
781
 
782
-#: src/screen.cxx:232
783
-msgid "Auto center mode: On"
784
-msgstr "Modo di auto-centrato: attivato"
785
+#: src/HelpPage.cxx:184
786
+msgid "(Re)load lyrics"
787
+msgstr "(Ri)caricare le lettere"
788
 
789
-#: src/screen.cxx:233
790
-msgid "Auto center mode: Off"
791
-msgstr "Modo di auto-centrato: disattivato"
792
+#. to translators: this hotkey aborts the retrieval of lyrics
793
+#. from the server
794
+#: src/HelpPage.cxx:187
795
+msgid "Interrupt retrieval"
796
+msgstr "Annullare la scarica."
797
 
798
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
799
-msgid "All tracks"
800
-msgstr "Tutte le piste"
801
+#: src/HelpPage.cxx:188
802
+msgid "Download lyrics for currently playing song"
803
+msgstr "Ottenere le lettere della canzone riprodotta"
804
 
805
-#: src/screen_artist.cxx:384
806
-msgid "All artists"
807
-msgstr "Tutti gli artisti"
808
+#: src/HelpPage.cxx:189
809
+#, fuzzy
810
+msgid "Add or edit lyrics"
811
+msgstr "Non ci sono testi salvati"
812
 
813
-#: src/screen_artist.cxx:389
814
-#, c-format
815
-msgid "Albums of artist: %s"
816
-msgstr "Album del artista: %s"
817
+#: src/HelpPage.cxx:190
818
+msgid "Save lyrics"
819
+msgstr "Salvare le lettere"
820
 
821
-#: src/screen_artist.cxx:398
822
-#, c-format
823
-msgid "All tracks of artist: %s"
824
-msgstr "Tutte le piste del artista: %s"
825
+#: src/HelpPage.cxx:191
826
+msgid "Delete saved lyrics"
827
+msgstr "Rimuovere le lettere"
828
 
829
-#: src/screen_artist.cxx:401
830
-#, c-format
831
-msgid "Album: %s - %s"
832
-msgstr "Album: %s - %s"
833
+#: src/HelpPage.cxx:198
834
+msgid "Enable/disable output"
835
+msgstr "Attivare/disattivare le uscite"
836
 
837
-#: src/screen_artist.cxx:405
838
-#, c-format
839
-msgid "Tracks of no album of artist: %s"
840
+#: src/HelpPage.cxx:205
841
+msgid "Write a message"
842
 msgstr ""
843
 
844
-#: src/screen_artist.cxx:450
845
-#, c-format
846
-msgid "Adding album %s..."
847
-msgstr "Aggiungendo album %s..."
848
-
849
-#: src/screen_artist.cxx:452
850
-#, c-format
851
-msgid "Adding %s..."
852
-msgstr "Aggiungendo %s..."
853
+#: src/HelpPage.cxx:210
854
+msgid "Keydef screen"
855
+msgstr "Schermo di tasti di acceso"
856
 
857
-#: src/screen_browser.cxx:122
858
-#, c-format
859
-msgid "Loading playlist %s..."
860
-msgstr "Caricando la lista %s"
861
+#: src/HelpPage.cxx:212
862
+msgid "Edit keydefs for selected command"
863
+msgstr "Cambia i tasti di acceso veloce per il commando selezionato"
864
 
865
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
866
-#: src/screen_browser.cxx:279
867
-#, fuzzy, c-format
868
-msgid "Adding '%s' to queue"
869
-msgstr "Aggiungendo '%s' alla lista di canzoni"
870
+#: src/HelpPage.cxx:213
871
+msgid "Remove selected keydef"
872
+msgstr "Rimuovere il tasto di acceso veloce selezionato"
873
 
874
-#: src/screen_chat.cxx:59
875
-#, c-format
876
-msgid ""
877
-"connected to MPD %u.%u.%u (you need at least \n"
878
-"version 0.17.0 to use the chat feature)"
879
+#: src/HelpPage.cxx:214
880
+#, fuzzy
881
+msgid "Add a keydef"
882
+msgstr "Introduce un nuovo tasto"
883
+
884
+#: src/HelpPage.cxx:215
885
+msgid "Go up a level"
886
+msgstr "Salire un livello"
887
+
888
+#: src/HelpPage.cxx:216
889
+msgid "Apply and save changes"
890
+msgstr "Applicare e salvare i cambiamenti"
891
+
892
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
893
+msgid "Help"
894
+msgstr "Aiuto"
895
+
896
+#: src/i18n.h:43
897
+msgid "y"
898
+msgstr "e"
899
+
900
+#: src/i18n.h:44
901
+msgid "n"
902
+msgstr "n"
903
+
904
+#: src/KeyName.cxx:31
905
+msgid "Undefined"
906
 msgstr ""
907
 
908
-#: src/screen_chat.cxx:177
909
-msgid "Your message"
910
+#: src/KeyName.cxx:33
911
+msgid "Space"
912
 msgstr ""
913
 
914
-#: src/screen_chat.cxx:186
915
-msgid "Message could not be sent"
916
+#: src/KeyName.cxx:35
917
+msgid "Enter"
918
 msgstr ""
919
 
920
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
921
-msgid "Chat"
922
+#: src/KeyName.cxx:37
923
+msgid "Backspace"
924
 msgstr ""
925
 
926
-#: src/screen_client.cxx:41
927
-msgid "Database update running..."
928
-msgstr "Aggiornamento del database in corso..."
929
+#: src/KeyName.cxx:39
930
+msgid "Delete"
931
+msgstr ""
932
 
933
-#: src/screen_client.cxx:49
934
-#, c-format
935
-msgid "Database update of %s started"
936
-msgstr "Iniziato l'aggiornamento del database %s"
937
+#: src/KeyName.cxx:41
938
+msgid "Up"
939
+msgstr ""
940
 
941
-#: src/screen_client.cxx:52
942
-msgid "Database update started"
943
-msgstr "Iniziato l'aggiornamento del database."
944
+#: src/KeyName.cxx:43
945
+msgid "Down"
946
+msgstr ""
947
 
948
-#. translators: the "delete" command is only possible
949
-#. for playlists; the user attempted to delete a song
950
-#. or a directory or something else
951
-#: src/screen_file.cxx:200
952
-msgid "Deleting this item is not possible"
953
-msgstr "Non è possibile rimuovere questo elemento."
954
+#: src/KeyName.cxx:45
955
+msgid "Left"
956
+msgstr ""
957
 
958
-#: src/screen_file.cxx:207
959
-#, fuzzy, c-format
960
-msgid "Delete playlist %s?"
961
-msgstr "Rimuove la playlist"
962
+#: src/KeyName.cxx:47
963
+msgid "Right"
964
+msgstr ""
965
 
966
-#. translators: MPD deleted the playlist, as requested by the
967
-#. user
968
-#: src/screen_file.cxx:227
969
-msgid "Playlist deleted"
970
-msgstr "Playlist rimossa."
971
+#: src/KeyName.cxx:49
972
+msgid "Home"
973
+msgstr ""
974
 
975
-#. translators: caption of the browser screen
976
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
977
-msgid "Browse"
978
-msgstr "Esplora"
979
+#: src/KeyName.cxx:51
980
+msgid "End"
981
+msgstr ""
982
 
983
-#: src/screen_find.cxx:29
984
-msgid "Find"
985
-msgstr "Cerca"
986
+#: src/KeyName.cxx:53
987
+msgid "PageDown"
988
+msgstr ""
989
 
990
-#: src/screen_find.cxx:30
991
-msgid "Find backward"
992
+#: src/KeyName.cxx:55
993
+msgid "PageUp"
994
 msgstr ""
995
 
996
-#: src/screen_find.cxx:31
997
-msgid "Jump"
998
-msgstr "Salta"
999
+#: src/KeyName.cxx:57
1000
+msgid "Tab"
1001
+msgstr ""
1002
 
1003
-#: src/screen_find.cxx:82
1004
-#, c-format
1005
-msgid "Unable to find '%s'"
1006
-msgstr "Non si ha potuto trovare %s"
1007
+#: src/KeyName.cxx:59
1008
+msgid "Shift+Tab"
1009
+msgstr ""
1010
 
1011
-#: src/screen_help.cxx:39
1012
-msgid "Movement"
1013
-msgstr "Movimento"
1014
+#: src/KeyName.cxx:61
1015
+msgid "Esc"
1016
+msgstr ""
1017
 
1018
-#: src/screen_help.cxx:84
1019
-msgid "Global"
1020
-msgstr "Globale"
1021
+#: src/KeyName.cxx:63
1022
+msgid "Insert"
1023
+msgstr ""
1024
 
1025
-#: src/screen_help.cxx:121
1026
-msgid "Play"
1027
-msgstr "Play"
1028
+#: src/KeyName.cxx:71
1029
+#, c-format
1030
+msgid "Ctrl-%c"
1031
+msgstr ""
1032
 
1033
-#: src/screen_help.cxx:124
1034
-msgid "Move song up"
1035
-msgstr "Sposta la canzone su"
1036
+#: src/KeyName.cxx:73
1037
+#, c-format
1038
+msgid "Alt-%c"
1039
+msgstr ""
1040
 
1041
-#: src/screen_help.cxx:125
1042
-msgid "Move song down"
1043
-msgstr "Sposta la canzone giù"
1044
+#: src/ListWindow.cxx:491
1045
+msgid "Range selection disabled"
1046
+msgstr ""
1047
 
1048
-#: src/screen_help.cxx:128
1049
-msgid "Center"
1050
-msgstr "Centrare"
1051
+#: src/ListWindow.cxx:496
1052
+msgid "Range selection enabled"
1053
+msgstr ""
1054
 
1055
-#: src/screen_help.cxx:136
1056
-msgid "Enter directory/Select and play song"
1057
-msgstr "Accedere alla cartella/Selezionare e riprodurre la canzone"
1058
+#. translators: no lyrics were found for the song
1059
+#: src/LyricsPage.cxx:236
1060
+msgid "No lyrics"
1061
+msgstr "Non ci sono testi disponibili"
1062
 
1063
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1064
-#, fuzzy
1065
-msgid "Append song to queue"
1066
-msgstr "Aggiungere la canzone alla lista"
1067
+#: src/LyricsPage.cxx:254
1068
+#, c-format
1069
+msgid "Lyrics timeout occurred after %d seconds"
1070
+msgstr ""
1071
 
1072
-#: src/screen_help.cxx:140
1073
-msgid "Delete playlist"
1074
-msgstr "Rimuove la playlist"
1075
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1076
+#: src/LyricsPage.cxx:490
1077
+msgid "Lyrics"
1078
+msgstr "Testi"
1079
 
1080
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1081
-msgid "Search"
1082
-msgstr "Cerca"
1083
+#. translators: this message is displayed
1084
+#. while data is retrieved
1085
+#: src/LyricsPage.cxx:340
1086
+msgid "loading..."
1087
+msgstr "caricamento in corso..."
1088
 
1089
-#: src/screen_help.cxx:151
1090
-msgid "Select and play"
1091
-msgstr "Seleziona e riprodurre"
1092
+#: src/LyricsPage.cxx:361
1093
+msgid "Editor not configured"
1094
+msgstr ""
1095
 
1096
-#: src/screen_help.cxx:162
1097
-msgid "View Lyrics"
1098
-msgstr "Vedere le lettere"
1099
+#: src/LyricsPage.cxx:368
1100
+msgid "Do you really want to start an editor and edit these lyrics?"
1101
+msgstr ""
1102
 
1103
-#: src/screen_help.cxx:163
1104
-msgid "(Re)load lyrics"
1105
-msgstr "(Ri)caricare le lettere"
1106
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1107
+msgid "Can't start editor"
1108
+msgstr ""
1109
 
1110
-#. to translators: this hotkey aborts the retrieval of lyrics
1111
-#. from the server
1112
-#: src/screen_help.cxx:166
1113
-msgid "Interrupt retrieval"
1114
-msgstr "Annullare la scarica."
1115
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1116
+msgid "Editor exited unexpectedly"
1117
+msgstr ""
1118
 
1119
-#: src/screen_help.cxx:167
1120
-msgid "Download lyrics for currently playing song"
1121
-msgstr "Ottenere le lettere della canzone riprodotta"
1122
+#. lyrics for the song were saved on hard disk
1123
+#: src/LyricsPage.cxx:439
1124
+msgid "Lyrics saved"
1125
+msgstr "Testi salvati"
1126
 
1127
-#: src/screen_help.cxx:168
1128
-#, fuzzy
1129
-msgid "Add or edit lyrics"
1130
-msgstr "Non ci sono testi salvati"
1131
+#: src/LyricsPage.cxx:445
1132
+msgid "Lyrics deleted"
1133
+msgstr "Testi rimossi"
1134
 
1135
-#: src/screen_help.cxx:169
1136
-msgid "Save lyrics"
1137
-msgstr "Salvare le lettere"
1138
+#: src/LyricsPage.cxx:446
1139
+msgid "No saved lyrics"
1140
+msgstr "Non ci sono testi salvati"
1141
 
1142
-#: src/screen_help.cxx:170
1143
-msgid "Delete saved lyrics"
1144
-msgstr "Rimuovere le lettere"
1145
+#: src/Main.cxx:167
1146
+#, fuzzy, c-format
1147
+msgid "Connecting to %s"
1148
+msgstr "Connesso a %s"
1149
 
1150
-#: src/screen_help.cxx:177
1151
-msgid "Enable/disable output"
1152
-msgstr "Attivare/disattivare le uscite"
1153
+#: src/Main.cxx:187
1154
+#, fuzzy, c-format
1155
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1156
+msgstr ""
1157
+"Errore: La versione di MPD %d.%d.%d è troppo vecchia (bisogna avere al meno "
1158
+"la %s)"
1159
 
1160
-#: src/screen_help.cxx:184
1161
-msgid "Write a message"
1162
+#. To translators: these credits are shown
1163
+#. when ncmpc is started with "--version"
1164
+#: src/options.cxx:213 src/options.cxx:216
1165
+msgid "translator-credits"
1166
 msgstr ""
1167
+"Launchpad Contributions:\n"
1168
+"  Luis Miguel D.P. https://launchpad.net/~lmdp\n"
1169
+"  Max Kellermann https://launchpad.net/~max-duempel\n"
1170
+"  simone.sandri https://launchpad.net/~lexluxsox"
1171
 
1172
-#: src/screen_help.cxx:189
1173
-msgid "Keydef screen"
1174
-msgstr "Schermo di tasti di acceso"
1175
+#: src/OutputsPage.cxx:87
1176
+#, c-format
1177
+msgid "Output '%s' enabled"
1178
+msgstr "La uscita '%s' è attivata"
1179
 
1180
-#: src/screen_help.cxx:191
1181
-msgid "Edit keydefs for selected command"
1182
-msgstr "Cambia i tasti di acceso veloce per il commando selezionato"
1183
+#: src/OutputsPage.cxx:98
1184
+#, c-format
1185
+msgid "Output '%s' disabled"
1186
+msgstr "La uscita '%s' è disattivata"
1187
 
1188
-#: src/screen_help.cxx:192
1189
-msgid "Remove selected keydef"
1190
-msgstr "Rimuovere il tasto di acceso veloce selezionato"
1191
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1192
+msgid "Outputs"
1193
+msgstr "Uscite"
1194
 
1195
-#: src/screen_help.cxx:193
1196
-#, fuzzy
1197
-msgid "Add a keydef"
1198
-msgstr "Introduce un nuovo tasto"
1199
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1200
+msgid "Shuffled queue"
1201
+msgstr ""
1202
 
1203
-#: src/screen_help.cxx:194
1204
-msgid "Go up a level"
1205
-msgstr "Salire un livello"
1206
+#: src/player_command.cxx:186
1207
+msgid "Cleared queue"
1208
+msgstr ""
1209
 
1210
-#: src/screen_help.cxx:195
1211
-msgid "Apply and save changes"
1212
-msgstr "Applicare e salvare i cambiamenti"
1213
+#. get path
1214
+#: src/QueuePage.cxx:307
1215
+msgid "Add"
1216
+msgstr "Aggiungi"
1217
 
1218
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1219
-msgid "Help"
1220
-msgstr "Aiuto"
1221
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1222
+msgid "Queue"
1223
+msgstr ""
1224
 
1225
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1226
-msgid "Error: Screen too small"
1227
-msgstr "Errore: La finestra è tropo piccola"
1228
+#: src/QueuePage.cxx:380
1229
+#, c-format
1230
+msgid "Queue on %s"
1231
+msgstr ""
1232
 
1233
-#: src/screen_keydef.cxx:141
1234
-msgid "You have new key bindings"
1235
+#. query the user for a filename
1236
+#: src/save_playlist.cxx:85
1237
+msgid "Save queue as"
1238
 msgstr ""
1239
 
1240
-#: src/screen_keydef.cxx:143
1241
-msgid "Keybindings unchanged."
1242
+#: src/save_playlist.cxx:107
1243
+#, fuzzy, c-format
1244
+msgid "Replace %s?"
1245
+msgstr "Sostituire %s [%s%s] ? "
1246
+
1247
+#. success
1248
+#: src/save_playlist.cxx:128
1249
+#, c-format
1250
+msgid "Saved %s"
1251
+msgstr "%s salvato"
1252
+
1253
+#: src/screen_artist.cxx:186
1254
+#, c-format
1255
+msgid "All tracks of artist: %s"
1256
+msgstr "Tutte le piste del artista: %s"
1257
+
1258
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1259
+msgid "Album"
1260
+msgstr "Album"
1261
+
1262
+#: src/screen_artist.cxx:195
1263
+#, c-format
1264
+msgid "Tracks of no album of artist: %s"
1265
 msgstr ""
1266
 
1267
-#: src/screen_keydef.cxx:153
1268
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1269
+msgid "Artist"
1270
+msgstr "Artista"
1271
+
1272
+#: src/screen_client.cxx:41
1273
+#, fuzzy
1274
+msgid "Database update running"
1275
+msgstr "Aggiornamento del database in corso..."
1276
+
1277
+#: src/screen_client.cxx:48
1278
 #, c-format
1279
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1280
-msgstr "Errore: Non si ha potuto creare la cartella ~/.ncmpc - %s"
1281
+msgid "Database update of %s started"
1282
+msgstr "Iniziato l'aggiornamento del database %s"
1283
+
1284
+#: src/screen_client.cxx:51
1285
+msgid "Database update started"
1286
+msgstr "Iniziato l'aggiornamento del database."
1287
+
1288
+#: src/screen.cxx:160
1289
+msgid "Repeat mode is on"
1290
+msgstr "Modo ripetizione attivato"
1291
+
1292
+#: src/screen.cxx:161
1293
+msgid "Repeat mode is off"
1294
+msgstr "Modo ripetizione disattivato"
1295
+
1296
+#: src/screen.cxx:165
1297
+msgid "Random mode is on"
1298
+msgstr "Modo randomizzato attivo"
1299
+
1300
+#: src/screen.cxx:166
1301
+msgid "Random mode is off"
1302
+msgstr "Modo randomizzato disattivato"
1303
+
1304
+#. "single" mode means
1305
+#. that MPD will
1306
+#. automatically stop
1307
+#. after playing one
1308
+#. single song
1309
+#: src/screen.cxx:175
1310
+msgid "Single mode is on"
1311
+msgstr "Modo singolo attivato"
1312
+
1313
+#: src/screen.cxx:176
1314
+msgid "Single mode is off"
1315
+msgstr "Modo singolo disattivato"
1316
+
1317
+#. "consume" mode means
1318
+#. that MPD removes each
1319
+#. song which has
1320
+#. finished playing
1321
+#: src/screen.cxx:184
1322
+msgid "Consume mode is on"
1323
+msgstr "Modo consumazione attivato"
1324
+
1325
+#: src/screen.cxx:185
1326
+msgid "Consume mode is off"
1327
+msgstr "Modo consumazione disattivato"
1328
 
1329
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1330
+#: src/screen.cxx:188
1331
 #, c-format
1332
-msgid "Error: %s - %s"
1333
-msgstr "Errore: %s - %s"
1334
+msgid "Crossfade %d seconds"
1335
+msgstr ""
1336
+
1337
+#: src/screen.cxx:200
1338
+msgid "Database updated"
1339
+msgstr "Database aggiornato"
1340
+
1341
+#: src/screen.cxx:250
1342
+msgid "Find mode: Wrapped"
1343
+msgstr "Modo di ricerca: semplice"
1344
+
1345
+#: src/screen.cxx:251
1346
+msgid "Find mode: Normal"
1347
+msgstr "Modo di ricerca: Normale"
1348
+
1349
+#: src/screen.cxx:256
1350
+msgid "Auto center mode: On"
1351
+msgstr "Modo di auto-centrato: attivato"
1352
+
1353
+#: src/screen.cxx:257
1354
+msgid "Auto center mode: Off"
1355
+msgstr "Modo di auto-centrato: disattivato"
1356
+
1357
+#: src/screen_find.cxx:31
1358
+msgid "Find"
1359
+msgstr "Cerca"
1360
+
1361
+#: src/screen_find.cxx:32
1362
+msgid "Find backward"
1363
+msgstr ""
1364
+
1365
+#: src/screen_find.cxx:33
1366
+msgid "Jump"
1367
+msgstr "Salta"
1368
 
1369
-#: src/screen_keydef.cxx:171
1370
+#: src/screen_find.cxx:79
1371
 #, c-format
1372
-msgid "Wrote %s"
1373
-msgstr "%s creato"
1374
+msgid "Unable to find '%s'"
1375
+msgstr "Non si ha potuto trovare %s"
1376
 
1377
-#: src/screen_keydef.cxx:250
1378
+#: src/screen_keydef.cxx:161
1379
 msgid "Deleted"
1380
 msgstr "Rimosso"
1381
 
1382
-#: src/screen_keydef.cxx:265
1383
+#: src/screen_keydef.cxx:177
1384
 #, c-format
1385
 msgid "Enter new key for %s: "
1386
 msgstr "Introduce tasto di acceso veloce per %s: "
1387
 
1388
-#: src/screen_keydef.cxx:276
1389
+#: src/screen_keydef.cxx:187
1390
 msgid "Ctrl-Space can't be used"
1391
 msgstr ""
1392
 
1393
-#: src/screen_keydef.cxx:282
1394
+#: src/screen_keydef.cxx:193
1395
 #, c-format
1396
 msgid "Error: key %s is already used for %s"
1397
 msgstr "Errore: il tasto %s già sta assegnato a %s"
1398
 
1399
-#: src/screen_keydef.cxx:291
1400
+#: src/screen_keydef.cxx:202
1401
 #, c-format
1402
 msgid "Assigned %s to %s"
1403
 msgstr "%s assegnato a %s"
1404
 
1405
-#: src/screen_keydef.cxx:317
1406
-msgid "===> Apply key bindings "
1407
-msgstr ""
1408
-
1409
-#: src/screen_keydef.cxx:319
1410
-msgid "===> Apply & Save key bindings  "
1411
-msgstr ""
1412
-
1413
-#: src/screen_keydef.cxx:347
1414
+#: src/screen_keydef.cxx:229
1415
 msgid "Add new key"
1416
 msgstr "Introduce un nuovo tasto"
1417
 
1418
-#: src/screen_keydef.cxx:410
1419
-msgid "Note: Did you forget to 'Apply' your changes?"
1420
-msgstr "Nota: Hai dimenticato 'Applicare' i tuoi cambiamenti?"
1421
-
1422
-#: src/screen_keydef.cxx:417
1423
-msgid "Edit key bindings"
1424
-msgstr "Cambia i tasti di acceso veloce"
1425
-
1426
-#: src/screen_keydef.cxx:419
1427
+#: src/screen_keydef.cxx:251
1428
 #, c-format
1429
 msgid "Edit keys for %s"
1430
 msgstr "Cambia i tasti per %s"
1431
 
1432
-#. translators: no lyrics were found for the song
1433
-#: src/screen_lyrics.cxx:208
1434
-msgid "No lyrics"
1435
-msgstr "Non ci sono testi disponibili"
1436
-
1437
-#: src/screen_lyrics.cxx:226
1438
-#, c-format
1439
-msgid "Lyrics timeout occurred after %d seconds"
1440
-msgstr ""
1441
-
1442
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1443
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1444
-msgid "Lyrics"
1445
-msgstr "Testi"
1446
-
1447
-#. translators: this message is displayed
1448
-#. while data is retrieved
1449
-#: src/screen_lyrics.cxx:330
1450
-msgid "loading..."
1451
-msgstr "caricamento in corso..."
1452
-
1453
-#: src/screen_lyrics.cxx:361
1454
-msgid "Editor not configured"
1455
+#: src/screen_keydef.cxx:393
1456
+msgid "You have new key bindings"
1457
 msgstr ""
1458
 
1459
-#: src/screen_lyrics.cxx:367
1460
-msgid "Do you really want to start an editor and edit these lyrics?"
1461
+#: src/screen_keydef.cxx:395
1462
+msgid "Keybindings unchanged."
1463
 msgstr ""
1464
 
1465
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1466
-msgid "Can't start editor"
1467
+#: src/screen_keydef.cxx:405
1468
+msgid "Unable to write configuration"
1469
 msgstr ""
1470
 
1471
-#: src/screen_lyrics.cxx:411
1472
+#: src/screen_keydef.cxx:421
1473
 #, c-format
1474
-msgid "Editor exited unexpectedly (%d)"
1475
-msgstr ""
1476
+msgid "Wrote %s"
1477
+msgstr "%s creato"
1478
 
1479
-#: src/screen_lyrics.cxx:414
1480
-#, c-format
1481
-msgid "Editor exited unexpectedly (signal %d)"
1482
+#: src/screen_keydef.cxx:433
1483
+msgid "===> Apply key bindings "
1484
 msgstr ""
1485
 
1486
-#. lyrics for the song were saved on hard disk
1487
-#: src/screen_lyrics.cxx:436
1488
-msgid "Lyrics saved"
1489
-msgstr "Testi salvati"
1490
-
1491
-#: src/screen_lyrics.cxx:443
1492
-msgid "Lyrics deleted"
1493
-msgstr "Testi rimossi"
1494
-
1495
-#: src/screen_lyrics.cxx:446
1496
-msgid "No saved lyrics"
1497
-msgstr "Non ci sono testi salvati"
1498
-
1499
-#: src/screen_outputs.cxx:60
1500
-#, c-format
1501
-msgid "Output '%s' enabled"
1502
-msgstr "La uscita '%s' è attivata"
1503
-
1504
-#: src/screen_outputs.cxx:71
1505
-#, c-format
1506
-msgid "Output '%s' disabled"
1507
-msgstr "La uscita '%s' è disattivata"
1508
+#: src/screen_keydef.cxx:435
1509
+msgid "===> Apply & Save key bindings  "
1510
+msgstr ""
1511
 
1512
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1513
-msgid "Outputs"
1514
-msgstr "Uscite"
1515
+#: src/screen_keydef.cxx:472
1516
+msgid "Edit key bindings"
1517
+msgstr "Cambia i tasti di acceso veloce"
1518
 
1519
-#. get path
1520
-#: src/screen_queue.cxx:274
1521
-msgid "Add"
1522
-msgstr "Aggiungi"
1523
+#: src/screen_keydef.cxx:554
1524
+msgid "Note: Did you forget to 'Apply' your changes?"
1525
+msgstr "Nota: Hai dimenticato 'Applicare' i tuoi cambiamenti?"
1526
 
1527
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1528
-msgid "Queue"
1529
+#: src/screen_keydef.cxx:604
1530
+msgid "Keys"
1531
 msgstr ""
1532
 
1533
-#: src/screen_queue.cxx:384
1534
-#, c-format
1535
-msgid "Queue on %s"
1536
-msgstr ""
1537
+#: src/screen_utils.cxx:124
1538
+msgid "Password"
1539
+msgstr "Password"
1540
 
1541
-#: src/screen_search.cxx:48
1542
+#: src/SearchPage.cxx:51
1543
 msgid "artist"
1544
 msgstr "artista"
1545
 
1546
-#: src/screen_search.cxx:49
1547
+#: src/SearchPage.cxx:52
1548
 msgid "album"
1549
 msgstr "album"
1550
 
1551
-#: src/screen_search.cxx:50
1552
+#: src/SearchPage.cxx:53
1553
 msgid "title"
1554
 msgstr "titolo"
1555
 
1556
-#: src/screen_search.cxx:51
1557
+#: src/SearchPage.cxx:54
1558
 msgid "track"
1559
 msgstr "track"
1560
 
1561
-#: src/screen_search.cxx:52
1562
+#: src/SearchPage.cxx:55
1563
 msgid "name"
1564
 msgstr "nome"
1565
 
1566
-#: src/screen_search.cxx:53
1567
+#: src/SearchPage.cxx:56
1568
 msgid "genre"
1569
 msgstr "genero"
1570
 
1571
-#: src/screen_search.cxx:54
1572
+#: src/SearchPage.cxx:57
1573
 msgid "date"
1574
 msgstr "data"
1575
 
1576
-#: src/screen_search.cxx:55
1577
+#: src/SearchPage.cxx:58
1578
 msgid "composer"
1579
 msgstr "compositore"
1580
 
1581
-#: src/screen_search.cxx:56
1582
+#: src/SearchPage.cxx:59
1583
 msgid "performer"
1584
 msgstr "interprete"
1585
 
1586
-#: src/screen_search.cxx:57
1587
+#: src/SearchPage.cxx:60
1588
 msgid "comment"
1589
 msgstr "commentare"
1590
 
1591
-#: src/screen_search.cxx:65
1592
+#: src/SearchPage.cxx:68
1593
 msgid "file"
1594
 msgstr "file"
1595
 
1596
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1597
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1598
 msgid "Title"
1599
 msgstr "Titolo"
1600
 
1601
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1602
-msgid "Artist"
1603
-msgstr "Artista"
1604
-
1605
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1606
-msgid "Album"
1607
-msgstr "Album"
1608
-
1609
-#: src/screen_search.cxx:85
1610
+#: src/SearchPage.cxx:88
1611
 msgid "Filename"
1612
 msgstr "Nome del file"
1613
 
1614
-#: src/screen_search.cxx:86
1615
+#: src/SearchPage.cxx:89
1616
 msgid "Artist + Title"
1617
 msgstr "Artista + Titolo"
1618
 
1619
-#: src/screen_search.cxx:244
1620
-#, c-format
1621
-msgid "No argument for search tag %s"
1622
-msgstr "Senza argomenti per la etichetta di ricerca %s"
1623
-
1624
-#: src/screen_search.cxx:253
1625
+#: src/SearchPage.cxx:270
1626
 #, c-format
1627
 msgid "Bad search tag %s"
1628
 msgstr "Etichetta di ricerca invalida: %s"
1629
 
1630
-#. if( pattern==nullptr )
1631
-#. search_new(screen, c);
1632
-#. else
1633
-#: src/screen_search.cxx:400
1634
-#, c-format
1635
-msgid "Press %s for a new search"
1636
-msgstr "Preme %s per una nuova ricerca"
1637
-
1638
-#: src/screen_search.cxx:427
1639
+#: src/SearchPage.cxx:284
1640
 #, c-format
1641
-msgid "Search: %s"
1642
-msgstr "Cerca: %s"
1643
-
1644
-#: src/screen_search.cxx:430
1645
-#, c-format
1646
-msgid "Search: Results for %s [%s]"
1647
-msgstr ""
1648
+msgid "No argument for search tag %s"
1649
+msgstr "Senza argomenti per la etichetta di ricerca %s"
1650
 
1651
-#: src/screen_search.cxx:434
1652
-#, c-format
1653
-msgid "Search: Press %s for a new search [%s]"
1654
-msgstr ""
1655
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1656
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1657
+msgid "Search"
1658
+msgstr "Cerca"
1659
 
1660
-#: src/screen_search.cxx:458
1661
+#: src/SearchPage.cxx:436
1662
 #, c-format
1663
 msgid "Search mode: %s"
1664
 msgstr ""
1665
 
1666
-#: src/screen_song.cxx:54
1667
+#: src/SongPage.cxx:67
1668
 msgid "Length"
1669
 msgstr "Durata"
1670
 
1671
-#: src/screen_song.cxx:55
1672
+#: src/SongPage.cxx:68
1673
 msgid "Position"
1674
 msgstr ""
1675
 
1676
-#: src/screen_song.cxx:56
1677
+#: src/SongPage.cxx:69
1678
 msgid "Composer"
1679
 msgstr "Compositore"
1680
 
1681
-#: src/screen_song.cxx:57
1682
+#: src/SongPage.cxx:70
1683
 msgid "Name"
1684
 msgstr "Nome"
1685
 
1686
-#: src/screen_song.cxx:58
1687
+#: src/SongPage.cxx:71
1688
 msgid "Disc"
1689
 msgstr "Disco"
1690
 
1691
-#: src/screen_song.cxx:59
1692
+#: src/SongPage.cxx:72
1693
 msgid "Track"
1694
 msgstr "Brano"
1695
 
1696
-#: src/screen_song.cxx:60
1697
+#: src/SongPage.cxx:73
1698
 msgid "Date"
1699
 msgstr "Data"
1700
 
1701
-#: src/screen_song.cxx:61
1702
+#: src/SongPage.cxx:74
1703
 msgid "Genre"
1704
 msgstr "Genero"
1705
 
1706
-#: src/screen_song.cxx:62
1707
+#: src/SongPage.cxx:75
1708
 msgid "Comment"
1709
 msgstr "Commento"
1710
 
1711
-#: src/screen_song.cxx:63
1712
+#: src/SongPage.cxx:76
1713
 msgid "Path"
1714
 msgstr "Path"
1715
 
1716
-#: src/screen_song.cxx:64
1717
+#: src/SongPage.cxx:77
1718
 msgid "Bitrate"
1719
 msgstr "Bitrate"
1720
 
1721
-#: src/screen_song.cxx:65
1722
+#: src/SongPage.cxx:78
1723
 msgid "Format"
1724
 msgstr ""
1725
 
1726
-#: src/screen_song.cxx:82
1727
+#: src/SongPage.cxx:95
1728
 msgid "Number of artists"
1729
 msgstr "Numero di artisti"
1730
 
1731
-#: src/screen_song.cxx:83
1732
+#: src/SongPage.cxx:96
1733
 msgid "Number of albums"
1734
 msgstr "Numero di albums"
1735
 
1736
-#: src/screen_song.cxx:84
1737
+#: src/SongPage.cxx:97
1738
 msgid "Number of songs"
1739
 msgstr "Numero di brani"
1740
 
1741
-#: src/screen_song.cxx:85
1742
+#: src/SongPage.cxx:98
1743
 msgid "Uptime"
1744
 msgstr "Tempo in attività"
1745
 
1746
-#: src/screen_song.cxx:86
1747
+#: src/SongPage.cxx:99
1748
 msgid "Most recent db update"
1749
 msgstr "Aggiornamento più recente del database"
1750
 
1751
-#: src/screen_song.cxx:87
1752
+#: src/SongPage.cxx:100
1753
 msgid "Playtime"
1754
 msgstr "Tempo di riproduzione"
1755
 
1756
-#: src/screen_song.cxx:88
1757
+#: src/SongPage.cxx:101
1758
 msgid "DB playtime"
1759
 msgstr "Durata del database"
1760
 
1761
-#: src/screen_song.cxx:173
1762
+#: src/SongPage.cxx:204
1763
 msgid "Song viewer"
1764
 msgstr "Visore di canzoni"
1765
 
1766
-#: src/screen_song.cxx:337
1767
+#: src/SongPage.cxx:370
1768
 msgid "MPD statistics"
1769
 msgstr "Statistiche del MPD"
1770
 
1771
-#: src/screen_song.cxx:427
1772
+#: src/SongPage.cxx:455
1773
 msgid "Selected song"
1774
 msgstr "Brano selezionato"
1775
 
1776
-#: src/screen_song.cxx:437
1777
+#: src/SongPage.cxx:465
1778
 msgid "Currently playing song"
1779
 msgstr "Brano riprodotto"
1780
 
1781
-#: src/screen_song.cxx:442
1782
+#: src/SongPage.cxx:470
1783
 #, c-format
1784
 msgid "%d kbps"
1785
 msgstr "%d kbps"
1786
 
1787
-#. NOTE: if one day a translator decides to use a multi-byte character
1788
-#. for one of the yes/no keys, we'll have to parse it properly
1789
-#: src/screen_utils.cxx:80
1790
-#, fuzzy, c-format
1791
-msgid "%s [%s/%s] "
1792
-msgstr "Sostituire %s [%s%s] ? "
1793
-
1794
-#: src/screen_utils.cxx:121
1795
-msgid "Password"
1796
-msgstr "Password"
1797
+#: src/SongPage.cxx:554
1798
+msgid "Song"
1799
+msgstr ""
1800
 
1801
-#: src/status_bar.cxx:121
1802
+#: src/StatusBar.cxx:104
1803
 msgid "Playing:"
1804
 msgstr "Riproducendo:"
1805
 
1806
-#: src/status_bar.cxx:124
1807
+#: src/StatusBar.cxx:108
1808
 msgid "[Paused]"
1809
 msgstr "[Pausato]"
1810
 
1811
-#: src/title_bar.cxx:99
1812
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1813
+msgid "Unknown color"
1814
+msgstr ""
1815
+
1816
+#: src/Styles.cxx:333
1817
+msgid "Unknown color field"
1818
+msgstr ""
1819
+
1820
+#: src/Styles.cxx:375
1821
+msgid "Terminal lacks color capabilities"
1822
+msgstr ""
1823
+
1824
+#: src/time_format.cxx:44
1825
+msgid "year"
1826
+msgstr ""
1827
+
1828
+#: src/time_format.cxx:46
1829
+msgid "years"
1830
+msgstr ""
1831
+
1832
+#: src/time_format.cxx:54
1833
+msgid "week"
1834
+msgstr ""
1835
+
1836
+#: src/time_format.cxx:57
1837
+msgid "weeks"
1838
+msgstr ""
1839
+
1840
+#: src/time_format.cxx:65
1841
+msgid "day"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:68
1845
+msgid "days"
1846
+msgstr ""
1847
+
1848
+#: src/TitleBar.cxx:100
1849
 msgid "Volume n/a"
1850
 msgstr "Volume n/a"
1851
 
1852
-#: src/title_bar.cxx:101
1853
+#: src/TitleBar.cxx:102
1854
 #, c-format
1855
 msgid "Volume %d%%"
1856
 msgstr "Volume %d%%"
1857
 
1858
+#~ msgid "Move song up"
1859
+#~ msgstr "Sposta la canzone su"
1860
+
1861
+#~ msgid "Move song down"
1862
+#~ msgstr "Sposta la canzone giù"
1863
+
1864
+#~ msgid "Press %s for a new search"
1865
+#~ msgstr "Preme %s per una nuova ricerca"
1866
+
1867
+#~ msgid "Search: %s"
1868
+#~ msgstr "Cerca: %s"
1869
+
1870
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1871
+#~ msgstr "Collegandosi a %s... [Preme %s per annullare]"
1872
+
1873
+#~ msgid "press %s for the key editor"
1874
+#~ msgstr "preme %s per accedere al editore di tasti"
1875
+
1876
+#~ msgid "Album: %s - %s"
1877
+#~ msgstr "Album: %s - %s"
1878
+
1879
+#~ msgid "Adding album %s..."
1880
+#~ msgstr "Aggiungendo album %s..."
1881
+
1882
+#~ msgid "Adding %s..."
1883
+#~ msgstr "Aggiungendo %s..."
1884
+
1885
+#~ msgid "Error: Screen too small"
1886
+#~ msgstr "Errore: La finestra è tropo piccola"
1887
+
1888
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1889
+#~ msgstr "Errore: Non si ha potuto creare la cartella ~/.ncmpc - %s"
1890
+
1891
+#~ msgid "Error: %s - %s"
1892
+#~ msgstr "Errore: %s - %s"
1893
+
1894
+#, fuzzy
1895
+#~ msgid "%s [%s/%s] "
1896
+#~ msgstr "Sostituire %s [%s%s] ? "
1897
+
1898
 #~ msgid "Delete playlist %s [%s/%s] ? "
1899
 #~ msgstr "Rimuovere la playlist %s [%s/%s] ? "
1900
 
1901
-#~ msgid "Connected to %s"
1902
-#~ msgstr "Connesso a %s"
1903
-
1904
 #~ msgid "Shuffled playlist"
1905
 #~ msgstr "Lista di canzoni mescolata"
1906
 
1907
ncmpc-0.30.tar.xz/po/ko.po -> ncmpc-0.32.tar.xz/po/ko.po Changed
1935
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2009-10-16 17:35+0000\n"
8
 "Last-Translator: Jay Whang <jaypedia@gmail.com>\n"
9
 "Language-Team: Korean <ko@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2009-10-19 13:36+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "알 수 없는 명령"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "모든 트랙"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "경고: 알 수 없는 색상 항목 - %s\n"
27
+msgid "Albums"
28
+msgstr "앨범"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "색상 변경 지원이 부족한 터미널입니다."
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "아티스트의 앨범: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "색상 기능이 없는 터미널입니다."
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "'%s'(을)를 연주목록에 더하기"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "모든 아티스트"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다."
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "키 설정 화면"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "끝내기"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "커서를 위로 올리기"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "커서를 아래로 내리기"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "커서를 화면 맨 위로 옮기기"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "커서를 화면 가운데로 옮기기"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "커서를 화면 맨 아래로 옮기기"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "커서를 리스트 맨 위로 옮기기"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "커서를 리스트 맨 아래로 옮기기"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "위쪽 페이지"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "아래쪽 페이지"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "범위 선택"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "한 줄 아래로 내리기"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "한 줄 위로 올리기"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "화면 반 위로 올리기"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "화면 반 아래로 내리기"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "현재 재생중인 곡을 선택"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "도움말 화면"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "키설정 화면"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "열람하기 화면"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "연주/디렉토리 입력"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "일시정지"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "멈춤"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "연주중인 곡만 선택"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "다음 트랙"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "이전 트랙"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "앞으로 찾기"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "뒤로 찾기"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "음량 높이기"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "음량 낮추기"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "연주목록에서 곡 선택/해제"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "나열한 항목 모두 선택하기"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "연주목록에서 곡 삭제하기"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "반복연주 모드 토클"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "무작위연주 모드 토클"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "싱글 모드 토글"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "소비 모드 토글"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "곡바꿈 모드 토글"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "음악 데이타베이스 업데이트를 시작"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "연주목록에 url/파일 더하기"
286
+msgid "Append song to queue"
287
+msgstr "연주목록에 곡을 더하기"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "루트 디렉토리로 가기"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "상위 디렉토리로 가기"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "열람 화면에 곡을 위치하기"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "항목 위로 올리기"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "항목 아래로 내리기"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "화면 갱신하기"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "찾기 모드 토글"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "자동 가운데 모드 토글"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "다음 화면"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "이전 화면"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "가장 최근 화면으로 교환"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "앞으로 찾기"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "앞으로 다음 찾기"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "뒤로 찾기"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "뒤로 이전 찾기"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "직접 이동"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "아티스트 화면"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "찾기 화면"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "찾기 모드 변경"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "선택하고 현재 연주중인 곡을 보기"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "가사 화면"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "백그라운드 실행을 중지"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "가사 업데이트"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "출력 화면"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "다음 화면"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "정의되지 않음"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Space"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "지우기"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Up"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Down"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Left"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Right"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "키 %s (이)가 %s (와)과 %s (으)로 지정되었습니다."
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "오류"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "잘못된 단축키 정의"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "알 수 없는 명령"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "단축키 설정이 불완전합니다."
545
 
546
@@ -442,818 +377,886 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "잘못된 시간 표시 형식"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "'=' 기호가 없습니다."
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "잘못된 색상 이름"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "불완전한 색상 지정"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "유효하지 않은 숫자"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "잘못된 색상 지정"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "알 수 없는 화면 이름"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "잘못된 검색 모드"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "알 수 없는 검색 모드"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "알 수 없는 설정 요소"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "y"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "색상 변경 지원이 부족한 터미널입니다."
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "이 항목을 지우는 것은 가능하지 않습니다."
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "범위 선택 기능을 사용하지 않습니다."
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "연주목록 지우기"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "범위 선택 기능을 사용합니다."
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "중단됨"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "연주목록을 삭제하였습니다."
647
 
648
-#: src/Main.cxx:182
649
-#, fuzzy, c-format
650
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
651
-msgstr "MPD 버전 %d%d%d (은)는 너무 낮습니다. (필요한 버전 %s)"
652
+#. translators: caption of the browser screen
653
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
654
+msgid "Browse"
655
+msgstr "열람"
656
 
657
-#: src/Main.cxx:317
658
-#, c-format
659
-msgid "press %s for the key editor"
660
-msgstr "키 편집기 사용을 위하여 %s(을)를 누르십시오."
661
+#: src/FileListPage.cxx:121
662
+#, fuzzy, c-format
663
+msgid "Loading playlist '%s'"
664
+msgstr "연주목록 %s(을)를 올리는 중..."
665
 
666
-#. To translators: these credits are shown
667
-#. when ncmpc is started with "--version"
668
-#: src/options.cxx:209 src/options.cxx:212
669
-msgid "translator-credits"
670
-msgstr ""
671
-"Launchpad Contributions:\n"
672
-"  atie https://launchpad.net/~atie-at-matrix\n"
673
-"  bluejay https://launchpad.net/~jaypedia"
674
+#: src/HelpPage.cxx:60
675
+msgid "Movement"
676
+msgstr "이동"
677
 
678
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
679
-msgid "Shuffled queue"
680
-msgstr ""
681
+#: src/HelpPage.cxx:105
682
+msgid "Global"
683
+msgstr "전체"
684
 
685
-#: src/player_command.cxx:184
686
-msgid "Cleared queue"
687
-msgstr ""
688
+#: src/HelpPage.cxx:142
689
+msgid "Play"
690
+msgstr "연주"
691
 
692
-#. query the user for a filename
693
-#: src/save_playlist.cxx:109
694
-msgid "Save queue as"
695
-msgstr ""
696
+#: src/HelpPage.cxx:149
697
+msgid "Center"
698
+msgstr "가운데"
699
 
700
-#: src/save_playlist.cxx:140
701
-#, fuzzy, c-format
702
-msgid "Replace %s?"
703
-msgstr "변경하기 %s [%s/%s] ? "
704
+#: src/HelpPage.cxx:157
705
+msgid "Enter directory/Select and play song"
706
+msgstr "디렉토리를 입력하고 곡을 선택하여 연주합니다."
707
 
708
-#. translators: a dialog was aborted by the user
709
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
710
-#: src/screen_lyrics.cxx:370
711
-msgid "Aborted"
712
-msgstr "중단됨"
713
+#: src/HelpPage.cxx:161
714
+msgid "Delete playlist"
715
+msgstr "연주목록 지우기"
716
 
717
-#. success
718
-#: src/save_playlist.cxx:171
719
-#, c-format
720
-msgid "Saved %s"
721
-msgstr "%s(으)로 저장함"
722
+#: src/HelpPage.cxx:171
723
+#, fuzzy
724
+msgid "New search"
725
+msgstr "찾기"
726
 
727
-#: src/screen.cxx:154
728
-msgid "Repeat mode is on"
729
-msgstr "반복 모드 켜짐"
730
+#: src/HelpPage.cxx:172
731
+msgid "Select and play"
732
+msgstr "선택하고 연주"
733
 
734
-#: src/screen.cxx:155
735
-msgid "Repeat mode is off"
736
-msgstr "반복 모드 꺼짐"
737
+#: src/HelpPage.cxx:183
738
+msgid "View Lyrics"
739
+msgstr "가사 보기"
740
 
741
-#: src/screen.cxx:159
742
-msgid "Random mode is on"
743
-msgstr "무작위 모드 켜짐"
744
+#: src/HelpPage.cxx:184
745
+msgid "(Re)load lyrics"
746
+msgstr "가사 (다시)올리기"
747
 
748
-#: src/screen.cxx:160
749
-msgid "Random mode is off"
750
-msgstr "무작위 모드 꺼짐"
751
+#. to translators: this hotkey aborts the retrieval of lyrics
752
+#. from the server
753
+#: src/HelpPage.cxx:187
754
+msgid "Interrupt retrieval"
755
+msgstr "가사 가져오기 중지"
756
 
757
-#. "single" mode means
758
-#. that MPD will
759
-#. automatically stop
760
-#. after playing one
761
-#. single song
762
-#: src/screen.cxx:169
763
-msgid "Single mode is on"
764
-msgstr "싱글 모드 켜짐"
765
+#: src/HelpPage.cxx:188
766
+msgid "Download lyrics for currently playing song"
767
+msgstr "현재 연주중인 노래의 가사를 다운로드"
768
 
769
-#: src/screen.cxx:170
770
-msgid "Single mode is off"
771
-msgstr "싱글 모드 꺼짐"
772
+#: src/HelpPage.cxx:189
773
+#, fuzzy
774
+msgid "Add or edit lyrics"
775
+msgstr "가사 저장하기"
776
 
777
-#. "consume" mode means
778
-#. that MPD removes each
779
-#. song which has
780
-#. finished playing
781
-#: src/screen.cxx:178
782
-msgid "Consume mode is on"
783
-msgstr "소비 모드 켜짐"
784
+#: src/HelpPage.cxx:190
785
+msgid "Save lyrics"
786
+msgstr "가사 저장하기"
787
 
788
-#: src/screen.cxx:179
789
-msgid "Consume mode is off"
790
-msgstr "소비 모드 꺼짐"
791
+#: src/HelpPage.cxx:191
792
+#, fuzzy
793
+msgid "Delete saved lyrics"
794
+msgstr "가사 저장하기"
795
 
796
-#: src/screen.cxx:182
797
-#, c-format
798
-msgid "Crossfade %d seconds"
799
-msgstr "곡바뀜 %d 초"
800
+#: src/HelpPage.cxx:198
801
+msgid "Enable/disable output"
802
+msgstr "출력 사용하기/안하기"
803
 
804
-#: src/screen.cxx:194
805
-msgid "Database updated"
806
-msgstr "데이터베이스를 업데이트 하였습니다."
807
+#: src/HelpPage.cxx:205
808
+msgid "Write a message"
809
+msgstr ""
810
 
811
-#: src/screen.cxx:226
812
-msgid "Find mode: Wrapped"
813
-msgstr "찾기 방식: 줄 이어짐"
814
+#: src/HelpPage.cxx:210
815
+msgid "Keydef screen"
816
+msgstr "키설정 화면"
817
 
818
-#: src/screen.cxx:227
819
-msgid "Find mode: Normal"
820
-msgstr "찾기 방식: 보통"
821
+#: src/HelpPage.cxx:212
822
+msgid "Edit keydefs for selected command"
823
+msgstr "선택한 명령을 위한 키설정 편집하기"
824
 
825
-#: src/screen.cxx:232
826
-msgid "Auto center mode: On"
827
-msgstr "자동 가운데 방식: 켜짐"
828
+#: src/HelpPage.cxx:213
829
+msgid "Remove selected keydef"
830
+msgstr "선택한 키설정 삭제하기"
831
 
832
-#: src/screen.cxx:233
833
-msgid "Auto center mode: Off"
834
-msgstr "자동 가운데 방식: 꺼짐"
835
+#: src/HelpPage.cxx:214
836
+#, fuzzy
837
+msgid "Add a keydef"
838
+msgstr "새로운 키 더하기"
839
 
840
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
841
-msgid "All tracks"
842
-msgstr "모든 트랙"
843
+#: src/HelpPage.cxx:215
844
+msgid "Go up a level"
845
+msgstr "한 단계 위로 가기"
846
 
847
-#: src/screen_artist.cxx:384
848
-msgid "All artists"
849
-msgstr "모든 아티스트"
850
+#: src/HelpPage.cxx:216
851
+msgid "Apply and save changes"
852
+msgstr "적용하고 변경사항을 저장하기"
853
 
854
-#: src/screen_artist.cxx:389
855
-#, c-format
856
-msgid "Albums of artist: %s"
857
-msgstr "아티스트의 앨범: %s"
858
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
859
+msgid "Help"
860
+msgstr "도움말"
861
 
862
-#: src/screen_artist.cxx:398
863
-#, c-format
864
-msgid "All tracks of artist: %s"
865
-msgstr "아티스트의 모든 트랙: %s"
866
+#: src/i18n.h:43
867
+msgid "y"
868
+msgstr "y"
869
 
870
-#: src/screen_artist.cxx:401
871
-#, c-format
872
-msgid "Album: %s - %s"
873
-msgstr "앨범: %s - %s"
874
+#: src/i18n.h:44
875
+msgid "n"
876
+msgstr "n"
877
 
878
-#: src/screen_artist.cxx:405
879
-#, fuzzy, c-format
880
-msgid "Tracks of no album of artist: %s"
881
-msgstr "아티스트의 앨범: %s"
882
+#: src/KeyName.cxx:31
883
+msgid "Undefined"
884
+msgstr "정의되지 않음"
885
 
886
-#: src/screen_artist.cxx:450
887
-#, fuzzy, c-format
888
-msgid "Adding album %s..."
889
-msgstr "연주목록 %s(을)를 올리는 중..."
890
+#: src/KeyName.cxx:33
891
+msgid "Space"
892
+msgstr "Space"
893
 
894
-#: src/screen_artist.cxx:452
895
-#, fuzzy, c-format
896
-msgid "Adding %s..."
897
-msgstr "올리는 중..."
898
+#: src/KeyName.cxx:35
899
+msgid "Enter"
900
+msgstr "Enter"
901
 
902
-#: src/screen_browser.cxx:122
903
-#, c-format
904
-msgid "Loading playlist %s..."
905
-msgstr "연주목록 %s(을)를 올리는 중..."
906
+#: src/KeyName.cxx:37
907
+msgid "Backspace"
908
+msgstr "Backspace"
909
 
910
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
911
-#: src/screen_browser.cxx:279
912
-#, fuzzy, c-format
913
-msgid "Adding '%s' to queue"
914
-msgstr "'%s'(을)를 연주목록에 더하기"
915
+#: src/KeyName.cxx:39
916
+msgid "Delete"
917
+msgstr "지우기"
918
+
919
+#: src/KeyName.cxx:41
920
+msgid "Up"
921
+msgstr "Up"
922
+
923
+#: src/KeyName.cxx:43
924
+msgid "Down"
925
+msgstr "Down"
926
+
927
+#: src/KeyName.cxx:45
928
+msgid "Left"
929
+msgstr "Left"
930
 
931
-#: src/screen_chat.cxx:59
932
+#: src/KeyName.cxx:47
933
+msgid "Right"
934
+msgstr "Right"
935
+
936
+#: src/KeyName.cxx:49
937
+msgid "Home"
938
+msgstr "Home"
939
+
940
+#: src/KeyName.cxx:51
941
+msgid "End"
942
+msgstr "End"
943
+
944
+#: src/KeyName.cxx:53
945
+msgid "PageDown"
946
+msgstr "PageDown"
947
+
948
+#: src/KeyName.cxx:55
949
+msgid "PageUp"
950
+msgstr "PageUp"
951
+
952
+#: src/KeyName.cxx:57
953
+msgid "Tab"
954
+msgstr "Tab"
955
+
956
+#: src/KeyName.cxx:59
957
+msgid "Shift+Tab"
958
+msgstr "Shift+Tab"
959
+
960
+#: src/KeyName.cxx:61
961
+msgid "Esc"
962
+msgstr "Esc"
963
+
964
+#: src/KeyName.cxx:63
965
+msgid "Insert"
966
+msgstr "Insert"
967
+
968
+#: src/KeyName.cxx:71
969
 #, c-format
970
-msgid ""
971
-"connected to MPD %u.%u.%u (you need at least \n"
972
-"version 0.17.0 to use the chat feature)"
973
+msgid "Ctrl-%c"
974
 msgstr ""
975
 
976
-#: src/screen_chat.cxx:177
977
-msgid "Your message"
978
+#: src/KeyName.cxx:73
979
+#, c-format
980
+msgid "Alt-%c"
981
 msgstr ""
982
 
983
-#: src/screen_chat.cxx:186
984
-msgid "Message could not be sent"
985
-msgstr ""
986
+#: src/ListWindow.cxx:491
987
+msgid "Range selection disabled"
988
+msgstr "범위 선택 기능을 사용하지 않습니다."
989
 
990
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
991
-msgid "Chat"
992
-msgstr ""
993
+#: src/ListWindow.cxx:496
994
+msgid "Range selection enabled"
995
+msgstr "범위 선택 기능을 사용합니다."
996
 
997
-#: src/screen_client.cxx:41
998
-msgid "Database update running..."
999
-msgstr "데이터베이스 업데이트를 실행 중..."
1000
+#. translators: no lyrics were found for the song
1001
+#: src/LyricsPage.cxx:236
1002
+msgid "No lyrics"
1003
+msgstr "가사 없음"
1004
 
1005
-#: src/screen_client.cxx:49
1006
+#: src/LyricsPage.cxx:254
1007
 #, c-format
1008
-msgid "Database update of %s started"
1009
-msgstr "%s 데이터베이스 업데이트를 시작합니다."
1010
+msgid "Lyrics timeout occurred after %d seconds"
1011
+msgstr ""
1012
 
1013
-#: src/screen_client.cxx:52
1014
-msgid "Database update started"
1015
-msgstr "데이터베이스 업데이트를 시작합니다."
1016
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1017
+#: src/LyricsPage.cxx:490
1018
+msgid "Lyrics"
1019
+msgstr "가사"
1020
 
1021
-#. translators: the "delete" command is only possible
1022
-#. for playlists; the user attempted to delete a song
1023
-#. or a directory or something else
1024
-#: src/screen_file.cxx:200
1025
-msgid "Deleting this item is not possible"
1026
-msgstr "이 항목을 지우는 것은 가능하지 않습니다."
1027
+#. translators: this message is displayed
1028
+#. while data is retrieved
1029
+#: src/LyricsPage.cxx:340
1030
+msgid "loading..."
1031
+msgstr "올리는 중..."
1032
 
1033
-#: src/screen_file.cxx:207
1034
-#, fuzzy, c-format
1035
-msgid "Delete playlist %s?"
1036
-msgstr "연주목록 지우기"
1037
+#: src/LyricsPage.cxx:361
1038
+msgid "Editor not configured"
1039
+msgstr ""
1040
 
1041
-#. translators: MPD deleted the playlist, as requested by the
1042
-#. user
1043
-#: src/screen_file.cxx:227
1044
-msgid "Playlist deleted"
1045
+#: src/LyricsPage.cxx:368
1046
+msgid "Do you really want to start an editor and edit these lyrics?"
1047
+msgstr ""
1048
+
1049
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1050
+msgid "Can't start editor"
1051
+msgstr ""
1052
+
1053
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1054
+msgid "Editor exited unexpectedly"
1055
+msgstr ""
1056
+
1057
+#. lyrics for the song were saved on hard disk
1058
+#: src/LyricsPage.cxx:439
1059
+msgid "Lyrics saved"
1060
+msgstr "가사를 저장하였습니다."
1061
+
1062
+#: src/LyricsPage.cxx:445
1063
+#, fuzzy
1064
+msgid "Lyrics deleted"
1065
 msgstr "연주목록을 삭제하였습니다."
1066
 
1067
-#. translators: caption of the browser screen
1068
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1069
-msgid "Browse"
1070
-msgstr "열람"
1071
+#: src/LyricsPage.cxx:446
1072
+#, fuzzy
1073
+msgid "No saved lyrics"
1074
+msgstr "가사 저장하기"
1075
 
1076
-#: src/screen_find.cxx:29
1077
-msgid "Find"
1078
-msgstr "찾기"
1079
+#: src/Main.cxx:167
1080
+#, fuzzy, c-format
1081
+msgid "Connecting to %s"
1082
+msgstr "%s로 접속함"
1083
 
1084
-#: src/screen_find.cxx:30
1085
-msgid "Find backward"
1086
-msgstr "거꾸로 찾기"
1087
+#: src/Main.cxx:187
1088
+#, fuzzy, c-format
1089
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1090
+msgstr "MPD 버전 %d%d%d (은)는 너무 낮습니다. (필요한 버전 %s)"
1091
 
1092
-#: src/screen_find.cxx:31
1093
-msgid "Jump"
1094
-msgstr "이동"
1095
+#. To translators: these credits are shown
1096
+#. when ncmpc is started with "--version"
1097
+#: src/options.cxx:213 src/options.cxx:216
1098
+msgid "translator-credits"
1099
+msgstr ""
1100
+"Launchpad Contributions:\n"
1101
+"  atie https://launchpad.net/~atie-at-matrix\n"
1102
+"  bluejay https://launchpad.net/~jaypedia"
1103
 
1104
-#: src/screen_find.cxx:82
1105
+#: src/OutputsPage.cxx:87
1106
 #, c-format
1107
-msgid "Unable to find '%s'"
1108
-msgstr "'%s'(을)를 찾을 수 없습니다."
1109
-
1110
-#: src/screen_help.cxx:39
1111
-msgid "Movement"
1112
-msgstr "이동"
1113
+msgid "Output '%s' enabled"
1114
+msgstr "출력 '%s'(을)를 사용합니다"
1115
 
1116
-#: src/screen_help.cxx:84
1117
-msgid "Global"
1118
-msgstr "전체"
1119
+#: src/OutputsPage.cxx:98
1120
+#, c-format
1121
+msgid "Output '%s' disabled"
1122
+msgstr "출력 '%s'(을)를 사용 안합니다"
1123
 
1124
-#: src/screen_help.cxx:121
1125
-msgid "Play"
1126
-msgstr "연주"
1127
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1128
+msgid "Outputs"
1129
+msgstr "출력"
1130
 
1131
-#: src/screen_help.cxx:124
1132
-msgid "Move song up"
1133
-msgstr "곡을 위로 올리기"
1134
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1135
+msgid "Shuffled queue"
1136
+msgstr ""
1137
 
1138
-#: src/screen_help.cxx:125
1139
-msgid "Move song down"
1140
-msgstr "곡을 아래로 내리기"
1141
+#: src/player_command.cxx:186
1142
+msgid "Cleared queue"
1143
+msgstr ""
1144
 
1145
-#: src/screen_help.cxx:128
1146
-msgid "Center"
1147
-msgstr "가운데"
1148
+#. get path
1149
+#: src/QueuePage.cxx:307
1150
+msgid "Add"
1151
+msgstr "더하기"
1152
 
1153
-#: src/screen_help.cxx:136
1154
-msgid "Enter directory/Select and play song"
1155
-msgstr "디렉토리를 입력하고 곡을 선택하여 연주합니다."
1156
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1157
+msgid "Queue"
1158
+msgstr ""
1159
 
1160
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1161
-#, fuzzy
1162
-msgid "Append song to queue"
1163
-msgstr "연주목록에 곡을 더하기"
1164
+#: src/QueuePage.cxx:380
1165
+#, c-format
1166
+msgid "Queue on %s"
1167
+msgstr ""
1168
 
1169
-#: src/screen_help.cxx:140
1170
-msgid "Delete playlist"
1171
-msgstr "연주목록 지우기"
1172
+#. query the user for a filename
1173
+#: src/save_playlist.cxx:85
1174
+msgid "Save queue as"
1175
+msgstr ""
1176
 
1177
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1178
-msgid "Search"
1179
-msgstr "찾기"
1180
+#: src/save_playlist.cxx:107
1181
+#, fuzzy, c-format
1182
+msgid "Replace %s?"
1183
+msgstr "변경하기 %s [%s/%s] ? "
1184
 
1185
-#: src/screen_help.cxx:151
1186
-msgid "Select and play"
1187
-msgstr "선택하고 연주"
1188
+#. success
1189
+#: src/save_playlist.cxx:128
1190
+#, c-format
1191
+msgid "Saved %s"
1192
+msgstr "%s(으)로 저장함"
1193
 
1194
-#: src/screen_help.cxx:162
1195
-msgid "View Lyrics"
1196
-msgstr "가사 보기"
1197
+#: src/screen_artist.cxx:186
1198
+#, c-format
1199
+msgid "All tracks of artist: %s"
1200
+msgstr "아티스트의 모든 트랙: %s"
1201
 
1202
-#: src/screen_help.cxx:163
1203
-msgid "(Re)load lyrics"
1204
-msgstr "가사 (다시)올리기"
1205
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1206
+msgid "Album"
1207
+msgstr "앨범"
1208
 
1209
-#. to translators: this hotkey aborts the retrieval of lyrics
1210
-#. from the server
1211
-#: src/screen_help.cxx:166
1212
-msgid "Interrupt retrieval"
1213
-msgstr "가사 가져오기 중지"
1214
+#: src/screen_artist.cxx:195
1215
+#, fuzzy, c-format
1216
+msgid "Tracks of no album of artist: %s"
1217
+msgstr "아티스트의 앨범: %s"
1218
 
1219
-#: src/screen_help.cxx:167
1220
-msgid "Download lyrics for currently playing song"
1221
-msgstr "현재 연주중인 노래의 가사를 다운로드"
1222
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1223
+msgid "Artist"
1224
+msgstr "아티스트"
1225
 
1226
-#: src/screen_help.cxx:168
1227
+#: src/screen_client.cxx:41
1228
 #, fuzzy
1229
-msgid "Add or edit lyrics"
1230
-msgstr "가사 저장하기"
1231
+msgid "Database update running"
1232
+msgstr "데이터베이스 업데이트를 실행 중..."
1233
 
1234
-#: src/screen_help.cxx:169
1235
-msgid "Save lyrics"
1236
-msgstr "가사 저장하기"
1237
+#: src/screen_client.cxx:48
1238
+#, c-format
1239
+msgid "Database update of %s started"
1240
+msgstr "%s 데이터베이스 업데이트를 시작합니다."
1241
 
1242
-#: src/screen_help.cxx:170
1243
-#, fuzzy
1244
-msgid "Delete saved lyrics"
1245
-msgstr "가사 저장하기"
1246
+#: src/screen_client.cxx:51
1247
+msgid "Database update started"
1248
+msgstr "데이터베이스 업데이트를 시작합니다."
1249
 
1250
-#: src/screen_help.cxx:177
1251
-msgid "Enable/disable output"
1252
-msgstr "출력 사용하기/안하기"
1253
+#: src/screen.cxx:160
1254
+msgid "Repeat mode is on"
1255
+msgstr "반복 모드 켜짐"
1256
 
1257
-#: src/screen_help.cxx:184
1258
-msgid "Write a message"
1259
-msgstr ""
1260
+#: src/screen.cxx:161
1261
+msgid "Repeat mode is off"
1262
+msgstr "반복 모드 꺼짐"
1263
 
1264
-#: src/screen_help.cxx:189
1265
-msgid "Keydef screen"
1266
-msgstr "키설정 화면"
1267
+#: src/screen.cxx:165
1268
+msgid "Random mode is on"
1269
+msgstr "무작위 모드 켜짐"
1270
 
1271
-#: src/screen_help.cxx:191
1272
-msgid "Edit keydefs for selected command"
1273
-msgstr "선택한 명령을 위한 키설정 편집하기"
1274
+#: src/screen.cxx:166
1275
+msgid "Random mode is off"
1276
+msgstr "무작위 모드 꺼짐"
1277
 
1278
-#: src/screen_help.cxx:192
1279
-msgid "Remove selected keydef"
1280
-msgstr "선택한 키설정 삭제하기"
1281
+#. "single" mode means
1282
+#. that MPD will
1283
+#. automatically stop
1284
+#. after playing one
1285
+#. single song
1286
+#: src/screen.cxx:175
1287
+msgid "Single mode is on"
1288
+msgstr "싱글 모드 켜짐"
1289
 
1290
-#: src/screen_help.cxx:193
1291
-#, fuzzy
1292
-msgid "Add a keydef"
1293
-msgstr "새로운 키 더하기"
1294
+#: src/screen.cxx:176
1295
+msgid "Single mode is off"
1296
+msgstr "싱글 모드 꺼짐"
1297
 
1298
-#: src/screen_help.cxx:194
1299
-msgid "Go up a level"
1300
-msgstr "한 단계 위로 가기"
1301
+#. "consume" mode means
1302
+#. that MPD removes each
1303
+#. song which has
1304
+#. finished playing
1305
+#: src/screen.cxx:184
1306
+msgid "Consume mode is on"
1307
+msgstr "소비 모드 켜짐"
1308
 
1309
-#: src/screen_help.cxx:195
1310
-msgid "Apply and save changes"
1311
-msgstr "적용하고 변경사항을 저장하기"
1312
+#: src/screen.cxx:185
1313
+msgid "Consume mode is off"
1314
+msgstr "소비 모드 꺼짐"
1315
 
1316
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1317
-msgid "Help"
1318
-msgstr "도움말"
1319
+#: src/screen.cxx:188
1320
+#, c-format
1321
+msgid "Crossfade %d seconds"
1322
+msgstr "곡바뀜 %d 초"
1323
 
1324
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1325
-msgid "Error: Screen too small"
1326
-msgstr "오류: 화면이 너무 작습니다."
1327
+#: src/screen.cxx:200
1328
+msgid "Database updated"
1329
+msgstr "데이터베이스를 업데이트 하였습니다."
1330
 
1331
-#: src/screen_keydef.cxx:141
1332
-msgid "You have new key bindings"
1333
-msgstr "새로운 키 조합을 지정하였습니다."
1334
+#: src/screen.cxx:250
1335
+msgid "Find mode: Wrapped"
1336
+msgstr "찾기 방식: 줄 이어짐"
1337
 
1338
-#: src/screen_keydef.cxx:143
1339
-msgid "Keybindings unchanged."
1340
-msgstr "키 조합을 바꾸지 않았습니다."
1341
+#: src/screen.cxx:251
1342
+msgid "Find mode: Normal"
1343
+msgstr "찾기 방식: 보통"
1344
 
1345
-#: src/screen_keydef.cxx:153
1346
-#, c-format
1347
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1348
-msgstr "오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s"
1349
+#: src/screen.cxx:256
1350
+msgid "Auto center mode: On"
1351
+msgstr "자동 가운데 방식: 켜짐"
1352
 
1353
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1354
-#, c-format
1355
-msgid "Error: %s - %s"
1356
-msgstr "오류: %s - %s"
1357
+#: src/screen.cxx:257
1358
+msgid "Auto center mode: Off"
1359
+msgstr "자동 가운데 방식: 꺼짐"
1360
 
1361
-#: src/screen_keydef.cxx:171
1362
+#: src/screen_find.cxx:31
1363
+msgid "Find"
1364
+msgstr "찾기"
1365
+
1366
+#: src/screen_find.cxx:32
1367
+msgid "Find backward"
1368
+msgstr "거꾸로 찾기"
1369
+
1370
+#: src/screen_find.cxx:33
1371
+msgid "Jump"
1372
+msgstr "이동"
1373
+
1374
+#: src/screen_find.cxx:79
1375
 #, c-format
1376
-msgid "Wrote %s"
1377
-msgstr "%s(을)를 썼습니다."
1378
+msgid "Unable to find '%s'"
1379
+msgstr "'%s'(을)를 찾을 수 없습니다."
1380
 
1381
-#: src/screen_keydef.cxx:250
1382
+#: src/screen_keydef.cxx:161
1383
 msgid "Deleted"
1384
 msgstr "삭제됨"
1385
 
1386
-#: src/screen_keydef.cxx:265
1387
+#: src/screen_keydef.cxx:177
1388
 #, c-format
1389
 msgid "Enter new key for %s: "
1390
 msgstr "%s(을)를 위한 새 키를 입력하세요: "
1391
 
1392
-#: src/screen_keydef.cxx:276
1393
+#: src/screen_keydef.cxx:187
1394
 msgid "Ctrl-Space can't be used"
1395
 msgstr ""
1396
 
1397
-#: src/screen_keydef.cxx:282
1398
+#: src/screen_keydef.cxx:193
1399
 #, c-format
1400
 msgid "Error: key %s is already used for %s"
1401
 msgstr "오류: 키 %s(은)는 이미 %s(을)를 위하여 사용합니다."
1402
 
1403
-#: src/screen_keydef.cxx:291
1404
+#: src/screen_keydef.cxx:202
1405
 #, c-format
1406
 msgid "Assigned %s to %s"
1407
 msgstr "%s(을)를 %s(으)로 지정하였습니다."
1408
 
1409
-#: src/screen_keydef.cxx:317
1410
-msgid "===> Apply key bindings "
1411
-msgstr "===> 키 조합을 적용 "
1412
-
1413
-#: src/screen_keydef.cxx:319
1414
-msgid "===> Apply & Save key bindings  "
1415
-msgstr "===> 키 조합을 적용하고 저장  "
1416
-
1417
-#: src/screen_keydef.cxx:347
1418
+#: src/screen_keydef.cxx:229
1419
 msgid "Add new key"
1420
 msgstr "새로운 키 더하기"
1421
 
1422
-#: src/screen_keydef.cxx:410
1423
-msgid "Note: Did you forget to 'Apply' your changes?"
1424
-msgstr "주의: 변경사항 '적용하기'를 잊었나요?"
1425
-
1426
-#: src/screen_keydef.cxx:417
1427
-msgid "Edit key bindings"
1428
-msgstr "키 조합 편집하기"
1429
-
1430
-#: src/screen_keydef.cxx:419
1431
+#: src/screen_keydef.cxx:251
1432
 #, c-format
1433
 msgid "Edit keys for %s"
1434
 msgstr "%s(을)를 위한 키 편집"
1435
 
1436
-#. translators: no lyrics were found for the song
1437
-#: src/screen_lyrics.cxx:208
1438
-msgid "No lyrics"
1439
-msgstr "가사 없음"
1440
-
1441
-#: src/screen_lyrics.cxx:226
1442
-#, c-format
1443
-msgid "Lyrics timeout occurred after %d seconds"
1444
-msgstr ""
1445
-
1446
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1447
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1448
-msgid "Lyrics"
1449
-msgstr "가사"
1450
-
1451
-#. translators: this message is displayed
1452
-#. while data is retrieved
1453
-#: src/screen_lyrics.cxx:330
1454
-msgid "loading..."
1455
-msgstr "올리는 중..."
1456
-
1457
-#: src/screen_lyrics.cxx:361
1458
-msgid "Editor not configured"
1459
-msgstr ""
1460
-
1461
-#: src/screen_lyrics.cxx:367
1462
-msgid "Do you really want to start an editor and edit these lyrics?"
1463
-msgstr ""
1464
-
1465
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1466
-msgid "Can't start editor"
1467
-msgstr ""
1468
-
1469
-#: src/screen_lyrics.cxx:411
1470
-#, c-format
1471
-msgid "Editor exited unexpectedly (%d)"
1472
-msgstr ""
1473
-
1474
-#: src/screen_lyrics.cxx:414
1475
-#, c-format
1476
-msgid "Editor exited unexpectedly (signal %d)"
1477
-msgstr ""
1478
-
1479
-#. lyrics for the song were saved on hard disk
1480
-#: src/screen_lyrics.cxx:436
1481
-msgid "Lyrics saved"
1482
-msgstr "가사를 저장하였습니다."
1483
+#: src/screen_keydef.cxx:393
1484
+msgid "You have new key bindings"
1485
+msgstr "새로운 키 조합을 지정하였습니다."
1486
 
1487
-#: src/screen_lyrics.cxx:443
1488
-#, fuzzy
1489
-msgid "Lyrics deleted"
1490
-msgstr "연주목록을 삭제하였습니다."
1491
+#: src/screen_keydef.cxx:395
1492
+msgid "Keybindings unchanged."
1493
+msgstr "키 조합을 바꾸지 않았습니다."
1494
 
1495
-#: src/screen_lyrics.cxx:446
1496
+#: src/screen_keydef.cxx:405
1497
 #, fuzzy
1498
-msgid "No saved lyrics"
1499
-msgstr "가사 저장하기"
1500
+msgid "Unable to write configuration"
1501
+msgstr "단축키 설정이 불완전합니다."
1502
 
1503
-#: src/screen_outputs.cxx:60
1504
+#: src/screen_keydef.cxx:421
1505
 #, c-format
1506
-msgid "Output '%s' enabled"
1507
-msgstr "출력 '%s'(을)를 사용합니다"
1508
+msgid "Wrote %s"
1509
+msgstr "%s(을)를 썼습니다."
1510
 
1511
-#: src/screen_outputs.cxx:71
1512
-#, c-format
1513
-msgid "Output '%s' disabled"
1514
-msgstr "출력 '%s'(을)를 사용 안합니다"
1515
+#: src/screen_keydef.cxx:433
1516
+msgid "===> Apply key bindings "
1517
+msgstr "===> 키 조합을 적용 "
1518
 
1519
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1520
-msgid "Outputs"
1521
-msgstr "출력"
1522
+#: src/screen_keydef.cxx:435
1523
+msgid "===> Apply & Save key bindings  "
1524
+msgstr "===> 키 조합을 적용하고 저장  "
1525
 
1526
-#. get path
1527
-#: src/screen_queue.cxx:274
1528
-msgid "Add"
1529
-msgstr "더하기"
1530
+#: src/screen_keydef.cxx:472
1531
+msgid "Edit key bindings"
1532
+msgstr "키 조합 편집하기"
1533
 
1534
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1535
-msgid "Queue"
1536
-msgstr ""
1537
+#: src/screen_keydef.cxx:554
1538
+msgid "Note: Did you forget to 'Apply' your changes?"
1539
+msgstr "주의: 변경사항 '적용하기'를 잊었나요?"
1540
 
1541
-#: src/screen_queue.cxx:384
1542
-#, c-format
1543
-msgid "Queue on %s"
1544
+#: src/screen_keydef.cxx:604
1545
+msgid "Keys"
1546
 msgstr ""
1547
 
1548
-#: src/screen_search.cxx:48
1549
+#: src/screen_utils.cxx:124
1550
+msgid "Password"
1551
+msgstr "열쇠글"
1552
+
1553
+#: src/SearchPage.cxx:51
1554
 msgid "artist"
1555
 msgstr "아티스트"
1556
 
1557
-#: src/screen_search.cxx:49
1558
+#: src/SearchPage.cxx:52
1559
 msgid "album"
1560
 msgstr "앨범"
1561
 
1562
-#: src/screen_search.cxx:50
1563
+#: src/SearchPage.cxx:53
1564
 msgid "title"
1565
 msgstr "제목"
1566
 
1567
-#: src/screen_search.cxx:51
1568
+#: src/SearchPage.cxx:54
1569
 msgid "track"
1570
 msgstr "트랙"
1571
 
1572
-#: src/screen_search.cxx:52
1573
+#: src/SearchPage.cxx:55
1574
 msgid "name"
1575
 msgstr "이름"
1576
 
1577
-#: src/screen_search.cxx:53
1578
+#: src/SearchPage.cxx:56
1579
 msgid "genre"
1580
 msgstr "장르"
1581
 
1582
-#: src/screen_search.cxx:54
1583
+#: src/SearchPage.cxx:57
1584
 msgid "date"
1585
 msgstr "날짜"
1586
 
1587
-#: src/screen_search.cxx:55
1588
+#: src/SearchPage.cxx:58
1589
 msgid "composer"
1590
 msgstr "작곡가"
1591
 
1592
-#: src/screen_search.cxx:56
1593
+#: src/SearchPage.cxx:59
1594
 msgid "performer"
1595
 msgstr "연주가"
1596
 
1597
-#: src/screen_search.cxx:57
1598
+#: src/SearchPage.cxx:60
1599
 msgid "comment"
1600
 msgstr "주석"
1601
 
1602
-#: src/screen_search.cxx:65
1603
+#: src/SearchPage.cxx:68
1604
 msgid "file"
1605
 msgstr "파일"
1606
 
1607
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1608
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1609
 msgid "Title"
1610
 msgstr "제목"
1611
 
1612
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1613
-msgid "Artist"
1614
-msgstr "아티스트"
1615
-
1616
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1617
-msgid "Album"
1618
-msgstr "앨범"
1619
-
1620
-#: src/screen_search.cxx:85
1621
+#: src/SearchPage.cxx:88
1622
 msgid "Filename"
1623
 msgstr "파일이름"
1624
 
1625
-#: src/screen_search.cxx:86
1626
+#: src/SearchPage.cxx:89
1627
 msgid "Artist + Title"
1628
 msgstr "아티스트 + 제목"
1629
 
1630
-#: src/screen_search.cxx:244
1631
-#, c-format
1632
-msgid "No argument for search tag %s"
1633
-msgstr "찾기 태그 %s위한 인자가 없습니다."
1634
-
1635
-#: src/screen_search.cxx:253
1636
+#: src/SearchPage.cxx:270
1637
 #, c-format
1638
 msgid "Bad search tag %s"
1639
 msgstr "잘못된 찾기 태그 %s"
1640
 
1641
-#. if( pattern==nullptr )
1642
-#. search_new(screen, c);
1643
-#. else
1644
-#: src/screen_search.cxx:400
1645
+#: src/SearchPage.cxx:284
1646
 #, c-format
1647
-msgid "Press %s for a new search"
1648
-msgstr "새로운 찾기를 위하여 %s(을)를 누르십시오."
1649
-
1650
-#: src/screen_search.cxx:427
1651
-#, c-format
1652
-msgid "Search: %s"
1653
-msgstr "찾기: %s"
1654
-
1655
-#: src/screen_search.cxx:430
1656
-#, c-format
1657
-msgid "Search: Results for %s [%s]"
1658
-msgstr "찾기: %s 결과 [%s]"
1659
+msgid "No argument for search tag %s"
1660
+msgstr "찾기 태그 %s위한 인자가 없습니다."
1661
 
1662
-#: src/screen_search.cxx:434
1663
-#, c-format
1664
-msgid "Search: Press %s for a new search [%s]"
1665
-msgstr "찾기: %s(을)를 눌러 새롭게 찾기 [%s]"
1666
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1667
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1668
+msgid "Search"
1669
+msgstr "찾기"
1670
 
1671
-#: src/screen_search.cxx:458
1672
+#: src/SearchPage.cxx:436
1673
 #, c-format
1674
 msgid "Search mode: %s"
1675
 msgstr "찾기 방식: %s"
1676
 
1677
-#: src/screen_song.cxx:54
1678
+#: src/SongPage.cxx:67
1679
 msgid "Length"
1680
 msgstr "길이"
1681
 
1682
-#: src/screen_song.cxx:55
1683
+#: src/SongPage.cxx:68
1684
 msgid "Position"
1685
 msgstr ""
1686
 
1687
-#: src/screen_song.cxx:56
1688
+#: src/SongPage.cxx:69
1689
 msgid "Composer"
1690
 msgstr "작곡가"
1691
 
1692
-#: src/screen_song.cxx:57
1693
+#: src/SongPage.cxx:70
1694
 msgid "Name"
1695
 msgstr "이름"
1696
 
1697
-#: src/screen_song.cxx:58
1698
+#: src/SongPage.cxx:71
1699
 msgid "Disc"
1700
 msgstr "디스크"
1701
 
1702
-#: src/screen_song.cxx:59
1703
+#: src/SongPage.cxx:72
1704
 msgid "Track"
1705
 msgstr "트랙"
1706
 
1707
-#: src/screen_song.cxx:60
1708
+#: src/SongPage.cxx:73
1709
 msgid "Date"
1710
 msgstr "날짜"
1711
 
1712
-#: src/screen_song.cxx:61
1713
+#: src/SongPage.cxx:74
1714
 msgid "Genre"
1715
 msgstr "장르"
1716
 
1717
-#: src/screen_song.cxx:62
1718
+#: src/SongPage.cxx:75
1719
 msgid "Comment"
1720
 msgstr "주석"
1721
 
1722
-#: src/screen_song.cxx:63
1723
+#: src/SongPage.cxx:76
1724
 msgid "Path"
1725
 msgstr "경로"
1726
 
1727
-#: src/screen_song.cxx:64
1728
+#: src/SongPage.cxx:77
1729
 msgid "Bitrate"
1730
 msgstr "비트 전송률"
1731
 
1732
-#: src/screen_song.cxx:65
1733
+#: src/SongPage.cxx:78
1734
 msgid "Format"
1735
 msgstr ""
1736
 
1737
-#: src/screen_song.cxx:82
1738
+#: src/SongPage.cxx:95
1739
 msgid "Number of artists"
1740
 msgstr "아티스트 수"
1741
 
1742
-#: src/screen_song.cxx:83
1743
+#: src/SongPage.cxx:96
1744
 msgid "Number of albums"
1745
 msgstr "앨범 수"
1746
 
1747
-#: src/screen_song.cxx:84
1748
+#: src/SongPage.cxx:97
1749
 msgid "Number of songs"
1750
 msgstr "곡 수"
1751
 
1752
-#: src/screen_song.cxx:85
1753
+#: src/SongPage.cxx:98
1754
 msgid "Uptime"
1755
 msgstr "업타임"
1756
 
1757
-#: src/screen_song.cxx:86
1758
+#: src/SongPage.cxx:99
1759
 msgid "Most recent db update"
1760
 msgstr "가장 최근의 데이타베이스 업데이트"
1761
 
1762
-#: src/screen_song.cxx:87
1763
+#: src/SongPage.cxx:100
1764
 msgid "Playtime"
1765
 msgstr "연주시간"
1766
 
1767
-#: src/screen_song.cxx:88
1768
+#: src/SongPage.cxx:101
1769
 msgid "DB playtime"
1770
 msgstr "데이타베이스 연주시간"
1771
 
1772
-#: src/screen_song.cxx:173
1773
+#: src/SongPage.cxx:204
1774
 msgid "Song viewer"
1775
 msgstr "곡 보기"
1776
 
1777
-#: src/screen_song.cxx:337
1778
+#: src/SongPage.cxx:370
1779
 msgid "MPD statistics"
1780
 msgstr "MPD 통계"
1781
 
1782
-#: src/screen_song.cxx:427
1783
+#: src/SongPage.cxx:455
1784
 msgid "Selected song"
1785
 msgstr "선택한 곡"
1786
 
1787
-#: src/screen_song.cxx:437
1788
+#: src/SongPage.cxx:465
1789
 msgid "Currently playing song"
1790
 msgstr "현재 연주중인 곡"
1791
 
1792
-#: src/screen_song.cxx:442
1793
+#: src/SongPage.cxx:470
1794
 #, c-format
1795
 msgid "%d kbps"
1796
 msgstr "%d kbps"
1797
 
1798
-#. NOTE: if one day a translator decides to use a multi-byte character
1799
-#. for one of the yes/no keys, we'll have to parse it properly
1800
-#: src/screen_utils.cxx:80
1801
-#, fuzzy, c-format
1802
-msgid "%s [%s/%s] "
1803
-msgstr "변경하기 %s [%s/%s] ? "
1804
-
1805
-#: src/screen_utils.cxx:121
1806
-msgid "Password"
1807
-msgstr "열쇠글"
1808
+#: src/SongPage.cxx:554
1809
+msgid "Song"
1810
+msgstr ""
1811
 
1812
-#: src/status_bar.cxx:121
1813
+#: src/StatusBar.cxx:104
1814
 msgid "Playing:"
1815
 msgstr "연주중:"
1816
 
1817
-#: src/status_bar.cxx:124
1818
+#: src/StatusBar.cxx:108
1819
 msgid "[Paused]"
1820
 msgstr "[멈춰짐]"
1821
 
1822
-#: src/title_bar.cxx:99
1823
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1824
+#, fuzzy
1825
+msgid "Unknown color"
1826
+msgstr "알 수 없는 명령"
1827
+
1828
+#: src/Styles.cxx:333
1829
+#, fuzzy
1830
+msgid "Unknown color field"
1831
+msgstr "경고: 알 수 없는 색상 항목 - %s\n"
1832
+
1833
+#: src/Styles.cxx:375
1834
+msgid "Terminal lacks color capabilities"
1835
+msgstr "색상 기능이 없는 터미널입니다."
1836
+
1837
+#: src/time_format.cxx:44
1838
+msgid "year"
1839
+msgstr ""
1840
+
1841
+#: src/time_format.cxx:46
1842
+msgid "years"
1843
+msgstr ""
1844
+
1845
+#: src/time_format.cxx:54
1846
+msgid "week"
1847
+msgstr ""
1848
+
1849
+#: src/time_format.cxx:57
1850
+msgid "weeks"
1851
+msgstr ""
1852
+
1853
+#: src/time_format.cxx:65
1854
+msgid "day"
1855
+msgstr ""
1856
+
1857
+#: src/time_format.cxx:68
1858
+msgid "days"
1859
+msgstr ""
1860
+
1861
+#: src/TitleBar.cxx:100
1862
 msgid "Volume n/a"
1863
 msgstr "음량 없음"
1864
 
1865
-#: src/title_bar.cxx:101
1866
+#: src/TitleBar.cxx:102
1867
 #, c-format
1868
 msgid "Volume %d%%"
1869
 msgstr "음량 %d%%"
1870
 
1871
+#, fuzzy
1872
+#~ msgid "Add url/file to queue"
1873
+#~ msgstr "연주목록에 url/파일 더하기"
1874
+
1875
+#~ msgid "Move song up"
1876
+#~ msgstr "곡을 위로 올리기"
1877
+
1878
+#~ msgid "Move song down"
1879
+#~ msgstr "곡을 아래로 내리기"
1880
+
1881
+#~ msgid "Press %s for a new search"
1882
+#~ msgstr "새로운 찾기를 위하여 %s(을)를 누르십시오."
1883
+
1884
+#~ msgid "Search: %s"
1885
+#~ msgstr "찾기: %s"
1886
+
1887
+#~ msgid "Search: Results for %s [%s]"
1888
+#~ msgstr "찾기: %s 결과 [%s]"
1889
+
1890
+#~ msgid "Search: Press %s for a new search [%s]"
1891
+#~ msgstr "찾기: %s(을)를 눌러 새롭게 찾기 [%s]"
1892
+
1893
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1894
+#~ msgstr "%s(으)로 연결중입니다. [취소하려면 %s키를 누르십시오]"
1895
+
1896
+#~ msgid "press %s for the key editor"
1897
+#~ msgstr "키 편집기 사용을 위하여 %s(을)를 누르십시오."
1898
+
1899
+#~ msgid "Album: %s - %s"
1900
+#~ msgstr "앨범: %s - %s"
1901
+
1902
+#, fuzzy
1903
+#~ msgid "Adding album %s..."
1904
+#~ msgstr "연주목록 %s(을)를 올리는 중..."
1905
+
1906
+#, fuzzy
1907
+#~ msgid "Adding %s..."
1908
+#~ msgstr "올리는 중..."
1909
+
1910
+#~ msgid "Error: Screen too small"
1911
+#~ msgstr "오류: 화면이 너무 작습니다."
1912
+
1913
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1914
+#~ msgstr "오류: ~/.ncmpc 폴더를 만들 수 없습니다. - %s"
1915
+
1916
+#~ msgid "Error: %s - %s"
1917
+#~ msgstr "오류: %s - %s"
1918
+
1919
+#, fuzzy
1920
+#~ msgid "%s [%s/%s] "
1921
+#~ msgstr "변경하기 %s [%s/%s] ? "
1922
+
1923
 #~ msgid "Delete playlist %s [%s/%s] ? "
1924
 #~ msgstr "연주목록 %s [%s/%s] 삭제하기 ? "
1925
 
1926
 #~ msgid "Warning: Unknown color - %s\n"
1927
 #~ msgstr "경고: 알 수 없는 색상 - %s\n"
1928
 
1929
-#~ msgid "Connected to %s"
1930
-#~ msgstr "%s로 접속함"
1931
-
1932
 #~ msgid "Shuffled playlist"
1933
 #~ msgstr "섞여진 연주목록"
1934
 
1935
ncmpc-0.30.tar.xz/po/nb.po -> ncmpc-0.32.tar.xz/po/nb.po Changed
2044
 
1
@@ -7,434 +7,369 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.11.0\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
-"PO-Revision-Date: 2010-07-03 16:34+0000\n"
7
-"Last-Translator: Mathias Bøhn Grytemark <Unknown>\n"
8
-"Language-Team: no <no@li.org>\n"
9
-"Language: \n"
10
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
11
+"PO-Revision-Date: 2018-09-18 11:08+0000\n"
12
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
13
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/ncmpc/"
14
+"translations/nb/>\n"
15
+"Language: nb\n"
16
 "MIME-Version: 1.0\n"
17
-"Content-Type: text/plain; charset=ISO-8859-1\n"
18
+"Content-Type: text/plain; charset=UTF-8\n"
19
 "Content-Transfer-Encoding: 8bit\n"
20
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
21
+"X-Generator: Weblate 3.2-dev\n"
22
 "X-Launchpad-Export-Date: 2010-07-21 05:36+0000\n"
23
-"X-Generator: Launchpad (build Unknown)\n"
24
 
25
-#: src/colors.cxx:156
26
-#, fuzzy
27
-msgid "Unknown color"
28
-msgstr "Ukjent kommando"
29
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
30
+msgid "All tracks"
31
+msgstr "Alle spor"
32
 
33
-#: src/colors.cxx:195
34
-#, fuzzy
35
-msgid "Unknown color field"
36
-msgstr "Advarsel: %s er ikke definert.\n"
37
+#: src/AlbumListPage.cxx:144
38
+msgid "Albums"
39
+msgstr "Album"
40
 
41
-#: src/colors.cxx:228
42
-msgid "Terminal lacks support for changing colors"
43
-msgstr "Terminalen mangler støtte for omdefinering av farger"
44
+#: src/AlbumListPage.cxx:146
45
+#, c-format
46
+msgid "Albums of artist: %s"
47
+msgstr "Albumer fra artist: %s"
48
 
49
-#: src/colors.cxx:237
50
-msgid "Terminal lacks color capabilities"
51
-msgstr "Terminalen mangler støtte for farger"
52
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
53
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
54
+#, c-format
55
+msgid "Adding '%s' to queue"
56
+msgstr "Legger til \"%s\" i spillelisten"
57
+
58
+#: src/ArtistListPage.cxx:114
59
+msgid "All artists"
60
+msgstr "Alle artister"
61
+
62
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
63
+#, c-format
64
+msgid "Key %s assigned to %s and %s"
65
+msgstr "%s-tasten satt til %s og %s"
66
+
67
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
68
+msgid "Chat"
69
+msgstr "Sludre"
70
 
71
-#: src/command.cxx:63
72
+#: src/ChatPage.cxx:160
73
+msgid "Your message"
74
+msgstr "Din melding"
75
+
76
+#: src/ChatPage.cxx:169
77
+msgid "Message could not be sent"
78
+msgstr "Meldingen kunne ikke sendes"
79
+
80
+#: src/Command.cxx:29
81
 msgid "Key configuration screen"
82
 msgstr "Tastaturkonfigurasjon"
83
 
84
-#: src/command.cxx:66
85
+#: src/Command.cxx:32
86
 msgid "Quit"
87
 msgstr "Avslutt"
88
 
89
-#: src/command.cxx:70
90
+#: src/Command.cxx:36
91
 msgid "Move cursor up"
92
-msgstr "Flytt markør opp"
93
+msgstr "Flytt markør opp"
94
 
95
-#: src/command.cxx:72
96
+#: src/Command.cxx:38
97
 msgid "Move cursor down"
98
-msgstr "Flytt markør ned"
99
+msgstr "Flytt markør ned"
100
 
101
-#: src/command.cxx:74
102
+#: src/Command.cxx:40
103
 msgid "Move cursor to the top of screen"
104
 msgstr "Flytt peker til toppen av skjermen"
105
 
106
-#: src/command.cxx:76
107
+#: src/Command.cxx:42
108
 msgid "Move cursor to the middle of screen"
109
-msgstr ""
110
+msgstr "Flytt pekeren til midten av skjermen"
111
 
112
-#: src/command.cxx:78
113
+#: src/Command.cxx:44
114
 msgid "Move cursor to the bottom of screen"
115
-msgstr ""
116
+msgstr "Flytt pekeren til bunnen av skjermen"
117
 
118
-#: src/command.cxx:80
119
+#: src/Command.cxx:46
120
 msgid "Move cursor to the top of the list"
121
-msgstr ""
122
+msgstr "Flytt pekeren til toppen av listen"
123
 
124
-#: src/command.cxx:82
125
+#: src/Command.cxx:48
126
 msgid "Move cursor to the bottom of the list"
127
-msgstr ""
128
+msgstr "Flytt pekeren til bunnen av listen"
129
 
130
-#: src/command.cxx:84
131
+#: src/Command.cxx:50
132
 msgid "Page up"
133
-msgstr "Markøren en side opp"
134
+msgstr "Markøren en side opp"
135
 
136
-#: src/command.cxx:86
137
+#: src/Command.cxx:52
138
 msgid "Page down"
139
-msgstr "Markøren en side ned"
140
+msgstr "Markøren en side ned"
141
 
142
-#: src/command.cxx:88
143
+#: src/Command.cxx:54
144
+#, fuzzy
145
 msgid "Range selection"
146
-msgstr ""
147
+msgstr "Områdevalg"
148
 
149
-#: src/command.cxx:90
150
+#: src/Command.cxx:56
151
 msgid "Scroll down one line"
152
-msgstr ""
153
+msgstr "Rull nedover én linje"
154
 
155
-#: src/command.cxx:92
156
+#: src/Command.cxx:58
157
 msgid "Scroll up one line"
158
-msgstr ""
159
+msgstr "Rull oppover én linje"
160
 
161
-#: src/command.cxx:94
162
+#: src/Command.cxx:60
163
 msgid "Scroll up half a screen"
164
-msgstr ""
165
+msgstr "Rull oppover en halv skjerm"
166
 
167
-#: src/command.cxx:96
168
+#: src/Command.cxx:62
169
 msgid "Scroll down half a screen"
170
-msgstr ""
171
+msgstr "Rull nedover en halv skjerm"
172
 
173
-#: src/command.cxx:98
174
+#: src/Command.cxx:64
175
 msgid "Select currently playing song"
176
-msgstr ""
177
+msgstr "Velg sangen som spilles"
178
 
179
-#: src/command.cxx:103
180
+#: src/Command.cxx:69
181
 msgid "Help screen"
182
 msgstr "Hjelp"
183
 
184
-#: src/command.cxx:105 src/screen_help.cxx:119
185
-#, fuzzy
186
+#: src/Command.cxx:71 src/HelpPage.cxx:140
187
 msgid "Queue screen"
188
-msgstr "Hjelp"
189
+msgstr "Køskjerm"
190
 
191
-#: src/command.cxx:107 src/screen_help.cxx:134
192
+#: src/Command.cxx:73 src/HelpPage.cxx:155
193
 msgid "Browse screen"
194
 msgstr "Filer"
195
 
196
-#: src/command.cxx:112
197
+#: src/Command.cxx:78
198
 msgid "Play/Enter directory"
199
 msgstr "Spill/Velg mappe"
200
 
201
-#: src/command.cxx:114
202
+#: src/Command.cxx:80
203
 msgid "Pause"
204
 msgstr "Pause"
205
 
206
-#: src/command.cxx:116
207
+#: src/Command.cxx:82
208
 msgid "Stop"
209
 msgstr "Stopp"
210
 
211
-#: src/command.cxx:118
212
+#: src/Command.cxx:84
213
 msgid "Crop"
214
-msgstr ""
215
+msgstr "Beskjær"
216
 
217
-#: src/command.cxx:120
218
+#: src/Command.cxx:86
219
 msgid "Next track"
220
 msgstr "Neste"
221
 
222
-#: src/command.cxx:122
223
+#: src/Command.cxx:88
224
 msgid "Previous track"
225
 msgstr "Forrige"
226
 
227
-#: src/command.cxx:124
228
+#: src/Command.cxx:90
229
 msgid "Seek forward"
230
-msgstr "Spol/Søk framover"
231
+msgstr "Blafre forover"
232
 
233
-#: src/command.cxx:126
234
+#: src/Command.cxx:92
235
 msgid "Seek backward"
236
-msgstr "Spol/Søk tilbake"
237
+msgstr "Blafre bakover"
238
 
239
-#: src/command.cxx:128
240
+#: src/Command.cxx:94
241
 msgid "Increase volume"
242
-msgstr "Øk volumet"
243
+msgstr "Øk volumet"
244
 
245
-#: src/command.cxx:130
246
+#: src/Command.cxx:96
247
 msgid "Decrease volume"
248
 msgstr "Demp volumet"
249
 
250
-#: src/command.cxx:132
251
+#: src/Command.cxx:98
252
 #, fuzzy
253
 msgid "Select/deselect song in queue"
254
-msgstr "Legg til/Fjern fra spillelisten"
255
+msgstr "Velg/fravelg i spillelisten"
256
 
257
-#: src/command.cxx:134
258
+#: src/Command.cxx:100
259
 msgid "Select all listed items"
260
 msgstr "Velg alle i listen"
261
 
262
-#: src/command.cxx:136
263
-#, fuzzy
264
+#: src/Command.cxx:102
265
 msgid "Delete song from queue"
266
-msgstr "Ta bort/slett"
267
+msgstr "Fjern sang fra kø"
268
 
269
-#: src/command.cxx:138
270
+#: src/Command.cxx:104
271
 msgid "Shuffle queue"
272
-msgstr ""
273
+msgstr "Stokk om kø"
274
 
275
-#: src/command.cxx:140
276
+#: src/Command.cxx:106
277
 msgid "Clear queue"
278
-msgstr ""
279
+msgstr "Tøm kø"
280
 
281
-#: src/command.cxx:142
282
+#: src/Command.cxx:108
283
 msgid "Toggle repeat mode"
284
-msgstr "Repeat På/Av"
285
+msgstr "Repeat PÃ¥/Av"
286
 
287
-#: src/command.cxx:144
288
+#: src/Command.cxx:110
289
 msgid "Toggle random mode"
290
-msgstr "Random På/Av"
291
+msgstr "Random PÃ¥/Av"
292
 
293
-#: src/command.cxx:146
294
+#: src/Command.cxx:112
295
 msgid "Toggle single mode"
296
-msgstr ""
297
+msgstr "Veksle enkelt modus"
298
 
299
-#: src/command.cxx:148
300
+#: src/Command.cxx:114
301
 msgid "Toggle consume mode"
302
-msgstr ""
303
+msgstr "Veksle konsumentmodus"
304
 
305
-#: src/command.cxx:150
306
+#: src/Command.cxx:116
307
 msgid "Toggle crossfade mode"
308
-msgstr "Crossfade På/Av"
309
+msgstr "Crossfade PÃ¥/Av"
310
 
311
-#: src/command.cxx:152
312
+#: src/Command.cxx:118
313
 msgid "Start a music database update"
314
 msgstr "Oppdater databasen"
315
 
316
-#: src/command.cxx:154
317
+#: src/Command.cxx:120
318
 msgid "Save queue"
319
-msgstr ""
320
+msgstr "Lagre kø"
321
 
322
-#: src/command.cxx:156
323
+#: src/Command.cxx:122 src/HelpPage.cxx:174
324
 #, fuzzy
325
-msgid "Add url/file to queue"
326
-msgstr "Legg til URL eller fil til spillelisten"
327
+msgid "Append song to queue"
328
+msgstr "Legg sang til spillelisten"
329
 
330
-#: src/command.cxx:159
331
+#: src/Command.cxx:125
332
 msgid "Go to root directory"
333
-msgstr "Gå til rotmappe"
334
+msgstr "GÃ¥ til rotmappe"
335
 
336
-#: src/command.cxx:161
337
+#: src/Command.cxx:127
338
 msgid "Go to parent directory"
339
-msgstr "Gå ett nivå opp"
340
+msgstr "Gå ett nivå opp"
341
 
342
-#: src/command.cxx:164
343
+#: src/Command.cxx:130
344
 msgid "Locate song in browser"
345
-msgstr ""
346
+msgstr "Finn sang i filutforsker"
347
 
348
-#: src/command.cxx:168
349
+#: src/Command.cxx:134
350
 msgid "Move item up"
351
 msgstr "Flytt opp"
352
 
353
-#: src/command.cxx:170
354
+#: src/Command.cxx:136
355
 msgid "Move item down"
356
 msgstr "Flytt ned"
357
 
358
-#: src/command.cxx:172
359
+#: src/Command.cxx:138
360
 msgid "Refresh screen"
361
 msgstr "Oppdater skjermbilde"
362
 
363
 #. translators: toggle between wrapping and non-wrapping
364
 #. search
365
-#: src/command.cxx:179
366
+#: src/Command.cxx:145
367
 msgid "Toggle find mode"
368
-msgstr "Endre søkeinnstillinger"
369
+msgstr "Endre søkeinnstillinger"
370
 
371
 #. translators: the auto center mode always centers the song
372
 #. currently being played
373
-#: src/command.cxx:183
374
+#: src/Command.cxx:149
375
 msgid "Toggle auto center mode"
376
-msgstr "Automatisk sentrering på/av"
377
+msgstr "Automatisk sentrering på/av"
378
 
379
-#: src/command.cxx:188
380
+#: src/Command.cxx:154
381
 msgid "Next screen"
382
 msgstr "Neste skjerm"
383
 
384
-#: src/command.cxx:190
385
+#: src/Command.cxx:156
386
 msgid "Previous screen"
387
 msgstr "Forrige skjerm"
388
 
389
-#: src/command.cxx:192
390
+#: src/Command.cxx:158
391
 msgid "Swap to most recent screen"
392
-msgstr ""
393
+msgstr "Bytt til nyligste skjerm"
394
 
395
-#: src/command.cxx:197
396
+#: src/Command.cxx:163
397
 msgid "Forward find"
398
-msgstr "Søk fremover"
399
+msgstr "Søk fremover"
400
 
401
-#: src/command.cxx:199
402
+#: src/Command.cxx:165
403
 msgid "Forward find next"
404
-msgstr "Søk neste (fremover)"
405
+msgstr "Søk neste (fremover)"
406
 
407
-#: src/command.cxx:201
408
+#: src/Command.cxx:167
409
 msgid "Backward find"
410
-msgstr "Søk bakover"
411
+msgstr "Søk bakover"
412
 
413
-#: src/command.cxx:203
414
+#: src/Command.cxx:169
415
 msgid "Backward find previous"
416
-msgstr "Søk neste (bakover)"
417
+msgstr "Søk neste (bakover)"
418
 
419
 #. translators: this queries the user for a string
420
 #. * and jumps directly (while the user is typing)
421
 #. * to the entry which begins with this string
422
-#: src/command.cxx:208
423
+#: src/Command.cxx:174
424
 msgid "Jump to"
425
-msgstr "Gå til"
426
+msgstr "GÃ¥ til"
427
 
428
-#: src/command.cxx:214
429
+#: src/Command.cxx:180
430
 msgid "Artist screen"
431
 msgstr "Artistskjerm"
432
 
433
-#: src/command.cxx:218 src/screen_help.cxx:148
434
+#: src/Command.cxx:184 src/HelpPage.cxx:169
435
 msgid "Search screen"
436
-msgstr "Database søk"
437
+msgstr "Database søk"
438
 
439
-#: src/command.cxx:220
440
+#: src/Command.cxx:186
441
 msgid "Change search mode"
442
-msgstr "Endre søkemodus"
443
+msgstr "Endre søkemodus"
444
 
445
-#: src/command.cxx:224
446
+#: src/Command.cxx:190
447
 msgid "View the selected and the currently playing song"
448
-msgstr ""
449
+msgstr "Vis valgt og sang som spilles nå"
450
 
451
-#: src/command.cxx:228 src/screen_help.cxx:160
452
+#: src/Command.cxx:194 src/HelpPage.cxx:181
453
 msgid "Lyrics screen"
454
-msgstr ""
455
+msgstr "Tekstskjerm"
456
 
457
 #. translators: interrupt the current background action,
458
 #. e.g. stop loading lyrics from the internet
459
-#: src/command.cxx:232
460
+#: src/Command.cxx:198
461
 msgid "Interrupt action"
462
 msgstr "Avbryt handling"
463
 
464
-#: src/command.cxx:234
465
+#: src/Command.cxx:200
466
 msgid "Update Lyrics"
467
 msgstr "Oppdater sangtekster"
468
 
469
-#: src/command.cxx:238
470
+#: src/Command.cxx:204
471
 msgid "Edit the current item"
472
-msgstr ""
473
+msgstr "Rediger gjeldende element"
474
 
475
-#: src/command.cxx:243 src/screen_help.cxx:175
476
+#: src/Command.cxx:209 src/HelpPage.cxx:196
477
+#, fuzzy
478
 msgid "Outputs screen"
479
-msgstr ""
480
+msgstr "Utganger"
481
 
482
-#: src/command.cxx:248 src/screen_help.cxx:182
483
-#, fuzzy
484
+#: src/Command.cxx:214 src/HelpPage.cxx:203
485
 msgid "Chat screen"
486
-msgstr "Neste skjerm"
487
-
488
-#: src/command.cxx:290
489
-msgid "Undefined"
490
-msgstr "Ikke definert"
491
-
492
-#: src/command.cxx:292
493
-msgid "Space"
494
-msgstr "Mellomrom"
495
-
496
-#: src/command.cxx:294
497
-msgid "Enter"
498
-msgstr "Enter"
499
-
500
-#: src/command.cxx:296
501
-msgid "Backspace"
502
-msgstr "Tilbaketast"
503
-
504
-#: src/command.cxx:298
505
-msgid "Delete"
506
-msgstr "Del"
507
-
508
-#: src/command.cxx:300
509
-msgid "Up"
510
-msgstr "Opp"
511
-
512
-#: src/command.cxx:302
513
-msgid "Down"
514
-msgstr "Ned"
515
-
516
-#: src/command.cxx:304
517
-msgid "Left"
518
-msgstr "Venstrepil"
519
-
520
-#: src/command.cxx:306
521
-msgid "Right"
522
-msgstr "Høyrepil"
523
-
524
-#: src/command.cxx:308
525
-msgid "Home"
526
-msgstr ""
527
-
528
-#: src/command.cxx:310
529
-msgid "End"
530
-msgstr ""
531
-
532
-#: src/command.cxx:312
533
-msgid "PageDown"
534
-msgstr "PageDown"
535
-
536
-#: src/command.cxx:314
537
-msgid "PageUp"
538
-msgstr "PageUp"
539
-
540
-#: src/command.cxx:316
541
-msgid "Tab"
542
-msgstr "Tab"
543
-
544
-#: src/command.cxx:318
545
-msgid "Shift+Tab"
546
-msgstr "Shift+Tab"
547
-
548
-#: src/command.cxx:320
549
-msgid "Esc"
550
-msgstr "Esc"
551
-
552
-#: src/command.cxx:322
553
-msgid "Insert"
554
-msgstr "Ins"
555
-
556
-#: src/command.cxx:326
557
-#, c-format
558
-msgid "F%d"
559
-msgstr ""
560
-
561
-#: src/command.cxx:330
562
-#, c-format
563
-msgid "Ctrl-%c"
564
-msgstr ""
565
-
566
-#: src/command.cxx:332
567
-#, c-format
568
-msgid "Alt-%c"
569
-msgstr ""
570
-
571
-#: src/command.cxx:477 src/command.cxx:483
572
-#, c-format
573
-msgid "Key %s assigned to %s and %s"
574
-msgstr "%s-tasten satt til %s og %s"
575
+msgstr "Sludreskjerm"
576
 
577
 #. To translators: prefix for error messages
578
-#: src/conf.cxx:121
579
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
580
 msgid "Error"
581
 msgstr "Feil"
582
 
583
-#: src/conf.cxx:135
584
+#: src/conf.cxx:128
585
 msgid "Word expected"
586
-msgstr ""
587
+msgstr "Ord forventet"
588
 
589
-#: src/conf.cxx:152 src/conf.cxx:161
590
+#: src/conf.cxx:145 src/conf.cxx:154
591
 msgid "Malformed hotkey definition"
592
 msgstr "Malformert hurtigtastdefinisjon"
593
 
594
 #. the hotkey configuration contains an unknown
595
 #. command
596
-#: src/conf.cxx:185
597
+#: src/conf.cxx:178
598
 msgid "Unknown command"
599
 msgstr "Ukjent kommando"
600
 
601
 #. the hotkey configuration line is incomplete
602
-#: src/conf.cxx:198
603
+#: src/conf.cxx:191
604
 msgid "Incomplete hotkey configuration"
605
 msgstr "Uferdig hurtigtastkonfigurasjon"
606
 
607
@@ -442,817 +377,901 @@
608
 #. "elapsed" or "remaining" time of a song being
609
 #. played; in this case, the configuration file
610
 #. contained an invalid setting
611
-#: src/conf.cxx:234
612
+#: src/conf.cxx:227
613
 msgid "Bad time display type"
614
 msgstr "Ugyldig tidsvisningstype"
615
 
616
 #. an equals sign '=' was expected while parsing a
617
 #. configuration file line
618
-#: src/conf.cxx:247 src/conf.cxx:427
619
+#: src/conf.cxx:240 src/conf.cxx:418
620
 msgid "Missing '='"
621
 msgstr "Mangler '='"
622
 
623
-#: src/conf.cxx:298
624
+#: src/conf.cxx:291
625
 msgid "Bad color name"
626
 msgstr "Ugyldig fargenavn"
627
 
628
-#: src/conf.cxx:308
629
+#: src/conf.cxx:301
630
 msgid "Incomplete color definition"
631
 msgstr "Uferdig fargedefinisjon"
632
 
633
-#: src/conf.cxx:314
634
+#: src/conf.cxx:307
635
 msgid "Invalid number"
636
 msgstr "Ugyldig tall"
637
 
638
-#: src/conf.cxx:322
639
+#: src/conf.cxx:315
640
 msgid "Malformed color definition"
641
 msgstr "Malformert fargedefinisjon"
642
 
643
 #. an unknown screen name was specified in the
644
 #. configuration file
645
-#: src/conf.cxx:356
646
+#: src/conf.cxx:353
647
 msgid "Unknown screen name"
648
 msgstr "Ukjent skjermnavn"
649
 
650
-#: src/conf.cxx:384
651
+#: src/conf.cxx:378
652
 msgid "Invalid search mode"
653
-msgstr ""
654
+msgstr "Ugyldig søkemodus"
655
 
656
-#: src/conf.cxx:407
657
+#: src/conf.cxx:398
658
 msgid "Unknown search mode"
659
-msgstr ""
660
+msgstr "Ukjent søkemodus"
661
 
662
-#: src/conf.cxx:597
663
+#: src/conf.cxx:581
664
 msgid "Unknown configuration parameter"
665
 msgstr "Ukjent konfiurasjonsparameter"
666
 
667
-#: src/i18n.h:42
668
-msgid "y"
669
-msgstr "j"
670
+#: src/CustomColors.cxx:56
671
+msgid "Terminal lacks support for changing colors"
672
+msgstr "Terminalen mangler støtte for omdefinering av farger"
673
 
674
-#: src/i18n.h:43
675
-msgid "n"
676
-msgstr "n"
677
+#. translators: the "delete" command is only possible
678
+#. for playlists; the user attempted to delete a song
679
+#. or a directory or something else
680
+#: src/FileBrowserPage.cxx:260
681
+msgid "Deleting this item is not possible"
682
+msgstr "Kan ikke slette dette elementet"
683
 
684
-#: src/list_window.cxx:554
685
-msgid "Range selection disabled"
686
-msgstr ""
687
+#: src/FileBrowserPage.cxx:268
688
+#, c-format
689
+msgid "Delete playlist %s?"
690
+msgstr "Slett spillelisten %s?"
691
 
692
-#: src/list_window.cxx:559
693
-msgid "Range selection enabled"
694
-msgstr ""
695
+#. translators: a dialog was aborted by the user
696
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
697
+#: src/screen_keydef.cxx:182
698
+msgid "Aborted"
699
+msgstr "Avbrutt"
700
 
701
-#: src/Main.cxx:161
702
-#, c-format
703
-msgid "Connecting to %s...  [Press %s to abort]"
704
-msgstr "Kobler til %s... [Trykk %s for å avslutte]"
705
+#. translators: MPD deleted the playlist, as requested by the
706
+#. user
707
+#: src/FileBrowserPage.cxx:286
708
+msgid "Playlist deleted"
709
+msgstr "Spillelisten slettet"
710
+
711
+#. translators: caption of the browser screen
712
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
713
+msgid "Browse"
714
+msgstr "Filer"
715
 
716
-#: src/Main.cxx:182
717
+#: src/FileListPage.cxx:121
718
 #, fuzzy, c-format
719
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
720
-msgstr "MPD versjon %d.%d.%d er for gammel - oppgrader til versjon %s"
721
+msgid "Loading playlist '%s'"
722
+msgstr "Henter spilleliste \"%s...\""
723
 
724
-#: src/Main.cxx:317
725
-#, c-format
726
-msgid "press %s for the key editor"
727
-msgstr "trykk %s for å rette"
728
+#: src/HelpPage.cxx:60
729
+msgid "Movement"
730
+msgstr "Navigasjon"
731
 
732
-#. To translators: these credits are shown
733
-#. when ncmpc is started with "--version"
734
-#: src/options.cxx:209 src/options.cxx:212
735
-msgid "translator-credits"
736
-msgstr ""
737
-"Launchpad Contributions:\n"
738
-"  Espen Jones https://launchpad.net/~epqr\n"
739
-"  Jon Bergli Heier https://launchpad.net/~snakebite-jvnv\n"
740
-"  Mathias Bøhn Grytemark https://launchpad.net/~mboehn\n"
741
-"  Ole R. Thorsen https://launchpad.net/~ole-rth\n"
742
-"  Niels Anker https://launchpad.net/~nanker"
743
+#: src/HelpPage.cxx:105
744
+msgid "Global"
745
+msgstr "Global"
746
 
747
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
748
-msgid "Shuffled queue"
749
-msgstr ""
750
+#: src/HelpPage.cxx:142
751
+msgid "Play"
752
+msgstr "Start/spill markert"
753
 
754
-#: src/player_command.cxx:184
755
-msgid "Cleared queue"
756
-msgstr ""
757
+#: src/HelpPage.cxx:149
758
+msgid "Center"
759
+msgstr "Sentrer"
760
 
761
-#. query the user for a filename
762
-#: src/save_playlist.cxx:109
763
-msgid "Save queue as"
764
-msgstr ""
765
+#: src/HelpPage.cxx:157
766
+msgid "Enter directory/Select and play song"
767
+msgstr "Velg bibliotek/Legg til spillisten og spill sang"
768
 
769
-#: src/save_playlist.cxx:140
770
-#, fuzzy, c-format
771
-msgid "Replace %s?"
772
-msgstr "Erstatt '%s' [%s/%s] ? "
773
+#: src/HelpPage.cxx:161
774
+msgid "Delete playlist"
775
+msgstr "Slett spilleliste"
776
 
777
-#. translators: a dialog was aborted by the user
778
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
779
-#: src/screen_lyrics.cxx:370
780
-msgid "Aborted"
781
-msgstr "Avbrutt"
782
+#: src/HelpPage.cxx:171
783
+#, fuzzy
784
+msgid "New search"
785
+msgstr "Søk"
786
 
787
-#. success
788
-#: src/save_playlist.cxx:171
789
-#, c-format
790
-msgid "Saved %s"
791
-msgstr "Lagret %s"
792
+#: src/HelpPage.cxx:172
793
+msgid "Select and play"
794
+msgstr "Legg til spillelisten og spill"
795
 
796
-#: src/screen.cxx:154
797
-msgid "Repeat mode is on"
798
-msgstr "Repeter er på"
799
+#: src/HelpPage.cxx:183
800
+msgid "View Lyrics"
801
+msgstr "Vis tekster"
802
 
803
-#: src/screen.cxx:155
804
-msgid "Repeat mode is off"
805
-msgstr "Repeter er av"
806
+#: src/HelpPage.cxx:184
807
+msgid "(Re)load lyrics"
808
+msgstr "(Gjen)innlast tekster"
809
 
810
-#: src/screen.cxx:159
811
-msgid "Random mode is on"
812
-msgstr ""
813
+#. to translators: this hotkey aborts the retrieval of lyrics
814
+#. from the server
815
+#: src/HelpPage.cxx:187
816
+msgid "Interrupt retrieval"
817
+msgstr "Avbryt henting"
818
 
819
-#: src/screen.cxx:160
820
-msgid "Random mode is off"
821
-msgstr ""
822
+#: src/HelpPage.cxx:188
823
+msgid "Download lyrics for currently playing song"
824
+msgstr "Last ned tekster for sangens som spilles nå"
825
 
826
-#. "single" mode means
827
-#. that MPD will
828
-#. automatically stop
829
-#. after playing one
830
-#. single song
831
-#: src/screen.cxx:169
832
-msgid "Single mode is on"
833
-msgstr ""
834
+#: src/HelpPage.cxx:189
835
+msgid "Add or edit lyrics"
836
+msgstr "Legg til eller rediger tekster"
837
 
838
-#: src/screen.cxx:170
839
-msgid "Single mode is off"
840
-msgstr ""
841
+#: src/HelpPage.cxx:190
842
+msgid "Save lyrics"
843
+msgstr "Lagre tekster"
844
 
845
-#. "consume" mode means
846
-#. that MPD removes each
847
-#. song which has
848
-#. finished playing
849
-#: src/screen.cxx:178
850
-msgid "Consume mode is on"
851
-msgstr ""
852
+#: src/HelpPage.cxx:191
853
+msgid "Delete saved lyrics"
854
+msgstr "Slett lagrede tekster"
855
 
856
-#: src/screen.cxx:179
857
-msgid "Consume mode is off"
858
-msgstr ""
859
+#: src/HelpPage.cxx:198
860
+msgid "Enable/disable output"
861
+msgstr "Skru på/av utgang"
862
 
863
-#: src/screen.cxx:182
864
-#, c-format
865
-msgid "Crossfade %d seconds"
866
-msgstr "Crossfade %d sekunder"
867
+#: src/HelpPage.cxx:205
868
+msgid "Write a message"
869
+msgstr "Skriv en melding"
870
 
871
-#: src/screen.cxx:194
872
-msgid "Database updated"
873
-msgstr "Databasen er oppdatert"
874
+#: src/HelpPage.cxx:210
875
+msgid "Keydef screen"
876
+msgstr "Tastedefinisjonsskjerm"
877
 
878
-#: src/screen.cxx:226
879
-msgid "Find mode: Wrapped"
880
-msgstr "Søkt rundt (starter på ny)"
881
+#: src/HelpPage.cxx:212
882
+msgid "Edit keydefs for selected command"
883
+msgstr "Rediger tastedefinisjoner for valgt kommando"
884
 
885
-#: src/screen.cxx:227
886
-msgid "Find mode: Normal"
887
-msgstr "Søk normalt (til slutt/begynnelse)"
888
+#: src/HelpPage.cxx:213
889
+msgid "Remove selected keydef"
890
+msgstr "Fjern valgt tastedefinisjon"
891
 
892
-#: src/screen.cxx:232
893
-msgid "Auto center mode: On"
894
-msgstr "Automatisk sentrering er på"
895
+#: src/HelpPage.cxx:214
896
+#, fuzzy
897
+msgid "Add a keydef"
898
+msgstr "Legg til ny tast"
899
 
900
-#: src/screen.cxx:233
901
-msgid "Auto center mode: Off"
902
-msgstr "Automatisk centrering er av"
903
+#: src/HelpPage.cxx:215
904
+msgid "Go up a level"
905
+msgstr "Gå opp et nivå"
906
 
907
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
908
-msgid "All tracks"
909
-msgstr "Alle spor"
910
+#: src/HelpPage.cxx:216
911
+msgid "Apply and save changes"
912
+msgstr "Legg til og lagre endringer"
913
 
914
-#: src/screen_artist.cxx:384
915
-msgid "All artists"
916
-msgstr "Alle artister"
917
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
918
+msgid "Help"
919
+msgstr "Hjelp"
920
 
921
-#: src/screen_artist.cxx:389
922
-#, c-format
923
-msgid "Albums of artist: %s"
924
-msgstr "Albumer fra artist: %s"
925
+#: src/i18n.h:43
926
+msgid "y"
927
+msgstr "j"
928
 
929
-#: src/screen_artist.cxx:398
930
-#, c-format
931
-msgid "All tracks of artist: %s"
932
-msgstr "Alle spor fra artist: %s"
933
+#: src/i18n.h:44
934
+msgid "n"
935
+msgstr "n"
936
 
937
-#: src/screen_artist.cxx:401
938
-#, c-format
939
-msgid "Album: %s - %s"
940
-msgstr "Album: %s - %s"
941
+#: src/KeyName.cxx:31
942
+msgid "Undefined"
943
+msgstr "Ikke definert"
944
 
945
-#: src/screen_artist.cxx:405
946
-#, fuzzy, c-format
947
-msgid "Tracks of no album of artist: %s"
948
-msgstr "Albumer fra artist: %s"
949
+#: src/KeyName.cxx:33
950
+msgid "Space"
951
+msgstr "Mellomrom"
952
 
953
-#: src/screen_artist.cxx:450
954
-#, fuzzy, c-format
955
-msgid "Adding album %s..."
956
-msgstr "Henter spilleliste %s..."
957
+#: src/KeyName.cxx:35
958
+msgid "Enter"
959
+msgstr "Enter"
960
 
961
-#: src/screen_artist.cxx:452
962
-#, fuzzy, c-format
963
-msgid "Adding %s..."
964
-msgstr "laster..."
965
+#: src/KeyName.cxx:37
966
+msgid "Backspace"
967
+msgstr "Tilbaketast"
968
 
969
-#: src/screen_browser.cxx:122
970
-#, c-format
971
-msgid "Loading playlist %s..."
972
-msgstr "Henter spilleliste %s..."
973
+#: src/KeyName.cxx:39
974
+msgid "Delete"
975
+msgstr "Del"
976
 
977
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
978
-#: src/screen_browser.cxx:279
979
-#, fuzzy, c-format
980
-msgid "Adding '%s' to queue"
981
-msgstr "Legger '%s' til spillelisten"
982
+#: src/KeyName.cxx:41
983
+msgid "Up"
984
+msgstr "Opp"
985
 
986
-#: src/screen_chat.cxx:59
987
-#, c-format
988
-msgid ""
989
-"connected to MPD %u.%u.%u (you need at least \n"
990
-"version 0.17.0 to use the chat feature)"
991
-msgstr ""
992
+#: src/KeyName.cxx:43
993
+msgid "Down"
994
+msgstr "Ned"
995
 
996
-#: src/screen_chat.cxx:177
997
-msgid "Your message"
998
-msgstr ""
999
+#: src/KeyName.cxx:45
1000
+msgid "Left"
1001
+msgstr "Venstrepil"
1002
 
1003
-#: src/screen_chat.cxx:186
1004
-msgid "Message could not be sent"
1005
-msgstr ""
1006
+#: src/KeyName.cxx:47
1007
+msgid "Right"
1008
+msgstr "Høyrepil"
1009
 
1010
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1011
-msgid "Chat"
1012
-msgstr ""
1013
+#: src/KeyName.cxx:49
1014
+msgid "Home"
1015
+msgstr "Hjem"
1016
 
1017
-#: src/screen_client.cxx:41
1018
-msgid "Database update running..."
1019
-msgstr "Databasen oppdateres..."
1020
+#: src/KeyName.cxx:51
1021
+msgid "End"
1022
+msgstr "Slutt"
1023
 
1024
-#: src/screen_client.cxx:49
1025
-#, c-format
1026
-msgid "Database update of %s started"
1027
-msgstr "oppdaterer databasen ifra %s"
1028
+#: src/KeyName.cxx:53
1029
+#, fuzzy
1030
+msgid "PageDown"
1031
+msgstr "Page Down"
1032
 
1033
-#: src/screen_client.cxx:52
1034
-msgid "Database update started"
1035
-msgstr "Oppdaterer databasen"
1036
+#: src/KeyName.cxx:55
1037
+#, fuzzy
1038
+msgid "PageUp"
1039
+msgstr "Page Up"
1040
 
1041
-#. translators: the "delete" command is only possible
1042
-#. for playlists; the user attempted to delete a song
1043
-#. or a directory or something else
1044
-#: src/screen_file.cxx:200
1045
-msgid "Deleting this item is not possible"
1046
-msgstr "Kan ikke slette dette elementet"
1047
+#: src/KeyName.cxx:57
1048
+msgid "Tab"
1049
+msgstr "Tab"
1050
 
1051
-#: src/screen_file.cxx:207
1052
-#, fuzzy, c-format
1053
-msgid "Delete playlist %s?"
1054
-msgstr "Slett spilleliste"
1055
+#: src/KeyName.cxx:59
1056
+msgid "Shift+Tab"
1057
+msgstr "Shift+Tab"
1058
 
1059
-#. translators: MPD deleted the playlist, as requested by the
1060
-#. user
1061
-#: src/screen_file.cxx:227
1062
-msgid "Playlist deleted"
1063
-msgstr "Spillelisten slettet"
1064
+#: src/KeyName.cxx:61
1065
+#, fuzzy
1066
+msgid "Esc"
1067
+msgstr "Escape"
1068
 
1069
-#. translators: caption of the browser screen
1070
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1071
-msgid "Browse"
1072
-msgstr "Filer"
1073
+#: src/KeyName.cxx:63
1074
+msgid "Insert"
1075
+msgstr "Ins"
1076
 
1077
-#: src/screen_find.cxx:29
1078
-msgid "Find"
1079
-msgstr "Søk"
1080
+#: src/KeyName.cxx:71
1081
+#, c-format
1082
+msgid "Ctrl-%c"
1083
+msgstr "Ctrl-%c"
1084
 
1085
-#: src/screen_find.cxx:30
1086
-msgid "Find backward"
1087
-msgstr "Søk (bakover)"
1088
+#: src/KeyName.cxx:73
1089
+#, c-format
1090
+msgid "Alt-%c"
1091
+msgstr "Alt-%c"
1092
 
1093
-#: src/screen_find.cxx:31
1094
-msgid "Jump"
1095
-msgstr "Hopp"
1096
+#: src/ListWindow.cxx:491
1097
+msgid "Range selection disabled"
1098
+msgstr "Områdevalg avskrudd"
1099
 
1100
-#: src/screen_find.cxx:82
1101
+#: src/ListWindow.cxx:496
1102
+msgid "Range selection enabled"
1103
+msgstr "Områdevalg påskrudd"
1104
+
1105
+#. translators: no lyrics were found for the song
1106
+#: src/LyricsPage.cxx:236
1107
+msgid "No lyrics"
1108
+msgstr "Ingen sangtekst"
1109
+
1110
+#: src/LyricsPage.cxx:254
1111
 #, c-format
1112
-msgid "Unable to find '%s'"
1113
-msgstr "Fant ikke '%s'"
1114
+msgid "Lyrics timeout occurred after %d seconds"
1115
+msgstr "Sangtekst-tidsavbrudd inntraff etter %d sekunder"
1116
 
1117
-#: src/screen_help.cxx:39
1118
-msgid "Movement"
1119
-msgstr "Navigasjon"
1120
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1121
+#: src/LyricsPage.cxx:490
1122
+msgid "Lyrics"
1123
+msgstr "Sangtekster"
1124
 
1125
-#: src/screen_help.cxx:84
1126
-msgid "Global"
1127
-msgstr "Global"
1128
+#. translators: this message is displayed
1129
+#. while data is retrieved
1130
+#: src/LyricsPage.cxx:340
1131
+msgid "loading..."
1132
+msgstr "laster..."
1133
 
1134
-#: src/screen_help.cxx:121
1135
-msgid "Play"
1136
-msgstr "Start/spill markert"
1137
+#: src/LyricsPage.cxx:361
1138
+msgid "Editor not configured"
1139
+msgstr "Tekstbehandler ikke satt opp"
1140
 
1141
-#: src/screen_help.cxx:124
1142
-msgid "Move song up"
1143
-msgstr "Flytt den markerte sangen opp i spillelisten"
1144
+#: src/LyricsPage.cxx:368
1145
+msgid "Do you really want to start an editor and edit these lyrics?"
1146
+msgstr ""
1147
+"Ønsker du virkelig å starte en tekstbehandler og redigere disse tekstene?"
1148
 
1149
-#: src/screen_help.cxx:125
1150
-msgid "Move song down"
1151
-msgstr "Flytt den markerte sangen opp i spillelisten"
1152
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1153
+msgid "Can't start editor"
1154
+msgstr "Kan ikke starte tekstbehandler"
1155
 
1156
-#: src/screen_help.cxx:128
1157
-msgid "Center"
1158
-msgstr "Sentrer"
1159
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1160
+msgid "Editor exited unexpectedly"
1161
+msgstr "Tekstbehandleren takket for seg uventet"
1162
 
1163
-#: src/screen_help.cxx:136
1164
-msgid "Enter directory/Select and play song"
1165
-msgstr "Velg bibliotek/Legg til spillisten og spill sang"
1166
+#. lyrics for the song were saved on hard disk
1167
+#: src/LyricsPage.cxx:439
1168
+msgid "Lyrics saved"
1169
+msgstr "Sangteksten er lagret"
1170
 
1171
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1172
-#, fuzzy
1173
-msgid "Append song to queue"
1174
-msgstr "Legg sang til spillelisten"
1175
+#: src/LyricsPage.cxx:445
1176
+msgid "Lyrics deleted"
1177
+msgstr "Tekster slettet"
1178
 
1179
-#: src/screen_help.cxx:140
1180
-msgid "Delete playlist"
1181
-msgstr "Slett spilleliste"
1182
+#: src/LyricsPage.cxx:446
1183
+msgid "No saved lyrics"
1184
+msgstr "Ingen lagrede tekster"
1185
 
1186
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1187
-msgid "Search"
1188
-msgstr "Søk"
1189
+#: src/Main.cxx:167
1190
+#, c-format
1191
+msgid "Connecting to %s"
1192
+msgstr "Kobler til %s"
1193
 
1194
-#: src/screen_help.cxx:151
1195
-msgid "Select and play"
1196
-msgstr "Legg til spillelisten og spill"
1197
+#: src/Main.cxx:187
1198
+#, fuzzy, c-format
1199
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1200
+msgstr "Feil: MPD-versjon %d.%d.%d er for gammel - oppgrader til versjon %s"
1201
 
1202
-#: src/screen_help.cxx:162
1203
-msgid "View Lyrics"
1204
+#. To translators: these credits are shown
1205
+#. when ncmpc is started with "--version"
1206
+#: src/options.cxx:213 src/options.cxx:216
1207
+msgid "translator-credits"
1208
 msgstr ""
1209
+"Launchpad Contributions:\n"
1210
+"  Espen Jones https://launchpad.net/~epqr\n"
1211
+"  Jon Bergli Heier https://launchpad.net/~snakebite-jvnv\n"
1212
+"  Mathias Bøhn Grytemark https://launchpad.net/~mboehn\n"
1213
+"  Ole R. Thorsen https://launchpad.net/~ole-rth\n"
1214
+"  Niels Anker https://launchpad.net/~nanker"
1215
 
1216
-#: src/screen_help.cxx:163
1217
-msgid "(Re)load lyrics"
1218
-msgstr ""
1219
+#: src/OutputsPage.cxx:87
1220
+#, c-format
1221
+msgid "Output '%s' enabled"
1222
+msgstr "Utgang \"%s\" påslått"
1223
 
1224
-#. to translators: this hotkey aborts the retrieval of lyrics
1225
-#. from the server
1226
-#: src/screen_help.cxx:166
1227
-msgid "Interrupt retrieval"
1228
-msgstr ""
1229
+#: src/OutputsPage.cxx:98
1230
+#, c-format
1231
+msgid "Output '%s' disabled"
1232
+msgstr "Utgang \"%s\" avslått"
1233
 
1234
-#: src/screen_help.cxx:167
1235
-msgid "Download lyrics for currently playing song"
1236
-msgstr ""
1237
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1238
+msgid "Outputs"
1239
+msgstr "Utganger"
1240
 
1241
-#: src/screen_help.cxx:168
1242
-msgid "Add or edit lyrics"
1243
-msgstr ""
1244
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1245
+msgid "Shuffled queue"
1246
+msgstr "Stokket om kø"
1247
 
1248
-#: src/screen_help.cxx:169
1249
-msgid "Save lyrics"
1250
-msgstr ""
1251
+#: src/player_command.cxx:186
1252
+msgid "Cleared queue"
1253
+msgstr "Kø tømt"
1254
 
1255
-#: src/screen_help.cxx:170
1256
-msgid "Delete saved lyrics"
1257
-msgstr ""
1258
+#. get path
1259
+#: src/QueuePage.cxx:307
1260
+msgid "Add"
1261
+msgstr "Legg til"
1262
 
1263
-#: src/screen_help.cxx:177
1264
-msgid "Enable/disable output"
1265
-msgstr ""
1266
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1267
+msgid "Queue"
1268
+msgstr "Kø"
1269
 
1270
-#: src/screen_help.cxx:184
1271
-msgid "Write a message"
1272
-msgstr ""
1273
+#: src/QueuePage.cxx:380
1274
+#, c-format
1275
+msgid "Queue on %s"
1276
+msgstr "Kø på %s"
1277
 
1278
-#: src/screen_help.cxx:189
1279
-msgid "Keydef screen"
1280
-msgstr ""
1281
+#. query the user for a filename
1282
+#: src/save_playlist.cxx:85
1283
+msgid "Save queue as"
1284
+msgstr "Lagre kø som"
1285
 
1286
-#: src/screen_help.cxx:191
1287
-msgid "Edit keydefs for selected command"
1288
-msgstr ""
1289
+#: src/save_playlist.cxx:107
1290
+#, c-format
1291
+msgid "Replace %s?"
1292
+msgstr "Erstatt %s?"
1293
 
1294
-#: src/screen_help.cxx:192
1295
-msgid "Remove selected keydef"
1296
-msgstr ""
1297
+#. success
1298
+#: src/save_playlist.cxx:128
1299
+#, c-format
1300
+msgid "Saved %s"
1301
+msgstr "Lagret %s"
1302
+
1303
+#: src/screen_artist.cxx:186
1304
+#, c-format
1305
+msgid "All tracks of artist: %s"
1306
+msgstr "Alle spor fra artist: %s"
1307
 
1308
-#: src/screen_help.cxx:193
1309
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1310
+msgid "Album"
1311
+msgstr "Album"
1312
+
1313
+#: src/screen_artist.cxx:195
1314
+#, fuzzy, c-format
1315
+msgid "Tracks of no album of artist: %s"
1316
+msgstr "Albumløse sanger fra artist: %s"
1317
+
1318
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1319
+msgid "Artist"
1320
+msgstr "Artist"
1321
+
1322
+#: src/screen_client.cxx:41
1323
 #, fuzzy
1324
-msgid "Add a keydef"
1325
-msgstr "Legg til ny tast"
1326
+msgid "Database update running"
1327
+msgstr "Databasen oppdateres…"
1328
 
1329
-#: src/screen_help.cxx:194
1330
-msgid "Go up a level"
1331
-msgstr ""
1332
+#: src/screen_client.cxx:48
1333
+#, c-format
1334
+msgid "Database update of %s started"
1335
+msgstr "oppdaterer databasen ifra %s"
1336
 
1337
-#: src/screen_help.cxx:195
1338
-msgid "Apply and save changes"
1339
-msgstr ""
1340
+#: src/screen_client.cxx:51
1341
+msgid "Database update started"
1342
+msgstr "Oppdaterer databasen"
1343
 
1344
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1345
-msgid "Help"
1346
-msgstr "Hjelp"
1347
+#: src/screen.cxx:160
1348
+msgid "Repeat mode is on"
1349
+msgstr "Repeter er på"
1350
 
1351
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1352
-msgid "Error: Screen too small"
1353
-msgstr "Feil: Skjermbildet er for lite"
1354
+#: src/screen.cxx:161
1355
+msgid "Repeat mode is off"
1356
+msgstr "Repeter er av"
1357
 
1358
-#: src/screen_keydef.cxx:141
1359
-msgid "You have new key bindings"
1360
-msgstr "Du har nye tastatursnarveier"
1361
+#: src/screen.cxx:165
1362
+msgid "Random mode is on"
1363
+msgstr "Tilfeldig modus er på"
1364
 
1365
-#: src/screen_keydef.cxx:143
1366
-msgid "Keybindings unchanged."
1367
-msgstr "Tastatursnarveier uforandret!"
1368
+#: src/screen.cxx:166
1369
+msgid "Random mode is off"
1370
+msgstr "Tilfeldig modus er av"
1371
 
1372
-#: src/screen_keydef.cxx:153
1373
-#, c-format
1374
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1375
-msgstr ""
1376
+#. "single" mode means
1377
+#. that MPD will
1378
+#. automatically stop
1379
+#. after playing one
1380
+#. single song
1381
+#: src/screen.cxx:175
1382
+#, fuzzy
1383
+msgid "Single mode is on"
1384
+msgstr "Enkelt modus er påslått"
1385
+
1386
+#: src/screen.cxx:176
1387
+msgid "Single mode is off"
1388
+msgstr "Enkelt modus er avslått"
1389
 
1390
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1391
+#. "consume" mode means
1392
+#. that MPD removes each
1393
+#. song which has
1394
+#. finished playing
1395
+#: src/screen.cxx:184
1396
+msgid "Consume mode is on"
1397
+msgstr "Konsumentmodus er på"
1398
+
1399
+#: src/screen.cxx:185
1400
+msgid "Consume mode is off"
1401
+msgstr "Konsumentmodus er av"
1402
+
1403
+#: src/screen.cxx:188
1404
 #, c-format
1405
-msgid "Error: %s - %s"
1406
-msgstr "Feil: %s - %s"
1407
+msgid "Crossfade %d seconds"
1408
+msgstr "Crossfade %d sekunder"
1409
+
1410
+#: src/screen.cxx:200
1411
+msgid "Database updated"
1412
+msgstr "Databasen er oppdatert"
1413
+
1414
+#: src/screen.cxx:250
1415
+msgid "Find mode: Wrapped"
1416
+msgstr "Søkt rundt (starter på ny)"
1417
+
1418
+#: src/screen.cxx:251
1419
+msgid "Find mode: Normal"
1420
+msgstr "Søk normalt (til slutt/begynnelse)"
1421
+
1422
+#: src/screen.cxx:256
1423
+msgid "Auto center mode: On"
1424
+msgstr "Automatisk sentrering er på"
1425
+
1426
+#: src/screen.cxx:257
1427
+msgid "Auto center mode: Off"
1428
+msgstr "Automatisk centrering er av"
1429
 
1430
-#: src/screen_keydef.cxx:171
1431
+#: src/screen_find.cxx:31
1432
+msgid "Find"
1433
+msgstr "Søk"
1434
+
1435
+#: src/screen_find.cxx:32
1436
+msgid "Find backward"
1437
+msgstr "Søk (bakover)"
1438
+
1439
+#: src/screen_find.cxx:33
1440
+msgid "Jump"
1441
+msgstr "Hopp"
1442
+
1443
+#: src/screen_find.cxx:79
1444
 #, c-format
1445
-msgid "Wrote %s"
1446
-msgstr "Skrev %s"
1447
+msgid "Unable to find '%s'"
1448
+msgstr "Fant ikke '%s'"
1449
 
1450
-#: src/screen_keydef.cxx:250
1451
+#: src/screen_keydef.cxx:161
1452
 msgid "Deleted"
1453
 msgstr "Slettet"
1454
 
1455
-#: src/screen_keydef.cxx:265
1456
+#: src/screen_keydef.cxx:177
1457
 #, c-format
1458
 msgid "Enter new key for %s: "
1459
 msgstr "Ny tast for %s: "
1460
 
1461
-#: src/screen_keydef.cxx:276
1462
+#: src/screen_keydef.cxx:187
1463
+#, fuzzy
1464
 msgid "Ctrl-Space can't be used"
1465
-msgstr ""
1466
+msgstr "Ctrl+mellomrom kan ikke brukes"
1467
 
1468
-#: src/screen_keydef.cxx:282
1469
+#: src/screen_keydef.cxx:193
1470
 #, c-format
1471
 msgid "Error: key %s is already used for %s"
1472
 msgstr "Tasten %s brukes allerede for %s"
1473
 
1474
-#: src/screen_keydef.cxx:291
1475
+#: src/screen_keydef.cxx:202
1476
 #, c-format
1477
 msgid "Assigned %s to %s"
1478
 msgstr "Satte %s = %s"
1479
 
1480
-#: src/screen_keydef.cxx:317
1481
-msgid "===> Apply key bindings "
1482
-msgstr "==> Bruk snarveier "
1483
-
1484
-#: src/screen_keydef.cxx:319
1485
-msgid "===> Apply & Save key bindings  "
1486
-msgstr "==> Bruk og Lagre snarveier  "
1487
-
1488
-#: src/screen_keydef.cxx:347
1489
+#: src/screen_keydef.cxx:229
1490
 msgid "Add new key"
1491
 msgstr "Legg til ny tast"
1492
 
1493
-#: src/screen_keydef.cxx:410
1494
-msgid "Note: Did you forget to 'Apply' your changes?"
1495
-msgstr "OBS! Du glemte vel ikke å legge til de nye endringene?"
1496
-
1497
-#: src/screen_keydef.cxx:417
1498
-msgid "Edit key bindings"
1499
-msgstr "Endre tast"
1500
-
1501
-#: src/screen_keydef.cxx:419
1502
+#: src/screen_keydef.cxx:251
1503
 #, c-format
1504
 msgid "Edit keys for %s"
1505
 msgstr "Endre taster for '%s'"
1506
 
1507
-#. translators: no lyrics were found for the song
1508
-#: src/screen_lyrics.cxx:208
1509
-msgid "No lyrics"
1510
-msgstr "Ingen sangtekst"
1511
-
1512
-#: src/screen_lyrics.cxx:226
1513
-#, c-format
1514
-msgid "Lyrics timeout occurred after %d seconds"
1515
-msgstr ""
1516
-
1517
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1518
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1519
-msgid "Lyrics"
1520
-msgstr "Sangtekster"
1521
-
1522
-#. translators: this message is displayed
1523
-#. while data is retrieved
1524
-#: src/screen_lyrics.cxx:330
1525
-msgid "loading..."
1526
-msgstr "laster..."
1527
-
1528
-#: src/screen_lyrics.cxx:361
1529
-msgid "Editor not configured"
1530
-msgstr ""
1531
-
1532
-#: src/screen_lyrics.cxx:367
1533
-msgid "Do you really want to start an editor and edit these lyrics?"
1534
-msgstr ""
1535
+#: src/screen_keydef.cxx:393
1536
+msgid "You have new key bindings"
1537
+msgstr "Du har nye tastatursnarveier"
1538
 
1539
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1540
-msgid "Can't start editor"
1541
-msgstr ""
1542
+#: src/screen_keydef.cxx:395
1543
+msgid "Keybindings unchanged."
1544
+msgstr "Tastatursnarveier uforandret."
1545
 
1546
-#: src/screen_lyrics.cxx:411
1547
-#, c-format
1548
-msgid "Editor exited unexpectedly (%d)"
1549
-msgstr ""
1550
+#: src/screen_keydef.cxx:405
1551
+#, fuzzy
1552
+msgid "Unable to write configuration"
1553
+msgstr "Kunne ikke lagre oppsett"
1554
 
1555
-#: src/screen_lyrics.cxx:414
1556
+#: src/screen_keydef.cxx:421
1557
 #, c-format
1558
-msgid "Editor exited unexpectedly (signal %d)"
1559
-msgstr ""
1560
-
1561
-#. lyrics for the song were saved on hard disk
1562
-#: src/screen_lyrics.cxx:436
1563
-msgid "Lyrics saved"
1564
-msgstr "Sangteksten er lagret"
1565
-
1566
-#: src/screen_lyrics.cxx:443
1567
-msgid "Lyrics deleted"
1568
-msgstr ""
1569
-
1570
-#: src/screen_lyrics.cxx:446
1571
-msgid "No saved lyrics"
1572
-msgstr ""
1573
+msgid "Wrote %s"
1574
+msgstr "Skrev %s"
1575
 
1576
-#: src/screen_outputs.cxx:60
1577
-#, c-format
1578
-msgid "Output '%s' enabled"
1579
-msgstr ""
1580
+#: src/screen_keydef.cxx:433
1581
+msgid "===> Apply key bindings "
1582
+msgstr "==> Bruk snarveier "
1583
 
1584
-#: src/screen_outputs.cxx:71
1585
-#, c-format
1586
-msgid "Output '%s' disabled"
1587
-msgstr ""
1588
+#: src/screen_keydef.cxx:435
1589
+msgid "===> Apply & Save key bindings  "
1590
+msgstr "==> Bruk og Lagre snarveier  "
1591
 
1592
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1593
-msgid "Outputs"
1594
-msgstr ""
1595
+#: src/screen_keydef.cxx:472
1596
+msgid "Edit key bindings"
1597
+msgstr "Endre tast"
1598
 
1599
-#. get path
1600
-#: src/screen_queue.cxx:274
1601
-msgid "Add"
1602
-msgstr "Legg til"
1603
+#: src/screen_keydef.cxx:554
1604
+msgid "Note: Did you forget to 'Apply' your changes?"
1605
+msgstr "OBS! Du glemte vel ikke å legge til de nye endringene?"
1606
 
1607
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1608
-msgid "Queue"
1609
-msgstr ""
1610
+#: src/screen_keydef.cxx:604
1611
+msgid "Keys"
1612
+msgstr "Taster"
1613
 
1614
-#: src/screen_queue.cxx:384
1615
-#, c-format
1616
-msgid "Queue on %s"
1617
-msgstr ""
1618
+#: src/screen_utils.cxx:124
1619
+msgid "Password"
1620
+msgstr "Passord"
1621
 
1622
-#: src/screen_search.cxx:48
1623
+#: src/SearchPage.cxx:51
1624
 msgid "artist"
1625
 msgstr "artist"
1626
 
1627
-#: src/screen_search.cxx:49
1628
+#: src/SearchPage.cxx:52
1629
 msgid "album"
1630
 msgstr "album"
1631
 
1632
-#: src/screen_search.cxx:50
1633
+#: src/SearchPage.cxx:53
1634
 msgid "title"
1635
 msgstr "tittel"
1636
 
1637
-#: src/screen_search.cxx:51
1638
+#: src/SearchPage.cxx:54
1639
 msgid "track"
1640
 msgstr "spor"
1641
 
1642
-#: src/screen_search.cxx:52
1643
+#: src/SearchPage.cxx:55
1644
 msgid "name"
1645
 msgstr "navn"
1646
 
1647
-#: src/screen_search.cxx:53
1648
+#: src/SearchPage.cxx:56
1649
 msgid "genre"
1650
 msgstr "sjanger"
1651
 
1652
-#: src/screen_search.cxx:54
1653
+#: src/SearchPage.cxx:57
1654
 msgid "date"
1655
 msgstr "dato"
1656
 
1657
-#: src/screen_search.cxx:55
1658
+#: src/SearchPage.cxx:58
1659
 msgid "composer"
1660
 msgstr "komponist"
1661
 
1662
-#: src/screen_search.cxx:56
1663
+#: src/SearchPage.cxx:59
1664
 msgid "performer"
1665
-msgstr "utøver"
1666
+msgstr "utøver"
1667
 
1668
-#: src/screen_search.cxx:57
1669
+#: src/SearchPage.cxx:60
1670
 msgid "comment"
1671
 msgstr "kommentar"
1672
 
1673
-#: src/screen_search.cxx:65
1674
+#: src/SearchPage.cxx:68
1675
 msgid "file"
1676
 msgstr "fil"
1677
 
1678
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1679
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1680
 msgid "Title"
1681
 msgstr "Tittel"
1682
 
1683
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1684
-msgid "Artist"
1685
-msgstr "Artist"
1686
-
1687
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1688
-msgid "Album"
1689
-msgstr "Album"
1690
-
1691
-#: src/screen_search.cxx:85
1692
+#: src/SearchPage.cxx:88
1693
 msgid "Filename"
1694
 msgstr "Filnavn"
1695
 
1696
-#: src/screen_search.cxx:86
1697
+#: src/SearchPage.cxx:89
1698
 msgid "Artist + Title"
1699
 msgstr "Artist + tittel"
1700
 
1701
-#: src/screen_search.cxx:244
1702
-#, c-format
1703
-msgid "No argument for search tag %s"
1704
-msgstr ""
1705
-
1706
-#: src/screen_search.cxx:253
1707
+#: src/SearchPage.cxx:270
1708
 #, c-format
1709
 msgid "Bad search tag %s"
1710
-msgstr ""
1711
+msgstr "Feilaktig søkeetikett %s"
1712
 
1713
-#. if( pattern==nullptr )
1714
-#. search_new(screen, c);
1715
-#. else
1716
-#: src/screen_search.cxx:400
1717
+#: src/SearchPage.cxx:284
1718
 #, c-format
1719
-msgid "Press %s for a new search"
1720
-msgstr "Trykk på %s for ett nytt søk"
1721
-
1722
-#: src/screen_search.cxx:427
1723
-#, c-format
1724
-msgid "Search: %s"
1725
-msgstr "Søk: %s"
1726
-
1727
-#: src/screen_search.cxx:430
1728
-#, c-format
1729
-msgid "Search: Results for %s [%s]"
1730
-msgstr "Søk: Resultater %s [%s]"
1731
+msgid "No argument for search tag %s"
1732
+msgstr "Inget argument for søkeetikett %s"
1733
 
1734
-#: src/screen_search.cxx:434
1735
-#, c-format
1736
-msgid "Search: Press %s for a new search [%s]"
1737
-msgstr "Trykk på %s for ett nytt søk [%s]"
1738
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1739
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1740
+msgid "Search"
1741
+msgstr "Søk"
1742
 
1743
-#: src/screen_search.cxx:458
1744
+#: src/SearchPage.cxx:436
1745
 #, c-format
1746
 msgid "Search mode: %s"
1747
-msgstr "Søk etter: %s"
1748
+msgstr "Søk etter: %s"
1749
 
1750
-#: src/screen_song.cxx:54
1751
+#: src/SongPage.cxx:67
1752
 msgid "Length"
1753
 msgstr "Lengde"
1754
 
1755
-#: src/screen_song.cxx:55
1756
+#: src/SongPage.cxx:68
1757
 msgid "Position"
1758
-msgstr ""
1759
+msgstr "Posisjon"
1760
 
1761
-#: src/screen_song.cxx:56
1762
+#: src/SongPage.cxx:69
1763
 msgid "Composer"
1764
 msgstr "Komponist"
1765
 
1766
-#: src/screen_song.cxx:57
1767
+#: src/SongPage.cxx:70
1768
 msgid "Name"
1769
 msgstr "Navn"
1770
 
1771
-#: src/screen_song.cxx:58
1772
+#: src/SongPage.cxx:71
1773
 msgid "Disc"
1774
 msgstr "Plate"
1775
 
1776
-#: src/screen_song.cxx:59
1777
+#: src/SongPage.cxx:72
1778
 msgid "Track"
1779
 msgstr "Spor"
1780
 
1781
-#: src/screen_song.cxx:60
1782
+#: src/SongPage.cxx:73
1783
 msgid "Date"
1784
 msgstr "Dato"
1785
 
1786
-#: src/screen_song.cxx:61
1787
+#: src/SongPage.cxx:74
1788
 msgid "Genre"
1789
 msgstr "Sjanger"
1790
 
1791
-#: src/screen_song.cxx:62
1792
+#: src/SongPage.cxx:75
1793
 msgid "Comment"
1794
 msgstr "Kommentar"
1795
 
1796
-#: src/screen_song.cxx:63
1797
+#: src/SongPage.cxx:76
1798
 msgid "Path"
1799
-msgstr ""
1800
+msgstr "Sti"
1801
 
1802
-#: src/screen_song.cxx:64
1803
+#: src/SongPage.cxx:77
1804
 msgid "Bitrate"
1805
 msgstr "Bitrate"
1806
 
1807
-#: src/screen_song.cxx:65
1808
+#: src/SongPage.cxx:78
1809
 msgid "Format"
1810
-msgstr ""
1811
+msgstr "Format"
1812
 
1813
-#: src/screen_song.cxx:82
1814
+#: src/SongPage.cxx:95
1815
 msgid "Number of artists"
1816
 msgstr "Antall artister"
1817
 
1818
-#: src/screen_song.cxx:83
1819
+#: src/SongPage.cxx:96
1820
 msgid "Number of albums"
1821
 msgstr "Antall albumer"
1822
 
1823
-#: src/screen_song.cxx:84
1824
+#: src/SongPage.cxx:97
1825
 msgid "Number of songs"
1826
 msgstr "Antall sanger"
1827
 
1828
-#: src/screen_song.cxx:85
1829
+#: src/SongPage.cxx:98
1830
 msgid "Uptime"
1831
 msgstr "Oppetid"
1832
 
1833
-#: src/screen_song.cxx:86
1834
+#: src/SongPage.cxx:99
1835
 msgid "Most recent db update"
1836
 msgstr "Nyeste db oppdatering"
1837
 
1838
-#: src/screen_song.cxx:87
1839
+#: src/SongPage.cxx:100
1840
 msgid "Playtime"
1841
 msgstr "Spilletid"
1842
 
1843
-#: src/screen_song.cxx:88
1844
+#: src/SongPage.cxx:101
1845
 msgid "DB playtime"
1846
 msgstr "DB spilletid"
1847
 
1848
-#: src/screen_song.cxx:173
1849
+#: src/SongPage.cxx:204
1850
 msgid "Song viewer"
1851
-msgstr ""
1852
+msgstr "Sangframviser"
1853
 
1854
-#: src/screen_song.cxx:337
1855
+#: src/SongPage.cxx:370
1856
 msgid "MPD statistics"
1857
 msgstr "MPD statestikk"
1858
 
1859
-#: src/screen_song.cxx:427
1860
+#: src/SongPage.cxx:455
1861
 msgid "Selected song"
1862
-msgstr ""
1863
+msgstr "Valg sang"
1864
 
1865
-#: src/screen_song.cxx:437
1866
+#: src/SongPage.cxx:465
1867
 msgid "Currently playing song"
1868
-msgstr ""
1869
+msgstr "Sang som spilles nå"
1870
 
1871
-#: src/screen_song.cxx:442
1872
+#: src/SongPage.cxx:470
1873
 #, c-format
1874
 msgid "%d kbps"
1875
 msgstr "%d kbps"
1876
 
1877
-#. NOTE: if one day a translator decides to use a multi-byte character
1878
-#. for one of the yes/no keys, we'll have to parse it properly
1879
-#: src/screen_utils.cxx:80
1880
-#, fuzzy, c-format
1881
-msgid "%s [%s/%s] "
1882
-msgstr "Erstatt '%s' [%s/%s] ? "
1883
-
1884
-#: src/screen_utils.cxx:121
1885
-msgid "Password"
1886
-msgstr "Passord"
1887
+#: src/SongPage.cxx:554
1888
+msgid "Song"
1889
+msgstr "Sang"
1890
 
1891
-#: src/status_bar.cxx:121
1892
+#: src/StatusBar.cxx:104
1893
 msgid "Playing:"
1894
 msgstr "Spiller:"
1895
 
1896
-#: src/status_bar.cxx:124
1897
+#: src/StatusBar.cxx:108
1898
 msgid "[Paused]"
1899
 msgstr "[Pause]"
1900
 
1901
-#: src/title_bar.cxx:99
1902
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1903
+msgid "Unknown color"
1904
+msgstr "Ukjent farge"
1905
+
1906
+#: src/Styles.cxx:333
1907
+msgid "Unknown color field"
1908
+msgstr "Ukjent fargefelt"
1909
+
1910
+#: src/Styles.cxx:375
1911
+msgid "Terminal lacks color capabilities"
1912
+msgstr "Terminalen mangler støtte for farger"
1913
+
1914
+#: src/time_format.cxx:44
1915
+msgid "year"
1916
+msgstr "År"
1917
+
1918
+#: src/time_format.cxx:46
1919
+msgid "years"
1920
+msgstr "Ã¥r"
1921
+
1922
+#: src/time_format.cxx:54
1923
+msgid "week"
1924
+msgstr "uke"
1925
+
1926
+#: src/time_format.cxx:57
1927
+msgid "weeks"
1928
+msgstr "uker"
1929
+
1930
+#: src/time_format.cxx:65
1931
+msgid "day"
1932
+msgstr "dag"
1933
+
1934
+#: src/time_format.cxx:68
1935
+msgid "days"
1936
+msgstr "dager"
1937
+
1938
+#: src/TitleBar.cxx:100
1939
 msgid "Volume n/a"
1940
 msgstr "Volum: n/a"
1941
 
1942
-#: src/title_bar.cxx:101
1943
+#: src/TitleBar.cxx:102
1944
 #, c-format
1945
 msgid "Volume %d%%"
1946
 msgstr "Volum: %d%%"
1947
 
1948
+#, fuzzy
1949
+#~ msgid "Add url/file to queue"
1950
+#~ msgstr "Legg til URL eller fil til spillelisten"
1951
+
1952
+#~ msgid "Move song up"
1953
+#~ msgstr "Flytt den markerte sangen opp i spillelisten"
1954
+
1955
+#~ msgid "Move song down"
1956
+#~ msgstr "Flytt den markerte sangen opp i spillelisten"
1957
+
1958
+#~ msgid "Press %s for a new search"
1959
+#~ msgstr "Trykk på %s for ett nytt søk"
1960
+
1961
+#~ msgid "Search: %s"
1962
+#~ msgstr "Søk: %s"
1963
+
1964
+#~ msgid "Search: Results for %s [%s]"
1965
+#~ msgstr "Søk: Resultater %s [%s]"
1966
+
1967
+#~ msgid "Search: Press %s for a new search [%s]"
1968
+#~ msgstr "Trykk på %s for ett nytt søk [%s]"
1969
+
1970
+#~ msgid "F%d"
1971
+#~ msgstr "F%d"
1972
+
1973
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1974
+#~ msgstr "Kobler til %s... [Trykk %s for å avslutte]"
1975
+
1976
+#~ msgid "press %s for the key editor"
1977
+#~ msgstr "trykk %s for å rette"
1978
+
1979
+#~ msgid "Album: %s - %s"
1980
+#~ msgstr "Album: %s - %s"
1981
+
1982
+#~ msgid "Adding album %s..."
1983
+#~ msgstr "Legger til album %s…"
1984
+
1985
+#~ msgid "Adding %s..."
1986
+#~ msgstr "Legger til %s…"
1987
+
1988
+#, fuzzy
1989
+#~ msgid ""
1990
+#~ "connected to MPD %u.%u.%u (you need at least \n"
1991
+#~ "version 0.17.0 to use the chat feature)"
1992
+#~ msgstr ""
1993
+#~ "tilkoblet til MPD %u.%u.%u (du trenger minst \n"
1994
+#~ "versjon 0.17.0 for å bruke sludrefunksjonen)"
1995
+
1996
+#~ msgid "Error: Screen too small"
1997
+#~ msgstr "Feil: Skjermbildet er for lite"
1998
+
1999
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
2000
+#~ msgstr "Feil: Kunne ikke opprette mappen ~/.ncmpc - %s"
2001
+
2002
+#~ msgid "Error: %s - %s"
2003
+#~ msgstr "Feil: %s - %s"
2004
+
2005
+#~ msgid "Editor exited unexpectedly (signal %d)"
2006
+#~ msgstr "Tekstbehandler takket for seg uventet (signal %d)"
2007
+
2008
+#, fuzzy
2009
+#~ msgid "%s [%s/%s] "
2010
+#~ msgstr "Erstatt '%s' [%s/%s] ? "
2011
+
2012
 #~ msgid "Delete playlist %s [%s/%s] ? "
2013
 #~ msgstr "Slette '%s' [%s/%s] ? "
2014
 
2015
 #~ msgid "Warning: Unknown color - %s\n"
2016
 #~ msgstr "Advarsel: Kjenner ikke til fargen %s\n"
2017
 
2018
-#~ msgid "Connected to %s"
2019
-#~ msgstr "Koblet til %s"
2020
-
2021
 #~ msgid "Shuffled playlist"
2022
 #~ msgstr "Tilfeldigjort spillelisten"
2023
 
2024
@@ -1266,16 +1285,16 @@
2025
 #~ msgstr "Spilleliste"
2026
 
2027
 #~ msgid "Playlist on %s"
2028
-#~ msgstr "Spilleliste på %s"
2029
+#~ msgstr "Spilleliste på %s"
2030
 
2031
 #~ msgid "Playlist screen"
2032
 #~ msgstr "Spilleliste"
2033
 
2034
 #~ msgid "Shuffle playlist"
2035
-#~ msgstr "Tilfeldiggjør spilleliste"
2036
+#~ msgstr "Tilfeldiggjør spilleliste"
2037
 
2038
 #~ msgid "Clear playlist"
2039
-#~ msgstr "Tøm spillelisten"
2040
+#~ msgstr "Tøm spillelisten"
2041
 
2042
 #~ msgid "Save playlist"
2043
 #~ msgstr "Lagre spillelisten"
2044
ncmpc-0.30.tar.xz/po/ncmpc.pot -> ncmpc-0.32.tar.xz/po/ncmpc.pot Changed
1727
 
1
@@ -8,7 +8,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
9
 "Language-Team: LANGUAGE <LL@li.org>\n"
10
@@ -17,416 +17,352 @@
11
 "Content-Type: text/plain; charset=CHARSET\n"
12
 "Content-Transfer-Encoding: 8bit\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
17
+msgid "All tracks"
18
 msgstr ""
19
 
20
-#: src/colors.cxx:195
21
-msgid "Unknown color field"
22
+#: src/AlbumListPage.cxx:144
23
+msgid "Albums"
24
 msgstr ""
25
 
26
-#: src/colors.cxx:228
27
-msgid "Terminal lacks support for changing colors"
28
+#: src/AlbumListPage.cxx:146
29
+#, c-format
30
+msgid "Albums of artist: %s"
31
 msgstr ""
32
 
33
-#: src/colors.cxx:237
34
-msgid "Terminal lacks color capabilities"
35
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
36
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
37
+#, c-format
38
+msgid "Adding '%s' to queue"
39
+msgstr ""
40
+
41
+#: src/ArtistListPage.cxx:114
42
+msgid "All artists"
43
+msgstr ""
44
+
45
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
46
+#, c-format
47
+msgid "Key %s assigned to %s and %s"
48
+msgstr ""
49
+
50
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
51
+msgid "Chat"
52
 msgstr ""
53
 
54
-#: src/command.cxx:63
55
+#: src/ChatPage.cxx:160
56
+msgid "Your message"
57
+msgstr ""
58
+
59
+#: src/ChatPage.cxx:169
60
+msgid "Message could not be sent"
61
+msgstr ""
62
+
63
+#: src/Command.cxx:29
64
 msgid "Key configuration screen"
65
 msgstr ""
66
 
67
-#: src/command.cxx:66
68
+#: src/Command.cxx:32
69
 msgid "Quit"
70
 msgstr ""
71
 
72
-#: src/command.cxx:70
73
+#: src/Command.cxx:36
74
 msgid "Move cursor up"
75
 msgstr ""
76
 
77
-#: src/command.cxx:72
78
+#: src/Command.cxx:38
79
 msgid "Move cursor down"
80
 msgstr ""
81
 
82
-#: src/command.cxx:74
83
+#: src/Command.cxx:40
84
 msgid "Move cursor to the top of screen"
85
 msgstr ""
86
 
87
-#: src/command.cxx:76
88
+#: src/Command.cxx:42
89
 msgid "Move cursor to the middle of screen"
90
 msgstr ""
91
 
92
-#: src/command.cxx:78
93
+#: src/Command.cxx:44
94
 msgid "Move cursor to the bottom of screen"
95
 msgstr ""
96
 
97
-#: src/command.cxx:80
98
+#: src/Command.cxx:46
99
 msgid "Move cursor to the top of the list"
100
 msgstr ""
101
 
102
-#: src/command.cxx:82
103
+#: src/Command.cxx:48
104
 msgid "Move cursor to the bottom of the list"
105
 msgstr ""
106
 
107
-#: src/command.cxx:84
108
+#: src/Command.cxx:50
109
 msgid "Page up"
110
 msgstr ""
111
 
112
-#: src/command.cxx:86
113
+#: src/Command.cxx:52
114
 msgid "Page down"
115
 msgstr ""
116
 
117
-#: src/command.cxx:88
118
+#: src/Command.cxx:54
119
 msgid "Range selection"
120
 msgstr ""
121
 
122
-#: src/command.cxx:90
123
+#: src/Command.cxx:56
124
 msgid "Scroll down one line"
125
 msgstr ""
126
 
127
-#: src/command.cxx:92
128
+#: src/Command.cxx:58
129
 msgid "Scroll up one line"
130
 msgstr ""
131
 
132
-#: src/command.cxx:94
133
+#: src/Command.cxx:60
134
 msgid "Scroll up half a screen"
135
 msgstr ""
136
 
137
-#: src/command.cxx:96
138
+#: src/Command.cxx:62
139
 msgid "Scroll down half a screen"
140
 msgstr ""
141
 
142
-#: src/command.cxx:98
143
+#: src/Command.cxx:64
144
 msgid "Select currently playing song"
145
 msgstr ""
146
 
147
-#: src/command.cxx:103
148
+#: src/Command.cxx:69
149
 msgid "Help screen"
150
 msgstr ""
151
 
152
-#: src/command.cxx:105 src/screen_help.cxx:119
153
+#: src/Command.cxx:71 src/HelpPage.cxx:140
154
 msgid "Queue screen"
155
 msgstr ""
156
 
157
-#: src/command.cxx:107 src/screen_help.cxx:134
158
+#: src/Command.cxx:73 src/HelpPage.cxx:155
159
 msgid "Browse screen"
160
 msgstr ""
161
 
162
-#: src/command.cxx:112
163
+#: src/Command.cxx:78
164
 msgid "Play/Enter directory"
165
 msgstr ""
166
 
167
-#: src/command.cxx:114
168
+#: src/Command.cxx:80
169
 msgid "Pause"
170
 msgstr ""
171
 
172
-#: src/command.cxx:116
173
+#: src/Command.cxx:82
174
 msgid "Stop"
175
 msgstr ""
176
 
177
-#: src/command.cxx:118
178
+#: src/Command.cxx:84
179
 msgid "Crop"
180
 msgstr ""
181
 
182
-#: src/command.cxx:120
183
+#: src/Command.cxx:86
184
 msgid "Next track"
185
 msgstr ""
186
 
187
-#: src/command.cxx:122
188
+#: src/Command.cxx:88
189
 msgid "Previous track"
190
 msgstr ""
191
 
192
-#: src/command.cxx:124
193
+#: src/Command.cxx:90
194
 msgid "Seek forward"
195
 msgstr ""
196
 
197
-#: src/command.cxx:126
198
+#: src/Command.cxx:92
199
 msgid "Seek backward"
200
 msgstr ""
201
 
202
-#: src/command.cxx:128
203
+#: src/Command.cxx:94
204
 msgid "Increase volume"
205
 msgstr ""
206
 
207
-#: src/command.cxx:130
208
+#: src/Command.cxx:96
209
 msgid "Decrease volume"
210
 msgstr ""
211
 
212
-#: src/command.cxx:132
213
+#: src/Command.cxx:98
214
 msgid "Select/deselect song in queue"
215
 msgstr ""
216
 
217
-#: src/command.cxx:134
218
+#: src/Command.cxx:100
219
 msgid "Select all listed items"
220
 msgstr ""
221
 
222
-#: src/command.cxx:136
223
+#: src/Command.cxx:102
224
 msgid "Delete song from queue"
225
 msgstr ""
226
 
227
-#: src/command.cxx:138
228
+#: src/Command.cxx:104
229
 msgid "Shuffle queue"
230
 msgstr ""
231
 
232
-#: src/command.cxx:140
233
+#: src/Command.cxx:106
234
 msgid "Clear queue"
235
 msgstr ""
236
 
237
-#: src/command.cxx:142
238
+#: src/Command.cxx:108
239
 msgid "Toggle repeat mode"
240
 msgstr ""
241
 
242
-#: src/command.cxx:144
243
+#: src/Command.cxx:110
244
 msgid "Toggle random mode"
245
 msgstr ""
246
 
247
-#: src/command.cxx:146
248
+#: src/Command.cxx:112
249
 msgid "Toggle single mode"
250
 msgstr ""
251
 
252
-#: src/command.cxx:148
253
+#: src/Command.cxx:114
254
 msgid "Toggle consume mode"
255
 msgstr ""
256
 
257
-#: src/command.cxx:150
258
+#: src/Command.cxx:116
259
 msgid "Toggle crossfade mode"
260
 msgstr ""
261
 
262
-#: src/command.cxx:152
263
+#: src/Command.cxx:118
264
 msgid "Start a music database update"
265
 msgstr ""
266
 
267
-#: src/command.cxx:154
268
+#: src/Command.cxx:120
269
 msgid "Save queue"
270
 msgstr ""
271
 
272
-#: src/command.cxx:156
273
-msgid "Add url/file to queue"
274
+#: src/Command.cxx:122 src/HelpPage.cxx:174
275
+msgid "Append song to queue"
276
 msgstr ""
277
 
278
-#: src/command.cxx:159
279
+#: src/Command.cxx:125
280
 msgid "Go to root directory"
281
 msgstr ""
282
 
283
-#: src/command.cxx:161
284
+#: src/Command.cxx:127
285
 msgid "Go to parent directory"
286
 msgstr ""
287
 
288
-#: src/command.cxx:164
289
+#: src/Command.cxx:130
290
 msgid "Locate song in browser"
291
 msgstr ""
292
 
293
-#: src/command.cxx:168
294
+#: src/Command.cxx:134
295
 msgid "Move item up"
296
 msgstr ""
297
 
298
-#: src/command.cxx:170
299
+#: src/Command.cxx:136
300
 msgid "Move item down"
301
 msgstr ""
302
 
303
-#: src/command.cxx:172
304
+#: src/Command.cxx:138
305
 msgid "Refresh screen"
306
 msgstr ""
307
 
308
 #. translators: toggle between wrapping and non-wrapping
309
 #. search
310
-#: src/command.cxx:179
311
+#: src/Command.cxx:145
312
 msgid "Toggle find mode"
313
 msgstr ""
314
 
315
 #. translators: the auto center mode always centers the song
316
 #. currently being played
317
-#: src/command.cxx:183
318
+#: src/Command.cxx:149
319
 msgid "Toggle auto center mode"
320
 msgstr ""
321
 
322
-#: src/command.cxx:188
323
+#: src/Command.cxx:154
324
 msgid "Next screen"
325
 msgstr ""
326
 
327
-#: src/command.cxx:190
328
+#: src/Command.cxx:156
329
 msgid "Previous screen"
330
 msgstr ""
331
 
332
-#: src/command.cxx:192
333
+#: src/Command.cxx:158
334
 msgid "Swap to most recent screen"
335
 msgstr ""
336
 
337
-#: src/command.cxx:197
338
+#: src/Command.cxx:163
339
 msgid "Forward find"
340
 msgstr ""
341
 
342
-#: src/command.cxx:199
343
+#: src/Command.cxx:165
344
 msgid "Forward find next"
345
 msgstr ""
346
 
347
-#: src/command.cxx:201
348
+#: src/Command.cxx:167
349
 msgid "Backward find"
350
 msgstr ""
351
 
352
-#: src/command.cxx:203
353
+#: src/Command.cxx:169
354
 msgid "Backward find previous"
355
 msgstr ""
356
 
357
 #. translators: this queries the user for a string
358
 #. * and jumps directly (while the user is typing)
359
 #. * to the entry which begins with this string
360
-#: src/command.cxx:208
361
+#: src/Command.cxx:174
362
 msgid "Jump to"
363
 msgstr ""
364
 
365
-#: src/command.cxx:214
366
+#: src/Command.cxx:180
367
 msgid "Artist screen"
368
 msgstr ""
369
 
370
-#: src/command.cxx:218 src/screen_help.cxx:148
371
+#: src/Command.cxx:184 src/HelpPage.cxx:169
372
 msgid "Search screen"
373
 msgstr ""
374
 
375
-#: src/command.cxx:220
376
+#: src/Command.cxx:186
377
 msgid "Change search mode"
378
 msgstr ""
379
 
380
-#: src/command.cxx:224
381
+#: src/Command.cxx:190
382
 msgid "View the selected and the currently playing song"
383
 msgstr ""
384
 
385
-#: src/command.cxx:228 src/screen_help.cxx:160
386
+#: src/Command.cxx:194 src/HelpPage.cxx:181
387
 msgid "Lyrics screen"
388
 msgstr ""
389
 
390
 #. translators: interrupt the current background action,
391
 #. e.g. stop loading lyrics from the internet
392
-#: src/command.cxx:232
393
+#: src/Command.cxx:198
394
 msgid "Interrupt action"
395
 msgstr ""
396
 
397
-#: src/command.cxx:234
398
+#: src/Command.cxx:200
399
 msgid "Update Lyrics"
400
 msgstr ""
401
 
402
-#: src/command.cxx:238
403
+#: src/Command.cxx:204
404
 msgid "Edit the current item"
405
 msgstr ""
406
 
407
-#: src/command.cxx:243 src/screen_help.cxx:175
408
+#: src/Command.cxx:209 src/HelpPage.cxx:196
409
 msgid "Outputs screen"
410
 msgstr ""
411
 
412
-#: src/command.cxx:248 src/screen_help.cxx:182
413
+#: src/Command.cxx:214 src/HelpPage.cxx:203
414
 msgid "Chat screen"
415
 msgstr ""
416
 
417
-#: src/command.cxx:290
418
-msgid "Undefined"
419
-msgstr ""
420
-
421
-#: src/command.cxx:292
422
-msgid "Space"
423
-msgstr ""
424
-
425
-#: src/command.cxx:294
426
-msgid "Enter"
427
-msgstr ""
428
-
429
-#: src/command.cxx:296
430
-msgid "Backspace"
431
-msgstr ""
432
-
433
-#: src/command.cxx:298
434
-msgid "Delete"
435
-msgstr ""
436
-
437
-#: src/command.cxx:300
438
-msgid "Up"
439
-msgstr ""
440
-
441
-#: src/command.cxx:302
442
-msgid "Down"
443
-msgstr ""
444
-
445
-#: src/command.cxx:304
446
-msgid "Left"
447
-msgstr ""
448
-
449
-#: src/command.cxx:306
450
-msgid "Right"
451
-msgstr ""
452
-
453
-#: src/command.cxx:308
454
-msgid "Home"
455
-msgstr ""
456
-
457
-#: src/command.cxx:310
458
-msgid "End"
459
-msgstr ""
460
-
461
-#: src/command.cxx:312
462
-msgid "PageDown"
463
-msgstr ""
464
-
465
-#: src/command.cxx:314
466
-msgid "PageUp"
467
-msgstr ""
468
-
469
-#: src/command.cxx:316
470
-msgid "Tab"
471
-msgstr ""
472
-
473
-#: src/command.cxx:318
474
-msgid "Shift+Tab"
475
-msgstr ""
476
-
477
-#: src/command.cxx:320
478
-msgid "Esc"
479
-msgstr ""
480
-
481
-#: src/command.cxx:322
482
-msgid "Insert"
483
-msgstr ""
484
-
485
-#: src/command.cxx:326
486
-#, c-format
487
-msgid "F%d"
488
-msgstr ""
489
-
490
-#: src/command.cxx:330
491
-#, c-format
492
-msgid "Ctrl-%c"
493
-msgstr ""
494
-
495
-#: src/command.cxx:332
496
-#, c-format
497
-msgid "Alt-%c"
498
-msgstr ""
499
-
500
-#: src/command.cxx:477 src/command.cxx:483
501
-#, c-format
502
-msgid "Key %s assigned to %s and %s"
503
-msgstr ""
504
-
505
 #. To translators: prefix for error messages
506
-#: src/conf.cxx:121
507
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
508
 msgid "Error"
509
 msgstr ""
510
 
511
-#: src/conf.cxx:135
512
+#: src/conf.cxx:128
513
 msgid "Word expected"
514
 msgstr ""
515
 
516
-#: src/conf.cxx:152 src/conf.cxx:161
517
+#: src/conf.cxx:145 src/conf.cxx:154
518
 msgid "Malformed hotkey definition"
519
 msgstr ""
520
 
521
 #. the hotkey configuration contains an unknown
522
 #. command
523
-#: src/conf.cxx:185
524
+#: src/conf.cxx:178
525
 msgid "Unknown command"
526
 msgstr ""
527
 
528
 #. the hotkey configuration line is incomplete
529
-#: src/conf.cxx:198
530
+#: src/conf.cxx:191
531
 msgid "Incomplete hotkey configuration"
532
 msgstr ""
533
 
534
@@ -434,796 +370,811 @@
535
 #. "elapsed" or "remaining" time of a song being
536
 #. played; in this case, the configuration file
537
 #. contained an invalid setting
538
-#: src/conf.cxx:234
539
+#: src/conf.cxx:227
540
 msgid "Bad time display type"
541
 msgstr ""
542
 
543
 #. an equals sign '=' was expected while parsing a
544
 #. configuration file line
545
-#: src/conf.cxx:247 src/conf.cxx:427
546
+#: src/conf.cxx:240 src/conf.cxx:418
547
 msgid "Missing '='"
548
 msgstr ""
549
 
550
-#: src/conf.cxx:298
551
+#: src/conf.cxx:291
552
 msgid "Bad color name"
553
 msgstr ""
554
 
555
-#: src/conf.cxx:308
556
+#: src/conf.cxx:301
557
 msgid "Incomplete color definition"
558
 msgstr ""
559
 
560
-#: src/conf.cxx:314
561
+#: src/conf.cxx:307
562
 msgid "Invalid number"
563
 msgstr ""
564
 
565
-#: src/conf.cxx:322
566
+#: src/conf.cxx:315
567
 msgid "Malformed color definition"
568
 msgstr ""
569
 
570
 #. an unknown screen name was specified in the
571
 #. configuration file
572
-#: src/conf.cxx:356
573
+#: src/conf.cxx:353
574
 msgid "Unknown screen name"
575
 msgstr ""
576
 
577
-#: src/conf.cxx:384
578
+#: src/conf.cxx:378
579
 msgid "Invalid search mode"
580
 msgstr ""
581
 
582
-#: src/conf.cxx:407
583
+#: src/conf.cxx:398
584
 msgid "Unknown search mode"
585
 msgstr ""
586
 
587
-#: src/conf.cxx:597
588
+#: src/conf.cxx:581
589
 msgid "Unknown configuration parameter"
590
 msgstr ""
591
 
592
-#: src/i18n.h:42
593
-msgid "y"
594
+#: src/CustomColors.cxx:56
595
+msgid "Terminal lacks support for changing colors"
596
 msgstr ""
597
 
598
-#: src/i18n.h:43
599
-msgid "n"
600
+#. translators: the "delete" command is only possible
601
+#. for playlists; the user attempted to delete a song
602
+#. or a directory or something else
603
+#: src/FileBrowserPage.cxx:260
604
+msgid "Deleting this item is not possible"
605
 msgstr ""
606
 
607
-#: src/list_window.cxx:554
608
-msgid "Range selection disabled"
609
+#: src/FileBrowserPage.cxx:268
610
+#, c-format
611
+msgid "Delete playlist %s?"
612
 msgstr ""
613
 
614
-#: src/list_window.cxx:559
615
-msgid "Range selection enabled"
616
+#. translators: a dialog was aborted by the user
617
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
618
+#: src/screen_keydef.cxx:182
619
+msgid "Aborted"
620
 msgstr ""
621
 
622
-#: src/Main.cxx:161
623
-#, c-format
624
-msgid "Connecting to %s...  [Press %s to abort]"
625
+#. translators: MPD deleted the playlist, as requested by the
626
+#. user
627
+#: src/FileBrowserPage.cxx:286
628
+msgid "Playlist deleted"
629
 msgstr ""
630
 
631
-#: src/Main.cxx:182
632
-#, c-format
633
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
634
+#. translators: caption of the browser screen
635
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
636
+msgid "Browse"
637
 msgstr ""
638
 
639
-#: src/Main.cxx:317
640
+#: src/FileListPage.cxx:121
641
 #, c-format
642
-msgid "press %s for the key editor"
643
+msgid "Loading playlist '%s'"
644
 msgstr ""
645
 
646
-#. To translators: these credits are shown
647
-#. when ncmpc is started with "--version"
648
-#: src/options.cxx:209 src/options.cxx:212
649
-msgid "translator-credits"
650
+#: src/HelpPage.cxx:60
651
+msgid "Movement"
652
 msgstr ""
653
 
654
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
655
-msgid "Shuffled queue"
656
+#: src/HelpPage.cxx:105
657
+msgid "Global"
658
 msgstr ""
659
 
660
-#: src/player_command.cxx:184
661
-msgid "Cleared queue"
662
+#: src/HelpPage.cxx:142
663
+msgid "Play"
664
 msgstr ""
665
 
666
-#. query the user for a filename
667
-#: src/save_playlist.cxx:109
668
-msgid "Save queue as"
669
+#: src/HelpPage.cxx:149
670
+msgid "Center"
671
 msgstr ""
672
 
673
-#: src/save_playlist.cxx:140
674
-#, c-format
675
-msgid "Replace %s?"
676
+#: src/HelpPage.cxx:157
677
+msgid "Enter directory/Select and play song"
678
 msgstr ""
679
 
680
-#. translators: a dialog was aborted by the user
681
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
682
-#: src/screen_lyrics.cxx:370
683
-msgid "Aborted"
684
+#: src/HelpPage.cxx:161
685
+msgid "Delete playlist"
686
 msgstr ""
687
 
688
-#. success
689
-#: src/save_playlist.cxx:171
690
-#, c-format
691
-msgid "Saved %s"
692
+#: src/HelpPage.cxx:171
693
+msgid "New search"
694
 msgstr ""
695
 
696
-#: src/screen.cxx:154
697
-msgid "Repeat mode is on"
698
+#: src/HelpPage.cxx:172
699
+msgid "Select and play"
700
 msgstr ""
701
 
702
-#: src/screen.cxx:155
703
-msgid "Repeat mode is off"
704
+#: src/HelpPage.cxx:183
705
+msgid "View Lyrics"
706
 msgstr ""
707
 
708
-#: src/screen.cxx:159
709
-msgid "Random mode is on"
710
+#: src/HelpPage.cxx:184
711
+msgid "(Re)load lyrics"
712
 msgstr ""
713
 
714
-#: src/screen.cxx:160
715
-msgid "Random mode is off"
716
+#. to translators: this hotkey aborts the retrieval of lyrics
717
+#. from the server
718
+#: src/HelpPage.cxx:187
719
+msgid "Interrupt retrieval"
720
 msgstr ""
721
 
722
-#. "single" mode means
723
-#. that MPD will
724
-#. automatically stop
725
-#. after playing one
726
-#. single song
727
-#: src/screen.cxx:169
728
-msgid "Single mode is on"
729
+#: src/HelpPage.cxx:188
730
+msgid "Download lyrics for currently playing song"
731
 msgstr ""
732
 
733
-#: src/screen.cxx:170
734
-msgid "Single mode is off"
735
+#: src/HelpPage.cxx:189
736
+msgid "Add or edit lyrics"
737
 msgstr ""
738
 
739
-#. "consume" mode means
740
-#. that MPD removes each
741
-#. song which has
742
-#. finished playing
743
-#: src/screen.cxx:178
744
-msgid "Consume mode is on"
745
+#: src/HelpPage.cxx:190
746
+msgid "Save lyrics"
747
 msgstr ""
748
 
749
-#: src/screen.cxx:179
750
-msgid "Consume mode is off"
751
+#: src/HelpPage.cxx:191
752
+msgid "Delete saved lyrics"
753
 msgstr ""
754
 
755
-#: src/screen.cxx:182
756
-#, c-format
757
-msgid "Crossfade %d seconds"
758
+#: src/HelpPage.cxx:198
759
+msgid "Enable/disable output"
760
 msgstr ""
761
 
762
-#: src/screen.cxx:194
763
-msgid "Database updated"
764
+#: src/HelpPage.cxx:205
765
+msgid "Write a message"
766
 msgstr ""
767
 
768
-#: src/screen.cxx:226
769
-msgid "Find mode: Wrapped"
770
+#: src/HelpPage.cxx:210
771
+msgid "Keydef screen"
772
 msgstr ""
773
 
774
-#: src/screen.cxx:227
775
-msgid "Find mode: Normal"
776
+#: src/HelpPage.cxx:212
777
+msgid "Edit keydefs for selected command"
778
 msgstr ""
779
 
780
-#: src/screen.cxx:232
781
-msgid "Auto center mode: On"
782
+#: src/HelpPage.cxx:213
783
+msgid "Remove selected keydef"
784
 msgstr ""
785
 
786
-#: src/screen.cxx:233
787
-msgid "Auto center mode: Off"
788
+#: src/HelpPage.cxx:214
789
+msgid "Add a keydef"
790
 msgstr ""
791
 
792
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
793
-msgid "All tracks"
794
+#: src/HelpPage.cxx:215
795
+msgid "Go up a level"
796
 msgstr ""
797
 
798
-#: src/screen_artist.cxx:384
799
-msgid "All artists"
800
+#: src/HelpPage.cxx:216
801
+msgid "Apply and save changes"
802
 msgstr ""
803
 
804
-#: src/screen_artist.cxx:389
805
-#, c-format
806
-msgid "Albums of artist: %s"
807
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
808
+msgid "Help"
809
 msgstr ""
810
 
811
-#: src/screen_artist.cxx:398
812
-#, c-format
813
-msgid "All tracks of artist: %s"
814
+#: src/i18n.h:43
815
+msgid "y"
816
 msgstr ""
817
 
818
-#: src/screen_artist.cxx:401
819
-#, c-format
820
-msgid "Album: %s - %s"
821
+#: src/i18n.h:44
822
+msgid "n"
823
 msgstr ""
824
 
825
-#: src/screen_artist.cxx:405
826
-#, c-format
827
-msgid "Tracks of no album of artist: %s"
828
+#: src/KeyName.cxx:31
829
+msgid "Undefined"
830
 msgstr ""
831
 
832
-#: src/screen_artist.cxx:450
833
-#, c-format
834
-msgid "Adding album %s..."
835
+#: src/KeyName.cxx:33
836
+msgid "Space"
837
 msgstr ""
838
 
839
-#: src/screen_artist.cxx:452
840
-#, c-format
841
-msgid "Adding %s..."
842
+#: src/KeyName.cxx:35
843
+msgid "Enter"
844
 msgstr ""
845
 
846
-#: src/screen_browser.cxx:122
847
-#, c-format
848
-msgid "Loading playlist %s..."
849
+#: src/KeyName.cxx:37
850
+msgid "Backspace"
851
 msgstr ""
852
 
853
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
854
-#: src/screen_browser.cxx:279
855
-#, c-format
856
-msgid "Adding '%s' to queue"
857
+#: src/KeyName.cxx:39
858
+msgid "Delete"
859
 msgstr ""
860
 
861
-#: src/screen_chat.cxx:59
862
-#, c-format
863
-msgid ""
864
-"connected to MPD %u.%u.%u (you need at least \n"
865
-"version 0.17.0 to use the chat feature)"
866
+#: src/KeyName.cxx:41
867
+msgid "Up"
868
 msgstr ""
869
 
870
-#: src/screen_chat.cxx:177
871
-msgid "Your message"
872
+#: src/KeyName.cxx:43
873
+msgid "Down"
874
 msgstr ""
875
 
876
-#: src/screen_chat.cxx:186
877
-msgid "Message could not be sent"
878
+#: src/KeyName.cxx:45
879
+msgid "Left"
880
 msgstr ""
881
 
882
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
883
-msgid "Chat"
884
+#: src/KeyName.cxx:47
885
+msgid "Right"
886
 msgstr ""
887
 
888
-#: src/screen_client.cxx:41
889
-msgid "Database update running..."
890
+#: src/KeyName.cxx:49
891
+msgid "Home"
892
 msgstr ""
893
 
894
-#: src/screen_client.cxx:49
895
-#, c-format
896
-msgid "Database update of %s started"
897
+#: src/KeyName.cxx:51
898
+msgid "End"
899
 msgstr ""
900
 
901
-#: src/screen_client.cxx:52
902
-msgid "Database update started"
903
+#: src/KeyName.cxx:53
904
+msgid "PageDown"
905
 msgstr ""
906
 
907
-#. translators: the "delete" command is only possible
908
-#. for playlists; the user attempted to delete a song
909
-#. or a directory or something else
910
-#: src/screen_file.cxx:200
911
-msgid "Deleting this item is not possible"
912
+#: src/KeyName.cxx:55
913
+msgid "PageUp"
914
 msgstr ""
915
 
916
-#: src/screen_file.cxx:207
917
-#, c-format
918
-msgid "Delete playlist %s?"
919
+#: src/KeyName.cxx:57
920
+msgid "Tab"
921
 msgstr ""
922
 
923
-#. translators: MPD deleted the playlist, as requested by the
924
-#. user
925
-#: src/screen_file.cxx:227
926
-msgid "Playlist deleted"
927
+#: src/KeyName.cxx:59
928
+msgid "Shift+Tab"
929
 msgstr ""
930
 
931
-#. translators: caption of the browser screen
932
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
933
-msgid "Browse"
934
+#: src/KeyName.cxx:61
935
+msgid "Esc"
936
 msgstr ""
937
 
938
-#: src/screen_find.cxx:29
939
-msgid "Find"
940
+#: src/KeyName.cxx:63
941
+msgid "Insert"
942
 msgstr ""
943
 
944
-#: src/screen_find.cxx:30
945
-msgid "Find backward"
946
+#: src/KeyName.cxx:71
947
+#, c-format
948
+msgid "Ctrl-%c"
949
 msgstr ""
950
 
951
-#: src/screen_find.cxx:31
952
-msgid "Jump"
953
+#: src/KeyName.cxx:73
954
+#, c-format
955
+msgid "Alt-%c"
956
 msgstr ""
957
 
958
-#: src/screen_find.cxx:82
959
-#, c-format
960
-msgid "Unable to find '%s'"
961
+#: src/ListWindow.cxx:491
962
+msgid "Range selection disabled"
963
 msgstr ""
964
 
965
-#: src/screen_help.cxx:39
966
-msgid "Movement"
967
+#: src/ListWindow.cxx:496
968
+msgid "Range selection enabled"
969
 msgstr ""
970
 
971
-#: src/screen_help.cxx:84
972
-msgid "Global"
973
+#. translators: no lyrics were found for the song
974
+#: src/LyricsPage.cxx:236
975
+msgid "No lyrics"
976
 msgstr ""
977
 
978
-#: src/screen_help.cxx:121
979
-msgid "Play"
980
+#: src/LyricsPage.cxx:254
981
+#, c-format
982
+msgid "Lyrics timeout occurred after %d seconds"
983
 msgstr ""
984
 
985
-#: src/screen_help.cxx:124
986
-msgid "Move song up"
987
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
988
+#: src/LyricsPage.cxx:490
989
+msgid "Lyrics"
990
 msgstr ""
991
 
992
-#: src/screen_help.cxx:125
993
-msgid "Move song down"
994
+#. translators: this message is displayed
995
+#. while data is retrieved
996
+#: src/LyricsPage.cxx:340
997
+msgid "loading..."
998
 msgstr ""
999
 
1000
-#: src/screen_help.cxx:128
1001
-msgid "Center"
1002
+#: src/LyricsPage.cxx:361
1003
+msgid "Editor not configured"
1004
 msgstr ""
1005
 
1006
-#: src/screen_help.cxx:136
1007
-msgid "Enter directory/Select and play song"
1008
+#: src/LyricsPage.cxx:368
1009
+msgid "Do you really want to start an editor and edit these lyrics?"
1010
 msgstr ""
1011
 
1012
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1013
-msgid "Append song to queue"
1014
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1015
+msgid "Can't start editor"
1016
 msgstr ""
1017
 
1018
-#: src/screen_help.cxx:140
1019
-msgid "Delete playlist"
1020
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1021
+msgid "Editor exited unexpectedly"
1022
 msgstr ""
1023
 
1024
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1025
-msgid "Search"
1026
+#. lyrics for the song were saved on hard disk
1027
+#: src/LyricsPage.cxx:439
1028
+msgid "Lyrics saved"
1029
 msgstr ""
1030
 
1031
-#: src/screen_help.cxx:151
1032
-msgid "Select and play"
1033
+#: src/LyricsPage.cxx:445
1034
+msgid "Lyrics deleted"
1035
 msgstr ""
1036
 
1037
-#: src/screen_help.cxx:162
1038
-msgid "View Lyrics"
1039
+#: src/LyricsPage.cxx:446
1040
+msgid "No saved lyrics"
1041
 msgstr ""
1042
 
1043
-#: src/screen_help.cxx:163
1044
-msgid "(Re)load lyrics"
1045
+#: src/Main.cxx:167
1046
+#, c-format
1047
+msgid "Connecting to %s"
1048
 msgstr ""
1049
 
1050
-#. to translators: this hotkey aborts the retrieval of lyrics
1051
-#. from the server
1052
-#: src/screen_help.cxx:166
1053
-msgid "Interrupt retrieval"
1054
+#: src/Main.cxx:187
1055
+#, c-format
1056
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1057
 msgstr ""
1058
 
1059
-#: src/screen_help.cxx:167
1060
-msgid "Download lyrics for currently playing song"
1061
+#. To translators: these credits are shown
1062
+#. when ncmpc is started with "--version"
1063
+#: src/options.cxx:213 src/options.cxx:216
1064
+msgid "translator-credits"
1065
 msgstr ""
1066
 
1067
-#: src/screen_help.cxx:168
1068
-msgid "Add or edit lyrics"
1069
+#: src/OutputsPage.cxx:87
1070
+#, c-format
1071
+msgid "Output '%s' enabled"
1072
 msgstr ""
1073
 
1074
-#: src/screen_help.cxx:169
1075
-msgid "Save lyrics"
1076
+#: src/OutputsPage.cxx:98
1077
+#, c-format
1078
+msgid "Output '%s' disabled"
1079
 msgstr ""
1080
 
1081
-#: src/screen_help.cxx:170
1082
-msgid "Delete saved lyrics"
1083
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1084
+msgid "Outputs"
1085
 msgstr ""
1086
 
1087
-#: src/screen_help.cxx:177
1088
-msgid "Enable/disable output"
1089
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1090
+msgid "Shuffled queue"
1091
 msgstr ""
1092
 
1093
-#: src/screen_help.cxx:184
1094
-msgid "Write a message"
1095
+#: src/player_command.cxx:186
1096
+msgid "Cleared queue"
1097
 msgstr ""
1098
 
1099
-#: src/screen_help.cxx:189
1100
-msgid "Keydef screen"
1101
+#. get path
1102
+#: src/QueuePage.cxx:307
1103
+msgid "Add"
1104
 msgstr ""
1105
 
1106
-#: src/screen_help.cxx:191
1107
-msgid "Edit keydefs for selected command"
1108
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1109
+msgid "Queue"
1110
 msgstr ""
1111
 
1112
-#: src/screen_help.cxx:192
1113
-msgid "Remove selected keydef"
1114
+#: src/QueuePage.cxx:380
1115
+#, c-format
1116
+msgid "Queue on %s"
1117
 msgstr ""
1118
 
1119
-#: src/screen_help.cxx:193
1120
-msgid "Add a keydef"
1121
+#. query the user for a filename
1122
+#: src/save_playlist.cxx:85
1123
+msgid "Save queue as"
1124
 msgstr ""
1125
 
1126
-#: src/screen_help.cxx:194
1127
-msgid "Go up a level"
1128
+#: src/save_playlist.cxx:107
1129
+#, c-format
1130
+msgid "Replace %s?"
1131
 msgstr ""
1132
 
1133
-#: src/screen_help.cxx:195
1134
-msgid "Apply and save changes"
1135
+#. success
1136
+#: src/save_playlist.cxx:128
1137
+#, c-format
1138
+msgid "Saved %s"
1139
 msgstr ""
1140
 
1141
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1142
-msgid "Help"
1143
+#: src/screen_artist.cxx:186
1144
+#, c-format
1145
+msgid "All tracks of artist: %s"
1146
 msgstr ""
1147
 
1148
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1149
-msgid "Error: Screen too small"
1150
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1151
+msgid "Album"
1152
 msgstr ""
1153
 
1154
-#: src/screen_keydef.cxx:141
1155
-msgid "You have new key bindings"
1156
+#: src/screen_artist.cxx:195
1157
+#, c-format
1158
+msgid "Tracks of no album of artist: %s"
1159
 msgstr ""
1160
 
1161
-#: src/screen_keydef.cxx:143
1162
-msgid "Keybindings unchanged."
1163
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1164
+msgid "Artist"
1165
 msgstr ""
1166
 
1167
-#: src/screen_keydef.cxx:153
1168
-#, c-format
1169
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1170
+#: src/screen_client.cxx:41
1171
+msgid "Database update running"
1172
 msgstr ""
1173
 
1174
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1175
+#: src/screen_client.cxx:48
1176
 #, c-format
1177
-msgid "Error: %s - %s"
1178
+msgid "Database update of %s started"
1179
 msgstr ""
1180
 
1181
-#: src/screen_keydef.cxx:171
1182
-#, c-format
1183
-msgid "Wrote %s"
1184
+#: src/screen_client.cxx:51
1185
+msgid "Database update started"
1186
 msgstr ""
1187
 
1188
-#: src/screen_keydef.cxx:250
1189
-msgid "Deleted"
1190
+#: src/screen.cxx:160
1191
+msgid "Repeat mode is on"
1192
 msgstr ""
1193
 
1194
-#: src/screen_keydef.cxx:265
1195
-#, c-format
1196
-msgid "Enter new key for %s: "
1197
+#: src/screen.cxx:161
1198
+msgid "Repeat mode is off"
1199
 msgstr ""
1200
 
1201
-#: src/screen_keydef.cxx:276
1202
-msgid "Ctrl-Space can't be used"
1203
+#: src/screen.cxx:165
1204
+msgid "Random mode is on"
1205
 msgstr ""
1206
 
1207
-#: src/screen_keydef.cxx:282
1208
-#, c-format
1209
-msgid "Error: key %s is already used for %s"
1210
+#: src/screen.cxx:166
1211
+msgid "Random mode is off"
1212
 msgstr ""
1213
 
1214
-#: src/screen_keydef.cxx:291
1215
+#. "single" mode means
1216
+#. that MPD will
1217
+#. automatically stop
1218
+#. after playing one
1219
+#. single song
1220
+#: src/screen.cxx:175
1221
+msgid "Single mode is on"
1222
+msgstr ""
1223
+
1224
+#: src/screen.cxx:176
1225
+msgid "Single mode is off"
1226
+msgstr ""
1227
+
1228
+#. "consume" mode means
1229
+#. that MPD removes each
1230
+#. song which has
1231
+#. finished playing
1232
+#: src/screen.cxx:184
1233
+msgid "Consume mode is on"
1234
+msgstr ""
1235
+
1236
+#: src/screen.cxx:185
1237
+msgid "Consume mode is off"
1238
+msgstr ""
1239
+
1240
+#: src/screen.cxx:188
1241
 #, c-format
1242
-msgid "Assigned %s to %s"
1243
+msgid "Crossfade %d seconds"
1244
 msgstr ""
1245
 
1246
-#: src/screen_keydef.cxx:317
1247
-msgid "===> Apply key bindings "
1248
+#: src/screen.cxx:200
1249
+msgid "Database updated"
1250
 msgstr ""
1251
 
1252
-#: src/screen_keydef.cxx:319
1253
-msgid "===> Apply & Save key bindings  "
1254
+#: src/screen.cxx:250
1255
+msgid "Find mode: Wrapped"
1256
 msgstr ""
1257
 
1258
-#: src/screen_keydef.cxx:347
1259
-msgid "Add new key"
1260
+#: src/screen.cxx:251
1261
+msgid "Find mode: Normal"
1262
 msgstr ""
1263
 
1264
-#: src/screen_keydef.cxx:410
1265
-msgid "Note: Did you forget to 'Apply' your changes?"
1266
+#: src/screen.cxx:256
1267
+msgid "Auto center mode: On"
1268
 msgstr ""
1269
 
1270
-#: src/screen_keydef.cxx:417
1271
-msgid "Edit key bindings"
1272
+#: src/screen.cxx:257
1273
+msgid "Auto center mode: Off"
1274
 msgstr ""
1275
 
1276
-#: src/screen_keydef.cxx:419
1277
-#, c-format
1278
-msgid "Edit keys for %s"
1279
+#: src/screen_find.cxx:31
1280
+msgid "Find"
1281
 msgstr ""
1282
 
1283
-#. translators: no lyrics were found for the song
1284
-#: src/screen_lyrics.cxx:208
1285
-msgid "No lyrics"
1286
+#: src/screen_find.cxx:32
1287
+msgid "Find backward"
1288
 msgstr ""
1289
 
1290
-#: src/screen_lyrics.cxx:226
1291
-#, c-format
1292
-msgid "Lyrics timeout occurred after %d seconds"
1293
+#: src/screen_find.cxx:33
1294
+msgid "Jump"
1295
 msgstr ""
1296
 
1297
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1298
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1299
-msgid "Lyrics"
1300
+#: src/screen_find.cxx:79
1301
+#, c-format
1302
+msgid "Unable to find '%s'"
1303
 msgstr ""
1304
 
1305
-#. translators: this message is displayed
1306
-#. while data is retrieved
1307
-#: src/screen_lyrics.cxx:330
1308
-msgid "loading..."
1309
+#: src/screen_keydef.cxx:161
1310
+msgid "Deleted"
1311
 msgstr ""
1312
 
1313
-#: src/screen_lyrics.cxx:361
1314
-msgid "Editor not configured"
1315
+#: src/screen_keydef.cxx:177
1316
+#, c-format
1317
+msgid "Enter new key for %s: "
1318
 msgstr ""
1319
 
1320
-#: src/screen_lyrics.cxx:367
1321
-msgid "Do you really want to start an editor and edit these lyrics?"
1322
+#: src/screen_keydef.cxx:187
1323
+msgid "Ctrl-Space can't be used"
1324
 msgstr ""
1325
 
1326
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1327
-msgid "Can't start editor"
1328
+#: src/screen_keydef.cxx:193
1329
+#, c-format
1330
+msgid "Error: key %s is already used for %s"
1331
 msgstr ""
1332
 
1333
-#: src/screen_lyrics.cxx:411
1334
+#: src/screen_keydef.cxx:202
1335
 #, c-format
1336
-msgid "Editor exited unexpectedly (%d)"
1337
+msgid "Assigned %s to %s"
1338
+msgstr ""
1339
+
1340
+#: src/screen_keydef.cxx:229
1341
+msgid "Add new key"
1342
 msgstr ""
1343
 
1344
-#: src/screen_lyrics.cxx:414
1345
+#: src/screen_keydef.cxx:251
1346
 #, c-format
1347
-msgid "Editor exited unexpectedly (signal %d)"
1348
+msgid "Edit keys for %s"
1349
 msgstr ""
1350
 
1351
-#. lyrics for the song were saved on hard disk
1352
-#: src/screen_lyrics.cxx:436
1353
-msgid "Lyrics saved"
1354
+#: src/screen_keydef.cxx:393
1355
+msgid "You have new key bindings"
1356
 msgstr ""
1357
 
1358
-#: src/screen_lyrics.cxx:443
1359
-msgid "Lyrics deleted"
1360
+#: src/screen_keydef.cxx:395
1361
+msgid "Keybindings unchanged."
1362
 msgstr ""
1363
 
1364
-#: src/screen_lyrics.cxx:446
1365
-msgid "No saved lyrics"
1366
+#: src/screen_keydef.cxx:405
1367
+msgid "Unable to write configuration"
1368
 msgstr ""
1369
 
1370
-#: src/screen_outputs.cxx:60
1371
+#: src/screen_keydef.cxx:421
1372
 #, c-format
1373
-msgid "Output '%s' enabled"
1374
+msgid "Wrote %s"
1375
 msgstr ""
1376
 
1377
-#: src/screen_outputs.cxx:71
1378
-#, c-format
1379
-msgid "Output '%s' disabled"
1380
+#: src/screen_keydef.cxx:433
1381
+msgid "===> Apply key bindings "
1382
 msgstr ""
1383
 
1384
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1385
-msgid "Outputs"
1386
+#: src/screen_keydef.cxx:435
1387
+msgid "===> Apply & Save key bindings  "
1388
 msgstr ""
1389
 
1390
-#. get path
1391
-#: src/screen_queue.cxx:274
1392
-msgid "Add"
1393
+#: src/screen_keydef.cxx:472
1394
+msgid "Edit key bindings"
1395
 msgstr ""
1396
 
1397
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1398
-msgid "Queue"
1399
+#: src/screen_keydef.cxx:554
1400
+msgid "Note: Did you forget to 'Apply' your changes?"
1401
 msgstr ""
1402
 
1403
-#: src/screen_queue.cxx:384
1404
-#, c-format
1405
-msgid "Queue on %s"
1406
+#: src/screen_keydef.cxx:604
1407
+msgid "Keys"
1408
 msgstr ""
1409
 
1410
-#: src/screen_search.cxx:48
1411
+#: src/screen_utils.cxx:124
1412
+msgid "Password"
1413
+msgstr ""
1414
+
1415
+#: src/SearchPage.cxx:51
1416
 msgid "artist"
1417
 msgstr ""
1418
 
1419
-#: src/screen_search.cxx:49
1420
+#: src/SearchPage.cxx:52
1421
 msgid "album"
1422
 msgstr ""
1423
 
1424
-#: src/screen_search.cxx:50
1425
+#: src/SearchPage.cxx:53
1426
 msgid "title"
1427
 msgstr ""
1428
 
1429
-#: src/screen_search.cxx:51
1430
+#: src/SearchPage.cxx:54
1431
 msgid "track"
1432
 msgstr ""
1433
 
1434
-#: src/screen_search.cxx:52
1435
+#: src/SearchPage.cxx:55
1436
 msgid "name"
1437
 msgstr ""
1438
 
1439
-#: src/screen_search.cxx:53
1440
+#: src/SearchPage.cxx:56
1441
 msgid "genre"
1442
 msgstr ""
1443
 
1444
-#: src/screen_search.cxx:54
1445
+#: src/SearchPage.cxx:57
1446
 msgid "date"
1447
 msgstr ""
1448
 
1449
-#: src/screen_search.cxx:55
1450
+#: src/SearchPage.cxx:58
1451
 msgid "composer"
1452
 msgstr ""
1453
 
1454
-#: src/screen_search.cxx:56
1455
+#: src/SearchPage.cxx:59
1456
 msgid "performer"
1457
 msgstr ""
1458
 
1459
-#: src/screen_search.cxx:57
1460
+#: src/SearchPage.cxx:60
1461
 msgid "comment"
1462
 msgstr ""
1463
 
1464
-#: src/screen_search.cxx:65
1465
+#: src/SearchPage.cxx:68
1466
 msgid "file"
1467
 msgstr ""
1468
 
1469
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1470
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1471
 msgid "Title"
1472
 msgstr ""
1473
 
1474
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1475
-msgid "Artist"
1476
-msgstr ""
1477
-
1478
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1479
-msgid "Album"
1480
-msgstr ""
1481
-
1482
-#: src/screen_search.cxx:85
1483
+#: src/SearchPage.cxx:88
1484
 msgid "Filename"
1485
 msgstr ""
1486
 
1487
-#: src/screen_search.cxx:86
1488
+#: src/SearchPage.cxx:89
1489
 msgid "Artist + Title"
1490
 msgstr ""
1491
 
1492
-#: src/screen_search.cxx:244
1493
-#, c-format
1494
-msgid "No argument for search tag %s"
1495
-msgstr ""
1496
-
1497
-#: src/screen_search.cxx:253
1498
+#: src/SearchPage.cxx:270
1499
 #, c-format
1500
 msgid "Bad search tag %s"
1501
 msgstr ""
1502
 
1503
-#. if( pattern==nullptr )
1504
-#. search_new(screen, c);
1505
-#. else
1506
-#: src/screen_search.cxx:400
1507
-#, c-format
1508
-msgid "Press %s for a new search"
1509
-msgstr ""
1510
-
1511
-#: src/screen_search.cxx:427
1512
-#, c-format
1513
-msgid "Search: %s"
1514
-msgstr ""
1515
-
1516
-#: src/screen_search.cxx:430
1517
+#: src/SearchPage.cxx:284
1518
 #, c-format
1519
-msgid "Search: Results for %s [%s]"
1520
+msgid "No argument for search tag %s"
1521
 msgstr ""
1522
 
1523
-#: src/screen_search.cxx:434
1524
-#, c-format
1525
-msgid "Search: Press %s for a new search [%s]"
1526
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1527
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1528
+msgid "Search"
1529
 msgstr ""
1530
 
1531
-#: src/screen_search.cxx:458
1532
+#: src/SearchPage.cxx:436
1533
 #, c-format
1534
 msgid "Search mode: %s"
1535
 msgstr ""
1536
 
1537
-#: src/screen_song.cxx:54
1538
+#: src/SongPage.cxx:67
1539
 msgid "Length"
1540
 msgstr ""
1541
 
1542
-#: src/screen_song.cxx:55
1543
+#: src/SongPage.cxx:68
1544
 msgid "Position"
1545
 msgstr ""
1546
 
1547
-#: src/screen_song.cxx:56
1548
+#: src/SongPage.cxx:69
1549
 msgid "Composer"
1550
 msgstr ""
1551
 
1552
-#: src/screen_song.cxx:57
1553
+#: src/SongPage.cxx:70
1554
 msgid "Name"
1555
 msgstr ""
1556
 
1557
-#: src/screen_song.cxx:58
1558
+#: src/SongPage.cxx:71
1559
 msgid "Disc"
1560
 msgstr ""
1561
 
1562
-#: src/screen_song.cxx:59
1563
+#: src/SongPage.cxx:72
1564
 msgid "Track"
1565
 msgstr ""
1566
 
1567
-#: src/screen_song.cxx:60
1568
+#: src/SongPage.cxx:73
1569
 msgid "Date"
1570
 msgstr ""
1571
 
1572
-#: src/screen_song.cxx:61
1573
+#: src/SongPage.cxx:74
1574
 msgid "Genre"
1575
 msgstr ""
1576
 
1577
-#: src/screen_song.cxx:62
1578
+#: src/SongPage.cxx:75
1579
 msgid "Comment"
1580
 msgstr ""
1581
 
1582
-#: src/screen_song.cxx:63
1583
+#: src/SongPage.cxx:76
1584
 msgid "Path"
1585
 msgstr ""
1586
 
1587
-#: src/screen_song.cxx:64
1588
+#: src/SongPage.cxx:77
1589
 msgid "Bitrate"
1590
 msgstr ""
1591
 
1592
-#: src/screen_song.cxx:65
1593
+#: src/SongPage.cxx:78
1594
 msgid "Format"
1595
 msgstr ""
1596
 
1597
-#: src/screen_song.cxx:82
1598
+#: src/SongPage.cxx:95
1599
 msgid "Number of artists"
1600
 msgstr ""
1601
 
1602
-#: src/screen_song.cxx:83
1603
+#: src/SongPage.cxx:96
1604
 msgid "Number of albums"
1605
 msgstr ""
1606
 
1607
-#: src/screen_song.cxx:84
1608
+#: src/SongPage.cxx:97
1609
 msgid "Number of songs"
1610
 msgstr ""
1611
 
1612
-#: src/screen_song.cxx:85
1613
+#: src/SongPage.cxx:98
1614
 msgid "Uptime"
1615
 msgstr ""
1616
 
1617
-#: src/screen_song.cxx:86
1618
+#: src/SongPage.cxx:99
1619
 msgid "Most recent db update"
1620
 msgstr ""
1621
 
1622
-#: src/screen_song.cxx:87
1623
+#: src/SongPage.cxx:100
1624
 msgid "Playtime"
1625
 msgstr ""
1626
 
1627
-#: src/screen_song.cxx:88
1628
+#: src/SongPage.cxx:101
1629
 msgid "DB playtime"
1630
 msgstr ""
1631
 
1632
-#: src/screen_song.cxx:173
1633
+#: src/SongPage.cxx:204
1634
 msgid "Song viewer"
1635
 msgstr ""
1636
 
1637
-#: src/screen_song.cxx:337
1638
+#: src/SongPage.cxx:370
1639
 msgid "MPD statistics"
1640
 msgstr ""
1641
 
1642
-#: src/screen_song.cxx:427
1643
+#: src/SongPage.cxx:455
1644
 msgid "Selected song"
1645
 msgstr ""
1646
 
1647
-#: src/screen_song.cxx:437
1648
+#: src/SongPage.cxx:465
1649
 msgid "Currently playing song"
1650
 msgstr ""
1651
 
1652
-#: src/screen_song.cxx:442
1653
+#: src/SongPage.cxx:470
1654
 #, c-format
1655
 msgid "%d kbps"
1656
 msgstr ""
1657
 
1658
-#. NOTE: if one day a translator decides to use a multi-byte character
1659
-#. for one of the yes/no keys, we'll have to parse it properly
1660
-#: src/screen_utils.cxx:80
1661
-#, c-format
1662
-msgid "%s [%s/%s] "
1663
-msgstr ""
1664
-
1665
-#: src/screen_utils.cxx:121
1666
-msgid "Password"
1667
+#: src/SongPage.cxx:554
1668
+msgid "Song"
1669
 msgstr ""
1670
 
1671
-#: src/status_bar.cxx:121
1672
+#: src/StatusBar.cxx:104
1673
 msgid "Playing:"
1674
 msgstr ""
1675
 
1676
-#: src/status_bar.cxx:124
1677
+#: src/StatusBar.cxx:108
1678
 msgid "[Paused]"
1679
 msgstr ""
1680
 
1681
-#: src/title_bar.cxx:99
1682
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1683
+msgid "Unknown color"
1684
+msgstr ""
1685
+
1686
+#: src/Styles.cxx:333
1687
+msgid "Unknown color field"
1688
+msgstr ""
1689
+
1690
+#: src/Styles.cxx:375
1691
+msgid "Terminal lacks color capabilities"
1692
+msgstr ""
1693
+
1694
+#: src/time_format.cxx:44
1695
+msgid "year"
1696
+msgstr ""
1697
+
1698
+#: src/time_format.cxx:46
1699
+msgid "years"
1700
+msgstr ""
1701
+
1702
+#: src/time_format.cxx:54
1703
+msgid "week"
1704
+msgstr ""
1705
+
1706
+#: src/time_format.cxx:57
1707
+msgid "weeks"
1708
+msgstr ""
1709
+
1710
+#: src/time_format.cxx:65
1711
+msgid "day"
1712
+msgstr ""
1713
+
1714
+#: src/time_format.cxx:68
1715
+msgid "days"
1716
+msgstr ""
1717
+
1718
+#: src/TitleBar.cxx:100
1719
 msgid "Volume n/a"
1720
 msgstr ""
1721
 
1722
-#: src/title_bar.cxx:101
1723
+#: src/TitleBar.cxx:102
1724
 #, c-format
1725
 msgid "Volume %d%%"
1726
 msgstr ""
1727
ncmpc-0.30.tar.xz/po/nl.po -> ncmpc-0.32.tar.xz/po/nl.po Changed
1833
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-02-24 11:17+0000\n"
8
 "Last-Translator: Tom Postma <tom-postma@hetnet.nl>\n"
9
 "Language-Team: Dutch <nl@li.org>\n"
10
@@ -18,1224 +18,1202 @@
11
 "X-Launchpad-Export-Date: 2010-04-05 17:16+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
17
+msgid "All tracks"
18
+msgstr "Alle nummers"
19
+
20
+#: src/AlbumListPage.cxx:144
21
+#, fuzzy
22
+msgid "Albums"
23
+msgstr "Album"
24
+
25
+#: src/AlbumListPage.cxx:146
26
+#, c-format
27
+msgid "Albums of artist: %s"
28
+msgstr "Albums van artiest: %s"
29
+
30
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
31
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
32
+#, fuzzy, c-format
33
+msgid "Adding '%s' to queue"
34
+msgstr "Toevoegen '%s' aan afspeellijst"
35
+
36
+#: src/ArtistListPage.cxx:114
37
+msgid "All artists"
38
+msgstr "Alle artiesten"
39
+
40
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
41
+#, c-format
42
+msgid "Key %s assigned to %s and %s"
43
 msgstr ""
44
 
45
-#: src/colors.cxx:195
46
-msgid "Unknown color field"
47
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
48
+msgid "Chat"
49
 msgstr ""
50
 
51
-#: src/colors.cxx:228
52
-msgid "Terminal lacks support for changing colors"
53
+#: src/ChatPage.cxx:160
54
+msgid "Your message"
55
 msgstr ""
56
 
57
-#: src/colors.cxx:237
58
-msgid "Terminal lacks color capabilities"
59
+#: src/ChatPage.cxx:169
60
+msgid "Message could not be sent"
61
 msgstr ""
62
 
63
-#: src/command.cxx:63
64
+#: src/Command.cxx:29
65
 msgid "Key configuration screen"
66
 msgstr ""
67
 
68
-#: src/command.cxx:66
69
+#: src/Command.cxx:32
70
 msgid "Quit"
71
 msgstr ""
72
 
73
-#: src/command.cxx:70
74
+#: src/Command.cxx:36
75
 msgid "Move cursor up"
76
 msgstr ""
77
 
78
-#: src/command.cxx:72
79
+#: src/Command.cxx:38
80
 msgid "Move cursor down"
81
 msgstr ""
82
 
83
-#: src/command.cxx:74
84
+#: src/Command.cxx:40
85
 msgid "Move cursor to the top of screen"
86
 msgstr ""
87
 
88
-#: src/command.cxx:76
89
+#: src/Command.cxx:42
90
 msgid "Move cursor to the middle of screen"
91
 msgstr ""
92
 
93
-#: src/command.cxx:78
94
+#: src/Command.cxx:44
95
 msgid "Move cursor to the bottom of screen"
96
 msgstr ""
97
 
98
-#: src/command.cxx:80
99
+#: src/Command.cxx:46
100
 msgid "Move cursor to the top of the list"
101
 msgstr ""
102
 
103
-#: src/command.cxx:82
104
+#: src/Command.cxx:48
105
 msgid "Move cursor to the bottom of the list"
106
 msgstr ""
107
 
108
-#: src/command.cxx:84
109
+#: src/Command.cxx:50
110
 msgid "Page up"
111
 msgstr ""
112
 
113
-#: src/command.cxx:86
114
+#: src/Command.cxx:52
115
 msgid "Page down"
116
 msgstr ""
117
 
118
-#: src/command.cxx:88
119
+#: src/Command.cxx:54
120
 msgid "Range selection"
121
 msgstr ""
122
 
123
-#: src/command.cxx:90
124
+#: src/Command.cxx:56
125
 msgid "Scroll down one line"
126
 msgstr ""
127
 
128
-#: src/command.cxx:92
129
+#: src/Command.cxx:58
130
 msgid "Scroll up one line"
131
 msgstr ""
132
 
133
-#: src/command.cxx:94
134
+#: src/Command.cxx:60
135
 msgid "Scroll up half a screen"
136
 msgstr ""
137
 
138
-#: src/command.cxx:96
139
+#: src/Command.cxx:62
140
 msgid "Scroll down half a screen"
141
 msgstr ""
142
 
143
-#: src/command.cxx:98
144
+#: src/Command.cxx:64
145
 msgid "Select currently playing song"
146
 msgstr ""
147
 
148
-#: src/command.cxx:103
149
+#: src/Command.cxx:69
150
 msgid "Help screen"
151
 msgstr ""
152
 
153
-#: src/command.cxx:105 src/screen_help.cxx:119
154
+#: src/Command.cxx:71 src/HelpPage.cxx:140
155
 msgid "Queue screen"
156
 msgstr ""
157
 
158
-#: src/command.cxx:107 src/screen_help.cxx:134
159
+#: src/Command.cxx:73 src/HelpPage.cxx:155
160
 msgid "Browse screen"
161
 msgstr ""
162
 
163
-#: src/command.cxx:112
164
+#: src/Command.cxx:78
165
 msgid "Play/Enter directory"
166
 msgstr ""
167
 
168
-#: src/command.cxx:114
169
+#: src/Command.cxx:80
170
 msgid "Pause"
171
 msgstr ""
172
 
173
-#: src/command.cxx:116
174
+#: src/Command.cxx:82
175
 msgid "Stop"
176
 msgstr ""
177
 
178
-#: src/command.cxx:118
179
+#: src/Command.cxx:84
180
 msgid "Crop"
181
 msgstr ""
182
 
183
-#: src/command.cxx:120
184
+#: src/Command.cxx:86
185
 msgid "Next track"
186
 msgstr ""
187
 
188
-#: src/command.cxx:122
189
+#: src/Command.cxx:88
190
 msgid "Previous track"
191
 msgstr ""
192
 
193
-#: src/command.cxx:124
194
+#: src/Command.cxx:90
195
 msgid "Seek forward"
196
 msgstr ""
197
 
198
-#: src/command.cxx:126
199
+#: src/Command.cxx:92
200
 msgid "Seek backward"
201
 msgstr ""
202
 
203
-#: src/command.cxx:128
204
+#: src/Command.cxx:94
205
 msgid "Increase volume"
206
 msgstr ""
207
 
208
-#: src/command.cxx:130
209
+#: src/Command.cxx:96
210
 msgid "Decrease volume"
211
 msgstr ""
212
 
213
-#: src/command.cxx:132
214
+#: src/Command.cxx:98
215
 msgid "Select/deselect song in queue"
216
 msgstr ""
217
 
218
-#: src/command.cxx:134
219
+#: src/Command.cxx:100
220
 msgid "Select all listed items"
221
 msgstr ""
222
 
223
-#: src/command.cxx:136
224
+#: src/Command.cxx:102
225
 msgid "Delete song from queue"
226
 msgstr ""
227
 
228
-#: src/command.cxx:138
229
+#: src/Command.cxx:104
230
 msgid "Shuffle queue"
231
 msgstr ""
232
 
233
-#: src/command.cxx:140
234
+#: src/Command.cxx:106
235
 msgid "Clear queue"
236
 msgstr ""
237
 
238
-#: src/command.cxx:142
239
+#: src/Command.cxx:108
240
 msgid "Toggle repeat mode"
241
 msgstr ""
242
 
243
-#: src/command.cxx:144
244
+#: src/Command.cxx:110
245
 msgid "Toggle random mode"
246
 msgstr ""
247
 
248
-#: src/command.cxx:146
249
+#: src/Command.cxx:112
250
 msgid "Toggle single mode"
251
 msgstr ""
252
 
253
-#: src/command.cxx:148
254
+#: src/Command.cxx:114
255
 msgid "Toggle consume mode"
256
 msgstr ""
257
 
258
-#: src/command.cxx:150
259
+#: src/Command.cxx:116
260
 msgid "Toggle crossfade mode"
261
 msgstr ""
262
 
263
-#: src/command.cxx:152
264
+#: src/Command.cxx:118
265
 msgid "Start a music database update"
266
 msgstr ""
267
 
268
-#: src/command.cxx:154
269
+#: src/Command.cxx:120
270
 msgid "Save queue"
271
 msgstr ""
272
 
273
-#: src/command.cxx:156
274
-msgid "Add url/file to queue"
275
+#: src/Command.cxx:122 src/HelpPage.cxx:174
276
+msgid "Append song to queue"
277
 msgstr ""
278
 
279
-#: src/command.cxx:159
280
+#: src/Command.cxx:125
281
 msgid "Go to root directory"
282
 msgstr ""
283
 
284
-#: src/command.cxx:161
285
+#: src/Command.cxx:127
286
 msgid "Go to parent directory"
287
 msgstr ""
288
 
289
-#: src/command.cxx:164
290
+#: src/Command.cxx:130
291
 msgid "Locate song in browser"
292
 msgstr ""
293
 
294
-#: src/command.cxx:168
295
+#: src/Command.cxx:134
296
 msgid "Move item up"
297
 msgstr ""
298
 
299
-#: src/command.cxx:170
300
+#: src/Command.cxx:136
301
 msgid "Move item down"
302
 msgstr ""
303
 
304
-#: src/command.cxx:172
305
+#: src/Command.cxx:138
306
 msgid "Refresh screen"
307
 msgstr ""
308
 
309
 #. translators: toggle between wrapping and non-wrapping
310
 #. search
311
-#: src/command.cxx:179
312
+#: src/Command.cxx:145
313
 msgid "Toggle find mode"
314
 msgstr ""
315
 
316
 #. translators: the auto center mode always centers the song
317
 #. currently being played
318
-#: src/command.cxx:183
319
+#: src/Command.cxx:149
320
 msgid "Toggle auto center mode"
321
 msgstr ""
322
 
323
-#: src/command.cxx:188
324
+#: src/Command.cxx:154
325
 msgid "Next screen"
326
 msgstr ""
327
 
328
-#: src/command.cxx:190
329
+#: src/Command.cxx:156
330
 msgid "Previous screen"
331
 msgstr ""
332
 
333
-#: src/command.cxx:192
334
+#: src/Command.cxx:158
335
 msgid "Swap to most recent screen"
336
 msgstr ""
337
 
338
-#: src/command.cxx:197
339
+#: src/Command.cxx:163
340
 msgid "Forward find"
341
 msgstr ""
342
 
343
-#: src/command.cxx:199
344
+#: src/Command.cxx:165
345
 msgid "Forward find next"
346
 msgstr ""
347
 
348
-#: src/command.cxx:201
349
+#: src/Command.cxx:167
350
 msgid "Backward find"
351
 msgstr ""
352
 
353
-#: src/command.cxx:203
354
+#: src/Command.cxx:169
355
 msgid "Backward find previous"
356
 msgstr ""
357
 
358
 #. translators: this queries the user for a string
359
 #. * and jumps directly (while the user is typing)
360
 #. * to the entry which begins with this string
361
-#: src/command.cxx:208
362
+#: src/Command.cxx:174
363
 msgid "Jump to"
364
 msgstr ""
365
 
366
-#: src/command.cxx:214
367
+#: src/Command.cxx:180
368
 msgid "Artist screen"
369
 msgstr ""
370
 
371
-#: src/command.cxx:218 src/screen_help.cxx:148
372
+#: src/Command.cxx:184 src/HelpPage.cxx:169
373
 msgid "Search screen"
374
 msgstr ""
375
 
376
-#: src/command.cxx:220
377
+#: src/Command.cxx:186
378
 msgid "Change search mode"
379
 msgstr ""
380
 
381
-#: src/command.cxx:224
382
+#: src/Command.cxx:190
383
 msgid "View the selected and the currently playing song"
384
 msgstr ""
385
 
386
-#: src/command.cxx:228 src/screen_help.cxx:160
387
+#: src/Command.cxx:194 src/HelpPage.cxx:181
388
 msgid "Lyrics screen"
389
 msgstr ""
390
 
391
 #. translators: interrupt the current background action,
392
 #. e.g. stop loading lyrics from the internet
393
-#: src/command.cxx:232
394
+#: src/Command.cxx:198
395
 msgid "Interrupt action"
396
 msgstr ""
397
 
398
-#: src/command.cxx:234
399
+#: src/Command.cxx:200
400
 msgid "Update Lyrics"
401
 msgstr ""
402
 
403
-#: src/command.cxx:238
404
+#: src/Command.cxx:204
405
 msgid "Edit the current item"
406
 msgstr ""
407
 
408
-#: src/command.cxx:243 src/screen_help.cxx:175
409
+#: src/Command.cxx:209 src/HelpPage.cxx:196
410
 msgid "Outputs screen"
411
 msgstr ""
412
 
413
-#: src/command.cxx:248 src/screen_help.cxx:182
414
+#: src/Command.cxx:214 src/HelpPage.cxx:203
415
 msgid "Chat screen"
416
 msgstr ""
417
 
418
-#: src/command.cxx:290
419
-msgid "Undefined"
420
+#. To translators: prefix for error messages
421
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
422
+msgid "Error"
423
 msgstr ""
424
 
425
-#: src/command.cxx:292
426
-msgid "Space"
427
+#: src/conf.cxx:128
428
+msgid "Word expected"
429
 msgstr ""
430
 
431
-#: src/command.cxx:294
432
-msgid "Enter"
433
+#: src/conf.cxx:145 src/conf.cxx:154
434
+msgid "Malformed hotkey definition"
435
 msgstr ""
436
 
437
-#: src/command.cxx:296
438
-msgid "Backspace"
439
+#. the hotkey configuration contains an unknown
440
+#. command
441
+#: src/conf.cxx:178
442
+msgid "Unknown command"
443
 msgstr ""
444
 
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
+#. the hotkey configuration line is incomplete
448
+#: src/conf.cxx:191
449
+msgid "Incomplete hotkey configuration"
450
 msgstr ""
451
 
452
-#: src/command.cxx:300
453
-msgid "Up"
454
+#. translators: ncmpc supports displaying the
455
+#. "elapsed" or "remaining" time of a song being
456
+#. played; in this case, the configuration file
457
+#. contained an invalid setting
458
+#: src/conf.cxx:227
459
+msgid "Bad time display type"
460
 msgstr ""
461
 
462
-#: src/command.cxx:302
463
-msgid "Down"
464
+#. an equals sign '=' was expected while parsing a
465
+#. configuration file line
466
+#: src/conf.cxx:240 src/conf.cxx:418
467
+msgid "Missing '='"
468
 msgstr ""
469
 
470
-#: src/command.cxx:304
471
-msgid "Left"
472
+#: src/conf.cxx:291
473
+msgid "Bad color name"
474
 msgstr ""
475
 
476
-#: src/command.cxx:306
477
-msgid "Right"
478
+#: src/conf.cxx:301
479
+msgid "Incomplete color definition"
480
 msgstr ""
481
 
482
-#: src/command.cxx:308
483
-msgid "Home"
484
+#: src/conf.cxx:307
485
+msgid "Invalid number"
486
 msgstr ""
487
 
488
-#: src/command.cxx:310
489
-msgid "End"
490
+#: src/conf.cxx:315
491
+msgid "Malformed color definition"
492
 msgstr ""
493
 
494
-#: src/command.cxx:312
495
-msgid "PageDown"
496
+#. an unknown screen name was specified in the
497
+#. configuration file
498
+#: src/conf.cxx:353
499
+msgid "Unknown screen name"
500
 msgstr ""
501
 
502
-#: src/command.cxx:314
503
-msgid "PageUp"
504
+#: src/conf.cxx:378
505
+msgid "Invalid search mode"
506
 msgstr ""
507
 
508
-#: src/command.cxx:316
509
-msgid "Tab"
510
+#: src/conf.cxx:398
511
+msgid "Unknown search mode"
512
 msgstr ""
513
 
514
-#: src/command.cxx:318
515
-msgid "Shift+Tab"
516
+#: src/conf.cxx:581
517
+msgid "Unknown configuration parameter"
518
 msgstr ""
519
 
520
-#: src/command.cxx:320
521
-msgid "Esc"
522
+#: src/CustomColors.cxx:56
523
+msgid "Terminal lacks support for changing colors"
524
 msgstr ""
525
 
526
-#: src/command.cxx:322
527
-msgid "Insert"
528
+#. translators: the "delete" command is only possible
529
+#. for playlists; the user attempted to delete a song
530
+#. or a directory or something else
531
+#: src/FileBrowserPage.cxx:260
532
+msgid "Deleting this item is not possible"
533
 msgstr ""
534
 
535
-#: src/command.cxx:326
536
-#, c-format
537
-msgid "F%d"
538
+#: src/FileBrowserPage.cxx:268
539
+#, fuzzy, c-format
540
+msgid "Delete playlist %s?"
541
+msgstr "Afspeellijst verwijderen"
542
+
543
+#. translators: a dialog was aborted by the user
544
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
545
+#: src/screen_keydef.cxx:182
546
+msgid "Aborted"
547
+msgstr "Afgebroken"
548
+
549
+#. translators: MPD deleted the playlist, as requested by the
550
+#. user
551
+#: src/FileBrowserPage.cxx:286
552
+msgid "Playlist deleted"
553
 msgstr ""
554
 
555
-#: src/command.cxx:330
556
-#, c-format
557
-msgid "Ctrl-%c"
558
+#. translators: caption of the browser screen
559
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
560
+msgid "Browse"
561
+msgstr "Blader"
562
+
563
+#: src/FileListPage.cxx:121
564
+#, fuzzy, c-format
565
+msgid "Loading playlist '%s'"
566
+msgstr "Laden afspeellijst %s..."
567
+
568
+#: src/HelpPage.cxx:60
569
+msgid "Movement"
570
+msgstr "Beweging"
571
+
572
+#: src/HelpPage.cxx:105
573
+msgid "Global"
574
+msgstr "Algemeen"
575
+
576
+#: src/HelpPage.cxx:142
577
+msgid "Play"
578
 msgstr ""
579
 
580
-#: src/command.cxx:332
581
-#, c-format
582
-msgid "Alt-%c"
583
+#: src/HelpPage.cxx:149
584
+msgid "Center"
585
 msgstr ""
586
 
587
-#: src/command.cxx:477 src/command.cxx:483
588
-#, c-format
589
-msgid "Key %s assigned to %s and %s"
590
+#: src/HelpPage.cxx:157
591
+msgid "Enter directory/Select and play song"
592
 msgstr ""
593
 
594
-#. To translators: prefix for error messages
595
-#: src/conf.cxx:121
596
-msgid "Error"
597
+#: src/HelpPage.cxx:161
598
+msgid "Delete playlist"
599
+msgstr "Afspeellijst verwijderen"
600
+
601
+#: src/HelpPage.cxx:171
602
+#, fuzzy
603
+msgid "New search"
604
+msgstr "Zoeken"
605
+
606
+#: src/HelpPage.cxx:172
607
+msgid "Select and play"
608
 msgstr ""
609
 
610
-#: src/conf.cxx:135
611
-msgid "Word expected"
612
+#: src/HelpPage.cxx:183
613
+msgid "View Lyrics"
614
 msgstr ""
615
 
616
-#: src/conf.cxx:152 src/conf.cxx:161
617
-msgid "Malformed hotkey definition"
618
+#: src/HelpPage.cxx:184
619
+msgid "(Re)load lyrics"
620
 msgstr ""
621
 
622
-#. the hotkey configuration contains an unknown
623
-#. command
624
-#: src/conf.cxx:185
625
-msgid "Unknown command"
626
+#. to translators: this hotkey aborts the retrieval of lyrics
627
+#. from the server
628
+#: src/HelpPage.cxx:187
629
+msgid "Interrupt retrieval"
630
 msgstr ""
631
 
632
-#. the hotkey configuration line is incomplete
633
-#: src/conf.cxx:198
634
-msgid "Incomplete hotkey configuration"
635
+#: src/HelpPage.cxx:188
636
+msgid "Download lyrics for currently playing song"
637
 msgstr ""
638
 
639
-#. translators: ncmpc supports displaying the
640
-#. "elapsed" or "remaining" time of a song being
641
-#. played; in this case, the configuration file
642
-#. contained an invalid setting
643
-#: src/conf.cxx:234
644
-msgid "Bad time display type"
645
+#: src/HelpPage.cxx:189
646
+msgid "Add or edit lyrics"
647
 msgstr ""
648
 
649
-#. an equals sign '=' was expected while parsing a
650
-#. configuration file line
651
-#: src/conf.cxx:247 src/conf.cxx:427
652
-msgid "Missing '='"
653
+#: src/HelpPage.cxx:190
654
+msgid "Save lyrics"
655
 msgstr ""
656
 
657
-#: src/conf.cxx:298
658
-msgid "Bad color name"
659
+#: src/HelpPage.cxx:191
660
+#, fuzzy
661
+msgid "Delete saved lyrics"
662
+msgstr "Afspeellijst verwijderen"
663
+
664
+#: src/HelpPage.cxx:198
665
+msgid "Enable/disable output"
666
 msgstr ""
667
 
668
-#: src/conf.cxx:308
669
-msgid "Incomplete color definition"
670
+#: src/HelpPage.cxx:205
671
+msgid "Write a message"
672
 msgstr ""
673
 
674
-#: src/conf.cxx:314
675
-msgid "Invalid number"
676
+#: src/HelpPage.cxx:210
677
+msgid "Keydef screen"
678
 msgstr ""
679
 
680
-#: src/conf.cxx:322
681
-msgid "Malformed color definition"
682
+#: src/HelpPage.cxx:212
683
+msgid "Edit keydefs for selected command"
684
 msgstr ""
685
 
686
-#. an unknown screen name was specified in the
687
-#. configuration file
688
-#: src/conf.cxx:356
689
-msgid "Unknown screen name"
690
+#: src/HelpPage.cxx:213
691
+msgid "Remove selected keydef"
692
 msgstr ""
693
 
694
-#: src/conf.cxx:384
695
-msgid "Invalid search mode"
696
+#: src/HelpPage.cxx:214
697
+msgid "Add a keydef"
698
 msgstr ""
699
 
700
-#: src/conf.cxx:407
701
-msgid "Unknown search mode"
702
+#: src/HelpPage.cxx:215
703
+msgid "Go up a level"
704
 msgstr ""
705
 
706
-#: src/conf.cxx:597
707
-msgid "Unknown configuration parameter"
708
+#: src/HelpPage.cxx:216
709
+msgid "Apply and save changes"
710
 msgstr ""
711
 
712
-#: src/i18n.h:42
713
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
714
+msgid "Help"
715
+msgstr "Documentatie"
716
+
717
+#: src/i18n.h:43
718
 msgid "y"
719
 msgstr "j"
720
 
721
-#: src/i18n.h:43
722
+#: src/i18n.h:44
723
 msgid "n"
724
 msgstr "n"
725
 
726
-#: src/list_window.cxx:554
727
-msgid "Range selection disabled"
728
+#: src/KeyName.cxx:31
729
+msgid "Undefined"
730
 msgstr ""
731
 
732
-#: src/list_window.cxx:559
733
-msgid "Range selection enabled"
734
+#: src/KeyName.cxx:33
735
+msgid "Space"
736
 msgstr ""
737
 
738
-#: src/Main.cxx:161
739
-#, c-format
740
-msgid "Connecting to %s...  [Press %s to abort]"
741
-msgstr "Verbind met %s... [druk %s om af te breken]"
742
-
743
-#: src/Main.cxx:182
744
-#, c-format
745
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
746
+#: src/KeyName.cxx:35
747
+msgid "Enter"
748
 msgstr ""
749
 
750
-#: src/Main.cxx:317
751
-#, c-format
752
-msgid "press %s for the key editor"
753
+#: src/KeyName.cxx:37
754
+msgid "Backspace"
755
 msgstr ""
756
 
757
-#. To translators: these credits are shown
758
-#. when ncmpc is started with "--version"
759
-#: src/options.cxx:209 src/options.cxx:212
760
-msgid "translator-credits"
761
+#: src/KeyName.cxx:39
762
+msgid "Delete"
763
 msgstr ""
764
-"Launchpad Contributions:\n"
765
-"  Hipska https://launchpad.net/~hipska\n"
766
-"  Tom Postma https://launchpad.net/~bluegen89"
767
 
768
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
769
-msgid "Shuffled queue"
770
+#: src/KeyName.cxx:41
771
+msgid "Up"
772
 msgstr ""
773
 
774
-#: src/player_command.cxx:184
775
-msgid "Cleared queue"
776
+#: src/KeyName.cxx:43
777
+msgid "Down"
778
 msgstr ""
779
 
780
-#. query the user for a filename
781
-#: src/save_playlist.cxx:109
782
-msgid "Save queue as"
783
+#: src/KeyName.cxx:45
784
+msgid "Left"
785
 msgstr ""
786
 
787
-#: src/save_playlist.cxx:140
788
-#, fuzzy, c-format
789
-msgid "Replace %s?"
790
-msgstr "Vervang %s [%s/%s] ? "
791
-
792
-#. translators: a dialog was aborted by the user
793
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
794
-#: src/screen_lyrics.cxx:370
795
-msgid "Aborted"
796
-msgstr "Afgebroken"
797
-
798
-#. success
799
-#: src/save_playlist.cxx:171
800
-#, c-format
801
-msgid "Saved %s"
802
-msgstr "Opgeslagen %s"
803
+#: src/KeyName.cxx:47
804
+msgid "Right"
805
+msgstr ""
806
 
807
-#: src/screen.cxx:154
808
-msgid "Repeat mode is on"
809
-msgstr "Herhaling modus aan"
810
+#: src/KeyName.cxx:49
811
+msgid "Home"
812
+msgstr ""
813
 
814
-#: src/screen.cxx:155
815
-msgid "Repeat mode is off"
816
-msgstr "Herhaling modus uit"
817
+#: src/KeyName.cxx:51
818
+msgid "End"
819
+msgstr ""
820
 
821
-#: src/screen.cxx:159
822
-msgid "Random mode is on"
823
-msgstr "Willekeurige modus is aan"
824
+#: src/KeyName.cxx:53
825
+msgid "PageDown"
826
+msgstr ""
827
 
828
-#: src/screen.cxx:160
829
-msgid "Random mode is off"
830
-msgstr "Willekeurige modus is uit"
831
+#: src/KeyName.cxx:55
832
+msgid "PageUp"
833
+msgstr ""
834
 
835
-#. "single" mode means
836
-#. that MPD will
837
-#. automatically stop
838
-#. after playing one
839
-#. single song
840
-#: src/screen.cxx:169
841
-msgid "Single mode is on"
842
+#: src/KeyName.cxx:57
843
+msgid "Tab"
844
 msgstr ""
845
 
846
-#: src/screen.cxx:170
847
-msgid "Single mode is off"
848
+#: src/KeyName.cxx:59
849
+msgid "Shift+Tab"
850
 msgstr ""
851
 
852
-#. "consume" mode means
853
-#. that MPD removes each
854
-#. song which has
855
-#. finished playing
856
-#: src/screen.cxx:178
857
-msgid "Consume mode is on"
858
+#: src/KeyName.cxx:61
859
+msgid "Esc"
860
 msgstr ""
861
 
862
-#: src/screen.cxx:179
863
-msgid "Consume mode is off"
864
+#: src/KeyName.cxx:63
865
+msgid "Insert"
866
 msgstr ""
867
 
868
-#: src/screen.cxx:182
869
+#: src/KeyName.cxx:71
870
 #, c-format
871
-msgid "Crossfade %d seconds"
872
+msgid "Ctrl-%c"
873
 msgstr ""
874
 
875
-#: src/screen.cxx:194
876
-msgid "Database updated"
877
-msgstr "Database bijgewerkt"
878
+#: src/KeyName.cxx:73
879
+#, c-format
880
+msgid "Alt-%c"
881
+msgstr ""
882
 
883
-#: src/screen.cxx:226
884
-msgid "Find mode: Wrapped"
885
+#: src/ListWindow.cxx:491
886
+msgid "Range selection disabled"
887
 msgstr ""
888
 
889
-#: src/screen.cxx:227
890
-msgid "Find mode: Normal"
891
+#: src/ListWindow.cxx:496
892
+msgid "Range selection enabled"
893
 msgstr ""
894
 
895
-#: src/screen.cxx:232
896
-msgid "Auto center mode: On"
897
+#. translators: no lyrics were found for the song
898
+#: src/LyricsPage.cxx:236
899
+msgid "No lyrics"
900
 msgstr ""
901
 
902
-#: src/screen.cxx:233
903
-msgid "Auto center mode: Off"
904
-msgstr ""
905
-
906
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
907
-msgid "All tracks"
908
-msgstr "Alle nummers"
909
-
910
-#: src/screen_artist.cxx:384
911
-msgid "All artists"
912
-msgstr "Alle artiesten"
913
-
914
-#: src/screen_artist.cxx:389
915
-#, c-format
916
-msgid "Albums of artist: %s"
917
-msgstr "Albums van artiest: %s"
918
-
919
-#: src/screen_artist.cxx:398
920
-#, c-format
921
-msgid "All tracks of artist: %s"
922
-msgstr "Alle nummers van artiest: %s"
923
-
924
-#: src/screen_artist.cxx:401
925
+#: src/LyricsPage.cxx:254
926
 #, c-format
927
-msgid "Album: %s - %s"
928
-msgstr "Album: %s - %s"
929
-
930
-#: src/screen_artist.cxx:405
931
-#, fuzzy, c-format
932
-msgid "Tracks of no album of artist: %s"
933
-msgstr "Albums van artiest: %s"
934
+msgid "Lyrics timeout occurred after %d seconds"
935
+msgstr ""
936
 
937
-#: src/screen_artist.cxx:450
938
-#, fuzzy, c-format
939
-msgid "Adding album %s..."
940
-msgstr "Laden afspeellijst %s..."
941
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
942
+#: src/LyricsPage.cxx:490
943
+msgid "Lyrics"
944
+msgstr "Songteksten"
945
 
946
-#: src/screen_artist.cxx:452
947
-#, fuzzy, c-format
948
-msgid "Adding %s..."
949
+#. translators: this message is displayed
950
+#. while data is retrieved
951
+#: src/LyricsPage.cxx:340
952
+msgid "loading..."
953
 msgstr "laden..."
954
 
955
-#: src/screen_browser.cxx:122
956
-#, c-format
957
-msgid "Loading playlist %s..."
958
-msgstr "Laden afspeellijst %s..."
959
-
960
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
961
-#: src/screen_browser.cxx:279
962
-#, fuzzy, c-format
963
-msgid "Adding '%s' to queue"
964
-msgstr "Toevoegen '%s' aan afspeellijst"
965
-
966
-#: src/screen_chat.cxx:59
967
-#, c-format
968
-msgid ""
969
-"connected to MPD %u.%u.%u (you need at least \n"
970
-"version 0.17.0 to use the chat feature)"
971
+#: src/LyricsPage.cxx:361
972
+msgid "Editor not configured"
973
 msgstr ""
974
 
975
-#: src/screen_chat.cxx:177
976
-msgid "Your message"
977
+#: src/LyricsPage.cxx:368
978
+msgid "Do you really want to start an editor and edit these lyrics?"
979
 msgstr ""
980
 
981
-#: src/screen_chat.cxx:186
982
-msgid "Message could not be sent"
983
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
984
+msgid "Can't start editor"
985
 msgstr ""
986
 
987
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
988
-msgid "Chat"
989
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
990
+msgid "Editor exited unexpectedly"
991
 msgstr ""
992
 
993
-#: src/screen_client.cxx:41
994
-msgid "Database update running..."
995
-msgstr "Update database draait..."
996
-
997
-#: src/screen_client.cxx:49
998
-#, c-format
999
-msgid "Database update of %s started"
1000
-msgstr "Database update van %s begonnen"
1001
+#. lyrics for the song were saved on hard disk
1002
+#: src/LyricsPage.cxx:439
1003
+msgid "Lyrics saved"
1004
+msgstr ""
1005
 
1006
-#: src/screen_client.cxx:52
1007
-msgid "Database update started"
1008
-msgstr "Database update begonnen"
1009
+#: src/LyricsPage.cxx:445
1010
+#, fuzzy
1011
+msgid "Lyrics deleted"
1012
+msgstr "Songteksten"
1013
 
1014
-#. translators: the "delete" command is only possible
1015
-#. for playlists; the user attempted to delete a song
1016
-#. or a directory or something else
1017
-#: src/screen_file.cxx:200
1018
-msgid "Deleting this item is not possible"
1019
+#: src/LyricsPage.cxx:446
1020
+msgid "No saved lyrics"
1021
 msgstr ""
1022
 
1023
-#: src/screen_file.cxx:207
1024
+#: src/Main.cxx:167
1025
 #, fuzzy, c-format
1026
-msgid "Delete playlist %s?"
1027
-msgstr "Afspeellijst verwijderen"
1028
+msgid "Connecting to %s"
1029
+msgstr "Verbonden met %s"
1030
 
1031
-#. translators: MPD deleted the playlist, as requested by the
1032
-#. user
1033
-#: src/screen_file.cxx:227
1034
-msgid "Playlist deleted"
1035
+#: src/Main.cxx:187
1036
+#, c-format
1037
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1038
 msgstr ""
1039
 
1040
-#. translators: caption of the browser screen
1041
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1042
-msgid "Browse"
1043
-msgstr "Blader"
1044
-
1045
-#: src/screen_find.cxx:29
1046
-msgid "Find"
1047
-msgstr "Vind"
1048
-
1049
-#: src/screen_find.cxx:30
1050
-msgid "Find backward"
1051
+#. To translators: these credits are shown
1052
+#. when ncmpc is started with "--version"
1053
+#: src/options.cxx:213 src/options.cxx:216
1054
+msgid "translator-credits"
1055
 msgstr ""
1056
+"Launchpad Contributions:\n"
1057
+"  Hipska https://launchpad.net/~hipska\n"
1058
+"  Tom Postma https://launchpad.net/~bluegen89"
1059
 
1060
-#: src/screen_find.cxx:31
1061
-msgid "Jump"
1062
-msgstr "Spring"
1063
-
1064
-#: src/screen_find.cxx:82
1065
+#: src/OutputsPage.cxx:87
1066
 #, c-format
1067
-msgid "Unable to find '%s'"
1068
-msgstr "Niet mogelijk '%s' te vinden"
1069
+msgid "Output '%s' enabled"
1070
+msgstr ""
1071
 
1072
-#: src/screen_help.cxx:39
1073
-msgid "Movement"
1074
-msgstr "Beweging"
1075
+#: src/OutputsPage.cxx:98
1076
+#, c-format
1077
+msgid "Output '%s' disabled"
1078
+msgstr ""
1079
 
1080
-#: src/screen_help.cxx:84
1081
-msgid "Global"
1082
-msgstr "Algemeen"
1083
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1084
+msgid "Outputs"
1085
+msgstr "Uitvoerapparaten"
1086
 
1087
-#: src/screen_help.cxx:121
1088
-msgid "Play"
1089
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1090
+msgid "Shuffled queue"
1091
 msgstr ""
1092
 
1093
-#: src/screen_help.cxx:124
1094
-msgid "Move song up"
1095
+#: src/player_command.cxx:186
1096
+msgid "Cleared queue"
1097
 msgstr ""
1098
 
1099
-#: src/screen_help.cxx:125
1100
-msgid "Move song down"
1101
-msgstr ""
1102
+#. get path
1103
+#: src/QueuePage.cxx:307
1104
+msgid "Add"
1105
+msgstr "Voeg toe"
1106
 
1107
-#: src/screen_help.cxx:128
1108
-msgid "Center"
1109
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1110
+msgid "Queue"
1111
 msgstr ""
1112
 
1113
-#: src/screen_help.cxx:136
1114
-msgid "Enter directory/Select and play song"
1115
+#: src/QueuePage.cxx:380
1116
+#, c-format
1117
+msgid "Queue on %s"
1118
 msgstr ""
1119
 
1120
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1121
-msgid "Append song to queue"
1122
+#. query the user for a filename
1123
+#: src/save_playlist.cxx:85
1124
+msgid "Save queue as"
1125
 msgstr ""
1126
 
1127
-#: src/screen_help.cxx:140
1128
-msgid "Delete playlist"
1129
-msgstr "Afspeellijst verwijderen"
1130
+#: src/save_playlist.cxx:107
1131
+#, fuzzy, c-format
1132
+msgid "Replace %s?"
1133
+msgstr "Vervang %s [%s/%s] ? "
1134
 
1135
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1136
-msgid "Search"
1137
-msgstr "Zoeken"
1138
+#. success
1139
+#: src/save_playlist.cxx:128
1140
+#, c-format
1141
+msgid "Saved %s"
1142
+msgstr "Opgeslagen %s"
1143
 
1144
-#: src/screen_help.cxx:151
1145
-msgid "Select and play"
1146
-msgstr ""
1147
+#: src/screen_artist.cxx:186
1148
+#, c-format
1149
+msgid "All tracks of artist: %s"
1150
+msgstr "Alle nummers van artiest: %s"
1151
 
1152
-#: src/screen_help.cxx:162
1153
-msgid "View Lyrics"
1154
-msgstr ""
1155
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1156
+msgid "Album"
1157
+msgstr "Album"
1158
 
1159
-#: src/screen_help.cxx:163
1160
-msgid "(Re)load lyrics"
1161
-msgstr ""
1162
+#: src/screen_artist.cxx:195
1163
+#, fuzzy, c-format
1164
+msgid "Tracks of no album of artist: %s"
1165
+msgstr "Albums van artiest: %s"
1166
 
1167
-#. to translators: this hotkey aborts the retrieval of lyrics
1168
-#. from the server
1169
-#: src/screen_help.cxx:166
1170
-msgid "Interrupt retrieval"
1171
-msgstr ""
1172
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1173
+msgid "Artist"
1174
+msgstr "Artiest"
1175
 
1176
-#: src/screen_help.cxx:167
1177
-msgid "Download lyrics for currently playing song"
1178
-msgstr ""
1179
+#: src/screen_client.cxx:41
1180
+#, fuzzy
1181
+msgid "Database update running"
1182
+msgstr "Update database draait..."
1183
 
1184
-#: src/screen_help.cxx:168
1185
-msgid "Add or edit lyrics"
1186
-msgstr ""
1187
+#: src/screen_client.cxx:48
1188
+#, c-format
1189
+msgid "Database update of %s started"
1190
+msgstr "Database update van %s begonnen"
1191
 
1192
-#: src/screen_help.cxx:169
1193
-msgid "Save lyrics"
1194
-msgstr ""
1195
+#: src/screen_client.cxx:51
1196
+msgid "Database update started"
1197
+msgstr "Database update begonnen"
1198
 
1199
-#: src/screen_help.cxx:170
1200
-#, fuzzy
1201
-msgid "Delete saved lyrics"
1202
-msgstr "Afspeellijst verwijderen"
1203
+#: src/screen.cxx:160
1204
+msgid "Repeat mode is on"
1205
+msgstr "Herhaling modus aan"
1206
 
1207
-#: src/screen_help.cxx:177
1208
-msgid "Enable/disable output"
1209
-msgstr ""
1210
+#: src/screen.cxx:161
1211
+msgid "Repeat mode is off"
1212
+msgstr "Herhaling modus uit"
1213
 
1214
-#: src/screen_help.cxx:184
1215
-msgid "Write a message"
1216
-msgstr ""
1217
+#: src/screen.cxx:165
1218
+msgid "Random mode is on"
1219
+msgstr "Willekeurige modus is aan"
1220
 
1221
-#: src/screen_help.cxx:189
1222
-msgid "Keydef screen"
1223
-msgstr ""
1224
+#: src/screen.cxx:166
1225
+msgid "Random mode is off"
1226
+msgstr "Willekeurige modus is uit"
1227
 
1228
-#: src/screen_help.cxx:191
1229
-msgid "Edit keydefs for selected command"
1230
+#. "single" mode means
1231
+#. that MPD will
1232
+#. automatically stop
1233
+#. after playing one
1234
+#. single song
1235
+#: src/screen.cxx:175
1236
+msgid "Single mode is on"
1237
 msgstr ""
1238
 
1239
-#: src/screen_help.cxx:192
1240
-msgid "Remove selected keydef"
1241
+#: src/screen.cxx:176
1242
+msgid "Single mode is off"
1243
 msgstr ""
1244
 
1245
-#: src/screen_help.cxx:193
1246
-msgid "Add a keydef"
1247
+#. "consume" mode means
1248
+#. that MPD removes each
1249
+#. song which has
1250
+#. finished playing
1251
+#: src/screen.cxx:184
1252
+msgid "Consume mode is on"
1253
 msgstr ""
1254
 
1255
-#: src/screen_help.cxx:194
1256
-msgid "Go up a level"
1257
+#: src/screen.cxx:185
1258
+msgid "Consume mode is off"
1259
 msgstr ""
1260
 
1261
-#: src/screen_help.cxx:195
1262
-msgid "Apply and save changes"
1263
+#: src/screen.cxx:188
1264
+#, c-format
1265
+msgid "Crossfade %d seconds"
1266
 msgstr ""
1267
 
1268
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1269
-msgid "Help"
1270
-msgstr "Documentatie"
1271
+#: src/screen.cxx:200
1272
+msgid "Database updated"
1273
+msgstr "Database bijgewerkt"
1274
 
1275
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1276
-msgid "Error: Screen too small"
1277
-msgstr "Fout: Scherm te klein"
1278
+#: src/screen.cxx:250
1279
+msgid "Find mode: Wrapped"
1280
+msgstr ""
1281
 
1282
-#: src/screen_keydef.cxx:141
1283
-msgid "You have new key bindings"
1284
+#: src/screen.cxx:251
1285
+msgid "Find mode: Normal"
1286
 msgstr ""
1287
 
1288
-#: src/screen_keydef.cxx:143
1289
-msgid "Keybindings unchanged."
1290
+#: src/screen.cxx:256
1291
+msgid "Auto center mode: On"
1292
 msgstr ""
1293
 
1294
-#: src/screen_keydef.cxx:153
1295
-#, c-format
1296
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1297
+#: src/screen.cxx:257
1298
+msgid "Auto center mode: Off"
1299
 msgstr ""
1300
 
1301
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1302
-#, c-format
1303
-msgid "Error: %s - %s"
1304
-msgstr "Fout: %s - %s"
1305
+#: src/screen_find.cxx:31
1306
+msgid "Find"
1307
+msgstr "Vind"
1308
 
1309
-#: src/screen_keydef.cxx:171
1310
-#, c-format
1311
-msgid "Wrote %s"
1312
+#: src/screen_find.cxx:32
1313
+msgid "Find backward"
1314
 msgstr ""
1315
 
1316
-#: src/screen_keydef.cxx:250
1317
+#: src/screen_find.cxx:33
1318
+msgid "Jump"
1319
+msgstr "Spring"
1320
+
1321
+#: src/screen_find.cxx:79
1322
+#, c-format
1323
+msgid "Unable to find '%s'"
1324
+msgstr "Niet mogelijk '%s' te vinden"
1325
+
1326
+#: src/screen_keydef.cxx:161
1327
 msgid "Deleted"
1328
 msgstr "Verwijderd"
1329
 
1330
-#: src/screen_keydef.cxx:265
1331
+#: src/screen_keydef.cxx:177
1332
 #, c-format
1333
 msgid "Enter new key for %s: "
1334
 msgstr ""
1335
 
1336
-#: src/screen_keydef.cxx:276
1337
+#: src/screen_keydef.cxx:187
1338
 msgid "Ctrl-Space can't be used"
1339
 msgstr ""
1340
 
1341
-#: src/screen_keydef.cxx:282
1342
+#: src/screen_keydef.cxx:193
1343
 #, c-format
1344
 msgid "Error: key %s is already used for %s"
1345
 msgstr ""
1346
 
1347
-#: src/screen_keydef.cxx:291
1348
+#: src/screen_keydef.cxx:202
1349
 #, c-format
1350
 msgid "Assigned %s to %s"
1351
 msgstr ""
1352
 
1353
-#: src/screen_keydef.cxx:317
1354
-msgid "===> Apply key bindings "
1355
-msgstr ""
1356
-
1357
-#: src/screen_keydef.cxx:319
1358
-msgid "===> Apply & Save key bindings  "
1359
-msgstr ""
1360
-
1361
-#: src/screen_keydef.cxx:347
1362
+#: src/screen_keydef.cxx:229
1363
 msgid "Add new key"
1364
 msgstr ""
1365
 
1366
-#: src/screen_keydef.cxx:410
1367
-msgid "Note: Did you forget to 'Apply' your changes?"
1368
-msgstr ""
1369
-
1370
-#: src/screen_keydef.cxx:417
1371
-msgid "Edit key bindings"
1372
-msgstr ""
1373
-
1374
-#: src/screen_keydef.cxx:419
1375
+#: src/screen_keydef.cxx:251
1376
 #, c-format
1377
 msgid "Edit keys for %s"
1378
 msgstr ""
1379
 
1380
-#. translators: no lyrics were found for the song
1381
-#: src/screen_lyrics.cxx:208
1382
-msgid "No lyrics"
1383
-msgstr ""
1384
-
1385
-#: src/screen_lyrics.cxx:226
1386
-#, c-format
1387
-msgid "Lyrics timeout occurred after %d seconds"
1388
-msgstr ""
1389
-
1390
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1391
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1392
-msgid "Lyrics"
1393
-msgstr "Songteksten"
1394
-
1395
-#. translators: this message is displayed
1396
-#. while data is retrieved
1397
-#: src/screen_lyrics.cxx:330
1398
-msgid "loading..."
1399
-msgstr "laden..."
1400
-
1401
-#: src/screen_lyrics.cxx:361
1402
-msgid "Editor not configured"
1403
-msgstr ""
1404
-
1405
-#: src/screen_lyrics.cxx:367
1406
-msgid "Do you really want to start an editor and edit these lyrics?"
1407
+#: src/screen_keydef.cxx:393
1408
+msgid "You have new key bindings"
1409
 msgstr ""
1410
 
1411
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1412
-msgid "Can't start editor"
1413
+#: src/screen_keydef.cxx:395
1414
+msgid "Keybindings unchanged."
1415
 msgstr ""
1416
 
1417
-#: src/screen_lyrics.cxx:411
1418
-#, c-format
1419
-msgid "Editor exited unexpectedly (%d)"
1420
+#: src/screen_keydef.cxx:405
1421
+msgid "Unable to write configuration"
1422
 msgstr ""
1423
 
1424
-#: src/screen_lyrics.cxx:414
1425
+#: src/screen_keydef.cxx:421
1426
 #, c-format
1427
-msgid "Editor exited unexpectedly (signal %d)"
1428
+msgid "Wrote %s"
1429
 msgstr ""
1430
 
1431
-#. lyrics for the song were saved on hard disk
1432
-#: src/screen_lyrics.cxx:436
1433
-msgid "Lyrics saved"
1434
+#: src/screen_keydef.cxx:433
1435
+msgid "===> Apply key bindings "
1436
 msgstr ""
1437
 
1438
-#: src/screen_lyrics.cxx:443
1439
-#, fuzzy
1440
-msgid "Lyrics deleted"
1441
-msgstr "Songteksten"
1442
-
1443
-#: src/screen_lyrics.cxx:446
1444
-msgid "No saved lyrics"
1445
+#: src/screen_keydef.cxx:435
1446
+msgid "===> Apply & Save key bindings  "
1447
 msgstr ""
1448
 
1449
-#: src/screen_outputs.cxx:60
1450
-#, c-format
1451
-msgid "Output '%s' enabled"
1452
+#: src/screen_keydef.cxx:472
1453
+msgid "Edit key bindings"
1454
 msgstr ""
1455
 
1456
-#: src/screen_outputs.cxx:71
1457
-#, c-format
1458
-msgid "Output '%s' disabled"
1459
+#: src/screen_keydef.cxx:554
1460
+msgid "Note: Did you forget to 'Apply' your changes?"
1461
 msgstr ""
1462
 
1463
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1464
-msgid "Outputs"
1465
-msgstr "Uitvoerapparaten"
1466
-
1467
-#. get path
1468
-#: src/screen_queue.cxx:274
1469
-msgid "Add"
1470
-msgstr "Voeg toe"
1471
-
1472
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1473
-msgid "Queue"
1474
+#: src/screen_keydef.cxx:604
1475
+msgid "Keys"
1476
 msgstr ""
1477
 
1478
-#: src/screen_queue.cxx:384
1479
-#, c-format
1480
-msgid "Queue on %s"
1481
-msgstr ""
1482
+#: src/screen_utils.cxx:124
1483
+msgid "Password"
1484
+msgstr "Wachtwoord"
1485
 
1486
-#: src/screen_search.cxx:48
1487
+#: src/SearchPage.cxx:51
1488
 msgid "artist"
1489
 msgstr "artiest"
1490
 
1491
-#: src/screen_search.cxx:49
1492
+#: src/SearchPage.cxx:52
1493
 msgid "album"
1494
 msgstr "album"
1495
 
1496
-#: src/screen_search.cxx:50
1497
+#: src/SearchPage.cxx:53
1498
 msgid "title"
1499
 msgstr "titel"
1500
 
1501
-#: src/screen_search.cxx:51
1502
+#: src/SearchPage.cxx:54
1503
 msgid "track"
1504
 msgstr "nummer"
1505
 
1506
-#: src/screen_search.cxx:52
1507
+#: src/SearchPage.cxx:55
1508
 msgid "name"
1509
 msgstr "naam"
1510
 
1511
-#: src/screen_search.cxx:53
1512
+#: src/SearchPage.cxx:56
1513
 msgid "genre"
1514
 msgstr "genre"
1515
 
1516
-#: src/screen_search.cxx:54
1517
+#: src/SearchPage.cxx:57
1518
 msgid "date"
1519
 msgstr "datum"
1520
 
1521
-#: src/screen_search.cxx:55
1522
+#: src/SearchPage.cxx:58
1523
 msgid "composer"
1524
 msgstr "componist"
1525
 
1526
-#: src/screen_search.cxx:56
1527
+#: src/SearchPage.cxx:59
1528
 msgid "performer"
1529
 msgstr "uitvoerder"
1530
 
1531
-#: src/screen_search.cxx:57
1532
+#: src/SearchPage.cxx:60
1533
 msgid "comment"
1534
 msgstr "opmerking"
1535
 
1536
-#: src/screen_search.cxx:65
1537
+#: src/SearchPage.cxx:68
1538
 msgid "file"
1539
 msgstr "bestand"
1540
 
1541
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1542
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1543
 msgid "Title"
1544
 msgstr "Titel"
1545
 
1546
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1547
-msgid "Artist"
1548
-msgstr "Artiest"
1549
-
1550
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1551
-msgid "Album"
1552
-msgstr "Album"
1553
-
1554
-#: src/screen_search.cxx:85
1555
+#: src/SearchPage.cxx:88
1556
 msgid "Filename"
1557
 msgstr "Bestandsnaam"
1558
 
1559
-#: src/screen_search.cxx:86
1560
+#: src/SearchPage.cxx:89
1561
 msgid "Artist + Title"
1562
 msgstr "Artiest + Titel"
1563
 
1564
-#: src/screen_search.cxx:244
1565
-#, c-format
1566
-msgid "No argument for search tag %s"
1567
-msgstr ""
1568
-
1569
-#: src/screen_search.cxx:253
1570
+#: src/SearchPage.cxx:270
1571
 #, c-format
1572
 msgid "Bad search tag %s"
1573
 msgstr ""
1574
 
1575
-#. if( pattern==nullptr )
1576
-#. search_new(screen, c);
1577
-#. else
1578
-#: src/screen_search.cxx:400
1579
+#: src/SearchPage.cxx:284
1580
 #, c-format
1581
-msgid "Press %s for a new search"
1582
-msgstr ""
1583
-
1584
-#: src/screen_search.cxx:427
1585
-#, c-format
1586
-msgid "Search: %s"
1587
+msgid "No argument for search tag %s"
1588
 msgstr ""
1589
 
1590
-#: src/screen_search.cxx:430
1591
-#, c-format
1592
-msgid "Search: Results for %s [%s]"
1593
-msgstr "Zoeken: Resultaten voor %s [%s]"
1594
-
1595
-#: src/screen_search.cxx:434
1596
-#, c-format
1597
-msgid "Search: Press %s for a new search [%s]"
1598
-msgstr ""
1599
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1600
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1601
+msgid "Search"
1602
+msgstr "Zoeken"
1603
 
1604
-#: src/screen_search.cxx:458
1605
+#: src/SearchPage.cxx:436
1606
 #, c-format
1607
 msgid "Search mode: %s"
1608
 msgstr ""
1609
 
1610
-#: src/screen_song.cxx:54
1611
+#: src/SongPage.cxx:67
1612
 msgid "Length"
1613
 msgstr ""
1614
 
1615
-#: src/screen_song.cxx:55
1616
+#: src/SongPage.cxx:68
1617
 msgid "Position"
1618
 msgstr ""
1619
 
1620
-#: src/screen_song.cxx:56
1621
+#: src/SongPage.cxx:69
1622
 msgid "Composer"
1623
 msgstr "Componist"
1624
 
1625
-#: src/screen_song.cxx:57
1626
+#: src/SongPage.cxx:70
1627
 msgid "Name"
1628
 msgstr "Naam"
1629
 
1630
-#: src/screen_song.cxx:58
1631
+#: src/SongPage.cxx:71
1632
 msgid "Disc"
1633
 msgstr "Schijf"
1634
 
1635
-#: src/screen_song.cxx:59
1636
+#: src/SongPage.cxx:72
1637
 msgid "Track"
1638
 msgstr "Nummer"
1639
 
1640
-#: src/screen_song.cxx:60
1641
+#: src/SongPage.cxx:73
1642
 msgid "Date"
1643
 msgstr "Datum"
1644
 
1645
-#: src/screen_song.cxx:61
1646
+#: src/SongPage.cxx:74
1647
 msgid "Genre"
1648
 msgstr "Genre"
1649
 
1650
-#: src/screen_song.cxx:62
1651
+#: src/SongPage.cxx:75
1652
 msgid "Comment"
1653
 msgstr "Opmerking"
1654
 
1655
-#: src/screen_song.cxx:63
1656
+#: src/SongPage.cxx:76
1657
 msgid "Path"
1658
 msgstr "Locatie"
1659
 
1660
-#: src/screen_song.cxx:64
1661
+#: src/SongPage.cxx:77
1662
 msgid "Bitrate"
1663
 msgstr "Bitsnelheid"
1664
 
1665
-#: src/screen_song.cxx:65
1666
+#: src/SongPage.cxx:78
1667
 msgid "Format"
1668
 msgstr ""
1669
 
1670
-#: src/screen_song.cxx:82
1671
+#: src/SongPage.cxx:95
1672
 msgid "Number of artists"
1673
 msgstr "Aantal artiesten"
1674
 
1675
-#: src/screen_song.cxx:83
1676
+#: src/SongPage.cxx:96
1677
 msgid "Number of albums"
1678
 msgstr "Aantal albums"
1679
 
1680
-#: src/screen_song.cxx:84
1681
+#: src/SongPage.cxx:97
1682
 msgid "Number of songs"
1683
 msgstr "Aantal nummers"
1684
 
1685
-#: src/screen_song.cxx:85
1686
+#: src/SongPage.cxx:98
1687
 msgid "Uptime"
1688
 msgstr ""
1689
 
1690
-#: src/screen_song.cxx:86
1691
+#: src/SongPage.cxx:99
1692
 msgid "Most recent db update"
1693
 msgstr ""
1694
 
1695
-#: src/screen_song.cxx:87
1696
+#: src/SongPage.cxx:100
1697
 msgid "Playtime"
1698
 msgstr ""
1699
 
1700
-#: src/screen_song.cxx:88
1701
+#: src/SongPage.cxx:101
1702
 msgid "DB playtime"
1703
 msgstr ""
1704
 
1705
-#: src/screen_song.cxx:173
1706
+#: src/SongPage.cxx:204
1707
 msgid "Song viewer"
1708
 msgstr ""
1709
 
1710
-#: src/screen_song.cxx:337
1711
+#: src/SongPage.cxx:370
1712
 msgid "MPD statistics"
1713
 msgstr ""
1714
 
1715
-#: src/screen_song.cxx:427
1716
+#: src/SongPage.cxx:455
1717
 msgid "Selected song"
1718
 msgstr ""
1719
 
1720
-#: src/screen_song.cxx:437
1721
+#: src/SongPage.cxx:465
1722
 msgid "Currently playing song"
1723
 msgstr ""
1724
 
1725
-#: src/screen_song.cxx:442
1726
+#: src/SongPage.cxx:470
1727
 #, c-format
1728
 msgid "%d kbps"
1729
 msgstr "%d kbps"
1730
 
1731
-#. NOTE: if one day a translator decides to use a multi-byte character
1732
-#. for one of the yes/no keys, we'll have to parse it properly
1733
-#: src/screen_utils.cxx:80
1734
-#, fuzzy, c-format
1735
-msgid "%s [%s/%s] "
1736
-msgstr "Vervang %s [%s/%s] ? "
1737
-
1738
-#: src/screen_utils.cxx:121
1739
-msgid "Password"
1740
-msgstr "Wachtwoord"
1741
+#: src/SongPage.cxx:554
1742
+msgid "Song"
1743
+msgstr ""
1744
 
1745
-#: src/status_bar.cxx:121
1746
+#: src/StatusBar.cxx:104
1747
 msgid "Playing:"
1748
 msgstr "Speelt:"
1749
 
1750
-#: src/status_bar.cxx:124
1751
+#: src/StatusBar.cxx:108
1752
 msgid "[Paused]"
1753
 msgstr ""
1754
 
1755
-#: src/title_bar.cxx:99
1756
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1757
+msgid "Unknown color"
1758
+msgstr ""
1759
+
1760
+#: src/Styles.cxx:333
1761
+msgid "Unknown color field"
1762
+msgstr ""
1763
+
1764
+#: src/Styles.cxx:375
1765
+msgid "Terminal lacks color capabilities"
1766
+msgstr ""
1767
+
1768
+#: src/time_format.cxx:44
1769
+msgid "year"
1770
+msgstr ""
1771
+
1772
+#: src/time_format.cxx:46
1773
+msgid "years"
1774
+msgstr ""
1775
+
1776
+#: src/time_format.cxx:54
1777
+msgid "week"
1778
+msgstr ""
1779
+
1780
+#: src/time_format.cxx:57
1781
+msgid "weeks"
1782
+msgstr ""
1783
+
1784
+#: src/time_format.cxx:65
1785
+msgid "day"
1786
+msgstr ""
1787
+
1788
+#: src/time_format.cxx:68
1789
+msgid "days"
1790
+msgstr ""
1791
+
1792
+#: src/TitleBar.cxx:100
1793
 msgid "Volume n/a"
1794
 msgstr "Volume n/b"
1795
 
1796
-#: src/title_bar.cxx:101
1797
+#: src/TitleBar.cxx:102
1798
 #, c-format
1799
 msgid "Volume %d%%"
1800
 msgstr "Volume %d%%"
1801
 
1802
-#~ msgid "Connected to %s"
1803
-#~ msgstr "Verbonden met %s"
1804
+#~ msgid "Search: Results for %s [%s]"
1805
+#~ msgstr "Zoeken: Resultaten voor %s [%s]"
1806
+
1807
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1808
+#~ msgstr "Verbind met %s... [druk %s om af te breken]"
1809
+
1810
+#~ msgid "Album: %s - %s"
1811
+#~ msgstr "Album: %s - %s"
1812
+
1813
+#, fuzzy
1814
+#~ msgid "Adding album %s..."
1815
+#~ msgstr "Laden afspeellijst %s..."
1816
+
1817
+#, fuzzy
1818
+#~ msgid "Adding %s..."
1819
+#~ msgstr "laden..."
1820
+
1821
+#~ msgid "Error: Screen too small"
1822
+#~ msgstr "Fout: Scherm te klein"
1823
+
1824
+#~ msgid "Error: %s - %s"
1825
+#~ msgstr "Fout: %s - %s"
1826
+
1827
+#, fuzzy
1828
+#~ msgid "%s [%s/%s] "
1829
+#~ msgstr "Vervang %s [%s/%s] ? "
1830
 
1831
 #~ msgid "Save playlist as"
1832
 #~ msgstr "Afspeellijst opslaan als"
1833
ncmpc-0.30.tar.xz/po/pl.po -> ncmpc-0.32.tar.xz/po/pl.po Changed
1919
 
1
@@ -8,7 +8,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.19\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-07-23 21:08+0200\n"
8
 "Last-Translator:  <krzysztof.krakowiak@gmail.com>\n"
9
 "Language-Team: Polish\n"
10
@@ -19,423 +19,358 @@
11
 "Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
12
 "|| n%100>=20) ? 1 : 2);\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Nieznane polecenie"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Wszystkie ścieżki"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Ostrzeżenie: Nieznany kolor pola - %s\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminal nie obsługuje zmiany kolorów"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Albumy artysty: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminal nie obsługuje kolorów"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Dodawanie '%s' do listy odtwarzania"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Wszyscy artyści"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Klawisz %s przypisany do %s oraz %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Ekran konfiguracji klawiszy"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Wyjdź"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Przesuń kursor w górę"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Przesuń kursor w dół"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Przesuń kursor na początek ekranu"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Przesuń kursor na środek ekranu"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Przesuń kursor na koniec ekranu"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Przesuń kursor na początek listy"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Przesuń kursor na koniec listy"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Przesuń o stronę do góry"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Przesuń o stronę w dół"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Wybór zakresu"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Przesuń o linijkę w dół"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Przesuń o linijkę do góry"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Przesuń o pół ekranu do góry"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Przesuń o pół ekranu w dół"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Zaznacz obecnie odtwarzaną piosenkę"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Ekran pomocy"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Ekran definicji klawiszy"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Ekran przeglądania"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Odtwarzaj/Przejdź do katalogu"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Wstrzymanie"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Zatrzymanie"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Przycięcie"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Następna ścieżka"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Poprzednia ściężka"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Przewiń naprzód"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Przewiń wstecz"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Zgłośnij"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Przycisz"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Zaznacz/odznacz piosenkę na liście odtwarzania"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Zazczacz wszystkie wylistowane pozycje"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Usuń piosenkę z listy odtwarzania"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Przełącz tryb powtarzania"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Przełącz tryb losowy"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Przełącz tryb pojedynczej piosenki"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Przełącz tryb pożerania"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Przełącz tryb przenikania"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Włącz aktualizacje bazy piosenek"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Dodaj url/plik do playlisty"
286
+msgid "Append song to queue"
287
+msgstr "Dodaj piosenkę do listy odtwarzania"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Przejdź do katalogu głównego"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Przejdź do nadrzędnego katalogu"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Zlokalizuj piosenkę w przeglądarce"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Przesuń element w górę"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Przesuń element w dół"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Odświerz ekran"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Przełącz tryb wyszukiwania"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Przełącz tryb automatycznego centrowania"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Następny ekran"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Poprzedni ekran"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Przełącz do najbardziej aktualnego ekranu"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Wyszukaj naprzód"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Znajdź następne"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Wyszukaj wstecz"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Znajdź poprzednie"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Skocz do"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Ekran artysty"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Ekran wyszukiwania"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Zmień tryb wyszukiwania"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Zobacz zaznaczone i obecnie odtwarzaną piosenkę"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Ekran z tekstem piosenki"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Przerwij zadanie"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Zaktualizuj tekst piosenki"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Ekran z wyjściami dźwiękowymi"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Następny ekran"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Niezdefiniowany"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Spacja"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr ""
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr ""
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr ""
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Góra"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Dół"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Lewo"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Prawo"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr ""
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr ""
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr ""
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr ""
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr ""
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr ""
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr ""
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr ""
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Klawisz %s przypisany do %s oraz %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Błąd"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Nieprawidłowa definicja skrótu klaiwszowego"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Nieznane polecenie"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Niekompletna konfiguracja skrótów klawiszowych"
545
 
546
@@ -443,812 +378,878 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Nieprawidłowy tryb wyświetlania czasu"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Brakujący '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Zła nazwa koloru"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Niekompletna definicja koloru"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Nieprawidłowy numer"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Nieprawidłowa definicja koloru"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Nieznana nazwa ekranu"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Nieprawidłowy tryb wyszukiwania"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Nieznany tryb wyszukiwania"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Nieznany parametr konfiguracyjny"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "t"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminal nie obsługuje zmiany kolorów"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Usunięcie tego elementu nie jest możliwe"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Wielozaznaczanie wyłączone"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Usuń listę odtwarzania"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Wielozaznaczanie włączone"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Anulowano"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Łączenie z %s... [Wciśnij %s by anulować]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Lista odtwarzania usunięta"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Przeglądaj"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Błąd: MPD w wersji %d.%d.%d jest za stary (potrzebny jest %s)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Ładowany listy odtwarzania %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "wciśnij %s by odpalić edytor klawiszy"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Poruszanie"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
+#: src/HelpPage.cxx:105
675
+msgid "Global"
676
+msgstr "Globalne"
677
 
678
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
679
-msgid "Shuffled queue"
680
-msgstr ""
681
+#: src/HelpPage.cxx:142
682
+msgid "Play"
683
+msgstr "Odtwarzaj"
684
 
685
-#: src/player_command.cxx:184
686
-msgid "Cleared queue"
687
-msgstr ""
688
+#: src/HelpPage.cxx:149
689
+msgid "Center"
690
+msgstr "Wycentruj"
691
 
692
-#. query the user for a filename
693
-#: src/save_playlist.cxx:109
694
-msgid "Save queue as"
695
-msgstr ""
696
+#: src/HelpPage.cxx:157
697
+msgid "Enter directory/Select and play song"
698
+msgstr "Podaj katalog/Wybierz i odtwarzaj piosenkę"
699
 
700
-#: src/save_playlist.cxx:140
701
-#, fuzzy, c-format
702
-msgid "Replace %s?"
703
-msgstr "Zamień %s [%s/%s] ? "
704
+#: src/HelpPage.cxx:161
705
+msgid "Delete playlist"
706
+msgstr "Usuń listę odtwarzania"
707
 
708
-#. translators: a dialog was aborted by the user
709
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
710
-#: src/screen_lyrics.cxx:370
711
-msgid "Aborted"
712
-msgstr "Anulowano"
713
+#: src/HelpPage.cxx:171
714
+#, fuzzy
715
+msgid "New search"
716
+msgstr "Znajdź"
717
 
718
-#. success
719
-#: src/save_playlist.cxx:171
720
-#, c-format
721
-msgid "Saved %s"
722
-msgstr "Zapisano %s"
723
+#: src/HelpPage.cxx:172
724
+msgid "Select and play"
725
+msgstr "Wybierz i odtwarzaj"
726
 
727
-#: src/screen.cxx:154
728
-msgid "Repeat mode is on"
729
-msgstr "Tryb powtarzania jest włączony"
730
+#: src/HelpPage.cxx:183
731
+msgid "View Lyrics"
732
+msgstr "Zobacz teskt piosenki"
733
 
734
-#: src/screen.cxx:155
735
-msgid "Repeat mode is off"
736
-msgstr "Tryb powtarzania jest wyłączony"
737
+#: src/HelpPage.cxx:184
738
+msgid "(Re)load lyrics"
739
+msgstr "(Prze)ładuj tekst"
740
 
741
-#: src/screen.cxx:159
742
-msgid "Random mode is on"
743
-msgstr "Tryb losowy jest włączony"
744
+#. to translators: this hotkey aborts the retrieval of lyrics
745
+#. from the server
746
+#: src/HelpPage.cxx:187
747
+msgid "Interrupt retrieval"
748
+msgstr "Przerwij pobieranie"
749
 
750
-#: src/screen.cxx:160
751
-msgid "Random mode is off"
752
-msgstr "Tryb losowy jest wyłączony"
753
+#: src/HelpPage.cxx:188
754
+msgid "Download lyrics for currently playing song"
755
+msgstr "Sćiagnij słowa dla obecnie odtwarzanej piosenki"
756
 
757
-#. "single" mode means
758
-#. that MPD will
759
-#. automatically stop
760
-#. after playing one
761
-#. single song
762
-#: src/screen.cxx:169
763
-msgid "Single mode is on"
764
-msgstr "Tryb pojedynczej piosenki jest włączony"
765
+#: src/HelpPage.cxx:189
766
+#, fuzzy
767
+msgid "Add or edit lyrics"
768
+msgstr "Brak zapisanego tesktu piosenki"
769
 
770
-#: src/screen.cxx:170
771
-msgid "Single mode is off"
772
-msgstr "Tryb pojedynczej piosenki jest wyłączony"
773
+#: src/HelpPage.cxx:190
774
+msgid "Save lyrics"
775
+msgstr "Zapisz tekst piosenku"
776
 
777
-#. "consume" mode means
778
-#. that MPD removes each
779
-#. song which has
780
-#. finished playing
781
-#: src/screen.cxx:178
782
-msgid "Consume mode is on"
783
-msgstr "Tryb pożerania jest włączony"
784
+#: src/HelpPage.cxx:191
785
+msgid "Delete saved lyrics"
786
+msgstr "Usuń zapisany tekst piosenki"
787
 
788
-#: src/screen.cxx:179
789
-msgid "Consume mode is off"
790
-msgstr "Tryb pożerania jest wyłączony"
791
+#: src/HelpPage.cxx:198
792
+msgid "Enable/disable output"
793
+msgstr "Włącz/wyłącz wyjście"
794
 
795
-#: src/screen.cxx:182
796
-#, c-format
797
-msgid "Crossfade %d seconds"
798
-msgstr "Przenikaj %d sekund"
799
+#: src/HelpPage.cxx:205
800
+msgid "Write a message"
801
+msgstr ""
802
 
803
-#: src/screen.cxx:194
804
-msgid "Database updated"
805
-msgstr "Baza zaktualizowana"
806
+#: src/HelpPage.cxx:210
807
+msgid "Keydef screen"
808
+msgstr "Ekran definicji klawiszy"
809
 
810
-#: src/screen.cxx:226
811
-msgid "Find mode: Wrapped"
812
-msgstr "Tryb wyszukiwania: Zawinięty"
813
+#: src/HelpPage.cxx:212
814
+msgid "Edit keydefs for selected command"
815
+msgstr "Edytuj definicje klawiszy dla wybranego polecenia"
816
 
817
-#: src/screen.cxx:227
818
-msgid "Find mode: Normal"
819
-msgstr "Tryb wyszukiwania: Normalny"
820
+#: src/HelpPage.cxx:213
821
+msgid "Remove selected keydef"
822
+msgstr "Usuń wybraną definicję klawiszy"
823
 
824
-#: src/screen.cxx:232
825
-msgid "Auto center mode: On"
826
-msgstr "Tryb automatycznego centrowania: Włączony"
827
+#: src/HelpPage.cxx:214
828
+#, fuzzy
829
+msgid "Add a keydef"
830
+msgstr "Dodaj nowy klawisz"
831
 
832
-#: src/screen.cxx:233
833
-msgid "Auto center mode: Off"
834
-msgstr "Tryb automatycznego centrowania: Wyłączony"
835
+#: src/HelpPage.cxx:215
836
+msgid "Go up a level"
837
+msgstr "Idź poziom wyżej"
838
 
839
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
840
-msgid "All tracks"
841
-msgstr "Wszystkie ścieżki"
842
+#: src/HelpPage.cxx:216
843
+msgid "Apply and save changes"
844
+msgstr "Zastosuj i zapisz zmiany"
845
 
846
-#: src/screen_artist.cxx:384
847
-msgid "All artists"
848
-msgstr "Wszyscy artyści"
849
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
850
+msgid "Help"
851
+msgstr "Pomoc"
852
 
853
-#: src/screen_artist.cxx:389
854
-#, c-format
855
-msgid "Albums of artist: %s"
856
-msgstr "Albumy artysty: %s"
857
+#: src/i18n.h:43
858
+msgid "y"
859
+msgstr "t"
860
 
861
-#: src/screen_artist.cxx:398
862
-#, c-format
863
-msgid "All tracks of artist: %s"
864
-msgstr "Wszystkie piosenki artysty: %s"
865
+#: src/i18n.h:44
866
+msgid "n"
867
+msgstr "n"
868
 
869
-#: src/screen_artist.cxx:401
870
-#, c-format
871
-msgid "Album: %s - %s"
872
-msgstr "Albumy: %s - %s"
873
+#: src/KeyName.cxx:31
874
+msgid "Undefined"
875
+msgstr "Niezdefiniowany"
876
 
877
-#: src/screen_artist.cxx:405
878
-#, c-format
879
-msgid "Tracks of no album of artist: %s"
880
-msgstr "Ścieżki bez albumów lub artystów: %s"
881
+#: src/KeyName.cxx:33
882
+msgid "Space"
883
+msgstr "Spacja"
884
 
885
-#: src/screen_artist.cxx:450
886
-#, c-format
887
-msgid "Adding album %s..."
888
-msgstr "Dodawanie albumu %s..."
889
+#: src/KeyName.cxx:35
890
+msgid "Enter"
891
+msgstr ""
892
 
893
-#: src/screen_artist.cxx:452
894
-#, c-format
895
-msgid "Adding %s..."
896
-msgstr "Dodawanie %s..."
897
+#: src/KeyName.cxx:37
898
+msgid "Backspace"
899
+msgstr ""
900
 
901
-#: src/screen_browser.cxx:122
902
-#, c-format
903
-msgid "Loading playlist %s..."
904
-msgstr "Ładowany listy odtwarzania %s..."
905
+#: src/KeyName.cxx:39
906
+msgid "Delete"
907
+msgstr ""
908
 
909
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
910
-#: src/screen_browser.cxx:279
911
-#, fuzzy, c-format
912
-msgid "Adding '%s' to queue"
913
-msgstr "Dodawanie '%s' do listy odtwarzania"
914
+#: src/KeyName.cxx:41
915
+msgid "Up"
916
+msgstr "Góra"
917
 
918
-#: src/screen_chat.cxx:59
919
-#, c-format
920
-msgid ""
921
-"connected to MPD %u.%u.%u (you need at least \n"
922
-"version 0.17.0 to use the chat feature)"
923
-msgstr ""
924
+#: src/KeyName.cxx:43
925
+msgid "Down"
926
+msgstr "Dół"
927
 
928
-#: src/screen_chat.cxx:177
929
-msgid "Your message"
930
+#: src/KeyName.cxx:45
931
+msgid "Left"
932
+msgstr "Lewo"
933
+
934
+#: src/KeyName.cxx:47
935
+msgid "Right"
936
+msgstr "Prawo"
937
+
938
+#: src/KeyName.cxx:49
939
+msgid "Home"
940
 msgstr ""
941
 
942
-#: src/screen_chat.cxx:186
943
-msgid "Message could not be sent"
944
+#: src/KeyName.cxx:51
945
+msgid "End"
946
 msgstr ""
947
 
948
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
949
-msgid "Chat"
950
+#: src/KeyName.cxx:53
951
+msgid "PageDown"
952
 msgstr ""
953
 
954
-#: src/screen_client.cxx:41
955
-msgid "Database update running..."
956
-msgstr "Aktualizacja bazy w toku..."
957
+#: src/KeyName.cxx:55
958
+msgid "PageUp"
959
+msgstr ""
960
 
961
-#: src/screen_client.cxx:49
962
-#, c-format
963
-msgid "Database update of %s started"
964
-msgstr "Aktualizacja bazy %s rozpoczęta"
965
+#: src/KeyName.cxx:57
966
+msgid "Tab"
967
+msgstr ""
968
 
969
-#: src/screen_client.cxx:52
970
-msgid "Database update started"
971
-msgstr "Aktualizacja bazy rozpoczęta"
972
+#: src/KeyName.cxx:59
973
+msgid "Shift+Tab"
974
+msgstr ""
975
 
976
-#. translators: the "delete" command is only possible
977
-#. for playlists; the user attempted to delete a song
978
-#. or a directory or something else
979
-#: src/screen_file.cxx:200
980
-msgid "Deleting this item is not possible"
981
-msgstr "Usunięcie tego elementu nie jest możliwe"
982
+#: src/KeyName.cxx:61
983
+msgid "Esc"
984
+msgstr ""
985
 
986
-#: src/screen_file.cxx:207
987
-#, fuzzy, c-format
988
-msgid "Delete playlist %s?"
989
-msgstr "Usuń listę odtwarzania"
990
+#: src/KeyName.cxx:63
991
+msgid "Insert"
992
+msgstr ""
993
 
994
-#. translators: MPD deleted the playlist, as requested by the
995
-#. user
996
-#: src/screen_file.cxx:227
997
-msgid "Playlist deleted"
998
-msgstr "Lista odtwarzania usunięta"
999
+#: src/KeyName.cxx:71
1000
+#, c-format
1001
+msgid "Ctrl-%c"
1002
+msgstr ""
1003
 
1004
-#. translators: caption of the browser screen
1005
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1006
-msgid "Browse"
1007
-msgstr "Przeglądaj"
1008
+#: src/KeyName.cxx:73
1009
+#, c-format
1010
+msgid "Alt-%c"
1011
+msgstr ""
1012
 
1013
-#: src/screen_find.cxx:29
1014
-msgid "Find"
1015
-msgstr "Znajdź"
1016
+#: src/ListWindow.cxx:491
1017
+msgid "Range selection disabled"
1018
+msgstr "Wielozaznaczanie wyłączone"
1019
 
1020
-#: src/screen_find.cxx:30
1021
-msgid "Find backward"
1022
-msgstr "Znajdź wstecz"
1023
+#: src/ListWindow.cxx:496
1024
+msgid "Range selection enabled"
1025
+msgstr "Wielozaznaczanie włączone"
1026
 
1027
-#: src/screen_find.cxx:31
1028
-msgid "Jump"
1029
-msgstr "Skocz"
1030
+#. translators: no lyrics were found for the song
1031
+#: src/LyricsPage.cxx:236
1032
+msgid "No lyrics"
1033
+msgstr "Brak tekstu piosenki"
1034
 
1035
-#: src/screen_find.cxx:82
1036
+#: src/LyricsPage.cxx:254
1037
 #, c-format
1038
-msgid "Unable to find '%s'"
1039
-msgstr "Nie można znaleźć '%s'"
1040
+msgid "Lyrics timeout occurred after %d seconds"
1041
+msgstr ""
1042
 
1043
-#: src/screen_help.cxx:39
1044
-msgid "Movement"
1045
-msgstr "Poruszanie"
1046
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1047
+#: src/LyricsPage.cxx:490
1048
+msgid "Lyrics"
1049
+msgstr "Teskt piosenki"
1050
 
1051
-#: src/screen_help.cxx:84
1052
-msgid "Global"
1053
-msgstr "Globalne"
1054
+#. translators: this message is displayed
1055
+#. while data is retrieved
1056
+#: src/LyricsPage.cxx:340
1057
+msgid "loading..."
1058
+msgstr "ładowanie..."
1059
 
1060
-#: src/screen_help.cxx:121
1061
-msgid "Play"
1062
-msgstr "Odtwarzaj"
1063
+#: src/LyricsPage.cxx:361
1064
+msgid "Editor not configured"
1065
+msgstr ""
1066
 
1067
-#: src/screen_help.cxx:124
1068
-msgid "Move song up"
1069
-msgstr "Przesuń piosenkę w gorę"
1070
+#: src/LyricsPage.cxx:368
1071
+msgid "Do you really want to start an editor and edit these lyrics?"
1072
+msgstr ""
1073
 
1074
-#: src/screen_help.cxx:125
1075
-msgid "Move song down"
1076
-msgstr "Przesuń piosenkę w dół"
1077
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1078
+msgid "Can't start editor"
1079
+msgstr ""
1080
 
1081
-#: src/screen_help.cxx:128
1082
-msgid "Center"
1083
-msgstr "Wycentruj"
1084
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1085
+msgid "Editor exited unexpectedly"
1086
+msgstr ""
1087
 
1088
-#: src/screen_help.cxx:136
1089
-msgid "Enter directory/Select and play song"
1090
-msgstr "Podaj katalog/Wybierz i odtwarzaj piosenkę"
1091
+#. lyrics for the song were saved on hard disk
1092
+#: src/LyricsPage.cxx:439
1093
+msgid "Lyrics saved"
1094
+msgstr "Tekst piosenki zapisany"
1095
 
1096
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1097
-#, fuzzy
1098
-msgid "Append song to queue"
1099
-msgstr "Dodaj piosenkę do listy odtwarzania"
1100
+#: src/LyricsPage.cxx:445
1101
+msgid "Lyrics deleted"
1102
+msgstr "Teskt piosenki usunięty"
1103
 
1104
-#: src/screen_help.cxx:140
1105
-msgid "Delete playlist"
1106
-msgstr "Usuń listę odtwarzania"
1107
+#: src/LyricsPage.cxx:446
1108
+msgid "No saved lyrics"
1109
+msgstr "Brak zapisanego tesktu piosenki"
1110
 
1111
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1112
-msgid "Search"
1113
-msgstr "Znajdź"
1114
+#: src/Main.cxx:167
1115
+#, fuzzy, c-format
1116
+msgid "Connecting to %s"
1117
+msgstr "Połączony z %s"
1118
 
1119
-#: src/screen_help.cxx:151
1120
-msgid "Select and play"
1121
-msgstr "Wybierz i odtwarzaj"
1122
+#: src/Main.cxx:187
1123
+#, fuzzy, c-format
1124
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1125
+msgstr "Błąd: MPD w wersji %d.%d.%d jest za stary (potrzebny jest %s)"
1126
 
1127
-#: src/screen_help.cxx:162
1128
-msgid "View Lyrics"
1129
-msgstr "Zobacz teskt piosenki"
1130
+#. To translators: these credits are shown
1131
+#. when ncmpc is started with "--version"
1132
+#: src/options.cxx:213 src/options.cxx:216
1133
+msgid "translator-credits"
1134
+msgstr ""
1135
 
1136
-#: src/screen_help.cxx:163
1137
-msgid "(Re)load lyrics"
1138
-msgstr "(Prze)ładuj tekst"
1139
+#: src/OutputsPage.cxx:87
1140
+#, c-format
1141
+msgid "Output '%s' enabled"
1142
+msgstr "Wyjście '%s' włączone"
1143
 
1144
-#. to translators: this hotkey aborts the retrieval of lyrics
1145
-#. from the server
1146
-#: src/screen_help.cxx:166
1147
-msgid "Interrupt retrieval"
1148
-msgstr "Przerwij pobieranie"
1149
+#: src/OutputsPage.cxx:98
1150
+#, c-format
1151
+msgid "Output '%s' disabled"
1152
+msgstr "Wyjście '%s' wyłączone"
1153
 
1154
-#: src/screen_help.cxx:167
1155
-msgid "Download lyrics for currently playing song"
1156
-msgstr "Sćiagnij słowa dla obecnie odtwarzanej piosenki"
1157
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1158
+msgid "Outputs"
1159
+msgstr "Wyjścia"
1160
 
1161
-#: src/screen_help.cxx:168
1162
-#, fuzzy
1163
-msgid "Add or edit lyrics"
1164
-msgstr "Brak zapisanego tesktu piosenki"
1165
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1166
+msgid "Shuffled queue"
1167
+msgstr ""
1168
 
1169
-#: src/screen_help.cxx:169
1170
-msgid "Save lyrics"
1171
-msgstr "Zapisz tekst piosenku"
1172
+#: src/player_command.cxx:186
1173
+msgid "Cleared queue"
1174
+msgstr ""
1175
 
1176
-#: src/screen_help.cxx:170
1177
-msgid "Delete saved lyrics"
1178
-msgstr "Usuń zapisany tekst piosenki"
1179
+#. get path
1180
+#: src/QueuePage.cxx:307
1181
+msgid "Add"
1182
+msgstr "Dodaj"
1183
 
1184
-#: src/screen_help.cxx:177
1185
-msgid "Enable/disable output"
1186
-msgstr "Włącz/wyłącz wyjście"
1187
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1188
+msgid "Queue"
1189
+msgstr ""
1190
 
1191
-#: src/screen_help.cxx:184
1192
-msgid "Write a message"
1193
+#: src/QueuePage.cxx:380
1194
+#, c-format
1195
+msgid "Queue on %s"
1196
 msgstr ""
1197
 
1198
-#: src/screen_help.cxx:189
1199
-msgid "Keydef screen"
1200
-msgstr "Ekran definicji klawiszy"
1201
+#. query the user for a filename
1202
+#: src/save_playlist.cxx:85
1203
+msgid "Save queue as"
1204
+msgstr ""
1205
 
1206
-#: src/screen_help.cxx:191
1207
-msgid "Edit keydefs for selected command"
1208
-msgstr "Edytuj definicje klawiszy dla wybranego polecenia"
1209
+#: src/save_playlist.cxx:107
1210
+#, fuzzy, c-format
1211
+msgid "Replace %s?"
1212
+msgstr "Zamień %s [%s/%s] ? "
1213
 
1214
-#: src/screen_help.cxx:192
1215
-msgid "Remove selected keydef"
1216
-msgstr "Usuń wybraną definicję klawiszy"
1217
+#. success
1218
+#: src/save_playlist.cxx:128
1219
+#, c-format
1220
+msgid "Saved %s"
1221
+msgstr "Zapisano %s"
1222
+
1223
+#: src/screen_artist.cxx:186
1224
+#, c-format
1225
+msgid "All tracks of artist: %s"
1226
+msgstr "Wszystkie piosenki artysty: %s"
1227
 
1228
-#: src/screen_help.cxx:193
1229
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1230
+msgid "Album"
1231
+msgstr "Album"
1232
+
1233
+#: src/screen_artist.cxx:195
1234
+#, c-format
1235
+msgid "Tracks of no album of artist: %s"
1236
+msgstr "Ścieżki bez albumów lub artystów: %s"
1237
+
1238
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1239
+msgid "Artist"
1240
+msgstr "Artysta"
1241
+
1242
+#: src/screen_client.cxx:41
1243
 #, fuzzy
1244
-msgid "Add a keydef"
1245
-msgstr "Dodaj nowy klawisz"
1246
+msgid "Database update running"
1247
+msgstr "Aktualizacja bazy w toku..."
1248
 
1249
-#: src/screen_help.cxx:194
1250
-msgid "Go up a level"
1251
-msgstr "Idź poziom wyżej"
1252
+#: src/screen_client.cxx:48
1253
+#, c-format
1254
+msgid "Database update of %s started"
1255
+msgstr "Aktualizacja bazy %s rozpoczęta"
1256
 
1257
-#: src/screen_help.cxx:195
1258
-msgid "Apply and save changes"
1259
-msgstr "Zastosuj i zapisz zmiany"
1260
+#: src/screen_client.cxx:51
1261
+msgid "Database update started"
1262
+msgstr "Aktualizacja bazy rozpoczęta"
1263
 
1264
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1265
-msgid "Help"
1266
-msgstr "Pomoc"
1267
+#: src/screen.cxx:160
1268
+msgid "Repeat mode is on"
1269
+msgstr "Tryb powtarzania jest włączony"
1270
 
1271
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1272
-msgid "Error: Screen too small"
1273
-msgstr "Błąd: Ekran za mały"
1274
+#: src/screen.cxx:161
1275
+msgid "Repeat mode is off"
1276
+msgstr "Tryb powtarzania jest wyłączony"
1277
 
1278
-#: src/screen_keydef.cxx:141
1279
-msgid "You have new key bindings"
1280
-msgstr "Masz nowe wiązania klawiszy"
1281
+#: src/screen.cxx:165
1282
+msgid "Random mode is on"
1283
+msgstr "Tryb losowy jest włączony"
1284
 
1285
-#: src/screen_keydef.cxx:143
1286
-msgid "Keybindings unchanged."
1287
-msgstr "Wiązania klawiszy niezmienione."
1288
+#: src/screen.cxx:166
1289
+msgid "Random mode is off"
1290
+msgstr "Tryb losowy jest wyłączony"
1291
 
1292
-#: src/screen_keydef.cxx:153
1293
-#, c-format
1294
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1295
-msgstr "Błąd: Nie można stworzyć katalogu ~/.ncmpc -%s"
1296
+#. "single" mode means
1297
+#. that MPD will
1298
+#. automatically stop
1299
+#. after playing one
1300
+#. single song
1301
+#: src/screen.cxx:175
1302
+msgid "Single mode is on"
1303
+msgstr "Tryb pojedynczej piosenki jest włączony"
1304
+
1305
+#: src/screen.cxx:176
1306
+msgid "Single mode is off"
1307
+msgstr "Tryb pojedynczej piosenki jest wyłączony"
1308
+
1309
+#. "consume" mode means
1310
+#. that MPD removes each
1311
+#. song which has
1312
+#. finished playing
1313
+#: src/screen.cxx:184
1314
+msgid "Consume mode is on"
1315
+msgstr "Tryb pożerania jest włączony"
1316
 
1317
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1318
+#: src/screen.cxx:185
1319
+msgid "Consume mode is off"
1320
+msgstr "Tryb pożerania jest wyłączony"
1321
+
1322
+#: src/screen.cxx:188
1323
 #, c-format
1324
-msgid "Error: %s - %s"
1325
-msgstr "Błąd: %s - %s"
1326
+msgid "Crossfade %d seconds"
1327
+msgstr "Przenikaj %d sekund"
1328
+
1329
+#: src/screen.cxx:200
1330
+msgid "Database updated"
1331
+msgstr "Baza zaktualizowana"
1332
+
1333
+#: src/screen.cxx:250
1334
+msgid "Find mode: Wrapped"
1335
+msgstr "Tryb wyszukiwania: Zawinięty"
1336
+
1337
+#: src/screen.cxx:251
1338
+msgid "Find mode: Normal"
1339
+msgstr "Tryb wyszukiwania: Normalny"
1340
 
1341
-#: src/screen_keydef.cxx:171
1342
+#: src/screen.cxx:256
1343
+msgid "Auto center mode: On"
1344
+msgstr "Tryb automatycznego centrowania: Włączony"
1345
+
1346
+#: src/screen.cxx:257
1347
+msgid "Auto center mode: Off"
1348
+msgstr "Tryb automatycznego centrowania: Wyłączony"
1349
+
1350
+#: src/screen_find.cxx:31
1351
+msgid "Find"
1352
+msgstr "Znajdź"
1353
+
1354
+#: src/screen_find.cxx:32
1355
+msgid "Find backward"
1356
+msgstr "Znajdź wstecz"
1357
+
1358
+#: src/screen_find.cxx:33
1359
+msgid "Jump"
1360
+msgstr "Skocz"
1361
+
1362
+#: src/screen_find.cxx:79
1363
 #, c-format
1364
-msgid "Wrote %s"
1365
-msgstr "Zapisano %s"
1366
+msgid "Unable to find '%s'"
1367
+msgstr "Nie można znaleźć '%s'"
1368
 
1369
-#: src/screen_keydef.cxx:250
1370
+#: src/screen_keydef.cxx:161
1371
 msgid "Deleted"
1372
 msgstr "Usunięto"
1373
 
1374
-#: src/screen_keydef.cxx:265
1375
+#: src/screen_keydef.cxx:177
1376
 #, c-format
1377
 msgid "Enter new key for %s: "
1378
 msgstr "Podaj nowy skrót dla %s: "
1379
 
1380
-#: src/screen_keydef.cxx:276
1381
+#: src/screen_keydef.cxx:187
1382
 msgid "Ctrl-Space can't be used"
1383
 msgstr ""
1384
 
1385
-#: src/screen_keydef.cxx:282
1386
+#: src/screen_keydef.cxx:193
1387
 #, c-format
1388
 msgid "Error: key %s is already used for %s"
1389
 msgstr "Błąd: klawisz %s już jest używany do %s"
1390
 
1391
-#: src/screen_keydef.cxx:291
1392
+#: src/screen_keydef.cxx:202
1393
 #, c-format
1394
 msgid "Assigned %s to %s"
1395
 msgstr "Przypisano klawisz %s do %s"
1396
 
1397
-#: src/screen_keydef.cxx:317
1398
-msgid "===> Apply key bindings "
1399
-msgstr "===> Zastosuj wiązania klawiszy "
1400
-
1401
-#: src/screen_keydef.cxx:319
1402
-msgid "===> Apply & Save key bindings  "
1403
-msgstr "===> Zastosuj i Zapisz wiązania klawiszy "
1404
-
1405
-#: src/screen_keydef.cxx:347
1406
+#: src/screen_keydef.cxx:229
1407
 msgid "Add new key"
1408
 msgstr "Dodaj nowy klawisz"
1409
 
1410
-#: src/screen_keydef.cxx:410
1411
-msgid "Note: Did you forget to 'Apply' your changes?"
1412
-msgstr "Informacja: Zapomniałeś 'Zastosować' swoje zmiany?"
1413
-
1414
-#: src/screen_keydef.cxx:417
1415
-msgid "Edit key bindings"
1416
-msgstr "Edytuj wiązania klawiszy"
1417
-
1418
-#: src/screen_keydef.cxx:419
1419
+#: src/screen_keydef.cxx:251
1420
 #, c-format
1421
 msgid "Edit keys for %s"
1422
 msgstr "Edytuj klawisze dla %s"
1423
 
1424
-#. translators: no lyrics were found for the song
1425
-#: src/screen_lyrics.cxx:208
1426
-msgid "No lyrics"
1427
-msgstr "Brak tekstu piosenki"
1428
-
1429
-#: src/screen_lyrics.cxx:226
1430
-#, c-format
1431
-msgid "Lyrics timeout occurred after %d seconds"
1432
-msgstr ""
1433
-
1434
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1435
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1436
-msgid "Lyrics"
1437
-msgstr "Teskt piosenki"
1438
-
1439
-#. translators: this message is displayed
1440
-#. while data is retrieved
1441
-#: src/screen_lyrics.cxx:330
1442
-msgid "loading..."
1443
-msgstr "ładowanie..."
1444
-
1445
-#: src/screen_lyrics.cxx:361
1446
-msgid "Editor not configured"
1447
-msgstr ""
1448
-
1449
-#: src/screen_lyrics.cxx:367
1450
-msgid "Do you really want to start an editor and edit these lyrics?"
1451
-msgstr ""
1452
+#: src/screen_keydef.cxx:393
1453
+msgid "You have new key bindings"
1454
+msgstr "Masz nowe wiązania klawiszy"
1455
 
1456
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1457
-msgid "Can't start editor"
1458
-msgstr ""
1459
+#: src/screen_keydef.cxx:395
1460
+msgid "Keybindings unchanged."
1461
+msgstr "Wiązania klawiszy niezmienione."
1462
 
1463
-#: src/screen_lyrics.cxx:411
1464
-#, c-format
1465
-msgid "Editor exited unexpectedly (%d)"
1466
-msgstr ""
1467
+#: src/screen_keydef.cxx:405
1468
+#, fuzzy
1469
+msgid "Unable to write configuration"
1470
+msgstr "Niekompletna konfiguracja skrótów klawiszowych"
1471
 
1472
-#: src/screen_lyrics.cxx:414
1473
+#: src/screen_keydef.cxx:421
1474
 #, c-format
1475
-msgid "Editor exited unexpectedly (signal %d)"
1476
-msgstr ""
1477
-
1478
-#. lyrics for the song were saved on hard disk
1479
-#: src/screen_lyrics.cxx:436
1480
-msgid "Lyrics saved"
1481
-msgstr "Tekst piosenki zapisany"
1482
-
1483
-#: src/screen_lyrics.cxx:443
1484
-msgid "Lyrics deleted"
1485
-msgstr "Teskt piosenki usunięty"
1486
-
1487
-#: src/screen_lyrics.cxx:446
1488
-msgid "No saved lyrics"
1489
-msgstr "Brak zapisanego tesktu piosenki"
1490
+msgid "Wrote %s"
1491
+msgstr "Zapisano %s"
1492
 
1493
-#: src/screen_outputs.cxx:60
1494
-#, c-format
1495
-msgid "Output '%s' enabled"
1496
-msgstr "Wyjście '%s' włączone"
1497
+#: src/screen_keydef.cxx:433
1498
+msgid "===> Apply key bindings "
1499
+msgstr "===> Zastosuj wiązania klawiszy "
1500
 
1501
-#: src/screen_outputs.cxx:71
1502
-#, c-format
1503
-msgid "Output '%s' disabled"
1504
-msgstr "Wyjście '%s' wyłączone"
1505
+#: src/screen_keydef.cxx:435
1506
+msgid "===> Apply & Save key bindings  "
1507
+msgstr "===> Zastosuj i Zapisz wiązania klawiszy "
1508
 
1509
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1510
-msgid "Outputs"
1511
-msgstr "Wyjścia"
1512
+#: src/screen_keydef.cxx:472
1513
+msgid "Edit key bindings"
1514
+msgstr "Edytuj wiązania klawiszy"
1515
 
1516
-#. get path
1517
-#: src/screen_queue.cxx:274
1518
-msgid "Add"
1519
-msgstr "Dodaj"
1520
+#: src/screen_keydef.cxx:554
1521
+msgid "Note: Did you forget to 'Apply' your changes?"
1522
+msgstr "Informacja: Zapomniałeś 'Zastosować' swoje zmiany?"
1523
 
1524
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1525
-msgid "Queue"
1526
+#: src/screen_keydef.cxx:604
1527
+msgid "Keys"
1528
 msgstr ""
1529
 
1530
-#: src/screen_queue.cxx:384
1531
-#, c-format
1532
-msgid "Queue on %s"
1533
-msgstr ""
1534
+#: src/screen_utils.cxx:124
1535
+msgid "Password"
1536
+msgstr "Hasło"
1537
 
1538
-#: src/screen_search.cxx:48
1539
+#: src/SearchPage.cxx:51
1540
 msgid "artist"
1541
 msgstr "artysta"
1542
 
1543
-#: src/screen_search.cxx:49
1544
+#: src/SearchPage.cxx:52
1545
 msgid "album"
1546
 msgstr "album"
1547
 
1548
-#: src/screen_search.cxx:50
1549
+#: src/SearchPage.cxx:53
1550
 msgid "title"
1551
 msgstr "tutuł"
1552
 
1553
-#: src/screen_search.cxx:51
1554
+#: src/SearchPage.cxx:54
1555
 msgid "track"
1556
 msgstr "ściezka"
1557
 
1558
-#: src/screen_search.cxx:52
1559
+#: src/SearchPage.cxx:55
1560
 msgid "name"
1561
 msgstr "nazwa"
1562
 
1563
-#: src/screen_search.cxx:53
1564
+#: src/SearchPage.cxx:56
1565
 msgid "genre"
1566
 msgstr "rodzaj"
1567
 
1568
-#: src/screen_search.cxx:54
1569
+#: src/SearchPage.cxx:57
1570
 msgid "date"
1571
 msgstr "data"
1572
 
1573
-#: src/screen_search.cxx:55
1574
+#: src/SearchPage.cxx:58
1575
 msgid "composer"
1576
 msgstr "kompozytor"
1577
 
1578
-#: src/screen_search.cxx:56
1579
+#: src/SearchPage.cxx:59
1580
 msgid "performer"
1581
 msgstr "wykonawca"
1582
 
1583
-#: src/screen_search.cxx:57
1584
+#: src/SearchPage.cxx:60
1585
 msgid "comment"
1586
 msgstr "komentarz"
1587
 
1588
-#: src/screen_search.cxx:65
1589
+#: src/SearchPage.cxx:68
1590
 msgid "file"
1591
 msgstr "plik"
1592
 
1593
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1594
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1595
 msgid "Title"
1596
 msgstr "Tytuł"
1597
 
1598
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1599
-msgid "Artist"
1600
-msgstr "Artysta"
1601
-
1602
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1603
-msgid "Album"
1604
-msgstr "Album"
1605
-
1606
-#: src/screen_search.cxx:85
1607
+#: src/SearchPage.cxx:88
1608
 msgid "Filename"
1609
 msgstr "Nazwa pliku"
1610
 
1611
-#: src/screen_search.cxx:86
1612
+#: src/SearchPage.cxx:89
1613
 msgid "Artist + Title"
1614
 msgstr "Artysta + Tytuł"
1615
 
1616
-#: src/screen_search.cxx:244
1617
-#, c-format
1618
-msgid "No argument for search tag %s"
1619
-msgstr "Brak argumentu przy wyszukiwaniu znacznika %s"
1620
-
1621
-#: src/screen_search.cxx:253
1622
+#: src/SearchPage.cxx:270
1623
 #, c-format
1624
 msgid "Bad search tag %s"
1625
 msgstr "Nieprawidłowy wyszukiwany znacznik %s"
1626
 
1627
-#. if( pattern==nullptr )
1628
-#. search_new(screen, c);
1629
-#. else
1630
-#: src/screen_search.cxx:400
1631
-#, c-format
1632
-msgid "Press %s for a new search"
1633
-msgstr "Wciśnij %s by rozpocząć nowe wyszukiwanie"
1634
-
1635
-#: src/screen_search.cxx:427
1636
-#, c-format
1637
-msgid "Search: %s"
1638
-msgstr "Znajdź: %s"
1639
-
1640
-#: src/screen_search.cxx:430
1641
+#: src/SearchPage.cxx:284
1642
 #, c-format
1643
-msgid "Search: Results for %s [%s]"
1644
-msgstr "Znajdź: Wyniki dla %s [%s]"
1645
+msgid "No argument for search tag %s"
1646
+msgstr "Brak argumentu przy wyszukiwaniu znacznika %s"
1647
 
1648
-#: src/screen_search.cxx:434
1649
-#, c-format
1650
-msgid "Search: Press %s for a new search [%s]"
1651
-msgstr "Znajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]"
1652
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1653
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1654
+msgid "Search"
1655
+msgstr "Znajdź"
1656
 
1657
-#: src/screen_search.cxx:458
1658
+#: src/SearchPage.cxx:436
1659
 #, c-format
1660
 msgid "Search mode: %s"
1661
 msgstr "Tryb szukania: %s"
1662
 
1663
-#: src/screen_song.cxx:54
1664
+#: src/SongPage.cxx:67
1665
 msgid "Length"
1666
 msgstr "Długość"
1667
 
1668
-#: src/screen_song.cxx:55
1669
+#: src/SongPage.cxx:68
1670
 msgid "Position"
1671
 msgstr ""
1672
 
1673
-#: src/screen_song.cxx:56
1674
+#: src/SongPage.cxx:69
1675
 msgid "Composer"
1676
 msgstr "Kompozytor"
1677
 
1678
-#: src/screen_song.cxx:57
1679
+#: src/SongPage.cxx:70
1680
 msgid "Name"
1681
 msgstr "Nazwa"
1682
 
1683
-#: src/screen_song.cxx:58
1684
+#: src/SongPage.cxx:71
1685
 msgid "Disc"
1686
 msgstr "Dysk"
1687
 
1688
-#: src/screen_song.cxx:59
1689
+#: src/SongPage.cxx:72
1690
 msgid "Track"
1691
 msgstr "Ścieżka"
1692
 
1693
-#: src/screen_song.cxx:60
1694
+#: src/SongPage.cxx:73
1695
 msgid "Date"
1696
 msgstr "Data"
1697
 
1698
-#: src/screen_song.cxx:61
1699
+#: src/SongPage.cxx:74
1700
 msgid "Genre"
1701
 msgstr "Rodzaj"
1702
 
1703
-#: src/screen_song.cxx:62
1704
+#: src/SongPage.cxx:75
1705
 msgid "Comment"
1706
 msgstr "Komentarz"
1707
 
1708
-#: src/screen_song.cxx:63
1709
+#: src/SongPage.cxx:76
1710
 msgid "Path"
1711
 msgstr "Ścieżka"
1712
 
1713
-#: src/screen_song.cxx:64
1714
+#: src/SongPage.cxx:77
1715
 msgid "Bitrate"
1716
 msgstr "Przepływność bitowa"
1717
 
1718
-#: src/screen_song.cxx:65
1719
+#: src/SongPage.cxx:78
1720
 msgid "Format"
1721
 msgstr ""
1722
 
1723
-#: src/screen_song.cxx:82
1724
+#: src/SongPage.cxx:95
1725
 msgid "Number of artists"
1726
 msgstr "Ilość artystów"
1727
 
1728
-#: src/screen_song.cxx:83
1729
+#: src/SongPage.cxx:96
1730
 msgid "Number of albums"
1731
 msgstr "Ilość albumów"
1732
 
1733
-#: src/screen_song.cxx:84
1734
+#: src/SongPage.cxx:97
1735
 msgid "Number of songs"
1736
 msgstr "Ilość piosenek"
1737
 
1738
-#: src/screen_song.cxx:85
1739
+#: src/SongPage.cxx:98
1740
 msgid "Uptime"
1741
 msgstr ""
1742
 
1743
-#: src/screen_song.cxx:86
1744
+#: src/SongPage.cxx:99
1745
 msgid "Most recent db update"
1746
 msgstr "Ostatnia aktualizacja bazy"
1747
 
1748
-#: src/screen_song.cxx:87
1749
+#: src/SongPage.cxx:100
1750
 msgid "Playtime"
1751
 msgstr "Czas odtwarzania"
1752
 
1753
-#: src/screen_song.cxx:88
1754
+#: src/SongPage.cxx:101
1755
 msgid "DB playtime"
1756
 msgstr "czas odtwarzania w bazie"
1757
 
1758
-#: src/screen_song.cxx:173
1759
+#: src/SongPage.cxx:204
1760
 msgid "Song viewer"
1761
 msgstr "Przeglądarka piosenek"
1762
 
1763
-#: src/screen_song.cxx:337
1764
+#: src/SongPage.cxx:370
1765
 msgid "MPD statistics"
1766
 msgstr "statystyki MPD"
1767
 
1768
-#: src/screen_song.cxx:427
1769
+#: src/SongPage.cxx:455
1770
 msgid "Selected song"
1771
 msgstr "Wybrana piosenka"
1772
 
1773
-#: src/screen_song.cxx:437
1774
+#: src/SongPage.cxx:465
1775
 msgid "Currently playing song"
1776
 msgstr "Obecnie odtwarzana piosenka"
1777
 
1778
-#: src/screen_song.cxx:442
1779
+#: src/SongPage.cxx:470
1780
 #, c-format
1781
 msgid "%d kbps"
1782
 msgstr "%d kbps"
1783
 
1784
-#. NOTE: if one day a translator decides to use a multi-byte character
1785
-#. for one of the yes/no keys, we'll have to parse it properly
1786
-#: src/screen_utils.cxx:80
1787
-#, fuzzy, c-format
1788
-msgid "%s [%s/%s] "
1789
-msgstr "Zamień %s [%s/%s] ? "
1790
-
1791
-#: src/screen_utils.cxx:121
1792
-msgid "Password"
1793
-msgstr "Hasło"
1794
+#: src/SongPage.cxx:554
1795
+msgid "Song"
1796
+msgstr ""
1797
 
1798
-#: src/status_bar.cxx:121
1799
+#: src/StatusBar.cxx:104
1800
 msgid "Playing:"
1801
 msgstr "Odtwarzanie:"
1802
 
1803
-#: src/status_bar.cxx:124
1804
+#: src/StatusBar.cxx:108
1805
 msgid "[Paused]"
1806
 msgstr "[Pauza]"
1807
 
1808
-#: src/title_bar.cxx:99
1809
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1810
+#, fuzzy
1811
+msgid "Unknown color"
1812
+msgstr "Nieznane polecenie"
1813
+
1814
+#: src/Styles.cxx:333
1815
+#, fuzzy
1816
+msgid "Unknown color field"
1817
+msgstr "Ostrzeżenie: Nieznany kolor pola - %s\n"
1818
+
1819
+#: src/Styles.cxx:375
1820
+msgid "Terminal lacks color capabilities"
1821
+msgstr "Terminal nie obsługuje kolorów"
1822
+
1823
+#: src/time_format.cxx:44
1824
+msgid "year"
1825
+msgstr ""
1826
+
1827
+#: src/time_format.cxx:46
1828
+msgid "years"
1829
+msgstr ""
1830
+
1831
+#: src/time_format.cxx:54
1832
+msgid "week"
1833
+msgstr ""
1834
+
1835
+#: src/time_format.cxx:57
1836
+msgid "weeks"
1837
+msgstr ""
1838
+
1839
+#: src/time_format.cxx:65
1840
+msgid "day"
1841
+msgstr ""
1842
+
1843
+#: src/time_format.cxx:68
1844
+msgid "days"
1845
+msgstr ""
1846
+
1847
+#: src/TitleBar.cxx:100
1848
 msgid "Volume n/a"
1849
 msgstr "Głośność: b/d"
1850
 
1851
-#: src/title_bar.cxx:101
1852
+#: src/TitleBar.cxx:102
1853
 #, c-format
1854
 msgid "Volume %d%%"
1855
 msgstr "Głóśność %d%%"
1856
 
1857
+#, fuzzy
1858
+#~ msgid "Add url/file to queue"
1859
+#~ msgstr "Dodaj url/plik do playlisty"
1860
+
1861
+#~ msgid "Move song up"
1862
+#~ msgstr "Przesuń piosenkę w gorę"
1863
+
1864
+#~ msgid "Move song down"
1865
+#~ msgstr "Przesuń piosenkę w dół"
1866
+
1867
+#~ msgid "Press %s for a new search"
1868
+#~ msgstr "Wciśnij %s by rozpocząć nowe wyszukiwanie"
1869
+
1870
+#~ msgid "Search: %s"
1871
+#~ msgstr "Znajdź: %s"
1872
+
1873
+#~ msgid "Search: Results for %s [%s]"
1874
+#~ msgstr "Znajdź: Wyniki dla %s [%s]"
1875
+
1876
+#~ msgid "Search: Press %s for a new search [%s]"
1877
+#~ msgstr "Znajdź: Wciśnij %s by rozpocząć nowe wyszkuwanie [%s]"
1878
+
1879
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1880
+#~ msgstr "Łączenie z %s... [Wciśnij %s by anulować]"
1881
+
1882
+#~ msgid "press %s for the key editor"
1883
+#~ msgstr "wciśnij %s by odpalić edytor klawiszy"
1884
+
1885
+#~ msgid "Album: %s - %s"
1886
+#~ msgstr "Albumy: %s - %s"
1887
+
1888
+#~ msgid "Adding album %s..."
1889
+#~ msgstr "Dodawanie albumu %s..."
1890
+
1891
+#~ msgid "Adding %s..."
1892
+#~ msgstr "Dodawanie %s..."
1893
+
1894
+#~ msgid "Error: Screen too small"
1895
+#~ msgstr "Błąd: Ekran za mały"
1896
+
1897
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1898
+#~ msgstr "Błąd: Nie można stworzyć katalogu ~/.ncmpc -%s"
1899
+
1900
+#~ msgid "Error: %s - %s"
1901
+#~ msgstr "Błąd: %s - %s"
1902
+
1903
+#, fuzzy
1904
+#~ msgid "%s [%s/%s] "
1905
+#~ msgstr "Zamień %s [%s/%s] ? "
1906
+
1907
 #~ msgid "Delete playlist %s [%s/%s] ? "
1908
 #~ msgstr "Usuń listę odtwarzania %s [%s/%s] ? "
1909
 
1910
 #~ msgid "Warning: Unknown color - %s\n"
1911
 #~ msgstr "Ostrzeżenie: Nieznany kolor - %s\n"
1912
 
1913
-#~ msgid "Connected to %s"
1914
-#~ msgstr "Połączony z %s"
1915
-
1916
 #~ msgid "Shuffled playlist"
1917
 #~ msgstr "Przetasowano listę odtwarzania"
1918
 
1919
ncmpc-0.30.tar.xz/po/pt_BR.po -> ncmpc-0.32.tar.xz/po/pt_BR.po Changed
1936
 
1
@@ -2,7 +2,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-12-19 01:05+0000\n"
8
 "Last-Translator: Jamerson Albuquerque Tiossi <jamersontiossi@yahoo.com.br>\n"
9
 "Language-Team: \n"
10
@@ -16,423 +16,358 @@
11
 "X-Poedit-Language: Portuguese\n"
12
 "X-Poedit-SourceCharset: utf-8\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Comando desconhecido"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Todas as faixas"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Aviso: Campo de cor desconhecido - %s\n"
27
+msgid "Albums"
28
+msgstr "Álbum"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminal não tem suporte para mudar cores"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Álbuns do artista: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminal não tem capacidade para trabalhar com cores"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Adicionando '%s' á Lista de Reprodução"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Todos os artistas"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Tecla %s definida para %s e %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Tela de configuração de teclas"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Sair"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Mover cursor para cima"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Mover cursor para baixo"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Mover cursor para o topo da tela"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Mover cursor para o meio da tela"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Mover cursor para o final da tela"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Mover cursor para o topo da lista"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Mover cursor para o final da lista"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Sobe uma página"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Desce uma página"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Seleção de Intervalo"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Descer uma linha"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Subir uma linha"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Subir meia tela"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Descer meia tela"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Selecionar faixa atualmente em reprodução"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Tela de Ajuda"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Tela de definição de teclas"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Tela de Navegação"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Reproduzir/Adentrar diretório"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pause"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Parar"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Cortar"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Próxima faixa"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Faixa anterior"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Correr para frente"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Correr para trás"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Aumentar volume"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Abaixar volume"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Selecionar/De-selecionar trilha na Lista de Reprodução"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Selecionar todos os itens listados"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Deletar faixa da lista de reprodução"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Liga/Desliga modo de repetição"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Liga/Desliga modo aleatório"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Liga/Desliga modo de única reprodução"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Liga/Desliga modo de deleção de faixa reproduzida"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Liga/Desliga inter-mixagem"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Iniciar a atualização do banco de dados de faixas"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Adicionar URL/arquivo à lista de reprodução"
286
+msgid "Append song to queue"
287
+msgstr "Adicionar trilha à Lista de Reprodução"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Ir para raiz"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Ir para diretório pai"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Localizar musica no navegador"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Mover item para cima"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Mover item para baixo"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Redesenhar tela"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Liga/Desliga modo de procura"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Liga/Desliga modo de centralização automática"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Próxima tela"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Tela anterior"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Troca para a tela mais recente"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Pesquisa para frente"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Pesquisa para a frente - próximo"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Pesquisa para trás"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Pesquisa para trás - anterior"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Pular para"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Tela de artista"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Tela de pesquisa"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Mudar modo de pesquisa"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Ver a trilha selecionada e a em atual reprodução"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Tela de Letra de Música"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Interromper ação"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Atualizar letra de música"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Tela de Saídas"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Próxima tela"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Não-definido"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Espaço"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Delete"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Cima"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Baixo"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Esquerda"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Direita"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Tecla %s definida para %s e %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Erro"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Definição de tecla de atalho malformada"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Comando desconhecido"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Configuração de teclas de atalho incompleta"
545
 
546
@@ -440,820 +375,886 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Tipo de visualização de tempo ruim"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Falta '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Nome de cor ruim"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Definição de cor incompleta"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Número inválido"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Definição de cor malformada"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Nome de tela desconhecido"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Modo de pesquisa inválido"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Modo de pesquisa desconhecido"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Parâmetro de configuração desconhecido"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "y (sim)"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminal não tem suporte para mudar cores"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n (não)"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Deletar este item não é possível"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Seleção de intervalo desabilitada"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Deletar Lista de Reprodução"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Seleção de intervalo habilitada"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Abortado"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Conectando a %s... [Pressione %s para abortar]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Lista de Reprodução deletada"
647
 
648
-#: src/Main.cxx:182
649
-#, fuzzy, c-format
650
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
651
-msgstr "Erro: Versão do MPD %d.%d.%d é muito antiga (necessária %s)"
652
+#. translators: caption of the browser screen
653
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
654
+msgid "Browse"
655
+msgstr "Navegar"
656
 
657
-#: src/Main.cxx:317
658
-#, c-format
659
-msgid "press %s for the key editor"
660
-msgstr "press %s para o editor de teclas"
661
+#: src/FileListPage.cxx:121
662
+#, fuzzy, c-format
663
+msgid "Loading playlist '%s'"
664
+msgstr "Carregando Lista de Reprodução %s..."
665
 
666
-#. To translators: these credits are shown
667
-#. when ncmpc is started with "--version"
668
-#: src/options.cxx:209 src/options.cxx:212
669
-msgid "translator-credits"
670
-msgstr ""
671
-"Traduzido por Carlos Eduardo C. B. Shinagawa <cadu.coelho at gmail.com>\n"
672
-"\n"
673
-"Launchpad Contributions:\n"
674
-"  Cadu https://launchpad.net/~cadu-coelho\n"
675
-"  Guilherme Lindner https://launchpad.net/~gui666\n"
676
-"  Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi\n"
677
-"  Max Kellermann https://launchpad.net/~max-duempel\n"
678
-"  Osni Leandro https://launchpad.net/~osni"
679
+#: src/HelpPage.cxx:60
680
+msgid "Movement"
681
+msgstr "Movimento"
682
 
683
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
684
-msgid "Shuffled queue"
685
-msgstr ""
686
+#: src/HelpPage.cxx:105
687
+msgid "Global"
688
+msgstr "Global"
689
 
690
-#: src/player_command.cxx:184
691
-msgid "Cleared queue"
692
-msgstr ""
693
+#: src/HelpPage.cxx:142
694
+msgid "Play"
695
+msgstr "Reproduzir"
696
 
697
-#. query the user for a filename
698
-#: src/save_playlist.cxx:109
699
-msgid "Save queue as"
700
-msgstr ""
701
+#: src/HelpPage.cxx:149
702
+msgid "Center"
703
+msgstr "Centralizar"
704
 
705
-#: src/save_playlist.cxx:140
706
-#, fuzzy, c-format
707
-msgid "Replace %s?"
708
-msgstr "Substituir %s [%s/%s] ? "
709
+#: src/HelpPage.cxx:157
710
+msgid "Enter directory/Select and play song"
711
+msgstr "Adentrar diretório/Selecionar e reproduzir trilha"
712
 
713
-#. translators: a dialog was aborted by the user
714
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
715
-#: src/screen_lyrics.cxx:370
716
-msgid "Aborted"
717
-msgstr "Abortado"
718
+#: src/HelpPage.cxx:161
719
+msgid "Delete playlist"
720
+msgstr "Deletar Lista de Reprodução"
721
 
722
-#. success
723
-#: src/save_playlist.cxx:171
724
-#, c-format
725
-msgid "Saved %s"
726
-msgstr "%s salvo"
727
+#: src/HelpPage.cxx:171
728
+#, fuzzy
729
+msgid "New search"
730
+msgstr "Pesquisa"
731
 
732
-#: src/screen.cxx:154
733
-msgid "Repeat mode is on"
734
-msgstr "Modo de Repetição está ligado"
735
+#: src/HelpPage.cxx:172
736
+msgid "Select and play"
737
+msgstr "Selecionar e reproduzir"
738
 
739
-#: src/screen.cxx:155
740
-msgid "Repeat mode is off"
741
-msgstr "Modo de Repetição está desligado"
742
+#: src/HelpPage.cxx:183
743
+msgid "View Lyrics"
744
+msgstr "Ver Letra de Música"
745
 
746
-#: src/screen.cxx:159
747
-msgid "Random mode is on"
748
-msgstr "Modo Aleatório está ligado"
749
+#: src/HelpPage.cxx:184
750
+msgid "(Re)load lyrics"
751
+msgstr "(Re)Carregar letra de música"
752
 
753
-#: src/screen.cxx:160
754
-msgid "Random mode is off"
755
-msgstr "Modo Aleatório está desligado"
756
+#. to translators: this hotkey aborts the retrieval of lyrics
757
+#. from the server
758
+#: src/HelpPage.cxx:187
759
+msgid "Interrupt retrieval"
760
+msgstr "Interromper busca"
761
 
762
-#. "single" mode means
763
-#. that MPD will
764
-#. automatically stop
765
-#. after playing one
766
-#. single song
767
-#: src/screen.cxx:169
768
-msgid "Single mode is on"
769
-msgstr "Modo de Faixa Única está ligado"
770
+#: src/HelpPage.cxx:188
771
+msgid "Download lyrics for currently playing song"
772
+msgstr "Baixar letra de música da faixa em reprodução"
773
 
774
-#: src/screen.cxx:170
775
-msgid "Single mode is off"
776
-msgstr "Modo de Faixa Única está desligado"
777
+#: src/HelpPage.cxx:189
778
+#, fuzzy
779
+msgid "Add or edit lyrics"
780
+msgstr "Sem letras salvas"
781
 
782
-#. "consume" mode means
783
-#. that MPD removes each
784
-#. song which has
785
-#. finished playing
786
-#: src/screen.cxx:178
787
-msgid "Consume mode is on"
788
-msgstr "Modo de Deleção de Faixa Reproduzida está ligado"
789
+#: src/HelpPage.cxx:190
790
+msgid "Save lyrics"
791
+msgstr "Salvar letra de música."
792
 
793
-#: src/screen.cxx:179
794
-msgid "Consume mode is off"
795
-msgstr "Modo de Deleção de Faixa Reproduzida está desligado"
796
+#: src/HelpPage.cxx:191
797
+msgid "Delete saved lyrics"
798
+msgstr "Apagar letras salvas"
799
 
800
-#: src/screen.cxx:182
801
-#, c-format
802
-msgid "Crossfade %d seconds"
803
-msgstr "Inter-mixagem de %d segundos"
804
+#: src/HelpPage.cxx:198
805
+msgid "Enable/disable output"
806
+msgstr "Habilitar/desabilitar saída"
807
 
808
-#: src/screen.cxx:194
809
-msgid "Database updated"
810
-msgstr "Banco de Dados atualizado"
811
+#: src/HelpPage.cxx:205
812
+msgid "Write a message"
813
+msgstr ""
814
 
815
-#: src/screen.cxx:226
816
-msgid "Find mode: Wrapped"
817
-msgstr "Modo de Busca: Envolvido"
818
+#: src/HelpPage.cxx:210
819
+msgid "Keydef screen"
820
+msgstr "Tela de definição de teclas"
821
 
822
-#: src/screen.cxx:227
823
-msgid "Find mode: Normal"
824
-msgstr "Modo de Busca: Normal"
825
+#: src/HelpPage.cxx:212
826
+msgid "Edit keydefs for selected command"
827
+msgstr "Editar a definição de teclas para o comando selecionado"
828
 
829
-#: src/screen.cxx:232
830
-msgid "Auto center mode: On"
831
-msgstr "Modo de Auto-Centralização: Ligado"
832
+#: src/HelpPage.cxx:213
833
+msgid "Remove selected keydef"
834
+msgstr "Remover keydef selecionado"
835
 
836
-#: src/screen.cxx:233
837
-msgid "Auto center mode: Off"
838
-msgstr "Modo de Auto-Centralização: Desligado"
839
+#: src/HelpPage.cxx:214
840
+#, fuzzy
841
+msgid "Add a keydef"
842
+msgstr "Adicionar nova tecla"
843
 
844
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
845
-msgid "All tracks"
846
-msgstr "Todas as faixas"
847
+#: src/HelpPage.cxx:215
848
+msgid "Go up a level"
849
+msgstr "Subir um nível"
850
 
851
-#: src/screen_artist.cxx:384
852
-msgid "All artists"
853
-msgstr "Todos os artistas"
854
+#: src/HelpPage.cxx:216
855
+msgid "Apply and save changes"
856
+msgstr "Aplicar mudanças e salvar"
857
 
858
-#: src/screen_artist.cxx:389
859
-#, c-format
860
-msgid "Albums of artist: %s"
861
-msgstr "Álbuns do artista: %s"
862
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
863
+msgid "Help"
864
+msgstr "Ajuda"
865
 
866
-#: src/screen_artist.cxx:398
867
-#, c-format
868
-msgid "All tracks of artist: %s"
869
-msgstr "Todas as faixas do artista: %s"
870
+#: src/i18n.h:43
871
+msgid "y"
872
+msgstr "y (sim)"
873
 
874
-#: src/screen_artist.cxx:401
875
-#, c-format
876
-msgid "Album: %s - %s"
877
-msgstr "Álbum: %s - %s"
878
+#: src/i18n.h:44
879
+msgid "n"
880
+msgstr "n (não)"
881
 
882
-#: src/screen_artist.cxx:405
883
-#, c-format
884
-msgid "Tracks of no album of artist: %s"
885
-msgstr "Faixas sem álbuns do artista: %s"
886
+#: src/KeyName.cxx:31
887
+msgid "Undefined"
888
+msgstr "Não-definido"
889
 
890
-#: src/screen_artist.cxx:450
891
-#, c-format
892
-msgid "Adding album %s..."
893
-msgstr "Adicionando álbum %s..."
894
+#: src/KeyName.cxx:33
895
+msgid "Space"
896
+msgstr "Espaço"
897
+
898
+#: src/KeyName.cxx:35
899
+msgid "Enter"
900
+msgstr "Enter"
901
+
902
+#: src/KeyName.cxx:37
903
+msgid "Backspace"
904
+msgstr "Backspace"
905
+
906
+#: src/KeyName.cxx:39
907
+msgid "Delete"
908
+msgstr "Delete"
909
+
910
+#: src/KeyName.cxx:41
911
+msgid "Up"
912
+msgstr "Cima"
913
+
914
+#: src/KeyName.cxx:43
915
+msgid "Down"
916
+msgstr "Baixo"
917
+
918
+#: src/KeyName.cxx:45
919
+msgid "Left"
920
+msgstr "Esquerda"
921
+
922
+#: src/KeyName.cxx:47
923
+msgid "Right"
924
+msgstr "Direita"
925
+
926
+#: src/KeyName.cxx:49
927
+msgid "Home"
928
+msgstr "Home"
929
+
930
+#: src/KeyName.cxx:51
931
+msgid "End"
932
+msgstr "End"
933
+
934
+#: src/KeyName.cxx:53
935
+msgid "PageDown"
936
+msgstr "PageDown"
937
+
938
+#: src/KeyName.cxx:55
939
+msgid "PageUp"
940
+msgstr "PageUp"
941
 
942
-#: src/screen_artist.cxx:452
943
+#: src/KeyName.cxx:57
944
+msgid "Tab"
945
+msgstr "Tab"
946
+
947
+#: src/KeyName.cxx:59
948
+msgid "Shift+Tab"
949
+msgstr "Shift+Tab"
950
+
951
+#: src/KeyName.cxx:61
952
+msgid "Esc"
953
+msgstr "Esc"
954
+
955
+#: src/KeyName.cxx:63
956
+msgid "Insert"
957
+msgstr "Insert"
958
+
959
+#: src/KeyName.cxx:71
960
 #, c-format
961
-msgid "Adding %s..."
962
-msgstr "Adicionando %s..."
963
+msgid "Ctrl-%c"
964
+msgstr ""
965
 
966
-#: src/screen_browser.cxx:122
967
+#: src/KeyName.cxx:73
968
 #, c-format
969
-msgid "Loading playlist %s..."
970
-msgstr "Carregando Lista de Reprodução %s..."
971
+msgid "Alt-%c"
972
+msgstr ""
973
 
974
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
975
-#: src/screen_browser.cxx:279
976
-#, fuzzy, c-format
977
-msgid "Adding '%s' to queue"
978
-msgstr "Adicionando '%s' á Lista de Reprodução"
979
+#: src/ListWindow.cxx:491
980
+msgid "Range selection disabled"
981
+msgstr "Seleção de intervalo desabilitada"
982
+
983
+#: src/ListWindow.cxx:496
984
+msgid "Range selection enabled"
985
+msgstr "Seleção de intervalo habilitada"
986
+
987
+#. translators: no lyrics were found for the song
988
+#: src/LyricsPage.cxx:236
989
+msgid "No lyrics"
990
+msgstr "Sem letra de música"
991
 
992
-#: src/screen_chat.cxx:59
993
+#: src/LyricsPage.cxx:254
994
 #, c-format
995
-msgid ""
996
-"connected to MPD %u.%u.%u (you need at least \n"
997
-"version 0.17.0 to use the chat feature)"
998
+msgid "Lyrics timeout occurred after %d seconds"
999
 msgstr ""
1000
 
1001
-#: src/screen_chat.cxx:177
1002
-msgid "Your message"
1003
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1004
+#: src/LyricsPage.cxx:490
1005
+msgid "Lyrics"
1006
+msgstr "Letra de Música"
1007
+
1008
+#. translators: this message is displayed
1009
+#. while data is retrieved
1010
+#: src/LyricsPage.cxx:340
1011
+msgid "loading..."
1012
+msgstr "carregando..."
1013
+
1014
+#: src/LyricsPage.cxx:361
1015
+msgid "Editor not configured"
1016
 msgstr ""
1017
 
1018
-#: src/screen_chat.cxx:186
1019
-msgid "Message could not be sent"
1020
+#: src/LyricsPage.cxx:368
1021
+msgid "Do you really want to start an editor and edit these lyrics?"
1022
 msgstr ""
1023
 
1024
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1025
-msgid "Chat"
1026
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1027
+msgid "Can't start editor"
1028
 msgstr ""
1029
 
1030
-#: src/screen_client.cxx:41
1031
-msgid "Database update running..."
1032
-msgstr "Atualização de Banco de Dados em progresso..."
1033
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1034
+msgid "Editor exited unexpectedly"
1035
+msgstr ""
1036
 
1037
-#: src/screen_client.cxx:49
1038
-#, c-format
1039
-msgid "Database update of %s started"
1040
-msgstr "Atualização do Banco de Dados %s começou"
1041
+#. lyrics for the song were saved on hard disk
1042
+#: src/LyricsPage.cxx:439
1043
+msgid "Lyrics saved"
1044
+msgstr "Letra de Música salva"
1045
 
1046
-#: src/screen_client.cxx:52
1047
-msgid "Database update started"
1048
-msgstr "Atualização de Banco de Dados iniciada"
1049
+#: src/LyricsPage.cxx:445
1050
+msgid "Lyrics deleted"
1051
+msgstr "Letras apagadas"
1052
 
1053
-#. translators: the "delete" command is only possible
1054
-#. for playlists; the user attempted to delete a song
1055
-#. or a directory or something else
1056
-#: src/screen_file.cxx:200
1057
-msgid "Deleting this item is not possible"
1058
-msgstr "Deletar este item não é possível"
1059
+#: src/LyricsPage.cxx:446
1060
+msgid "No saved lyrics"
1061
+msgstr "Sem letras salvas"
1062
 
1063
-#: src/screen_file.cxx:207
1064
+#: src/Main.cxx:167
1065
 #, fuzzy, c-format
1066
-msgid "Delete playlist %s?"
1067
-msgstr "Deletar Lista de Reprodução"
1068
+msgid "Connecting to %s"
1069
+msgstr "Conectado à %s"
1070
 
1071
-#. translators: MPD deleted the playlist, as requested by the
1072
-#. user
1073
-#: src/screen_file.cxx:227
1074
-msgid "Playlist deleted"
1075
-msgstr "Lista de Reprodução deletada"
1076
-
1077
-#. translators: caption of the browser screen
1078
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1079
-msgid "Browse"
1080
-msgstr "Navegar"
1081
-
1082
-#: src/screen_find.cxx:29
1083
-msgid "Find"
1084
-msgstr "Procurar"
1085
+#: src/Main.cxx:187
1086
+#, fuzzy, c-format
1087
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1088
+msgstr "Erro: Versão do MPD %d.%d.%d é muito antiga (necessária %s)"
1089
 
1090
-#: src/screen_find.cxx:30
1091
-msgid "Find backward"
1092
-msgstr "Procurar para trás"
1093
+#. To translators: these credits are shown
1094
+#. when ncmpc is started with "--version"
1095
+#: src/options.cxx:213 src/options.cxx:216
1096
+msgid "translator-credits"
1097
+msgstr ""
1098
+"Traduzido por Carlos Eduardo C. B. Shinagawa <cadu.coelho at gmail.com>\n"
1099
+"\n"
1100
+"Launchpad Contributions:\n"
1101
+"  Cadu https://launchpad.net/~cadu-coelho\n"
1102
+"  Guilherme Lindner https://launchpad.net/~gui666\n"
1103
+"  Jamerson Albuquerque Tiossi https://launchpad.net/~tiossi\n"
1104
+"  Max Kellermann https://launchpad.net/~max-duempel\n"
1105
+"  Osni Leandro https://launchpad.net/~osni"
1106
 
1107
-#: src/screen_find.cxx:31
1108
-msgid "Jump"
1109
-msgstr "Pular"
1110
+#: src/OutputsPage.cxx:87
1111
+#, c-format
1112
+msgid "Output '%s' enabled"
1113
+msgstr "Saída '%s' habilitada"
1114
 
1115
-#: src/screen_find.cxx:82
1116
+#: src/OutputsPage.cxx:98
1117
 #, c-format
1118
-msgid "Unable to find '%s'"
1119
-msgstr "'%s' não pôde ser encontrado"
1120
+msgid "Output '%s' disabled"
1121
+msgstr "Saída '%s' desabilitada"
1122
 
1123
-#: src/screen_help.cxx:39
1124
-msgid "Movement"
1125
-msgstr "Movimento"
1126
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1127
+msgid "Outputs"
1128
+msgstr "Saídas"
1129
 
1130
-#: src/screen_help.cxx:84
1131
-msgid "Global"
1132
-msgstr "Global"
1133
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1134
+msgid "Shuffled queue"
1135
+msgstr ""
1136
 
1137
-#: src/screen_help.cxx:121
1138
-msgid "Play"
1139
-msgstr "Reproduzir"
1140
+#: src/player_command.cxx:186
1141
+msgid "Cleared queue"
1142
+msgstr ""
1143
 
1144
-#: src/screen_help.cxx:124
1145
-msgid "Move song up"
1146
-msgstr "Mover trilha para cima"
1147
+#. get path
1148
+#: src/QueuePage.cxx:307
1149
+msgid "Add"
1150
+msgstr "Adicionar"
1151
 
1152
-#: src/screen_help.cxx:125
1153
-msgid "Move song down"
1154
-msgstr "Mover faixa para baixo"
1155
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1156
+msgid "Queue"
1157
+msgstr ""
1158
 
1159
-#: src/screen_help.cxx:128
1160
-msgid "Center"
1161
-msgstr "Centralizar"
1162
+#: src/QueuePage.cxx:380
1163
+#, c-format
1164
+msgid "Queue on %s"
1165
+msgstr ""
1166
 
1167
-#: src/screen_help.cxx:136
1168
-msgid "Enter directory/Select and play song"
1169
-msgstr "Adentrar diretório/Selecionar e reproduzir trilha"
1170
+#. query the user for a filename
1171
+#: src/save_playlist.cxx:85
1172
+msgid "Save queue as"
1173
+msgstr ""
1174
 
1175
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1176
-#, fuzzy
1177
-msgid "Append song to queue"
1178
-msgstr "Adicionar trilha à Lista de Reprodução"
1179
+#: src/save_playlist.cxx:107
1180
+#, fuzzy, c-format
1181
+msgid "Replace %s?"
1182
+msgstr "Substituir %s [%s/%s] ? "
1183
 
1184
-#: src/screen_help.cxx:140
1185
-msgid "Delete playlist"
1186
-msgstr "Deletar Lista de Reprodução"
1187
+#. success
1188
+#: src/save_playlist.cxx:128
1189
+#, c-format
1190
+msgid "Saved %s"
1191
+msgstr "%s salvo"
1192
 
1193
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1194
-msgid "Search"
1195
-msgstr "Pesquisa"
1196
+#: src/screen_artist.cxx:186
1197
+#, c-format
1198
+msgid "All tracks of artist: %s"
1199
+msgstr "Todas as faixas do artista: %s"
1200
 
1201
-#: src/screen_help.cxx:151
1202
-msgid "Select and play"
1203
-msgstr "Selecionar e reproduzir"
1204
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1205
+msgid "Album"
1206
+msgstr "Álbum"
1207
 
1208
-#: src/screen_help.cxx:162
1209
-msgid "View Lyrics"
1210
-msgstr "Ver Letra de Música"
1211
+#: src/screen_artist.cxx:195
1212
+#, c-format
1213
+msgid "Tracks of no album of artist: %s"
1214
+msgstr "Faixas sem álbuns do artista: %s"
1215
 
1216
-#: src/screen_help.cxx:163
1217
-msgid "(Re)load lyrics"
1218
-msgstr "(Re)Carregar letra de música"
1219
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1220
+msgid "Artist"
1221
+msgstr "Artista"
1222
 
1223
-#. to translators: this hotkey aborts the retrieval of lyrics
1224
-#. from the server
1225
-#: src/screen_help.cxx:166
1226
-msgid "Interrupt retrieval"
1227
-msgstr "Interromper busca"
1228
+#: src/screen_client.cxx:41
1229
+#, fuzzy
1230
+msgid "Database update running"
1231
+msgstr "Atualização de Banco de Dados em progresso..."
1232
 
1233
-#: src/screen_help.cxx:167
1234
-msgid "Download lyrics for currently playing song"
1235
-msgstr "Baixar letra de música da faixa em reprodução"
1236
+#: src/screen_client.cxx:48
1237
+#, c-format
1238
+msgid "Database update of %s started"
1239
+msgstr "Atualização do Banco de Dados %s começou"
1240
 
1241
-#: src/screen_help.cxx:168
1242
-#, fuzzy
1243
-msgid "Add or edit lyrics"
1244
-msgstr "Sem letras salvas"
1245
+#: src/screen_client.cxx:51
1246
+msgid "Database update started"
1247
+msgstr "Atualização de Banco de Dados iniciada"
1248
 
1249
-#: src/screen_help.cxx:169
1250
-msgid "Save lyrics"
1251
-msgstr "Salvar letra de música."
1252
+#: src/screen.cxx:160
1253
+msgid "Repeat mode is on"
1254
+msgstr "Modo de Repetição está ligado"
1255
 
1256
-#: src/screen_help.cxx:170
1257
-msgid "Delete saved lyrics"
1258
-msgstr "Apagar letras salvas"
1259
+#: src/screen.cxx:161
1260
+msgid "Repeat mode is off"
1261
+msgstr "Modo de Repetição está desligado"
1262
 
1263
-#: src/screen_help.cxx:177
1264
-msgid "Enable/disable output"
1265
-msgstr "Habilitar/desabilitar saída"
1266
+#: src/screen.cxx:165
1267
+msgid "Random mode is on"
1268
+msgstr "Modo Aleatório está ligado"
1269
 
1270
-#: src/screen_help.cxx:184
1271
-msgid "Write a message"
1272
-msgstr ""
1273
+#: src/screen.cxx:166
1274
+msgid "Random mode is off"
1275
+msgstr "Modo Aleatório está desligado"
1276
 
1277
-#: src/screen_help.cxx:189
1278
-msgid "Keydef screen"
1279
-msgstr "Tela de definição de teclas"
1280
+#. "single" mode means
1281
+#. that MPD will
1282
+#. automatically stop
1283
+#. after playing one
1284
+#. single song
1285
+#: src/screen.cxx:175
1286
+msgid "Single mode is on"
1287
+msgstr "Modo de Faixa Única está ligado"
1288
 
1289
-#: src/screen_help.cxx:191
1290
-msgid "Edit keydefs for selected command"
1291
-msgstr "Editar a definição de teclas para o comando selecionado"
1292
+#: src/screen.cxx:176
1293
+msgid "Single mode is off"
1294
+msgstr "Modo de Faixa Única está desligado"
1295
 
1296
-#: src/screen_help.cxx:192
1297
-msgid "Remove selected keydef"
1298
-msgstr "Remover keydef selecionado"
1299
+#. "consume" mode means
1300
+#. that MPD removes each
1301
+#. song which has
1302
+#. finished playing
1303
+#: src/screen.cxx:184
1304
+msgid "Consume mode is on"
1305
+msgstr "Modo de Deleção de Faixa Reproduzida está ligado"
1306
 
1307
-#: src/screen_help.cxx:193
1308
-#, fuzzy
1309
-msgid "Add a keydef"
1310
-msgstr "Adicionar nova tecla"
1311
+#: src/screen.cxx:185
1312
+msgid "Consume mode is off"
1313
+msgstr "Modo de Deleção de Faixa Reproduzida está desligado"
1314
 
1315
-#: src/screen_help.cxx:194
1316
-msgid "Go up a level"
1317
-msgstr "Subir um nível"
1318
+#: src/screen.cxx:188
1319
+#, c-format
1320
+msgid "Crossfade %d seconds"
1321
+msgstr "Inter-mixagem de %d segundos"
1322
 
1323
-#: src/screen_help.cxx:195
1324
-msgid "Apply and save changes"
1325
-msgstr "Aplicar mudanças e salvar"
1326
+#: src/screen.cxx:200
1327
+msgid "Database updated"
1328
+msgstr "Banco de Dados atualizado"
1329
 
1330
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1331
-msgid "Help"
1332
-msgstr "Ajuda"
1333
+#: src/screen.cxx:250
1334
+msgid "Find mode: Wrapped"
1335
+msgstr "Modo de Busca: Envolvido"
1336
 
1337
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1338
-msgid "Error: Screen too small"
1339
-msgstr "Erro: Tela é muito pequena"
1340
+#: src/screen.cxx:251
1341
+msgid "Find mode: Normal"
1342
+msgstr "Modo de Busca: Normal"
1343
 
1344
-#: src/screen_keydef.cxx:141
1345
-msgid "You have new key bindings"
1346
-msgstr "Você tem novas teclas de atalho"
1347
+#: src/screen.cxx:256
1348
+msgid "Auto center mode: On"
1349
+msgstr "Modo de Auto-Centralização: Ligado"
1350
 
1351
-#: src/screen_keydef.cxx:143
1352
-msgid "Keybindings unchanged."
1353
-msgstr "Teclas de atalho inalteradas."
1354
+#: src/screen.cxx:257
1355
+msgid "Auto center mode: Off"
1356
+msgstr "Modo de Auto-Centralização: Desligado"
1357
 
1358
-#: src/screen_keydef.cxx:153
1359
-#, c-format
1360
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1361
-msgstr "Erro: Não foi possível criar diretório ~/.ncmpc - %s"
1362
+#: src/screen_find.cxx:31
1363
+msgid "Find"
1364
+msgstr "Procurar"
1365
 
1366
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1367
-#, c-format
1368
-msgid "Error: %s - %s"
1369
-msgstr "Erro: %s - %s"
1370
+#: src/screen_find.cxx:32
1371
+msgid "Find backward"
1372
+msgstr "Procurar para trás"
1373
+
1374
+#: src/screen_find.cxx:33
1375
+msgid "Jump"
1376
+msgstr "Pular"
1377
 
1378
-#: src/screen_keydef.cxx:171
1379
+#: src/screen_find.cxx:79
1380
 #, c-format
1381
-msgid "Wrote %s"
1382
-msgstr "Gravei %s"
1383
+msgid "Unable to find '%s'"
1384
+msgstr "'%s' não pôde ser encontrado"
1385
 
1386
-#: src/screen_keydef.cxx:250
1387
+#: src/screen_keydef.cxx:161
1388
 msgid "Deleted"
1389
 msgstr "Deletada"
1390
 
1391
-#: src/screen_keydef.cxx:265
1392
+#: src/screen_keydef.cxx:177
1393
 #, c-format
1394
 msgid "Enter new key for %s: "
1395
 msgstr "Entre nova tecla para %s: "
1396
 
1397
-#: src/screen_keydef.cxx:276
1398
+#: src/screen_keydef.cxx:187
1399
 msgid "Ctrl-Space can't be used"
1400
 msgstr ""
1401
 
1402
-#: src/screen_keydef.cxx:282
1403
+#: src/screen_keydef.cxx:193
1404
 #, c-format
1405
 msgid "Error: key %s is already used for %s"
1406
 msgstr "Erro: tecla %s já está sendo usada para %s"
1407
 
1408
-#: src/screen_keydef.cxx:291
1409
+#: src/screen_keydef.cxx:202
1410
 #, c-format
1411
 msgid "Assigned %s to %s"
1412
 msgstr "Tecla %s definida para %s"
1413
 
1414
-#: src/screen_keydef.cxx:317
1415
-msgid "===> Apply key bindings "
1416
-msgstr "===> Aplicar teclas de atalho "
1417
-
1418
-#: src/screen_keydef.cxx:319
1419
-msgid "===> Apply & Save key bindings  "
1420
-msgstr "===> Aplicar e salvar teclas de atalho  "
1421
-
1422
-#: src/screen_keydef.cxx:347
1423
+#: src/screen_keydef.cxx:229
1424
 msgid "Add new key"
1425
 msgstr "Adicionar nova tecla"
1426
 
1427
-#: src/screen_keydef.cxx:410
1428
-msgid "Note: Did you forget to 'Apply' your changes?"
1429
-msgstr "Nota: Você esqueceu de 'Aplicar' suas mudanças?"
1430
-
1431
-#: src/screen_keydef.cxx:417
1432
-msgid "Edit key bindings"
1433
-msgstr "Editar teclas de atalho"
1434
-
1435
-#: src/screen_keydef.cxx:419
1436
+#: src/screen_keydef.cxx:251
1437
 #, c-format
1438
 msgid "Edit keys for %s"
1439
 msgstr "Editar teclas para %s"
1440
 
1441
-#. translators: no lyrics were found for the song
1442
-#: src/screen_lyrics.cxx:208
1443
-msgid "No lyrics"
1444
-msgstr "Sem letra de música"
1445
-
1446
-#: src/screen_lyrics.cxx:226
1447
-#, c-format
1448
-msgid "Lyrics timeout occurred after %d seconds"
1449
-msgstr ""
1450
-
1451
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1452
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1453
-msgid "Lyrics"
1454
-msgstr "Letra de Música"
1455
-
1456
-#. translators: this message is displayed
1457
-#. while data is retrieved
1458
-#: src/screen_lyrics.cxx:330
1459
-msgid "loading..."
1460
-msgstr "carregando..."
1461
-
1462
-#: src/screen_lyrics.cxx:361
1463
-msgid "Editor not configured"
1464
-msgstr ""
1465
-
1466
-#: src/screen_lyrics.cxx:367
1467
-msgid "Do you really want to start an editor and edit these lyrics?"
1468
-msgstr ""
1469
+#: src/screen_keydef.cxx:393
1470
+msgid "You have new key bindings"
1471
+msgstr "Você tem novas teclas de atalho"
1472
 
1473
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1474
-msgid "Can't start editor"
1475
-msgstr ""
1476
+#: src/screen_keydef.cxx:395
1477
+msgid "Keybindings unchanged."
1478
+msgstr "Teclas de atalho inalteradas."
1479
 
1480
-#: src/screen_lyrics.cxx:411
1481
-#, c-format
1482
-msgid "Editor exited unexpectedly (%d)"
1483
-msgstr ""
1484
+#: src/screen_keydef.cxx:405
1485
+#, fuzzy
1486
+msgid "Unable to write configuration"
1487
+msgstr "Configuração de teclas de atalho incompleta"
1488
 
1489
-#: src/screen_lyrics.cxx:414
1490
+#: src/screen_keydef.cxx:421
1491
 #, c-format
1492
-msgid "Editor exited unexpectedly (signal %d)"
1493
-msgstr ""
1494
-
1495
-#. lyrics for the song were saved on hard disk
1496
-#: src/screen_lyrics.cxx:436
1497
-msgid "Lyrics saved"
1498
-msgstr "Letra de Música salva"
1499
-
1500
-#: src/screen_lyrics.cxx:443
1501
-msgid "Lyrics deleted"
1502
-msgstr "Letras apagadas"
1503
-
1504
-#: src/screen_lyrics.cxx:446
1505
-msgid "No saved lyrics"
1506
-msgstr "Sem letras salvas"
1507
+msgid "Wrote %s"
1508
+msgstr "Gravei %s"
1509
 
1510
-#: src/screen_outputs.cxx:60
1511
-#, c-format
1512
-msgid "Output '%s' enabled"
1513
-msgstr "Saída '%s' habilitada"
1514
+#: src/screen_keydef.cxx:433
1515
+msgid "===> Apply key bindings "
1516
+msgstr "===> Aplicar teclas de atalho "
1517
 
1518
-#: src/screen_outputs.cxx:71
1519
-#, c-format
1520
-msgid "Output '%s' disabled"
1521
-msgstr "Saída '%s' desabilitada"
1522
+#: src/screen_keydef.cxx:435
1523
+msgid "===> Apply & Save key bindings  "
1524
+msgstr "===> Aplicar e salvar teclas de atalho  "
1525
 
1526
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1527
-msgid "Outputs"
1528
-msgstr "Saídas"
1529
+#: src/screen_keydef.cxx:472
1530
+msgid "Edit key bindings"
1531
+msgstr "Editar teclas de atalho"
1532
 
1533
-#. get path
1534
-#: src/screen_queue.cxx:274
1535
-msgid "Add"
1536
-msgstr "Adicionar"
1537
+#: src/screen_keydef.cxx:554
1538
+msgid "Note: Did you forget to 'Apply' your changes?"
1539
+msgstr "Nota: Você esqueceu de 'Aplicar' suas mudanças?"
1540
 
1541
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1542
-msgid "Queue"
1543
+#: src/screen_keydef.cxx:604
1544
+msgid "Keys"
1545
 msgstr ""
1546
 
1547
-#: src/screen_queue.cxx:384
1548
-#, c-format
1549
-msgid "Queue on %s"
1550
-msgstr ""
1551
+#: src/screen_utils.cxx:124
1552
+msgid "Password"
1553
+msgstr "Senha"
1554
 
1555
-#: src/screen_search.cxx:48
1556
+#: src/SearchPage.cxx:51
1557
 msgid "artist"
1558
 msgstr "artista"
1559
 
1560
-#: src/screen_search.cxx:49
1561
+#: src/SearchPage.cxx:52
1562
 msgid "album"
1563
 msgstr "álbum"
1564
 
1565
-#: src/screen_search.cxx:50
1566
+#: src/SearchPage.cxx:53
1567
 msgid "title"
1568
 msgstr "título"
1569
 
1570
-#: src/screen_search.cxx:51
1571
+#: src/SearchPage.cxx:54
1572
 msgid "track"
1573
 msgstr "faixa"
1574
 
1575
-#: src/screen_search.cxx:52
1576
+#: src/SearchPage.cxx:55
1577
 msgid "name"
1578
 msgstr "nome"
1579
 
1580
-#: src/screen_search.cxx:53
1581
+#: src/SearchPage.cxx:56
1582
 msgid "genre"
1583
 msgstr "estilo"
1584
 
1585
-#: src/screen_search.cxx:54
1586
+#: src/SearchPage.cxx:57
1587
 msgid "date"
1588
 msgstr "data"
1589
 
1590
-#: src/screen_search.cxx:55
1591
+#: src/SearchPage.cxx:58
1592
 msgid "composer"
1593
 msgstr "compositor"
1594
 
1595
-#: src/screen_search.cxx:56
1596
+#: src/SearchPage.cxx:59
1597
 msgid "performer"
1598
 msgstr "intérprete"
1599
 
1600
-#: src/screen_search.cxx:57
1601
+#: src/SearchPage.cxx:60
1602
 msgid "comment"
1603
 msgstr "comentário"
1604
 
1605
-#: src/screen_search.cxx:65
1606
+#: src/SearchPage.cxx:68
1607
 msgid "file"
1608
 msgstr "arquivo"
1609
 
1610
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1611
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1612
 msgid "Title"
1613
 msgstr "Título"
1614
 
1615
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1616
-msgid "Artist"
1617
-msgstr "Artista"
1618
-
1619
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1620
-msgid "Album"
1621
-msgstr "Álbum"
1622
-
1623
-#: src/screen_search.cxx:85
1624
+#: src/SearchPage.cxx:88
1625
 msgid "Filename"
1626
 msgstr "Nome de Arquivo"
1627
 
1628
-#: src/screen_search.cxx:86
1629
+#: src/SearchPage.cxx:89
1630
 msgid "Artist + Title"
1631
 msgstr "Artista + Título"
1632
 
1633
-#: src/screen_search.cxx:244
1634
-#, c-format
1635
-msgid "No argument for search tag %s"
1636
-msgstr "Sem argumento para tag de pesquisa %s"
1637
-
1638
-#: src/screen_search.cxx:253
1639
+#: src/SearchPage.cxx:270
1640
 #, c-format
1641
 msgid "Bad search tag %s"
1642
 msgstr "Tag de pesquisa ruim %s"
1643
 
1644
-#. if( pattern==nullptr )
1645
-#. search_new(screen, c);
1646
-#. else
1647
-#: src/screen_search.cxx:400
1648
-#, c-format
1649
-msgid "Press %s for a new search"
1650
-msgstr "Pressione %s para uma nova pesquisa"
1651
-
1652
-#: src/screen_search.cxx:427
1653
-#, c-format
1654
-msgid "Search: %s"
1655
-msgstr "Pesquisa: %s"
1656
-
1657
-#: src/screen_search.cxx:430
1658
+#: src/SearchPage.cxx:284
1659
 #, c-format
1660
-msgid "Search: Results for %s [%s]"
1661
-msgstr "Pesquisa: Resultados para %s [%s]"
1662
+msgid "No argument for search tag %s"
1663
+msgstr "Sem argumento para tag de pesquisa %s"
1664
 
1665
-#: src/screen_search.cxx:434
1666
-#, c-format
1667
-msgid "Search: Press %s for a new search [%s]"
1668
-msgstr "Pesquisa: Pressione %s para uma nova pesquisa [%s]"
1669
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1670
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1671
+msgid "Search"
1672
+msgstr "Pesquisa"
1673
 
1674
-#: src/screen_search.cxx:458
1675
+#: src/SearchPage.cxx:436
1676
 #, c-format
1677
 msgid "Search mode: %s"
1678
 msgstr "Modo de Pesquisa: %s"
1679
 
1680
-#: src/screen_song.cxx:54
1681
+#: src/SongPage.cxx:67
1682
 msgid "Length"
1683
 msgstr "Duração"
1684
 
1685
-#: src/screen_song.cxx:55
1686
+#: src/SongPage.cxx:68
1687
 msgid "Position"
1688
 msgstr ""
1689
 
1690
-#: src/screen_song.cxx:56
1691
+#: src/SongPage.cxx:69
1692
 msgid "Composer"
1693
 msgstr "Compositor"
1694
 
1695
-#: src/screen_song.cxx:57
1696
+#: src/SongPage.cxx:70
1697
 msgid "Name"
1698
 msgstr "Nome"
1699
 
1700
-#: src/screen_song.cxx:58
1701
+#: src/SongPage.cxx:71
1702
 msgid "Disc"
1703
 msgstr "Disco"
1704
 
1705
-#: src/screen_song.cxx:59
1706
+#: src/SongPage.cxx:72
1707
 msgid "Track"
1708
 msgstr "Faixa"
1709
 
1710
-#: src/screen_song.cxx:60
1711
+#: src/SongPage.cxx:73
1712
 msgid "Date"
1713
 msgstr "Data"
1714
 
1715
-#: src/screen_song.cxx:61
1716
+#: src/SongPage.cxx:74
1717
 msgid "Genre"
1718
 msgstr "Estilo"
1719
 
1720
-#: src/screen_song.cxx:62
1721
+#: src/SongPage.cxx:75
1722
 msgid "Comment"
1723
 msgstr "Comentário"
1724
 
1725
-#: src/screen_song.cxx:63
1726
+#: src/SongPage.cxx:76
1727
 msgid "Path"
1728
 msgstr "Caminho"
1729
 
1730
-#: src/screen_song.cxx:64
1731
+#: src/SongPage.cxx:77
1732
 msgid "Bitrate"
1733
 msgstr "Taxa de Amostragem"
1734
 
1735
-#: src/screen_song.cxx:65
1736
+#: src/SongPage.cxx:78
1737
 msgid "Format"
1738
 msgstr ""
1739
 
1740
-#: src/screen_song.cxx:82
1741
+#: src/SongPage.cxx:95
1742
 msgid "Number of artists"
1743
 msgstr "Número de artistas"
1744
 
1745
-#: src/screen_song.cxx:83
1746
+#: src/SongPage.cxx:96
1747
 msgid "Number of albums"
1748
 msgstr "Número de álbuns"
1749
 
1750
-#: src/screen_song.cxx:84
1751
+#: src/SongPage.cxx:97
1752
 msgid "Number of songs"
1753
 msgstr "Número de faixas"
1754
 
1755
-#: src/screen_song.cxx:85
1756
+#: src/SongPage.cxx:98
1757
 msgid "Uptime"
1758
 msgstr "Tempo rodando"
1759
 
1760
-#: src/screen_song.cxx:86
1761
+#: src/SongPage.cxx:99
1762
 msgid "Most recent db update"
1763
 msgstr "Atualização do BD mais recente"
1764
 
1765
-#: src/screen_song.cxx:87
1766
+#: src/SongPage.cxx:100
1767
 msgid "Playtime"
1768
 msgstr "Tempo de reprodução"
1769
 
1770
-#: src/screen_song.cxx:88
1771
+#: src/SongPage.cxx:101
1772
 msgid "DB playtime"
1773
 msgstr "Tempo de reprodução do BD"
1774
 
1775
-#: src/screen_song.cxx:173
1776
+#: src/SongPage.cxx:204
1777
 msgid "Song viewer"
1778
 msgstr "Visualizador de Trilha"
1779
 
1780
-#: src/screen_song.cxx:337
1781
+#: src/SongPage.cxx:370
1782
 msgid "MPD statistics"
1783
 msgstr "Estatísticas do MPD"
1784
 
1785
-#: src/screen_song.cxx:427
1786
+#: src/SongPage.cxx:455
1787
 msgid "Selected song"
1788
 msgstr "Faixa selecionada"
1789
 
1790
-#: src/screen_song.cxx:437
1791
+#: src/SongPage.cxx:465
1792
 msgid "Currently playing song"
1793
 msgstr "Faixa atualmente em reprodução"
1794
 
1795
-#: src/screen_song.cxx:442
1796
+#: src/SongPage.cxx:470
1797
 #, c-format
1798
 msgid "%d kbps"
1799
 msgstr "%d kbps"
1800
 
1801
-#. NOTE: if one day a translator decides to use a multi-byte character
1802
-#. for one of the yes/no keys, we'll have to parse it properly
1803
-#: src/screen_utils.cxx:80
1804
-#, fuzzy, c-format
1805
-msgid "%s [%s/%s] "
1806
-msgstr "Substituir %s [%s/%s] ? "
1807
-
1808
-#: src/screen_utils.cxx:121
1809
-msgid "Password"
1810
-msgstr "Senha"
1811
+#: src/SongPage.cxx:554
1812
+msgid "Song"
1813
+msgstr ""
1814
 
1815
-#: src/status_bar.cxx:121
1816
+#: src/StatusBar.cxx:104
1817
 msgid "Playing:"
1818
 msgstr "Reproduzindo:"
1819
 
1820
-#: src/status_bar.cxx:124
1821
+#: src/StatusBar.cxx:108
1822
 msgid "[Paused]"
1823
 msgstr "[Pausado]"
1824
 
1825
-#: src/title_bar.cxx:99
1826
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1827
+#, fuzzy
1828
+msgid "Unknown color"
1829
+msgstr "Comando desconhecido"
1830
+
1831
+#: src/Styles.cxx:333
1832
+#, fuzzy
1833
+msgid "Unknown color field"
1834
+msgstr "Aviso: Campo de cor desconhecido - %s\n"
1835
+
1836
+#: src/Styles.cxx:375
1837
+msgid "Terminal lacks color capabilities"
1838
+msgstr "Terminal não tem capacidade para trabalhar com cores"
1839
+
1840
+#: src/time_format.cxx:44
1841
+msgid "year"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:46
1845
+msgid "years"
1846
+msgstr ""
1847
+
1848
+#: src/time_format.cxx:54
1849
+msgid "week"
1850
+msgstr ""
1851
+
1852
+#: src/time_format.cxx:57
1853
+msgid "weeks"
1854
+msgstr ""
1855
+
1856
+#: src/time_format.cxx:65
1857
+msgid "day"
1858
+msgstr ""
1859
+
1860
+#: src/time_format.cxx:68
1861
+msgid "days"
1862
+msgstr ""
1863
+
1864
+#: src/TitleBar.cxx:100
1865
 msgid "Volume n/a"
1866
 msgstr "Volume n/a"
1867
 
1868
-#: src/title_bar.cxx:101
1869
+#: src/TitleBar.cxx:102
1870
 #, c-format
1871
 msgid "Volume %d%%"
1872
 msgstr "Volume %d%%"
1873
 
1874
+#, fuzzy
1875
+#~ msgid "Add url/file to queue"
1876
+#~ msgstr "Adicionar URL/arquivo à lista de reprodução"
1877
+
1878
+#~ msgid "Move song up"
1879
+#~ msgstr "Mover trilha para cima"
1880
+
1881
+#~ msgid "Move song down"
1882
+#~ msgstr "Mover faixa para baixo"
1883
+
1884
+#~ msgid "Press %s for a new search"
1885
+#~ msgstr "Pressione %s para uma nova pesquisa"
1886
+
1887
+#~ msgid "Search: %s"
1888
+#~ msgstr "Pesquisa: %s"
1889
+
1890
+#~ msgid "Search: Results for %s [%s]"
1891
+#~ msgstr "Pesquisa: Resultados para %s [%s]"
1892
+
1893
+#~ msgid "Search: Press %s for a new search [%s]"
1894
+#~ msgstr "Pesquisa: Pressione %s para uma nova pesquisa [%s]"
1895
+
1896
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1897
+#~ msgstr "Conectando a %s... [Pressione %s para abortar]"
1898
+
1899
+#~ msgid "press %s for the key editor"
1900
+#~ msgstr "press %s para o editor de teclas"
1901
+
1902
+#~ msgid "Album: %s - %s"
1903
+#~ msgstr "Álbum: %s - %s"
1904
+
1905
+#~ msgid "Adding album %s..."
1906
+#~ msgstr "Adicionando álbum %s..."
1907
+
1908
+#~ msgid "Adding %s..."
1909
+#~ msgstr "Adicionando %s..."
1910
+
1911
+#~ msgid "Error: Screen too small"
1912
+#~ msgstr "Erro: Tela é muito pequena"
1913
+
1914
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1915
+#~ msgstr "Erro: Não foi possível criar diretório ~/.ncmpc - %s"
1916
+
1917
+#~ msgid "Error: %s - %s"
1918
+#~ msgstr "Erro: %s - %s"
1919
+
1920
+#, fuzzy
1921
+#~ msgid "%s [%s/%s] "
1922
+#~ msgstr "Substituir %s [%s/%s] ? "
1923
+
1924
 #~ msgid "Delete playlist %s [%s/%s] ? "
1925
 #~ msgstr "Deletar Lista de Reprodução %s [%s/%s] ? "
1926
 
1927
 #~ msgid "Warning: Unknown color - %s\n"
1928
 #~ msgstr "Aviso: Cor desconhecida - %s\n"
1929
 
1930
-#~ msgid "Connected to %s"
1931
-#~ msgstr "Conectado à %s"
1932
-
1933
 #~ msgid "Shuffled playlist"
1934
 #~ msgstr "Lista de Reprodução misturada"
1935
 
1936
ncmpc-0.30.tar.xz/po/ru.po -> ncmpc-0.32.tar.xz/po/ru.po Changed
1929
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2017-09-05 20:47+0700\n"
8
 "Last-Translator: Max Arnold <lwarxx@gmail.com>\n"
9
 "Language-Team: ru <ru@li.org>\n"
10
@@ -16,416 +16,353 @@
11
 "Content-Type: text/plain; charset=UTF-8\n"
12
 "Content-Transfer-Encoding: 8bit\n"
13
 
14
-#: src/colors.cxx:156
15
-msgid "Unknown color"
16
-msgstr "Неизвестный цвет"
17
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
18
+msgid "All tracks"
19
+msgstr "Все композиции"
20
 
21
-#: src/colors.cxx:195
22
-msgid "Unknown color field"
23
-msgstr "Неизвестное цветовое поле"
24
+#: src/AlbumListPage.cxx:144
25
+#, fuzzy
26
+msgid "Albums"
27
+msgstr "Альбом"
28
 
29
-#: src/colors.cxx:228
30
-msgid "Terminal lacks support for changing colors"
31
-msgstr "Терминал не поддерживает смену цветов"
32
+#: src/AlbumListPage.cxx:146
33
+#, c-format
34
+msgid "Albums of artist: %s"
35
+msgstr "Альбомы исполнителя: %s"
36
 
37
-#: src/colors.cxx:237
38
-msgid "Terminal lacks color capabilities"
39
-msgstr "Терминал не поддерживает цвета"
40
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
41
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
42
+#, c-format
43
+msgid "Adding '%s' to queue"
44
+msgstr "В очередь добавляется '%s'"
45
+
46
+#: src/ArtistListPage.cxx:114
47
+msgid "All artists"
48
+msgstr "Все исполнители"
49
+
50
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
51
+#, c-format
52
+msgid "Key %s assigned to %s and %s"
53
+msgstr "Клавиша %s назначена для %s и %s"
54
+
55
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
56
+msgid "Chat"
57
+msgstr "Чат"
58
+
59
+#: src/ChatPage.cxx:160
60
+msgid "Your message"
61
+msgstr "Ваше сообщение"
62
+
63
+#: src/ChatPage.cxx:169
64
+msgid "Message could not be sent"
65
+msgstr "Сообщение не может быть отправлено"
66
 
67
-#: src/command.cxx:63
68
+#: src/Command.cxx:29
69
 msgid "Key configuration screen"
70
 msgstr "Экран клавиатурных комбинаций"
71
 
72
-#: src/command.cxx:66
73
+#: src/Command.cxx:32
74
 msgid "Quit"
75
 msgstr "Выход"
76
 
77
-#: src/command.cxx:70
78
+#: src/Command.cxx:36
79
 msgid "Move cursor up"
80
 msgstr "Курсор вверх"
81
 
82
-#: src/command.cxx:72
83
+#: src/Command.cxx:38
84
 msgid "Move cursor down"
85
 msgstr "Курсор вниз"
86
 
87
-#: src/command.cxx:74
88
+#: src/Command.cxx:40
89
 msgid "Move cursor to the top of screen"
90
 msgstr "Переместить курсор в верх экрана"
91
 
92
-#: src/command.cxx:76
93
+#: src/Command.cxx:42
94
 msgid "Move cursor to the middle of screen"
95
 msgstr "Переместить курсор в середину экрана"
96
 
97
-#: src/command.cxx:78
98
+#: src/Command.cxx:44
99
 msgid "Move cursor to the bottom of screen"
100
 msgstr "Переместить курсор в низ экрана"
101
 
102
-#: src/command.cxx:80
103
+#: src/Command.cxx:46
104
 msgid "Move cursor to the top of the list"
105
 msgstr "Переместить курсор в начало списка"
106
 
107
-#: src/command.cxx:82
108
+#: src/Command.cxx:48
109
 msgid "Move cursor to the bottom of the list"
110
 msgstr "Переместить курсор в конец списка"
111
 
112
-#: src/command.cxx:84
113
+#: src/Command.cxx:50
114
 msgid "Page up"
115
 msgstr "На страницу вверх"
116
 
117
-#: src/command.cxx:86
118
+#: src/Command.cxx:52
119
 msgid "Page down"
120
 msgstr "На страницу вниз"
121
 
122
-#: src/command.cxx:88
123
+#: src/Command.cxx:54
124
 msgid "Range selection"
125
 msgstr "Выбор диапазона"
126
 
127
-#: src/command.cxx:90
128
+#: src/Command.cxx:56
129
 msgid "Scroll down one line"
130
 msgstr "Прокрутка на одну строку вниз"
131
 
132
-#: src/command.cxx:92
133
+#: src/Command.cxx:58
134
 msgid "Scroll up one line"
135
 msgstr "Прокрутка на одну строку вверх"
136
 
137
-#: src/command.cxx:94
138
+#: src/Command.cxx:60
139
 msgid "Scroll up half a screen"
140
 msgstr "Прокрутка на половину экрана вверх"
141
 
142
-#: src/command.cxx:96
143
+#: src/Command.cxx:62
144
 msgid "Scroll down half a screen"
145
 msgstr "Прокрутка на половину экрана вниз"
146
 
147
-#: src/command.cxx:98
148
+#: src/Command.cxx:64
149
 msgid "Select currently playing song"
150
 msgstr "Выбрать текущую композицию"
151
 
152
-#: src/command.cxx:103
153
+#: src/Command.cxx:69
154
 msgid "Help screen"
155
 msgstr "Экран помощи"
156
 
157
-#: src/command.cxx:105 src/screen_help.cxx:119
158
+#: src/Command.cxx:71 src/HelpPage.cxx:140
159
 msgid "Queue screen"
160
 msgstr "Экран очереди"
161
 
162
-#: src/command.cxx:107 src/screen_help.cxx:134
163
+#: src/Command.cxx:73 src/HelpPage.cxx:155
164
 msgid "Browse screen"
165
 msgstr "Экран навигации"
166
 
167
-#: src/command.cxx:112
168
+#: src/Command.cxx:78
169
 msgid "Play/Enter directory"
170
 msgstr "Воспроизвести/Перейти в директорию"
171
 
172
-#: src/command.cxx:114
173
+#: src/Command.cxx:80
174
 msgid "Pause"
175
 msgstr "Пауза"
176
 
177
-#: src/command.cxx:116
178
+#: src/Command.cxx:82
179
 msgid "Stop"
180
 msgstr "Останов"
181
 
182
-#: src/command.cxx:118
183
+#: src/Command.cxx:84
184
 msgid "Crop"
185
 msgstr "Удалить из плейлиста все композиции кроме текущей"
186
 
187
-#: src/command.cxx:120
188
+#: src/Command.cxx:86
189
 msgid "Next track"
190
 msgstr "Следующая композиция"
191
 
192
-#: src/command.cxx:122
193
+#: src/Command.cxx:88
194
 msgid "Previous track"
195
 msgstr "Предыдущая композиция"
196
 
197
-#: src/command.cxx:124
198
+#: src/Command.cxx:90
199
 msgid "Seek forward"
200
 msgstr "Перемотка вперёд"
201
 
202
-#: src/command.cxx:126
203
+#: src/Command.cxx:92
204
 msgid "Seek backward"
205
 msgstr "Перемотка назад"
206
 
207
-#: src/command.cxx:128
208
+#: src/Command.cxx:94
209
 msgid "Increase volume"
210
 msgstr "Увеличить громкость"
211
 
212
-#: src/command.cxx:130
213
+#: src/Command.cxx:96
214
 msgid "Decrease volume"
215
 msgstr "Уменьшить громкость"
216
 
217
-#: src/command.cxx:132
218
+#: src/Command.cxx:98
219
 msgid "Select/deselect song in queue"
220
 msgstr "Выбрать или отменить выбор композиции в очереди"
221
 
222
-#: src/command.cxx:134
223
+#: src/Command.cxx:100
224
 msgid "Select all listed items"
225
 msgstr "Добавить все композиции в плейлист"
226
 
227
-#: src/command.cxx:136
228
+#: src/Command.cxx:102
229
 msgid "Delete song from queue"
230
 msgstr "Удалить композицию из очереди"
231
 
232
-#: src/command.cxx:138
233
+#: src/Command.cxx:104
234
 msgid "Shuffle queue"
235
 msgstr "Перемешать очередь"
236
 
237
-#: src/command.cxx:140
238
+#: src/Command.cxx:106
239
 msgid "Clear queue"
240
 msgstr "Очистить очередь"
241
 
242
-#: src/command.cxx:142
243
+#: src/Command.cxx:108
244
 msgid "Toggle repeat mode"
245
 msgstr "Вкл/выкл режим повтора"
246
 
247
-#: src/command.cxx:144
248
+#: src/Command.cxx:110
249
 msgid "Toggle random mode"
250
 msgstr "Вкл/выкл случайный режим"
251
 
252
-#: src/command.cxx:146
253
+#: src/Command.cxx:112
254
 msgid "Toggle single mode"
255
 msgstr "Вкл/выкл одиночный режим"
256
 
257
-#: src/command.cxx:148
258
+#: src/Command.cxx:114
259
 msgid "Toggle consume mode"
260
 msgstr "Вкл/выкл режим удаления после проигрывания"
261
 
262
-#: src/command.cxx:150
263
+#: src/Command.cxx:116
264
 msgid "Toggle crossfade mode"
265
 msgstr "Вкл/выкл режим плавного перехода"
266
 
267
-#: src/command.cxx:152
268
+#: src/Command.cxx:118
269
 msgid "Start a music database update"
270
 msgstr "Обновить музыкальную базу"
271
 
272
-#: src/command.cxx:154
273
+#: src/Command.cxx:120
274
 msgid "Save queue"
275
 msgstr "Сохранить очередь"
276
 
277
-#: src/command.cxx:156
278
-msgid "Add url/file to queue"
279
-msgstr "Добавить url/файл в очередь"
280
+#: src/Command.cxx:122 src/HelpPage.cxx:174
281
+msgid "Append song to queue"
282
+msgstr "Добавить композицию в очередь"
283
 
284
-#: src/command.cxx:159
285
+#: src/Command.cxx:125
286
 msgid "Go to root directory"
287
 msgstr "Перейти к корневой директории"
288
 
289
-#: src/command.cxx:161
290
+#: src/Command.cxx:127
291
 msgid "Go to parent directory"
292
 msgstr "Перейти к родительской директории"
293
 
294
-#: src/command.cxx:164
295
+#: src/Command.cxx:130
296
 msgid "Locate song in browser"
297
 msgstr "Перейти к файлу композиции"
298
 
299
-#: src/command.cxx:168
300
+#: src/Command.cxx:134
301
 msgid "Move item up"
302
 msgstr "Переместить вверх"
303
 
304
-#: src/command.cxx:170
305
+#: src/Command.cxx:136
306
 msgid "Move item down"
307
 msgstr "Переместить вниз"
308
 
309
-#: src/command.cxx:172
310
+#: src/Command.cxx:138
311
 msgid "Refresh screen"
312
 msgstr "Обновить экран"
313
 
314
 #. translators: toggle between wrapping and non-wrapping
315
 #. search
316
-#: src/command.cxx:179
317
+#: src/Command.cxx:145
318
 msgid "Toggle find mode"
319
 msgstr "Переключить режим поиска"
320
 
321
 #. translators: the auto center mode always centers the song
322
 #. currently being played
323
-#: src/command.cxx:183
324
+#: src/Command.cxx:149
325
 msgid "Toggle auto center mode"
326
 msgstr "Вкл/выкл режим автоцентрирования"
327
 
328
-#: src/command.cxx:188
329
+#: src/Command.cxx:154
330
 msgid "Next screen"
331
 msgstr "Следующий экран"
332
 
333
-#: src/command.cxx:190
334
+#: src/Command.cxx:156
335
 msgid "Previous screen"
336
 msgstr "Предыдущий экран"
337
 
338
-#: src/command.cxx:192
339
+#: src/Command.cxx:158
340
 msgid "Swap to most recent screen"
341
 msgstr "Последний посещённый экран"
342
 
343
-#: src/command.cxx:197
344
+#: src/Command.cxx:163
345
 msgid "Forward find"
346
 msgstr "Поиск вперёд"
347
 
348
-#: src/command.cxx:199
349
+#: src/Command.cxx:165
350
 msgid "Forward find next"
351
 msgstr "Продолжить поиск вперёд"
352
 
353
-#: src/command.cxx:201
354
+#: src/Command.cxx:167
355
 msgid "Backward find"
356
 msgstr "Поиск назад"
357
 
358
-#: src/command.cxx:203
359
+#: src/Command.cxx:169
360
 msgid "Backward find previous"
361
 msgstr "Продолжить поиск назад"
362
 
363
 #. translators: this queries the user for a string
364
 #. * and jumps directly (while the user is typing)
365
 #. * to the entry which begins with this string
366
-#: src/command.cxx:208
367
+#: src/Command.cxx:174
368
 msgid "Jump to"
369
 msgstr "Перейти к"
370
 
371
-#: src/command.cxx:214
372
+#: src/Command.cxx:180
373
 msgid "Artist screen"
374
 msgstr "Экран исполнителей"
375
 
376
-#: src/command.cxx:218 src/screen_help.cxx:148
377
+#: src/Command.cxx:184 src/HelpPage.cxx:169
378
 msgid "Search screen"
379
 msgstr "Экран поиска"
380
 
381
-#: src/command.cxx:220
382
+#: src/Command.cxx:186
383
 msgid "Change search mode"
384
 msgstr "Изменить поле для поиска"
385
 
386
-#: src/command.cxx:224
387
+#: src/Command.cxx:190
388
 msgid "View the selected and the currently playing song"
389
 msgstr "Просмотр выбранной и проигрываемой композиций"
390
 
391
-#: src/command.cxx:228 src/screen_help.cxx:160
392
+#: src/Command.cxx:194 src/HelpPage.cxx:181
393
 msgid "Lyrics screen"
394
 msgstr "Экран текста песни"
395
 
396
 #. translators: interrupt the current background action,
397
 #. e.g. stop loading lyrics from the internet
398
-#: src/command.cxx:232
399
+#: src/Command.cxx:198
400
 msgid "Interrupt action"
401
 msgstr "Прервать операцию"
402
 
403
-#: src/command.cxx:234
404
+#: src/Command.cxx:200
405
 msgid "Update Lyrics"
406
 msgstr "Обновить текст"
407
 
408
-#: src/command.cxx:238
409
+#: src/Command.cxx:204
410
 msgid "Edit the current item"
411
 msgstr "Редактировать текущий элемент"
412
 
413
-#: src/command.cxx:243 src/screen_help.cxx:175
414
+#: src/Command.cxx:209 src/HelpPage.cxx:196
415
 msgid "Outputs screen"
416
 msgstr "Экран аудиовыходов"
417
 
418
-#: src/command.cxx:248 src/screen_help.cxx:182
419
+#: src/Command.cxx:214 src/HelpPage.cxx:203
420
 msgid "Chat screen"
421
 msgstr "Экран чата"
422
 
423
-#: src/command.cxx:290
424
-msgid "Undefined"
425
-msgstr "Не задано"
426
-
427
-#: src/command.cxx:292
428
-msgid "Space"
429
-msgstr "Пробел"
430
-
431
-#: src/command.cxx:294
432
-msgid "Enter"
433
-msgstr "Ввод"
434
-
435
-#: src/command.cxx:296
436
-msgid "Backspace"
437
-msgstr "Backspace"
438
-
439
-#: src/command.cxx:298
440
-msgid "Delete"
441
-msgstr "Delete"
442
-
443
-#: src/command.cxx:300
444
-msgid "Up"
445
-msgstr "Вверх"
446
-
447
-#: src/command.cxx:302
448
-msgid "Down"
449
-msgstr "Вниз"
450
-
451
-#: src/command.cxx:304
452
-msgid "Left"
453
-msgstr "Влево"
454
-
455
-#: src/command.cxx:306
456
-msgid "Right"
457
-msgstr "Вправо"
458
-
459
-#: src/command.cxx:308
460
-msgid "Home"
461
-msgstr "В начало"
462
-
463
-#: src/command.cxx:310
464
-msgid "End"
465
-msgstr "В конец"
466
-
467
-#: src/command.cxx:312
468
-msgid "PageDown"
469
-msgstr "PageDown"
470
-
471
-#: src/command.cxx:314
472
-msgid "PageUp"
473
-msgstr "PageUp"
474
-
475
-#: src/command.cxx:316
476
-msgid "Tab"
477
-msgstr "Tab"
478
-
479
-#: src/command.cxx:318
480
-msgid "Shift+Tab"
481
-msgstr "Shift+Tab"
482
-
483
-#: src/command.cxx:320
484
-msgid "Esc"
485
-msgstr "Esc"
486
-
487
-#: src/command.cxx:322
488
-msgid "Insert"
489
-msgstr "Insert"
490
-
491
-#: src/command.cxx:326
492
-#, c-format
493
-msgid "F%d"
494
-msgstr ""
495
-
496
-#: src/command.cxx:330
497
-#, c-format
498
-msgid "Ctrl-%c"
499
-msgstr ""
500
-
501
-#: src/command.cxx:332
502
-#, c-format
503
-msgid "Alt-%c"
504
-msgstr ""
505
-
506
-#: src/command.cxx:477 src/command.cxx:483
507
-#, c-format
508
-msgid "Key %s assigned to %s and %s"
509
-msgstr "Клавиша %s назначена для %s и %s"
510
-
511
 #. To translators: prefix for error messages
512
-#: src/conf.cxx:121
513
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
514
 msgid "Error"
515
 msgstr "Ошибка"
516
 
517
-#: src/conf.cxx:135
518
+#: src/conf.cxx:128
519
 msgid "Word expected"
520
 msgstr ""
521
 
522
-#: src/conf.cxx:152 src/conf.cxx:161
523
+#: src/conf.cxx:145 src/conf.cxx:154
524
 msgid "Malformed hotkey definition"
525
 msgstr "Неправильное значение клавиатурной комбинации"
526
 
527
 #. the hotkey configuration contains an unknown
528
 #. command
529
-#: src/conf.cxx:185
530
+#: src/conf.cxx:178
531
 msgid "Unknown command"
532
 msgstr "Неизвестная команда"
533
 
534
 #. the hotkey configuration line is incomplete
535
-#: src/conf.cxx:198
536
+#: src/conf.cxx:191
537
 msgid "Incomplete hotkey configuration"
538
 msgstr "Неопределённое значение клавиатурной комбинации"
539
 
540
@@ -433,803 +370,878 @@
541
 #. "elapsed" or "remaining" time of a song being
542
 #. played; in this case, the configuration file
543
 #. contained an invalid setting
544
-#: src/conf.cxx:234
545
+#: src/conf.cxx:227
546
 msgid "Bad time display type"
547
 msgstr "Неверный тип отображения времени"
548
 
549
 #. an equals sign '=' was expected while parsing a
550
 #. configuration file line
551
-#: src/conf.cxx:247 src/conf.cxx:427
552
+#: src/conf.cxx:240 src/conf.cxx:418
553
 msgid "Missing '='"
554
 msgstr "Пропущен символ '='"
555
 
556
-#: src/conf.cxx:298
557
+#: src/conf.cxx:291
558
 msgid "Bad color name"
559
 msgstr "Неверное название цвета"
560
 
561
-#: src/conf.cxx:308
562
+#: src/conf.cxx:301
563
 msgid "Incomplete color definition"
564
 msgstr "Неопределённое значение цвета"
565
 
566
-#: src/conf.cxx:314
567
+#: src/conf.cxx:307
568
 msgid "Invalid number"
569
 msgstr "Неверное число"
570
 
571
-#: src/conf.cxx:322
572
+#: src/conf.cxx:315
573
 msgid "Malformed color definition"
574
 msgstr "Неправильное значение цвета"
575
 
576
 #. an unknown screen name was specified in the
577
 #. configuration file
578
-#: src/conf.cxx:356
579
+#: src/conf.cxx:353
580
 msgid "Unknown screen name"
581
 msgstr "Неизвестное название экрана"
582
 
583
-#: src/conf.cxx:384
584
+#: src/conf.cxx:378
585
 msgid "Invalid search mode"
586
 msgstr "Неверный режим поиска"
587
 
588
-#: src/conf.cxx:407
589
+#: src/conf.cxx:398
590
 msgid "Unknown search mode"
591
 msgstr "Неизвестный режим поиска"
592
 
593
-#: src/conf.cxx:597
594
+#: src/conf.cxx:581
595
 msgid "Unknown configuration parameter"
596
 msgstr "Неизвестный параметр конфигурации"
597
 
598
-#: src/i18n.h:42
599
-msgid "y"
600
-msgstr "y"
601
-
602
-#: src/i18n.h:43
603
-msgid "n"
604
-msgstr "n"
605
-
606
-#: src/list_window.cxx:554
607
-msgid "Range selection disabled"
608
-msgstr "Выбор диапазона выключен"
609
-
610
-#: src/list_window.cxx:559
611
-msgid "Range selection enabled"
612
-msgstr "Выбор диапазона включен"
613
-
614
-#: src/Main.cxx:161
615
-#, c-format
616
-msgid "Connecting to %s...  [Press %s to abort]"
617
-msgstr "Подключение к %s...  [Нажмите %s для отмены]"
618
-
619
-#: src/Main.cxx:182
620
-#, c-format
621
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
622
-msgstr "Ошибка: MPD версии %d.%d.%d устарел (необходим %s)"
623
-
624
-#: src/Main.cxx:317
625
-#, c-format
626
-msgid "press %s for the key editor"
627
-msgstr "%s - редактор клавиш"
628
-
629
-#. To translators: these credits are shown
630
-#. when ncmpc is started with "--version"
631
-#: src/options.cxx:209 src/options.cxx:212
632
-msgid "translator-credits"
633
-msgstr "Перевод: Max Arnold <lwarxx@gmail.com>"
634
-
635
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
636
-msgid "Shuffled queue"
637
-msgstr "Очередь перемешана"
638
-
639
-#: src/player_command.cxx:184
640
-msgid "Cleared queue"
641
-msgstr "Очередь очищена"
642
+#: src/CustomColors.cxx:56
643
+msgid "Terminal lacks support for changing colors"
644
+msgstr "Терминал не поддерживает смену цветов"
645
 
646
-#. query the user for a filename
647
-#: src/save_playlist.cxx:109
648
-msgid "Save queue as"
649
-msgstr "Сохранить очередь как"
650
+#. translators: the "delete" command is only possible
651
+#. for playlists; the user attempted to delete a song
652
+#. or a directory or something else
653
+#: src/FileBrowserPage.cxx:260
654
+msgid "Deleting this item is not possible"
655
+msgstr "Удаление этого элемента невозможно"
656
 
657
-#: src/save_playlist.cxx:140
658
+#: src/FileBrowserPage.cxx:268
659
 #, c-format
660
-msgid "Replace %s?"
661
-msgstr "Заменить %s?"
662
+msgid "Delete playlist %s?"
663
+msgstr "Удалить плейлист %s?"
664
 
665
 #. translators: a dialog was aborted by the user
666
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
667
-#: src/screen_lyrics.cxx:370
668
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
669
+#: src/screen_keydef.cxx:182
670
 msgid "Aborted"
671
 msgstr "Прервано"
672
 
673
-#. success
674
-#: src/save_playlist.cxx:171
675
-#, c-format
676
-msgid "Saved %s"
677
-msgstr "Сохранено в %s"
678
+#. translators: MPD deleted the playlist, as requested by the
679
+#. user
680
+#: src/FileBrowserPage.cxx:286
681
+msgid "Playlist deleted"
682
+msgstr "Плейлист удалён"
683
 
684
-#: src/screen.cxx:154
685
-msgid "Repeat mode is on"
686
-msgstr "Повтор включен"
687
+#. translators: caption of the browser screen
688
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
689
+msgid "Browse"
690
+msgstr "Навигация"
691
 
692
-#: src/screen.cxx:155
693
-msgid "Repeat mode is off"
694
-msgstr "Повтор выключен"
695
+#: src/FileListPage.cxx:121
696
+#, fuzzy, c-format
697
+msgid "Loading playlist '%s'"
698
+msgstr "Загружается плейлист %s..."
699
 
700
-#: src/screen.cxx:159
701
-msgid "Random mode is on"
702
-msgstr "Случайный режим включен"
703
+#: src/HelpPage.cxx:60
704
+msgid "Movement"
705
+msgstr "Перемещение"
706
 
707
-#: src/screen.cxx:160
708
-msgid "Random mode is off"
709
-msgstr "Случайный режим выключен"
710
+#: src/HelpPage.cxx:105
711
+msgid "Global"
712
+msgstr "Глобальные"
713
 
714
-#. "single" mode means
715
-#. that MPD will
716
-#. automatically stop
717
-#. after playing one
718
-#. single song
719
-#: src/screen.cxx:169
720
-msgid "Single mode is on"
721
-msgstr "Одиночный режим включен"
722
+#: src/HelpPage.cxx:142
723
+msgid "Play"
724
+msgstr "Воспроизведение"
725
 
726
-#: src/screen.cxx:170
727
-msgid "Single mode is off"
728
-msgstr "Одиночный режим выключен"
729
+#: src/HelpPage.cxx:149
730
+msgid "Center"
731
+msgstr "Центрировать"
732
 
733
-#. "consume" mode means
734
-#. that MPD removes each
735
-#. song which has
736
-#. finished playing
737
-#: src/screen.cxx:178
738
-msgid "Consume mode is on"
739
-msgstr "Режим удаления после проигрывания включен"
740
+#: src/HelpPage.cxx:157
741
+msgid "Enter directory/Select and play song"
742
+msgstr "Перейти в директорию/Выбрать и проиграть композицию"
743
 
744
-#: src/screen.cxx:179
745
-msgid "Consume mode is off"
746
-msgstr "Режим удаления после проигрывания выключен"
747
+#: src/HelpPage.cxx:161
748
+msgid "Delete playlist"
749
+msgstr "Удалить плейлист"
750
 
751
-#: src/screen.cxx:182
752
-#, c-format
753
-msgid "Crossfade %d seconds"
754
-msgstr "Плавный переход %d секунд"
755
+#: src/HelpPage.cxx:171
756
+#, fuzzy
757
+msgid "New search"
758
+msgstr "Поиск"
759
 
760
-#: src/screen.cxx:194
761
-msgid "Database updated"
762
-msgstr "База обновлена"
763
+#: src/HelpPage.cxx:172
764
+msgid "Select and play"
765
+msgstr "Выбрать и проиграть"
766
 
767
-#: src/screen.cxx:226
768
-msgid "Find mode: Wrapped"
769
-msgstr "Режим поиска: циклический"
770
+#: src/HelpPage.cxx:183
771
+msgid "View Lyrics"
772
+msgstr "Показать текст"
773
 
774
-#: src/screen.cxx:227
775
-msgid "Find mode: Normal"
776
-msgstr "Режим поиска: нормальный"
777
+#: src/HelpPage.cxx:184
778
+msgid "(Re)load lyrics"
779
+msgstr "(Пере)загрузить текст"
780
 
781
-#: src/screen.cxx:232
782
-msgid "Auto center mode: On"
783
-msgstr "Режим автоцентрирования: вкл."
784
+#. to translators: this hotkey aborts the retrieval of lyrics
785
+#. from the server
786
+#: src/HelpPage.cxx:187
787
+msgid "Interrupt retrieval"
788
+msgstr "Прервать загрузку"
789
 
790
-#: src/screen.cxx:233
791
-msgid "Auto center mode: Off"
792
-msgstr "Режим автоцентрирования: выкл."
793
+#: src/HelpPage.cxx:188
794
+msgid "Download lyrics for currently playing song"
795
+msgstr "Загрузить текст проигрываемой композиции"
796
 
797
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
798
-msgid "All tracks"
799
-msgstr "Все композиции"
800
+#: src/HelpPage.cxx:189
801
+msgid "Add or edit lyrics"
802
+msgstr "Добавить или редактировать текст"
803
 
804
-#: src/screen_artist.cxx:384
805
-msgid "All artists"
806
-msgstr "Все исполнители"
807
+#: src/HelpPage.cxx:190
808
+msgid "Save lyrics"
809
+msgstr "Сохранить текст"
810
 
811
-#: src/screen_artist.cxx:389
812
-#, c-format
813
-msgid "Albums of artist: %s"
814
-msgstr "Альбомы исполнителя: %s"
815
+#: src/HelpPage.cxx:191
816
+msgid "Delete saved lyrics"
817
+msgstr "Удалить сохранённый текст"
818
 
819
-#: src/screen_artist.cxx:398
820
-#, c-format
821
-msgid "All tracks of artist: %s"
822
-msgstr "Все композиции исполнителя: %s"
823
+#: src/HelpPage.cxx:198
824
+msgid "Enable/disable output"
825
+msgstr "Вкл/выкл аудиовыход"
826
 
827
-#: src/screen_artist.cxx:401
828
-#, c-format
829
-msgid "Album: %s - %s"
830
-msgstr "Альбом: %s - %s"
831
+#: src/HelpPage.cxx:205
832
+msgid "Write a message"
833
+msgstr "Напишите сообщение"
834
 
835
-#: src/screen_artist.cxx:405
836
-#, c-format
837
-msgid "Tracks of no album of artist: %s"
838
-msgstr "Композиции исполнителя: %s"
839
+#: src/HelpPage.cxx:210
840
+msgid "Keydef screen"
841
+msgstr "Экран клавиатурных комбинаций"
842
 
843
-#: src/screen_artist.cxx:450
844
-#, c-format
845
-msgid "Adding album %s..."
846
-msgstr "Добавляется альбом %s..."
847
+#: src/HelpPage.cxx:212
848
+msgid "Edit keydefs for selected command"
849
+msgstr "Изменить комбинации для выбранной команды"
850
 
851
-#: src/screen_artist.cxx:452
852
-#, c-format
853
-msgid "Adding %s..."
854
-msgstr "Добавляется %s..."
855
+#: src/HelpPage.cxx:213
856
+msgid "Remove selected keydef"
857
+msgstr "Удалить выбранную комбинацию"
858
 
859
-#: src/screen_browser.cxx:122
860
-#, c-format
861
-msgid "Loading playlist %s..."
862
-msgstr "Загружается плейлист %s..."
863
+#: src/HelpPage.cxx:214
864
+msgid "Add a keydef"
865
+msgstr "Добавить новую клавишу"
866
 
867
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
868
-#: src/screen_browser.cxx:279
869
-#, c-format
870
-msgid "Adding '%s' to queue"
871
-msgstr "В очередь добавляется '%s'"
872
+#: src/HelpPage.cxx:215
873
+msgid "Go up a level"
874
+msgstr "Перейти на уровень выше"
875
+
876
+#: src/HelpPage.cxx:216
877
+msgid "Apply and save changes"
878
+msgstr "Применить и сохранить изменения"
879
+
880
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
881
+msgid "Help"
882
+msgstr "Помощь"
883
+
884
+#: src/i18n.h:43
885
+msgid "y"
886
+msgstr "y"
887
+
888
+#: src/i18n.h:44
889
+msgid "n"
890
+msgstr "n"
891
+
892
+#: src/KeyName.cxx:31
893
+msgid "Undefined"
894
+msgstr "Не задано"
895
+
896
+#: src/KeyName.cxx:33
897
+msgid "Space"
898
+msgstr "Пробел"
899
+
900
+#: src/KeyName.cxx:35
901
+msgid "Enter"
902
+msgstr "Ввод"
903
+
904
+#: src/KeyName.cxx:37
905
+msgid "Backspace"
906
+msgstr "Backspace"
907
+
908
+#: src/KeyName.cxx:39
909
+msgid "Delete"
910
+msgstr "Delete"
911
+
912
+#: src/KeyName.cxx:41
913
+msgid "Up"
914
+msgstr "Вверх"
915
+
916
+#: src/KeyName.cxx:43
917
+msgid "Down"
918
+msgstr "Вниз"
919
+
920
+#: src/KeyName.cxx:45
921
+msgid "Left"
922
+msgstr "Влево"
923
+
924
+#: src/KeyName.cxx:47
925
+msgid "Right"
926
+msgstr "Вправо"
927
+
928
+#: src/KeyName.cxx:49
929
+msgid "Home"
930
+msgstr "В начало"
931
+
932
+#: src/KeyName.cxx:51
933
+msgid "End"
934
+msgstr "В конец"
935
+
936
+#: src/KeyName.cxx:53
937
+msgid "PageDown"
938
+msgstr "PageDown"
939
 
940
-#: src/screen_chat.cxx:59
941
+#: src/KeyName.cxx:55
942
+msgid "PageUp"
943
+msgstr "PageUp"
944
+
945
+#: src/KeyName.cxx:57
946
+msgid "Tab"
947
+msgstr "Tab"
948
+
949
+#: src/KeyName.cxx:59
950
+msgid "Shift+Tab"
951
+msgstr "Shift+Tab"
952
+
953
+#: src/KeyName.cxx:61
954
+msgid "Esc"
955
+msgstr "Esc"
956
+
957
+#: src/KeyName.cxx:63
958
+msgid "Insert"
959
+msgstr "Insert"
960
+
961
+#: src/KeyName.cxx:71
962
 #, c-format
963
-msgid ""
964
-"connected to MPD %u.%u.%u (you need at least \n"
965
-"version 0.17.0 to use the chat feature)"
966
+msgid "Ctrl-%c"
967
 msgstr ""
968
-"подключено к MPD %u.%u.%u (для использования чата \n"
969
-"необходима как минимум версия 0.17.0)"
970
 
971
-#: src/screen_chat.cxx:177
972
-msgid "Your message"
973
-msgstr "Ваше сообщение"
974
+#: src/KeyName.cxx:73
975
+#, c-format
976
+msgid "Alt-%c"
977
+msgstr ""
978
 
979
-#: src/screen_chat.cxx:186
980
-msgid "Message could not be sent"
981
-msgstr "Сообщение не может быть отправлено"
982
+#: src/ListWindow.cxx:491
983
+msgid "Range selection disabled"
984
+msgstr "Выбор диапазона выключен"
985
 
986
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
987
-msgid "Chat"
988
-msgstr "Чат"
989
+#: src/ListWindow.cxx:496
990
+msgid "Range selection enabled"
991
+msgstr "Выбор диапазона включен"
992
 
993
-#: src/screen_client.cxx:41
994
-msgid "Database update running..."
995
-msgstr "Идёт обновление базы..."
996
+#. translators: no lyrics were found for the song
997
+#: src/LyricsPage.cxx:236
998
+msgid "No lyrics"
999
+msgstr "Текст отсутствует"
1000
 
1001
-#: src/screen_client.cxx:49
1002
+#: src/LyricsPage.cxx:254
1003
 #, c-format
1004
-msgid "Database update of %s started"
1005
-msgstr "Обновление базы %s запущено"
1006
+msgid "Lyrics timeout occurred after %d seconds"
1007
+msgstr "Таймаут получения текста после %d секунд"
1008
 
1009
-#: src/screen_client.cxx:52
1010
-msgid "Database update started"
1011
-msgstr "Начато обновление базы"
1012
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1013
+#: src/LyricsPage.cxx:490
1014
+msgid "Lyrics"
1015
+msgstr "Текст"
1016
 
1017
-#. translators: the "delete" command is only possible
1018
-#. for playlists; the user attempted to delete a song
1019
-#. or a directory or something else
1020
-#: src/screen_file.cxx:200
1021
-msgid "Deleting this item is not possible"
1022
-msgstr "Удаление этого элемента невозможно"
1023
+#. translators: this message is displayed
1024
+#. while data is retrieved
1025
+#: src/LyricsPage.cxx:340
1026
+msgid "loading..."
1027
+msgstr "загружается..."
1028
 
1029
-#: src/screen_file.cxx:207
1030
-#, c-format
1031
-msgid "Delete playlist %s?"
1032
-msgstr "Удалить плейлист %s?"
1033
+#: src/LyricsPage.cxx:361
1034
+msgid "Editor not configured"
1035
+msgstr "Редактор не выбран"
1036
 
1037
-#. translators: MPD deleted the playlist, as requested by the
1038
-#. user
1039
-#: src/screen_file.cxx:227
1040
-msgid "Playlist deleted"
1041
-msgstr "Плейлист удалён"
1042
+#: src/LyricsPage.cxx:368
1043
+msgid "Do you really want to start an editor and edit these lyrics?"
1044
+msgstr "Вы действительно хотите запустить редактор для правки этого текста?"
1045
 
1046
-#. translators: caption of the browser screen
1047
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1048
-msgid "Browse"
1049
-msgstr "Навигация"
1050
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1051
+msgid "Can't start editor"
1052
+msgstr "Не удалось запустить редактор"
1053
 
1054
-#: src/screen_find.cxx:29
1055
-msgid "Find"
1056
-msgstr "Поиск"
1057
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1058
+#, fuzzy
1059
+msgid "Editor exited unexpectedly"
1060
+msgstr "Редактор неожиданно завершил работу (%d)"
1061
 
1062
-#: src/screen_find.cxx:30
1063
-msgid "Find backward"
1064
-msgstr "Поиск назад"
1065
+#. lyrics for the song were saved on hard disk
1066
+#: src/LyricsPage.cxx:439
1067
+msgid "Lyrics saved"
1068
+msgstr "Текст сохранён"
1069
 
1070
-#: src/screen_find.cxx:31
1071
-msgid "Jump"
1072
-msgstr "Перейти"
1073
+#: src/LyricsPage.cxx:445
1074
+msgid "Lyrics deleted"
1075
+msgstr "Текст удалён"
1076
+
1077
+#: src/LyricsPage.cxx:446
1078
+msgid "No saved lyrics"
1079
+msgstr "Сохранённый текст отсутствует"
1080
+
1081
+#: src/Main.cxx:167
1082
+#, fuzzy, c-format
1083
+msgid "Connecting to %s"
1084
+msgstr "Подключено к %s"
1085
 
1086
-#: src/screen_find.cxx:82
1087
+#: src/Main.cxx:187
1088
 #, c-format
1089
-msgid "Unable to find '%s'"
1090
-msgstr "Не удалось найти '%s'"
1091
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1092
+msgstr "Ошибка: MPD версии %d.%d.%d устарел (необходим %s)"
1093
 
1094
-#: src/screen_help.cxx:39
1095
-msgid "Movement"
1096
-msgstr "Перемещение"
1097
+#. To translators: these credits are shown
1098
+#. when ncmpc is started with "--version"
1099
+#: src/options.cxx:213 src/options.cxx:216
1100
+msgid "translator-credits"
1101
+msgstr "Перевод: Max Arnold <lwarxx@gmail.com>"
1102
 
1103
-#: src/screen_help.cxx:84
1104
-msgid "Global"
1105
-msgstr "Глобальные"
1106
+#: src/OutputsPage.cxx:87
1107
+#, c-format
1108
+msgid "Output '%s' enabled"
1109
+msgstr "Аудиовыход '%s' включен"
1110
 
1111
-#: src/screen_help.cxx:121
1112
-msgid "Play"
1113
-msgstr "Воспроизведение"
1114
+#: src/OutputsPage.cxx:98
1115
+#, c-format
1116
+msgid "Output '%s' disabled"
1117
+msgstr "Аудиовыход '%s' выключен"
1118
 
1119
-#: src/screen_help.cxx:124
1120
-msgid "Move song up"
1121
-msgstr "Переместить композицию вверх"
1122
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1123
+msgid "Outputs"
1124
+msgstr "Аудиовыходы"
1125
 
1126
-#: src/screen_help.cxx:125
1127
-msgid "Move song down"
1128
-msgstr "Переместить композицию вниз"
1129
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1130
+msgid "Shuffled queue"
1131
+msgstr "Очередь перемешана"
1132
 
1133
-#: src/screen_help.cxx:128
1134
-msgid "Center"
1135
-msgstr "Центрировать"
1136
+#: src/player_command.cxx:186
1137
+msgid "Cleared queue"
1138
+msgstr "Очередь очищена"
1139
 
1140
-#: src/screen_help.cxx:136
1141
-msgid "Enter directory/Select and play song"
1142
-msgstr "Перейти в директорию/Выбрать и проиграть композицию"
1143
+#. get path
1144
+#: src/QueuePage.cxx:307
1145
+msgid "Add"
1146
+msgstr "Добавить"
1147
 
1148
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1149
-msgid "Append song to queue"
1150
-msgstr "Добавить композицию в очередь"
1151
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1152
+msgid "Queue"
1153
+msgstr "Очередь"
1154
 
1155
-#: src/screen_help.cxx:140
1156
-msgid "Delete playlist"
1157
-msgstr "Удалить плейлист"
1158
+#: src/QueuePage.cxx:380
1159
+#, c-format
1160
+msgid "Queue on %s"
1161
+msgstr "Очередь на %s"
1162
 
1163
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1164
-msgid "Search"
1165
-msgstr "Поиск"
1166
+#. query the user for a filename
1167
+#: src/save_playlist.cxx:85
1168
+msgid "Save queue as"
1169
+msgstr "Сохранить очередь как"
1170
 
1171
-#: src/screen_help.cxx:151
1172
-msgid "Select and play"
1173
-msgstr "Выбрать и проиграть"
1174
+#: src/save_playlist.cxx:107
1175
+#, c-format
1176
+msgid "Replace %s?"
1177
+msgstr "Заменить %s?"
1178
 
1179
-#: src/screen_help.cxx:162
1180
-msgid "View Lyrics"
1181
-msgstr "Показать текст"
1182
+#. success
1183
+#: src/save_playlist.cxx:128
1184
+#, c-format
1185
+msgid "Saved %s"
1186
+msgstr "Сохранено в %s"
1187
 
1188
-#: src/screen_help.cxx:163
1189
-msgid "(Re)load lyrics"
1190
-msgstr "(Пере)загрузить текст"
1191
+#: src/screen_artist.cxx:186
1192
+#, c-format
1193
+msgid "All tracks of artist: %s"
1194
+msgstr "Все композиции исполнителя: %s"
1195
 
1196
-#. to translators: this hotkey aborts the retrieval of lyrics
1197
-#. from the server
1198
-#: src/screen_help.cxx:166
1199
-msgid "Interrupt retrieval"
1200
-msgstr "Прервать загрузку"
1201
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1202
+msgid "Album"
1203
+msgstr "Альбом"
1204
 
1205
-#: src/screen_help.cxx:167
1206
-msgid "Download lyrics for currently playing song"
1207
-msgstr "Загрузить текст проигрываемой композиции"
1208
+#: src/screen_artist.cxx:195
1209
+#, c-format
1210
+msgid "Tracks of no album of artist: %s"
1211
+msgstr "Композиции исполнителя: %s"
1212
 
1213
-#: src/screen_help.cxx:168
1214
-msgid "Add or edit lyrics"
1215
-msgstr "Добавить или редактировать текст"
1216
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1217
+msgid "Artist"
1218
+msgstr "Исполнитель"
1219
 
1220
-#: src/screen_help.cxx:169
1221
-msgid "Save lyrics"
1222
-msgstr "Сохранить текст"
1223
+#: src/screen_client.cxx:41
1224
+#, fuzzy
1225
+msgid "Database update running"
1226
+msgstr "Идёт обновление базы..."
1227
 
1228
-#: src/screen_help.cxx:170
1229
-msgid "Delete saved lyrics"
1230
-msgstr "Удалить сохранённый текст"
1231
+#: src/screen_client.cxx:48
1232
+#, c-format
1233
+msgid "Database update of %s started"
1234
+msgstr "Обновление базы %s запущено"
1235
 
1236
-#: src/screen_help.cxx:177
1237
-msgid "Enable/disable output"
1238
-msgstr "Вкл/выкл аудиовыход"
1239
+#: src/screen_client.cxx:51
1240
+msgid "Database update started"
1241
+msgstr "Начато обновление базы"
1242
 
1243
-#: src/screen_help.cxx:184
1244
-msgid "Write a message"
1245
-msgstr "Напишите сообщение"
1246
+#: src/screen.cxx:160
1247
+msgid "Repeat mode is on"
1248
+msgstr "Повтор включен"
1249
 
1250
-#: src/screen_help.cxx:189
1251
-msgid "Keydef screen"
1252
-msgstr "Экран клавиатурных комбинаций"
1253
+#: src/screen.cxx:161
1254
+msgid "Repeat mode is off"
1255
+msgstr "Повтор выключен"
1256
 
1257
-#: src/screen_help.cxx:191
1258
-msgid "Edit keydefs for selected command"
1259
-msgstr "Изменить комбинации для выбранной команды"
1260
+#: src/screen.cxx:165
1261
+msgid "Random mode is on"
1262
+msgstr "Случайный режим включен"
1263
 
1264
-#: src/screen_help.cxx:192
1265
-msgid "Remove selected keydef"
1266
-msgstr "Удалить выбранную комбинацию"
1267
+#: src/screen.cxx:166
1268
+msgid "Random mode is off"
1269
+msgstr "Случайный режим выключен"
1270
 
1271
-#: src/screen_help.cxx:193
1272
-msgid "Add a keydef"
1273
-msgstr "Добавить новую клавишу"
1274
+#. "single" mode means
1275
+#. that MPD will
1276
+#. automatically stop
1277
+#. after playing one
1278
+#. single song
1279
+#: src/screen.cxx:175
1280
+msgid "Single mode is on"
1281
+msgstr "Одиночный режим включен"
1282
 
1283
-#: src/screen_help.cxx:194
1284
-msgid "Go up a level"
1285
-msgstr "Перейти на уровень выше"
1286
+#: src/screen.cxx:176
1287
+msgid "Single mode is off"
1288
+msgstr "Одиночный режим выключен"
1289
 
1290
-#: src/screen_help.cxx:195
1291
-msgid "Apply and save changes"
1292
-msgstr "Применить и сохранить изменения"
1293
+#. "consume" mode means
1294
+#. that MPD removes each
1295
+#. song which has
1296
+#. finished playing
1297
+#: src/screen.cxx:184
1298
+msgid "Consume mode is on"
1299
+msgstr "Режим удаления после проигрывания включен"
1300
 
1301
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1302
-msgid "Help"
1303
-msgstr "Помощь"
1304
+#: src/screen.cxx:185
1305
+msgid "Consume mode is off"
1306
+msgstr "Режим удаления после проигрывания выключен"
1307
 
1308
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1309
-msgid "Error: Screen too small"
1310
-msgstr "Ошибка: экран слишком мал"
1311
+#: src/screen.cxx:188
1312
+#, c-format
1313
+msgid "Crossfade %d seconds"
1314
+msgstr "Плавный переход %d секунд"
1315
 
1316
-#: src/screen_keydef.cxx:141
1317
-msgid "You have new key bindings"
1318
-msgstr "Новые клавиатурные комбинации задействованы"
1319
+#: src/screen.cxx:200
1320
+msgid "Database updated"
1321
+msgstr "База обновлена"
1322
 
1323
-#: src/screen_keydef.cxx:143
1324
-msgid "Keybindings unchanged."
1325
-msgstr "Клавиатурные комбинации не изменились."
1326
+#: src/screen.cxx:250
1327
+msgid "Find mode: Wrapped"
1328
+msgstr "Режим поиска: циклический"
1329
 
1330
-#: src/screen_keydef.cxx:153
1331
-#, c-format
1332
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1333
-msgstr "Ошибка: не удалось создать директорию ~/.ncmpc - %s"
1334
+#: src/screen.cxx:251
1335
+msgid "Find mode: Normal"
1336
+msgstr "Режим поиска: нормальный"
1337
 
1338
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1339
-#, c-format
1340
-msgid "Error: %s - %s"
1341
-msgstr "Ошибка: %s - %s"
1342
+#: src/screen.cxx:256
1343
+msgid "Auto center mode: On"
1344
+msgstr "Режим автоцентрирования: вкл."
1345
+
1346
+#: src/screen.cxx:257
1347
+msgid "Auto center mode: Off"
1348
+msgstr "Режим автоцентрирования: выкл."
1349
+
1350
+#: src/screen_find.cxx:31
1351
+msgid "Find"
1352
+msgstr "Поиск"
1353
 
1354
-#: src/screen_keydef.cxx:171
1355
+#: src/screen_find.cxx:32
1356
+msgid "Find backward"
1357
+msgstr "Поиск назад"
1358
+
1359
+#: src/screen_find.cxx:33
1360
+msgid "Jump"
1361
+msgstr "Перейти"
1362
+
1363
+#: src/screen_find.cxx:79
1364
 #, c-format
1365
-msgid "Wrote %s"
1366
-msgstr "Записано %s"
1367
+msgid "Unable to find '%s'"
1368
+msgstr "Не удалось найти '%s'"
1369
 
1370
-#: src/screen_keydef.cxx:250
1371
+#: src/screen_keydef.cxx:161
1372
 msgid "Deleted"
1373
 msgstr "Удалено"
1374
 
1375
-#: src/screen_keydef.cxx:265
1376
+#: src/screen_keydef.cxx:177
1377
 #, c-format
1378
 msgid "Enter new key for %s: "
1379
 msgstr "Нажмите новую клавишу для %s: "
1380
 
1381
-#: src/screen_keydef.cxx:276
1382
+#: src/screen_keydef.cxx:187
1383
 msgid "Ctrl-Space can't be used"
1384
 msgstr "Ctrl+Space не может использоваться"
1385
 
1386
-#: src/screen_keydef.cxx:282
1387
+#: src/screen_keydef.cxx:193
1388
 #, c-format
1389
 msgid "Error: key %s is already used for %s"
1390
 msgstr "Ошибка: клавиша %s уже используется для %s"
1391
 
1392
-#: src/screen_keydef.cxx:291
1393
+#: src/screen_keydef.cxx:202
1394
 #, c-format
1395
 msgid "Assigned %s to %s"
1396
 msgstr "Назначено %s для %s"
1397
 
1398
-#: src/screen_keydef.cxx:317
1399
-msgid "===> Apply key bindings "
1400
-msgstr "===> Применить клавиатурные комбинации "
1401
-
1402
-#: src/screen_keydef.cxx:319
1403
-msgid "===> Apply & Save key bindings  "
1404
-msgstr "===> Применить и сохранить клавиатурные комбинации  "
1405
-
1406
-#: src/screen_keydef.cxx:347
1407
+#: src/screen_keydef.cxx:229
1408
 msgid "Add new key"
1409
 msgstr "Добавить новую клавишу"
1410
 
1411
-#: src/screen_keydef.cxx:410
1412
-msgid "Note: Did you forget to 'Apply' your changes?"
1413
-msgstr "Внимание: вы не забыли применить сделанные изменения?"
1414
-
1415
-#: src/screen_keydef.cxx:417
1416
-msgid "Edit key bindings"
1417
-msgstr "Изменение клавиатурных комбинаций"
1418
-
1419
-#: src/screen_keydef.cxx:419
1420
+#: src/screen_keydef.cxx:251
1421
 #, c-format
1422
 msgid "Edit keys for %s"
1423
 msgstr "Изменение клавиатурных комбинаций для %s"
1424
 
1425
-#. translators: no lyrics were found for the song
1426
-#: src/screen_lyrics.cxx:208
1427
-msgid "No lyrics"
1428
-msgstr "Текст отсутствует"
1429
-
1430
-#: src/screen_lyrics.cxx:226
1431
-#, c-format
1432
-msgid "Lyrics timeout occurred after %d seconds"
1433
-msgstr "Таймаут получения текста после %d секунд"
1434
-
1435
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1436
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1437
-msgid "Lyrics"
1438
-msgstr "Текст"
1439
-
1440
-#. translators: this message is displayed
1441
-#. while data is retrieved
1442
-#: src/screen_lyrics.cxx:330
1443
-msgid "loading..."
1444
-msgstr "загружается..."
1445
-
1446
-#: src/screen_lyrics.cxx:361
1447
-msgid "Editor not configured"
1448
-msgstr "Редактор не выбран"
1449
-
1450
-#: src/screen_lyrics.cxx:367
1451
-msgid "Do you really want to start an editor and edit these lyrics?"
1452
-msgstr "Вы действительно хотите запустить редактор для правки этого текста?"
1453
+#: src/screen_keydef.cxx:393
1454
+msgid "You have new key bindings"
1455
+msgstr "Новые клавиатурные комбинации задействованы"
1456
 
1457
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1458
-msgid "Can't start editor"
1459
-msgstr "Не удалось запустить редактор"
1460
+#: src/screen_keydef.cxx:395
1461
+msgid "Keybindings unchanged."
1462
+msgstr "Клавиатурные комбинации не изменились."
1463
 
1464
-#: src/screen_lyrics.cxx:411
1465
-#, c-format
1466
-msgid "Editor exited unexpectedly (%d)"
1467
-msgstr "Редактор неожиданно завершил работу (%d)"
1468
+#: src/screen_keydef.cxx:405
1469
+#, fuzzy
1470
+msgid "Unable to write configuration"
1471
+msgstr "Неопределённое значение клавиатурной комбинации"
1472
 
1473
-#: src/screen_lyrics.cxx:414
1474
+#: src/screen_keydef.cxx:421
1475
 #, c-format
1476
-msgid "Editor exited unexpectedly (signal %d)"
1477
-msgstr "Редактор неожиданно завершил работу (по сигналу %d)"
1478
-
1479
-#. lyrics for the song were saved on hard disk
1480
-#: src/screen_lyrics.cxx:436
1481
-msgid "Lyrics saved"
1482
-msgstr "Текст сохранён"
1483
-
1484
-#: src/screen_lyrics.cxx:443
1485
-msgid "Lyrics deleted"
1486
-msgstr "Текст удалён"
1487
-
1488
-#: src/screen_lyrics.cxx:446
1489
-msgid "No saved lyrics"
1490
-msgstr "Сохранённый текст отсутствует"
1491
+msgid "Wrote %s"
1492
+msgstr "Записано %s"
1493
 
1494
-#: src/screen_outputs.cxx:60
1495
-#, c-format
1496
-msgid "Output '%s' enabled"
1497
-msgstr "Аудиовыход '%s' включен"
1498
+#: src/screen_keydef.cxx:433
1499
+msgid "===> Apply key bindings "
1500
+msgstr "===> Применить клавиатурные комбинации "
1501
 
1502
-#: src/screen_outputs.cxx:71
1503
-#, c-format
1504
-msgid "Output '%s' disabled"
1505
-msgstr "Аудиовыход '%s' выключен"
1506
+#: src/screen_keydef.cxx:435
1507
+msgid "===> Apply & Save key bindings  "
1508
+msgstr "===> Применить и сохранить клавиатурные комбинации  "
1509
 
1510
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1511
-msgid "Outputs"
1512
-msgstr "Аудиовыходы"
1513
+#: src/screen_keydef.cxx:472
1514
+msgid "Edit key bindings"
1515
+msgstr "Изменение клавиатурных комбинаций"
1516
 
1517
-#. get path
1518
-#: src/screen_queue.cxx:274
1519
-msgid "Add"
1520
-msgstr "Добавить"
1521
+#: src/screen_keydef.cxx:554
1522
+msgid "Note: Did you forget to 'Apply' your changes?"
1523
+msgstr "Внимание: вы не забыли применить сделанные изменения?"
1524
 
1525
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1526
-msgid "Queue"
1527
-msgstr "Очередь"
1528
+#: src/screen_keydef.cxx:604
1529
+msgid "Keys"
1530
+msgstr ""
1531
 
1532
-#: src/screen_queue.cxx:384
1533
-#, c-format
1534
-msgid "Queue on %s"
1535
-msgstr "Очередь на %s"
1536
+#: src/screen_utils.cxx:124
1537
+msgid "Password"
1538
+msgstr "Пароль"
1539
 
1540
-#: src/screen_search.cxx:48
1541
+#: src/SearchPage.cxx:51
1542
 msgid "artist"
1543
 msgstr "artist"
1544
 
1545
-#: src/screen_search.cxx:49
1546
+#: src/SearchPage.cxx:52
1547
 msgid "album"
1548
 msgstr "album"
1549
 
1550
-#: src/screen_search.cxx:50
1551
+#: src/SearchPage.cxx:53
1552
 msgid "title"
1553
 msgstr "title"
1554
 
1555
-#: src/screen_search.cxx:51
1556
+#: src/SearchPage.cxx:54
1557
 msgid "track"
1558
 msgstr "track"
1559
 
1560
-#: src/screen_search.cxx:52
1561
+#: src/SearchPage.cxx:55
1562
 msgid "name"
1563
 msgstr "name"
1564
 
1565
-#: src/screen_search.cxx:53
1566
+#: src/SearchPage.cxx:56
1567
 msgid "genre"
1568
 msgstr "genre"
1569
 
1570
-#: src/screen_search.cxx:54
1571
+#: src/SearchPage.cxx:57
1572
 msgid "date"
1573
 msgstr "date"
1574
 
1575
-#: src/screen_search.cxx:55
1576
+#: src/SearchPage.cxx:58
1577
 msgid "composer"
1578
 msgstr "composer"
1579
 
1580
-#: src/screen_search.cxx:56
1581
+#: src/SearchPage.cxx:59
1582
 msgid "performer"
1583
 msgstr "performer"
1584
 
1585
-#: src/screen_search.cxx:57
1586
+#: src/SearchPage.cxx:60
1587
 msgid "comment"
1588
 msgstr "comment"
1589
 
1590
-#: src/screen_search.cxx:65
1591
+#: src/SearchPage.cxx:68
1592
 msgid "file"
1593
 msgstr "file"
1594
 
1595
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1596
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1597
 msgid "Title"
1598
 msgstr "Композиция"
1599
 
1600
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1601
-msgid "Artist"
1602
-msgstr "Исполнитель"
1603
-
1604
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1605
-msgid "Album"
1606
-msgstr "Альбом"
1607
-
1608
-#: src/screen_search.cxx:85
1609
+#: src/SearchPage.cxx:88
1610
 msgid "Filename"
1611
 msgstr "Имя файла"
1612
 
1613
-#: src/screen_search.cxx:86
1614
+#: src/SearchPage.cxx:89
1615
 msgid "Artist + Title"
1616
 msgstr "Исполнитель + Композиция"
1617
 
1618
-#: src/screen_search.cxx:244
1619
-#, c-format
1620
-msgid "No argument for search tag %s"
1621
-msgstr "Не задан критерий поиска по тегу %s"
1622
-
1623
-#: src/screen_search.cxx:253
1624
+#: src/SearchPage.cxx:270
1625
 #, c-format
1626
 msgid "Bad search tag %s"
1627
 msgstr "Неверный тег поиска %s"
1628
 
1629
-#. if( pattern==nullptr )
1630
-#. search_new(screen, c);
1631
-#. else
1632
-#: src/screen_search.cxx:400
1633
-#, c-format
1634
-msgid "Press %s for a new search"
1635
-msgstr "Нажмите %s для нового поиска"
1636
-
1637
-#: src/screen_search.cxx:427
1638
-#, c-format
1639
-msgid "Search: %s"
1640
-msgstr "Поиск: %s"
1641
-
1642
-#: src/screen_search.cxx:430
1643
+#: src/SearchPage.cxx:284
1644
 #, c-format
1645
-msgid "Search: Results for %s [%s]"
1646
-msgstr "Поиск: результаты поиска '%s' в поле [%s]"
1647
+msgid "No argument for search tag %s"
1648
+msgstr "Не задан критерий поиска по тегу %s"
1649
 
1650
-#: src/screen_search.cxx:434
1651
-#, c-format
1652
-msgid "Search: Press %s for a new search [%s]"
1653
-msgstr "Поиск: нажмите %s для поиска по полю [%s]"
1654
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1655
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1656
+msgid "Search"
1657
+msgstr "Поиск"
1658
 
1659
-#: src/screen_search.cxx:458
1660
+#: src/SearchPage.cxx:436
1661
 #, c-format
1662
 msgid "Search mode: %s"
1663
 msgstr "Поле для поиска: %s"
1664
 
1665
-#: src/screen_song.cxx:54
1666
+#: src/SongPage.cxx:67
1667
 msgid "Length"
1668
 msgstr "Длительность"
1669
 
1670
-#: src/screen_song.cxx:55
1671
+#: src/SongPage.cxx:68
1672
 msgid "Position"
1673
 msgstr "Позиция"
1674
 
1675
-#: src/screen_song.cxx:56
1676
+#: src/SongPage.cxx:69
1677
 msgid "Composer"
1678
 msgstr "Композитор"
1679
 
1680
-#: src/screen_song.cxx:57
1681
+#: src/SongPage.cxx:70
1682
 msgid "Name"
1683
 msgstr "Название"
1684
 
1685
-#: src/screen_song.cxx:58
1686
+#: src/SongPage.cxx:71
1687
 msgid "Disc"
1688
 msgstr "Диск"
1689
 
1690
-#: src/screen_song.cxx:59
1691
+#: src/SongPage.cxx:72
1692
 msgid "Track"
1693
 msgstr "Дорожка"
1694
 
1695
-#: src/screen_song.cxx:60
1696
+#: src/SongPage.cxx:73
1697
 msgid "Date"
1698
 msgstr "Дата"
1699
 
1700
-#: src/screen_song.cxx:61
1701
+#: src/SongPage.cxx:74
1702
 msgid "Genre"
1703
 msgstr "Жанр"
1704
 
1705
-#: src/screen_song.cxx:62
1706
+#: src/SongPage.cxx:75
1707
 msgid "Comment"
1708
 msgstr "Комментарий"
1709
 
1710
-#: src/screen_song.cxx:63
1711
+#: src/SongPage.cxx:76
1712
 msgid "Path"
1713
 msgstr "Путь"
1714
 
1715
-#: src/screen_song.cxx:64
1716
+#: src/SongPage.cxx:77
1717
 msgid "Bitrate"
1718
 msgstr "Битрейт"
1719
 
1720
-#: src/screen_song.cxx:65
1721
+#: src/SongPage.cxx:78
1722
 msgid "Format"
1723
 msgstr "Формат"
1724
 
1725
-#: src/screen_song.cxx:82
1726
+#: src/SongPage.cxx:95
1727
 msgid "Number of artists"
1728
 msgstr "Количество исполнителей"
1729
 
1730
-#: src/screen_song.cxx:83
1731
+#: src/SongPage.cxx:96
1732
 msgid "Number of albums"
1733
 msgstr "Количество альбомов"
1734
 
1735
-#: src/screen_song.cxx:84
1736
+#: src/SongPage.cxx:97
1737
 msgid "Number of songs"
1738
 msgstr "Количество композиций"
1739
 
1740
-#: src/screen_song.cxx:85
1741
+#: src/SongPage.cxx:98
1742
 msgid "Uptime"
1743
 msgstr "Время работы"
1744
 
1745
-#: src/screen_song.cxx:86
1746
+#: src/SongPage.cxx:99
1747
 msgid "Most recent db update"
1748
 msgstr "Последнее обновление базы"
1749
 
1750
-#: src/screen_song.cxx:87
1751
+#: src/SongPage.cxx:100
1752
 msgid "Playtime"
1753
 msgstr "Время воспроизведения"
1754
 
1755
-#: src/screen_song.cxx:88
1756
+#: src/SongPage.cxx:101
1757
 msgid "DB playtime"
1758
 msgstr "Время воспроизведения базы"
1759
 
1760
 # Several translations for Song Viewer:
1761
-#: src/screen_song.cxx:173
1762
+#: src/SongPage.cxx:204
1763
 msgid "Song viewer"
1764
 msgstr "Информация о композиции"
1765
 
1766
-#: src/screen_song.cxx:337
1767
+#: src/SongPage.cxx:370
1768
 msgid "MPD statistics"
1769
 msgstr "Статистика MPD"
1770
 
1771
-#: src/screen_song.cxx:427
1772
+#: src/SongPage.cxx:455
1773
 msgid "Selected song"
1774
 msgstr "Выбранная композиция"
1775
 
1776
-#: src/screen_song.cxx:437
1777
+#: src/SongPage.cxx:465
1778
 msgid "Currently playing song"
1779
 msgstr "Проигрываемая композиция"
1780
 
1781
-#: src/screen_song.cxx:442
1782
+#: src/SongPage.cxx:470
1783
 #, c-format
1784
 msgid "%d kbps"
1785
 msgstr "%d кбит/с"
1786
 
1787
-#. NOTE: if one day a translator decides to use a multi-byte character
1788
-#. for one of the yes/no keys, we'll have to parse it properly
1789
-#: src/screen_utils.cxx:80
1790
-#, c-format
1791
-msgid "%s [%s/%s] "
1792
-msgstr "%s [%s/%s] "
1793
-
1794
-#: src/screen_utils.cxx:121
1795
-msgid "Password"
1796
-msgstr "Пароль"
1797
+#: src/SongPage.cxx:554
1798
+msgid "Song"
1799
+msgstr ""
1800
 
1801
-#: src/status_bar.cxx:121
1802
+#: src/StatusBar.cxx:104
1803
 msgid "Playing:"
1804
 msgstr "Проигрывается:"
1805
 
1806
-#: src/status_bar.cxx:124
1807
+#: src/StatusBar.cxx:108
1808
 msgid "[Paused]"
1809
 msgstr "[Пауза]"
1810
 
1811
-#: src/title_bar.cxx:99
1812
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1813
+msgid "Unknown color"
1814
+msgstr "Неизвестный цвет"
1815
+
1816
+#: src/Styles.cxx:333
1817
+msgid "Unknown color field"
1818
+msgstr "Неизвестное цветовое поле"
1819
+
1820
+#: src/Styles.cxx:375
1821
+msgid "Terminal lacks color capabilities"
1822
+msgstr "Терминал не поддерживает цвета"
1823
+
1824
+#: src/time_format.cxx:44
1825
+msgid "year"
1826
+msgstr ""
1827
+
1828
+#: src/time_format.cxx:46
1829
+msgid "years"
1830
+msgstr ""
1831
+
1832
+#: src/time_format.cxx:54
1833
+msgid "week"
1834
+msgstr ""
1835
+
1836
+#: src/time_format.cxx:57
1837
+msgid "weeks"
1838
+msgstr ""
1839
+
1840
+#: src/time_format.cxx:65
1841
+msgid "day"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:68
1845
+msgid "days"
1846
+msgstr ""
1847
+
1848
+#: src/TitleBar.cxx:100
1849
 msgid "Volume n/a"
1850
 msgstr "Громкость н/д"
1851
 
1852
-#: src/title_bar.cxx:101
1853
+#: src/TitleBar.cxx:102
1854
 #, c-format
1855
 msgid "Volume %d%%"
1856
 msgstr "Громкость %d%%"
1857
 
1858
+#~ msgid "Add url/file to queue"
1859
+#~ msgstr "Добавить url/файл в очередь"
1860
+
1861
+#~ msgid "Move song up"
1862
+#~ msgstr "Переместить композицию вверх"
1863
+
1864
+#~ msgid "Move song down"
1865
+#~ msgstr "Переместить композицию вниз"
1866
+
1867
+#~ msgid "Press %s for a new search"
1868
+#~ msgstr "Нажмите %s для нового поиска"
1869
+
1870
+#~ msgid "Search: %s"
1871
+#~ msgstr "Поиск: %s"
1872
+
1873
+#~ msgid "Search: Results for %s [%s]"
1874
+#~ msgstr "Поиск: результаты поиска '%s' в поле [%s]"
1875
+
1876
+#~ msgid "Search: Press %s for a new search [%s]"
1877
+#~ msgstr "Поиск: нажмите %s для поиска по полю [%s]"
1878
+
1879
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1880
+#~ msgstr "Подключение к %s...  [Нажмите %s для отмены]"
1881
+
1882
+#~ msgid "press %s for the key editor"
1883
+#~ msgstr "%s - редактор клавиш"
1884
+
1885
+#~ msgid "Album: %s - %s"
1886
+#~ msgstr "Альбом: %s - %s"
1887
+
1888
+#~ msgid "Adding album %s..."
1889
+#~ msgstr "Добавляется альбом %s..."
1890
+
1891
+#~ msgid "Adding %s..."
1892
+#~ msgstr "Добавляется %s..."
1893
+
1894
+#~ msgid ""
1895
+#~ "connected to MPD %u.%u.%u (you need at least \n"
1896
+#~ "version 0.17.0 to use the chat feature)"
1897
+#~ msgstr ""
1898
+#~ "подключено к MPD %u.%u.%u (для использования чата \n"
1899
+#~ "необходима как минимум версия 0.17.0)"
1900
+
1901
+#~ msgid "Error: Screen too small"
1902
+#~ msgstr "Ошибка: экран слишком мал"
1903
+
1904
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1905
+#~ msgstr "Ошибка: не удалось создать директорию ~/.ncmpc - %s"
1906
+
1907
+#~ msgid "Error: %s - %s"
1908
+#~ msgstr "Ошибка: %s - %s"
1909
+
1910
+#~ msgid "Editor exited unexpectedly (signal %d)"
1911
+#~ msgstr "Редактор неожиданно завершил работу (по сигналу %d)"
1912
+
1913
+#~ msgid "%s [%s/%s] "
1914
+#~ msgstr "%s [%s/%s] "
1915
+
1916
 #~ msgid "unknown"
1917
 #~ msgstr "неизвестно"
1918
 
1919
@@ -1239,9 +1251,6 @@
1920
 #~ msgid "Warning: Unknown color - %s\n"
1921
 #~ msgstr "Внимание: неизвестный цвет - %s\n"
1922
 
1923
-#~ msgid "Connected to %s"
1924
-#~ msgstr "Подключено к %s"
1925
-
1926
 #~ msgid "Shuffled playlist"
1927
 #~ msgstr "Плейлист перемешан"
1928
 
1929
ncmpc-0.30.tar.xz/po/sk.po -> ncmpc-0.32.tar.xz/po/sk.po Changed
1938
 
1
@@ -6,7 +6,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.11.1\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-04-07 01:36+0000\n"
8
 "Last-Translator: Roman Horník <Unknown>\n"
9
 "Language-Team: sk <sk@li.org>\n"
10
@@ -17,423 +17,358 @@
11
 "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Neznámy príkaz"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Všetky stopy"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Varovanie: Neznáme farebné pole - %s\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminál nemá podporu pre zmenu farieb"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Albumy od interpreta: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminál nemá schopnosti zobrazovania farieb"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Pridávam '%s' do playlistu"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Všetci interpreti"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Kláves %s priradený k %s a %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Okno nastavenia klávesov"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Ukončiť"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Presunúť kurzor nahor"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Presunúť kurzor nadol"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Presunúť na vrch obrazovky"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Presunúť kurzor do stredu obrazovky"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Presunúť kurzor na spodok obrazovky"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Presunúť kurzor na začiatok zoznamu"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Presunúť kurzor na koniec zoznamu"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Page up"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Page down"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Výber rozsahu"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Posun o jeden riadok nadol"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Posun o jeden riadok nahor"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Posun o polovicu obrazovky nahor"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Posun o polovicu obrazovky nadol"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Zvoľiť práve prehrávanú skladbu"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Okno s pomocou"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Obrazovka s nastavením kláves"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Okno listovania"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Prehrať/Vstúpiť do adresára"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pauza"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Stop"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Orezať"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Ďalšia stopa"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Predchádzajúca stopa"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Posunúť vpred"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Posunúť vzad"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Pridať hlasitosť"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Stíšiť"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Vybrať/odvybrať skladbu v playliste"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Vybrať všetky položky v zozname"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Vymazať skladbu z playlistu"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Prepnúť režim opakovania"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Prepnúť náhodný režim"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Prepnúť jednotlivý režim"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Prepnúť spotrebný režim"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Prepnúť režím prelínania skladieb"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Spustiť aktualizáciu hudobnej databáze"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Pridať url/súbor do playlistu"
286
+msgid "Append song to queue"
287
+msgstr "Pridať skladbu do playlistu"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Prejsť do koreňového adresára"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Prejsť do nadradeného adresára"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Nájsť skladbu v prehliadači"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Presunúť položku nahor"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Presunúť položku nadol"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Obnoviť obrazovku"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Prepnúť režim vyhľadávania"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Prepnúť automatický režim centrovania"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Ďalšia obrazovka"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Predchádzajúca obrazovka"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Prepnúť na predchádzajúcu obrazovku"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Hľadať vpred"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Pokračovať v hľadaní vpred"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Hľadať vzad"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Pokračovať v hľadaní vzad"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Skok na"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Okno interpreta"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Okno vyhľadávania"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Zmeniť režim vyhľadávania"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Zobraziť vybranú a momentálne prehrávanú pieseň"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Okno textu piesne"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Akcia prerušenia"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Obnoviť text"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Obrazovka výstupov"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Ďalšia obrazovka"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Neurčené"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Medzera"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Delete"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Hore"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Dole"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Vľavo"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Vpravo"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Kláves %s priradený k %s a %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Chyba"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Chybne zadaná definícia klávesovej skratky"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Neznámy príkaz"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Neúplná konfigurácie klavesových skratiek"
545
 
546
@@ -441,820 +376,888 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Nesprávny typ zobrazovania času"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Chýba '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Nesprávny názov farby"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Neúplná definícia farby"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Neplatné číslo"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Zle zadaná definícia farby"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Neznámy názov obrazovky"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Neplatný režim vyhľadávania"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Neznámy režim vyhľadávania"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Neznámy parameter konfigurácie"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "a"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminál nemá podporu pre zmenu farieb"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Zmazanie tejto položky nie je možné"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Výber rozsahu vypnutý"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Vymazať playlist"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Výber rozsahu zapnutý"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Zrušené"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Pripájam sa k %s... [Stlačte %s pre zrušenie]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Playlist vymazaný"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Listovať"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Chyba: MPD verzie %d.%d.%d je príliš staré (%s je potrebná)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Nahrávam playlist %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "stlačte %s pre editor klávesov"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Pohyb"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Jozef Riha <jose1711@gmail.com>\n"
675
-"\n"
676
-"Launchpad Contributions:\n"
677
-"  Jose Riha https://launchpad.net/~jose1711\n"
678
-"  Roman Horník https://launchpad.net/~roman.hornik"
679
+#: src/HelpPage.cxx:105
680
+msgid "Global"
681
+msgstr "Globálne"
682
 
683
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
684
-msgid "Shuffled queue"
685
-msgstr ""
686
+#: src/HelpPage.cxx:142
687
+msgid "Play"
688
+msgstr "Prehrávať"
689
 
690
-#: src/player_command.cxx:184
691
-msgid "Cleared queue"
692
-msgstr ""
693
+#: src/HelpPage.cxx:149
694
+msgid "Center"
695
+msgstr "Do stredu"
696
 
697
-#. query the user for a filename
698
-#: src/save_playlist.cxx:109
699
-msgid "Save queue as"
700
-msgstr ""
701
+#: src/HelpPage.cxx:157
702
+msgid "Enter directory/Select and play song"
703
+msgstr "Vstúpiť do adresára/Vybrať a prehrať skladbu"
704
 
705
-#: src/save_playlist.cxx:140
706
-#, fuzzy, c-format
707
-msgid "Replace %s?"
708
-msgstr "Nahradiť %s [%s/%s] ? "
709
+#: src/HelpPage.cxx:161
710
+msgid "Delete playlist"
711
+msgstr "Vymazať playlist"
712
 
713
-#. translators: a dialog was aborted by the user
714
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
715
-#: src/screen_lyrics.cxx:370
716
-msgid "Aborted"
717
-msgstr "Zrušené"
718
+#: src/HelpPage.cxx:171
719
+#, fuzzy
720
+msgid "New search"
721
+msgstr "Hľadanie"
722
 
723
-#. success
724
-#: src/save_playlist.cxx:171
725
-#, c-format
726
-msgid "Saved %s"
727
-msgstr "Uložený %s"
728
+#: src/HelpPage.cxx:172
729
+msgid "Select and play"
730
+msgstr "Vybrať a prehrať"
731
 
732
-#: src/screen.cxx:154
733
-msgid "Repeat mode is on"
734
-msgstr "Režim opakovania zapnutý"
735
+#: src/HelpPage.cxx:183
736
+msgid "View Lyrics"
737
+msgstr "Zobraziť text piesne"
738
 
739
-#: src/screen.cxx:155
740
-msgid "Repeat mode is off"
741
-msgstr "Režim opakovania vypnutý"
742
+#: src/HelpPage.cxx:184
743
+msgid "(Re)load lyrics"
744
+msgstr "(Znovu)načítať text"
745
 
746
-#: src/screen.cxx:159
747
-msgid "Random mode is on"
748
-msgstr "Náhodný režim zapnutý"
749
+#. to translators: this hotkey aborts the retrieval of lyrics
750
+#. from the server
751
+#: src/HelpPage.cxx:187
752
+msgid "Interrupt retrieval"
753
+msgstr "Zachytené prerušenie"
754
 
755
-#: src/screen.cxx:160
756
-msgid "Random mode is off"
757
-msgstr "Náhodný režim vypnutý"
758
+#: src/HelpPage.cxx:188
759
+msgid "Download lyrics for currently playing song"
760
+msgstr "Stiahnuť text pre momentálne prehrávanú pieseň"
761
 
762
-#. "single" mode means
763
-#. that MPD will
764
-#. automatically stop
765
-#. after playing one
766
-#. single song
767
-#: src/screen.cxx:169
768
-msgid "Single mode is on"
769
-msgstr "Jednotlivý režim zapnutý"
770
+#: src/HelpPage.cxx:189
771
+#, fuzzy
772
+msgid "Add or edit lyrics"
773
+msgstr "Uložiť text piesne"
774
 
775
-#: src/screen.cxx:170
776
-msgid "Single mode is off"
777
-msgstr "Jednotlivý režim vypnutý"
778
+#: src/HelpPage.cxx:190
779
+msgid "Save lyrics"
780
+msgstr "Uložiť text piesne"
781
 
782
-#. "consume" mode means
783
-#. that MPD removes each
784
-#. song which has
785
-#. finished playing
786
-#: src/screen.cxx:178
787
-msgid "Consume mode is on"
788
-msgstr "Spotrebný režim zapnutý"
789
+#: src/HelpPage.cxx:191
790
+#, fuzzy
791
+msgid "Delete saved lyrics"
792
+msgstr "Uložiť text piesne"
793
 
794
-#: src/screen.cxx:179
795
-msgid "Consume mode is off"
796
-msgstr "Spotrebný režim vypnutý"
797
+#: src/HelpPage.cxx:198
798
+msgid "Enable/disable output"
799
+msgstr "Povoliť/vypnúť výstup"
800
 
801
-#: src/screen.cxx:182
802
-#, c-format
803
-msgid "Crossfade %d seconds"
804
-msgstr "Prelínanie %d sekúnd"
805
+#: src/HelpPage.cxx:205
806
+msgid "Write a message"
807
+msgstr ""
808
 
809
-#: src/screen.cxx:194
810
-msgid "Database updated"
811
-msgstr "Databáza aktualizovaná"
812
+#: src/HelpPage.cxx:210
813
+msgid "Keydef screen"
814
+msgstr "Obrazovka s nastavením kláves"
815
 
816
-#: src/screen.cxx:226
817
-msgid "Find mode: Wrapped"
818
-msgstr "Režim vyhľadávania: Zabalený"
819
+#: src/HelpPage.cxx:212
820
+msgid "Edit keydefs for selected command"
821
+msgstr "Upraviť kláves pre vybraný príkaz"
822
 
823
-#: src/screen.cxx:227
824
-msgid "Find mode: Normal"
825
-msgstr "Režim vyhľadávanie: Normálny"
826
+#: src/HelpPage.cxx:213
827
+msgid "Remove selected keydef"
828
+msgstr "Odstrániť vybrané nastavenie kláves"
829
 
830
-#: src/screen.cxx:232
831
-msgid "Auto center mode: On"
832
-msgstr "Automatické centrovanie: Zapnuté"
833
+#: src/HelpPage.cxx:214
834
+#, fuzzy
835
+msgid "Add a keydef"
836
+msgstr "Pridať nový kláves"
837
 
838
-#: src/screen.cxx:233
839
-msgid "Auto center mode: Off"
840
-msgstr "Automatické centrovanie: Vypnuté"
841
+#: src/HelpPage.cxx:215
842
+msgid "Go up a level"
843
+msgstr "Prejsť o úroveň vyššie"
844
 
845
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
846
-msgid "All tracks"
847
-msgstr "Všetky stopy"
848
+#: src/HelpPage.cxx:216
849
+msgid "Apply and save changes"
850
+msgstr "Použiť a uložiť zmeny"
851
 
852
-#: src/screen_artist.cxx:384
853
-msgid "All artists"
854
-msgstr "Všetci interpreti"
855
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
856
+msgid "Help"
857
+msgstr "Pomoc"
858
 
859
-#: src/screen_artist.cxx:389
860
-#, c-format
861
-msgid "Albums of artist: %s"
862
-msgstr "Albumy od interpreta: %s"
863
+#: src/i18n.h:43
864
+msgid "y"
865
+msgstr "a"
866
 
867
-#: src/screen_artist.cxx:398
868
-#, c-format
869
-msgid "All tracks of artist: %s"
870
-msgstr "Všetky stopy od interpreta: %s"
871
+#: src/i18n.h:44
872
+msgid "n"
873
+msgstr "n"
874
 
875
-#: src/screen_artist.cxx:401
876
-#, c-format
877
-msgid "Album: %s - %s"
878
-msgstr "Album: %s - %s"
879
+#: src/KeyName.cxx:31
880
+msgid "Undefined"
881
+msgstr "Neurčené"
882
 
883
-#: src/screen_artist.cxx:405
884
-#, fuzzy, c-format
885
-msgid "Tracks of no album of artist: %s"
886
-msgstr "Albumy od interpreta: %s"
887
+#: src/KeyName.cxx:33
888
+msgid "Space"
889
+msgstr "Medzera"
890
 
891
-#: src/screen_artist.cxx:450
892
-#, fuzzy, c-format
893
-msgid "Adding album %s..."
894
-msgstr "Nahrávam playlist %s..."
895
+#: src/KeyName.cxx:35
896
+msgid "Enter"
897
+msgstr "Enter"
898
 
899
-#: src/screen_artist.cxx:452
900
-#, fuzzy, c-format
901
-msgid "Adding %s..."
902
-msgstr "Pridávam adresár %s...\n"
903
+#: src/KeyName.cxx:37
904
+msgid "Backspace"
905
+msgstr "Backspace"
906
 
907
-#: src/screen_browser.cxx:122
908
-#, c-format
909
-msgid "Loading playlist %s..."
910
-msgstr "Nahrávam playlist %s..."
911
+#: src/KeyName.cxx:39
912
+msgid "Delete"
913
+msgstr "Delete"
914
 
915
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
916
-#: src/screen_browser.cxx:279
917
-#, fuzzy, c-format
918
-msgid "Adding '%s' to queue"
919
-msgstr "Pridávam '%s' do playlistu"
920
+#: src/KeyName.cxx:41
921
+msgid "Up"
922
+msgstr "Hore"
923
+
924
+#: src/KeyName.cxx:43
925
+msgid "Down"
926
+msgstr "Dole"
927
+
928
+#: src/KeyName.cxx:45
929
+msgid "Left"
930
+msgstr "Vľavo"
931
+
932
+#: src/KeyName.cxx:47
933
+msgid "Right"
934
+msgstr "Vpravo"
935
+
936
+#: src/KeyName.cxx:49
937
+msgid "Home"
938
+msgstr "Home"
939
+
940
+#: src/KeyName.cxx:51
941
+msgid "End"
942
+msgstr "End"
943
+
944
+#: src/KeyName.cxx:53
945
+msgid "PageDown"
946
+msgstr "PageDown"
947
+
948
+#: src/KeyName.cxx:55
949
+msgid "PageUp"
950
+msgstr "PageUp"
951
 
952
-#: src/screen_chat.cxx:59
953
+#: src/KeyName.cxx:57
954
+msgid "Tab"
955
+msgstr "Tab"
956
+
957
+#: src/KeyName.cxx:59
958
+msgid "Shift+Tab"
959
+msgstr "Shift+Tab"
960
+
961
+#: src/KeyName.cxx:61
962
+msgid "Esc"
963
+msgstr "Esc"
964
+
965
+#: src/KeyName.cxx:63
966
+msgid "Insert"
967
+msgstr "Insert"
968
+
969
+#: src/KeyName.cxx:71
970
 #, c-format
971
-msgid ""
972
-"connected to MPD %u.%u.%u (you need at least \n"
973
-"version 0.17.0 to use the chat feature)"
974
+msgid "Ctrl-%c"
975
 msgstr ""
976
 
977
-#: src/screen_chat.cxx:177
978
-msgid "Your message"
979
+#: src/KeyName.cxx:73
980
+#, c-format
981
+msgid "Alt-%c"
982
 msgstr ""
983
 
984
-#: src/screen_chat.cxx:186
985
-msgid "Message could not be sent"
986
-msgstr ""
987
+#: src/ListWindow.cxx:491
988
+msgid "Range selection disabled"
989
+msgstr "Výber rozsahu vypnutý"
990
 
991
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
992
-msgid "Chat"
993
-msgstr ""
994
+#: src/ListWindow.cxx:496
995
+msgid "Range selection enabled"
996
+msgstr "Výber rozsahu zapnutý"
997
 
998
-#: src/screen_client.cxx:41
999
-msgid "Database update running..."
1000
-msgstr "Prebieha aktualizácia databáze..."
1001
+#. translators: no lyrics were found for the song
1002
+#: src/LyricsPage.cxx:236
1003
+msgid "No lyrics"
1004
+msgstr "Bez textu"
1005
 
1006
-#: src/screen_client.cxx:49
1007
+#: src/LyricsPage.cxx:254
1008
 #, c-format
1009
-msgid "Database update of %s started"
1010
-msgstr "Aktualizácia databáze %s začala"
1011
+msgid "Lyrics timeout occurred after %d seconds"
1012
+msgstr ""
1013
 
1014
-#: src/screen_client.cxx:52
1015
-msgid "Database update started"
1016
-msgstr "Bola spustená aktualizácia databáze"
1017
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1018
+#: src/LyricsPage.cxx:490
1019
+msgid "Lyrics"
1020
+msgstr "Text piesne"
1021
 
1022
-#. translators: the "delete" command is only possible
1023
-#. for playlists; the user attempted to delete a song
1024
-#. or a directory or something else
1025
-#: src/screen_file.cxx:200
1026
-msgid "Deleting this item is not possible"
1027
-msgstr "Zmazanie tejto položky nie je možné"
1028
+#. translators: this message is displayed
1029
+#. while data is retrieved
1030
+#: src/LyricsPage.cxx:340
1031
+msgid "loading..."
1032
+msgstr "načítam..."
1033
 
1034
-#: src/screen_file.cxx:207
1035
-#, fuzzy, c-format
1036
-msgid "Delete playlist %s?"
1037
-msgstr "Vymazať playlist"
1038
+#: src/LyricsPage.cxx:361
1039
+msgid "Editor not configured"
1040
+msgstr ""
1041
 
1042
-#. translators: MPD deleted the playlist, as requested by the
1043
-#. user
1044
-#: src/screen_file.cxx:227
1045
-msgid "Playlist deleted"
1046
+#: src/LyricsPage.cxx:368
1047
+msgid "Do you really want to start an editor and edit these lyrics?"
1048
+msgstr ""
1049
+
1050
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1051
+msgid "Can't start editor"
1052
+msgstr ""
1053
+
1054
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1055
+msgid "Editor exited unexpectedly"
1056
+msgstr ""
1057
+
1058
+#. lyrics for the song were saved on hard disk
1059
+#: src/LyricsPage.cxx:439
1060
+msgid "Lyrics saved"
1061
+msgstr "Text piesne uložený"
1062
+
1063
+#: src/LyricsPage.cxx:445
1064
+#, fuzzy
1065
+msgid "Lyrics deleted"
1066
 msgstr "Playlist vymazaný"
1067
 
1068
-#. translators: caption of the browser screen
1069
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1070
-msgid "Browse"
1071
-msgstr "Listovať"
1072
+#: src/LyricsPage.cxx:446
1073
+#, fuzzy
1074
+msgid "No saved lyrics"
1075
+msgstr "Uložiť text piesne"
1076
 
1077
-#: src/screen_find.cxx:29
1078
-msgid "Find"
1079
-msgstr "Vyhľadať"
1080
+#: src/Main.cxx:167
1081
+#, fuzzy, c-format
1082
+msgid "Connecting to %s"
1083
+msgstr "Pripojený k %s"
1084
 
1085
-#: src/screen_find.cxx:30
1086
-msgid "Find backward"
1087
-msgstr "Vyhľadať spätne"
1088
+#: src/Main.cxx:187
1089
+#, fuzzy, c-format
1090
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1091
+msgstr "Chyba: MPD verzie %d.%d.%d je príliš staré (%s je potrebná)"
1092
 
1093
-#: src/screen_find.cxx:31
1094
-msgid "Jump"
1095
-msgstr "Skok"
1096
+#. To translators: these credits are shown
1097
+#. when ncmpc is started with "--version"
1098
+#: src/options.cxx:213 src/options.cxx:216
1099
+msgid "translator-credits"
1100
+msgstr ""
1101
+"Jozef Riha <jose1711@gmail.com>\n"
1102
+"\n"
1103
+"Launchpad Contributions:\n"
1104
+"  Jose Riha https://launchpad.net/~jose1711\n"
1105
+"  Roman Horník https://launchpad.net/~roman.hornik"
1106
 
1107
-#: src/screen_find.cxx:82
1108
+#: src/OutputsPage.cxx:87
1109
 #, c-format
1110
-msgid "Unable to find '%s'"
1111
-msgstr "Nepodarilo sa nájsť '%s'"
1112
-
1113
-#: src/screen_help.cxx:39
1114
-msgid "Movement"
1115
-msgstr "Pohyb"
1116
+msgid "Output '%s' enabled"
1117
+msgstr "Výstup '%s' povolený"
1118
 
1119
-#: src/screen_help.cxx:84
1120
-msgid "Global"
1121
-msgstr "Globálne"
1122
+#: src/OutputsPage.cxx:98
1123
+#, c-format
1124
+msgid "Output '%s' disabled"
1125
+msgstr "Výstup '%s' vypnutý"
1126
 
1127
-#: src/screen_help.cxx:121
1128
-msgid "Play"
1129
-msgstr "Prehrávať"
1130
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1131
+msgid "Outputs"
1132
+msgstr "Výstupy"
1133
 
1134
-#: src/screen_help.cxx:124
1135
-msgid "Move song up"
1136
-msgstr "Presunúť skladbu nahor"
1137
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1138
+msgid "Shuffled queue"
1139
+msgstr ""
1140
 
1141
-#: src/screen_help.cxx:125
1142
-msgid "Move song down"
1143
-msgstr "Presunúť skladbu nadol"
1144
+#: src/player_command.cxx:186
1145
+msgid "Cleared queue"
1146
+msgstr ""
1147
 
1148
-#: src/screen_help.cxx:128
1149
-msgid "Center"
1150
-msgstr "Do stredu"
1151
+#. get path
1152
+#: src/QueuePage.cxx:307
1153
+msgid "Add"
1154
+msgstr "Pridať"
1155
 
1156
-#: src/screen_help.cxx:136
1157
-msgid "Enter directory/Select and play song"
1158
-msgstr "Vstúpiť do adresára/Vybrať a prehrať skladbu"
1159
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1160
+msgid "Queue"
1161
+msgstr ""
1162
 
1163
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1164
-#, fuzzy
1165
-msgid "Append song to queue"
1166
-msgstr "Pridať skladbu do playlistu"
1167
+#: src/QueuePage.cxx:380
1168
+#, c-format
1169
+msgid "Queue on %s"
1170
+msgstr ""
1171
 
1172
-#: src/screen_help.cxx:140
1173
-msgid "Delete playlist"
1174
-msgstr "Vymazať playlist"
1175
+#. query the user for a filename
1176
+#: src/save_playlist.cxx:85
1177
+msgid "Save queue as"
1178
+msgstr ""
1179
 
1180
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1181
-msgid "Search"
1182
-msgstr "Hľadanie"
1183
+#: src/save_playlist.cxx:107
1184
+#, fuzzy, c-format
1185
+msgid "Replace %s?"
1186
+msgstr "Nahradiť %s [%s/%s] ? "
1187
 
1188
-#: src/screen_help.cxx:151
1189
-msgid "Select and play"
1190
-msgstr "Vybrať a prehrať"
1191
+#. success
1192
+#: src/save_playlist.cxx:128
1193
+#, c-format
1194
+msgid "Saved %s"
1195
+msgstr "Uložený %s"
1196
 
1197
-#: src/screen_help.cxx:162
1198
-msgid "View Lyrics"
1199
-msgstr "Zobraziť text piesne"
1200
+#: src/screen_artist.cxx:186
1201
+#, c-format
1202
+msgid "All tracks of artist: %s"
1203
+msgstr "Všetky stopy od interpreta: %s"
1204
 
1205
-#: src/screen_help.cxx:163
1206
-msgid "(Re)load lyrics"
1207
-msgstr "(Znovu)načítať text"
1208
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1209
+msgid "Album"
1210
+msgstr "Album"
1211
 
1212
-#. to translators: this hotkey aborts the retrieval of lyrics
1213
-#. from the server
1214
-#: src/screen_help.cxx:166
1215
-msgid "Interrupt retrieval"
1216
-msgstr "Zachytené prerušenie"
1217
+#: src/screen_artist.cxx:195
1218
+#, fuzzy, c-format
1219
+msgid "Tracks of no album of artist: %s"
1220
+msgstr "Albumy od interpreta: %s"
1221
 
1222
-#: src/screen_help.cxx:167
1223
-msgid "Download lyrics for currently playing song"
1224
-msgstr "Stiahnuť text pre momentálne prehrávanú pieseň"
1225
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1226
+msgid "Artist"
1227
+msgstr "Interpret"
1228
 
1229
-#: src/screen_help.cxx:168
1230
+#: src/screen_client.cxx:41
1231
 #, fuzzy
1232
-msgid "Add or edit lyrics"
1233
-msgstr "Uložiť text piesne"
1234
+msgid "Database update running"
1235
+msgstr "Prebieha aktualizácia databáze..."
1236
 
1237
-#: src/screen_help.cxx:169
1238
-msgid "Save lyrics"
1239
-msgstr "Uložiť text piesne"
1240
+#: src/screen_client.cxx:48
1241
+#, c-format
1242
+msgid "Database update of %s started"
1243
+msgstr "Aktualizácia databáze %s začala"
1244
 
1245
-#: src/screen_help.cxx:170
1246
-#, fuzzy
1247
-msgid "Delete saved lyrics"
1248
-msgstr "Uložiť text piesne"
1249
+#: src/screen_client.cxx:51
1250
+msgid "Database update started"
1251
+msgstr "Bola spustená aktualizácia databáze"
1252
 
1253
-#: src/screen_help.cxx:177
1254
-msgid "Enable/disable output"
1255
-msgstr "Povoliť/vypnúť výstup"
1256
+#: src/screen.cxx:160
1257
+msgid "Repeat mode is on"
1258
+msgstr "Režim opakovania zapnutý"
1259
 
1260
-#: src/screen_help.cxx:184
1261
-msgid "Write a message"
1262
-msgstr ""
1263
+#: src/screen.cxx:161
1264
+msgid "Repeat mode is off"
1265
+msgstr "Režim opakovania vypnutý"
1266
 
1267
-#: src/screen_help.cxx:189
1268
-msgid "Keydef screen"
1269
-msgstr "Obrazovka s nastavením kláves"
1270
+#: src/screen.cxx:165
1271
+msgid "Random mode is on"
1272
+msgstr "Náhodný režim zapnutý"
1273
 
1274
-#: src/screen_help.cxx:191
1275
-msgid "Edit keydefs for selected command"
1276
-msgstr "Upraviť kláves pre vybraný príkaz"
1277
+#: src/screen.cxx:166
1278
+msgid "Random mode is off"
1279
+msgstr "Náhodný režim vypnutý"
1280
 
1281
-#: src/screen_help.cxx:192
1282
-msgid "Remove selected keydef"
1283
-msgstr "Odstrániť vybrané nastavenie kláves"
1284
+#. "single" mode means
1285
+#. that MPD will
1286
+#. automatically stop
1287
+#. after playing one
1288
+#. single song
1289
+#: src/screen.cxx:175
1290
+msgid "Single mode is on"
1291
+msgstr "Jednotlivý režim zapnutý"
1292
 
1293
-#: src/screen_help.cxx:193
1294
-#, fuzzy
1295
-msgid "Add a keydef"
1296
-msgstr "Pridať nový kláves"
1297
+#: src/screen.cxx:176
1298
+msgid "Single mode is off"
1299
+msgstr "Jednotlivý režim vypnutý"
1300
 
1301
-#: src/screen_help.cxx:194
1302
-msgid "Go up a level"
1303
-msgstr "Prejsť o úroveň vyššie"
1304
+#. "consume" mode means
1305
+#. that MPD removes each
1306
+#. song which has
1307
+#. finished playing
1308
+#: src/screen.cxx:184
1309
+msgid "Consume mode is on"
1310
+msgstr "Spotrebný režim zapnutý"
1311
 
1312
-#: src/screen_help.cxx:195
1313
-msgid "Apply and save changes"
1314
-msgstr "Použiť a uložiť zmeny"
1315
+#: src/screen.cxx:185
1316
+msgid "Consume mode is off"
1317
+msgstr "Spotrebný režim vypnutý"
1318
 
1319
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1320
-msgid "Help"
1321
-msgstr "Pomoc"
1322
+#: src/screen.cxx:188
1323
+#, c-format
1324
+msgid "Crossfade %d seconds"
1325
+msgstr "Prelínanie %d sekúnd"
1326
 
1327
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1328
-msgid "Error: Screen too small"
1329
-msgstr "Chyba: Okno je príliš malé"
1330
+#: src/screen.cxx:200
1331
+msgid "Database updated"
1332
+msgstr "Databáza aktualizovaná"
1333
 
1334
-#: src/screen_keydef.cxx:141
1335
-msgid "You have new key bindings"
1336
-msgstr "Nastavili ste nové priradenie klávesov"
1337
+#: src/screen.cxx:250
1338
+msgid "Find mode: Wrapped"
1339
+msgstr "Režim vyhľadávania: Zabalený"
1340
 
1341
-#: src/screen_keydef.cxx:143
1342
-msgid "Keybindings unchanged."
1343
-msgstr "Priradenie klávesov sa nezmenilo."
1344
+#: src/screen.cxx:251
1345
+msgid "Find mode: Normal"
1346
+msgstr "Režim vyhľadávanie: Normálny"
1347
 
1348
-#: src/screen_keydef.cxx:153
1349
-#, c-format
1350
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1351
-msgstr "Chyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %s"
1352
+#: src/screen.cxx:256
1353
+msgid "Auto center mode: On"
1354
+msgstr "Automatické centrovanie: Zapnuté"
1355
 
1356
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1357
-#, c-format
1358
-msgid "Error: %s - %s"
1359
-msgstr "Chyba: %s - %s"
1360
+#: src/screen.cxx:257
1361
+msgid "Auto center mode: Off"
1362
+msgstr "Automatické centrovanie: Vypnuté"
1363
 
1364
-#: src/screen_keydef.cxx:171
1365
+#: src/screen_find.cxx:31
1366
+msgid "Find"
1367
+msgstr "Vyhľadať"
1368
+
1369
+#: src/screen_find.cxx:32
1370
+msgid "Find backward"
1371
+msgstr "Vyhľadať spätne"
1372
+
1373
+#: src/screen_find.cxx:33
1374
+msgid "Jump"
1375
+msgstr "Skok"
1376
+
1377
+#: src/screen_find.cxx:79
1378
 #, c-format
1379
-msgid "Wrote %s"
1380
-msgstr "Zapísané %s"
1381
+msgid "Unable to find '%s'"
1382
+msgstr "Nepodarilo sa nájsť '%s'"
1383
 
1384
-#: src/screen_keydef.cxx:250
1385
+#: src/screen_keydef.cxx:161
1386
 msgid "Deleted"
1387
 msgstr "Vymazané"
1388
 
1389
-#: src/screen_keydef.cxx:265
1390
+#: src/screen_keydef.cxx:177
1391
 #, c-format
1392
 msgid "Enter new key for %s: "
1393
 msgstr "Zadajte nový kláves pre %s: "
1394
 
1395
-#: src/screen_keydef.cxx:276
1396
+#: src/screen_keydef.cxx:187
1397
 msgid "Ctrl-Space can't be used"
1398
 msgstr ""
1399
 
1400
-#: src/screen_keydef.cxx:282
1401
+#: src/screen_keydef.cxx:193
1402
 #, c-format
1403
 msgid "Error: key %s is already used for %s"
1404
 msgstr "Chyba: kláves %s je už použitý pre %s"
1405
 
1406
-#: src/screen_keydef.cxx:291
1407
+#: src/screen_keydef.cxx:202
1408
 #, c-format
1409
 msgid "Assigned %s to %s"
1410
 msgstr "%s priradené k %s"
1411
 
1412
-#: src/screen_keydef.cxx:317
1413
-msgid "===> Apply key bindings "
1414
-msgstr "===> Použiť nastavenie klávesov "
1415
-
1416
-#: src/screen_keydef.cxx:319
1417
-msgid "===> Apply & Save key bindings  "
1418
-msgstr "===> Použiť & Uložiť nastavenie klávesov  "
1419
-
1420
-#: src/screen_keydef.cxx:347
1421
+#: src/screen_keydef.cxx:229
1422
 msgid "Add new key"
1423
 msgstr "Pridať nový kláves"
1424
 
1425
-#: src/screen_keydef.cxx:410
1426
-msgid "Note: Did you forget to 'Apply' your changes?"
1427
-msgstr "Poznámka: Zabudli ste 'Použiť' vaše zmeny?"
1428
-
1429
-#: src/screen_keydef.cxx:417
1430
-msgid "Edit key bindings"
1431
-msgstr "Upraviť priradenie klávesov"
1432
-
1433
-#: src/screen_keydef.cxx:419
1434
+#: src/screen_keydef.cxx:251
1435
 #, c-format
1436
 msgid "Edit keys for %s"
1437
 msgstr "Upraviť klávesy pre %s"
1438
 
1439
-#. translators: no lyrics were found for the song
1440
-#: src/screen_lyrics.cxx:208
1441
-msgid "No lyrics"
1442
-msgstr "Bez textu"
1443
-
1444
-#: src/screen_lyrics.cxx:226
1445
-#, c-format
1446
-msgid "Lyrics timeout occurred after %d seconds"
1447
-msgstr ""
1448
-
1449
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1450
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1451
-msgid "Lyrics"
1452
-msgstr "Text piesne"
1453
-
1454
-#. translators: this message is displayed
1455
-#. while data is retrieved
1456
-#: src/screen_lyrics.cxx:330
1457
-msgid "loading..."
1458
-msgstr "načítam..."
1459
-
1460
-#: src/screen_lyrics.cxx:361
1461
-msgid "Editor not configured"
1462
-msgstr ""
1463
-
1464
-#: src/screen_lyrics.cxx:367
1465
-msgid "Do you really want to start an editor and edit these lyrics?"
1466
-msgstr ""
1467
-
1468
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1469
-msgid "Can't start editor"
1470
-msgstr ""
1471
-
1472
-#: src/screen_lyrics.cxx:411
1473
-#, c-format
1474
-msgid "Editor exited unexpectedly (%d)"
1475
-msgstr ""
1476
-
1477
-#: src/screen_lyrics.cxx:414
1478
-#, c-format
1479
-msgid "Editor exited unexpectedly (signal %d)"
1480
-msgstr ""
1481
-
1482
-#. lyrics for the song were saved on hard disk
1483
-#: src/screen_lyrics.cxx:436
1484
-msgid "Lyrics saved"
1485
-msgstr "Text piesne uložený"
1486
+#: src/screen_keydef.cxx:393
1487
+msgid "You have new key bindings"
1488
+msgstr "Nastavili ste nové priradenie klávesov"
1489
 
1490
-#: src/screen_lyrics.cxx:443
1491
-#, fuzzy
1492
-msgid "Lyrics deleted"
1493
-msgstr "Playlist vymazaný"
1494
+#: src/screen_keydef.cxx:395
1495
+msgid "Keybindings unchanged."
1496
+msgstr "Priradenie klávesov sa nezmenilo."
1497
 
1498
-#: src/screen_lyrics.cxx:446
1499
+#: src/screen_keydef.cxx:405
1500
 #, fuzzy
1501
-msgid "No saved lyrics"
1502
-msgstr "Uložiť text piesne"
1503
+msgid "Unable to write configuration"
1504
+msgstr "Neúplná konfigurácie klavesových skratiek"
1505
 
1506
-#: src/screen_outputs.cxx:60
1507
+#: src/screen_keydef.cxx:421
1508
 #, c-format
1509
-msgid "Output '%s' enabled"
1510
-msgstr "Výstup '%s' povolený"
1511
+msgid "Wrote %s"
1512
+msgstr "Zapísané %s"
1513
 
1514
-#: src/screen_outputs.cxx:71
1515
-#, c-format
1516
-msgid "Output '%s' disabled"
1517
-msgstr "Výstup '%s' vypnutý"
1518
+#: src/screen_keydef.cxx:433
1519
+msgid "===> Apply key bindings "
1520
+msgstr "===> Použiť nastavenie klávesov "
1521
 
1522
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1523
-msgid "Outputs"
1524
-msgstr "Výstupy"
1525
+#: src/screen_keydef.cxx:435
1526
+msgid "===> Apply & Save key bindings  "
1527
+msgstr "===> Použiť & Uložiť nastavenie klávesov  "
1528
 
1529
-#. get path
1530
-#: src/screen_queue.cxx:274
1531
-msgid "Add"
1532
-msgstr "Pridať"
1533
+#: src/screen_keydef.cxx:472
1534
+msgid "Edit key bindings"
1535
+msgstr "Upraviť priradenie klávesov"
1536
 
1537
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1538
-msgid "Queue"
1539
-msgstr ""
1540
+#: src/screen_keydef.cxx:554
1541
+msgid "Note: Did you forget to 'Apply' your changes?"
1542
+msgstr "Poznámka: Zabudli ste 'Použiť' vaše zmeny?"
1543
 
1544
-#: src/screen_queue.cxx:384
1545
-#, c-format
1546
-msgid "Queue on %s"
1547
+#: src/screen_keydef.cxx:604
1548
+msgid "Keys"
1549
 msgstr ""
1550
 
1551
-#: src/screen_search.cxx:48
1552
+#: src/screen_utils.cxx:124
1553
+msgid "Password"
1554
+msgstr "Heslo"
1555
+
1556
+#: src/SearchPage.cxx:51
1557
 msgid "artist"
1558
 msgstr "interpret"
1559
 
1560
-#: src/screen_search.cxx:49
1561
+#: src/SearchPage.cxx:52
1562
 msgid "album"
1563
 msgstr "album"
1564
 
1565
-#: src/screen_search.cxx:50
1566
+#: src/SearchPage.cxx:53
1567
 msgid "title"
1568
 msgstr "názov"
1569
 
1570
-#: src/screen_search.cxx:51
1571
+#: src/SearchPage.cxx:54
1572
 msgid "track"
1573
 msgstr "stopa"
1574
 
1575
-#: src/screen_search.cxx:52
1576
+#: src/SearchPage.cxx:55
1577
 msgid "name"
1578
 msgstr "názov"
1579
 
1580
-#: src/screen_search.cxx:53
1581
+#: src/SearchPage.cxx:56
1582
 msgid "genre"
1583
 msgstr "žáner"
1584
 
1585
-#: src/screen_search.cxx:54
1586
+#: src/SearchPage.cxx:57
1587
 msgid "date"
1588
 msgstr "dátum"
1589
 
1590
-#: src/screen_search.cxx:55
1591
+#: src/SearchPage.cxx:58
1592
 msgid "composer"
1593
 msgstr "skladateľ"
1594
 
1595
-#: src/screen_search.cxx:56
1596
+#: src/SearchPage.cxx:59
1597
 msgid "performer"
1598
 msgstr "umelec"
1599
 
1600
-#: src/screen_search.cxx:57
1601
+#: src/SearchPage.cxx:60
1602
 msgid "comment"
1603
 msgstr "komentár"
1604
 
1605
-#: src/screen_search.cxx:65
1606
+#: src/SearchPage.cxx:68
1607
 msgid "file"
1608
 msgstr "súbor"
1609
 
1610
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1611
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1612
 msgid "Title"
1613
 msgstr "Názov"
1614
 
1615
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1616
-msgid "Artist"
1617
-msgstr "Interpret"
1618
-
1619
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1620
-msgid "Album"
1621
-msgstr "Album"
1622
-
1623
-#: src/screen_search.cxx:85
1624
+#: src/SearchPage.cxx:88
1625
 msgid "Filename"
1626
 msgstr "Názov súboru"
1627
 
1628
-#: src/screen_search.cxx:86
1629
+#: src/SearchPage.cxx:89
1630
 msgid "Artist + Title"
1631
 msgstr "Interpret + Názov"
1632
 
1633
-#: src/screen_search.cxx:244
1634
-#, c-format
1635
-msgid "No argument for search tag %s"
1636
-msgstr "Chýba argument pre značku vyhľadávania %s"
1637
-
1638
-#: src/screen_search.cxx:253
1639
+#: src/SearchPage.cxx:270
1640
 #, c-format
1641
 msgid "Bad search tag %s"
1642
 msgstr "Zlá značka vyhľadávania %s"
1643
 
1644
-#. if( pattern==nullptr )
1645
-#. search_new(screen, c);
1646
-#. else
1647
-#: src/screen_search.cxx:400
1648
+#: src/SearchPage.cxx:284
1649
 #, c-format
1650
-msgid "Press %s for a new search"
1651
-msgstr "Stlačte %s pre nové hľadanie"
1652
-
1653
-#: src/screen_search.cxx:427
1654
-#, c-format
1655
-msgid "Search: %s"
1656
-msgstr "Vyhľadať: %s"
1657
-
1658
-#: src/screen_search.cxx:430
1659
-#, c-format
1660
-msgid "Search: Results for %s [%s]"
1661
-msgstr "Hľadanie: Výsledky pre reťazec %s[%s]"
1662
+msgid "No argument for search tag %s"
1663
+msgstr "Chýba argument pre značku vyhľadávania %s"
1664
 
1665
-#: src/screen_search.cxx:434
1666
-#, c-format
1667
-msgid "Search: Press %s for a new search [%s]"
1668
-msgstr "Hľadanie: Stlačte %s pre opätovné hľadanie [%s]"
1669
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1670
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1671
+msgid "Search"
1672
+msgstr "Hľadanie"
1673
 
1674
-#: src/screen_search.cxx:458
1675
+#: src/SearchPage.cxx:436
1676
 #, c-format
1677
 msgid "Search mode: %s"
1678
 msgstr "Režim vyhľadávania: %s"
1679
 
1680
-#: src/screen_song.cxx:54
1681
+#: src/SongPage.cxx:67
1682
 msgid "Length"
1683
 msgstr "Dĺžka"
1684
 
1685
-#: src/screen_song.cxx:55
1686
+#: src/SongPage.cxx:68
1687
 msgid "Position"
1688
 msgstr ""
1689
 
1690
-#: src/screen_song.cxx:56
1691
+#: src/SongPage.cxx:69
1692
 msgid "Composer"
1693
 msgstr "Skladateľ"
1694
 
1695
-#: src/screen_song.cxx:57
1696
+#: src/SongPage.cxx:70
1697
 msgid "Name"
1698
 msgstr "Názov"
1699
 
1700
-#: src/screen_song.cxx:58
1701
+#: src/SongPage.cxx:71
1702
 msgid "Disc"
1703
 msgstr "Disk"
1704
 
1705
-#: src/screen_song.cxx:59
1706
+#: src/SongPage.cxx:72
1707
 msgid "Track"
1708
 msgstr "Stopa"
1709
 
1710
-#: src/screen_song.cxx:60
1711
+#: src/SongPage.cxx:73
1712
 msgid "Date"
1713
 msgstr "Dátum"
1714
 
1715
-#: src/screen_song.cxx:61
1716
+#: src/SongPage.cxx:74
1717
 msgid "Genre"
1718
 msgstr "Žáner"
1719
 
1720
-#: src/screen_song.cxx:62
1721
+#: src/SongPage.cxx:75
1722
 msgid "Comment"
1723
 msgstr "Komentár"
1724
 
1725
-#: src/screen_song.cxx:63
1726
+#: src/SongPage.cxx:76
1727
 msgid "Path"
1728
 msgstr "Cesta"
1729
 
1730
-#: src/screen_song.cxx:64
1731
+#: src/SongPage.cxx:77
1732
 msgid "Bitrate"
1733
 msgstr "Bitový tok"
1734
 
1735
-#: src/screen_song.cxx:65
1736
+#: src/SongPage.cxx:78
1737
 msgid "Format"
1738
 msgstr ""
1739
 
1740
-#: src/screen_song.cxx:82
1741
+#: src/SongPage.cxx:95
1742
 msgid "Number of artists"
1743
 msgstr "Počet interpretov"
1744
 
1745
-#: src/screen_song.cxx:83
1746
+#: src/SongPage.cxx:96
1747
 msgid "Number of albums"
1748
 msgstr "Počet albumov"
1749
 
1750
-#: src/screen_song.cxx:84
1751
+#: src/SongPage.cxx:97
1752
 msgid "Number of songs"
1753
 msgstr "Počet piesní"
1754
 
1755
-#: src/screen_song.cxx:85
1756
+#: src/SongPage.cxx:98
1757
 msgid "Uptime"
1758
 msgstr "Uptime"
1759
 
1760
-#: src/screen_song.cxx:86
1761
+#: src/SongPage.cxx:99
1762
 msgid "Most recent db update"
1763
 msgstr "Najčerstvejší update databáze"
1764
 
1765
-#: src/screen_song.cxx:87
1766
+#: src/SongPage.cxx:100
1767
 msgid "Playtime"
1768
 msgstr "Čas hrania"
1769
 
1770
-#: src/screen_song.cxx:88
1771
+#: src/SongPage.cxx:101
1772
 msgid "DB playtime"
1773
 msgstr "Čas hrania databáze"
1774
 
1775
-#: src/screen_song.cxx:173
1776
+#: src/SongPage.cxx:204
1777
 msgid "Song viewer"
1778
 msgstr "Prehliadač piesní"
1779
 
1780
-#: src/screen_song.cxx:337
1781
+#: src/SongPage.cxx:370
1782
 msgid "MPD statistics"
1783
 msgstr "Štatistiky MPD"
1784
 
1785
-#: src/screen_song.cxx:427
1786
+#: src/SongPage.cxx:455
1787
 msgid "Selected song"
1788
 msgstr "Vybraná pieseň"
1789
 
1790
-#: src/screen_song.cxx:437
1791
+#: src/SongPage.cxx:465
1792
 msgid "Currently playing song"
1793
 msgstr "Momentálne prehrávaná pieseň"
1794
 
1795
-#: src/screen_song.cxx:442
1796
+#: src/SongPage.cxx:470
1797
 #, c-format
1798
 msgid "%d kbps"
1799
 msgstr "%d kbps"
1800
 
1801
-#. NOTE: if one day a translator decides to use a multi-byte character
1802
-#. for one of the yes/no keys, we'll have to parse it properly
1803
-#: src/screen_utils.cxx:80
1804
-#, fuzzy, c-format
1805
-msgid "%s [%s/%s] "
1806
-msgstr "Nahradiť %s [%s/%s] ? "
1807
-
1808
-#: src/screen_utils.cxx:121
1809
-msgid "Password"
1810
-msgstr "Heslo"
1811
+#: src/SongPage.cxx:554
1812
+msgid "Song"
1813
+msgstr ""
1814
 
1815
-#: src/status_bar.cxx:121
1816
+#: src/StatusBar.cxx:104
1817
 msgid "Playing:"
1818
 msgstr "Prehrávam:"
1819
 
1820
-#: src/status_bar.cxx:124
1821
+#: src/StatusBar.cxx:108
1822
 msgid "[Paused]"
1823
 msgstr "[Pozastavené]"
1824
 
1825
-#: src/title_bar.cxx:99
1826
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1827
+#, fuzzy
1828
+msgid "Unknown color"
1829
+msgstr "Neznámy príkaz"
1830
+
1831
+#: src/Styles.cxx:333
1832
+#, fuzzy
1833
+msgid "Unknown color field"
1834
+msgstr "Varovanie: Neznáme farebné pole - %s\n"
1835
+
1836
+#: src/Styles.cxx:375
1837
+msgid "Terminal lacks color capabilities"
1838
+msgstr "Terminál nemá schopnosti zobrazovania farieb"
1839
+
1840
+#: src/time_format.cxx:44
1841
+msgid "year"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:46
1845
+msgid "years"
1846
+msgstr ""
1847
+
1848
+#: src/time_format.cxx:54
1849
+msgid "week"
1850
+msgstr ""
1851
+
1852
+#: src/time_format.cxx:57
1853
+msgid "weeks"
1854
+msgstr ""
1855
+
1856
+#: src/time_format.cxx:65
1857
+msgid "day"
1858
+msgstr ""
1859
+
1860
+#: src/time_format.cxx:68
1861
+msgid "days"
1862
+msgstr ""
1863
+
1864
+#: src/TitleBar.cxx:100
1865
 msgid "Volume n/a"
1866
 msgstr "Hlasitosť n/a"
1867
 
1868
-#: src/title_bar.cxx:101
1869
+#: src/TitleBar.cxx:102
1870
 #, c-format
1871
 msgid "Volume %d%%"
1872
 msgstr "Hlasitosť %d%%"
1873
 
1874
+#, fuzzy
1875
+#~ msgid "Add url/file to queue"
1876
+#~ msgstr "Pridať url/súbor do playlistu"
1877
+
1878
+#~ msgid "Move song up"
1879
+#~ msgstr "Presunúť skladbu nahor"
1880
+
1881
+#~ msgid "Move song down"
1882
+#~ msgstr "Presunúť skladbu nadol"
1883
+
1884
+#~ msgid "Press %s for a new search"
1885
+#~ msgstr "Stlačte %s pre nové hľadanie"
1886
+
1887
+#~ msgid "Search: %s"
1888
+#~ msgstr "Vyhľadať: %s"
1889
+
1890
+#~ msgid "Search: Results for %s [%s]"
1891
+#~ msgstr "Hľadanie: Výsledky pre reťazec %s[%s]"
1892
+
1893
+#~ msgid "Search: Press %s for a new search [%s]"
1894
+#~ msgstr "Hľadanie: Stlačte %s pre opätovné hľadanie [%s]"
1895
+
1896
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1897
+#~ msgstr "Pripájam sa k %s... [Stlačte %s pre zrušenie]"
1898
+
1899
+#~ msgid "press %s for the key editor"
1900
+#~ msgstr "stlačte %s pre editor klávesov"
1901
+
1902
+#~ msgid "Album: %s - %s"
1903
+#~ msgstr "Album: %s - %s"
1904
+
1905
+#, fuzzy
1906
+#~ msgid "Adding album %s..."
1907
+#~ msgstr "Nahrávam playlist %s..."
1908
+
1909
+#, fuzzy
1910
+#~ msgid "Adding %s..."
1911
+#~ msgstr "Pridávam adresár %s...\n"
1912
+
1913
+#~ msgid "Error: Screen too small"
1914
+#~ msgstr "Chyba: Okno je príliš malé"
1915
+
1916
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1917
+#~ msgstr "Chyba: Nepodarilo sa vytvoriť adresár ~/.ncmpc - %s"
1918
+
1919
+#~ msgid "Error: %s - %s"
1920
+#~ msgstr "Chyba: %s - %s"
1921
+
1922
+#, fuzzy
1923
+#~ msgid "%s [%s/%s] "
1924
+#~ msgstr "Nahradiť %s [%s/%s] ? "
1925
+
1926
 #~ msgid "Delete playlist %s [%s/%s] ? "
1927
 #~ msgstr "Vymazať playlist %s [%s/%s] ? "
1928
 
1929
 #~ msgid "Warning: Unknown color - %s\n"
1930
 #~ msgstr "Varovania: Neznáma farba - %s\n"
1931
 
1932
-#~ msgid "Connected to %s"
1933
-#~ msgstr "Pripojený k %s"
1934
-
1935
 #~ msgid "Shuffled playlist"
1936
 #~ msgstr "Zamiešaný playlist"
1937
 
1938
ncmpc-0.30.tar.xz/po/sv.po -> ncmpc-0.32.tar.xz/po/sv.po Changed
1934
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc 0.12\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2010-04-14 05:21+0000\n"
8
 "Last-Translator: Rickard Närström <rickard.narstrom@gmail.com>\n"
9
 "Language-Team: sv <sv@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2010-06-19 15:12+0000\n"
12
 "X-Generator: Launchpad (build Unknown)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Okänt kommando"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Alla spår"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Varning: %s ej definierad.\n"
27
+msgid "Albums"
28
+msgstr "Album"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Terminalen saknar stöd för växling av färger"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Album av artist: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Terminalen saknar stöd för färger"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Lägger till '%s' till spellista"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Alla artister"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Tangent %s tilldelad %s och %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Tangentdefinitioner"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Avsluta"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Markör uppåt"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Markör nedåt"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Flytta markören längst upp"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Flytta markören till mitten"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Flytta markören längst ner"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Flytta markören längst upp i listan"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Flytta markören längst ner i listan"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Markören en skärm uppåt"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Markören en skärm nedåt"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr ""
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Gå ner en rad"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Gå upp en rad"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Gå upp en halv skärm"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Gå ner en halv skärm"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr ""
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Hjälp"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Hjälp"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Filer"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Spela upp/Välj"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Pausa"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Stoppa"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Beskär"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Nästa spår"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Föregående spår"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Sök framåt"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Sök bakåt"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Höj volymen"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Sänk volymen"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Markera/avmarkera spår till spellistan"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Markera alla listade föremål"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Ta bort låt från spellista"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Repeat på/av"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Slumpning på/av"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr ""
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr ""
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Mjuk övergång på/av"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Updatera musikdatabasen"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Lägg till url eller fil till spellistan"
286
+msgid "Append song to queue"
287
+msgstr "Lägg till i spellista"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Gå till rotkatalogen"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Gå upp en nivå"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Hitta spår i Filer"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Flytta upp"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Flytta ner"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Uppdatera fönster"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Ändra sökinställningar"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Automatisk centrering på/av"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Nästa skärm"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Tidigare skärm"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr ""
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Sök"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Nästa träff"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Föregående träff"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Upprepa sökning bakåt"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Hoppa till"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Artister"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Databassökning"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Ändra måltyp för databassökning"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr ""
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Texter"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Avbryt handling"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Uppdatera texter"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Utgångar"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Nästa skärm"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Ej definierad"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Mellanslag"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Bakstegstangent"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Ta bort"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Uppåtpil"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Nedåtpil"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Vänsterpil"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Högerpil"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+tabb"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Tangent %s tilldelad %s och %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Fel"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Dålig tangentdefinition"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Okänt kommando"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Inkomplett tangentdefinition"
545
 
546
@@ -442,820 +377,888 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Felaktigt tidsformat"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Saknar '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Felaktigt färgnamn"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Inkomplett färgdefinition"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Ogiltigt nummer"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Felaktig färgdefinition"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Skärmnamn okänt"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr ""
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr ""
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Okänd konfigurationsinställning"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "j"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Terminalen saknar stöd för växling av färger"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Du kan inte ta bort det här föremålet"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr ""
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Ta bort spellista"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr ""
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Avbrutet"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Ansluter till %s... [Tryck %s för att avbryta]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Spellista borttagen"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Filer"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Fel: MPD version %d.%d.%d är för gammal (%s krävs)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Laddar spellista %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "tryck på %s för att korrigera"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Navigation"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Launchpad Contributions:\n"
675
-"  Björn Pettersson https://launchpad.net/~bjorn-hygiena\n"
676
-"  Kalle Wallin https://launchpad.net/~kaw\n"
677
-"  Rickard Närström https://launchpad.net/~riccetn\n"
678
-"  nanker https://launchpad.net/~nanker"
679
+#: src/HelpPage.cxx:105
680
+msgid "Global"
681
+msgstr "Globala"
682
 
683
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
684
-msgid "Shuffled queue"
685
-msgstr ""
686
+#: src/HelpPage.cxx:142
687
+msgid "Play"
688
+msgstr "Starta/Spela markerad"
689
 
690
-#: src/player_command.cxx:184
691
-msgid "Cleared queue"
692
-msgstr ""
693
+#: src/HelpPage.cxx:149
694
+msgid "Center"
695
+msgstr "Centrera"
696
 
697
-#. query the user for a filename
698
-#: src/save_playlist.cxx:109
699
-msgid "Save queue as"
700
-msgstr ""
701
+#: src/HelpPage.cxx:157
702
+msgid "Enter directory/Select and play song"
703
+msgstr "Välj katalog/Markera och spela upp"
704
 
705
-#: src/save_playlist.cxx:140
706
-#, fuzzy, c-format
707
-msgid "Replace %s?"
708
-msgstr "Ersätt %s [%s/%s] ? "
709
+#: src/HelpPage.cxx:161
710
+msgid "Delete playlist"
711
+msgstr "Ta bort spellista"
712
 
713
-#. translators: a dialog was aborted by the user
714
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
715
-#: src/screen_lyrics.cxx:370
716
-msgid "Aborted"
717
-msgstr "Avbrutet"
718
+#: src/HelpPage.cxx:171
719
+#, fuzzy
720
+msgid "New search"
721
+msgstr "Sök"
722
 
723
-#. success
724
-#: src/save_playlist.cxx:171
725
-#, c-format
726
-msgid "Saved %s"
727
-msgstr "%s sparad"
728
+#: src/HelpPage.cxx:172
729
+msgid "Select and play"
730
+msgstr "Lägg till spellistan och spela"
731
 
732
-#: src/screen.cxx:154
733
-msgid "Repeat mode is on"
734
-msgstr "Upprepningsläge på"
735
+#: src/HelpPage.cxx:183
736
+msgid "View Lyrics"
737
+msgstr "Visa texter"
738
 
739
-#: src/screen.cxx:155
740
-msgid "Repeat mode is off"
741
-msgstr "Upprepningsläge av"
742
+#: src/HelpPage.cxx:184
743
+msgid "(Re)load lyrics"
744
+msgstr "Ladda (om) texter"
745
 
746
-#: src/screen.cxx:159
747
-msgid "Random mode is on"
748
-msgstr "Slumpningsläge på"
749
+#. to translators: this hotkey aborts the retrieval of lyrics
750
+#. from the server
751
+#: src/HelpPage.cxx:187
752
+msgid "Interrupt retrieval"
753
+msgstr "Avbryt hämtning"
754
 
755
-#: src/screen.cxx:160
756
-msgid "Random mode is off"
757
-msgstr "Slumpningsläge av"
758
+#: src/HelpPage.cxx:188
759
+msgid "Download lyrics for currently playing song"
760
+msgstr "Ladda ner texter till låten som spelas just nu"
761
 
762
-#. "single" mode means
763
-#. that MPD will
764
-#. automatically stop
765
-#. after playing one
766
-#. single song
767
-#: src/screen.cxx:169
768
-msgid "Single mode is on"
769
-msgstr ""
770
+#: src/HelpPage.cxx:189
771
+#, fuzzy
772
+msgid "Add or edit lyrics"
773
+msgstr "Spara texter"
774
 
775
-#: src/screen.cxx:170
776
-msgid "Single mode is off"
777
-msgstr ""
778
+#: src/HelpPage.cxx:190
779
+msgid "Save lyrics"
780
+msgstr "Spara texter"
781
 
782
-#. "consume" mode means
783
-#. that MPD removes each
784
-#. song which has
785
-#. finished playing
786
-#: src/screen.cxx:178
787
-msgid "Consume mode is on"
788
-msgstr "Förtäringsläge på"
789
+#: src/HelpPage.cxx:191
790
+#, fuzzy
791
+msgid "Delete saved lyrics"
792
+msgstr "Spara texter"
793
 
794
-#: src/screen.cxx:179
795
-msgid "Consume mode is off"
796
-msgstr "Förtäringsläge av"
797
+#: src/HelpPage.cxx:198
798
+msgid "Enable/disable output"
799
+msgstr "Slå på/av utgång"
800
 
801
-#: src/screen.cxx:182
802
-#, c-format
803
-msgid "Crossfade %d seconds"
804
-msgstr "Mjuk övergång %d sekunder"
805
+#: src/HelpPage.cxx:205
806
+msgid "Write a message"
807
+msgstr ""
808
 
809
-#: src/screen.cxx:194
810
-msgid "Database updated"
811
-msgstr "Databas uppdaterad"
812
+#: src/HelpPage.cxx:210
813
+msgid "Keydef screen"
814
+msgstr ""
815
 
816
-#: src/screen.cxx:226
817
-msgid "Find mode: Wrapped"
818
-msgstr "Sökläge: Börja om"
819
+#: src/HelpPage.cxx:212
820
+msgid "Edit keydefs for selected command"
821
+msgstr ""
822
 
823
-#: src/screen.cxx:227
824
-msgid "Find mode: Normal"
825
-msgstr "Sökläge: Till början/slut"
826
+#: src/HelpPage.cxx:213
827
+msgid "Remove selected keydef"
828
+msgstr ""
829
 
830
-#: src/screen.cxx:232
831
-msgid "Auto center mode: On"
832
-msgstr "Automatisk centrering påslaget"
833
+#: src/HelpPage.cxx:214
834
+#, fuzzy
835
+msgid "Add a keydef"
836
+msgstr "Lägg till ny tangent"
837
 
838
-#: src/screen.cxx:233
839
-msgid "Auto center mode: Off"
840
-msgstr "Automatisk centrering avslaget"
841
+#: src/HelpPage.cxx:215
842
+msgid "Go up a level"
843
+msgstr "Gå upp en nivå"
844
 
845
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
846
-msgid "All tracks"
847
-msgstr "Alla spår"
848
+#: src/HelpPage.cxx:216
849
+msgid "Apply and save changes"
850
+msgstr "Verkställ och spara förändringar"
851
 
852
-#: src/screen_artist.cxx:384
853
-msgid "All artists"
854
-msgstr "Alla artister"
855
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
856
+msgid "Help"
857
+msgstr "Hjälp"
858
 
859
-#: src/screen_artist.cxx:389
860
-#, c-format
861
-msgid "Albums of artist: %s"
862
-msgstr "Album av artist: %s"
863
+#: src/i18n.h:43
864
+msgid "y"
865
+msgstr "j"
866
 
867
-#: src/screen_artist.cxx:398
868
-#, c-format
869
-msgid "All tracks of artist: %s"
870
-msgstr "Alla spår av artist: %s"
871
+#: src/i18n.h:44
872
+msgid "n"
873
+msgstr "n"
874
 
875
-#: src/screen_artist.cxx:401
876
-#, c-format
877
-msgid "Album: %s - %s"
878
-msgstr "Album: %s - %s"
879
+#: src/KeyName.cxx:31
880
+msgid "Undefined"
881
+msgstr "Ej definierad"
882
 
883
-#: src/screen_artist.cxx:405
884
-#, fuzzy, c-format
885
-msgid "Tracks of no album of artist: %s"
886
-msgstr "Album av artist: %s"
887
+#: src/KeyName.cxx:33
888
+msgid "Space"
889
+msgstr "Mellanslag"
890
 
891
-#: src/screen_artist.cxx:450
892
-#, fuzzy, c-format
893
-msgid "Adding album %s..."
894
-msgstr "Laddar spellista %s..."
895
+#: src/KeyName.cxx:35
896
+msgid "Enter"
897
+msgstr "Enter"
898
 
899
-#: src/screen_artist.cxx:452
900
-#, fuzzy, c-format
901
-msgid "Adding %s..."
902
-msgstr "laddar..."
903
+#: src/KeyName.cxx:37
904
+msgid "Backspace"
905
+msgstr "Bakstegstangent"
906
 
907
-#: src/screen_browser.cxx:122
908
-#, c-format
909
-msgid "Loading playlist %s..."
910
-msgstr "Laddar spellista %s..."
911
+#: src/KeyName.cxx:39
912
+msgid "Delete"
913
+msgstr "Ta bort"
914
 
915
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
916
-#: src/screen_browser.cxx:279
917
-#, fuzzy, c-format
918
-msgid "Adding '%s' to queue"
919
-msgstr "Lägger till '%s' till spellista"
920
+#: src/KeyName.cxx:41
921
+msgid "Up"
922
+msgstr "Uppåtpil"
923
+
924
+#: src/KeyName.cxx:43
925
+msgid "Down"
926
+msgstr "Nedåtpil"
927
+
928
+#: src/KeyName.cxx:45
929
+msgid "Left"
930
+msgstr "Vänsterpil"
931
+
932
+#: src/KeyName.cxx:47
933
+msgid "Right"
934
+msgstr "Högerpil"
935
+
936
+#: src/KeyName.cxx:49
937
+msgid "Home"
938
+msgstr "Home"
939
+
940
+#: src/KeyName.cxx:51
941
+msgid "End"
942
+msgstr "End"
943
+
944
+#: src/KeyName.cxx:53
945
+msgid "PageDown"
946
+msgstr "PageDown"
947
+
948
+#: src/KeyName.cxx:55
949
+msgid "PageUp"
950
+msgstr "PageUp"
951
+
952
+#: src/KeyName.cxx:57
953
+msgid "Tab"
954
+msgstr "Tab"
955
+
956
+#: src/KeyName.cxx:59
957
+msgid "Shift+Tab"
958
+msgstr "Shift+tabb"
959
 
960
-#: src/screen_chat.cxx:59
961
+#: src/KeyName.cxx:61
962
+msgid "Esc"
963
+msgstr "Esc"
964
+
965
+#: src/KeyName.cxx:63
966
+msgid "Insert"
967
+msgstr "Insert"
968
+
969
+#: src/KeyName.cxx:71
970
 #, c-format
971
-msgid ""
972
-"connected to MPD %u.%u.%u (you need at least \n"
973
-"version 0.17.0 to use the chat feature)"
974
+msgid "Ctrl-%c"
975
 msgstr ""
976
 
977
-#: src/screen_chat.cxx:177
978
-msgid "Your message"
979
+#: src/KeyName.cxx:73
980
+#, c-format
981
+msgid "Alt-%c"
982
 msgstr ""
983
 
984
-#: src/screen_chat.cxx:186
985
-msgid "Message could not be sent"
986
+#: src/ListWindow.cxx:491
987
+msgid "Range selection disabled"
988
 msgstr ""
989
 
990
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
991
-msgid "Chat"
992
+#: src/ListWindow.cxx:496
993
+msgid "Range selection enabled"
994
 msgstr ""
995
 
996
-#: src/screen_client.cxx:41
997
-msgid "Database update running..."
998
-msgstr "Databasen uppdateras..."
999
+#. translators: no lyrics were found for the song
1000
+#: src/LyricsPage.cxx:236
1001
+msgid "No lyrics"
1002
+msgstr "Ingen text"
1003
 
1004
-#: src/screen_client.cxx:49
1005
+#: src/LyricsPage.cxx:254
1006
 #, c-format
1007
-msgid "Database update of %s started"
1008
-msgstr "Uppdaterar databasen ifrån %s"
1009
+msgid "Lyrics timeout occurred after %d seconds"
1010
+msgstr ""
1011
 
1012
-#: src/screen_client.cxx:52
1013
-msgid "Database update started"
1014
-msgstr "Databasuppdatering påbörjad"
1015
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1016
+#: src/LyricsPage.cxx:490
1017
+msgid "Lyrics"
1018
+msgstr "Texter"
1019
 
1020
-#. translators: the "delete" command is only possible
1021
-#. for playlists; the user attempted to delete a song
1022
-#. or a directory or something else
1023
-#: src/screen_file.cxx:200
1024
-msgid "Deleting this item is not possible"
1025
-msgstr "Du kan inte ta bort det här föremålet"
1026
+#. translators: this message is displayed
1027
+#. while data is retrieved
1028
+#: src/LyricsPage.cxx:340
1029
+msgid "loading..."
1030
+msgstr "laddar..."
1031
 
1032
-#: src/screen_file.cxx:207
1033
-#, fuzzy, c-format
1034
-msgid "Delete playlist %s?"
1035
-msgstr "Ta bort spellista"
1036
+#: src/LyricsPage.cxx:361
1037
+msgid "Editor not configured"
1038
+msgstr ""
1039
 
1040
-#. translators: MPD deleted the playlist, as requested by the
1041
-#. user
1042
-#: src/screen_file.cxx:227
1043
-msgid "Playlist deleted"
1044
+#: src/LyricsPage.cxx:368
1045
+msgid "Do you really want to start an editor and edit these lyrics?"
1046
+msgstr ""
1047
+
1048
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1049
+msgid "Can't start editor"
1050
+msgstr ""
1051
+
1052
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1053
+msgid "Editor exited unexpectedly"
1054
+msgstr ""
1055
+
1056
+#. lyrics for the song were saved on hard disk
1057
+#: src/LyricsPage.cxx:439
1058
+msgid "Lyrics saved"
1059
+msgstr "Text sparad"
1060
+
1061
+#: src/LyricsPage.cxx:445
1062
+#, fuzzy
1063
+msgid "Lyrics deleted"
1064
 msgstr "Spellista borttagen"
1065
 
1066
-#. translators: caption of the browser screen
1067
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1068
-msgid "Browse"
1069
-msgstr "Filer"
1070
+#: src/LyricsPage.cxx:446
1071
+#, fuzzy
1072
+msgid "No saved lyrics"
1073
+msgstr "Spara texter"
1074
 
1075
-#: src/screen_find.cxx:29
1076
-msgid "Find"
1077
-msgstr "Sök"
1078
+#: src/Main.cxx:167
1079
+#, fuzzy, c-format
1080
+msgid "Connecting to %s"
1081
+msgstr "Ansluten till %s"
1082
 
1083
-#: src/screen_find.cxx:30
1084
-msgid "Find backward"
1085
-msgstr "Sök bakåt"
1086
+#: src/Main.cxx:187
1087
+#, fuzzy, c-format
1088
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1089
+msgstr "Fel: MPD version %d.%d.%d är för gammal (%s krävs)"
1090
 
1091
-#: src/screen_find.cxx:31
1092
-msgid "Jump"
1093
-msgstr "Hopp"
1094
+#. To translators: these credits are shown
1095
+#. when ncmpc is started with "--version"
1096
+#: src/options.cxx:213 src/options.cxx:216
1097
+msgid "translator-credits"
1098
+msgstr ""
1099
+"Launchpad Contributions:\n"
1100
+"  Björn Pettersson https://launchpad.net/~bjorn-hygiena\n"
1101
+"  Kalle Wallin https://launchpad.net/~kaw\n"
1102
+"  Rickard Närström https://launchpad.net/~riccetn\n"
1103
+"  nanker https://launchpad.net/~nanker"
1104
 
1105
-#: src/screen_find.cxx:82
1106
+#: src/OutputsPage.cxx:87
1107
 #, c-format
1108
-msgid "Unable to find '%s'"
1109
-msgstr "Kan inte hitta '%s'"
1110
-
1111
-#: src/screen_help.cxx:39
1112
-msgid "Movement"
1113
-msgstr "Navigation"
1114
+msgid "Output '%s' enabled"
1115
+msgstr "Utgång '%s' påslagen"
1116
 
1117
-#: src/screen_help.cxx:84
1118
-msgid "Global"
1119
-msgstr "Globala"
1120
+#: src/OutputsPage.cxx:98
1121
+#, c-format
1122
+msgid "Output '%s' disabled"
1123
+msgstr "Utgång '%s' avslagen"
1124
 
1125
-#: src/screen_help.cxx:121
1126
-msgid "Play"
1127
-msgstr "Starta/Spela markerad"
1128
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1129
+msgid "Outputs"
1130
+msgstr "Utgångar"
1131
 
1132
-#: src/screen_help.cxx:124
1133
-msgid "Move song up"
1134
-msgstr "Flytta spår uppåt"
1135
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1136
+msgid "Shuffled queue"
1137
+msgstr ""
1138
 
1139
-#: src/screen_help.cxx:125
1140
-msgid "Move song down"
1141
-msgstr "Flytta spår nedåt"
1142
+#: src/player_command.cxx:186
1143
+msgid "Cleared queue"
1144
+msgstr ""
1145
 
1146
-#: src/screen_help.cxx:128
1147
-msgid "Center"
1148
-msgstr "Centrera"
1149
+#. get path
1150
+#: src/QueuePage.cxx:307
1151
+msgid "Add"
1152
+msgstr "Lägg till"
1153
 
1154
-#: src/screen_help.cxx:136
1155
-msgid "Enter directory/Select and play song"
1156
-msgstr "Välj katalog/Markera och spela upp"
1157
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1158
+msgid "Queue"
1159
+msgstr ""
1160
 
1161
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1162
-#, fuzzy
1163
-msgid "Append song to queue"
1164
-msgstr "Lägg till i spellista"
1165
+#: src/QueuePage.cxx:380
1166
+#, c-format
1167
+msgid "Queue on %s"
1168
+msgstr ""
1169
 
1170
-#: src/screen_help.cxx:140
1171
-msgid "Delete playlist"
1172
-msgstr "Ta bort spellista"
1173
+#. query the user for a filename
1174
+#: src/save_playlist.cxx:85
1175
+msgid "Save queue as"
1176
+msgstr ""
1177
 
1178
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1179
-msgid "Search"
1180
-msgstr "Sök"
1181
+#: src/save_playlist.cxx:107
1182
+#, fuzzy, c-format
1183
+msgid "Replace %s?"
1184
+msgstr "Ersätt %s [%s/%s] ? "
1185
 
1186
-#: src/screen_help.cxx:151
1187
-msgid "Select and play"
1188
-msgstr "Lägg till spellistan och spela"
1189
+#. success
1190
+#: src/save_playlist.cxx:128
1191
+#, c-format
1192
+msgid "Saved %s"
1193
+msgstr "%s sparad"
1194
 
1195
-#: src/screen_help.cxx:162
1196
-msgid "View Lyrics"
1197
-msgstr "Visa texter"
1198
+#: src/screen_artist.cxx:186
1199
+#, c-format
1200
+msgid "All tracks of artist: %s"
1201
+msgstr "Alla spår av artist: %s"
1202
 
1203
-#: src/screen_help.cxx:163
1204
-msgid "(Re)load lyrics"
1205
-msgstr "Ladda (om) texter"
1206
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1207
+msgid "Album"
1208
+msgstr "Album"
1209
 
1210
-#. to translators: this hotkey aborts the retrieval of lyrics
1211
-#. from the server
1212
-#: src/screen_help.cxx:166
1213
-msgid "Interrupt retrieval"
1214
-msgstr "Avbryt hämtning"
1215
+#: src/screen_artist.cxx:195
1216
+#, fuzzy, c-format
1217
+msgid "Tracks of no album of artist: %s"
1218
+msgstr "Album av artist: %s"
1219
 
1220
-#: src/screen_help.cxx:167
1221
-msgid "Download lyrics for currently playing song"
1222
-msgstr "Ladda ner texter till låten som spelas just nu"
1223
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1224
+msgid "Artist"
1225
+msgstr "Artist"
1226
 
1227
-#: src/screen_help.cxx:168
1228
+#: src/screen_client.cxx:41
1229
 #, fuzzy
1230
-msgid "Add or edit lyrics"
1231
-msgstr "Spara texter"
1232
+msgid "Database update running"
1233
+msgstr "Databasen uppdateras..."
1234
 
1235
-#: src/screen_help.cxx:169
1236
-msgid "Save lyrics"
1237
-msgstr "Spara texter"
1238
+#: src/screen_client.cxx:48
1239
+#, c-format
1240
+msgid "Database update of %s started"
1241
+msgstr "Uppdaterar databasen ifrån %s"
1242
 
1243
-#: src/screen_help.cxx:170
1244
-#, fuzzy
1245
-msgid "Delete saved lyrics"
1246
-msgstr "Spara texter"
1247
+#: src/screen_client.cxx:51
1248
+msgid "Database update started"
1249
+msgstr "Databasuppdatering påbörjad"
1250
 
1251
-#: src/screen_help.cxx:177
1252
-msgid "Enable/disable output"
1253
-msgstr "Slå på/av utgång"
1254
+#: src/screen.cxx:160
1255
+msgid "Repeat mode is on"
1256
+msgstr "Upprepningsläge på"
1257
 
1258
-#: src/screen_help.cxx:184
1259
-msgid "Write a message"
1260
-msgstr ""
1261
+#: src/screen.cxx:161
1262
+msgid "Repeat mode is off"
1263
+msgstr "Upprepningsläge av"
1264
 
1265
-#: src/screen_help.cxx:189
1266
-msgid "Keydef screen"
1267
-msgstr ""
1268
+#: src/screen.cxx:165
1269
+msgid "Random mode is on"
1270
+msgstr "Slumpningsläge på"
1271
 
1272
-#: src/screen_help.cxx:191
1273
-msgid "Edit keydefs for selected command"
1274
+#: src/screen.cxx:166
1275
+msgid "Random mode is off"
1276
+msgstr "Slumpningsläge av"
1277
+
1278
+#. "single" mode means
1279
+#. that MPD will
1280
+#. automatically stop
1281
+#. after playing one
1282
+#. single song
1283
+#: src/screen.cxx:175
1284
+msgid "Single mode is on"
1285
 msgstr ""
1286
 
1287
-#: src/screen_help.cxx:192
1288
-msgid "Remove selected keydef"
1289
+#: src/screen.cxx:176
1290
+msgid "Single mode is off"
1291
 msgstr ""
1292
 
1293
-#: src/screen_help.cxx:193
1294
-#, fuzzy
1295
-msgid "Add a keydef"
1296
-msgstr "Lägg till ny tangent"
1297
+#. "consume" mode means
1298
+#. that MPD removes each
1299
+#. song which has
1300
+#. finished playing
1301
+#: src/screen.cxx:184
1302
+msgid "Consume mode is on"
1303
+msgstr "Förtäringsläge på"
1304
 
1305
-#: src/screen_help.cxx:194
1306
-msgid "Go up a level"
1307
-msgstr "Gå upp en nivå"
1308
+#: src/screen.cxx:185
1309
+msgid "Consume mode is off"
1310
+msgstr "Förtäringsläge av"
1311
 
1312
-#: src/screen_help.cxx:195
1313
-msgid "Apply and save changes"
1314
-msgstr "Verkställ och spara förändringar"
1315
+#: src/screen.cxx:188
1316
+#, c-format
1317
+msgid "Crossfade %d seconds"
1318
+msgstr "Mjuk övergång %d sekunder"
1319
 
1320
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1321
-msgid "Help"
1322
-msgstr "Hjälp"
1323
+#: src/screen.cxx:200
1324
+msgid "Database updated"
1325
+msgstr "Databas uppdaterad"
1326
 
1327
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1328
-msgid "Error: Screen too small"
1329
-msgstr "Fel: Terminalen är för liten"
1330
+#: src/screen.cxx:250
1331
+msgid "Find mode: Wrapped"
1332
+msgstr "Sökläge: Börja om"
1333
 
1334
-#: src/screen_keydef.cxx:141
1335
-msgid "You have new key bindings"
1336
-msgstr "Tangentdefinitioner uppdaterade"
1337
+#: src/screen.cxx:251
1338
+msgid "Find mode: Normal"
1339
+msgstr "Sökläge: Till början/slut"
1340
 
1341
-#: src/screen_keydef.cxx:143
1342
-msgid "Keybindings unchanged."
1343
-msgstr "Tangentdefinitioner oförändrade."
1344
+#: src/screen.cxx:256
1345
+msgid "Auto center mode: On"
1346
+msgstr "Automatisk centrering påslaget"
1347
 
1348
-#: src/screen_keydef.cxx:153
1349
-#, c-format
1350
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1351
-msgstr "Fel: Kunde inte skapa mappen ~/.ncmpc - %s"
1352
+#: src/screen.cxx:257
1353
+msgid "Auto center mode: Off"
1354
+msgstr "Automatisk centrering avslaget"
1355
 
1356
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1357
-#, c-format
1358
-msgid "Error: %s - %s"
1359
-msgstr "Fel: %s - %s"
1360
+#: src/screen_find.cxx:31
1361
+msgid "Find"
1362
+msgstr "Sök"
1363
 
1364
-#: src/screen_keydef.cxx:171
1365
+#: src/screen_find.cxx:32
1366
+msgid "Find backward"
1367
+msgstr "Sök bakåt"
1368
+
1369
+#: src/screen_find.cxx:33
1370
+msgid "Jump"
1371
+msgstr "Hopp"
1372
+
1373
+#: src/screen_find.cxx:79
1374
 #, c-format
1375
-msgid "Wrote %s"
1376
-msgstr "Sparade %s"
1377
+msgid "Unable to find '%s'"
1378
+msgstr "Kan inte hitta '%s'"
1379
 
1380
-#: src/screen_keydef.cxx:250
1381
+#: src/screen_keydef.cxx:161
1382
 msgid "Deleted"
1383
 msgstr "Borttagen"
1384
 
1385
-#: src/screen_keydef.cxx:265
1386
+#: src/screen_keydef.cxx:177
1387
 #, c-format
1388
 msgid "Enter new key for %s: "
1389
 msgstr "Ny tangent för %s: "
1390
 
1391
-#: src/screen_keydef.cxx:276
1392
+#: src/screen_keydef.cxx:187
1393
 msgid "Ctrl-Space can't be used"
1394
 msgstr ""
1395
 
1396
-#: src/screen_keydef.cxx:282
1397
+#: src/screen_keydef.cxx:193
1398
 #, c-format
1399
 msgid "Error: key %s is already used for %s"
1400
 msgstr "Fel: Tangenten %s används redan för %s"
1401
 
1402
-#: src/screen_keydef.cxx:291
1403
+#: src/screen_keydef.cxx:202
1404
 #, c-format
1405
 msgid "Assigned %s to %s"
1406
 msgstr "%s tilldelad %s"
1407
 
1408
-#: src/screen_keydef.cxx:317
1409
-msgid "===> Apply key bindings "
1410
-msgstr "===> Verkställ "
1411
-
1412
-#: src/screen_keydef.cxx:319
1413
-msgid "===> Apply & Save key bindings  "
1414
-msgstr "===> Verkställ och spara  "
1415
-
1416
-#: src/screen_keydef.cxx:347
1417
+#: src/screen_keydef.cxx:229
1418
 msgid "Add new key"
1419
 msgstr "Lägg till ny tangent"
1420
 
1421
-#: src/screen_keydef.cxx:410
1422
-msgid "Note: Did you forget to 'Apply' your changes?"
1423
-msgstr "OBS! Glömde du att 'Verkställa' dina ändringar?"
1424
-
1425
-#: src/screen_keydef.cxx:417
1426
-msgid "Edit key bindings"
1427
-msgstr "Ändra tangentdefinitioner"
1428
-
1429
-#: src/screen_keydef.cxx:419
1430
+#: src/screen_keydef.cxx:251
1431
 #, c-format
1432
 msgid "Edit keys for %s"
1433
 msgstr "Ändra tangenter för kommandot %s"
1434
 
1435
-#. translators: no lyrics were found for the song
1436
-#: src/screen_lyrics.cxx:208
1437
-msgid "No lyrics"
1438
-msgstr "Ingen text"
1439
-
1440
-#: src/screen_lyrics.cxx:226
1441
-#, c-format
1442
-msgid "Lyrics timeout occurred after %d seconds"
1443
-msgstr ""
1444
-
1445
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1446
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1447
-msgid "Lyrics"
1448
-msgstr "Texter"
1449
-
1450
-#. translators: this message is displayed
1451
-#. while data is retrieved
1452
-#: src/screen_lyrics.cxx:330
1453
-msgid "loading..."
1454
-msgstr "laddar..."
1455
-
1456
-#: src/screen_lyrics.cxx:361
1457
-msgid "Editor not configured"
1458
-msgstr ""
1459
-
1460
-#: src/screen_lyrics.cxx:367
1461
-msgid "Do you really want to start an editor and edit these lyrics?"
1462
-msgstr ""
1463
-
1464
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1465
-msgid "Can't start editor"
1466
-msgstr ""
1467
-
1468
-#: src/screen_lyrics.cxx:411
1469
-#, c-format
1470
-msgid "Editor exited unexpectedly (%d)"
1471
-msgstr ""
1472
-
1473
-#: src/screen_lyrics.cxx:414
1474
-#, c-format
1475
-msgid "Editor exited unexpectedly (signal %d)"
1476
-msgstr ""
1477
-
1478
-#. lyrics for the song were saved on hard disk
1479
-#: src/screen_lyrics.cxx:436
1480
-msgid "Lyrics saved"
1481
-msgstr "Text sparad"
1482
+#: src/screen_keydef.cxx:393
1483
+msgid "You have new key bindings"
1484
+msgstr "Tangentdefinitioner uppdaterade"
1485
 
1486
-#: src/screen_lyrics.cxx:443
1487
-#, fuzzy
1488
-msgid "Lyrics deleted"
1489
-msgstr "Spellista borttagen"
1490
+#: src/screen_keydef.cxx:395
1491
+msgid "Keybindings unchanged."
1492
+msgstr "Tangentdefinitioner oförändrade."
1493
 
1494
-#: src/screen_lyrics.cxx:446
1495
+#: src/screen_keydef.cxx:405
1496
 #, fuzzy
1497
-msgid "No saved lyrics"
1498
-msgstr "Spara texter"
1499
+msgid "Unable to write configuration"
1500
+msgstr "Inkomplett tangentdefinition"
1501
 
1502
-#: src/screen_outputs.cxx:60
1503
+#: src/screen_keydef.cxx:421
1504
 #, c-format
1505
-msgid "Output '%s' enabled"
1506
-msgstr "Utgång '%s' påslagen"
1507
+msgid "Wrote %s"
1508
+msgstr "Sparade %s"
1509
 
1510
-#: src/screen_outputs.cxx:71
1511
-#, c-format
1512
-msgid "Output '%s' disabled"
1513
-msgstr "Utgång '%s' avslagen"
1514
+#: src/screen_keydef.cxx:433
1515
+msgid "===> Apply key bindings "
1516
+msgstr "===> Verkställ "
1517
 
1518
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1519
-msgid "Outputs"
1520
-msgstr "Utgångar"
1521
+#: src/screen_keydef.cxx:435
1522
+msgid "===> Apply & Save key bindings  "
1523
+msgstr "===> Verkställ och spara  "
1524
 
1525
-#. get path
1526
-#: src/screen_queue.cxx:274
1527
-msgid "Add"
1528
-msgstr "Lägg till"
1529
+#: src/screen_keydef.cxx:472
1530
+msgid "Edit key bindings"
1531
+msgstr "Ändra tangentdefinitioner"
1532
 
1533
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1534
-msgid "Queue"
1535
-msgstr ""
1536
+#: src/screen_keydef.cxx:554
1537
+msgid "Note: Did you forget to 'Apply' your changes?"
1538
+msgstr "OBS! Glömde du att 'Verkställa' dina ändringar?"
1539
 
1540
-#: src/screen_queue.cxx:384
1541
-#, c-format
1542
-msgid "Queue on %s"
1543
+#: src/screen_keydef.cxx:604
1544
+msgid "Keys"
1545
 msgstr ""
1546
 
1547
-#: src/screen_search.cxx:48
1548
+#: src/screen_utils.cxx:124
1549
+msgid "Password"
1550
+msgstr "Lösenord"
1551
+
1552
+#: src/SearchPage.cxx:51
1553
 msgid "artist"
1554
 msgstr "artist"
1555
 
1556
-#: src/screen_search.cxx:49
1557
+#: src/SearchPage.cxx:52
1558
 msgid "album"
1559
 msgstr "album"
1560
 
1561
-#: src/screen_search.cxx:50
1562
+#: src/SearchPage.cxx:53
1563
 msgid "title"
1564
 msgstr "titel"
1565
 
1566
-#: src/screen_search.cxx:51
1567
+#: src/SearchPage.cxx:54
1568
 msgid "track"
1569
 msgstr "spår"
1570
 
1571
-#: src/screen_search.cxx:52
1572
+#: src/SearchPage.cxx:55
1573
 msgid "name"
1574
 msgstr "namn"
1575
 
1576
-#: src/screen_search.cxx:53
1577
+#: src/SearchPage.cxx:56
1578
 msgid "genre"
1579
 msgstr "genre"
1580
 
1581
-#: src/screen_search.cxx:54
1582
+#: src/SearchPage.cxx:57
1583
 msgid "date"
1584
 msgstr "datum"
1585
 
1586
-#: src/screen_search.cxx:55
1587
+#: src/SearchPage.cxx:58
1588
 msgid "composer"
1589
 msgstr "kompositör"
1590
 
1591
-#: src/screen_search.cxx:56
1592
+#: src/SearchPage.cxx:59
1593
 msgid "performer"
1594
 msgstr "uppträdare"
1595
 
1596
-#: src/screen_search.cxx:57
1597
+#: src/SearchPage.cxx:60
1598
 msgid "comment"
1599
 msgstr "kommentar"
1600
 
1601
-#: src/screen_search.cxx:65
1602
+#: src/SearchPage.cxx:68
1603
 msgid "file"
1604
 msgstr "fil"
1605
 
1606
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1607
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1608
 msgid "Title"
1609
 msgstr "Titel"
1610
 
1611
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1612
-msgid "Artist"
1613
-msgstr "Artist"
1614
-
1615
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1616
-msgid "Album"
1617
-msgstr "Album"
1618
-
1619
-#: src/screen_search.cxx:85
1620
+#: src/SearchPage.cxx:88
1621
 msgid "Filename"
1622
 msgstr "Filnamn"
1623
 
1624
-#: src/screen_search.cxx:86
1625
+#: src/SearchPage.cxx:89
1626
 msgid "Artist + Title"
1627
 msgstr "Artist + titel"
1628
 
1629
-#: src/screen_search.cxx:244
1630
-#, c-format
1631
-msgid "No argument for search tag %s"
1632
-msgstr "Argumentet för söktyp %s saknas"
1633
-
1634
-#: src/screen_search.cxx:253
1635
+#: src/SearchPage.cxx:270
1636
 #, c-format
1637
 msgid "Bad search tag %s"
1638
 msgstr "Felaktig söktyp %s"
1639
 
1640
-#. if( pattern==nullptr )
1641
-#. search_new(screen, c);
1642
-#. else
1643
-#: src/screen_search.cxx:400
1644
-#, c-format
1645
-msgid "Press %s for a new search"
1646
-msgstr "Tryck %s för ny sökning"
1647
-
1648
-#: src/screen_search.cxx:427
1649
+#: src/SearchPage.cxx:284
1650
 #, c-format
1651
-msgid "Search: %s"
1652
-msgstr "Sök: %s"
1653
-
1654
-#: src/screen_search.cxx:430
1655
-#, c-format
1656
-msgid "Search: Results for %s [%s]"
1657
-msgstr "Sökresultat för %s [%s]"
1658
+msgid "No argument for search tag %s"
1659
+msgstr "Argumentet för söktyp %s saknas"
1660
 
1661
-#: src/screen_search.cxx:434
1662
-#, c-format
1663
-msgid "Search: Press %s for a new search [%s]"
1664
-msgstr "Tryck %s för ny sökning [%s]"
1665
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1666
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1667
+msgid "Search"
1668
+msgstr "Sök"
1669
 
1670
-#: src/screen_search.cxx:458
1671
+#: src/SearchPage.cxx:436
1672
 #, c-format
1673
 msgid "Search mode: %s"
1674
 msgstr "Sök efter: %s"
1675
 
1676
-#: src/screen_song.cxx:54
1677
+#: src/SongPage.cxx:67
1678
 msgid "Length"
1679
 msgstr "Längd"
1680
 
1681
-#: src/screen_song.cxx:55
1682
+#: src/SongPage.cxx:68
1683
 msgid "Position"
1684
 msgstr ""
1685
 
1686
-#: src/screen_song.cxx:56
1687
+#: src/SongPage.cxx:69
1688
 msgid "Composer"
1689
 msgstr "Kompositör"
1690
 
1691
-#: src/screen_song.cxx:57
1692
+#: src/SongPage.cxx:70
1693
 msgid "Name"
1694
 msgstr "Namn"
1695
 
1696
-#: src/screen_song.cxx:58
1697
+#: src/SongPage.cxx:71
1698
 msgid "Disc"
1699
 msgstr "Skiva"
1700
 
1701
-#: src/screen_song.cxx:59
1702
+#: src/SongPage.cxx:72
1703
 msgid "Track"
1704
 msgstr "Spår"
1705
 
1706
-#: src/screen_song.cxx:60
1707
+#: src/SongPage.cxx:73
1708
 msgid "Date"
1709
 msgstr "Datum"
1710
 
1711
-#: src/screen_song.cxx:61
1712
+#: src/SongPage.cxx:74
1713
 msgid "Genre"
1714
 msgstr "Genre"
1715
 
1716
-#: src/screen_song.cxx:62
1717
+#: src/SongPage.cxx:75
1718
 msgid "Comment"
1719
 msgstr "Kommentar"
1720
 
1721
-#: src/screen_song.cxx:63
1722
+#: src/SongPage.cxx:76
1723
 msgid "Path"
1724
 msgstr "Sökväg"
1725
 
1726
-#: src/screen_song.cxx:64
1727
+#: src/SongPage.cxx:77
1728
 msgid "Bitrate"
1729
 msgstr "Bithastighet"
1730
 
1731
-#: src/screen_song.cxx:65
1732
+#: src/SongPage.cxx:78
1733
 msgid "Format"
1734
 msgstr ""
1735
 
1736
-#: src/screen_song.cxx:82
1737
+#: src/SongPage.cxx:95
1738
 msgid "Number of artists"
1739
 msgstr "Antal artister"
1740
 
1741
-#: src/screen_song.cxx:83
1742
+#: src/SongPage.cxx:96
1743
 msgid "Number of albums"
1744
 msgstr "Antal album"
1745
 
1746
-#: src/screen_song.cxx:84
1747
+#: src/SongPage.cxx:97
1748
 msgid "Number of songs"
1749
 msgstr "Antal låtar"
1750
 
1751
-#: src/screen_song.cxx:85
1752
+#: src/SongPage.cxx:98
1753
 msgid "Uptime"
1754
 msgstr "Upptid"
1755
 
1756
-#: src/screen_song.cxx:86
1757
+#: src/SongPage.cxx:99
1758
 msgid "Most recent db update"
1759
 msgstr "Senaste databasuppdateringen"
1760
 
1761
-#: src/screen_song.cxx:87
1762
+#: src/SongPage.cxx:100
1763
 msgid "Playtime"
1764
 msgstr "Speltid"
1765
 
1766
-#: src/screen_song.cxx:88
1767
+#: src/SongPage.cxx:101
1768
 msgid "DB playtime"
1769
 msgstr ""
1770
 
1771
-#: src/screen_song.cxx:173
1772
+#: src/SongPage.cxx:204
1773
 msgid "Song viewer"
1774
 msgstr "Spår"
1775
 
1776
-#: src/screen_song.cxx:337
1777
+#: src/SongPage.cxx:370
1778
 msgid "MPD statistics"
1779
 msgstr "MPD-statistik"
1780
 
1781
-#: src/screen_song.cxx:427
1782
+#: src/SongPage.cxx:455
1783
 msgid "Selected song"
1784
 msgstr "Markerad låt"
1785
 
1786
-#: src/screen_song.cxx:437
1787
+#: src/SongPage.cxx:465
1788
 msgid "Currently playing song"
1789
 msgstr ""
1790
 
1791
-#: src/screen_song.cxx:442
1792
+#: src/SongPage.cxx:470
1793
 #, c-format
1794
 msgid "%d kbps"
1795
 msgstr "%d kb/s"
1796
 
1797
-#. NOTE: if one day a translator decides to use a multi-byte character
1798
-#. for one of the yes/no keys, we'll have to parse it properly
1799
-#: src/screen_utils.cxx:80
1800
-#, fuzzy, c-format
1801
-msgid "%s [%s/%s] "
1802
-msgstr "Ersätt %s [%s/%s] ? "
1803
-
1804
-#: src/screen_utils.cxx:121
1805
-msgid "Password"
1806
-msgstr "Lösenord"
1807
+#: src/SongPage.cxx:554
1808
+msgid "Song"
1809
+msgstr ""
1810
 
1811
-#: src/status_bar.cxx:121
1812
+#: src/StatusBar.cxx:104
1813
 msgid "Playing:"
1814
 msgstr "Spelar:"
1815
 
1816
-#: src/status_bar.cxx:124
1817
+#: src/StatusBar.cxx:108
1818
 msgid "[Paused]"
1819
 msgstr "[Pausad]"
1820
 
1821
-#: src/title_bar.cxx:99
1822
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1823
+#, fuzzy
1824
+msgid "Unknown color"
1825
+msgstr "Okänt kommando"
1826
+
1827
+#: src/Styles.cxx:333
1828
+#, fuzzy
1829
+msgid "Unknown color field"
1830
+msgstr "Varning: %s ej definierad.\n"
1831
+
1832
+#: src/Styles.cxx:375
1833
+msgid "Terminal lacks color capabilities"
1834
+msgstr "Terminalen saknar stöd för färger"
1835
+
1836
+#: src/time_format.cxx:44
1837
+msgid "year"
1838
+msgstr ""
1839
+
1840
+#: src/time_format.cxx:46
1841
+msgid "years"
1842
+msgstr ""
1843
+
1844
+#: src/time_format.cxx:54
1845
+msgid "week"
1846
+msgstr ""
1847
+
1848
+#: src/time_format.cxx:57
1849
+msgid "weeks"
1850
+msgstr ""
1851
+
1852
+#: src/time_format.cxx:65
1853
+msgid "day"
1854
+msgstr ""
1855
+
1856
+#: src/time_format.cxx:68
1857
+msgid "days"
1858
+msgstr ""
1859
+
1860
+#: src/TitleBar.cxx:100
1861
 msgid "Volume n/a"
1862
 msgstr "Volym: n/a"
1863
 
1864
-#: src/title_bar.cxx:101
1865
+#: src/TitleBar.cxx:102
1866
 #, c-format
1867
 msgid "Volume %d%%"
1868
 msgstr "Volym: %d%%"
1869
 
1870
+#, fuzzy
1871
+#~ msgid "Add url/file to queue"
1872
+#~ msgstr "Lägg till url eller fil till spellistan"
1873
+
1874
+#~ msgid "Move song up"
1875
+#~ msgstr "Flytta spår uppåt"
1876
+
1877
+#~ msgid "Move song down"
1878
+#~ msgstr "Flytta spår nedåt"
1879
+
1880
+#~ msgid "Press %s for a new search"
1881
+#~ msgstr "Tryck %s för ny sökning"
1882
+
1883
+#~ msgid "Search: %s"
1884
+#~ msgstr "Sök: %s"
1885
+
1886
+#~ msgid "Search: Results for %s [%s]"
1887
+#~ msgstr "Sökresultat för %s [%s]"
1888
+
1889
+#~ msgid "Search: Press %s for a new search [%s]"
1890
+#~ msgstr "Tryck %s för ny sökning [%s]"
1891
+
1892
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1893
+#~ msgstr "Ansluter till %s... [Tryck %s för att avbryta]"
1894
+
1895
+#~ msgid "press %s for the key editor"
1896
+#~ msgstr "tryck på %s för att korrigera"
1897
+
1898
+#~ msgid "Album: %s - %s"
1899
+#~ msgstr "Album: %s - %s"
1900
+
1901
+#, fuzzy
1902
+#~ msgid "Adding album %s..."
1903
+#~ msgstr "Laddar spellista %s..."
1904
+
1905
+#, fuzzy
1906
+#~ msgid "Adding %s..."
1907
+#~ msgstr "laddar..."
1908
+
1909
+#~ msgid "Error: Screen too small"
1910
+#~ msgstr "Fel: Terminalen är för liten"
1911
+
1912
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1913
+#~ msgstr "Fel: Kunde inte skapa mappen ~/.ncmpc - %s"
1914
+
1915
+#~ msgid "Error: %s - %s"
1916
+#~ msgstr "Fel: %s - %s"
1917
+
1918
+#, fuzzy
1919
+#~ msgid "%s [%s/%s] "
1920
+#~ msgstr "Ersätt %s [%s/%s] ? "
1921
+
1922
 #~ msgid "Delete playlist %s [%s/%s] ? "
1923
 #~ msgstr "Ta bort spellista %s [%s/%s] ? "
1924
 
1925
 #~ msgid "Warning: Unknown color - %s\n"
1926
 #~ msgstr "Varning: Okänd färg - %s\n"
1927
 
1928
-#~ msgid "Connected to %s"
1929
-#~ msgstr "Ansluten till %s"
1930
-
1931
 #~ msgid "Shuffled playlist"
1932
 #~ msgstr "Spellistan slumpsorterades"
1933
 
1934
ncmpc-0.30.tar.xz/po/uk.po -> ncmpc-0.32.tar.xz/po/uk.po Changed
1920
 
1
@@ -6,7 +6,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-08-11 10:30+0300\n"
8
 "Last-Translator: Oleksandr Kovalenko <alx.kovalenko@gmail.com>\n"
9
 "Language-Team: Ukrainian <uk@li.org>\n"
10
@@ -19,423 +19,358 @@
11
 "X-Poedit-Language: Ukrainian\n"
12
 "X-Poedit-Country: UKRAINE\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "Невідома команда"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "Всі доріжки"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "Застереження: невідоме поле кольору - %s\n"
27
+msgid "Albums"
28
+msgstr "Альбом"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "Терміналу бракує підтримки зміни кольорів"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "Альбоми виконавця: %s"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "Терміналу бракує підтримки можливостей кольорів"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "Додається '%s' до переліку програвання"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "Всі виконавці"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "Клавіша %s призначена до %s та %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "Екран конфігурації клавіш"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "Вийти"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "Перемістити курсор доверху"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "Перемістити курсор донизу"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "Перемістити курсор на початок екрану"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "Перемістити курсор до середини екрану"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "Перемістити курсор в кінець екрану"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "Перемістити курсор на початок переліку"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "Перемістити курсор в кінець переліку"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "Сторінка догори"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "Сторінка донизу"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "Вибір обсягу"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "Прогорнути один рядок донизу"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "Прогорнути один рядок догори"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "Прогорнути півекрану догори"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "Прогорнути півекрану донизу"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "Вибрати пісню, що зараз програється"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "Екран допомоги"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "Екран призначення клавіш"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "Екран перегляду"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "Програти чи увійти до каталогу"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "Призупинити"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "Зупинити"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "Обрізати"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "Наступна доріжка"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "Попередня доріжка"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "Шукати попереду"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "Шукати позаду"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "Збільшити гучність"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "Зменшити гучність"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "Вибрати чи зняти виділення пісні в переліку програвання"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "Вибрати всі перелічені елементи"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "Видалити пісню з переліку програвання"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "Перемкнути режим повторення"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "Перемкнути випадковий режим"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "Перемкнути режим повторення однієї пісні"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "Перемкнути режим вичерпання"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "Перемкнути режим плавного переходу"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "Розпочати оновлення бази даних музики"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "Додати url-посилання чи файл до переліку програвання"
286
+msgid "Append song to queue"
287
+msgstr "Долучити пісню до переліку програвання"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "Перейти до кореневої теки"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "Перейти до батьківської теки"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "Визначити розміщення пісні в оглядачі"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "Перемістити елемент догори"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "Перемістити елемент донизу"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "Оновити екран"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "Перемкнути режим пошуку"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "Перемкнути режим автоматичного центрування"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "Наступний екран"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "Попередній екран"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "Поміняти останні екрани"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "Знайти попереду"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "Знайти попереду наступне"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "Знайти позаду"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "Знайти позаду попереднє"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "Перейти до"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "Екран виконавців"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "Екран пошуку"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "Змінити режим пошуку"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "Переглянути вибрану та пісню, що зараз програється"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "Екран текстів пісень"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "Припинити дію"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "Оновити текст пісні"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "Екран виходів"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "Наступний екран"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "Не визначений"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Space"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Delete"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Up"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Down"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Left"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Right"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "Клавіша %s призначена до %s та %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "Помилка"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "Неправильне визначення гарячої клавіші"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "Невідома команда"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "Незавершена конфігурація гарячих клавіш"
545
 
546
@@ -443,803 +378,872 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "Неправильний тип показу часу"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "Відсутній \"=\""
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "Неправильна назва кольору"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "Незавершене визначення кольору"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "Неправильне число"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "Неправильне визначення кольору"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "Невідома назва екрану"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "Помилковий режим пошуку"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "Невідомий режим пошуку"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "Невідомий конфігураційний параметр"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "y"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "Терміналу бракує підтримки зміни кольорів"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "Видалити цей елемент неможливо"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "Вибір обсягу вимкнений"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "Видалити перелік програвання"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "Вибір обсягу увімкнений"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "Перервано"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "Встановлення з'єднання з %s...  [Натисніть %s щоб припинити]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "Перелік програвання видалений"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "Огляд"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "Помилка: MPD версії %d.%d.%d застаріла (необхідна %s)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "Завантажується перелік програвання %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "натисніть %s щоб редагувати клавіші"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "Переміщення"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr "Oleksandr Kovalenko <alx.kovalenko@gmail.com>"
674
+#: src/HelpPage.cxx:105
675
+msgid "Global"
676
+msgstr "Загальні"
677
 
678
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
679
-msgid "Shuffled queue"
680
-msgstr ""
681
+#: src/HelpPage.cxx:142
682
+msgid "Play"
683
+msgstr "Програти"
684
 
685
-#: src/player_command.cxx:184
686
-msgid "Cleared queue"
687
-msgstr ""
688
+#: src/HelpPage.cxx:149
689
+msgid "Center"
690
+msgstr "По центру"
691
 
692
-#. query the user for a filename
693
-#: src/save_playlist.cxx:109
694
-msgid "Save queue as"
695
-msgstr ""
696
+#: src/HelpPage.cxx:157
697
+msgid "Enter directory/Select and play song"
698
+msgstr "Ввести теку чи вибрати та програти пісню"
699
 
700
-#: src/save_playlist.cxx:140
701
-#, fuzzy, c-format
702
-msgid "Replace %s?"
703
-msgstr "Замінити %s [%s/%s] ? "
704
+#: src/HelpPage.cxx:161
705
+msgid "Delete playlist"
706
+msgstr "Видалити перелік програвання"
707
 
708
-#. translators: a dialog was aborted by the user
709
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
710
-#: src/screen_lyrics.cxx:370
711
-msgid "Aborted"
712
-msgstr "Перервано"
713
+#: src/HelpPage.cxx:171
714
+#, fuzzy
715
+msgid "New search"
716
+msgstr "Пошук"
717
 
718
-#. success
719
-#: src/save_playlist.cxx:171
720
-#, c-format
721
-msgid "Saved %s"
722
-msgstr "Збережений %s"
723
+#: src/HelpPage.cxx:172
724
+msgid "Select and play"
725
+msgstr "Вибрати та програти"
726
 
727
-#: src/screen.cxx:154
728
-msgid "Repeat mode is on"
729
-msgstr "Режим повторення увімкнений"
730
+#: src/HelpPage.cxx:183
731
+msgid "View Lyrics"
732
+msgstr "Переглянути текст пісні"
733
 
734
-#: src/screen.cxx:155
735
-msgid "Repeat mode is off"
736
-msgstr "Режим повторення вимкнений"
737
+#: src/HelpPage.cxx:184
738
+msgid "(Re)load lyrics"
739
+msgstr "(Пере)завантажити текст пісні"
740
 
741
-#: src/screen.cxx:159
742
-msgid "Random mode is on"
743
-msgstr "Режим випадкового програвання увімкнений"
744
+#. to translators: this hotkey aborts the retrieval of lyrics
745
+#. from the server
746
+#: src/HelpPage.cxx:187
747
+msgid "Interrupt retrieval"
748
+msgstr "Припинити отримання"
749
 
750
-#: src/screen.cxx:160
751
-msgid "Random mode is off"
752
-msgstr "Режим випадкового програвання вимкнений"
753
+#: src/HelpPage.cxx:188
754
+msgid "Download lyrics for currently playing song"
755
+msgstr "Завантажити текст для пісні, що зараз програється"
756
 
757
-#. "single" mode means
758
-#. that MPD will
759
-#. automatically stop
760
-#. after playing one
761
-#. single song
762
-#: src/screen.cxx:169
763
-msgid "Single mode is on"
764
-msgstr "Режим повторення однієї доріжки увімкнений"
765
+#: src/HelpPage.cxx:189
766
+#, fuzzy
767
+msgid "Add or edit lyrics"
768
+msgstr "Немає збереженого тексту пісні"
769
 
770
-#: src/screen.cxx:170
771
-msgid "Single mode is off"
772
-msgstr "Режим повторення однієї доріжки вимкнений"
773
+#: src/HelpPage.cxx:190
774
+msgid "Save lyrics"
775
+msgstr "Зберегти текст пісні"
776
 
777
-#. "consume" mode means
778
-#. that MPD removes each
779
-#. song which has
780
-#. finished playing
781
-#: src/screen.cxx:178
782
-msgid "Consume mode is on"
783
-msgstr "Режим вичерпання увімкнений"
784
+#: src/HelpPage.cxx:191
785
+msgid "Delete saved lyrics"
786
+msgstr "Видалити збережений текст пісні"
787
 
788
-#: src/screen.cxx:179
789
-msgid "Consume mode is off"
790
-msgstr "Режим вичерпання вимкнений"
791
+#: src/HelpPage.cxx:198
792
+msgid "Enable/disable output"
793
+msgstr "Увімкнути/вимкнути вихід"
794
 
795
-#: src/screen.cxx:182
796
-#, c-format
797
-msgid "Crossfade %d seconds"
798
-msgstr "Плавний перехід: %dс"
799
+#: src/HelpPage.cxx:205
800
+msgid "Write a message"
801
+msgstr ""
802
 
803
-#: src/screen.cxx:194
804
-msgid "Database updated"
805
-msgstr "База даних оновлена"
806
+#: src/HelpPage.cxx:210
807
+msgid "Keydef screen"
808
+msgstr "Екран призначення клавіш"
809
 
810
-#: src/screen.cxx:226
811
-msgid "Find mode: Wrapped"
812
-msgstr "Режим пошуку: завернутий (розділений???)"
813
+#: src/HelpPage.cxx:212
814
+msgid "Edit keydefs for selected command"
815
+msgstr "Редагувати призначену клавішу для вибраної команди"
816
 
817
-#: src/screen.cxx:227
818
-msgid "Find mode: Normal"
819
-msgstr "Режим пошуку: звичайний"
820
+#: src/HelpPage.cxx:213
821
+msgid "Remove selected keydef"
822
+msgstr "Вилучити вибране призначення клавіші"
823
 
824
-#: src/screen.cxx:232
825
-msgid "Auto center mode: On"
826
-msgstr "Режим автоматичного центрування: увімкнено"
827
+#: src/HelpPage.cxx:214
828
+#, fuzzy
829
+msgid "Add a keydef"
830
+msgstr "Додати нову клавішу"
831
 
832
-#: src/screen.cxx:233
833
-msgid "Auto center mode: Off"
834
-msgstr "Режим автоматичного центрування: вимкнено"
835
+#: src/HelpPage.cxx:215
836
+msgid "Go up a level"
837
+msgstr "На рівень вище"
838
 
839
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
840
-msgid "All tracks"
841
-msgstr "Всі доріжки"
842
+#: src/HelpPage.cxx:216
843
+msgid "Apply and save changes"
844
+msgstr "Застосувати та зберегти зміни"
845
 
846
-#: src/screen_artist.cxx:384
847
-msgid "All artists"
848
-msgstr "Всі виконавці"
849
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
850
+msgid "Help"
851
+msgstr "Допомога"
852
 
853
-#: src/screen_artist.cxx:389
854
-#, c-format
855
-msgid "Albums of artist: %s"
856
-msgstr "Альбоми виконавця: %s"
857
+#: src/i18n.h:43
858
+msgid "y"
859
+msgstr "y"
860
 
861
-#: src/screen_artist.cxx:398
862
-#, c-format
863
-msgid "All tracks of artist: %s"
864
-msgstr "Всі доріжки виконавця: %s"
865
+#: src/i18n.h:44
866
+msgid "n"
867
+msgstr "n"
868
 
869
-#: src/screen_artist.cxx:401
870
-#, c-format
871
-msgid "Album: %s - %s"
872
-msgstr "Альбом: %s - %s"
873
+#: src/KeyName.cxx:31
874
+msgid "Undefined"
875
+msgstr "Не визначений"
876
 
877
-#: src/screen_artist.cxx:405
878
-#, c-format
879
-msgid "Tracks of no album of artist: %s"
880
-msgstr "Доріжки без альбому виконавця: %s"
881
+#: src/KeyName.cxx:33
882
+msgid "Space"
883
+msgstr "Space"
884
 
885
-#: src/screen_artist.cxx:450
886
-#, c-format
887
-msgid "Adding album %s..."
888
-msgstr "Додається альбом %s..."
889
+#: src/KeyName.cxx:35
890
+msgid "Enter"
891
+msgstr "Enter"
892
+
893
+#: src/KeyName.cxx:37
894
+msgid "Backspace"
895
+msgstr "Backspace"
896
+
897
+#: src/KeyName.cxx:39
898
+msgid "Delete"
899
+msgstr "Delete"
900
+
901
+#: src/KeyName.cxx:41
902
+msgid "Up"
903
+msgstr "Up"
904
+
905
+#: src/KeyName.cxx:43
906
+msgid "Down"
907
+msgstr "Down"
908
+
909
+#: src/KeyName.cxx:45
910
+msgid "Left"
911
+msgstr "Left"
912
+
913
+#: src/KeyName.cxx:47
914
+msgid "Right"
915
+msgstr "Right"
916
+
917
+#: src/KeyName.cxx:49
918
+msgid "Home"
919
+msgstr "Home"
920
+
921
+#: src/KeyName.cxx:51
922
+msgid "End"
923
+msgstr "End"
924
+
925
+#: src/KeyName.cxx:53
926
+msgid "PageDown"
927
+msgstr "PageDown"
928
+
929
+#: src/KeyName.cxx:55
930
+msgid "PageUp"
931
+msgstr "PageUp"
932
+
933
+#: src/KeyName.cxx:57
934
+msgid "Tab"
935
+msgstr "Tab"
936
+
937
+#: src/KeyName.cxx:59
938
+msgid "Shift+Tab"
939
+msgstr "Shift+Tab"
940
+
941
+#: src/KeyName.cxx:61
942
+msgid "Esc"
943
+msgstr "Esc"
944
 
945
-#: src/screen_artist.cxx:452
946
+#: src/KeyName.cxx:63
947
+msgid "Insert"
948
+msgstr "Insert"
949
+
950
+#: src/KeyName.cxx:71
951
 #, c-format
952
-msgid "Adding %s..."
953
-msgstr "Додається %s..."
954
+msgid "Ctrl-%c"
955
+msgstr ""
956
 
957
-#: src/screen_browser.cxx:122
958
+#: src/KeyName.cxx:73
959
 #, c-format
960
-msgid "Loading playlist %s..."
961
-msgstr "Завантажується перелік програвання %s..."
962
+msgid "Alt-%c"
963
+msgstr ""
964
 
965
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
966
-#: src/screen_browser.cxx:279
967
-#, fuzzy, c-format
968
-msgid "Adding '%s' to queue"
969
-msgstr "Додається '%s' до переліку програвання"
970
+#: src/ListWindow.cxx:491
971
+msgid "Range selection disabled"
972
+msgstr "Вибір обсягу вимкнений"
973
+
974
+#: src/ListWindow.cxx:496
975
+msgid "Range selection enabled"
976
+msgstr "Вибір обсягу увімкнений"
977
+
978
+#. translators: no lyrics were found for the song
979
+#: src/LyricsPage.cxx:236
980
+msgid "No lyrics"
981
+msgstr "Немає тексту пісні"
982
 
983
-#: src/screen_chat.cxx:59
984
+#: src/LyricsPage.cxx:254
985
 #, c-format
986
-msgid ""
987
-"connected to MPD %u.%u.%u (you need at least \n"
988
-"version 0.17.0 to use the chat feature)"
989
+msgid "Lyrics timeout occurred after %d seconds"
990
 msgstr ""
991
 
992
-#: src/screen_chat.cxx:177
993
-msgid "Your message"
994
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
995
+#: src/LyricsPage.cxx:490
996
+msgid "Lyrics"
997
+msgstr "Тексти пісень"
998
+
999
+#. translators: this message is displayed
1000
+#. while data is retrieved
1001
+#: src/LyricsPage.cxx:340
1002
+msgid "loading..."
1003
+msgstr "завантаження..."
1004
+
1005
+#: src/LyricsPage.cxx:361
1006
+msgid "Editor not configured"
1007
 msgstr ""
1008
 
1009
-#: src/screen_chat.cxx:186
1010
-msgid "Message could not be sent"
1011
+#: src/LyricsPage.cxx:368
1012
+msgid "Do you really want to start an editor and edit these lyrics?"
1013
 msgstr ""
1014
 
1015
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1016
-msgid "Chat"
1017
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1018
+msgid "Can't start editor"
1019
 msgstr ""
1020
 
1021
-#: src/screen_client.cxx:41
1022
-msgid "Database update running..."
1023
-msgstr "Виконується оновлення бази даних..."
1024
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1025
+msgid "Editor exited unexpectedly"
1026
+msgstr ""
1027
 
1028
-#: src/screen_client.cxx:49
1029
-#, c-format
1030
-msgid "Database update of %s started"
1031
-msgstr "Оновлення бази даних %s розпочате"
1032
+#. lyrics for the song were saved on hard disk
1033
+#: src/LyricsPage.cxx:439
1034
+msgid "Lyrics saved"
1035
+msgstr "Текст пісні збережений"
1036
 
1037
-#: src/screen_client.cxx:52
1038
-msgid "Database update started"
1039
-msgstr "Початок оновлення бази даних"
1040
+#: src/LyricsPage.cxx:445
1041
+msgid "Lyrics deleted"
1042
+msgstr "Текст пісні видалений"
1043
 
1044
-#. translators: the "delete" command is only possible
1045
-#. for playlists; the user attempted to delete a song
1046
-#. or a directory or something else
1047
-#: src/screen_file.cxx:200
1048
-msgid "Deleting this item is not possible"
1049
-msgstr "Видалити цей елемент неможливо"
1050
+#: src/LyricsPage.cxx:446
1051
+msgid "No saved lyrics"
1052
+msgstr "Немає збереженого тексту пісні"
1053
 
1054
-#: src/screen_file.cxx:207
1055
+#: src/Main.cxx:167
1056
 #, fuzzy, c-format
1057
-msgid "Delete playlist %s?"
1058
-msgstr "Видалити перелік програвання"
1059
-
1060
-#. translators: MPD deleted the playlist, as requested by the
1061
-#. user
1062
-#: src/screen_file.cxx:227
1063
-msgid "Playlist deleted"
1064
-msgstr "Перелік програвання видалений"
1065
+msgid "Connecting to %s"
1066
+msgstr "Встановлене з'єднання з %s"
1067
 
1068
-#. translators: caption of the browser screen
1069
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1070
-msgid "Browse"
1071
-msgstr "Огляд"
1072
-
1073
-#: src/screen_find.cxx:29
1074
-msgid "Find"
1075
-msgstr "Знайти"
1076
+#: src/Main.cxx:187
1077
+#, fuzzy, c-format
1078
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1079
+msgstr "Помилка: MPD версії %d.%d.%d застаріла (необхідна %s)"
1080
 
1081
-#: src/screen_find.cxx:30
1082
-msgid "Find backward"
1083
-msgstr "Знайти позаду"
1084
+#. To translators: these credits are shown
1085
+#. when ncmpc is started with "--version"
1086
+#: src/options.cxx:213 src/options.cxx:216
1087
+msgid "translator-credits"
1088
+msgstr "Oleksandr Kovalenko <alx.kovalenko@gmail.com>"
1089
 
1090
-#: src/screen_find.cxx:31
1091
-msgid "Jump"
1092
-msgstr "Перейти"
1093
+#: src/OutputsPage.cxx:87
1094
+#, c-format
1095
+msgid "Output '%s' enabled"
1096
+msgstr "Вихід '%s' увімкнений"
1097
 
1098
-#: src/screen_find.cxx:82
1099
+#: src/OutputsPage.cxx:98
1100
 #, c-format
1101
-msgid "Unable to find '%s'"
1102
-msgstr "Не вдається знайти '%s'"
1103
+msgid "Output '%s' disabled"
1104
+msgstr "Вихід '%s' вимкнений"
1105
 
1106
-#: src/screen_help.cxx:39
1107
-msgid "Movement"
1108
-msgstr "Переміщення"
1109
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1110
+msgid "Outputs"
1111
+msgstr "Виходи"
1112
 
1113
-#: src/screen_help.cxx:84
1114
-msgid "Global"
1115
-msgstr "Загальні"
1116
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1117
+msgid "Shuffled queue"
1118
+msgstr ""
1119
 
1120
-#: src/screen_help.cxx:121
1121
-msgid "Play"
1122
-msgstr "Програти"
1123
+#: src/player_command.cxx:186
1124
+msgid "Cleared queue"
1125
+msgstr ""
1126
 
1127
-#: src/screen_help.cxx:124
1128
-msgid "Move song up"
1129
-msgstr "Перемістити пісню вгору"
1130
+#. get path
1131
+#: src/QueuePage.cxx:307
1132
+msgid "Add"
1133
+msgstr "Додати"
1134
 
1135
-#: src/screen_help.cxx:125
1136
-msgid "Move song down"
1137
-msgstr "Перемістити пісню вниз"
1138
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1139
+msgid "Queue"
1140
+msgstr ""
1141
 
1142
-#: src/screen_help.cxx:128
1143
-msgid "Center"
1144
-msgstr "По центру"
1145
+#: src/QueuePage.cxx:380
1146
+#, c-format
1147
+msgid "Queue on %s"
1148
+msgstr ""
1149
 
1150
-#: src/screen_help.cxx:136
1151
-msgid "Enter directory/Select and play song"
1152
-msgstr "Ввести теку чи вибрати та програти пісню"
1153
+#. query the user for a filename
1154
+#: src/save_playlist.cxx:85
1155
+msgid "Save queue as"
1156
+msgstr ""
1157
 
1158
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1159
-#, fuzzy
1160
-msgid "Append song to queue"
1161
-msgstr "Долучити пісню до переліку програвання"
1162
+#: src/save_playlist.cxx:107
1163
+#, fuzzy, c-format
1164
+msgid "Replace %s?"
1165
+msgstr "Замінити %s [%s/%s] ? "
1166
 
1167
-#: src/screen_help.cxx:140
1168
-msgid "Delete playlist"
1169
-msgstr "Видалити перелік програвання"
1170
+#. success
1171
+#: src/save_playlist.cxx:128
1172
+#, c-format
1173
+msgid "Saved %s"
1174
+msgstr "Збережений %s"
1175
 
1176
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1177
-msgid "Search"
1178
-msgstr "Пошук"
1179
+#: src/screen_artist.cxx:186
1180
+#, c-format
1181
+msgid "All tracks of artist: %s"
1182
+msgstr "Всі доріжки виконавця: %s"
1183
 
1184
-#: src/screen_help.cxx:151
1185
-msgid "Select and play"
1186
-msgstr "Вибрати та програти"
1187
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1188
+msgid "Album"
1189
+msgstr "Альбом"
1190
 
1191
-#: src/screen_help.cxx:162
1192
-msgid "View Lyrics"
1193
-msgstr "Переглянути текст пісні"
1194
+#: src/screen_artist.cxx:195
1195
+#, c-format
1196
+msgid "Tracks of no album of artist: %s"
1197
+msgstr "Доріжки без альбому виконавця: %s"
1198
 
1199
-#: src/screen_help.cxx:163
1200
-msgid "(Re)load lyrics"
1201
-msgstr "(Пере)завантажити текст пісні"
1202
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1203
+msgid "Artist"
1204
+msgstr "Виконавець"
1205
 
1206
-#. to translators: this hotkey aborts the retrieval of lyrics
1207
-#. from the server
1208
-#: src/screen_help.cxx:166
1209
-msgid "Interrupt retrieval"
1210
-msgstr "Припинити отримання"
1211
+#: src/screen_client.cxx:41
1212
+#, fuzzy
1213
+msgid "Database update running"
1214
+msgstr "Виконується оновлення бази даних..."
1215
 
1216
-#: src/screen_help.cxx:167
1217
-msgid "Download lyrics for currently playing song"
1218
-msgstr "Завантажити текст для пісні, що зараз програється"
1219
+#: src/screen_client.cxx:48
1220
+#, c-format
1221
+msgid "Database update of %s started"
1222
+msgstr "Оновлення бази даних %s розпочате"
1223
 
1224
-#: src/screen_help.cxx:168
1225
-#, fuzzy
1226
-msgid "Add or edit lyrics"
1227
-msgstr "Немає збереженого тексту пісні"
1228
+#: src/screen_client.cxx:51
1229
+msgid "Database update started"
1230
+msgstr "Початок оновлення бази даних"
1231
 
1232
-#: src/screen_help.cxx:169
1233
-msgid "Save lyrics"
1234
-msgstr "Зберегти текст пісні"
1235
+#: src/screen.cxx:160
1236
+msgid "Repeat mode is on"
1237
+msgstr "Режим повторення увімкнений"
1238
 
1239
-#: src/screen_help.cxx:170
1240
-msgid "Delete saved lyrics"
1241
-msgstr "Видалити збережений текст пісні"
1242
+#: src/screen.cxx:161
1243
+msgid "Repeat mode is off"
1244
+msgstr "Режим повторення вимкнений"
1245
 
1246
-#: src/screen_help.cxx:177
1247
-msgid "Enable/disable output"
1248
-msgstr "Увімкнути/вимкнути вихід"
1249
+#: src/screen.cxx:165
1250
+msgid "Random mode is on"
1251
+msgstr "Режим випадкового програвання увімкнений"
1252
 
1253
-#: src/screen_help.cxx:184
1254
-msgid "Write a message"
1255
-msgstr ""
1256
+#: src/screen.cxx:166
1257
+msgid "Random mode is off"
1258
+msgstr "Режим випадкового програвання вимкнений"
1259
 
1260
-#: src/screen_help.cxx:189
1261
-msgid "Keydef screen"
1262
-msgstr "Екран призначення клавіш"
1263
+#. "single" mode means
1264
+#. that MPD will
1265
+#. automatically stop
1266
+#. after playing one
1267
+#. single song
1268
+#: src/screen.cxx:175
1269
+msgid "Single mode is on"
1270
+msgstr "Режим повторення однієї доріжки увімкнений"
1271
 
1272
-#: src/screen_help.cxx:191
1273
-msgid "Edit keydefs for selected command"
1274
-msgstr "Редагувати призначену клавішу для вибраної команди"
1275
+#: src/screen.cxx:176
1276
+msgid "Single mode is off"
1277
+msgstr "Режим повторення однієї доріжки вимкнений"
1278
 
1279
-#: src/screen_help.cxx:192
1280
-msgid "Remove selected keydef"
1281
-msgstr "Вилучити вибране призначення клавіші"
1282
+#. "consume" mode means
1283
+#. that MPD removes each
1284
+#. song which has
1285
+#. finished playing
1286
+#: src/screen.cxx:184
1287
+msgid "Consume mode is on"
1288
+msgstr "Режим вичерпання увімкнений"
1289
 
1290
-#: src/screen_help.cxx:193
1291
-#, fuzzy
1292
-msgid "Add a keydef"
1293
-msgstr "Додати нову клавішу"
1294
+#: src/screen.cxx:185
1295
+msgid "Consume mode is off"
1296
+msgstr "Режим вичерпання вимкнений"
1297
 
1298
-#: src/screen_help.cxx:194
1299
-msgid "Go up a level"
1300
-msgstr "На рівень вище"
1301
+#: src/screen.cxx:188
1302
+#, c-format
1303
+msgid "Crossfade %d seconds"
1304
+msgstr "Плавний перехід: %dс"
1305
 
1306
-#: src/screen_help.cxx:195
1307
-msgid "Apply and save changes"
1308
-msgstr "Застосувати та зберегти зміни"
1309
+#: src/screen.cxx:200
1310
+msgid "Database updated"
1311
+msgstr "База даних оновлена"
1312
 
1313
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1314
-msgid "Help"
1315
-msgstr "Допомога"
1316
+#: src/screen.cxx:250
1317
+msgid "Find mode: Wrapped"
1318
+msgstr "Режим пошуку: завернутий (розділений???)"
1319
 
1320
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1321
-msgid "Error: Screen too small"
1322
-msgstr "Помилка: екран занадто маленький"
1323
+#: src/screen.cxx:251
1324
+msgid "Find mode: Normal"
1325
+msgstr "Режим пошуку: звичайний"
1326
 
1327
-#: src/screen_keydef.cxx:141
1328
-msgid "You have new key bindings"
1329
-msgstr "Ви маєте нову прив'язку клавіші"
1330
+#: src/screen.cxx:256
1331
+msgid "Auto center mode: On"
1332
+msgstr "Режим автоматичного центрування: увімкнено"
1333
 
1334
-#: src/screen_keydef.cxx:143
1335
-msgid "Keybindings unchanged."
1336
-msgstr "Прив'язки клавіш не змінені."
1337
+#: src/screen.cxx:257
1338
+msgid "Auto center mode: Off"
1339
+msgstr "Режим автоматичного центрування: вимкнено"
1340
 
1341
-#: src/screen_keydef.cxx:153
1342
-#, c-format
1343
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1344
-msgstr "Помилка: неможливо створити теку ~/.ncmpc - %s"
1345
+#: src/screen_find.cxx:31
1346
+msgid "Find"
1347
+msgstr "Знайти"
1348
 
1349
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1350
-#, c-format
1351
-msgid "Error: %s - %s"
1352
-msgstr "Помилка: %s - %s"
1353
+#: src/screen_find.cxx:32
1354
+msgid "Find backward"
1355
+msgstr "Знайти позаду"
1356
+
1357
+#: src/screen_find.cxx:33
1358
+msgid "Jump"
1359
+msgstr "Перейти"
1360
 
1361
-#: src/screen_keydef.cxx:171
1362
+#: src/screen_find.cxx:79
1363
 #, c-format
1364
-msgid "Wrote %s"
1365
-msgstr "Записаний %s"
1366
+msgid "Unable to find '%s'"
1367
+msgstr "Не вдається знайти '%s'"
1368
 
1369
-#: src/screen_keydef.cxx:250
1370
+#: src/screen_keydef.cxx:161
1371
 msgid "Deleted"
1372
 msgstr "Видалена"
1373
 
1374
-#: src/screen_keydef.cxx:265
1375
+#: src/screen_keydef.cxx:177
1376
 #, c-format
1377
 msgid "Enter new key for %s: "
1378
 msgstr "Введіть нову клавішу для %s: "
1379
 
1380
-#: src/screen_keydef.cxx:276
1381
+#: src/screen_keydef.cxx:187
1382
 msgid "Ctrl-Space can't be used"
1383
 msgstr ""
1384
 
1385
-#: src/screen_keydef.cxx:282
1386
+#: src/screen_keydef.cxx:193
1387
 #, c-format
1388
 msgid "Error: key %s is already used for %s"
1389
 msgstr "Помилка: клавіша %s вже використовується для %s"
1390
 
1391
-#: src/screen_keydef.cxx:291
1392
+#: src/screen_keydef.cxx:202
1393
 #, c-format
1394
 msgid "Assigned %s to %s"
1395
 msgstr "Призначення %s до %s"
1396
 
1397
-#: src/screen_keydef.cxx:317
1398
-msgid "===> Apply key bindings "
1399
-msgstr "===> Застосування прив'язки клавіші "
1400
-
1401
-#: src/screen_keydef.cxx:319
1402
-msgid "===> Apply & Save key bindings  "
1403
-msgstr "===> Застосування та збереження прив'язки клавіші  "
1404
-
1405
-#: src/screen_keydef.cxx:347
1406
+#: src/screen_keydef.cxx:229
1407
 msgid "Add new key"
1408
 msgstr "Додати нову клавішу"
1409
 
1410
-#: src/screen_keydef.cxx:410
1411
-msgid "Note: Did you forget to 'Apply' your changes?"
1412
-msgstr "Примітка: ви забули \"Застосувати\" зроблені зміни?"
1413
-
1414
-#: src/screen_keydef.cxx:417
1415
-msgid "Edit key bindings"
1416
-msgstr "Редагувати прив'язки клавіш"
1417
-
1418
-#: src/screen_keydef.cxx:419
1419
+#: src/screen_keydef.cxx:251
1420
 #, c-format
1421
 msgid "Edit keys for %s"
1422
 msgstr "Редагувати клавішу для %s"
1423
 
1424
-#. translators: no lyrics were found for the song
1425
-#: src/screen_lyrics.cxx:208
1426
-msgid "No lyrics"
1427
-msgstr "Немає тексту пісні"
1428
-
1429
-#: src/screen_lyrics.cxx:226
1430
-#, c-format
1431
-msgid "Lyrics timeout occurred after %d seconds"
1432
-msgstr ""
1433
-
1434
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1435
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1436
-msgid "Lyrics"
1437
-msgstr "Тексти пісень"
1438
-
1439
-#. translators: this message is displayed
1440
-#. while data is retrieved
1441
-#: src/screen_lyrics.cxx:330
1442
-msgid "loading..."
1443
-msgstr "завантаження..."
1444
-
1445
-#: src/screen_lyrics.cxx:361
1446
-msgid "Editor not configured"
1447
-msgstr ""
1448
-
1449
-#: src/screen_lyrics.cxx:367
1450
-msgid "Do you really want to start an editor and edit these lyrics?"
1451
-msgstr ""
1452
+#: src/screen_keydef.cxx:393
1453
+msgid "You have new key bindings"
1454
+msgstr "Ви маєте нову прив'язку клавіші"
1455
 
1456
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1457
-msgid "Can't start editor"
1458
-msgstr ""
1459
+#: src/screen_keydef.cxx:395
1460
+msgid "Keybindings unchanged."
1461
+msgstr "Прив'язки клавіш не змінені."
1462
 
1463
-#: src/screen_lyrics.cxx:411
1464
-#, c-format
1465
-msgid "Editor exited unexpectedly (%d)"
1466
-msgstr ""
1467
+#: src/screen_keydef.cxx:405
1468
+#, fuzzy
1469
+msgid "Unable to write configuration"
1470
+msgstr "Незавершена конфігурація гарячих клавіш"
1471
 
1472
-#: src/screen_lyrics.cxx:414
1473
+#: src/screen_keydef.cxx:421
1474
 #, c-format
1475
-msgid "Editor exited unexpectedly (signal %d)"
1476
-msgstr ""
1477
-
1478
-#. lyrics for the song were saved on hard disk
1479
-#: src/screen_lyrics.cxx:436
1480
-msgid "Lyrics saved"
1481
-msgstr "Текст пісні збережений"
1482
-
1483
-#: src/screen_lyrics.cxx:443
1484
-msgid "Lyrics deleted"
1485
-msgstr "Текст пісні видалений"
1486
-
1487
-#: src/screen_lyrics.cxx:446
1488
-msgid "No saved lyrics"
1489
-msgstr "Немає збереженого тексту пісні"
1490
+msgid "Wrote %s"
1491
+msgstr "Записаний %s"
1492
 
1493
-#: src/screen_outputs.cxx:60
1494
-#, c-format
1495
-msgid "Output '%s' enabled"
1496
-msgstr "Вихід '%s' увімкнений"
1497
+#: src/screen_keydef.cxx:433
1498
+msgid "===> Apply key bindings "
1499
+msgstr "===> Застосування прив'язки клавіші "
1500
 
1501
-#: src/screen_outputs.cxx:71
1502
-#, c-format
1503
-msgid "Output '%s' disabled"
1504
-msgstr "Вихід '%s' вимкнений"
1505
+#: src/screen_keydef.cxx:435
1506
+msgid "===> Apply & Save key bindings  "
1507
+msgstr "===> Застосування та збереження прив'язки клавіші  "
1508
 
1509
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1510
-msgid "Outputs"
1511
-msgstr "Виходи"
1512
+#: src/screen_keydef.cxx:472
1513
+msgid "Edit key bindings"
1514
+msgstr "Редагувати прив'язки клавіш"
1515
 
1516
-#. get path
1517
-#: src/screen_queue.cxx:274
1518
-msgid "Add"
1519
-msgstr "Додати"
1520
+#: src/screen_keydef.cxx:554
1521
+msgid "Note: Did you forget to 'Apply' your changes?"
1522
+msgstr "Примітка: ви забули \"Застосувати\" зроблені зміни?"
1523
 
1524
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1525
-msgid "Queue"
1526
+#: src/screen_keydef.cxx:604
1527
+msgid "Keys"
1528
 msgstr ""
1529
 
1530
-#: src/screen_queue.cxx:384
1531
-#, c-format
1532
-msgid "Queue on %s"
1533
-msgstr ""
1534
+#: src/screen_utils.cxx:124
1535
+msgid "Password"
1536
+msgstr "Пароль"
1537
 
1538
-#: src/screen_search.cxx:48
1539
+#: src/SearchPage.cxx:51
1540
 msgid "artist"
1541
 msgstr "artist"
1542
 
1543
-#: src/screen_search.cxx:49
1544
+#: src/SearchPage.cxx:52
1545
 msgid "album"
1546
 msgstr "album"
1547
 
1548
-#: src/screen_search.cxx:50
1549
+#: src/SearchPage.cxx:53
1550
 msgid "title"
1551
 msgstr "title"
1552
 
1553
-#: src/screen_search.cxx:51
1554
+#: src/SearchPage.cxx:54
1555
 msgid "track"
1556
 msgstr "track"
1557
 
1558
-#: src/screen_search.cxx:52
1559
+#: src/SearchPage.cxx:55
1560
 msgid "name"
1561
 msgstr "name"
1562
 
1563
-#: src/screen_search.cxx:53
1564
+#: src/SearchPage.cxx:56
1565
 msgid "genre"
1566
 msgstr "genre"
1567
 
1568
-#: src/screen_search.cxx:54
1569
+#: src/SearchPage.cxx:57
1570
 msgid "date"
1571
 msgstr "date"
1572
 
1573
-#: src/screen_search.cxx:55
1574
+#: src/SearchPage.cxx:58
1575
 msgid "composer"
1576
 msgstr "composer"
1577
 
1578
-#: src/screen_search.cxx:56
1579
+#: src/SearchPage.cxx:59
1580
 msgid "performer"
1581
 msgstr "performer"
1582
 
1583
-#: src/screen_search.cxx:57
1584
+#: src/SearchPage.cxx:60
1585
 msgid "comment"
1586
 msgstr "comment"
1587
 
1588
-#: src/screen_search.cxx:65
1589
+#: src/SearchPage.cxx:68
1590
 msgid "file"
1591
 msgstr "file"
1592
 
1593
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1594
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1595
 msgid "Title"
1596
 msgstr "Назва"
1597
 
1598
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1599
-msgid "Artist"
1600
-msgstr "Виконавець"
1601
-
1602
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1603
-msgid "Album"
1604
-msgstr "Альбом"
1605
-
1606
-#: src/screen_search.cxx:85
1607
+#: src/SearchPage.cxx:88
1608
 msgid "Filename"
1609
 msgstr "Назва файлу"
1610
 
1611
-#: src/screen_search.cxx:86
1612
+#: src/SearchPage.cxx:89
1613
 msgid "Artist + Title"
1614
 msgstr "Виконавець + Назва"
1615
 
1616
-#: src/screen_search.cxx:244
1617
-#, c-format
1618
-msgid "No argument for search tag %s"
1619
-msgstr "Немає аргументу для пошуку за міткою %s"
1620
-
1621
-#: src/screen_search.cxx:253
1622
+#: src/SearchPage.cxx:270
1623
 #, c-format
1624
 msgid "Bad search tag %s"
1625
 msgstr "Неправильна мітка %s"
1626
 
1627
-#. if( pattern==nullptr )
1628
-#. search_new(screen, c);
1629
-#. else
1630
-#: src/screen_search.cxx:400
1631
-#, c-format
1632
-msgid "Press %s for a new search"
1633
-msgstr "Натисніть %s для нового пошуку"
1634
-
1635
-#: src/screen_search.cxx:427
1636
-#, c-format
1637
-msgid "Search: %s"
1638
-msgstr "Пошук: %s"
1639
-
1640
-#: src/screen_search.cxx:430
1641
+#: src/SearchPage.cxx:284
1642
 #, c-format
1643
-msgid "Search: Results for %s [%s]"
1644
-msgstr "Пошук: наслідки пошуку для %s [%s]"
1645
+msgid "No argument for search tag %s"
1646
+msgstr "Немає аргументу для пошуку за міткою %s"
1647
 
1648
-#: src/screen_search.cxx:434
1649
-#, c-format
1650
-msgid "Search: Press %s for a new search [%s]"
1651
-msgstr "Пошук: натисніть %s для нового пошуку [%s]"
1652
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1653
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1654
+msgid "Search"
1655
+msgstr "Пошук"
1656
 
1657
-#: src/screen_search.cxx:458
1658
+#: src/SearchPage.cxx:436
1659
 #, c-format
1660
 msgid "Search mode: %s"
1661
 msgstr "Режим пошуку: %s"
1662
 
1663
-#: src/screen_song.cxx:54
1664
+#: src/SongPage.cxx:67
1665
 msgid "Length"
1666
 msgstr "Тривалість"
1667
 
1668
-#: src/screen_song.cxx:55
1669
+#: src/SongPage.cxx:68
1670
 msgid "Position"
1671
 msgstr ""
1672
 
1673
-#: src/screen_song.cxx:56
1674
+#: src/SongPage.cxx:69
1675
 msgid "Composer"
1676
 msgstr "Композитор"
1677
 
1678
-#: src/screen_song.cxx:57
1679
+#: src/SongPage.cxx:70
1680
 msgid "Name"
1681
 msgstr "Назва"
1682
 
1683
-#: src/screen_song.cxx:58
1684
+#: src/SongPage.cxx:71
1685
 msgid "Disc"
1686
 msgstr "Диск"
1687
 
1688
-#: src/screen_song.cxx:59
1689
+#: src/SongPage.cxx:72
1690
 msgid "Track"
1691
 msgstr "Доріжка"
1692
 
1693
-#: src/screen_song.cxx:60
1694
+#: src/SongPage.cxx:73
1695
 msgid "Date"
1696
 msgstr "Дата"
1697
 
1698
-#: src/screen_song.cxx:61
1699
+#: src/SongPage.cxx:74
1700
 msgid "Genre"
1701
 msgstr "Жанр"
1702
 
1703
-#: src/screen_song.cxx:62
1704
+#: src/SongPage.cxx:75
1705
 msgid "Comment"
1706
 msgstr "Примітка"
1707
 
1708
-#: src/screen_song.cxx:63
1709
+#: src/SongPage.cxx:76
1710
 msgid "Path"
1711
 msgstr "Шлях"
1712
 
1713
-#: src/screen_song.cxx:64
1714
+#: src/SongPage.cxx:77
1715
 msgid "Bitrate"
1716
 msgstr "Бітрейт"
1717
 
1718
-#: src/screen_song.cxx:65
1719
+#: src/SongPage.cxx:78
1720
 msgid "Format"
1721
 msgstr ""
1722
 
1723
-#: src/screen_song.cxx:82
1724
+#: src/SongPage.cxx:95
1725
 msgid "Number of artists"
1726
 msgstr "Кількість виконавців"
1727
 
1728
-#: src/screen_song.cxx:83
1729
+#: src/SongPage.cxx:96
1730
 msgid "Number of albums"
1731
 msgstr "Кількість альбомів"
1732
 
1733
-#: src/screen_song.cxx:84
1734
+#: src/SongPage.cxx:97
1735
 msgid "Number of songs"
1736
 msgstr "Кількість пісень"
1737
 
1738
-#: src/screen_song.cxx:85
1739
+#: src/SongPage.cxx:98
1740
 msgid "Uptime"
1741
 msgstr "Час роботи"
1742
 
1743
-#: src/screen_song.cxx:86
1744
+#: src/SongPage.cxx:99
1745
 msgid "Most recent db update"
1746
 msgstr "Останнє оновлення бази даних"
1747
 
1748
-#: src/screen_song.cxx:87
1749
+#: src/SongPage.cxx:100
1750
 msgid "Playtime"
1751
 msgstr "Час програвання"
1752
 
1753
-#: src/screen_song.cxx:88
1754
+#: src/SongPage.cxx:101
1755
 msgid "DB playtime"
1756
 msgstr "Час програвання всієї БД"
1757
 
1758
-#: src/screen_song.cxx:173
1759
+#: src/SongPage.cxx:204
1760
 msgid "Song viewer"
1761
 msgstr "Переглядач пісень"
1762
 
1763
-#: src/screen_song.cxx:337
1764
+#: src/SongPage.cxx:370
1765
 msgid "MPD statistics"
1766
 msgstr "Статистика MPD"
1767
 
1768
-#: src/screen_song.cxx:427
1769
+#: src/SongPage.cxx:455
1770
 msgid "Selected song"
1771
 msgstr "Вибрана пісня"
1772
 
1773
-#: src/screen_song.cxx:437
1774
+#: src/SongPage.cxx:465
1775
 msgid "Currently playing song"
1776
 msgstr "Пісня, що зараз програється"
1777
 
1778
-#: src/screen_song.cxx:442
1779
+#: src/SongPage.cxx:470
1780
 #, c-format
1781
 msgid "%d kbps"
1782
 msgstr "%d кбіт/с"
1783
 
1784
-#. NOTE: if one day a translator decides to use a multi-byte character
1785
-#. for one of the yes/no keys, we'll have to parse it properly
1786
-#: src/screen_utils.cxx:80
1787
-#, fuzzy, c-format
1788
-msgid "%s [%s/%s] "
1789
-msgstr "Замінити %s [%s/%s] ? "
1790
-
1791
-#: src/screen_utils.cxx:121
1792
-msgid "Password"
1793
-msgstr "Пароль"
1794
+#: src/SongPage.cxx:554
1795
+msgid "Song"
1796
+msgstr ""
1797
 
1798
-#: src/status_bar.cxx:121
1799
+#: src/StatusBar.cxx:104
1800
 msgid "Playing:"
1801
 msgstr "Програється:"
1802
 
1803
-#: src/status_bar.cxx:124
1804
+#: src/StatusBar.cxx:108
1805
 msgid "[Paused]"
1806
 msgstr "[Призупинено]"
1807
 
1808
-#: src/title_bar.cxx:99
1809
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1810
+#, fuzzy
1811
+msgid "Unknown color"
1812
+msgstr "Невідома команда"
1813
+
1814
+#: src/Styles.cxx:333
1815
+#, fuzzy
1816
+msgid "Unknown color field"
1817
+msgstr "Застереження: невідоме поле кольору - %s\n"
1818
+
1819
+#: src/Styles.cxx:375
1820
+msgid "Terminal lacks color capabilities"
1821
+msgstr "Терміналу бракує підтримки можливостей кольорів"
1822
+
1823
+#: src/time_format.cxx:44
1824
+msgid "year"
1825
+msgstr ""
1826
+
1827
+#: src/time_format.cxx:46
1828
+msgid "years"
1829
+msgstr ""
1830
+
1831
+#: src/time_format.cxx:54
1832
+msgid "week"
1833
+msgstr ""
1834
+
1835
+#: src/time_format.cxx:57
1836
+msgid "weeks"
1837
+msgstr ""
1838
+
1839
+#: src/time_format.cxx:65
1840
+msgid "day"
1841
+msgstr ""
1842
+
1843
+#: src/time_format.cxx:68
1844
+msgid "days"
1845
+msgstr ""
1846
+
1847
+#: src/TitleBar.cxx:100
1848
 msgid "Volume n/a"
1849
 msgstr "Гучність недоступна"
1850
 
1851
-#: src/title_bar.cxx:101
1852
+#: src/TitleBar.cxx:102
1853
 #, c-format
1854
 msgid "Volume %d%%"
1855
 msgstr "Гучність %d%%"
1856
 
1857
+#, fuzzy
1858
+#~ msgid "Add url/file to queue"
1859
+#~ msgstr "Додати url-посилання чи файл до переліку програвання"
1860
+
1861
+#~ msgid "Move song up"
1862
+#~ msgstr "Перемістити пісню вгору"
1863
+
1864
+#~ msgid "Move song down"
1865
+#~ msgstr "Перемістити пісню вниз"
1866
+
1867
+#~ msgid "Press %s for a new search"
1868
+#~ msgstr "Натисніть %s для нового пошуку"
1869
+
1870
+#~ msgid "Search: %s"
1871
+#~ msgstr "Пошук: %s"
1872
+
1873
+#~ msgid "Search: Results for %s [%s]"
1874
+#~ msgstr "Пошук: наслідки пошуку для %s [%s]"
1875
+
1876
+#~ msgid "Search: Press %s for a new search [%s]"
1877
+#~ msgstr "Пошук: натисніть %s для нового пошуку [%s]"
1878
+
1879
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1880
+#~ msgstr "Встановлення з'єднання з %s...  [Натисніть %s щоб припинити]"
1881
+
1882
+#~ msgid "press %s for the key editor"
1883
+#~ msgstr "натисніть %s щоб редагувати клавіші"
1884
+
1885
+#~ msgid "Album: %s - %s"
1886
+#~ msgstr "Альбом: %s - %s"
1887
+
1888
+#~ msgid "Adding album %s..."
1889
+#~ msgstr "Додається альбом %s..."
1890
+
1891
+#~ msgid "Adding %s..."
1892
+#~ msgstr "Додається %s..."
1893
+
1894
+#~ msgid "Error: Screen too small"
1895
+#~ msgstr "Помилка: екран занадто маленький"
1896
+
1897
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1898
+#~ msgstr "Помилка: неможливо створити теку ~/.ncmpc - %s"
1899
+
1900
+#~ msgid "Error: %s - %s"
1901
+#~ msgstr "Помилка: %s - %s"
1902
+
1903
+#, fuzzy
1904
+#~ msgid "%s [%s/%s] "
1905
+#~ msgstr "Замінити %s [%s/%s] ? "
1906
+
1907
 #~ msgid "unknown"
1908
 #~ msgstr "невідомо"
1909
 
1910
@@ -1249,9 +1253,6 @@
1911
 #~ msgid "Warning: Unknown color - %s\n"
1912
 #~ msgstr "Застереження: невідомий колір - %s\n"
1913
 
1914
-#~ msgid "Connected to %s"
1915
-#~ msgstr "Встановлене з'єднання з %s"
1916
-
1917
 #~ msgid "Shuffled playlist"
1918
 #~ msgstr "Перемішаний перелік програвання"
1919
 
1920
ncmpc-0.30.tar.xz/po/zh_CN.po -> ncmpc-0.32.tar.xz/po/zh_CN.po Changed
1929
 
1
@@ -7,7 +7,7 @@
2
 msgstr ""
3
 "Project-Id-Version: ncmpc\n"
4
 "Report-Msgid-Bugs-To: \n"
5
-"POT-Creation-Date: 2018-02-19 11:10+0100\n"
6
+"POT-Creation-Date: 2018-09-17 22:53+0200\n"
7
 "PO-Revision-Date: 2011-05-12 15:00+0000\n"
8
 "Last-Translator: snowdream <yanghui1986527@gmail.com>\n"
9
 "Language-Team: Simplified Chinese <zh_CN@li.org>\n"
10
@@ -18,423 +18,358 @@
11
 "X-Launchpad-Export-Date: 2011-06-23 08:56+0000\n"
12
 "X-Generator: Launchpad (build 13265)\n"
13
 
14
-#: src/colors.cxx:156
15
-#, fuzzy
16
-msgid "Unknown color"
17
-msgstr "未知命令"
18
+#: src/AlbumListPage.cxx:54 src/AlbumListPage.cxx:126
19
+msgid "All tracks"
20
+msgstr "全部音轨"
21
 
22
-#: src/colors.cxx:195
23
+#: src/AlbumListPage.cxx:144
24
 #, fuzzy
25
-msgid "Unknown color field"
26
-msgstr "警告: 未知的颜色块 - %s\n"
27
+msgid "Albums"
28
+msgstr "专辑"
29
 
30
-#: src/colors.cxx:228
31
-msgid "Terminal lacks support for changing colors"
32
-msgstr "终端不支持改变颜色"
33
+#: src/AlbumListPage.cxx:146
34
+#, c-format
35
+msgid "Albums of artist: %s"
36
+msgstr "%s 的专辑:"
37
 
38
-#: src/colors.cxx:237
39
-msgid "Terminal lacks color capabilities"
40
-msgstr "终端不支持彩色"
41
+#: src/AlbumListPage.cxx:174 src/ArtistListPage.cxx:137
42
+#: src/FileListPage.cxx:161 src/FileListPage.cxx:248 src/FileListPage.cxx:273
43
+#, fuzzy, c-format
44
+msgid "Adding '%s' to queue"
45
+msgstr "添加 '%s' 到播放列表"
46
+
47
+#: src/ArtistListPage.cxx:114
48
+msgid "All artists"
49
+msgstr "全部艺术家"
50
+
51
+#: src/Bindings.cxx:79 src/Bindings.cxx:85
52
+#, c-format
53
+msgid "Key %s assigned to %s and %s"
54
+msgstr "按键 %s 分配给 %s 和 %s"
55
+
56
+#: src/ChatPage.cxx:57 src/ChatPage.cxx:179
57
+msgid "Chat"
58
+msgstr ""
59
+
60
+#: src/ChatPage.cxx:160
61
+msgid "Your message"
62
+msgstr ""
63
+
64
+#: src/ChatPage.cxx:169
65
+msgid "Message could not be sent"
66
+msgstr ""
67
 
68
-#: src/command.cxx:63
69
+#: src/Command.cxx:29
70
 msgid "Key configuration screen"
71
 msgstr "快捷键设置页面"
72
 
73
-#: src/command.cxx:66
74
+#: src/Command.cxx:32
75
 msgid "Quit"
76
 msgstr "退出"
77
 
78
-#: src/command.cxx:70
79
+#: src/Command.cxx:36
80
 msgid "Move cursor up"
81
 msgstr "向上移动光标"
82
 
83
-#: src/command.cxx:72
84
+#: src/Command.cxx:38
85
 msgid "Move cursor down"
86
 msgstr "向下移动光标"
87
 
88
-#: src/command.cxx:74
89
+#: src/Command.cxx:40
90
 msgid "Move cursor to the top of screen"
91
 msgstr "光标移到顶部"
92
 
93
-#: src/command.cxx:76
94
+#: src/Command.cxx:42
95
 msgid "Move cursor to the middle of screen"
96
 msgstr "光标移到中部"
97
 
98
-#: src/command.cxx:78
99
+#: src/Command.cxx:44
100
 msgid "Move cursor to the bottom of screen"
101
 msgstr "光标移到底部"
102
 
103
-#: src/command.cxx:80
104
+#: src/Command.cxx:46
105
 msgid "Move cursor to the top of the list"
106
 msgstr "光标移到列表顶部"
107
 
108
-#: src/command.cxx:82
109
+#: src/Command.cxx:48
110
 msgid "Move cursor to the bottom of the list"
111
 msgstr "光标移到列表底部"
112
 
113
-#: src/command.cxx:84
114
+#: src/Command.cxx:50
115
 msgid "Page up"
116
 msgstr "上一页"
117
 
118
-#: src/command.cxx:86
119
+#: src/Command.cxx:52
120
 msgid "Page down"
121
 msgstr "下一页"
122
 
123
-#: src/command.cxx:88
124
+#: src/Command.cxx:54
125
 msgid "Range selection"
126
 msgstr "区段选择"
127
 
128
-#: src/command.cxx:90
129
+#: src/Command.cxx:56
130
 msgid "Scroll down one line"
131
 msgstr "向下滚动一行"
132
 
133
-#: src/command.cxx:92
134
+#: src/Command.cxx:58
135
 msgid "Scroll up one line"
136
 msgstr "向上滚动一行"
137
 
138
-#: src/command.cxx:94
139
+#: src/Command.cxx:60
140
 msgid "Scroll up half a screen"
141
 msgstr "向上滚动半屏"
142
 
143
-#: src/command.cxx:96
144
+#: src/Command.cxx:62
145
 msgid "Scroll down half a screen"
146
 msgstr "向下滚动半屏"
147
 
148
-#: src/command.cxx:98
149
+#: src/Command.cxx:64
150
 msgid "Select currently playing song"
151
 msgstr "选择当前播放曲目"
152
 
153
-#: src/command.cxx:103
154
+#: src/Command.cxx:69
155
 msgid "Help screen"
156
 msgstr "帮助页面"
157
 
158
-#: src/command.cxx:105 src/screen_help.cxx:119
159
+#: src/Command.cxx:71 src/HelpPage.cxx:140
160
 #, fuzzy
161
 msgid "Queue screen"
162
 msgstr "键定义页面"
163
 
164
-#: src/command.cxx:107 src/screen_help.cxx:134
165
+#: src/Command.cxx:73 src/HelpPage.cxx:155
166
 msgid "Browse screen"
167
 msgstr "目录页面"
168
 
169
-#: src/command.cxx:112
170
+#: src/Command.cxx:78
171
 msgid "Play/Enter directory"
172
 msgstr "播放/进入 目录"
173
 
174
-#: src/command.cxx:114
175
+#: src/Command.cxx:80
176
 msgid "Pause"
177
 msgstr "暂停"
178
 
179
-#: src/command.cxx:116
180
+#: src/Command.cxx:82
181
 msgid "Stop"
182
 msgstr "停止"
183
 
184
-#: src/command.cxx:118
185
+#: src/Command.cxx:84
186
 msgid "Crop"
187
 msgstr "剪切"
188
 
189
-#: src/command.cxx:120
190
+#: src/Command.cxx:86
191
 msgid "Next track"
192
 msgstr "下一曲"
193
 
194
-#: src/command.cxx:122
195
+#: src/Command.cxx:88
196
 msgid "Previous track"
197
 msgstr "上一曲"
198
 
199
-#: src/command.cxx:124
200
+#: src/Command.cxx:90
201
 msgid "Seek forward"
202
 msgstr "快进"
203
 
204
-#: src/command.cxx:126
205
+#: src/Command.cxx:92
206
 msgid "Seek backward"
207
 msgstr "快退"
208
 
209
-#: src/command.cxx:128
210
+#: src/Command.cxx:94
211
 msgid "Increase volume"
212
 msgstr "增加音量"
213
 
214
-#: src/command.cxx:130
215
+#: src/Command.cxx:96
216
 msgid "Decrease volume"
217
 msgstr "降低音量"
218
 
219
-#: src/command.cxx:132
220
+#: src/Command.cxx:98
221
 #, fuzzy
222
 msgid "Select/deselect song in queue"
223
 msgstr "添加/删除选中文件到播放列表"
224
 
225
-#: src/command.cxx:134
226
+#: src/Command.cxx:100
227
 msgid "Select all listed items"
228
 msgstr "选中所有列出的项"
229
 
230
-#: src/command.cxx:136
231
+#: src/Command.cxx:102
232
 #, fuzzy
233
 msgid "Delete song from queue"
234
 msgstr "从播放列表中删除歌曲"
235
 
236
-#: src/command.cxx:138
237
+#: src/Command.cxx:104
238
 msgid "Shuffle queue"
239
 msgstr ""
240
 
241
-#: src/command.cxx:140
242
+#: src/Command.cxx:106
243
 msgid "Clear queue"
244
 msgstr ""
245
 
246
-#: src/command.cxx:142
247
+#: src/Command.cxx:108
248
 msgid "Toggle repeat mode"
249
 msgstr "切换重复模式"
250
 
251
-#: src/command.cxx:144
252
+#: src/Command.cxx:110
253
 msgid "Toggle random mode"
254
 msgstr "切换随机模式"
255
 
256
-#: src/command.cxx:146
257
+#: src/Command.cxx:112
258
 msgid "Toggle single mode"
259
 msgstr "切换单曲模式"
260
 
261
-#: src/command.cxx:148
262
+#: src/Command.cxx:114
263
 msgid "Toggle consume mode"
264
 msgstr "切换消除模式"
265
 
266
-#: src/command.cxx:150
267
+#: src/Command.cxx:116
268
 msgid "Toggle crossfade mode"
269
 msgstr "切换淡入淡出模式"
270
 
271
-#: src/command.cxx:152
272
+#: src/Command.cxx:118
273
 msgid "Start a music database update"
274
 msgstr "更新此数据库"
275
 
276
-#: src/command.cxx:154
277
+#: src/Command.cxx:120
278
 msgid "Save queue"
279
 msgstr ""
280
 
281
-#: src/command.cxx:156
282
+#: src/Command.cxx:122 src/HelpPage.cxx:174
283
 #, fuzzy
284
-msgid "Add url/file to queue"
285
-msgstr "添加链接/路径到播放列表"
286
+msgid "Append song to queue"
287
+msgstr "添加到播放列表"
288
 
289
-#: src/command.cxx:159
290
+#: src/Command.cxx:125
291
 msgid "Go to root directory"
292
 msgstr "进入根目录"
293
 
294
-#: src/command.cxx:161
295
+#: src/Command.cxx:127
296
 msgid "Go to parent directory"
297
 msgstr "进入父目录"
298
 
299
-#: src/command.cxx:164
300
+#: src/Command.cxx:130
301
 msgid "Locate song in browser"
302
 msgstr "定位到音乐所在目录"
303
 
304
-#: src/command.cxx:168
305
+#: src/Command.cxx:134
306
 msgid "Move item up"
307
 msgstr "上移"
308
 
309
-#: src/command.cxx:170
310
+#: src/Command.cxx:136
311
 msgid "Move item down"
312
 msgstr "下移"
313
 
314
-#: src/command.cxx:172
315
+#: src/Command.cxx:138
316
 msgid "Refresh screen"
317
 msgstr "刷新页面"
318
 
319
 #. translators: toggle between wrapping and non-wrapping
320
 #. search
321
-#: src/command.cxx:179
322
+#: src/Command.cxx:145
323
 msgid "Toggle find mode"
324
 msgstr "切换查找模式"
325
 
326
 #. translators: the auto center mode always centers the song
327
 #. currently being played
328
-#: src/command.cxx:183
329
+#: src/Command.cxx:149
330
 msgid "Toggle auto center mode"
331
 msgstr "切换自动居中模式"
332
 
333
-#: src/command.cxx:188
334
+#: src/Command.cxx:154
335
 msgid "Next screen"
336
 msgstr "下一页面"
337
 
338
-#: src/command.cxx:190
339
+#: src/Command.cxx:156
340
 msgid "Previous screen"
341
 msgstr "上一页面"
342
 
343
-#: src/command.cxx:192
344
+#: src/Command.cxx:158
345
 msgid "Swap to most recent screen"
346
 msgstr "切换到最近一个页面"
347
 
348
-#: src/command.cxx:197
349
+#: src/Command.cxx:163
350
 msgid "Forward find"
351
 msgstr "前向查找"
352
 
353
-#: src/command.cxx:199
354
+#: src/Command.cxx:165
355
 msgid "Forward find next"
356
 msgstr "查找下一个"
357
 
358
-#: src/command.cxx:201
359
+#: src/Command.cxx:167
360
 msgid "Backward find"
361
 msgstr "后向查找"
362
 
363
-#: src/command.cxx:203
364
+#: src/Command.cxx:169
365
 msgid "Backward find previous"
366
 msgstr "查找前一个"
367
 
368
 #. translators: this queries the user for a string
369
 #. * and jumps directly (while the user is typing)
370
 #. * to the entry which begins with this string
371
-#: src/command.cxx:208
372
+#: src/Command.cxx:174
373
 msgid "Jump to"
374
 msgstr "跳转到"
375
 
376
-#: src/command.cxx:214
377
+#: src/Command.cxx:180
378
 msgid "Artist screen"
379
 msgstr "艺术家页面"
380
 
381
-#: src/command.cxx:218 src/screen_help.cxx:148
382
+#: src/Command.cxx:184 src/HelpPage.cxx:169
383
 msgid "Search screen"
384
 msgstr "查找页面"
385
 
386
-#: src/command.cxx:220
387
+#: src/Command.cxx:186
388
 msgid "Change search mode"
389
 msgstr "更改搜索模式"
390
 
391
-#: src/command.cxx:224
392
+#: src/Command.cxx:190
393
 msgid "View the selected and the currently playing song"
394
 msgstr "参看选择当前播放的曲目"
395
 
396
-#: src/command.cxx:228 src/screen_help.cxx:160
397
+#: src/Command.cxx:194 src/HelpPage.cxx:181
398
 msgid "Lyrics screen"
399
 msgstr "歌词页面"
400
 
401
 #. translators: interrupt the current background action,
402
 #. e.g. stop loading lyrics from the internet
403
-#: src/command.cxx:232
404
+#: src/Command.cxx:198
405
 msgid "Interrupt action"
406
 msgstr "中断后台操作"
407
 
408
-#: src/command.cxx:234
409
+#: src/Command.cxx:200
410
 msgid "Update Lyrics"
411
 msgstr "更新歌词"
412
 
413
-#: src/command.cxx:238
414
+#: src/Command.cxx:204
415
 msgid "Edit the current item"
416
 msgstr ""
417
 
418
-#: src/command.cxx:243 src/screen_help.cxx:175
419
+#: src/Command.cxx:209 src/HelpPage.cxx:196
420
 msgid "Outputs screen"
421
 msgstr "输出页面"
422
 
423
-#: src/command.cxx:248 src/screen_help.cxx:182
424
+#: src/Command.cxx:214 src/HelpPage.cxx:203
425
 #, fuzzy
426
 msgid "Chat screen"
427
 msgstr "下一页面"
428
 
429
-#: src/command.cxx:290
430
-msgid "Undefined"
431
-msgstr "未定义的"
432
-
433
-#: src/command.cxx:292
434
-msgid "Space"
435
-msgstr "Space"
436
-
437
-#: src/command.cxx:294
438
-msgid "Enter"
439
-msgstr "Enter"
440
-
441
-#: src/command.cxx:296
442
-msgid "Backspace"
443
-msgstr "Backspace"
444
-
445
-#: src/command.cxx:298
446
-msgid "Delete"
447
-msgstr "Delete"
448
-
449
-#: src/command.cxx:300
450
-msgid "Up"
451
-msgstr "Up"
452
-
453
-#: src/command.cxx:302
454
-msgid "Down"
455
-msgstr "Down"
456
-
457
-#: src/command.cxx:304
458
-msgid "Left"
459
-msgstr "Left"
460
-
461
-#: src/command.cxx:306
462
-msgid "Right"
463
-msgstr "Right"
464
-
465
-#: src/command.cxx:308
466
-msgid "Home"
467
-msgstr "Home"
468
-
469
-#: src/command.cxx:310
470
-msgid "End"
471
-msgstr "End"
472
-
473
-#: src/command.cxx:312
474
-msgid "PageDown"
475
-msgstr "PageDown"
476
-
477
-#: src/command.cxx:314
478
-msgid "PageUp"
479
-msgstr "PageUp"
480
-
481
-#: src/command.cxx:316
482
-msgid "Tab"
483
-msgstr "Tab"
484
-
485
-#: src/command.cxx:318
486
-msgid "Shift+Tab"
487
-msgstr "Shift+Tab"
488
-
489
-#: src/command.cxx:320
490
-msgid "Esc"
491
-msgstr "Esc"
492
-
493
-#: src/command.cxx:322
494
-msgid "Insert"
495
-msgstr "Insert"
496
-
497
-#: src/command.cxx:326
498
-#, c-format
499
-msgid "F%d"
500
-msgstr ""
501
-
502
-#: src/command.cxx:330
503
-#, c-format
504
-msgid "Ctrl-%c"
505
-msgstr ""
506
-
507
-#: src/command.cxx:332
508
-#, c-format
509
-msgid "Alt-%c"
510
-msgstr ""
511
-
512
-#: src/command.cxx:477 src/command.cxx:483
513
-#, c-format
514
-msgid "Key %s assigned to %s and %s"
515
-msgstr "按键 %s 分配给 %s 和 %s"
516
-
517
 #. To translators: prefix for error messages
518
-#: src/conf.cxx:121
519
+#: src/conf.cxx:114 src/screen_keydef.cxx:414 src/screen_keydef.cxx:423
520
 msgid "Error"
521
 msgstr "错误"
522
 
523
-#: src/conf.cxx:135
524
+#: src/conf.cxx:128
525
 msgid "Word expected"
526
 msgstr ""
527
 
528
-#: src/conf.cxx:152 src/conf.cxx:161
529
+#: src/conf.cxx:145 src/conf.cxx:154
530
 msgid "Malformed hotkey definition"
531
 msgstr "不正确的快捷键定义"
532
 
533
 #. the hotkey configuration contains an unknown
534
 #. command
535
-#: src/conf.cxx:185
536
+#: src/conf.cxx:178
537
 msgid "Unknown command"
538
 msgstr "未知命令"
539
 
540
 #. the hotkey configuration line is incomplete
541
-#: src/conf.cxx:198
542
+#: src/conf.cxx:191
543
 msgid "Incomplete hotkey configuration"
544
 msgstr "不完整的快捷键配置"
545
 
546
@@ -442,817 +377,883 @@
547
 #. "elapsed" or "remaining" time of a song being
548
 #. played; in this case, the configuration file
549
 #. contained an invalid setting
550
-#: src/conf.cxx:234
551
+#: src/conf.cxx:227
552
 msgid "Bad time display type"
553
 msgstr "错误的时间显示格式"
554
 
555
 #. an equals sign '=' was expected while parsing a
556
 #. configuration file line
557
-#: src/conf.cxx:247 src/conf.cxx:427
558
+#: src/conf.cxx:240 src/conf.cxx:418
559
 msgid "Missing '='"
560
 msgstr "缺少 '='"
561
 
562
-#: src/conf.cxx:298
563
+#: src/conf.cxx:291
564
 msgid "Bad color name"
565
 msgstr "错误的颜色名"
566
 
567
-#: src/conf.cxx:308
568
+#: src/conf.cxx:301
569
 msgid "Incomplete color definition"
570
 msgstr "不完整的颜色定义"
571
 
572
-#: src/conf.cxx:314
573
+#: src/conf.cxx:307
574
 msgid "Invalid number"
575
 msgstr "无效的数字"
576
 
577
-#: src/conf.cxx:322
578
+#: src/conf.cxx:315
579
 msgid "Malformed color definition"
580
 msgstr "不正确的颜色定义"
581
 
582
 #. an unknown screen name was specified in the
583
 #. configuration file
584
-#: src/conf.cxx:356
585
+#: src/conf.cxx:353
586
 msgid "Unknown screen name"
587
 msgstr "未知的页面名"
588
 
589
-#: src/conf.cxx:384
590
+#: src/conf.cxx:378
591
 msgid "Invalid search mode"
592
 msgstr "无效的搜索模式"
593
 
594
-#: src/conf.cxx:407
595
+#: src/conf.cxx:398
596
 msgid "Unknown search mode"
597
 msgstr "未知的搜索模式"
598
 
599
-#: src/conf.cxx:597
600
+#: src/conf.cxx:581
601
 msgid "Unknown configuration parameter"
602
 msgstr "未知的配置参数"
603
 
604
-#: src/i18n.h:42
605
-msgid "y"
606
-msgstr "y"
607
+#: src/CustomColors.cxx:56
608
+msgid "Terminal lacks support for changing colors"
609
+msgstr "终端不支持改变颜色"
610
 
611
-#: src/i18n.h:43
612
-msgid "n"
613
-msgstr "n"
614
+#. translators: the "delete" command is only possible
615
+#. for playlists; the user attempted to delete a song
616
+#. or a directory or something else
617
+#: src/FileBrowserPage.cxx:260
618
+msgid "Deleting this item is not possible"
619
+msgstr "此项目不能被删除"
620
 
621
-#: src/list_window.cxx:554
622
-msgid "Range selection disabled"
623
-msgstr "禁用区段选取"
624
+#: src/FileBrowserPage.cxx:268
625
+#, fuzzy, c-format
626
+msgid "Delete playlist %s?"
627
+msgstr "删除播放列表"
628
 
629
-#: src/list_window.cxx:559
630
-msgid "Range selection enabled"
631
-msgstr "开启区段选取"
632
+#. translators: a dialog was aborted by the user
633
+#: src/FileBrowserPage.cxx:273 src/LyricsPage.cxx:371 src/save_playlist.cxx:110
634
+#: src/screen_keydef.cxx:182
635
+msgid "Aborted"
636
+msgstr "已放弃"
637
 
638
-#: src/Main.cxx:161
639
-#, c-format
640
-msgid "Connecting to %s...  [Press %s to abort]"
641
-msgstr "连接到 %s... [按 %s 键取消]"
642
+#. translators: MPD deleted the playlist, as requested by the
643
+#. user
644
+#: src/FileBrowserPage.cxx:286
645
+msgid "Playlist deleted"
646
+msgstr "播放列表已删除"
647
+
648
+#. translators: caption of the browser screen
649
+#: src/FileBrowserPage.cxx:313 src/FileBrowserPage.cxx:395
650
+msgid "Browse"
651
+msgstr "目录"
652
 
653
-#: src/Main.cxx:182
654
+#: src/FileListPage.cxx:121
655
 #, fuzzy, c-format
656
-msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
657
-msgstr "错误: MPD版本%d.%d.%d过低(需要 %s)"
658
+msgid "Loading playlist '%s'"
659
+msgstr "加载播放列表 %s..."
660
 
661
-#: src/Main.cxx:317
662
-#, c-format
663
-msgid "press %s for the key editor"
664
-msgstr "按 %s 编辑快捷键"
665
+#: src/HelpPage.cxx:60
666
+msgid "Movement"
667
+msgstr "移动"
668
 
669
-#. To translators: these credits are shown
670
-#. when ncmpc is started with "--version"
671
-#: src/options.cxx:209 src/options.cxx:212
672
-msgid "translator-credits"
673
-msgstr ""
674
-"Launchpad Contributions:\n"
675
-"  Gao Jie https://launchpad.net/~kindmail\n"
676
-"  Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-"
677
-"deactivatedaccount\n"
678
-"  snowdream https://launchpad.net/~yanghui"
679
+#: src/HelpPage.cxx:105
680
+msgid "Global"
681
+msgstr "全局设定"
682
 
683
-#: src/player_command.cxx:174 src/screen_queue.cxx:623
684
-msgid "Shuffled queue"
685
-msgstr ""
686
+#: src/HelpPage.cxx:142
687
+msgid "Play"
688
+msgstr "播放"
689
 
690
-#: src/player_command.cxx:184
691
-msgid "Cleared queue"
692
-msgstr ""
693
+#: src/HelpPage.cxx:149
694
+msgid "Center"
695
+msgstr "当前播放项居中显示"
696
 
697
-#. query the user for a filename
698
-#: src/save_playlist.cxx:109
699
-msgid "Save queue as"
700
-msgstr ""
701
+#: src/HelpPage.cxx:157
702
+msgid "Enter directory/Select and play song"
703
+msgstr "进入选中目录/播放选中歌曲"
704
 
705
-#: src/save_playlist.cxx:140
706
-#, fuzzy, c-format
707
-msgid "Replace %s?"
708
-msgstr "替换 %s [%s/%s]? "
709
+#: src/HelpPage.cxx:161
710
+msgid "Delete playlist"
711
+msgstr "删除播放列表"
712
 
713
-#. translators: a dialog was aborted by the user
714
-#: src/save_playlist.cxx:147 src/screen_file.cxx:214 src/screen_keydef.cxx:271
715
-#: src/screen_lyrics.cxx:370
716
-msgid "Aborted"
717
-msgstr "已放弃"
718
+#: src/HelpPage.cxx:171
719
+#, fuzzy
720
+msgid "New search"
721
+msgstr "查找"
722
 
723
-#. success
724
-#: src/save_playlist.cxx:171
725
-#, c-format
726
-msgid "Saved %s"
727
-msgstr "保存到 %s"
728
+#: src/HelpPage.cxx:172
729
+msgid "Select and play"
730
+msgstr "选中并播放"
731
 
732
-#: src/screen.cxx:154
733
-msgid "Repeat mode is on"
734
-msgstr "重复播放 开"
735
+#: src/HelpPage.cxx:183
736
+msgid "View Lyrics"
737
+msgstr "查看歌词"
738
 
739
-#: src/screen.cxx:155
740
-msgid "Repeat mode is off"
741
-msgstr "重复播放 关"
742
+#: src/HelpPage.cxx:184
743
+msgid "(Re)load lyrics"
744
+msgstr "(重新)加载歌词"
745
 
746
-#: src/screen.cxx:159
747
-msgid "Random mode is on"
748
-msgstr "随机播放 开"
749
+#. to translators: this hotkey aborts the retrieval of lyrics
750
+#. from the server
751
+#: src/HelpPage.cxx:187
752
+msgid "Interrupt retrieval"
753
+msgstr "中断歌词下载"
754
 
755
-#: src/screen.cxx:160
756
-msgid "Random mode is off"
757
-msgstr "随机播放 关"
758
+#: src/HelpPage.cxx:188
759
+msgid "Download lyrics for currently playing song"
760
+msgstr "为当前曲目下载歌词"
761
 
762
-#. "single" mode means
763
-#. that MPD will
764
-#. automatically stop
765
-#. after playing one
766
-#. single song
767
-#: src/screen.cxx:169
768
-msgid "Single mode is on"
769
-msgstr "单曲播放 开"
770
+#: src/HelpPage.cxx:189
771
+#, fuzzy
772
+msgid "Add or edit lyrics"
773
+msgstr "没有歌词"
774
 
775
-#: src/screen.cxx:170
776
-msgid "Single mode is off"
777
-msgstr "单曲播放 关"
778
+#: src/HelpPage.cxx:190
779
+msgid "Save lyrics"
780
+msgstr "保存歌词"
781
 
782
-#. "consume" mode means
783
-#. that MPD removes each
784
-#. song which has
785
-#. finished playing
786
-#: src/screen.cxx:178
787
-msgid "Consume mode is on"
788
-msgstr "消除模式 开"
789
+#: src/HelpPage.cxx:191
790
+msgid "Delete saved lyrics"
791
+msgstr "删除已保存歌词"
792
 
793
-#: src/screen.cxx:179
794
-msgid "Consume mode is off"
795
-msgstr "消除模式 关"
796
+#: src/HelpPage.cxx:198
797
+msgid "Enable/disable output"
798
+msgstr "启用/禁用音频输出"
799
 
800
-#: src/screen.cxx:182
801
-#, c-format
802
-msgid "Crossfade %d seconds"
803
-msgstr "淡入淡出 %d 秒"
804
+#: src/HelpPage.cxx:205
805
+msgid "Write a message"
806
+msgstr ""
807
 
808
-#: src/screen.cxx:194
809
-msgid "Database updated"
810
-msgstr "数据库已更新"
811
+#: src/HelpPage.cxx:210
812
+msgid "Keydef screen"
813
+msgstr "键定义页面"
814
 
815
-#: src/screen.cxx:226
816
-msgid "Find mode: Wrapped"
817
-msgstr "查找模式: 循环"
818
+#: src/HelpPage.cxx:212
819
+msgid "Edit keydefs for selected command"
820
+msgstr "为选择的命令定义快捷键"
821
 
822
-#: src/screen.cxx:227
823
-msgid "Find mode: Normal"
824
-msgstr "查找模式: 普通"
825
+#: src/HelpPage.cxx:213
826
+msgid "Remove selected keydef"
827
+msgstr "去除选择的快捷键设定"
828
 
829
-#: src/screen.cxx:232
830
-msgid "Auto center mode: On"
831
-msgstr "自动居中模式: 开"
832
+#: src/HelpPage.cxx:214
833
+#, fuzzy
834
+msgid "Add a keydef"
835
+msgstr "添加新的键"
836
 
837
-#: src/screen.cxx:233
838
-msgid "Auto center mode: Off"
839
-msgstr "自动居中模式: 关"
840
+#: src/HelpPage.cxx:215
841
+msgid "Go up a level"
842
+msgstr "上一级"
843
 
844
-#: src/screen_artist.cxx:72 src/screen_artist.cxx:352
845
-msgid "All tracks"
846
-msgstr "全部音轨"
847
+#: src/HelpPage.cxx:216
848
+msgid "Apply and save changes"
849
+msgstr "保存设置"
850
 
851
-#: src/screen_artist.cxx:384
852
-msgid "All artists"
853
-msgstr "全部艺术家"
854
+#: src/HelpPage.cxx:245 src/HelpPage.cxx:329
855
+msgid "Help"
856
+msgstr "帮助"
857
 
858
-#: src/screen_artist.cxx:389
859
-#, c-format
860
-msgid "Albums of artist: %s"
861
-msgstr "%s 的专辑:"
862
+#: src/i18n.h:43
863
+msgid "y"
864
+msgstr "y"
865
 
866
-#: src/screen_artist.cxx:398
867
-#, c-format
868
-msgid "All tracks of artist: %s"
869
-msgstr "%s 的所有曲目"
870
+#: src/i18n.h:44
871
+msgid "n"
872
+msgstr "n"
873
 
874
-#: src/screen_artist.cxx:401
875
-#, c-format
876
-msgid "Album: %s - %s"
877
-msgstr "专辑: %s - %s"
878
+#: src/KeyName.cxx:31
879
+msgid "Undefined"
880
+msgstr "未定义的"
881
 
882
-#: src/screen_artist.cxx:405
883
-#, c-format
884
-msgid "Tracks of no album of artist: %s"
885
-msgstr "艺术家的无专辑曲目: %s"
886
+#: src/KeyName.cxx:33
887
+msgid "Space"
888
+msgstr "Space"
889
 
890
-#: src/screen_artist.cxx:450
891
-#, c-format
892
-msgid "Adding album %s..."
893
-msgstr "添加专辑 %s..."
894
+#: src/KeyName.cxx:35
895
+msgid "Enter"
896
+msgstr "Enter"
897
+
898
+#: src/KeyName.cxx:37
899
+msgid "Backspace"
900
+msgstr "Backspace"
901
+
902
+#: src/KeyName.cxx:39
903
+msgid "Delete"
904
+msgstr "Delete"
905
+
906
+#: src/KeyName.cxx:41
907
+msgid "Up"
908
+msgstr "Up"
909
 
910
-#: src/screen_artist.cxx:452
911
+#: src/KeyName.cxx:43
912
+msgid "Down"
913
+msgstr "Down"
914
+
915
+#: src/KeyName.cxx:45
916
+msgid "Left"
917
+msgstr "Left"
918
+
919
+#: src/KeyName.cxx:47
920
+msgid "Right"
921
+msgstr "Right"
922
+
923
+#: src/KeyName.cxx:49
924
+msgid "Home"
925
+msgstr "Home"
926
+
927
+#: src/KeyName.cxx:51
928
+msgid "End"
929
+msgstr "End"
930
+
931
+#: src/KeyName.cxx:53
932
+msgid "PageDown"
933
+msgstr "PageDown"
934
+
935
+#: src/KeyName.cxx:55
936
+msgid "PageUp"
937
+msgstr "PageUp"
938
+
939
+#: src/KeyName.cxx:57
940
+msgid "Tab"
941
+msgstr "Tab"
942
+
943
+#: src/KeyName.cxx:59
944
+msgid "Shift+Tab"
945
+msgstr "Shift+Tab"
946
+
947
+#: src/KeyName.cxx:61
948
+msgid "Esc"
949
+msgstr "Esc"
950
+
951
+#: src/KeyName.cxx:63
952
+msgid "Insert"
953
+msgstr "Insert"
954
+
955
+#: src/KeyName.cxx:71
956
 #, c-format
957
-msgid "Adding %s..."
958
-msgstr "添加 %s..."
959
+msgid "Ctrl-%c"
960
+msgstr ""
961
 
962
-#: src/screen_browser.cxx:122
963
+#: src/KeyName.cxx:73
964
 #, c-format
965
-msgid "Loading playlist %s..."
966
-msgstr "加载播放列表 %s..."
967
+msgid "Alt-%c"
968
+msgstr ""
969
 
970
-#: src/screen_browser.cxx:163 src/screen_browser.cxx:255
971
-#: src/screen_browser.cxx:279
972
-#, fuzzy, c-format
973
-msgid "Adding '%s' to queue"
974
-msgstr "添加 '%s' 到播放列表"
975
+#: src/ListWindow.cxx:491
976
+msgid "Range selection disabled"
977
+msgstr "禁用区段选取"
978
+
979
+#: src/ListWindow.cxx:496
980
+msgid "Range selection enabled"
981
+msgstr "开启区段选取"
982
+
983
+#. translators: no lyrics were found for the song
984
+#: src/LyricsPage.cxx:236
985
+msgid "No lyrics"
986
+msgstr "无歌词"
987
 
988
-#: src/screen_chat.cxx:59
989
+#: src/LyricsPage.cxx:254
990
 #, c-format
991
-msgid ""
992
-"connected to MPD %u.%u.%u (you need at least \n"
993
-"version 0.17.0 to use the chat feature)"
994
+msgid "Lyrics timeout occurred after %d seconds"
995
 msgstr ""
996
 
997
-#: src/screen_chat.cxx:177
998
-msgid "Your message"
999
+#: src/LyricsPage.cxx:337 src/LyricsPage.cxx:345 src/LyricsPage.cxx:354
1000
+#: src/LyricsPage.cxx:490
1001
+msgid "Lyrics"
1002
+msgstr "歌词"
1003
+
1004
+#. translators: this message is displayed
1005
+#. while data is retrieved
1006
+#: src/LyricsPage.cxx:340
1007
+msgid "loading..."
1008
+msgstr "正在载入..."
1009
+
1010
+#: src/LyricsPage.cxx:361
1011
+msgid "Editor not configured"
1012
 msgstr ""
1013
 
1014
-#: src/screen_chat.cxx:186
1015
-msgid "Message could not be sent"
1016
+#: src/LyricsPage.cxx:368
1017
+msgid "Do you really want to start an editor and edit these lyrics?"
1018
 msgstr ""
1019
 
1020
-#: src/screen_chat.cxx:199 src/title_bar.cxx:91
1021
-msgid "Chat"
1022
+#: src/LyricsPage.cxx:386 src/LyricsPage.cxx:410
1023
+msgid "Can't start editor"
1024
 msgstr ""
1025
 
1026
-#: src/screen_client.cxx:41
1027
-msgid "Database update running..."
1028
-msgstr "正在更新数据库..."
1029
+#: src/LyricsPage.cxx:413 src/LyricsPage.cxx:417
1030
+msgid "Editor exited unexpectedly"
1031
+msgstr ""
1032
 
1033
-#: src/screen_client.cxx:49
1034
-#, c-format
1035
-msgid "Database update of %s started"
1036
-msgstr "开始更新数据库 %s"
1037
+#. lyrics for the song were saved on hard disk
1038
+#: src/LyricsPage.cxx:439
1039
+msgid "Lyrics saved"
1040
+msgstr "歌词已保存"
1041
 
1042
-#: src/screen_client.cxx:52
1043
-msgid "Database update started"
1044
-msgstr "更新数据库中"
1045
+#: src/LyricsPage.cxx:445
1046
+msgid "Lyrics deleted"
1047
+msgstr "歌词已被删除"
1048
 
1049
-#. translators: the "delete" command is only possible
1050
-#. for playlists; the user attempted to delete a song
1051
-#. or a directory or something else
1052
-#: src/screen_file.cxx:200
1053
-msgid "Deleting this item is not possible"
1054
-msgstr "此项目不能被删除"
1055
+#: src/LyricsPage.cxx:446
1056
+msgid "No saved lyrics"
1057
+msgstr "没有歌词"
1058
 
1059
-#: src/screen_file.cxx:207
1060
+#: src/Main.cxx:167
1061
 #, fuzzy, c-format
1062
-msgid "Delete playlist %s?"
1063
-msgstr "删除播放列表"
1064
-
1065
-#. translators: MPD deleted the playlist, as requested by the
1066
-#. user
1067
-#: src/screen_file.cxx:227
1068
-msgid "Playlist deleted"
1069
-msgstr "播放列表已删除"
1070
-
1071
-#. translators: caption of the browser screen
1072
-#: src/screen_file.cxx:280 src/title_bar.cxx:77
1073
-msgid "Browse"
1074
-msgstr "目录"
1075
+msgid "Connecting to %s"
1076
+msgstr "连接到 %s"
1077
 
1078
-#: src/screen_find.cxx:29
1079
-msgid "Find"
1080
-msgstr "查找"
1081
+#: src/Main.cxx:187
1082
+#, fuzzy, c-format
1083
+msgid "Error: MPD version %d.%d.%d is too old (%s needed)"
1084
+msgstr "错误: MPD版本%d.%d.%d过低(需要 %s)"
1085
 
1086
-#: src/screen_find.cxx:30
1087
-msgid "Find backward"
1088
-msgstr "查找前一个"
1089
+#. To translators: these credits are shown
1090
+#. when ncmpc is started with "--version"
1091
+#: src/options.cxx:213 src/options.cxx:216
1092
+msgid "translator-credits"
1093
+msgstr ""
1094
+"Launchpad Contributions:\n"
1095
+"  Gao Jie https://launchpad.net/~kindmail\n"
1096
+"  Kyle WANG https://launchpad.net/~osfans-deactivatedaccount-"
1097
+"deactivatedaccount\n"
1098
+"  snowdream https://launchpad.net/~yanghui"
1099
 
1100
-#: src/screen_find.cxx:31
1101
-msgid "Jump"
1102
-msgstr "跳转"
1103
+#: src/OutputsPage.cxx:87
1104
+#, c-format
1105
+msgid "Output '%s' enabled"
1106
+msgstr "启用 '%s' 输出"
1107
 
1108
-#: src/screen_find.cxx:82
1109
+#: src/OutputsPage.cxx:98
1110
 #, c-format
1111
-msgid "Unable to find '%s'"
1112
-msgstr "找不到 '%s'"
1113
+msgid "Output '%s' disabled"
1114
+msgstr "禁用 '%s' 输出"
1115
 
1116
-#: src/screen_help.cxx:39
1117
-msgid "Movement"
1118
-msgstr "移动"
1119
+#: src/OutputsPage.cxx:145 src/OutputsPage.cxx:206
1120
+msgid "Outputs"
1121
+msgstr "输出"
1122
 
1123
-#: src/screen_help.cxx:84
1124
-msgid "Global"
1125
-msgstr "全局设定"
1126
+#: src/player_command.cxx:176 src/QueuePage.cxx:614
1127
+msgid "Shuffled queue"
1128
+msgstr ""
1129
 
1130
-#: src/screen_help.cxx:121
1131
-msgid "Play"
1132
-msgstr "播放"
1133
+#: src/player_command.cxx:186
1134
+msgid "Cleared queue"
1135
+msgstr ""
1136
 
1137
-#: src/screen_help.cxx:124
1138
-msgid "Move song up"
1139
-msgstr "上移"
1140
+#. get path
1141
+#: src/QueuePage.cxx:307
1142
+msgid "Add"
1143
+msgstr "增加"
1144
 
1145
-#: src/screen_help.cxx:125
1146
-msgid "Move song down"
1147
-msgstr "下移"
1148
+#: src/QueuePage.cxx:378 src/QueuePage.cxx:674
1149
+msgid "Queue"
1150
+msgstr ""
1151
 
1152
-#: src/screen_help.cxx:128
1153
-msgid "Center"
1154
-msgstr "当前播放项居中显示"
1155
+#: src/QueuePage.cxx:380
1156
+#, c-format
1157
+msgid "Queue on %s"
1158
+msgstr ""
1159
 
1160
-#: src/screen_help.cxx:136
1161
-msgid "Enter directory/Select and play song"
1162
-msgstr "进入选中目录/播放选中歌曲"
1163
+#. query the user for a filename
1164
+#: src/save_playlist.cxx:85
1165
+msgid "Save queue as"
1166
+msgstr ""
1167
 
1168
-#: src/screen_help.cxx:138 src/screen_help.cxx:153
1169
-#, fuzzy
1170
-msgid "Append song to queue"
1171
-msgstr "添加到播放列表"
1172
+#: src/save_playlist.cxx:107
1173
+#, fuzzy, c-format
1174
+msgid "Replace %s?"
1175
+msgstr "替换 %s [%s/%s]? "
1176
 
1177
-#: src/screen_help.cxx:140
1178
-msgid "Delete playlist"
1179
-msgstr "删除播放列表"
1180
+#. success
1181
+#: src/save_playlist.cxx:128
1182
+#, c-format
1183
+msgid "Saved %s"
1184
+msgstr "保存到 %s"
1185
 
1186
-#: src/screen_help.cxx:150 src/screen_search.cxx:355 src/title_bar.cxx:82
1187
-msgid "Search"
1188
-msgstr "查找"
1189
+#: src/screen_artist.cxx:186
1190
+#, c-format
1191
+msgid "All tracks of artist: %s"
1192
+msgstr "%s 的所有曲目"
1193
 
1194
-#: src/screen_help.cxx:151
1195
-msgid "Select and play"
1196
-msgstr "选中并播放"
1197
+#: src/screen_artist.cxx:191 src/SearchPage.cxx:87 src/SongPage.cxx:66
1198
+msgid "Album"
1199
+msgstr "专辑"
1200
 
1201
-#: src/screen_help.cxx:162
1202
-msgid "View Lyrics"
1203
-msgstr "查看歌词"
1204
+#: src/screen_artist.cxx:195
1205
+#, c-format
1206
+msgid "Tracks of no album of artist: %s"
1207
+msgstr "艺术家的无专辑曲目: %s"
1208
 
1209
-#: src/screen_help.cxx:163
1210
-msgid "(Re)load lyrics"
1211
-msgstr "(重新)加载歌词"
1212
+#: src/screen_artist.cxx:299 src/SearchPage.cxx:86 src/SongPage.cxx:64
1213
+msgid "Artist"
1214
+msgstr "艺术家"
1215
 
1216
-#. to translators: this hotkey aborts the retrieval of lyrics
1217
-#. from the server
1218
-#: src/screen_help.cxx:166
1219
-msgid "Interrupt retrieval"
1220
-msgstr "中断歌词下载"
1221
+#: src/screen_client.cxx:41
1222
+#, fuzzy
1223
+msgid "Database update running"
1224
+msgstr "正在更新数据库..."
1225
 
1226
-#: src/screen_help.cxx:167
1227
-msgid "Download lyrics for currently playing song"
1228
-msgstr "为当前曲目下载歌词"
1229
+#: src/screen_client.cxx:48
1230
+#, c-format
1231
+msgid "Database update of %s started"
1232
+msgstr "开始更新数据库 %s"
1233
 
1234
-#: src/screen_help.cxx:168
1235
-#, fuzzy
1236
-msgid "Add or edit lyrics"
1237
-msgstr "没有歌词"
1238
+#: src/screen_client.cxx:51
1239
+msgid "Database update started"
1240
+msgstr "更新数据库中"
1241
 
1242
-#: src/screen_help.cxx:169
1243
-msgid "Save lyrics"
1244
-msgstr "保存歌词"
1245
+#: src/screen.cxx:160
1246
+msgid "Repeat mode is on"
1247
+msgstr "重复播放 开"
1248
 
1249
-#: src/screen_help.cxx:170
1250
-msgid "Delete saved lyrics"
1251
-msgstr "删除已保存歌词"
1252
+#: src/screen.cxx:161
1253
+msgid "Repeat mode is off"
1254
+msgstr "重复播放 关"
1255
 
1256
-#: src/screen_help.cxx:177
1257
-msgid "Enable/disable output"
1258
-msgstr "启用/禁用音频输出"
1259
+#: src/screen.cxx:165
1260
+msgid "Random mode is on"
1261
+msgstr "随机播放 开"
1262
 
1263
-#: src/screen_help.cxx:184
1264
-msgid "Write a message"
1265
-msgstr ""
1266
+#: src/screen.cxx:166
1267
+msgid "Random mode is off"
1268
+msgstr "随机播放 关"
1269
 
1270
-#: src/screen_help.cxx:189
1271
-msgid "Keydef screen"
1272
-msgstr "键定义页面"
1273
+#. "single" mode means
1274
+#. that MPD will
1275
+#. automatically stop
1276
+#. after playing one
1277
+#. single song
1278
+#: src/screen.cxx:175
1279
+msgid "Single mode is on"
1280
+msgstr "单曲播放 开"
1281
 
1282
-#: src/screen_help.cxx:191
1283
-msgid "Edit keydefs for selected command"
1284
-msgstr "为选择的命令定义快捷键"
1285
+#: src/screen.cxx:176
1286
+msgid "Single mode is off"
1287
+msgstr "单曲播放 关"
1288
 
1289
-#: src/screen_help.cxx:192
1290
-msgid "Remove selected keydef"
1291
-msgstr "去除选择的快捷键设定"
1292
+#. "consume" mode means
1293
+#. that MPD removes each
1294
+#. song which has
1295
+#. finished playing
1296
+#: src/screen.cxx:184
1297
+msgid "Consume mode is on"
1298
+msgstr "消除模式 开"
1299
 
1300
-#: src/screen_help.cxx:193
1301
-#, fuzzy
1302
-msgid "Add a keydef"
1303
-msgstr "添加新的键"
1304
+#: src/screen.cxx:185
1305
+msgid "Consume mode is off"
1306
+msgstr "消除模式 关"
1307
 
1308
-#: src/screen_help.cxx:194
1309
-msgid "Go up a level"
1310
-msgstr "上一级"
1311
+#: src/screen.cxx:188
1312
+#, c-format
1313
+msgid "Crossfade %d seconds"
1314
+msgstr "淡入淡出 %d 秒"
1315
 
1316
-#: src/screen_help.cxx:195
1317
-msgid "Apply and save changes"
1318
-msgstr "保存设置"
1319
+#: src/screen.cxx:200
1320
+msgid "Database updated"
1321
+msgstr "数据库已更新"
1322
 
1323
-#: src/screen_help.cxx:241 src/title_bar.cxx:74
1324
-msgid "Help"
1325
-msgstr "帮助"
1326
+#: src/screen.cxx:250
1327
+msgid "Find mode: Wrapped"
1328
+msgstr "查找模式: 循环"
1329
 
1330
-#: src/screen_init.cxx:70 src/screen_init.cxx:127
1331
-msgid "Error: Screen too small"
1332
-msgstr "错误: 屏幕太小"
1333
+#: src/screen.cxx:251
1334
+msgid "Find mode: Normal"
1335
+msgstr "查找模式: 普通"
1336
 
1337
-#: src/screen_keydef.cxx:141
1338
-msgid "You have new key bindings"
1339
-msgstr "你有新绑定的快捷键"
1340
+#: src/screen.cxx:256
1341
+msgid "Auto center mode: On"
1342
+msgstr "自动居中模式: 开"
1343
 
1344
-#: src/screen_keydef.cxx:143
1345
-msgid "Keybindings unchanged."
1346
-msgstr "取消快捷键变更."
1347
+#: src/screen.cxx:257
1348
+msgid "Auto center mode: Off"
1349
+msgstr "自动居中模式: 关"
1350
 
1351
-#: src/screen_keydef.cxx:153
1352
-#, c-format
1353
-msgid "Error: Unable to create directory ~/.ncmpc - %s"
1354
-msgstr "错误: 无法创建文件夹 ~/.ncmpc - %s"
1355
+#: src/screen_find.cxx:31
1356
+msgid "Find"
1357
+msgstr "查找"
1358
 
1359
-#: src/screen_keydef.cxx:164 src/screen_keydef.cxx:173
1360
-#, c-format
1361
-msgid "Error: %s - %s"
1362
-msgstr "错误 %s - %s"
1363
+#: src/screen_find.cxx:32
1364
+msgid "Find backward"
1365
+msgstr "查找前一个"
1366
 
1367
-#: src/screen_keydef.cxx:171
1368
+#: src/screen_find.cxx:33
1369
+msgid "Jump"
1370
+msgstr "跳转"
1371
+
1372
+#: src/screen_find.cxx:79
1373
 #, c-format
1374
-msgid "Wrote %s"
1375
-msgstr "写入 %s"
1376
+msgid "Unable to find '%s'"
1377
+msgstr "找不到 '%s'"
1378
 
1379
-#: src/screen_keydef.cxx:250
1380
+#: src/screen_keydef.cxx:161
1381
 msgid "Deleted"
1382
 msgstr "已删除"
1383
 
1384
-#: src/screen_keydef.cxx:265
1385
+#: src/screen_keydef.cxx:177
1386
 #, c-format
1387
 msgid "Enter new key for %s: "
1388
 msgstr "为 %s 输入新的按键: "
1389
 
1390
-#: src/screen_keydef.cxx:276
1391
+#: src/screen_keydef.cxx:187
1392
 msgid "Ctrl-Space can't be used"
1393
 msgstr ""
1394
 
1395
-#: src/screen_keydef.cxx:282
1396
+#: src/screen_keydef.cxx:193
1397
 #, c-format
1398
 msgid "Error: key %s is already used for %s"
1399
 msgstr "键 %s 已经绑定到 %s"
1400
 
1401
-#: src/screen_keydef.cxx:291
1402
+#: src/screen_keydef.cxx:202
1403
 #, c-format
1404
 msgid "Assigned %s to %s"
1405
 msgstr "分配 %s 到 %s"
1406
 
1407
-#: src/screen_keydef.cxx:317
1408
-msgid "===> Apply key bindings "
1409
-msgstr "应用快捷键设置 "
1410
-
1411
-#: src/screen_keydef.cxx:319
1412
-msgid "===> Apply & Save key bindings  "
1413
-msgstr "应用 & 保存快捷键设置  "
1414
-
1415
-#: src/screen_keydef.cxx:347
1416
+#: src/screen_keydef.cxx:229
1417
 msgid "Add new key"
1418
 msgstr "添加新的键"
1419
 
1420
-#: src/screen_keydef.cxx:410
1421
-msgid "Note: Did you forget to 'Apply' your changes?"
1422
-msgstr "提示: 你忘记了保存你的设置?"
1423
-
1424
-#: src/screen_keydef.cxx:417
1425
-msgid "Edit key bindings"
1426
-msgstr "编辑快捷键设置"
1427
-
1428
-#: src/screen_keydef.cxx:419
1429
+#: src/screen_keydef.cxx:251
1430
 #, c-format
1431
 msgid "Edit keys for %s"
1432
 msgstr "为 %s 编辑快捷键"
1433
 
1434
-#. translators: no lyrics were found for the song
1435
-#: src/screen_lyrics.cxx:208
1436
-msgid "No lyrics"
1437
-msgstr "无歌词"
1438
-
1439
-#: src/screen_lyrics.cxx:226
1440
-#, c-format
1441
-msgid "Lyrics timeout occurred after %d seconds"
1442
-msgstr ""
1443
-
1444
-#: src/screen_lyrics.cxx:327 src/screen_lyrics.cxx:336
1445
-#: src/screen_lyrics.cxx:346 src/title_bar.cxx:85
1446
-msgid "Lyrics"
1447
-msgstr "歌词"
1448
-
1449
-#. translators: this message is displayed
1450
-#. while data is retrieved
1451
-#: src/screen_lyrics.cxx:330
1452
-msgid "loading..."
1453
-msgstr "正在载入..."
1454
-
1455
-#: src/screen_lyrics.cxx:361
1456
-msgid "Editor not configured"
1457
-msgstr ""
1458
-
1459
-#: src/screen_lyrics.cxx:367
1460
-msgid "Do you really want to start an editor and edit these lyrics?"
1461
-msgstr ""
1462
+#: src/screen_keydef.cxx:393
1463
+msgid "You have new key bindings"
1464
+msgstr "你有新绑定的快捷键"
1465
 
1466
-#: src/screen_lyrics.cxx:385 src/screen_lyrics.cxx:409
1467
-msgid "Can't start editor"
1468
-msgstr ""
1469
+#: src/screen_keydef.cxx:395
1470
+msgid "Keybindings unchanged."
1471
+msgstr "取消快捷键变更."
1472
 
1473
-#: src/screen_lyrics.cxx:411
1474
-#, c-format
1475
-msgid "Editor exited unexpectedly (%d)"
1476
-msgstr ""
1477
+#: src/screen_keydef.cxx:405
1478
+#, fuzzy
1479
+msgid "Unable to write configuration"
1480
+msgstr "不完整的快捷键配置"
1481
 
1482
-#: src/screen_lyrics.cxx:414
1483
+#: src/screen_keydef.cxx:421
1484
 #, c-format
1485
-msgid "Editor exited unexpectedly (signal %d)"
1486
-msgstr ""
1487
-
1488
-#. lyrics for the song were saved on hard disk
1489
-#: src/screen_lyrics.cxx:436
1490
-msgid "Lyrics saved"
1491
-msgstr "歌词已保存"
1492
-
1493
-#: src/screen_lyrics.cxx:443
1494
-msgid "Lyrics deleted"
1495
-msgstr "歌词已被删除"
1496
-
1497
-#: src/screen_lyrics.cxx:446
1498
-msgid "No saved lyrics"
1499
-msgstr "没有歌词"
1500
+msgid "Wrote %s"
1501
+msgstr "写入 %s"
1502
 
1503
-#: src/screen_outputs.cxx:60
1504
-#, c-format
1505
-msgid "Output '%s' enabled"
1506
-msgstr "启用 '%s' 输出"
1507
+#: src/screen_keydef.cxx:433
1508
+msgid "===> Apply key bindings "
1509
+msgstr "应用快捷键设置 "
1510
 
1511
-#: src/screen_outputs.cxx:71
1512
-#, c-format
1513
-msgid "Output '%s' disabled"
1514
-msgstr "禁用 '%s' 输出"
1515
+#: src/screen_keydef.cxx:435
1516
+msgid "===> Apply & Save key bindings  "
1517
+msgstr "应用 & 保存快捷键设置  "
1518
 
1519
-#: src/screen_outputs.cxx:162 src/title_bar.cxx:88
1520
-msgid "Outputs"
1521
-msgstr "输出"
1522
+#: src/screen_keydef.cxx:472
1523
+msgid "Edit key bindings"
1524
+msgstr "编辑快捷键设置"
1525
 
1526
-#. get path
1527
-#: src/screen_queue.cxx:274
1528
-msgid "Add"
1529
-msgstr "增加"
1530
+#: src/screen_keydef.cxx:554
1531
+msgid "Note: Did you forget to 'Apply' your changes?"
1532
+msgstr "提示: 你忘记了保存你的设置?"
1533
 
1534
-#: src/screen_queue.cxx:382 src/title_bar.cxx:76
1535
-msgid "Queue"
1536
+#: src/screen_keydef.cxx:604
1537
+msgid "Keys"
1538
 msgstr ""
1539
 
1540
-#: src/screen_queue.cxx:384
1541
-#, c-format
1542
-msgid "Queue on %s"
1543
-msgstr ""
1544
+#: src/screen_utils.cxx:124
1545
+msgid "Password"
1546
+msgstr "密码"
1547
 
1548
-#: src/screen_search.cxx:48
1549
+#: src/SearchPage.cxx:51
1550
 msgid "artist"
1551
 msgstr "艺术家"
1552
 
1553
-#: src/screen_search.cxx:49
1554
+#: src/SearchPage.cxx:52
1555
 msgid "album"
1556
 msgstr "专辑"
1557
 
1558
-#: src/screen_search.cxx:50
1559
+#: src/SearchPage.cxx:53
1560
 msgid "title"
1561
 msgstr "标题"
1562
 
1563
-#: src/screen_search.cxx:51
1564
+#: src/SearchPage.cxx:54
1565
 msgid "track"
1566
 msgstr "曲目"
1567
 
1568
-#: src/screen_search.cxx:52
1569
+#: src/SearchPage.cxx:55
1570
 msgid "name"
1571
 msgstr "名称"
1572
 
1573
-#: src/screen_search.cxx:53
1574
+#: src/SearchPage.cxx:56
1575
 msgid "genre"
1576
 msgstr "流派"
1577
 
1578
-#: src/screen_search.cxx:54
1579
+#: src/SearchPage.cxx:57
1580
 msgid "date"
1581
 msgstr "日期"
1582
 
1583
-#: src/screen_search.cxx:55
1584
+#: src/SearchPage.cxx:58
1585
 msgid "composer"
1586
 msgstr "作曲"
1587
 
1588
-#: src/screen_search.cxx:56
1589
+#: src/SearchPage.cxx:59
1590
 msgid "performer"
1591
 msgstr "歌手"
1592
 
1593
-#: src/screen_search.cxx:57
1594
+#: src/SearchPage.cxx:60
1595
 msgid "comment"
1596
 msgstr "注释"
1597
 
1598
-#: src/screen_search.cxx:65
1599
+#: src/SearchPage.cxx:68
1600
 msgid "file"
1601
 msgstr "文件"
1602
 
1603
-#: src/screen_search.cxx:82 src/screen_song.cxx:52
1604
+#: src/SearchPage.cxx:85 src/SongPage.cxx:65
1605
 msgid "Title"
1606
 msgstr "标题"
1607
 
1608
-#: src/screen_search.cxx:83 src/screen_song.cxx:51 src/title_bar.cxx:79
1609
-msgid "Artist"
1610
-msgstr "艺术家"
1611
-
1612
-#: src/screen_search.cxx:84 src/screen_song.cxx:53
1613
-msgid "Album"
1614
-msgstr "专辑"
1615
-
1616
-#: src/screen_search.cxx:85
1617
+#: src/SearchPage.cxx:88
1618
 msgid "Filename"
1619
 msgstr "文件名"
1620
 
1621
-#: src/screen_search.cxx:86
1622
+#: src/SearchPage.cxx:89
1623
 msgid "Artist + Title"
1624
 msgstr "艺术家 + 标题"
1625
 
1626
-#: src/screen_search.cxx:244
1627
-#, c-format
1628
-msgid "No argument for search tag %s"
1629
-msgstr "搜索条目 %s 没有参数"
1630
-
1631
-#: src/screen_search.cxx:253
1632
+#: src/SearchPage.cxx:270
1633
 #, c-format
1634
 msgid "Bad search tag %s"
1635
 msgstr "不正确的搜索条目 %s"
1636
 
1637
-#. if( pattern==nullptr )
1638
-#. search_new(screen, c);
1639
-#. else
1640
-#: src/screen_search.cxx:400
1641
+#: src/SearchPage.cxx:284
1642
 #, c-format
1643
-msgid "Press %s for a new search"
1644
-msgstr "按 %s 开始新的搜索"
1645
-
1646
-#: src/screen_search.cxx:427
1647
-#, c-format
1648
-msgid "Search: %s"
1649
-msgstr "查找: %s"
1650
-
1651
-#: src/screen_search.cxx:430
1652
-#, c-format
1653
-msgid "Search: Results for %s [%s]"
1654
-msgstr "查找: %s [%s] 的结果"
1655
+msgid "No argument for search tag %s"
1656
+msgstr "搜索条目 %s 没有参数"
1657
 
1658
-#: src/screen_search.cxx:434
1659
-#, c-format
1660
-msgid "Search: Press %s for a new search [%s]"
1661
-msgstr "查找: 按 %s 开始新的搜索 [%s]"
1662
+#: src/SearchPage.cxx:373 src/SearchPage.cxx:406 src/SearchPage.cxx:410
1663
+#: src/SearchPage.cxx:414 src/SearchPage.cxx:473
1664
+msgid "Search"
1665
+msgstr "查找"
1666
 
1667
-#: src/screen_search.cxx:458
1668
+#: src/SearchPage.cxx:436
1669
 #, c-format
1670
 msgid "Search mode: %s"
1671
 msgstr "搜索模式: %s"
1672
 
1673
-#: src/screen_song.cxx:54
1674
+#: src/SongPage.cxx:67
1675
 msgid "Length"
1676
 msgstr "时长"
1677
 
1678
-#: src/screen_song.cxx:55
1679
+#: src/SongPage.cxx:68
1680
 msgid "Position"
1681
 msgstr ""
1682
 
1683
-#: src/screen_song.cxx:56
1684
+#: src/SongPage.cxx:69
1685
 msgid "Composer"
1686
 msgstr "作曲"
1687
 
1688
-#: src/screen_song.cxx:57
1689
+#: src/SongPage.cxx:70
1690
 msgid "Name"
1691
 msgstr "名字"
1692
 
1693
-#: src/screen_song.cxx:58
1694
+#: src/SongPage.cxx:71
1695
 msgid "Disc"
1696
 msgstr "碟片"
1697
 
1698
-#: src/screen_song.cxx:59
1699
+#: src/SongPage.cxx:72
1700
 msgid "Track"
1701
 msgstr "音轨"
1702
 
1703
-#: src/screen_song.cxx:60
1704
+#: src/SongPage.cxx:73
1705
 msgid "Date"
1706
 msgstr "日期"
1707
 
1708
-#: src/screen_song.cxx:61
1709
+#: src/SongPage.cxx:74
1710
 msgid "Genre"
1711
 msgstr "流派"
1712
 
1713
-#: src/screen_song.cxx:62
1714
+#: src/SongPage.cxx:75
1715
 msgid "Comment"
1716
 msgstr "注释"
1717
 
1718
-#: src/screen_song.cxx:63
1719
+#: src/SongPage.cxx:76
1720
 msgid "Path"
1721
 msgstr "路径"
1722
 
1723
-#: src/screen_song.cxx:64
1724
+#: src/SongPage.cxx:77
1725
 msgid "Bitrate"
1726
 msgstr "比特率"
1727
 
1728
-#: src/screen_song.cxx:65
1729
+#: src/SongPage.cxx:78
1730
 msgid "Format"
1731
 msgstr ""
1732
 
1733
-#: src/screen_song.cxx:82
1734
+#: src/SongPage.cxx:95
1735
 msgid "Number of artists"
1736
 msgstr "艺术家总数"
1737
 
1738
-#: src/screen_song.cxx:83
1739
+#: src/SongPage.cxx:96
1740
 msgid "Number of albums"
1741
 msgstr "专辑总数"
1742
 
1743
-#: src/screen_song.cxx:84
1744
+#: src/SongPage.cxx:97
1745
 msgid "Number of songs"
1746
 msgstr "歌曲总数"
1747
 
1748
-#: src/screen_song.cxx:85
1749
+#: src/SongPage.cxx:98
1750
 msgid "Uptime"
1751
 msgstr "启动时间"
1752
 
1753
-#: src/screen_song.cxx:86
1754
+#: src/SongPage.cxx:99
1755
 msgid "Most recent db update"
1756
 msgstr "最新DB更新"
1757
 
1758
-#: src/screen_song.cxx:87
1759
+#: src/SongPage.cxx:100
1760
 msgid "Playtime"
1761
 msgstr "播放时间"
1762
 
1763
-#: src/screen_song.cxx:88
1764
+#: src/SongPage.cxx:101
1765
 msgid "DB playtime"
1766
 msgstr "DB 播放时间"
1767
 
1768
-#: src/screen_song.cxx:173
1769
+#: src/SongPage.cxx:204
1770
 msgid "Song viewer"
1771
 msgstr "歌曲查看器"
1772
 
1773
-#: src/screen_song.cxx:337
1774
+#: src/SongPage.cxx:370
1775
 msgid "MPD statistics"
1776
 msgstr "MPD统计"
1777
 
1778
-#: src/screen_song.cxx:427
1779
+#: src/SongPage.cxx:455
1780
 msgid "Selected song"
1781
 msgstr "选中曲目"
1782
 
1783
-#: src/screen_song.cxx:437
1784
+#: src/SongPage.cxx:465
1785
 msgid "Currently playing song"
1786
 msgstr "当前播放曲目"
1787
 
1788
-#: src/screen_song.cxx:442
1789
+#: src/SongPage.cxx:470
1790
 #, c-format
1791
 msgid "%d kbps"
1792
 msgstr "%d kbps"
1793
 
1794
-#. NOTE: if one day a translator decides to use a multi-byte character
1795
-#. for one of the yes/no keys, we'll have to parse it properly
1796
-#: src/screen_utils.cxx:80
1797
-#, fuzzy, c-format
1798
-msgid "%s [%s/%s] "
1799
-msgstr "替换 %s [%s/%s]? "
1800
-
1801
-#: src/screen_utils.cxx:121
1802
-msgid "Password"
1803
-msgstr "密码"
1804
+#: src/SongPage.cxx:554
1805
+msgid "Song"
1806
+msgstr ""
1807
 
1808
-#: src/status_bar.cxx:121
1809
+#: src/StatusBar.cxx:104
1810
 msgid "Playing:"
1811
 msgstr "播放中"
1812
 
1813
-#: src/status_bar.cxx:124
1814
+#: src/StatusBar.cxx:108
1815
 msgid "[Paused]"
1816
 msgstr "暂停"
1817
 
1818
-#: src/title_bar.cxx:99
1819
+#: src/Styles.cxx:270 src/Styles.cxx:318 src/Styles.cxx:350
1820
+#, fuzzy
1821
+msgid "Unknown color"
1822
+msgstr "未知命令"
1823
+
1824
+#: src/Styles.cxx:333
1825
+#, fuzzy
1826
+msgid "Unknown color field"
1827
+msgstr "警告: 未知的颜色块 - %s\n"
1828
+
1829
+#: src/Styles.cxx:375
1830
+msgid "Terminal lacks color capabilities"
1831
+msgstr "终端不支持彩色"
1832
+
1833
+#: src/time_format.cxx:44
1834
+msgid "year"
1835
+msgstr ""
1836
+
1837
+#: src/time_format.cxx:46
1838
+msgid "years"
1839
+msgstr ""
1840
+
1841
+#: src/time_format.cxx:54
1842
+msgid "week"
1843
+msgstr ""
1844
+
1845
+#: src/time_format.cxx:57
1846
+msgid "weeks"
1847
+msgstr ""
1848
+
1849
+#: src/time_format.cxx:65
1850
+msgid "day"
1851
+msgstr ""
1852
+
1853
+#: src/time_format.cxx:68
1854
+msgid "days"
1855
+msgstr ""
1856
+
1857
+#: src/TitleBar.cxx:100
1858
 msgid "Volume n/a"
1859
 msgstr "音量 n/a"
1860
 
1861
-#: src/title_bar.cxx:101
1862
+#: src/TitleBar.cxx:102
1863
 #, c-format
1864
 msgid "Volume %d%%"
1865
 msgstr "音量 %d%%"
1866
 
1867
+#, fuzzy
1868
+#~ msgid "Add url/file to queue"
1869
+#~ msgstr "添加链接/路径到播放列表"
1870
+
1871
+#~ msgid "Move song up"
1872
+#~ msgstr "上移"
1873
+
1874
+#~ msgid "Move song down"
1875
+#~ msgstr "下移"
1876
+
1877
+#~ msgid "Press %s for a new search"
1878
+#~ msgstr "按 %s 开始新的搜索"
1879
+
1880
+#~ msgid "Search: %s"
1881
+#~ msgstr "查找: %s"
1882
+
1883
+#~ msgid "Search: Results for %s [%s]"
1884
+#~ msgstr "查找: %s [%s] 的结果"
1885
+
1886
+#~ msgid "Search: Press %s for a new search [%s]"
1887
+#~ msgstr "查找: 按 %s 开始新的搜索 [%s]"
1888
+
1889
+#~ msgid "Connecting to %s...  [Press %s to abort]"
1890
+#~ msgstr "连接到 %s... [按 %s 键取消]"
1891
+
1892
+#~ msgid "press %s for the key editor"
1893
+#~ msgstr "按 %s 编辑快捷键"
1894
+
1895
+#~ msgid "Album: %s - %s"
1896
+#~ msgstr "专辑: %s - %s"
1897
+
1898
+#~ msgid "Adding album %s..."
1899
+#~ msgstr "添加专辑 %s..."
1900
+
1901
+#~ msgid "Adding %s..."
1902
+#~ msgstr "添加 %s..."
1903
+
1904
+#~ msgid "Error: Screen too small"
1905
+#~ msgstr "错误: 屏幕太小"
1906
+
1907
+#~ msgid "Error: Unable to create directory ~/.ncmpc - %s"
1908
+#~ msgstr "错误: 无法创建文件夹 ~/.ncmpc - %s"
1909
+
1910
+#~ msgid "Error: %s - %s"
1911
+#~ msgstr "错误 %s - %s"
1912
+
1913
+#, fuzzy
1914
+#~ msgid "%s [%s/%s] "
1915
+#~ msgstr "替换 %s [%s/%s]? "
1916
+
1917
 #~ msgid "Delete playlist %s [%s/%s] ? "
1918
 #~ msgstr "确定要删除列表 %s[%s/%s] ? "
1919
 
1920
 #~ msgid "Warning: Unknown color - %s\n"
1921
 #~ msgstr "警告: 未知的颜色 -  %s\n"
1922
 
1923
-#~ msgid "Connected to %s"
1924
-#~ msgstr "连接到 %s"
1925
-
1926
 #~ msgid "Shuffled playlist"
1927
 #~ msgstr "乱序播放列表"
1928
 
1929
ncmpc-0.30.tar.xz/src/AlbumListPage.cxx -> ncmpc-0.32.tar.xz/src/AlbumListPage.cxx Changed
165
 
1
@@ -18,16 +18,14 @@
2
  */
3
 
4
 #include "AlbumListPage.hxx"
5
-#include "screen_interface.hxx"
6
 #include "screen_status.hxx"
7
 #include "screen_find.hxx"
8
 #include "FileListPage.hxx"
9
-#include "screen.hxx"
10
+#include "Command.hxx"
11
 #include "i18n.h"
12
 #include "charset.hxx"
13
 #include "mpdclient.hxx"
14
-
15
-#include <glib.h>
16
+#include "util/StringUTF8.hxx"
17
 
18
 #include <algorithm>
19
 
20
@@ -40,17 +38,12 @@
21
 static bool
22
 CompareUTF8(const std::string &a, const std::string &b)
23
 {
24
-   char *key1 = g_utf8_collate_key(a.c_str(), -1);
25
-   char *key2 = g_utf8_collate_key(b.c_str(), -1);
26
-   int n = strcmp(key1,key2);
27
-   g_free(key1);
28
-   g_free(key2);
29
-   return n < 0;
30
+   return CollateUTF8(a.c_str(), b.c_str()) < 0;
31
 }
32
 
33
 const char *
34
 AlbumListPage::GetListItemText(char *buffer, size_t size,
35
-                  unsigned idx) const
36
+                  unsigned idx) const noexcept
37
 {
38
    if (idx == 0)
39
        return "..";
40
@@ -61,10 +54,7 @@
41
 
42
    assert(idx < album_list.size());
43
 
44
-   const char *str_utf8 = album_list[idx].c_str();
45
-
46
-   g_strlcpy(buffer, Utf8ToLocale(str_utf8).c_str(), size);
47
-   return buffer;
48
+   return utf8_to_locale(album_list[idx].c_str(), buffer, size);
49
 }
50
 
51
 static void
52
@@ -119,30 +109,26 @@
53
 void
54
 AlbumListPage::PaintListItem(WINDOW *w, unsigned i,
55
                 gcc_unused unsigned y, unsigned width,
56
-                bool selected) const
57
+                bool selected) const noexcept
58
 {
59
-   const char *p;
60
-   char *q = nullptr;
61
-
62
    if (i == 0)
63
-       p = "..";
64
+       screen_browser_paint_directory(w, width, selected, "..");
65
    else if (i == album_list.size() + 1)
66
-       p = _("All tracks");
67
+       screen_browser_paint_directory(w, width, selected,
68
+                          _("All tracks"));
69
    else
70
-       p = q = utf8_to_locale(album_list[i - 1].c_str());
71
-
72
-   screen_browser_paint_directory(w, width, selected, p);
73
-   g_free(q);
74
+       screen_browser_paint_directory(w, width, selected,
75
+                          Utf8ToLocale(album_list[i - 1].c_str()).c_str());
76
 }
77
 
78
 void
79
-AlbumListPage::Paint() const
80
+AlbumListPage::Paint() const noexcept
81
 {
82
    lw.Paint(*this);
83
 }
84
 
85
 const char *
86
-AlbumListPage::GetTitle(char *str, size_t size) const
87
+AlbumListPage::GetTitle(char *str, size_t size) const noexcept
88
 {
89
    if (artist.empty())
90
        return _("Albums");
91
@@ -153,7 +139,7 @@
92
 }
93
 
94
 void
95
-AlbumListPage::Update(struct mpdclient &c, unsigned events)
96
+AlbumListPage::Update(struct mpdclient &c, unsigned events) noexcept
97
 {
98
    if (events & MPD_IDLE_DATABASE) {
99
        /* the db has changed -> update the list */
100
@@ -189,22 +175,20 @@
101
 }
102
 
103
 bool
104
-AlbumListPage::OnCommand(struct mpdclient &c, command_t cmd)
105
+AlbumListPage::OnCommand(struct mpdclient &c, Command cmd)
106
 {
107
    switch(cmd) {
108
        const char *selected;
109
 
110
-   case CMD_PLAY:
111
-       if (lw.selected == 0) {
112
+   case Command::PLAY:
113
+       if (lw.selected == 0 && parent != nullptr)
114
            /* handle ".." */
115
-           screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY);
116
-           return true;
117
-       }
118
+           return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY);
119
 
120
        break;
121
 
122
-   case CMD_SELECT:
123
-   case CMD_ADD:
124
+   case Command::SELECT:
125
+   case Command::ADD:
126
        for (const unsigned i : lw.GetRange()) {
127
            if(i == album_list.size() + 1)
128
                add_query(&c, MPD_TAG_ARTIST, artist.c_str(),
129
@@ -213,26 +197,26 @@
130
                selected = album_list[lw.selected - 1].c_str();
131
                add_query(&c, MPD_TAG_ALBUM, selected,
132
                      artist.c_str());
133
-               cmd = CMD_LIST_NEXT; /* continue and select next item... */
134
+               cmd = Command::LIST_NEXT; /* continue and select next item... */
135
            }
136
        }
137
        break;
138
 
139
        /* continue and update... */
140
-   case CMD_SCREEN_UPDATE:
141
+   case Command::SCREEN_UPDATE:
142
        Reload(c);
143
        return false;
144
 
145
-   case CMD_LIST_FIND:
146
-   case CMD_LIST_RFIND:
147
-   case CMD_LIST_FIND_NEXT:
148
-   case CMD_LIST_RFIND_NEXT:
149
-       screen_find(screen, &lw, cmd, *this);
150
+   case Command::LIST_FIND:
151
+   case Command::LIST_RFIND:
152
+   case Command::LIST_FIND_NEXT:
153
+   case Command::LIST_RFIND_NEXT:
154
+       screen_find(screen, lw, cmd, *this);
155
        SetDirty();
156
        return true;
157
 
158
-   case CMD_LIST_JUMP:
159
-       screen_jump(screen, &lw, *this, *this);
160
+   case Command::LIST_JUMP:
161
+       screen_jump(screen, lw, *this, *this);
162
        SetDirty();
163
        return true;
164
 
165
ncmpc-0.30.tar.xz/src/AlbumListPage.hxx -> ncmpc-0.32.tar.xz/src/AlbumListPage.hxx Changed
43
 
1
@@ -31,12 +31,14 @@
2
 
3
 class AlbumListPage final : public ListPage, ListRenderer, ListText {
4
    ScreenManager &screen;
5
+   Page *const parent;
6
    std::vector<std::string> album_list;
7
    std::string artist;
8
 
9
 public:
10
-   AlbumListPage(ScreenManager &_screen, WINDOW *_w, Size size)
11
-       :ListPage(_w, size), screen(_screen) {}
12
+   AlbumListPage(ScreenManager &_screen, Page *_parent,
13
+             WINDOW *_w, Size size) noexcept
14
+       :ListPage(_w, size), screen(_screen), parent(_parent) {}
15
 
16
    template<typename A>
17
    void SetArtist(A &&_artist) {
18
@@ -64,18 +66,18 @@
19
 
20
 public:
21
    /* virtual methods from class Page */
22
-   void Paint() const override;
23
-   void Update(struct mpdclient &c, unsigned events) override;
24
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
25
-   const char *GetTitle(char *s, size_t size) const override;
26
+   void Paint() const noexcept override;
27
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
28
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
29
+   const char *GetTitle(char *s, size_t size) const noexcept override;
30
 
31
    /* virtual methods from class ListRenderer */
32
    void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width,
33
-              bool selected) const override;
34
+              bool selected) const noexcept override;
35
 
36
    /* virtual methods from class ListText */
37
    const char *GetListItemText(char *buffer, size_t size,
38
-                   unsigned i) const override;
39
+                   unsigned i) const noexcept override;
40
 };
41
 
42
 #endif
43
ncmpc-0.30.tar.xz/src/ArtistListPage.cxx -> ncmpc-0.32.tar.xz/src/ArtistListPage.cxx Changed
142
 
1
@@ -18,18 +18,17 @@
2
  */
3
 
4
 #include "ArtistListPage.hxx"
5
-#include "screen_interface.hxx"
6
 #include "screen_status.hxx"
7
 #include "screen_find.hxx"
8
 #include "FileListPage.hxx"
9
+#include "Command.hxx"
10
 #include "i18n.h"
11
 #include "charset.hxx"
12
 #include "mpdclient.hxx"
13
+#include "util/StringUTF8.hxx"
14
 
15
 #include <algorithm>
16
 
17
-#include <glib.h>
18
-
19
 #include <assert.h>
20
 #include <string.h>
21
 
22
@@ -39,24 +38,16 @@
23
 static bool
24
 CompareUTF8(const std::string &a, const std::string &b)
25
 {
26
-   char *key1 = g_utf8_collate_key(a.c_str(), -1);
27
-   char *key2 = g_utf8_collate_key(b.c_str(), -1);
28
-   int n = strcmp(key1,key2);
29
-   g_free(key1);
30
-   g_free(key2);
31
-   return n < 0;
32
+   return CollateUTF8(a.c_str(), b.c_str()) < 0;
33
 }
34
 
35
 const char *
36
 ArtistListPage::GetListItemText(char *buffer, size_t size,
37
-               unsigned idx) const
38
+               unsigned idx) const noexcept
39
 {
40
    assert(idx < artist_list.size());
41
 
42
-   const char *str_utf8 = artist_list[idx].c_str();
43
-
44
-   g_strlcpy(buffer, Utf8ToLocale(str_utf8).c_str(), size);
45
-   return buffer;
46
+   return utf8_to_locale(artist_list[idx].c_str(), buffer, size);
47
 }
48
 
49
 static void
50
@@ -100,26 +91,26 @@
51
 void
52
 ArtistListPage::PaintListItem(WINDOW *w, unsigned i,
53
                  gcc_unused unsigned y, unsigned width,
54
-                 bool selected) const
55
+                 bool selected) const noexcept
56
 {
57
    screen_browser_paint_directory(w, width, selected,
58
                       Utf8ToLocale(artist_list[i].c_str()).c_str());
59
 }
60
 
61
 void
62
-ArtistListPage::Paint() const
63
+ArtistListPage::Paint() const noexcept
64
 {
65
    lw.Paint(*this);
66
 }
67
 
68
 const char *
69
-ArtistListPage::GetTitle(char *, size_t) const
70
+ArtistListPage::GetTitle(char *, size_t) const noexcept
71
 {
72
    return _("All artists");
73
 }
74
 
75
 void
76
-ArtistListPage::Update(struct mpdclient &c, unsigned events)
77
+ArtistListPage::Update(struct mpdclient &c, unsigned events) noexcept
78
 {
79
    if (events & MPD_IDLE_DATABASE) {
80
        /* the db has changed -> update the list */
81
@@ -149,7 +140,7 @@
82
 }
83
 
84
 inline bool
85
-ArtistListPage::OnListCommand(command_t cmd)
86
+ArtistListPage::OnListCommand(Command cmd)
87
 {
88
    if (lw.HandleCommand(cmd)) {
89
        SetDirty();
90
@@ -160,39 +151,39 @@
91
 }
92
 
93
 bool
94
-ArtistListPage::OnCommand(struct mpdclient &c, command_t cmd)
95
+ArtistListPage::OnCommand(struct mpdclient &c, Command cmd)
96
 {
97
    switch(cmd) {
98
        const char *selected;
99
 
100
-   case CMD_SELECT:
101
-   case CMD_ADD:
102
+   case Command::SELECT:
103
+   case Command::ADD:
104
        if (lw.selected >= artist_list.size())
105
            return true;
106
 
107
        for (const unsigned i : lw.GetRange()) {
108
            selected = artist_list[i].c_str();
109
            add_query(&c, MPD_TAG_ARTIST, selected);
110
-           cmd = CMD_LIST_NEXT; /* continue and select next item... */
111
+           cmd = Command::LIST_NEXT; /* continue and select next item... */
112
        }
113
 
114
        break;
115
 
116
        /* continue and update... */
117
-   case CMD_SCREEN_UPDATE:
118
+   case Command::SCREEN_UPDATE:
119
        Reload(c);
120
        return false;
121
 
122
-   case CMD_LIST_FIND:
123
-   case CMD_LIST_RFIND:
124
-   case CMD_LIST_FIND_NEXT:
125
-   case CMD_LIST_RFIND_NEXT:
126
-       screen_find(screen, &lw, cmd, *this);
127
+   case Command::LIST_FIND:
128
+   case Command::LIST_RFIND:
129
+   case Command::LIST_FIND_NEXT:
130
+   case Command::LIST_RFIND_NEXT:
131
+       screen_find(screen, lw, cmd, *this);
132
        SetDirty();
133
        return true;
134
 
135
-   case CMD_LIST_JUMP:
136
-       screen_jump(screen, &lw, *this, *this);
137
+   case Command::LIST_JUMP:
138
+       screen_jump(screen, lw, *this, *this);
139
        SetDirty();
140
        return true;
141
 
142
ncmpc-0.30.tar.xz/src/ArtistListPage.hxx -> ncmpc-0.32.tar.xz/src/ArtistListPage.hxx Changed
31
 
1
@@ -47,22 +47,22 @@
2
    void LoadArtistList(struct mpdclient &c);
3
    void Reload(struct mpdclient &c);
4
 
5
-   bool OnListCommand(command_t cmd);
6
+   bool OnListCommand(Command cmd);
7
 
8
 public:
9
    /* virtual methods from class Page */
10
-   void Paint() const override;
11
-   void Update(struct mpdclient &c, unsigned events) override;
12
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
13
-   const char *GetTitle(char *s, size_t size) const override;
14
+   void Paint() const noexcept override;
15
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
16
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
17
+   const char *GetTitle(char *s, size_t size) const noexcept override;
18
 
19
    /* virtual methods from class ListRenderer */
20
    void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width,
21
-              bool selected) const override;
22
+              bool selected) const noexcept override;
23
 
24
    /* virtual methods from class ListText */
25
    const char *GetListItemText(char *buffer, size_t size,
26
-                   unsigned i) const override;
27
+                   unsigned i) const noexcept override;
28
 };
29
 
30
 #endif
31
ncmpc-0.32.tar.xz/src/AsioServiceFwd.hxx Added
44
 
1
@@ -0,0 +1,42 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef NCMPC_ASIO_SERVICE_FWD_HXX
22
+#define NCMPC_ASIO_SERVICE_FWD_HXX
23
+
24
+/* This header provides a forward declaration for
25
+   boost::asio::io_service */
26
+
27
+#include <boost/version.hpp>
28
+
29
+#if BOOST_VERSION >= 106600
30
+
31
+/* in Boost 1.66, the API has changed for "Networking TS
32
+   compatibility"; the forward declaration above doesn't work because
33
+   boost::asio::io_service is a deprecated typedef to
34
+   boost::asio::io_context; eventually, we'll switch to the new API,
35
+   but this would require dropping support for older Boost versions */
36
+
37
+#include <boost/asio/io_service.hpp>
38
+
39
+#else
40
+namespace boost { namespace asio { class io_service; }}
41
+#endif
42
+
43
+#endif
44
ncmpc-0.32.tar.xz/src/BasicColors.cxx Added
73
 
1
@@ -0,0 +1,71 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "BasicColors.hxx"
22
+
23
+#include <curses.h>
24
+
25
+#include <string.h>
26
+#include <stdlib.h>
27
+
28
+static constexpr const char *basic_color_names[] = {
29
+   "black",
30
+   "red",
31
+   "green",
32
+   "yellow",
33
+   "blue",
34
+   "magenta",
35
+   "cyan",
36
+   "white",
37
+   nullptr
38
+};
39
+
40
+static_assert(COLOR_BLACK == 0, "Unexpected color value");
41
+static_assert(COLOR_RED == 1, "Unexpected color value");
42
+static_assert(COLOR_GREEN == 2, "Unexpected color value");
43
+static_assert(COLOR_YELLOW == 3, "Unexpected color value");
44
+static_assert(COLOR_BLUE == 4, "Unexpected color value");
45
+static_assert(COLOR_MAGENTA == 5, "Unexpected color value");
46
+static_assert(COLOR_CYAN == 6, "Unexpected color value");
47
+static_assert(COLOR_WHITE == 7, "Unexpected color value");
48
+
49
+short
50
+ParseBasicColorName(const char *name)
51
+{
52
+   for (size_t i = 0; basic_color_names[i] != nullptr; ++i)
53
+       if (strcasecmp(basic_color_names[i], name) == 0)
54
+           return i;
55
+
56
+   return -1;
57
+}
58
+
59
+short
60
+ParseColorNameOrNumber(const char *s)
61
+{
62
+   short basic = ParseBasicColorName(s);
63
+   if (basic >= 0)
64
+       return basic;
65
+
66
+   char *endptr;
67
+   long numeric = strtol(s, &endptr, 10);
68
+   if (endptr > s && *endptr == 0 && numeric >= 0 && numeric <= 0xff)
69
+       return numeric;
70
+
71
+   return -1;
72
+}
73
ncmpc-0.32.tar.xz/src/BasicColors.hxx Added
45
 
1
@@ -0,0 +1,43 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef BASIC_COLORS_HXX
22
+#define BASIC_COLORS_HXX
23
+
24
+#include "util/Compiler.h"
25
+
26
+/**
27
+ * Parse an ncurses color name.
28
+ *
29
+ * @return the COLOR_* integer value or -1 on error
30
+ */
31
+gcc_pure
32
+short
33
+ParseBasicColorName(const char *name);
34
+
35
+/**
36
+ * Like ParseBasicColorName(), but also allow numeric colors.
37
+ *
38
+ * @return the color integer value or -1 on error
39
+ */
40
+gcc_pure
41
+short
42
+ParseColorNameOrNumber(const char *s);
43
+
44
+#endif
45
ncmpc-0.30.tar.xz/src/BasicMarquee.cxx -> ncmpc-0.32.tar.xz/src/BasicMarquee.cxx Changed
80
 
1
@@ -18,63 +18,50 @@
2
  */
3
 
4
 #include "BasicMarquee.hxx"
5
-#include "charset.hxx"
6
-
7
-#include <glib.h>
8
+#include "util/LocaleString.hxx"
9
 
10
 #include <algorithm>
11
 
12
 #include <assert.h>
13
 #include <string.h>
14
 
15
-char *
16
-BasicMarquee::ScrollString() const
17
+std::pair<const char *, size_t>
18
+BasicMarquee::ScrollString() const noexcept
19
 {
20
-   assert(text != nullptr);
21
    assert(separator != nullptr);
22
 
23
-   /* create the new scrolled string */
24
-   char *tmp = g_strdup(g_utf8_offset_to_pointer(text_utf8, offset));
25
-   utf8_cut_width(tmp, width);
26
-
27
-   /* convert back to locale */
28
-   char *result = utf8_to_locale(tmp);
29
-   g_free(tmp);
30
-   return result;
31
+   const char *p = AtCharMB(buffer.data(), buffer.length(), offset);
32
+   const char *end = AtWidthMB(p, strlen(p), width);
33
+   return std::make_pair(p, size_t(end - p));
34
 }
35
 
36
 bool
37
-BasicMarquee::Set(unsigned _width, const char *_text)
38
+BasicMarquee::Set(unsigned _width, const char *_text) noexcept
39
 {
40
    assert(separator != nullptr);
41
    assert(_text != nullptr);
42
 
43
-   if (text != nullptr && _width == width && strcmp(_text, text) == 0)
44
+   if (_width == width && text == _text)
45
        /* no change, do nothing (and, most importantly, do
46
           not reset the current offset!) */
47
        return false;
48
 
49
-   Clear();
50
-
51
    width = _width;
52
    offset = 0;
53
 
54
-   text = g_strdup(_text);
55
+   text = _text;
56
 
57
    /* create a buffer containing the string and the separator */
58
-   text_utf8 = replace_locale_to_utf8(g_strconcat(text, separator,
59
-                              text, separator,
60
-                              nullptr));
61
-   text_utf8_length = g_utf8_strlen(text_utf8, -1);
62
+   buffer = text + separator + text + separator;
63
+   max_offset = StringLengthMB(buffer.data(), buffer.length() / 2);
64
 
65
    return true;
66
 }
67
 
68
 void
69
-BasicMarquee::Clear()
70
+BasicMarquee::Clear() noexcept
71
 {
72
-   g_free(text);
73
-   text = nullptr;
74
-
75
-   g_free(std::exchange(text_utf8, nullptr));
76
+   width = 0;
77
+   text.clear();
78
+   buffer.clear();
79
 }
80
ncmpc-0.30.tar.xz/src/BasicMarquee.hxx -> ncmpc-0.32.tar.xz/src/BasicMarquee.hxx Changed
94
 
1
@@ -20,6 +20,10 @@
2
 #ifndef BASIC_MARQUEE_HXX
3
 #define BASIC_MARQUEE_HXX
4
 
5
+#include "util/Compiler.h"
6
+
7
+#include <string>
8
+
9
 /**
10
  * This class is used to auto-scroll text which does not fit on the
11
  * screen.  Call hscroll_init() to initialize the object,
12
@@ -30,24 +34,24 @@
13
    const char *const separator;
14
 
15
    /**
16
-    * The available screen width (in cells).
17
+    * The scrolled text, in the current locale.
18
     */
19
-   unsigned width;
20
+   std::string text;
21
 
22
    /**
23
-    * The text length in Unicode characters.
24
+    * A buffer containing the text plus the separator twice.
25
     */
26
-   unsigned text_utf8_length;
27
+   std::string buffer;
28
 
29
    /**
30
-    * The scrolled text, in the current locale.
31
+    * The text plus separator length in characters.
32
     */
33
-   char *text = nullptr;
34
+   size_t max_offset;
35
 
36
    /**
37
-    * Thee scrolled text, in UTF-8, including separators.
38
+    * The available screen width (in cells).
39
     */
40
-   char *text_utf8 = nullptr;
41
+   unsigned width = 0;
42
 
43
    /**
44
     * The current scrolling offset.  This is a character
45
@@ -56,37 +60,39 @@
46
    unsigned offset;
47
 
48
 public:
49
-   BasicMarquee(const char *_separator)
50
+   BasicMarquee(const char *_separator) noexcept
51
        :separator(_separator) {}
52
 
53
-   bool IsDefined() const {
54
-       return text != nullptr;
55
+   bool IsDefined() const noexcept {
56
+       return width > 0;
57
    }
58
 
59
    /**
60
     * Sets a text to scroll.  Call Clear() to disable it.
61
     *
62
+    * @param text the text in the locale charset
63
     * @return false if nothing was changed
64
     */
65
-   bool Set(unsigned width, const char *text);
66
+   bool Set(unsigned width, const char *text) noexcept;
67
 
68
    /**
69
     * Removes the text.  It may be reused with Set().
70
     */
71
-   void Clear();
72
+   void Clear() noexcept;
73
 
74
-   void Rewind() {
75
+   void Rewind() noexcept {
76
        offset = 0;
77
    }
78
 
79
-   void Step() {
80
+   void Step() noexcept {
81
        ++offset;
82
 
83
-       if (offset >= text_utf8_length / 2)
84
+       if (offset >= max_offset)
85
            offset = 0;
86
    }
87
 
88
-   char *ScrollString() const;
89
+   gcc_pure
90
+   std::pair<const char *, size_t> ScrollString() const noexcept;
91
 };
92
 
93
 #endif
94
ncmpc-0.32.tar.xz/src/Bindings.cxx Added
153
 
1
@@ -0,0 +1,151 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Bindings.hxx"
22
+#include "Command.hxx"
23
+#include "KeyName.hxx"
24
+#include "i18n.h"
25
+#include "util/CharUtil.hxx"
26
+
27
+#include <assert.h>
28
+#include <stdio.h>
29
+
30
+const char *
31
+KeyBindings::GetFirstKeyName(Command command) const noexcept
32
+{
33
+   const auto &b = key_bindings[size_t(command)];
34
+   return b.keys.front() != 0
35
+       ? key2str(b.keys[0])
36
+       : nullptr;
37
+}
38
+
39
+std::string
40
+KeyBindings::GetKeyNames(Command command) const noexcept
41
+{
42
+   const auto &b = key_bindings[size_t(command)];
43
+
44
+   std::string s = key2str(b.keys[0]);
45
+
46
+   for (size_t i = 1; i < b.keys.size() && b.keys[i] != 0; ++i) {
47
+       s.push_back(' ');
48
+       s.append(key2str(b.keys[i]));
49
+   }
50
+   return s;
51
+}
52
+
53
+Command
54
+KeyBindings::FindKey(int key) const
55
+{
56
+   assert(key != 0);
57
+
58
+   for (size_t i = 0; i < size_t(Command::NONE); ++i) {
59
+       if (key_bindings[i].HasKey(key))
60
+           return Command(i);
61
+   }
62
+
63
+   return Command::NONE;
64
+}
65
+
66
+#ifndef NCMPC_MINI
67
+
68
+bool
69
+KeyBindings::Check(char *buf, size_t bufsize) const
70
+{
71
+   bool success = true;
72
+
73
+   for (size_t i = 0; i < size_t(Command::NONE); ++i) {
74
+       for (const auto key : key_bindings[i].keys) {
75
+           if (key == 0)
76
+               break;
77
+
78
+           Command cmd;
79
+           if ((cmd = FindKey(key)) != Command(i)) {
80
+               if (buf) {
81
+                   snprintf(buf, bufsize,
82
+                        _("Key %s assigned to %s and %s"),
83
+                        key2str(key),
84
+                        get_key_command_name(Command(i)),
85
+                        get_key_command_name(cmd));
86
+               } else {
87
+                   fprintf(stderr,
88
+                       _("Key %s assigned to %s and %s"),
89
+                       key2str(key),
90
+                       get_key_command_name(Command(i)),
91
+                       get_key_command_name(cmd));
92
+                   fputc('\n', stderr);
93
+               }
94
+               success = false;
95
+           }
96
+       }
97
+   }
98
+
99
+   return success;
100
+}
101
+
102
+void
103
+KeyBinding::WriteToFile(FILE *f, const command_definition_t &cmd,
104
+           bool comment) const
105
+{
106
+   fprintf(f, "## %s\n", cmd.description);
107
+   if (comment)
108
+       fprintf(f, "#");
109
+   fprintf(f, "key %s = ", cmd.name);
110
+
111
+   if (keys.front() == 0) {
112
+       fputs("0\n\n", f);
113
+       return;
114
+   }
115
+
116
+   bool first = true;
117
+   for (const auto key : keys) {
118
+       if (key == 0)
119
+           break;
120
+
121
+       if (first)
122
+           first = false;
123
+       else
124
+           fprintf(f, ",  ");
125
+
126
+       if (key < 256 && IsAlphaNumericASCII(key))
127
+           fprintf(f, "\'%c\'", key);
128
+       else
129
+           fprintf(f, "%d", key);
130
+   }
131
+   fprintf(f,"\n\n");
132
+}
133
+
134
+bool
135
+KeyBindings::WriteToFile(FILE *f, int flags) const
136
+{
137
+   const auto *cmds = get_command_definitions();
138
+
139
+   if (flags & KEYDEF_WRITE_HEADER)
140
+       fprintf(f, "## Key bindings for ncmpc (generated by ncmpc)\n\n");
141
+
142
+   for (size_t i = 0; i < size_t(Command::NONE) && !ferror(f); ++i) {
143
+       if (key_bindings[i].modified || flags & KEYDEF_WRITE_ALL) {
144
+           key_bindings[i].WriteToFile(f, cmds[i],
145
+                           flags & KEYDEF_COMMENT_ALL);
146
+       }
147
+   }
148
+
149
+   return ferror(f) == 0;
150
+}
151
+
152
+#endif /* NCMPC_MINI */
153
ncmpc-0.32.tar.xz/src/Bindings.hxx Added
115
 
1
@@ -0,0 +1,113 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef BINDINGS_HXX
22
+#define BINDINGS_HXX
23
+
24
+#include "config.h"
25
+#include "Command.hxx"
26
+#include "util/Compiler.h"
27
+
28
+#include <array>
29
+#include <algorithm>
30
+#include <string>
31
+
32
+#include <stddef.h>
33
+
34
+#ifndef NCMPC_MINI
35
+#include <stdio.h>
36
+#endif
37
+
38
+#define MAX_COMMAND_KEYS 3
39
+
40
+struct KeyBinding {
41
+   std::array<int, MAX_COMMAND_KEYS> keys;
42
+
43
+#ifndef NCMPC_MINI
44
+   bool modified = false;
45
+#endif
46
+
47
+   constexpr KeyBinding(int a, int b=0, int c=0) noexcept
48
+       :keys{{a, b, c}} {}
49
+
50
+   gcc_pure
51
+   bool HasKey(int key) const {
52
+       return std::find(keys.begin(), keys.end(), key) != keys.end();
53
+   }
54
+
55
+   gcc_pure
56
+   size_t GetKeyCount() const {
57
+       return std::distance(keys.begin(),
58
+                    std::find(keys.begin(), keys.end(), 0));
59
+   }
60
+
61
+   void SetKey(const std::array<int, MAX_COMMAND_KEYS> &_keys) {
62
+       keys = _keys;
63
+#ifndef NCMPC_MINI
64
+       modified = true;
65
+#endif
66
+   }
67
+
68
+#ifndef NCMPC_MINI
69
+   void WriteToFile(FILE *f, const command_definition_t &cmd,
70
+            bool comment) const;
71
+#endif
72
+};
73
+
74
+struct KeyBindings {
75
+   std::array<KeyBinding, size_t(Command::NONE)> key_bindings;
76
+
77
+   gcc_pure
78
+   Command FindKey(int key) const;
79
+
80
+   /**
81
+    * Returns the name of the first key bound to the given
82
+    * command, or nullptr if there is no key binding.
83
+    */
84
+   gcc_pure
85
+   const char *GetFirstKeyName(Command command) const noexcept;
86
+
87
+   gcc_pure
88
+   std::string GetKeyNames(Command command) const noexcept;
89
+
90
+   void SetKey(Command command,
91
+           const std::array<int, MAX_COMMAND_KEYS> &keys) {
92
+       auto &b = key_bindings[size_t(command)];
93
+       b.SetKey(keys);
94
+   }
95
+
96
+#ifndef NCMPC_MINI
97
+   /**
98
+    * @return true on success, false on error
99
+    */
100
+   bool Check(char *buf, size_t size) const;
101
+
102
+   /**
103
+    * @return true on success, false on error
104
+    */
105
+   bool WriteToFile(FILE *f, int all) const;
106
+#endif
107
+};
108
+
109
+/* write key bindings flags */
110
+#define KEYDEF_WRITE_HEADER  0x01
111
+#define KEYDEF_WRITE_ALL     0x02
112
+#define KEYDEF_COMMENT_ALL   0x04
113
+
114
+#endif
115
ncmpc-0.30.tar.xz/src/ChatPage.cxx -> ncmpc-0.32.tar.xz/src/ChatPage.cxx Changed
185
 
1
@@ -18,20 +18,19 @@
2
  */
3
 
4
 #include "ChatPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen_utils.hxx"
8
 #include "screen_status.hxx"
9
 #include "TextPage.hxx"
10
 #include "mpdclient.hxx"
11
 #include "i18n.h"
12
 #include "charset.hxx"
13
-#include "options.hxx"
14
+#include "Options.hxx"
15
 
16
 #include <mpd/idle.h>
17
 
18
-#include <glib.h>
19
-
20
 #include <string.h>
21
+#include <stdlib.h>
22
 
23
 static constexpr char chat_channel[] = "chat";
24
 
25
@@ -39,6 +38,8 @@
26
    unsigned last_connection_id = 0;
27
    bool was_supported = false;
28
 
29
+   std::string prefix;
30
+
31
 public:
32
    ChatPage(ScreenManager &_screen, WINDOW *w, Size size)
33
        :TextPage(_screen, w, size) {}
34
@@ -48,12 +49,17 @@
35
 
36
    void ProcessMessage(const struct mpd_message &message);
37
 
38
+   gcc_pure
39
+   const std::string &GetPrefix() noexcept;
40
+
41
+   void SendMessage(struct mpdclient &c, const char *msg) noexcept;
42
+
43
 public:
44
    /* virtual methods from class Page */
45
-   void Update(struct mpdclient &c, unsigned events) override;
46
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
47
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
48
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
49
 
50
-   const char *GetTitle(char *, size_t) const override {
51
+   const char *GetTitle(char *, size_t) const noexcept override {
52
        return _("Chat");
53
    }
54
 };
55
@@ -69,22 +75,6 @@
56
 
57
    last_connection_id = c.connection_id;
58
 
59
-   if (c.connection == nullptr)
60
-       return (was_supported = false);
61
-
62
-   if (mpd_connection_cmp_server_version(c.connection, 0, 17, 0) == -1) {
63
-       const unsigned *version = mpd_connection_get_server_version(c.connection);
64
-
65
-       char message[256];
66
-       snprintf(message, sizeof(message),
67
-            _("connected to MPD %u.%u.%u (you need at least \n"
68
-              "version 0.17.0 to use the chat feature)"),
69
-            version[0], version[1], version[2]);
70
-       Append(message);
71
-
72
-       return (was_supported = false);
73
-   }
74
-
75
    /* mpdclient_get_connection? */
76
    if (!mpdclient_cmd_subscribe(&c, chat_channel))
77
        return (was_supported = false);
78
@@ -93,10 +83,10 @@
79
    return (was_supported = true);
80
 }
81
 
82
-static Page *
83
+static std::unique_ptr<Page>
84
 screen_chat_init(ScreenManager &screen, WINDOW *w, Size size)
85
 {
86
-   return new ChatPage(screen, w, size);
87
+   return std::make_unique<ChatPage>(screen, w, size);
88
 }
89
 
90
 void
91
@@ -106,13 +96,13 @@
92
       client-to-client messages anywhere else */
93
    assert(strcmp(mpd_message_get_channel(&message), chat_channel) == 0);
94
 
95
-   Append(Utf8ToLocale(mpd_message_get_text(&message)).c_str());
96
+   Append(mpd_message_get_text(&message));
97
 
98
    SetDirty();
99
 }
100
 
101
 void
102
-ChatPage::Update(struct mpdclient &c, unsigned events)
103
+ChatPage::Update(struct mpdclient &c, unsigned events) noexcept
104
 {
105
    if (CheckChatSupport(c) && (events & MPD_IDLE_MESSAGE)) {
106
        auto *connection = c.GetConnection();
107
@@ -134,42 +124,41 @@
108
    }
109
 }
110
 
111
-static char *
112
-screen_chat_get_prefix()
113
+const std::string &
114
+ChatPage::GetPrefix() noexcept
115
 {
116
-   static char *prefix = nullptr;
117
-
118
-   if (prefix)
119
+   if (!prefix.empty())
120
        return prefix;
121
 
122
    if (!options.chat_prefix.empty()) {
123
        /* Options are encoded in the "locale" charset */
124
-       prefix = locale_to_utf8(options.chat_prefix.c_str());
125
+       prefix = LocaleToUtf8(options.chat_prefix.c_str()).c_str();
126
        return prefix;
127
    }
128
 
129
-   prefix = g_strconcat("<", g_get_user_name(), "> ", nullptr);
130
+   const char *user = getenv("USER");
131
+   if (user == nullptr)
132
+       user = "nobody";
133
+
134
+   prefix = std::string("<") + user + "> ";
135
    return prefix;
136
 }
137
 
138
-static void
139
-screen_chat_send_message(struct mpdclient *c, const char *msg)
140
+void
141
+ChatPage::SendMessage(struct mpdclient &c, const char *msg) noexcept
142
 {
143
-   char *prefix = screen_chat_get_prefix();
144
-   char *full_msg = g_strconcat(prefix, LocaleToUtf8(msg).c_str(),
145
-                    nullptr);
146
+   const std::string full_msg = GetPrefix() + LocaleToUtf8(msg).c_str();
147
 
148
-   (void) mpdclient_cmd_send_message(c, chat_channel, full_msg);
149
-   g_free(full_msg);
150
+   (void) mpdclient_cmd_send_message(&c, chat_channel, full_msg.c_str());
151
 }
152
 
153
 bool
154
-ChatPage::OnCommand(struct mpdclient &c, command_t cmd)
155
+ChatPage::OnCommand(struct mpdclient &c, Command cmd)
156
 {
157
    if (TextPage::OnCommand(c, cmd))
158
        return true;
159
 
160
-   if (cmd == CMD_PLAY) {
161
+   if (cmd == Command::PLAY) {
162
        auto message = screen_readln(_("Your message"), nullptr, nullptr, nullptr);
163
 
164
        /* the user entered an empty line */
165
@@ -177,7 +166,7 @@
166
            return true;
167
 
168
        if (CheckChatSupport(c))
169
-           screen_chat_send_message(&c, message.c_str());
170
+           SendMessage(c, message.c_str());
171
        else
172
            screen_status_message(_("Message could not be sent"));
173
 
174
@@ -187,7 +176,9 @@
175
    return false;
176
 }
177
 
178
-const struct screen_functions screen_chat = {
179
+const PageMeta screen_chat = {
180
    "chat",
181
+   N_("Chat"),
182
+   Command::SCREEN_CHAT,
183
    screen_chat_init,
184
 };
185
ncmpc-0.30.tar.xz/src/ChatPage.hxx -> ncmpc-0.32.tar.xz/src/ChatPage.hxx Changed
12
 
1
@@ -24,8 +24,8 @@
2
 
3
 #ifdef ENABLE_CHAT_SCREEN
4
 
5
-struct screen_functions;
6
-extern const struct screen_functions screen_chat;
7
+struct PageMeta;
8
+extern const PageMeta screen_chat;
9
 
10
 #endif
11
 
12
ncmpc-0.32.tar.xz/src/Command.cxx Added
270
 
1
@@ -0,0 +1,268 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Command.hxx"
22
+#include "i18n.h"
23
+#include "util/Macros.hxx"
24
+
25
+#include <string.h>
26
+
27
+static constexpr command_definition_t cmds[] = {
28
+#ifdef ENABLE_KEYDEF_SCREEN
29
+   { "screen-keyedit",
30
+     N_("Key configuration screen") },
31
+#endif
32
+   { "quit",
33
+     N_("Quit") },
34
+
35
+   /* movement */
36
+   { "up",
37
+     N_("Move cursor up") },
38
+   { "down",
39
+     N_("Move cursor down") },
40
+   { "top",
41
+     N_("Move cursor to the top of screen") },
42
+   { "middle",
43
+     N_("Move cursor to the middle of screen") },
44
+   { "bottom",
45
+     N_("Move cursor to the bottom of screen") },
46
+   { "home",
47
+     N_("Move cursor to the top of the list") },
48
+   { "end",
49
+     N_("Move cursor to the bottom of the list") },
50
+   { "pgup",
51
+     N_("Page up") },
52
+   { "pgdn",
53
+     N_("Page down") },
54
+   { "range-select",
55
+     N_("Range selection") },
56
+   { "scroll-down-line",
57
+     N_("Scroll down one line") },
58
+   { "scroll-up-line",
59
+     N_("Scroll up one line") },
60
+   { "scroll-down-half",
61
+     N_("Scroll up half a screen") },
62
+   { "scroll-up-half",
63
+     N_("Scroll down half a screen") },
64
+   { "select-playing",
65
+     N_("Select currently playing song") },
66
+
67
+
68
+   /* basic screens */
69
+   { "screen-help",
70
+     N_("Help screen") },
71
+   { "screen-playlist",
72
+     N_("Queue screen") },
73
+   { "screen-browse",
74
+     N_("Browse screen") },
75
+
76
+
77
+   /* player commands */
78
+   { "play",
79
+     N_("Play/Enter directory") },
80
+   { "pause",
81
+     N_("Pause") },
82
+   { "stop",
83
+     N_("Stop") },
84
+   { "crop",
85
+     N_("Crop") },
86
+   { "next",
87
+     N_("Next track") },
88
+   { "prev",
89
+     N_("Previous track") },
90
+   { "seek-forward",
91
+     N_("Seek forward") },
92
+   { "seek-backward",
93
+     N_("Seek backward") },
94
+   { "volume-up",
95
+     N_("Increase volume") },
96
+   { "volume-down",
97
+     N_("Decrease volume") },
98
+   { "select",
99
+     N_("Select/deselect song in queue") },
100
+   { "select_all",
101
+     N_("Select all listed items") },
102
+   { "delete",
103
+     N_("Delete song from queue") },
104
+   { "shuffle",
105
+     N_("Shuffle queue") },
106
+   { "clear",
107
+     N_("Clear queue") },
108
+   { "repeat",
109
+     N_("Toggle repeat mode") },
110
+   { "random",
111
+     N_("Toggle random mode") },
112
+   { "single",
113
+     N_("Toggle single mode") },
114
+   { "consume",
115
+     N_("Toggle consume mode") },
116
+   { "crossfade",
117
+     N_("Toggle crossfade mode") },
118
+   { "db-update",
119
+     N_("Start a music database update") },
120
+   { "save",
121
+     N_("Save queue") },
122
+   { "add",
123
+     N_("Append song to queue") },
124
+
125
+   { "go-root-directory",
126
+     N_("Go to root directory") },
127
+   { "go-parent-directory",
128
+     N_("Go to parent directory") },
129
+
130
+   { "locate",
131
+     N_("Locate song in browser") },
132
+
133
+   /* lists */
134
+   { "move-up",
135
+     N_("Move item up") },
136
+   { "move-down",
137
+     N_("Move item down") },
138
+   { "update",
139
+     N_("Refresh screen") },
140
+
141
+
142
+   /* ncmpc options */
143
+   { "wrap-mode",
144
+     /* translators: toggle between wrapping and non-wrapping
145
+        search */
146
+     N_("Toggle find mode") },
147
+   { "autocenter-mode",
148
+     /* translators: the auto center mode always centers the song
149
+        currently being played */
150
+     N_("Toggle auto center mode") },
151
+
152
+
153
+   /* change screen */
154
+   { "screen-next",
155
+     N_("Next screen") },
156
+   { "screen-prev",
157
+     N_("Previous screen") },
158
+   { "screen-swap",
159
+     N_("Swap to most recent screen") },
160
+
161
+
162
+   /* find */
163
+   { "find",
164
+     N_("Forward find") },
165
+   { "find-next",
166
+     N_("Forward find next") },
167
+   { "rfind",
168
+     N_("Backward find") },
169
+   { "rfind-next",
170
+     N_("Backward find previous") },
171
+   { "jump",
172
+       /* translators: this queries the user for a string
173
+        * and jumps directly (while the user is typing)
174
+        * to the entry which begins with this string */
175
+     N_("Jump to") },
176
+
177
+
178
+   /* extra screens */
179
+#ifdef ENABLE_ARTIST_SCREEN
180
+   { "screen-artist",
181
+     N_("Artist screen") },
182
+#endif
183
+#ifdef ENABLE_SEARCH_SCREEN
184
+   { "screen-search",
185
+     N_("Search screen") },
186
+   { "search-mode",
187
+     N_("Change search mode") },
188
+#endif
189
+#ifdef ENABLE_SONG_SCREEN
190
+   { "view",
191
+     N_("View the selected and the currently playing song") },
192
+#endif
193
+#ifdef ENABLE_LYRICS_SCREEN
194
+   { "screen-lyrics",
195
+     N_("Lyrics screen") },
196
+   { "lyrics-interrupt",
197
+     /* translators: interrupt the current background action,
198
+        e.g. stop loading lyrics from the internet */
199
+     N_("Interrupt action") },
200
+   { "lyrics-update",
201
+     N_("Update Lyrics") },
202
+   /* this command may move out of #ifdef ENABLE_LYRICS_SCREEN
203
+      at some point */
204
+   { "edit",
205
+     N_("Edit the current item") },
206
+#endif
207
+
208
+#ifdef ENABLE_OUTPUTS_SCREEN
209
+   { "screen-outputs",
210
+     N_("Outputs screen") },
211
+#endif
212
+
213
+#ifdef ENABLE_CHAT_SCREEN
214
+   { "screen-chat",
215
+     N_("Chat screen") },
216
+#endif
217
+};
218
+
219
+static_assert(ARRAY_SIZE(cmds) == size_t(Command::NONE),
220
+         "Wrong command table size");
221
+
222
+const command_definition_t *
223
+get_command_definitions()
224
+{
225
+   return cmds;
226
+}
227
+
228
+size_t
229
+get_cmds_max_name_width()
230
+{
231
+   static size_t max = 0;
232
+
233
+   if (max != 0)
234
+       return max;
235
+
236
+   for (const auto &i : cmds) {
237
+       /*
238
+        * width and length are considered the same here, as command
239
+        * names are not translated.
240
+        */
241
+       size_t len = strlen(i.name);
242
+       if (len > max)
243
+           max = len;
244
+   }
245
+
246
+   return max;
247
+}
248
+
249
+const char *
250
+get_key_description(Command command)
251
+{
252
+   return gettext(cmds[size_t(command)].description);
253
+}
254
+
255
+const char *
256
+get_key_command_name(Command command)
257
+{
258
+   return cmds[size_t(command)].name;
259
+}
260
+
261
+Command
262
+get_key_command_from_name(const char *name)
263
+{
264
+   for (size_t i = 0; i < size_t(Command::NONE); ++i)
265
+       if (strcmp(name, cmds[i].name) == 0)
266
+           return Command(i);
267
+
268
+   return Command::NONE;
269
+}
270
ncmpc-0.32.tar.xz/src/Command.hxx Added
157
 
1
@@ -0,0 +1,155 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef COMMAND_H
22
+#define COMMAND_H
23
+
24
+#include "config.h"
25
+#include "util/Compiler.h"
26
+
27
+#include <stddef.h>
28
+
29
+/* commands */
30
+enum class Command : unsigned {
31
+#ifdef ENABLE_KEYDEF_SCREEN
32
+   SCREEN_KEYDEF,
33
+#endif
34
+   QUIT,
35
+
36
+   /* movement */
37
+   LIST_PREVIOUS,
38
+   LIST_NEXT,
39
+   LIST_TOP,
40
+   LIST_MIDDLE,
41
+   LIST_BOTTOM,
42
+   LIST_FIRST,
43
+   LIST_LAST,
44
+   LIST_PREVIOUS_PAGE,
45
+   LIST_NEXT_PAGE,
46
+   LIST_RANGE_SELECT,
47
+   LIST_SCROLL_DOWN_LINE,
48
+   LIST_SCROLL_UP_LINE,
49
+   LIST_SCROLL_DOWN_HALF,
50
+   LIST_SCROLL_UP_HALF,
51
+   SELECT_PLAYING,
52
+
53
+   /* basic screens */
54
+   SCREEN_HELP,
55
+   SCREEN_PLAY,
56
+   SCREEN_FILE,
57
+
58
+   /* player commands */
59
+   PLAY,
60
+   PAUSE,
61
+   STOP,
62
+   CROP,
63
+   TRACK_NEXT,
64
+   TRACK_PREVIOUS,
65
+   SEEK_FORWARD,
66
+   SEEK_BACKWARD,
67
+   VOLUME_UP,
68
+   VOLUME_DOWN,
69
+   SELECT,
70
+   SELECT_ALL,
71
+   DELETE,
72
+   SHUFFLE,
73
+   CLEAR,
74
+   REPEAT,
75
+   RANDOM,
76
+   SINGLE,
77
+   CONSUME,
78
+   CROSSFADE,
79
+   DB_UPDATE,
80
+   SAVE_PLAYLIST,
81
+   ADD,
82
+   GO_ROOT_DIRECTORY,
83
+   GO_PARENT_DIRECTORY,
84
+   LOCATE,
85
+
86
+   /* lists */
87
+   LIST_MOVE_UP,
88
+   LIST_MOVE_DOWN,
89
+   SCREEN_UPDATE,
90
+
91
+   /* ncmpc options */
92
+   TOGGLE_FIND_WRAP,
93
+   TOGGLE_AUTOCENTER,
94
+
95
+   /* change screen */
96
+   SCREEN_NEXT,
97
+   SCREEN_PREVIOUS,
98
+   SCREEN_SWAP,
99
+
100
+   /* find */
101
+   LIST_FIND,
102
+   LIST_FIND_NEXT,
103
+   LIST_RFIND,
104
+   LIST_RFIND_NEXT,
105
+   LIST_JUMP,
106
+
107
+   /* extra screens */
108
+#ifdef ENABLE_ARTIST_SCREEN
109
+   SCREEN_ARTIST,
110
+#endif
111
+#ifdef ENABLE_SEARCH_SCREEN
112
+   SCREEN_SEARCH,
113
+   SEARCH_MODE,
114
+#endif
115
+#ifdef ENABLE_SONG_SCREEN
116
+   SCREEN_SONG,
117
+#endif
118
+#ifdef ENABLE_LYRICS_SCREEN
119
+   SCREEN_LYRICS,
120
+   INTERRUPT,
121
+   LYRICS_UPDATE,
122
+   EDIT,
123
+#endif
124
+#ifdef ENABLE_OUTPUTS_SCREEN
125
+   SCREEN_OUTPUTS,
126
+#endif
127
+#ifdef ENABLE_CHAT_SCREEN
128
+   SCREEN_CHAT,
129
+#endif
130
+
131
+   NONE,
132
+};
133
+
134
+typedef struct  {
135
+   const char *name;
136
+   const char *description;
137
+} command_definition_t;
138
+
139
+const command_definition_t *
140
+get_command_definitions();
141
+
142
+gcc_const
143
+size_t
144
+get_cmds_max_name_width();
145
+
146
+gcc_pure
147
+const char *get_key_description(Command command);
148
+
149
+gcc_pure
150
+const char *get_key_command_name(Command command);
151
+
152
+gcc_pure
153
+Command
154
+get_key_command_from_name(const char *name);
155
+
156
+#endif
157
ncmpc-0.32.tar.xz/src/CustomColors.cxx Added
65
 
1
@@ -0,0 +1,63 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "CustomColors.hxx"
22
+#include "i18n.h"
23
+
24
+#include <curses.h>
25
+
26
+#include <list>
27
+
28
+#include <stdio.h>
29
+
30
+struct CustomColor {
31
+   short color;
32
+   short r,g,b;
33
+
34
+   constexpr CustomColor(short _color, short _r, short _g, short _b)
35
+       :color(_color), r(_r), g(_g), b(_b) {}
36
+};
37
+
38
+static std::list<CustomColor> custom_colors;
39
+
40
+/* This function is called from conf.c before curses have been started,
41
+ * it adds the definition to the color_definition_list and init_color() is
42
+ * done in colors_start() */
43
+void
44
+colors_define(short color, short r, short g, short b)
45
+{
46
+   custom_colors.emplace_back(color, r, g, b);
47
+}
48
+
49
+void
50
+ApplyCustomColors()
51
+{
52
+   if (custom_colors.empty())
53
+       return;
54
+
55
+   if (!can_change_color()) {
56
+       fprintf(stderr, "%s\n",
57
+           _("Terminal lacks support for changing colors"));
58
+       return;
59
+   }
60
+
61
+   for (const auto &i : custom_colors)
62
+       if (i.color < COLORS)
63
+           init_color(i.color, i.r, i.g, i.b);
64
+}
65
ncmpc-0.32.tar.xz/src/CustomColors.hxx Added
31
 
1
@@ -0,0 +1,29 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef CUSTOM_COLORS_HXX
22
+#define CUSTOM_COLORS_HXX
23
+
24
+void
25
+colors_define(short color, short r, short g, short b);
26
+
27
+void
28
+ApplyCustomColors();
29
+
30
+#endif
31
ncmpc-0.32.tar.xz/src/DelayedSeek.cxx Added
97
 
1
@@ -0,0 +1,95 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "DelayedSeek.hxx"
22
+#include "mpdclient.hxx"
23
+
24
+void
25
+DelayedSeek::Commit() noexcept
26
+{
27
+   if (id < 0)
28
+       return;
29
+
30
+   struct mpd_connection *connection = c.GetConnection();
31
+   if (connection == nullptr) {
32
+       id = -1;
33
+       return;
34
+   }
35
+
36
+   if (id == c.GetCurrentSongId())
37
+       if (!mpd_run_seek_id(connection, id, time))
38
+           c.HandleError();
39
+
40
+   id = -1;
41
+}
42
+
43
+void
44
+DelayedSeek::Cancel() noexcept
45
+{
46
+   commit_timer.cancel();
47
+}
48
+
49
+void
50
+DelayedSeek::OnTimer(const boost::system::error_code &error) noexcept
51
+{
52
+   if (error)
53
+       return;
54
+
55
+   Commit();
56
+}
57
+
58
+void
59
+DelayedSeek::ScheduleTimer() noexcept
60
+{
61
+   boost::system::error_code error;
62
+   commit_timer.expires_from_now(std::chrono::milliseconds(500), error);
63
+   commit_timer.async_wait(std::bind(&DelayedSeek::OnTimer,
64
+                     this, std::placeholders::_1));
65
+}
66
+
67
+bool
68
+DelayedSeek::Seek(int offset) noexcept
69
+{
70
+   if (!c.playing_or_paused)
71
+       return false;
72
+
73
+   int current_id = mpd_status_get_song_id(c.status);
74
+   if (current_id < 0)
75
+       return false;
76
+
77
+   int new_time;
78
+   if (current_id == id) {
79
+       new_time = time;
80
+   } else {
81
+       id = current_id;
82
+       new_time = mpd_status_get_elapsed_time(c.status);
83
+   }
84
+
85
+   new_time += offset;
86
+   if (new_time < 0)
87
+       new_time = 0;
88
+   else if ((unsigned)new_time > mpd_status_get_total_time(c.status))
89
+       new_time = mpd_status_get_total_time(c.status);
90
+
91
+   time = new_time;
92
+
93
+   ScheduleTimer();
94
+
95
+   return true;
96
+}
97
ncmpc-0.32.tar.xz/src/DelayedSeek.hxx Added
70
 
1
@@ -0,0 +1,68 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef NCMPC_DELAYED_SEEK_HXX
22
+#define NCMPC_DELAYED_SEEK_HXX
23
+
24
+#include "AsioServiceFwd.hxx"
25
+
26
+#include <boost/asio/steady_timer.hpp>
27
+
28
+struct mpdclient;
29
+
30
+/**
31
+ * Helper class which handles user seek commands; it will delay
32
+ * actually sending the seek command to MPD.
33
+ */
34
+class DelayedSeek {
35
+   struct mpdclient &c;
36
+
37
+   int id = -1;
38
+   unsigned time;
39
+
40
+   boost::asio::steady_timer commit_timer;
41
+
42
+public:
43
+   DelayedSeek(boost::asio::io_service &io_service,
44
+           struct mpdclient &_c) noexcept
45
+       :c(_c), commit_timer(io_service) {}
46
+
47
+   ~DelayedSeek() noexcept {
48
+       Cancel();
49
+   }
50
+
51
+   bool IsSeeking(int _id) const noexcept {
52
+       return id >= 0 && _id == id;
53
+   }
54
+
55
+   unsigned GetTime() const noexcept {
56
+       return time;
57
+   }
58
+
59
+   bool Seek(int offset) noexcept;
60
+
61
+   void Commit() noexcept;
62
+   void Cancel() noexcept;
63
+
64
+private:
65
+   void OnTimer(const boost::system::error_code &error) noexcept;
66
+   void ScheduleTimer() noexcept;
67
+};
68
+
69
+#endif
70
ncmpc-0.30.tar.xz/src/FileBrowserPage.cxx -> ncmpc-0.32.tar.xz/src/FileBrowserPage.cxx Changed
217
 
1
@@ -18,7 +18,7 @@
2
  */
3
 
4
 #include "FileBrowserPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "FileListPage.hxx"
8
 #include "screen_status.hxx"
9
 #include "save_playlist.hxx"
10
@@ -30,16 +30,15 @@
11
 #include "filelist.hxx"
12
 #include "screen_utils.hxx"
13
 #include "screen_client.hxx"
14
-#include "options.hxx"
15
+#include "Options.hxx"
16
+#include "util/UriUtil.hxx"
17
 
18
 #include <mpd/client.h>
19
 
20
 #include <string>
21
 
22
-#include <ctype.h>
23
 #include <stdlib.h>
24
 #include <string.h>
25
-#include <glib.h>
26
 
27
 class FileBrowserPage final : public FileListPage {
28
    std::string current_path;
29
@@ -58,7 +57,7 @@
30
    /**
31
     * Change to the specified absolute directory.
32
     */
33
-   bool ChangeDirectory(struct mpdclient &c, const char *new_path);
34
+   bool ChangeDirectory(struct mpdclient &c, std::string &&new_path);
35
 
36
    /**
37
     * Change to the parent directory of the current directory.
38
@@ -77,9 +76,9 @@
39
 
40
 public:
41
    /* virtual methods from class Page */
42
-   void Update(struct mpdclient &c, unsigned events) override;
43
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
44
-   const char *GetTitle(char *s, size_t size) const override;
45
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
46
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
47
+   const char *GetTitle(char *s, size_t size) const noexcept override;
48
 };
49
 
50
 static void
51
@@ -115,9 +114,9 @@
52
 }
53
 
54
 bool
55
-FileBrowserPage::ChangeDirectory(struct mpdclient &c, const char *new_path)
56
+FileBrowserPage::ChangeDirectory(struct mpdclient &c, std::string &&new_path)
57
 {
58
-   current_path = new_path;
59
+   current_path = std::move(new_path);
60
 
61
    Reload(c);
62
 
63
@@ -131,14 +130,10 @@
64
 bool
65
 FileBrowserPage::ChangeToParent(struct mpdclient &c)
66
 {
67
-   char *parent = g_path_get_dirname(current_path.c_str());
68
-   if (strcmp(parent, ".") == 0)
69
-       parent[0] = '\0';
70
+   auto parent = GetParentUri(current_path.c_str());
71
+   const auto old_path = std::move(current_path);
72
 
73
-   auto old_path = std::move(current_path);
74
-
75
-   bool success = ChangeDirectory(c, parent);
76
-   g_free(parent);
77
+   bool success = ChangeDirectory(c, std::move(parent));
78
 
79
    int idx = success
80
        ? filelist->FindDirectory(old_path.c_str())
81
@@ -178,15 +173,7 @@
82
 
83
    /* determine the song's parent directory and go there */
84
 
85
-   const char *slash = strrchr(uri, '/');
86
-   char *allocated = nullptr;
87
-   const char *parent = slash != nullptr
88
-       ? (allocated = g_strndup(uri, slash - uri))
89
-       : "";
90
-
91
-   bool ret = ChangeDirectory(c, parent);
92
-   g_free(allocated);
93
-   if (!ret)
94
+   if (!ChangeDirectory(c, GetParentUri(uri)))
95
        return false;
96
 
97
    /* select the specified song */
98
@@ -231,11 +218,10 @@
99
        }
100
    }
101
 
102
-   char *defaultname_utf8 = nullptr;
103
    if(defaultname)
104
-       defaultname_utf8 = utf8_to_locale(defaultname);
105
-   playlist_save(&c, nullptr, defaultname_utf8);
106
-   g_free(defaultname_utf8);
107
+       playlist_save(&c, nullptr, Utf8ToLocale(defaultname).c_str());
108
+   else
109
+       playlist_save(&c, nullptr, nullptr);
110
 }
111
 
112
 void
113
@@ -267,7 +253,7 @@
114
        char prompt[256];
115
        snprintf(prompt, sizeof(prompt),
116
             _("Delete playlist %s?"),
117
-            Utf8ToLocale(g_basename(mpd_playlist_get_path(playlist))).c_str());
118
+            Utf8ToLocale(GetUriFilename(mpd_playlist_get_path(playlist))).c_str());
119
        bool confirmed = screen_get_yesno(prompt, false);
120
        if (!confirmed) {
121
            /* translators: a dialog was aborted by the user */
122
@@ -288,14 +274,14 @@
123
    }
124
 }
125
 
126
-static Page *
127
+static std::unique_ptr<Page>
128
 screen_file_init(ScreenManager &_screen, WINDOW *w, Size size)
129
 {
130
-   return new FileBrowserPage(_screen, w, size);
131
+   return std::make_unique<FileBrowserPage>(_screen, w, size);
132
 }
133
 
134
 const char *
135
-FileBrowserPage::GetTitle(char *str, size_t size) const
136
+FileBrowserPage::GetTitle(char *str, size_t size) const noexcept
137
 {
138
    const char *path = nullptr, *prev = nullptr, *slash = current_path.c_str();
139
 
140
@@ -316,7 +302,7 @@
141
 }
142
 
143
 void
144
-FileBrowserPage::Update(struct mpdclient &c, unsigned events)
145
+FileBrowserPage::Update(struct mpdclient &c, unsigned events) noexcept
146
 {
147
    if (events & (MPD_IDLE_DATABASE | MPD_IDLE_STORED_PLAYLIST)) {
148
        /* the db has changed -> update the filelist */
149
@@ -334,29 +320,29 @@
150
 }
151
 
152
 bool
153
-FileBrowserPage::OnCommand(struct mpdclient &c, command_t cmd)
154
+FileBrowserPage::OnCommand(struct mpdclient &c, Command cmd)
155
 {
156
    switch(cmd) {
157
-   case CMD_PLAY:
158
+   case Command::PLAY:
159
        if (HandleEnter(c))
160
            return true;
161
 
162
        break;
163
 
164
-   case CMD_GO_ROOT_DIRECTORY:
165
-       ChangeDirectory(c, "");
166
+   case Command::GO_ROOT_DIRECTORY:
167
+       ChangeDirectory(c, {});
168
        return true;
169
-   case CMD_GO_PARENT_DIRECTORY:
170
+   case Command::GO_PARENT_DIRECTORY:
171
        ChangeToParent(c);
172
        return true;
173
 
174
-   case CMD_LOCATE:
175
+   case Command::LOCATE:
176
        /* don't let browser_cmd() evaluate the locate command
177
           - it's a no-op, and by the way, leads to a
178
           segmentation fault in the current implementation */
179
        return false;
180
 
181
-   case CMD_SCREEN_UPDATE:
182
+   case Command::SCREEN_UPDATE:
183
        Reload(c);
184
        screen_browser_sync_highlights(filelist, &c.playlist);
185
        return false;
186
@@ -372,15 +358,15 @@
187
        return false;
188
 
189
    switch(cmd) {
190
-   case CMD_DELETE:
191
+   case Command::DELETE:
192
        HandleDelete(c);
193
        break;
194
 
195
-   case CMD_SAVE_PLAYLIST:
196
+   case Command::SAVE_PLAYLIST:
197
        HandleSave(c);
198
        break;
199
 
200
-   case CMD_DB_UPDATE:
201
+   case Command::DB_UPDATE:
202
        screen_database_update(&c, current_path.c_str());
203
        return true;
204
 
205
@@ -391,8 +377,10 @@
206
    return false;
207
 }
208
 
209
-const struct screen_functions screen_browse = {
210
+const PageMeta screen_browse = {
211
    "browse",
212
+   N_("Browse"),
213
+   Command::SCREEN_FILE,
214
    screen_file_init,
215
 };
216
 
217
ncmpc-0.30.tar.xz/src/FileBrowserPage.hxx -> ncmpc-0.32.tar.xz/src/FileBrowserPage.hxx Changed
13
 
1
@@ -22,9 +22,10 @@
2
 
3
 struct mpdclient;
4
 struct mpd_song;
5
+struct PageMeta;
6
 class ScreenManager;
7
 
8
-extern const struct screen_functions screen_browse;
9
+extern const PageMeta screen_browse;
10
 
11
 bool
12
 screen_file_goto_song(ScreenManager &_screen, struct mpdclient &c,
13
ncmpc-0.30.tar.xz/src/FileListPage.cxx -> ncmpc-0.32.tar.xz/src/FileListPage.cxx Changed
269
 
1
@@ -22,23 +22,23 @@
2
 #include "FileBrowserPage.hxx"
3
 #include "SongPage.hxx"
4
 #include "LyricsPage.hxx"
5
+#include "Command.hxx"
6
 #include "screen_status.hxx"
7
 #include "screen_find.hxx"
8
 #include "screen.hxx"
9
 #include "i18n.h"
10
-#include "options.hxx"
11
+#include "Options.hxx"
12
 #include "charset.hxx"
13
 #include "strfsong.hxx"
14
 #include "mpdclient.hxx"
15
 #include "filelist.hxx"
16
-#include "colors.hxx"
17
+#include "Styles.hxx"
18
 #include "paint.hxx"
19
 #include "song_paint.hxx"
20
+#include "util/UriUtil.hxx"
21
 
22
 #include <mpd/client.h>
23
 
24
-#include <glib.h>
25
-
26
 #include <string.h>
27
 
28
 #define BUFSIZE 1024
29
@@ -47,7 +47,7 @@
30
 #define HIGHLIGHT  (0x01)
31
 #endif
32
 
33
-FileListPage::~FileListPage()
34
+FileListPage::~FileListPage() noexcept
35
 {
36
    delete filelist;
37
 }
38
@@ -65,7 +65,7 @@
39
        if (entity != nullptr && mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) {
40
            const auto *song = mpd_entity_get_song(entity);
41
 
42
-           if (playlist->FindUri(*song) >= 0)
43
+           if (playlist->ContainsUri(mpd_song_get_uri(song)))
44
                entry.flags |= HIGHLIGHT;
45
            else
46
                entry.flags &= ~HIGHLIGHT;
47
@@ -77,7 +77,7 @@
48
 
49
 const char *
50
 FileListPage::GetListItemText(char *buffer, size_t size,
51
-                 unsigned idx) const
52
+                 unsigned idx) const noexcept
53
 {
54
    assert(filelist != nullptr);
55
    assert(idx < filelist->size());
56
@@ -90,9 +90,8 @@
57
 
58
    if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY) {
59
        const auto *dir = mpd_entity_get_directory(entity);
60
-       const char *name = g_basename(mpd_directory_get_path(dir));
61
-       g_strlcpy(buffer, Utf8ToLocale(name).c_str(), size);
62
-       return buffer;
63
+       const char *name = GetUriFilename(mpd_directory_get_path(dir));
64
+       return utf8_to_locale(name, buffer, size);
65
    } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) {
66
        const auto *song = mpd_entity_get_song(entity);
67
 
68
@@ -100,9 +99,8 @@
69
        return buffer;
70
    } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST) {
71
        const auto *playlist = mpd_entity_get_playlist(entity);
72
-       const char *name = g_basename(mpd_playlist_get_path(playlist));
73
-       g_strlcpy(buffer, Utf8ToLocale(name).c_str(), size);
74
-       return buffer;
75
+       const char *name = GetUriFilename(mpd_playlist_get_path(playlist));
76
+       return utf8_to_locale(name, buffer, size);
77
    }
78
 
79
    return "Error: Unknown entry!";
80
@@ -116,8 +114,8 @@
81
        return false;
82
 
83
    if (mpd_run_load(connection, mpd_playlist_get_path(playlist))) {
84
-       const char *name = g_basename(mpd_playlist_get_path(playlist));
85
-       screen_status_printf(_("Loading playlist %s..."),
86
+       const char *name = GetUriFilename(mpd_playlist_get_path(playlist));
87
+       screen_status_printf(_("Loading playlist '%s'"),
88
                     Utf8ToLocale(name).c_str());
89
 
90
        c->events |= MPD_IDLE_QUEUE;
91
@@ -142,7 +140,7 @@
92
        id = -1;
93
    else
94
 #endif
95
-       id = c->playlist.FindUri(*song);
96
+       id = c->playlist.FindIdByUri(mpd_song_get_uri(song));
97
 
98
    if (id < 0) {
99
        char buf[BUFSIZE];
100
@@ -264,7 +262,7 @@
101
        entry->flags |= HIGHLIGHT;
102
 #endif
103
 
104
-       if (mpdclient_cmd_add(c, song)) {
105
+       if (c->RunAdd(*song)) {
106
            char buf[BUFSIZE];
107
 
108
            strfsong(buf, BUFSIZE,
109
@@ -279,8 +277,8 @@
110
 
111
        entry->flags &= ~HIGHLIGHT;
112
 
113
-       while ((idx = c->playlist.FindUri(*song)) >= 0)
114
-           mpdclient_cmd_delete(c, idx);
115
+       while ((idx = c->playlist.FindByUri(mpd_song_get_uri(song))) >= 0)
116
+           c->RunDelete(idx);
117
 #endif
118
    }
119
 
120
@@ -363,7 +361,7 @@
121
 #endif
122
 
123
 bool
124
-FileListPage::OnCommand(struct mpdclient &c, command_t cmd)
125
+FileListPage::OnCommand(struct mpdclient &c, Command cmd)
126
 {
127
    if (filelist == nullptr)
128
        return false;
129
@@ -376,20 +374,20 @@
130
        const struct mpd_song *song;
131
 #endif
132
 
133
-   case CMD_LIST_FIND:
134
-   case CMD_LIST_RFIND:
135
-   case CMD_LIST_FIND_NEXT:
136
-   case CMD_LIST_RFIND_NEXT:
137
-       screen_find(screen, &lw, cmd, *this);
138
+   case Command::LIST_FIND:
139
+   case Command::LIST_RFIND:
140
+   case Command::LIST_FIND_NEXT:
141
+   case Command::LIST_RFIND_NEXT:
142
+       screen_find(screen, lw, cmd, *this);
143
        SetDirty();
144
        return true;
145
-   case CMD_LIST_JUMP:
146
-       screen_jump(screen, &lw, *this, *this);
147
+   case Command::LIST_JUMP:
148
+       screen_jump(screen, lw, *this, *this);
149
        SetDirty();
150
        return true;
151
 
152
 #ifdef ENABLE_SONG_SCREEN
153
-   case CMD_SCREEN_SONG:
154
+   case Command::SCREEN_SONG:
155
        song = GetSelectedSong();
156
        if (song == nullptr)
157
            return false;
158
@@ -399,7 +397,7 @@
159
 #endif
160
 
161
 #ifdef ENABLE_LYRICS_SCREEN
162
-   case CMD_SCREEN_LYRICS:
163
+   case Command::SCREEN_LYRICS:
164
        song = GetSelectedSong();
165
        if (song == nullptr)
166
            return false;
167
@@ -407,7 +405,7 @@
168
        screen_lyrics_switch(screen, c, *song, false);
169
        return true;
170
 #endif
171
-   case CMD_SCREEN_SWAP:
172
+   case Command::SCREEN_SWAP:
173
        screen.Swap(c, GetSelectedSong());
174
        return true;
175
 
176
@@ -421,27 +419,27 @@
177
    switch (cmd) {
178
        const struct mpd_song *song;
179
 
180
-   case CMD_PLAY:
181
+   case Command::PLAY:
182
        HandleEnter(c);
183
        return true;
184
 
185
-   case CMD_SELECT:
186
+   case Command::SELECT:
187
        if (HandleSelect(c))
188
-           lw.HandleCommand(CMD_LIST_NEXT);
189
+           lw.HandleCommand(Command::LIST_NEXT);
190
        SetDirty();
191
        return true;
192
 
193
-   case CMD_ADD:
194
+   case Command::ADD:
195
        if (HandleAdd(c))
196
-           lw.HandleCommand(CMD_LIST_NEXT);
197
+           lw.HandleCommand(Command::LIST_NEXT);
198
        SetDirty();
199
        return true;
200
 
201
-   case CMD_SELECT_ALL:
202
+   case Command::SELECT_ALL:
203
        HandleSelectAll(c);
204
        return true;
205
 
206
-   case CMD_LOCATE:
207
+   case Command::LOCATE:
208
        song = GetSelectedSong();
209
        if (song == nullptr)
210
            return false;
211
@@ -460,7 +458,7 @@
212
 screen_browser_paint_directory(WINDOW *w, unsigned width,
213
                   bool selected, const char *name)
214
 {
215
-   row_color(w, COLOR_DIRECTORY, selected);
216
+   row_color(w, Style::DIRECTORY, selected);
217
 
218
    waddch(w, '[');
219
    waddstr(w, name);
220
@@ -474,13 +472,13 @@
221
 screen_browser_paint_playlist(WINDOW *w, unsigned width,
222
                  bool selected, const char *name)
223
 {
224
-   row_paint_text(w, width, COLOR_PLAYLIST, selected, name);
225
+   row_paint_text(w, width, Style::PLAYLIST, selected, name);
226
 }
227
 
228
 void
229
 FileListPage::PaintListItem(WINDOW *w, unsigned i,
230
                unsigned y, unsigned width,
231
-               bool selected) const
232
+               bool selected) const noexcept
233
 {
234
    assert(filelist != nullptr);
235
    assert(i < filelist->size());
236
@@ -505,7 +503,7 @@
237
 
238
    case MPD_ENTITY_TYPE_DIRECTORY:
239
        directory = mpd_entity_get_directory(entity);
240
-       name = g_basename(mpd_directory_get_path(directory));
241
+       name = GetUriFilename(mpd_directory_get_path(directory));
242
        screen_browser_paint_directory(w, width, selected,
243
                           Utf8ToLocale(name).c_str());
244
        break;
245
@@ -518,19 +516,20 @@
246
 
247
    case MPD_ENTITY_TYPE_PLAYLIST:
248
        playlist = mpd_entity_get_playlist(entity);
249
-       name = g_basename(mpd_playlist_get_path(playlist));
250
+       name = GetUriFilename(mpd_playlist_get_path(playlist));
251
        screen_browser_paint_playlist(w, width, selected,
252
                          Utf8ToLocale(name).c_str());
253
        break;
254
 
255
    default:
256
-       row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST,
257
+       row_paint_text(w, width,
258
+                  highlight ? Style::LIST_BOLD : Style::LIST,
259
                   selected, "<unknown>");
260
    }
261
 }
262
 
263
 void
264
-FileListPage::Paint() const
265
+FileListPage::Paint() const noexcept
266
 {
267
    lw.Paint(*this);
268
 }
269
ncmpc-0.30.tar.xz/src/FileListPage.hxx -> ncmpc-0.32.tar.xz/src/FileListPage.hxx Changed
47
 
1
@@ -20,13 +20,13 @@
2
 #ifndef FILE_LIST_PAGE_HXX
3
 #define FILE_LIST_PAGE_HXX
4
 
5
-#include "command.hxx"
6
 #include "config.h"
7
-#include "ncmpc_curses.h"
8
 #include "ListPage.hxx"
9
 #include "ListRenderer.hxx"
10
 #include "ListText.hxx"
11
 
12
+#include <curses.h>
13
+
14
 struct mpdclient;
15
 struct MpdQueue;
16
 class ScreenManager;
17
@@ -48,7 +48,7 @@
18
         screen(_screen),
19
         song_format(_song_format) {}
20
 
21
-   ~FileListPage() override;
22
+   ~FileListPage() noexcept override;
23
 
24
 protected:
25
    gcc_pure
26
@@ -76,16 +76,16 @@
27
    /* virtual methods from class ListRenderer */
28
    void PaintListItem(WINDOW *w, unsigned i,
29
               unsigned y, unsigned width,
30
-              bool selected) const final;
31
+              bool selected) const noexcept final;
32
 
33
    /* virtual methods from class ListText */
34
    const char *GetListItemText(char *buffer, size_t size,
35
-                   unsigned i) const override;
36
+                   unsigned i) const noexcept override;
37
 
38
 public:
39
    /* virtual methods from class Page */
40
-   void Paint() const override;
41
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
42
+   void Paint() const noexcept override;
43
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
44
 
45
 #ifdef HAVE_GETMOUSE
46
    bool OnMouse(struct mpdclient &c, Point p,
47
ncmpc-0.32.tar.xz/src/GlobalBindings.cxx Added
167
 
1
@@ -0,0 +1,165 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "GlobalBindings.hxx"
22
+#include "Bindings.hxx"
23
+
24
+#include <curses.h>
25
+
26
+#define KEY_CTL(x) ((x) & 0x1f) /* KEY_CTL(A) == ^A == \1 */
27
+
28
+#define BS   KEY_BACKSPACE
29
+#define DEL  KEY_DC
30
+#define UP   KEY_UP
31
+#define DWN  KEY_DOWN
32
+#define LEFT KEY_LEFT
33
+#define RGHT KEY_RIGHT
34
+#define HOME KEY_HOME
35
+#define END  KEY_END
36
+#define PGDN KEY_NPAGE
37
+#define PGUP KEY_PPAGE
38
+#define TAB  0x09
39
+#define STAB 0x161
40
+#define ESC  0x1B
41
+#define RET  '\r'
42
+#define F1   KEY_F(1)
43
+#define F2   KEY_F(2)
44
+#define F3   KEY_F(3)
45
+#define F4   KEY_F(4)
46
+#define F5   KEY_F(5)
47
+#define F6   KEY_F(6)
48
+#define F7   KEY_F(7)
49
+#define F8   KEY_F(8)
50
+#define F9   KEY_F(9)
51
+#define C(x) KEY_CTL(x)
52
+
53
+static KeyBindings global_key_bindings{{{
54
+#ifdef ENABLE_KEYDEF_SCREEN
55
+   {'K'},
56
+#endif
57
+   {'q', 'Q', C('C')},
58
+
59
+   /* movement */
60
+   {UP, 'k'},
61
+   {DWN, 'j'},
62
+   {'H'},
63
+   {'M'},
64
+   {'L'},
65
+   {HOME, C('A')},
66
+   {END, C('E')},
67
+   {PGUP},
68
+   {PGDN},
69
+   {'v',  0},
70
+   {C('N'),  0},
71
+   {C('B'),  0},
72
+   {'N',  0},
73
+   {'B',  0},
74
+   {'l'},
75
+
76
+   /* basic screens */
77
+   {'1', F1, 'h'},
78
+   {'2', F2},
79
+   {'3', F3},
80
+
81
+   /* player commands */
82
+   {RET},
83
+   {'P'},
84
+   {'s', BS},
85
+   {'o'},
86
+   {'>'},
87
+   {'<'},
88
+   {'f'},
89
+   {'b'},
90
+   {'+', RGHT},
91
+   {'-', LEFT},
92
+   {' '},
93
+   {'t'},
94
+   {DEL, 'd'},
95
+   {'Z'},
96
+   {'c'},
97
+   {'r'},
98
+   {'z'},
99
+   {'y'},
100
+   {'C'},
101
+   {'x'},
102
+   {C('U')},
103
+   {'S'},
104
+   {'a'},
105
+
106
+   {'!'},
107
+   {'"'},
108
+
109
+   {'G'},
110
+
111
+   /* lists */
112
+   {C('K')},
113
+   {C('J')},
114
+   {C('L')},
115
+
116
+
117
+   /* ncmpc options */
118
+   {'w'},
119
+   {'U'},
120
+
121
+   /* change screen */
122
+   {TAB},
123
+   {STAB},
124
+   {'`'},
125
+
126
+
127
+   /* find */
128
+   {'/'},
129
+   {'n'},
130
+   {'?'},
131
+   {'p'},
132
+   {'.'},
133
+
134
+
135
+   /* extra screens */
136
+#ifdef ENABLE_ARTIST_SCREEN
137
+   {'4', F4},
138
+#endif
139
+#ifdef ENABLE_SEARCH_SCREEN
140
+   {'5', F5},
141
+   {'m'},
142
+#endif
143
+#ifdef ENABLE_SONG_SCREEN
144
+   {'i'},
145
+#endif
146
+#ifdef ENABLE_LYRICS_SCREEN
147
+   {'7', F7},
148
+   {ESC},
149
+   {'u'},
150
+   {'e'},
151
+#endif
152
+
153
+#ifdef ENABLE_OUTPUTS_SCREEN
154
+   {'8', F8},
155
+#endif
156
+
157
+#ifdef ENABLE_CHAT_SCREEN
158
+   {'9', F9},
159
+#endif
160
+}}};
161
+
162
+KeyBindings &
163
+GetGlobalKeyBindings()
164
+{
165
+   return global_key_bindings;
166
+}
167
ncmpc-0.32.tar.xz/src/GlobalBindings.hxx Added
33
 
1
@@ -0,0 +1,31 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef GLOBAL_BINDINGS_HXX
22
+#define GLOBAL_BINDINGS_HXX
23
+
24
+#include "util/Compiler.h"
25
+
26
+struct KeyBindings;
27
+
28
+gcc_const
29
+KeyBindings &
30
+GetGlobalKeyBindings();
31
+
32
+#endif
33
ncmpc-0.30.tar.xz/src/HelpPage.cxx -> ncmpc-0.32.tar.xz/src/HelpPage.cxx Changed
466
 
1
@@ -18,183 +18,202 @@
2
  */
3
 
4
 #include "HelpPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "ListPage.hxx"
8
 #include "ListRenderer.hxx"
9
 #include "ListText.hxx"
10
 #include "screen_find.hxx"
11
 #include "paint.hxx"
12
-#include "charset.hxx"
13
+#include "Bindings.hxx"
14
+#include "GlobalBindings.hxx"
15
 #include "config.h"
16
 #include "i18n.h"
17
 #include "util/Macros.hxx"
18
+#include "util/LocaleString.hxx"
19
 
20
 #include <assert.h>
21
 
22
-struct help_text_row {
23
+struct HelpRow {
24
    signed char highlight;
25
-   command_t command;
26
+   Command command;
27
    const char *text;
28
+
29
+   constexpr HelpRow(signed char _highlight,
30
+             Command _command,
31
+             const char *_text=nullptr)
32
+       :highlight(_highlight), command(_command), text(_text) {}
33
+
34
+   constexpr HelpRow(Command _command,
35
+             const char *_text=nullptr)
36
+       :HelpRow(0, _command, _text) {}
37
 };
38
 
39
-static const struct help_text_row help_text[] = {
40
-   { 1, CMD_NONE, N_("Movement") },
41
-   { 2, CMD_NONE, nullptr },
42
-   { 0, CMD_LIST_PREVIOUS, nullptr },
43
-   { 0, CMD_LIST_NEXT, nullptr },
44
-   { 0, CMD_LIST_TOP, nullptr },
45
-   { 0, CMD_LIST_MIDDLE, nullptr },
46
-   { 0, CMD_LIST_BOTTOM, nullptr },
47
-   { 0, CMD_LIST_PREVIOUS_PAGE, nullptr },
48
-   { 0, CMD_LIST_NEXT_PAGE, nullptr },
49
-   { 0, CMD_LIST_FIRST, nullptr },
50
-   { 0, CMD_LIST_LAST, nullptr },
51
-   { 0, CMD_LIST_RANGE_SELECT, nullptr },
52
-   { 0, CMD_LIST_SCROLL_UP_LINE, nullptr},
53
-   { 0, CMD_LIST_SCROLL_DOWN_LINE, nullptr},
54
-   { 0, CMD_LIST_SCROLL_UP_HALF, nullptr},
55
-   { 0, CMD_LIST_SCROLL_DOWN_HALF, nullptr},
56
-   { 0, CMD_NONE, nullptr },
57
-
58
-   { 0, CMD_SCREEN_PREVIOUS,nullptr },
59
-   { 0, CMD_SCREEN_NEXT, nullptr },
60
-   { 0, CMD_SCREEN_SWAP, nullptr },
61
-   { 0, CMD_SCREEN_HELP, nullptr },
62
-   { 0, CMD_SCREEN_PLAY, nullptr },
63
-   { 0, CMD_SCREEN_FILE, nullptr },
64
+static constexpr HelpRow HLINE{2, Command::NONE};
65
+
66
+static constexpr HelpRow
67
+Heading(const char *text)
68
+{
69
+   return {1, Command::NONE, text};
70
+}
71
+
72
+static constexpr HelpRow help_text[] = {
73
+   Heading(N_("Movement")),
74
+   HLINE,
75
+   Command::LIST_PREVIOUS,
76
+   Command::LIST_NEXT,
77
+   Command::LIST_TOP,
78
+   Command::LIST_MIDDLE,
79
+   Command::LIST_BOTTOM,
80
+   Command::LIST_PREVIOUS_PAGE,
81
+   Command::LIST_NEXT_PAGE,
82
+   Command::LIST_FIRST,
83
+   Command::LIST_LAST,
84
+   Command::LIST_RANGE_SELECT,
85
+   Command::LIST_SCROLL_UP_LINE,
86
+   Command::LIST_SCROLL_DOWN_LINE,
87
+   Command::LIST_SCROLL_UP_HALF,
88
+   Command::LIST_SCROLL_DOWN_HALF,
89
+   Command::NONE,
90
+
91
+   Command::SCREEN_PREVIOUS,
92
+   Command::SCREEN_NEXT,
93
+   Command::SCREEN_SWAP,
94
+   Command::SCREEN_HELP,
95
+   Command::SCREEN_PLAY,
96
+   Command::SCREEN_FILE,
97
 #ifdef ENABLE_ARTIST_SCREEN
98
-   { 0, CMD_SCREEN_ARTIST, nullptr },
99
+   Command::SCREEN_ARTIST,
100
 #endif
101
 #ifdef ENABLE_SEARCH_SCREEN
102
-   { 0, CMD_SCREEN_SEARCH, nullptr },
103
+   Command::SCREEN_SEARCH,
104
 #endif
105
 #ifdef ENABLE_LYRICS_SCREEN
106
-   { 0, CMD_SCREEN_LYRICS, nullptr },
107
+   Command::SCREEN_LYRICS,
108
 #endif
109
 #ifdef ENABLE_OUTPUTS_SCREEN
110
-   { 0, CMD_SCREEN_OUTPUTS, nullptr },
111
+   Command::SCREEN_OUTPUTS,
112
 #endif
113
 #ifdef ENABLE_CHAT_SCREEN
114
-   { 0, CMD_SCREEN_CHAT, nullptr },
115
+   Command::SCREEN_CHAT,
116
 #endif
117
 #ifdef ENABLE_KEYDEF_SCREEN
118
-   { 0, CMD_SCREEN_KEYDEF, nullptr },
119
+   Command::SCREEN_KEYDEF,
120
 #endif
121
 
122
-   { 0, CMD_NONE, nullptr },
123
-   { 0, CMD_NONE, nullptr },
124
-   { 1, CMD_NONE, N_("Global") },
125
-   { 2, CMD_NONE, nullptr },
126
-   { 0, CMD_STOP, nullptr },
127
-   { 0, CMD_PAUSE, nullptr },
128
-   { 0, CMD_CROP, nullptr },
129
-   { 0, CMD_TRACK_NEXT, nullptr },
130
-   { 0, CMD_TRACK_PREVIOUS, nullptr },
131
-   { 0, CMD_SEEK_FORWARD, nullptr },
132
-   { 0, CMD_SEEK_BACKWARD, nullptr },
133
-   { 0, CMD_VOLUME_DOWN, nullptr },
134
-   { 0, CMD_VOLUME_UP, nullptr },
135
-   { 0, CMD_NONE, nullptr },
136
-   { 0, CMD_REPEAT, nullptr },
137
-   { 0, CMD_RANDOM, nullptr },
138
-   { 0, CMD_SINGLE, nullptr },
139
-   { 0, CMD_CONSUME, nullptr },
140
-   { 0, CMD_CROSSFADE, nullptr },
141
-   { 0, CMD_SHUFFLE, nullptr },
142
-   { 0, CMD_DB_UPDATE, nullptr },
143
-   { 0, CMD_NONE, nullptr },
144
-   { 0, CMD_LIST_FIND, nullptr },
145
-   { 0, CMD_LIST_RFIND, nullptr },
146
-   { 0, CMD_LIST_FIND_NEXT, nullptr },
147
-   { 0, CMD_LIST_RFIND_NEXT, nullptr },
148
-   { 0, CMD_LIST_JUMP, nullptr },
149
-   { 0, CMD_TOGGLE_FIND_WRAP, nullptr },
150
-   { 0, CMD_LOCATE, nullptr },
151
+   Command::NONE,
152
+   Command::NONE,
153
+   Heading(N_("Global")),
154
+   HLINE,
155
+   Command::STOP,
156
+   Command::PAUSE,
157
+   Command::CROP,
158
+   Command::TRACK_NEXT,
159
+   Command::TRACK_PREVIOUS,
160
+   Command::SEEK_FORWARD,
161
+   Command::SEEK_BACKWARD,
162
+   Command::VOLUME_DOWN,
163
+   Command::VOLUME_UP,
164
+   Command::NONE,
165
+   Command::REPEAT,
166
+   Command::RANDOM,
167
+   Command::SINGLE,
168
+   Command::CONSUME,
169
+   Command::CROSSFADE,
170
+   Command::SHUFFLE,
171
+   Command::DB_UPDATE,
172
+   Command::NONE,
173
+   Command::LIST_FIND,
174
+   Command::LIST_RFIND,
175
+   Command::LIST_FIND_NEXT,
176
+   Command::LIST_RFIND_NEXT,
177
+   Command::LIST_JUMP,
178
+   Command::TOGGLE_FIND_WRAP,
179
+   Command::LOCATE,
180
 #ifdef ENABLE_SONG_SCREEN
181
-   { 0, CMD_SCREEN_SONG, nullptr },
182
+   Command::SCREEN_SONG,
183
 #endif
184
-   { 0, CMD_NONE, nullptr },
185
-   { 0, CMD_QUIT, nullptr },
186
-
187
-   { 0, CMD_NONE, nullptr },
188
-   { 0, CMD_NONE, nullptr },
189
-   { 1, CMD_NONE, N_("Queue screen") },
190
-   { 2, CMD_NONE, nullptr },
191
-   { 0, CMD_PLAY, N_("Play") },
192
-   { 0, CMD_DELETE, nullptr },
193
-   { 0, CMD_CLEAR, nullptr },
194
-   { 0, CMD_LIST_MOVE_UP, N_("Move song up") },
195
-   { 0, CMD_LIST_MOVE_DOWN, N_("Move song down") },
196
-   { 0, CMD_ADD, nullptr },
197
-   { 0, CMD_SAVE_PLAYLIST, nullptr },
198
-   { 0, CMD_SCREEN_UPDATE, N_("Center") },
199
-   { 0, CMD_SELECT_PLAYING, nullptr },
200
-   { 0, CMD_TOGGLE_AUTOCENTER, nullptr },
201
-
202
-   { 0, CMD_NONE, nullptr },
203
-   { 0, CMD_NONE, nullptr },
204
-   { 1, CMD_NONE, N_("Browse screen") },
205
-   { 2, CMD_NONE, nullptr },
206
-   { 0, CMD_PLAY, N_("Enter directory/Select and play song") },
207
-   { 0, CMD_SELECT, nullptr },
208
-   { 0, CMD_ADD, N_("Append song to queue") },
209
-   { 0, CMD_SAVE_PLAYLIST, nullptr },
210
-   { 0, CMD_DELETE, N_("Delete playlist") },
211
-   { 0, CMD_GO_PARENT_DIRECTORY, nullptr },
212
-   { 0, CMD_GO_ROOT_DIRECTORY, nullptr },
213
-   { 0, CMD_SCREEN_UPDATE, nullptr },
214
+   Command::NONE,
215
+   Command::QUIT,
216
+
217
+   Command::NONE,
218
+   Command::NONE,
219
+   Heading(N_("Queue screen")),
220
+   HLINE,
221
+   { Command::PLAY, N_("Play") },
222
+   Command::DELETE,
223
+   Command::CLEAR,
224
+   Command::LIST_MOVE_UP,
225
+   Command::LIST_MOVE_DOWN,
226
+   Command::ADD,
227
+   Command::SAVE_PLAYLIST,
228
+   { Command::SCREEN_UPDATE, N_("Center") },
229
+   Command::SELECT_PLAYING,
230
+   Command::TOGGLE_AUTOCENTER,
231
+
232
+   Command::NONE,
233
+   Command::NONE,
234
+   Heading(N_("Browse screen")),
235
+   HLINE,
236
+   { Command::PLAY, N_("Enter directory/Select and play song") },
237
+   Command::SELECT,
238
+   Command::ADD,
239
+   Command::SAVE_PLAYLIST,
240
+   { Command::DELETE, N_("Delete playlist") },
241
+   Command::GO_PARENT_DIRECTORY,
242
+   Command::GO_ROOT_DIRECTORY,
243
+   Command::SCREEN_UPDATE,
244
 
245
 #ifdef ENABLE_SEARCH_SCREEN
246
-   { 0, CMD_NONE, nullptr },
247
-   { 0, CMD_NONE, nullptr },
248
-   { 1, CMD_NONE, N_("Search screen") },
249
-   { 2, CMD_NONE, nullptr },
250
-   { 0, CMD_SCREEN_SEARCH, N_("Search") },
251
-   { 0, CMD_PLAY, N_("Select and play") },
252
-   { 0, CMD_SELECT, nullptr },
253
-   { 0, CMD_ADD, N_("Append song to queue") },
254
-   { 0, CMD_SELECT_ALL,     nullptr },
255
-   { 0, CMD_SEARCH_MODE, nullptr },
256
+   Command::NONE,
257
+   Command::NONE,
258
+   Heading(N_("Search screen")),
259
+   HLINE,
260
+   { Command::SCREEN_SEARCH, N_("New search") },
261
+   { Command::PLAY, N_("Select and play") },
262
+   Command::SELECT,
263
+   { Command::ADD, N_("Append song to queue") },
264
+   Command::SELECT_ALL,
265
+   Command::SEARCH_MODE,
266
 #endif
267
 #ifdef ENABLE_LYRICS_SCREEN
268
-   { 0, CMD_NONE, nullptr },
269
-   { 0, CMD_NONE, nullptr },
270
-   { 1, CMD_NONE, N_("Lyrics screen") },
271
-   { 2, CMD_NONE, nullptr },
272
-   { 0, CMD_SCREEN_LYRICS, N_("View Lyrics") },
273
-   { 0, CMD_SELECT, N_("(Re)load lyrics") },
274
+   Command::NONE,
275
+   Command::NONE,
276
+   Heading(N_("Lyrics screen")),
277
+   HLINE,
278
+   { Command::SCREEN_LYRICS, N_("View Lyrics") },
279
+   { Command::SELECT, N_("(Re)load lyrics") },
280
    /* to translators: this hotkey aborts the retrieval of lyrics
281
       from the server */
282
-   { 0, CMD_INTERRUPT, N_("Interrupt retrieval") },
283
-   { 0, CMD_LYRICS_UPDATE, N_("Download lyrics for currently playing song") },
284
-   { 0, CMD_EDIT, N_("Add or edit lyrics") },
285
-   { 0, CMD_SAVE_PLAYLIST, N_("Save lyrics") },
286
-   { 0, CMD_DELETE, N_("Delete saved lyrics") },
287
+   { Command::INTERRUPT, N_("Interrupt retrieval") },
288
+   { Command::LYRICS_UPDATE, N_("Download lyrics for currently playing song") },
289
+   { Command::EDIT, N_("Add or edit lyrics") },
290
+   { Command::SAVE_PLAYLIST, N_("Save lyrics") },
291
+   { Command::DELETE, N_("Delete saved lyrics") },
292
 #endif
293
 #ifdef ENABLE_OUTPUTS_SCREEN
294
-   { 0, CMD_NONE, nullptr },
295
-   { 0, CMD_NONE, nullptr },
296
-   { 1, CMD_NONE, N_("Outputs screen") },
297
-   { 2, CMD_NONE, nullptr },
298
-   { 0, CMD_PLAY, N_("Enable/disable output") },
299
+   Command::NONE,
300
+   Command::NONE,
301
+   Heading(N_("Outputs screen")),
302
+   HLINE,
303
+   { Command::PLAY, N_("Enable/disable output") },
304
 #endif
305
 #ifdef ENABLE_CHAT_SCREEN
306
-   { 0, CMD_NONE, nullptr },
307
-   { 0, CMD_NONE, nullptr },
308
-   { 1, CMD_NONE, N_("Chat screen") },
309
-   { 2, CMD_NONE, nullptr },
310
-   { 0, CMD_PLAY, N_("Write a message") },
311
+   Command::NONE,
312
+   Command::NONE,
313
+   Heading(N_("Chat screen")),
314
+   HLINE,
315
+   { Command::PLAY, N_("Write a message") },
316
 #endif
317
 #ifdef ENABLE_KEYDEF_SCREEN
318
-   { 0, CMD_NONE, nullptr },
319
-   { 0, CMD_NONE, nullptr },
320
-   { 1, CMD_NONE, N_("Keydef screen") },
321
-   { 2, CMD_NONE, nullptr },
322
-   { 0, CMD_PLAY, N_("Edit keydefs for selected command") },
323
-   { 0, CMD_DELETE, N_("Remove selected keydef") },
324
-   { 0, CMD_ADD, N_("Add a keydef") },
325
-   { 0, CMD_GO_PARENT_DIRECTORY, N_("Go up a level") },
326
-   { 0, CMD_SAVE_PLAYLIST, N_("Apply and save changes") },
327
+   Command::NONE,
328
+   Command::NONE,
329
+   Heading(N_("Keydef screen")),
330
+   HLINE,
331
+   { Command::PLAY, N_("Edit keydefs for selected command") },
332
+   { Command::DELETE, N_("Remove selected keydef") },
333
+   { Command::ADD, N_("Add a keydef") },
334
+   { Command::GO_PARENT_DIRECTORY, N_("Go up a level") },
335
+   { Command::SAVE_PLAYLIST, N_("Apply and save changes") },
336
 #endif
337
 };
338
 
339
@@ -212,89 +231,90 @@
340
    /* virtual methods from class ListRenderer */
341
    void PaintListItem(WINDOW *w, unsigned i,
342
               unsigned y, unsigned width,
343
-              bool selected) const override;
344
+              bool selected) const noexcept override;
345
 
346
    /* virtual methods from class ListText */
347
    const char *GetListItemText(char *buffer, size_t size,
348
-                   unsigned i) const override;
349
+                   unsigned i) const noexcept override;
350
 
351
    /* virtual methods from class Page */
352
-   void Paint() const override;
353
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
354
+   void Paint() const noexcept override;
355
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
356
 
357
-   const char *GetTitle(char *, size_t) const override {
358
+   const char *GetTitle(char *, size_t) const noexcept override {
359
        return _("Help");
360
    }
361
 };
362
 
363
 const char *
364
-HelpPage::GetListItemText(char *, size_t, unsigned i) const
365
+HelpPage::GetListItemText(char *, size_t, unsigned i) const noexcept
366
 {
367
-   const struct help_text_row *row = &help_text[i];
368
+   const auto *row = &help_text[i];
369
 
370
    assert(i < ARRAY_SIZE(help_text));
371
 
372
    if (row->text != nullptr)
373
-       return _(row->text);
374
+       return gettext(row->text);
375
 
376
-   if (row->command != CMD_NONE)
377
+   if (row->command != Command::NONE)
378
        return get_key_description(row->command);
379
 
380
    return "";
381
 }
382
 
383
-static Page *
384
+static std::unique_ptr<Page>
385
 help_init(ScreenManager &screen, WINDOW *w, Size size)
386
 {
387
-   return new HelpPage(screen, w, size);
388
+   return std::make_unique<HelpPage>(screen, w, size);
389
 }
390
 
391
 void
392
 HelpPage::PaintListItem(WINDOW *w, unsigned i,
393
            unsigned y, unsigned width,
394
-           gcc_unused bool selected) const
395
+           gcc_unused bool selected) const noexcept
396
 {
397
-   const struct help_text_row *row = &help_text[i];
398
+   const auto *row = &help_text[i];
399
 
400
    assert(i < ARRAY_SIZE(help_text));
401
 
402
-   row_color(w, row->highlight ? COLOR_LIST_BOLD : COLOR_LIST, false);
403
+   row_color(w, row->highlight ? Style::LIST_BOLD : Style::LIST, false);
404
 
405
    wclrtoeol(w);
406
 
407
-   if (row->command == CMD_NONE) {
408
+   if (row->command == Command::NONE) {
409
        if (row->text != nullptr)
410
-           mvwaddstr(w, y, 6, _(row->text));
411
+           mvwaddstr(w, y, 6, gettext(row->text));
412
        else if (row->highlight == 2)
413
-           mvwhline(w, y, 3, '-', width - 6);
414
+           mvwhline(w, y, 3, ACS_HLINE, width - 6);
415
    } else {
416
-       const char *key = get_key_names(row->command, true);
417
+       const auto key =
418
+           GetGlobalKeyBindings().GetKeyNames(row->command);
419
 
420
-       if (utf8_width(key) < 20)
421
-           wmove(w, y, 20 - utf8_width(key));
422
-       waddstr(w, key);
423
+       if (StringWidthMB(key.c_str()) < 20)
424
+           wmove(w, y, 20 - StringWidthMB(key.c_str()));
425
+       waddstr(w, key.c_str());
426
        mvwaddch(w, y, 21, ':');
427
        mvwaddstr(w, y, 23,
428
              row->text != nullptr
429
-             ? _(row->text)
430
+             ? gettext(row->text)
431
              : get_key_description(row->command));
432
    }
433
 }
434
 
435
 void
436
-HelpPage::Paint() const
437
+HelpPage::Paint() const noexcept
438
 {
439
    lw.Paint(*this);
440
 }
441
 
442
 bool
443
-HelpPage::OnCommand(struct mpdclient &c, command_t cmd)
444
+HelpPage::OnCommand(struct mpdclient &c, Command cmd)
445
 {
446
    if (ListPage::OnCommand(c, cmd))
447
        return true;
448
 
449
    lw.SetCursor(lw.start);
450
-   if (screen_find(screen, &lw, cmd, *this)) {
451
+   if (screen_find(screen, lw, cmd, *this)) {
452
        /* center the row */
453
        lw.Center(lw.selected);
454
        SetDirty();
455
@@ -304,7 +324,9 @@
456
    return false;
457
 }
458
 
459
-const struct screen_functions screen_help = {
460
+const PageMeta screen_help = {
461
    "help",
462
+   N_("Help"),
463
+   Command::SCREEN_HELP,
464
    help_init,
465
 };
466
ncmpc-0.30.tar.xz/src/HelpPage.hxx -> ncmpc-0.32.tar.xz/src/HelpPage.hxx Changed
11
 
1
@@ -23,7 +23,8 @@
2
 #include "config.h"
3
 
4
 #ifdef ENABLE_HELP_SCREEN
5
-extern const struct screen_functions screen_help;
6
+struct PageMeta;
7
+extern const PageMeta screen_help;
8
 #endif
9
 
10
 #endif
11
ncmpc-0.32.tar.xz/src/Instance.cxx Added
72
 
1
@@ -0,0 +1,70 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Instance.hxx"
22
+#include "Options.hxx"
23
+#include "keyboard.hxx"
24
+#include "xterm_title.hxx"
25
+
26
+Instance::Instance()
27
+   :io_service(),
28
+#ifndef _WIN32
29
+    sigterm(io_service, SIGTERM, SIGINT, SIGHUP),
30
+    sigwinch(io_service, SIGWINCH, SIGCONT),
31
+#endif
32
+    client(io_service,
33
+       options.host.empty() ? nullptr : options.host.c_str(),
34
+       options.port,
35
+       options.timeout_ms,
36
+       options.password.empty() ? nullptr : options.password.c_str()),
37
+    seek(io_service, client),
38
+    reconnect_timer(io_service),
39
+    update_timer(io_service),
40
+#ifndef NCMPC_MINI
41
+    check_key_bindings_timer(io_service),
42
+#endif
43
+    screen_manager(io_service),
44
+#ifdef ENABLE_LIRC
45
+    lirc_input(io_service),
46
+#endif
47
+    user_input(io_service, *screen_manager.main_window.w)
48
+{
49
+   screen_manager.Init(&client);
50
+
51
+   sigterm.async_wait([this](const auto &, int){
52
+           this->io_service.stop();
53
+       });
54
+
55
+#ifndef _WIN32
56
+   AsyncWaitSigwinch();
57
+#endif
58
+}
59
+
60
+Instance::~Instance()
61
+{
62
+   screen_manager.Exit();
63
+}
64
+
65
+void
66
+Instance::Run()
67
+{
68
+   screen_manager.Update(client, seek);
69
+
70
+   io_service.run();
71
+}
72
ncmpc-0.32.tar.xz/src/Instance.hxx Added
162
 
1
@@ -0,0 +1,160 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef NCMPC_INSTANCE_HXX
22
+#define NCMPC_INSTANCE_HXX
23
+
24
+#include "config.h"
25
+#include "keyboard.hxx"
26
+#include "mpdclient.hxx"
27
+#include "DelayedSeek.hxx"
28
+#include "screen.hxx"
29
+
30
+#ifdef ENABLE_LIRC
31
+#include "lirc.hxx"
32
+#endif
33
+
34
+#include <boost/asio/io_service.hpp>
35
+#include <boost/asio/steady_timer.hpp>
36
+#ifndef _WIN32
37
+#include <boost/asio/signal_set.hpp>
38
+#endif
39
+
40
+/**
41
+ * A singleton holding global instance variables.
42
+ */
43
+class Instance {
44
+   boost::asio::io_service io_service;
45
+
46
+#ifndef _WIN32
47
+   boost::asio::signal_set sigterm, sigwinch;
48
+#endif
49
+
50
+   struct mpdclient client;
51
+
52
+   DelayedSeek seek;
53
+
54
+   /**
55
+    * This timer is installed when the connection to the MPD
56
+    * server is broken.  It tries to recover by reconnecting
57
+    * periodically.
58
+    */
59
+   boost::asio::steady_timer reconnect_timer;
60
+
61
+   boost::asio::steady_timer update_timer;
62
+   bool pending_update_timer = false;
63
+
64
+#ifndef NCMPC_MINI
65
+   boost::asio::steady_timer check_key_bindings_timer;
66
+#endif
67
+
68
+   ScreenManager screen_manager;
69
+
70
+#ifdef ENABLE_LIRC
71
+   LircInput lirc_input;
72
+#endif
73
+
74
+   UserInput user_input;
75
+
76
+public:
77
+   Instance();
78
+   ~Instance();
79
+
80
+   Instance(const Instance &) = delete;
81
+   Instance &operator=(const Instance &) = delete;
82
+
83
+   auto &get_io_service() {
84
+       return io_service;
85
+   }
86
+
87
+   auto &GetClient() {
88
+       return client;
89
+   }
90
+
91
+   auto &GetSeek() noexcept {
92
+       return seek;
93
+   }
94
+
95
+   auto &GetScreenManager() {
96
+       return screen_manager;
97
+   }
98
+
99
+   void UpdateClient() noexcept;
100
+
101
+   void Run();
102
+
103
+   template<typename D>
104
+   void ScheduleReconnect(const D &expiry_time) {
105
+       boost::system::error_code error;
106
+       reconnect_timer.expires_from_now(expiry_time, error);
107
+       reconnect_timer.async_wait(std::bind(&Instance::OnReconnectTimer,
108
+                            this,
109
+                            std::placeholders::_1));
110
+   }
111
+
112
+   void EnableUpdateTimer() noexcept {
113
+       if (!pending_update_timer)
114
+           ScheduleUpdateTimer();
115
+   }
116
+
117
+   void DisableUpdateTimer() noexcept {
118
+       if (pending_update_timer) {
119
+           pending_update_timer = false;
120
+           update_timer.cancel();
121
+       }
122
+   }
123
+
124
+#ifndef NCMPC_MINI
125
+   void ScheduleCheckKeyBindings() noexcept {
126
+       boost::system::error_code error;
127
+       check_key_bindings_timer.expires_from_now(std::chrono::seconds(10),
128
+                             error);
129
+       reconnect_timer.async_wait(std::bind(&Instance::OnCheckKeyBindings,
130
+                            this,
131
+                            std::placeholders::_1));
132
+   }
133
+#endif
134
+
135
+private:
136
+#ifndef _WIN32
137
+   void InitSignals();
138
+   void OnSigwinch();
139
+   void AsyncWaitSigwinch();
140
+#endif
141
+
142
+   void OnReconnectTimer(const boost::system::error_code &error) noexcept;
143
+
144
+   void OnUpdateTimer(const boost::system::error_code &error) noexcept;
145
+
146
+   void ScheduleUpdateTimer() noexcept {
147
+       pending_update_timer = true;
148
+       boost::system::error_code error;
149
+       update_timer.expires_from_now(std::chrono::milliseconds(500),
150
+                         error);
151
+       update_timer.async_wait(std::bind(&Instance::OnUpdateTimer,
152
+                         this,
153
+                         std::placeholders::_1));
154
+   }
155
+
156
+#ifndef NCMPC_MINI
157
+   void OnCheckKeyBindings(const boost::system::error_code &error) noexcept;
158
+#endif
159
+};
160
+
161
+#endif
162
ncmpc-0.32.tar.xz/src/KeyName.cxx Added
83
 
1
@@ -0,0 +1,81 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "KeyName.hxx"
22
+#include "i18n.h"
23
+
24
+#include <curses.h>
25
+
26
+const char *
27
+key2str(int key)
28
+{
29
+   switch(key) {
30
+       static char buf[32];
31
+
32
+   case 0:
33
+       return _("Undefined");
34
+   case ' ':
35
+       return _("Space");
36
+   case '\r':
37
+       return _("Enter");
38
+   case KEY_BACKSPACE:
39
+       return _("Backspace");
40
+   case KEY_DC:
41
+       return _("Delete");
42
+   case KEY_UP:
43
+       return _("Up");
44
+   case KEY_DOWN:
45
+       return _("Down");
46
+   case KEY_LEFT:
47
+       return _("Left");
48
+   case KEY_RIGHT:
49
+       return _("Right");
50
+   case KEY_HOME:
51
+       return _("Home");
52
+   case KEY_END:
53
+       return _("End");
54
+   case KEY_NPAGE:
55
+       return _("PageDown");
56
+   case KEY_PPAGE:
57
+       return _("PageUp");
58
+   case '\t':
59
+       return _("Tab");
60
+   case KEY_BTAB:
61
+       return _("Shift+Tab");
62
+   case '\x1b':
63
+       return _("Esc");
64
+   case KEY_IC:
65
+       return _("Insert");
66
+   default:
67
+       for (int i = 0; i <= 63; i++)
68
+           if (key == KEY_F(i)) {
69
+               snprintf(buf, 32, "F%d", i );
70
+               return buf;
71
+           }
72
+       if (!(key & ~037))
73
+           snprintf(buf, 32, _("Ctrl-%c"), 'A'+(key & 037)-1 );
74
+       else if ((key & ~037) == 224)
75
+           snprintf(buf, 32, _("Alt-%c"), 'A'+(key & 037)-1 );
76
+       else if (key > 32 && key < 256)
77
+           snprintf(buf, 32, "%c", key);
78
+       else
79
+           snprintf(buf, 32, "0x%03X", key);
80
+       return buf;
81
+   }
82
+}
83
ncmpc-0.32.tar.xz/src/KeyName.hxx Added
31
 
1
@@ -0,0 +1,29 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef KEY_NAME_HXX
22
+#define KEY_NAME_HXX
23
+
24
+#include "util/Compiler.h"
25
+
26
+gcc_pure
27
+const char *
28
+key2str(int key);
29
+
30
+#endif
31
ncmpc-0.30.tar.xz/src/ListPage.hxx -> ncmpc-0.32.tar.xz/src/ListPage.hxx Changed
15
 
1
@@ -36,11 +36,11 @@
2
 
3
 public:
4
    /* virtual methods from class Page */
5
-   void OnResize(Size size) override {
6
+   void OnResize(Size size) noexcept override {
7
        lw.Resize(size);
8
    }
9
 
10
-   bool OnCommand(struct mpdclient &, command_t cmd) override {
11
+   bool OnCommand(struct mpdclient &, Command cmd) override {
12
        if (lw.hide_cursor
13
            ? lw.HandleScrollCommand(cmd)
14
            : lw.HandleCommand(cmd)) {
15
ncmpc-0.30.tar.xz/src/ListRenderer.hxx -> ncmpc-0.32.tar.xz/src/ListRenderer.hxx Changed
17
 
1
@@ -20,13 +20,13 @@
2
 #ifndef LIST_RENDERER_HXX
3
 #define LIST_RENDERER_HXX
4
 
5
-#include "ncmpc_curses.h"
6
+#include <curses.h>
7
 
8
 class ListRenderer {
9
 public:
10
    virtual void PaintListItem(WINDOW *w, unsigned i,
11
                   unsigned y, unsigned width,
12
-                  bool selected) const = 0;
13
+                  bool selected) const noexcept = 0;
14
 };
15
 
16
 #endif
17
ncmpc-0.30.tar.xz/src/ListText.hxx -> ncmpc-0.32.tar.xz/src/ListText.hxx Changed
21
 
1
@@ -20,12 +20,18 @@
2
 #ifndef LIST_TEXT_HXX
3
 #define LIST_TEXT_HXX
4
 
5
+#include "util/Compiler.h"
6
+
7
 #include <stddef.h>
8
 
9
 class ListText {
10
 public:
11
+   /**
12
+    * @return the text in the locale charset
13
+    */
14
+   gcc_pure
15
    virtual const char *GetListItemText(char *buffer, size_t size,
16
-                       unsigned i) const = 0;
17
+                       unsigned i) const noexcept = 0;
18
 };
19
 
20
 #endif
21
ncmpc-0.30.tar.xz/src/ListWindow.cxx -> ncmpc-0.32.tar.xz/src/ListWindow.cxx Changed
481
 
1
@@ -21,25 +21,22 @@
2
 #include "ListRenderer.hxx"
3
 #include "ListText.hxx"
4
 #include "config.h"
5
-#include "options.hxx"
6
+#include "Options.hxx"
7
 #include "charset.hxx"
8
-#include "match.hxx"
9
-#include "command.hxx"
10
-#include "colors.hxx"
11
+#include "Match.hxx"
12
+#include "Command.hxx"
13
 #include "paint.hxx"
14
 #include "screen_status.hxx"
15
 #include "screen_utils.hxx"
16
 #include "i18n.h"
17
 
18
-#include <glib.h>
19
-
20
 #include <assert.h>
21
 #include <stdlib.h>
22
 #include <unistd.h>
23
 #include <string.h>
24
 
25
 void
26
-ListWindow::Reset()
27
+ListWindow::Reset() noexcept
28
 {
29
    selected = 0;
30
    range_selection = false;
31
@@ -48,7 +45,7 @@
32
 }
33
 
34
 unsigned
35
-ListWindow::ValidateIndex(unsigned i) const
36
+ListWindow::ValidateIndex(unsigned i) const noexcept
37
 {
38
    if (length == 0)
39
        return 0;
40
@@ -59,7 +56,7 @@
41
 }
42
 
43
 void
44
-ListWindow::CheckSelected()
45
+ListWindow::CheckSelected() noexcept
46
 {
47
    selected = ValidateIndex(selected);
48
 
49
@@ -68,14 +65,14 @@
50
 }
51
 
52
 void
53
-ListWindow::Resize(Size _size)
54
+ListWindow::Resize(Size _size) noexcept
55
 {
56
    size = _size;
57
    CheckOrigin();
58
 }
59
 
60
 void
61
-ListWindow::SetLength(unsigned _length)
62
+ListWindow::SetLength(unsigned _length) noexcept
63
 {
64
    if (_length == length)
65
        return;
66
@@ -87,7 +84,7 @@
67
 }
68
 
69
 void
70
-ListWindow::Center(unsigned n)
71
+ListWindow::Center(unsigned n) noexcept
72
 {
73
    if (n > size.height / 2)
74
        start = n - size.height / 2;
75
@@ -103,7 +100,7 @@
76
 }
77
 
78
 void
79
-ListWindow::ScrollTo(unsigned n)
80
+ListWindow::ScrollTo(unsigned n) noexcept
81
 {
82
    int new_start = start;
83
 
84
@@ -128,7 +125,7 @@
85
 }
86
 
87
 void
88
-ListWindow::SetCursor(unsigned i)
89
+ListWindow::SetCursor(unsigned i) noexcept
90
 {
91
    range_selection = false;
92
    selected = i;
93
@@ -138,7 +135,7 @@
94
 }
95
 
96
 void
97
-ListWindow::MoveCursor(unsigned n)
98
+ListWindow::MoveCursor(unsigned n) noexcept
99
 {
100
    selected = n;
101
 
102
@@ -147,7 +144,7 @@
103
 }
104
 
105
 void
106
-ListWindow::FetchCursor()
107
+ListWindow::FetchCursor() noexcept
108
 {
109
    if (start > 0 &&
110
        selected < start + options.scroll_offset)
111
@@ -158,7 +155,7 @@
112
 }
113
 
114
 ListWindowRange
115
-ListWindow::GetRange() const
116
+ListWindow::GetRange() const noexcept
117
 {
118
    if (length == 0) {
119
        /* empty list - no selection */
120
@@ -177,7 +174,7 @@
121
 }
122
 
123
 void
124
-ListWindow::MoveCursorNext()
125
+ListWindow::MoveCursorNext() noexcept
126
 {
127
    if (selected + 1 < length)
128
        MoveCursor(selected + 1);
129
@@ -186,7 +183,7 @@
130
 }
131
 
132
 void
133
-ListWindow::MoveCursorPrevious()
134
+ListWindow::MoveCursorPrevious() noexcept
135
 {
136
    if (selected > 0)
137
        MoveCursor(selected - 1);
138
@@ -195,7 +192,7 @@
139
 }
140
 
141
 void
142
-ListWindow::MoveCursorTop()
143
+ListWindow::MoveCursorTop() noexcept
144
 {
145
    if (start == 0)
146
        MoveCursor(start);
147
@@ -207,7 +204,7 @@
148
 }
149
 
150
 void
151
-ListWindow::MoveCursorMiddle()
152
+ListWindow::MoveCursorMiddle() noexcept
153
 {
154
    if (length >= size.height)
155
        MoveCursor(start + size.height / 2);
156
@@ -216,7 +213,7 @@
157
 }
158
 
159
 void
160
-ListWindow::MoveCursorBottom()
161
+ListWindow::MoveCursorBottom() noexcept
162
 {
163
    if (length >= size.height)
164
        if ((unsigned) options.scroll_offset * 2 >= size.height)
165
@@ -231,13 +228,13 @@
166
 }
167
 
168
 void
169
-ListWindow::MoveCursorFirst()
170
+ListWindow::MoveCursorFirst() noexcept
171
 {
172
    MoveCursor(0);
173
 }
174
 
175
 void
176
-ListWindow::MoveCursorLast()
177
+ListWindow::MoveCursorLast() noexcept
178
 {
179
    if (length > 0)
180
        MoveCursor(length - 1);
181
@@ -246,7 +243,7 @@
182
 }
183
 
184
 void
185
-ListWindow::MoveCursorNextPage()
186
+ListWindow::MoveCursorNextPage() noexcept
187
 {
188
    if (size.height < 2)
189
        return;
190
@@ -257,7 +254,7 @@
191
 }
192
 
193
 void
194
-ListWindow::MoveCursorPreviousPage()
195
+ListWindow::MoveCursorPreviousPage() noexcept
196
 {
197
    if (size.height < 2)
198
        return;
199
@@ -268,7 +265,7 @@
200
 }
201
 
202
 void
203
-ListWindow::ScrollUp(unsigned n)
204
+ListWindow::ScrollUp(unsigned n) noexcept
205
 {
206
    if (start > 0) {
207
        if (n > start)
208
@@ -281,7 +278,7 @@
209
 }
210
 
211
 void
212
-ListWindow::ScrollDown(unsigned n)
213
+ListWindow::ScrollDown(unsigned n) noexcept
214
 {
215
    if (start + size.height < length) {
216
        if (start + size.height + n > length - 1)
217
@@ -294,7 +291,7 @@
218
 }
219
 
220
 void
221
-ListWindow::Paint(const ListRenderer &renderer) const
222
+ListWindow::Paint(const ListRenderer &renderer) const noexcept
223
 {
224
    bool show_cursor = !hide_cursor &&
225
        (!options.hardware_cursor || range_selection);
226
@@ -331,12 +328,16 @@
227
 ListWindow::Find(const ListText &text,
228
         const char *str,
229
         bool wrap,
230
-        bool bell_on_wrap)
231
+        bool bell_on_wrap) noexcept
232
 {
233
    unsigned i = selected + 1;
234
 
235
    assert(str != nullptr);
236
 
237
+   MatchExpression m;
238
+   if (!m.Compile(str, false))
239
+       return false;
240
+
241
    do {
242
        while (i < length) {
243
            char buffer[1024];
244
@@ -345,7 +346,7 @@
245
                             i);
246
            assert(label != nullptr);
247
 
248
-           if (match_line(label, str)) {
249
+           if (m(label)) {
250
                MoveCursor(i);
251
                return true;
252
            }
253
@@ -370,7 +371,7 @@
254
 ListWindow::ReverseFind(const ListText &text,
255
            const char *str,
256
            bool wrap,
257
-           bool bell_on_wrap)
258
+           bool bell_on_wrap) noexcept
259
 {
260
    int i = selected - 1;
261
 
262
@@ -379,6 +380,10 @@
263
    if (length == 0)
264
        return false;
265
 
266
+   MatchExpression m;
267
+   if (!m.Compile(str, false))
268
+       return false;
269
+
270
    do {
271
        while (i >= 0) {
272
            char buffer[1024];
273
@@ -387,7 +392,7 @@
274
                             i);
275
            assert(label != nullptr);
276
 
277
-           if (match_line(label, str)) {
278
+           if (m(label)) {
279
                MoveCursor(i);
280
                return true;
281
            }
282
@@ -406,34 +411,13 @@
283
    return false;
284
 }
285
 
286
-#ifdef NCMPC_MINI
287
-bool
288
-ListWindow::Jump(const ListText &text, const char *str)
289
-{
290
-   assert(str != nullptr);
291
-
292
-   for (unsigned i = 0; i < length; i++) {
293
-       char buffer[1024];
294
-       const char *label =
295
-           text.GetListItemText(buffer, sizeof(buffer),
296
-                        i);
297
-       assert(label != nullptr);
298
-
299
-       if (g_ascii_strncasecmp(label, str, strlen(str)) == 0) {
300
-           MoveCursor(i);
301
-           return true;
302
-       }
303
-   }
304
-   return false;
305
-}
306
-#else
307
 bool
308
-ListWindow::Jump(const ListText &text, const char *str)
309
+ListWindow::Jump(const ListText &text, const char *str) noexcept
310
 {
311
    assert(str != nullptr);
312
 
313
-   GRegex *regex = compile_regex(str, options.jump_prefix_only);
314
-   if (regex == nullptr)
315
+   MatchExpression m;
316
+   if (!m.Compile(str, options.jump_prefix_only))
317
        return false;
318
 
319
    for (unsigned i = 0; i < length; i++) {
320
@@ -443,50 +427,48 @@
321
                         i);
322
        assert(label != nullptr);
323
 
324
-       if (match_regex(regex, label)) {
325
-           g_regex_unref(regex);
326
+       if (m(label)) {
327
            MoveCursor(i);
328
            return true;
329
        }
330
    }
331
-   g_regex_unref(regex);
332
+
333
    return false;
334
 }
335
-#endif
336
 
337
 /* perform basic list window commands (movement) */
338
 bool
339
-ListWindow::HandleCommand(command_t cmd)
340
+ListWindow::HandleCommand(Command cmd) noexcept
341
 {
342
    switch (cmd) {
343
-   case CMD_LIST_PREVIOUS:
344
+   case Command::LIST_PREVIOUS:
345
        MoveCursorPrevious();
346
        break;
347
-   case CMD_LIST_NEXT:
348
+   case Command::LIST_NEXT:
349
        MoveCursorNext();
350
        break;
351
-   case CMD_LIST_TOP:
352
+   case Command::LIST_TOP:
353
        MoveCursorTop();
354
        break;
355
-   case CMD_LIST_MIDDLE:
356
+   case Command::LIST_MIDDLE:
357
        MoveCursorMiddle();
358
        break;
359
-   case CMD_LIST_BOTTOM:
360
+   case Command::LIST_BOTTOM:
361
        MoveCursorBottom();
362
        break;
363
-   case CMD_LIST_FIRST:
364
+   case Command::LIST_FIRST:
365
        MoveCursorFirst();
366
        break;
367
-   case CMD_LIST_LAST:
368
+   case Command::LIST_LAST:
369
        MoveCursorLast();
370
        break;
371
-   case CMD_LIST_NEXT_PAGE:
372
+   case Command::LIST_NEXT_PAGE:
373
        MoveCursorNextPage();
374
        break;
375
-   case CMD_LIST_PREVIOUS_PAGE:
376
+   case Command::LIST_PREVIOUS_PAGE:
377
        MoveCursorPreviousPage();
378
        break;
379
-   case CMD_LIST_RANGE_SELECT:
380
+   case Command::LIST_RANGE_SELECT:
381
        if(range_selection)
382
        {
383
            screen_status_message(_("Range selection disabled"));
384
@@ -499,16 +481,16 @@
385
            range_selection = true;
386
        }
387
        break;
388
-   case CMD_LIST_SCROLL_UP_LINE:
389
+   case Command::LIST_SCROLL_UP_LINE:
390
        ScrollUp(1);
391
        break;
392
-   case CMD_LIST_SCROLL_DOWN_LINE:
393
+   case Command::LIST_SCROLL_DOWN_LINE:
394
        ScrollDown(1);
395
        break;
396
-   case CMD_LIST_SCROLL_UP_HALF:
397
+   case Command::LIST_SCROLL_UP_HALF:
398
        ScrollUp((size.height - 1) / 2);
399
        break;
400
-   case CMD_LIST_SCROLL_DOWN_HALF:
401
+   case Command::LIST_SCROLL_DOWN_HALF:
402
        ScrollDown((size.height - 1) / 2);
403
        break;
404
    default:
405
@@ -519,33 +501,33 @@
406
 }
407
 
408
 bool
409
-ListWindow::HandleScrollCommand(command_t cmd)
410
+ListWindow::HandleScrollCommand(Command cmd) noexcept
411
 {
412
    switch (cmd) {
413
-   case CMD_LIST_SCROLL_UP_LINE:
414
-   case CMD_LIST_PREVIOUS:
415
+   case Command::LIST_SCROLL_UP_LINE:
416
+   case Command::LIST_PREVIOUS:
417
        if (start > 0)
418
            start--;
419
        break;
420
 
421
-   case CMD_LIST_SCROLL_DOWN_LINE:
422
-   case CMD_LIST_NEXT:
423
+   case Command::LIST_SCROLL_DOWN_LINE:
424
+   case Command::LIST_NEXT:
425
        if (start + size.height < length)
426
            start++;
427
        break;
428
 
429
-   case CMD_LIST_FIRST:
430
+   case Command::LIST_FIRST:
431
        start = 0;
432
        break;
433
 
434
-   case CMD_LIST_LAST:
435
+   case Command::LIST_LAST:
436
        if (length > size.height)
437
            start = length - size.height;
438
        else
439
            start = 0;
440
        break;
441
 
442
-   case CMD_LIST_NEXT_PAGE:
443
+   case Command::LIST_NEXT_PAGE:
444
        start += size.height;
445
        if (start + size.height > length) {
446
            if (length > size.height)
447
@@ -555,21 +537,21 @@
448
        }
449
        break;
450
 
451
-   case CMD_LIST_PREVIOUS_PAGE:
452
+   case Command::LIST_PREVIOUS_PAGE:
453
        if (start > size.height)
454
            start -= size.height;
455
        else
456
            start = 0;
457
        break;
458
 
459
-   case CMD_LIST_SCROLL_UP_HALF:
460
+   case Command::LIST_SCROLL_UP_HALF:
461
        if (start > (size.height - 1) / 2)
462
            start -= (size.height - 1) / 2;
463
        else
464
            start = 0;
465
        break;
466
 
467
-   case CMD_LIST_SCROLL_DOWN_HALF:
468
+   case Command::LIST_SCROLL_DOWN_HALF:
469
        start += (size.height - 1) / 2;
470
        if (start + size.height > length) {
471
            if (length > size.height)
472
@@ -588,7 +570,7 @@
473
 
474
 #ifdef HAVE_GETMOUSE
475
 bool
476
-ListWindow::HandleMouse(mmask_t bstate, int y)
477
+ListWindow::HandleMouse(mmask_t bstate, int y) noexcept
478
 {
479
    /* if the even occurred above the list window move up */
480
    if (y < 0) {
481
ncmpc-0.30.tar.xz/src/ListWindow.hxx -> ncmpc-0.32.tar.xz/src/ListWindow.hxx Changed
222
 
1
@@ -21,11 +21,12 @@
2
 #define LIST_WINDOW_HXX
3
 
4
 #include "config.h"
5
-#include "command.hxx"
6
-#include "colors.hxx"
7
-#include "ncmpc_curses.h"
8
 #include "Size.hxx"
9
+#include "util/Compiler.h"
10
 
11
+#include <curses.h>
12
+
13
+enum class Command : unsigned;
14
 class ListText;
15
 class ListRenderer;
16
 
17
@@ -44,45 +45,46 @@
18
     */
19
    unsigned end_index;
20
 
21
-   constexpr bool empty() const {
22
+   constexpr bool empty() const noexcept {
23
        return start_index >= end_index;
24
    }
25
 
26
-   constexpr bool Contains(unsigned i) const {
27
+   constexpr bool Contains(unsigned i) const noexcept {
28
        return i >= start_index && i < end_index;
29
    }
30
 
31
    struct const_iterator {
32
        unsigned value;
33
 
34
-       const_iterator &operator++() {
35
+       const_iterator &operator++() noexcept {
36
            ++value;
37
            return *this;
38
        }
39
 
40
-       constexpr bool operator==(const const_iterator &other) const {
41
+       constexpr bool operator==(const const_iterator &other) const noexcept {
42
            return value == other.value;
43
        }
44
 
45
-       constexpr bool operator!=(const const_iterator &other) const {
46
+       constexpr bool operator!=(const const_iterator &other) const noexcept {
47
            return !(*this == other);
48
        }
49
 
50
-       const unsigned &operator *() const {
51
+       const unsigned &operator *() const noexcept {
52
            return value;
53
        }
54
    };
55
 
56
-   constexpr const_iterator begin() const {
57
+   constexpr const_iterator begin() const noexcept {
58
        return {start_index};
59
    }
60
 
61
-   constexpr const_iterator end() const {
62
+   constexpr const_iterator end() const noexcept {
63
        return {end_index};
64
    }
65
 };
66
 
67
-struct ListWindow {
68
+class ListWindow {
69
+public:
70
    WINDOW *w;
71
    Size size;
72
 
73
@@ -106,75 +108,75 @@
74
 
75
    bool hide_cursor = false;
76
 
77
-   ListWindow(WINDOW *_w, Size _size)
78
+   ListWindow(WINDOW *_w, Size _size) noexcept
79
        :w(_w), size(_size) {}
80
 
81
    /** reset a list window (selected=0, start=0) */
82
-   void Reset();
83
+   void Reset() noexcept;
84
 
85
-   void Resize(Size _size);
86
+   void Resize(Size _size) noexcept;
87
 
88
-   void SetLength(unsigned length);
89
+   void SetLength(unsigned length) noexcept;
90
 
91
-   void Paint(const ListRenderer &renderer) const;
92
+   void Paint(const ListRenderer &renderer) const noexcept;
93
 
94
    /** perform basic list window commands (movement) */
95
-   bool HandleCommand(command_t cmd);
96
+   bool HandleCommand(Command cmd) noexcept;
97
 
98
    /**
99
     * Scroll the window.  Returns true if the command has been
100
     * consumed.
101
     */
102
-   bool HandleScrollCommand(command_t cmd);
103
+   bool HandleScrollCommand(Command cmd) noexcept;
104
 
105
 #ifdef HAVE_GETMOUSE
106
    /**
107
     * The mouse was clicked.  Check if the list should be scrolled
108
     * Returns non-zero if the mouse event has been handled.
109
     */
110
-   bool HandleMouse(mmask_t bstate, int y);
111
+   bool HandleMouse(mmask_t bstate, int y) noexcept;
112
 #endif
113
 
114
    /**
115
     * Centers the visible range around item n on the list.
116
     */
117
-   void Center(unsigned n);
118
+   void Center(unsigned n) noexcept;
119
 
120
    /**
121
     * Scrolls the view to item n, as if the cursor would have been moved
122
     * to the position.
123
     */
124
-   void ScrollTo(unsigned n);
125
+   void ScrollTo(unsigned n) noexcept;
126
 
127
    /**
128
     * Sets the position of the cursor.  Disables range selection.
129
     */
130
-   void SetCursor(unsigned i);
131
+   void SetCursor(unsigned i) noexcept;
132
 
133
    /**
134
     * Moves the cursor.  Modifies the range if range selection is
135
     * enabled.
136
     */
137
-   void MoveCursor(unsigned n);
138
+   void MoveCursor(unsigned n) noexcept;
139
 
140
-   void MoveCursorNext();
141
-   void MoveCursorPrevious();
142
-   void MoveCursorTop();
143
-   void MoveCursorMiddle();
144
-   void MoveCursorBottom();
145
-   void MoveCursorFirst();
146
-   void MoveCursorLast();
147
-   void MoveCursorNextPage();
148
-   void MoveCursorPreviousPage();
149
+   void MoveCursorNext() noexcept;
150
+   void MoveCursorPrevious() noexcept;
151
+   void MoveCursorTop() noexcept;
152
+   void MoveCursorMiddle() noexcept;
153
+   void MoveCursorBottom() noexcept;
154
+   void MoveCursorFirst() noexcept;
155
+   void MoveCursorLast() noexcept;
156
+   void MoveCursorNextPage() noexcept;
157
+   void MoveCursorPreviousPage() noexcept;
158
 
159
-   void ScrollUp(unsigned n);
160
-   void ScrollDown(unsigned n);
161
+   void ScrollUp(unsigned n) noexcept;
162
+   void ScrollDown(unsigned n) noexcept;
163
 
164
    /**
165
     * Ensures that the cursor is visible on the screen, i.e. it is not
166
     * outside the current scrolling range.
167
     */
168
-   void FetchCursor();
169
+   void FetchCursor() noexcept;
170
 
171
    /**
172
     * Determines the lower and upper bound of the range selection.  If
173
@@ -182,7 +184,7 @@
174
     * length is 1).
175
     */
176
    gcc_pure
177
-   ListWindowRange GetRange() const;
178
+   ListWindowRange GetRange() const noexcept;
179
 
180
    /**
181
     * Find a string in a list window.
182
@@ -190,7 +192,7 @@
183
    bool Find(const ListText &text,
184
          const char *str,
185
          bool wrap,
186
-         bool bell_on_wrap);
187
+         bool bell_on_wrap) noexcept;
188
 
189
    /**
190
     * Find a string in a list window (reversed).
191
@@ -198,25 +200,25 @@
192
    bool ReverseFind(const ListText &text,
193
             const char *str,
194
             bool wrap,
195
-            bool bell_on_wrap);
196
+            bool bell_on_wrap) noexcept;
197
 
198
    /**
199
     * Find a string in a list window which begins with the given
200
     * characters in *str.
201
     */
202
-   bool Jump(const ListText &text, const char *str);
203
+   bool Jump(const ListText &text, const char *str) noexcept;
204
 
205
 private:
206
    gcc_pure
207
-   unsigned ValidateIndex(unsigned i) const;
208
+   unsigned ValidateIndex(unsigned i) const noexcept;
209
 
210
-   void CheckSelected();
211
+   void CheckSelected() noexcept;
212
 
213
    /**
214
     * Scroll after the cursor was moved, the list was changed or
215
     * the window was resized.
216
     */
217
-   void CheckOrigin() {
218
+   void CheckOrigin() noexcept {
219
        ScrollTo(selected);
220
    }
221
 };
222
ncmpc-0.30.tar.xz/src/LyricsPage.cxx -> ncmpc-0.32.tar.xz/src/LyricsPage.cxx Changed
413
 
1
@@ -18,13 +18,12 @@
2
  */
3
 
4
 #include "LyricsPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen_status.hxx"
8
 #include "FileBrowserPage.hxx"
9
 #include "SongPage.hxx"
10
-#include "Event.hxx"
11
 #include "i18n.h"
12
-#include "options.hxx"
13
+#include "Options.hxx"
14
 #include "mpdclient.hxx"
15
 #include "screen.hxx"
16
 #include "lyrics.hxx"
17
@@ -32,13 +31,16 @@
18
 #include "screen_utils.hxx"
19
 #include "ncu.hxx"
20
 
21
+#include <boost/asio/steady_timer.hpp>
22
+
23
+#include <string>
24
+
25
 #include <assert.h>
26
 #include <errno.h>
27
 #include <sys/stat.h>
28
 #include <sys/wait.h>
29
 #include <stdlib.h>
30
 #include <string.h>
31
-#include <glib.h>
32
 #include <unistd.h>
33
 #include <stdio.h>
34
 
35
@@ -51,20 +53,31 @@
36
 
37
    struct mpd_song *song = nullptr;
38
 
39
-   char *artist = nullptr, *title = nullptr, *plugin_name = nullptr;
40
+   /**
41
+    * These are pointers into the #mpd_song above, and will
42
+    * become invalid as soon as the mpd_song_free() is called.
43
+    */
44
+   const char *artist = nullptr, *title = nullptr;
45
+
46
+   std::string plugin_name;
47
 
48
    PluginCycle *loader = nullptr;
49
 
50
-   guint loader_timeout = 0;
51
+   boost::asio::steady_timer loader_timeout;
52
 
53
 public:
54
    LyricsPage(ScreenManager &_screen, WINDOW *w, Size size)
55
-       :TextPage(_screen, w, size) {}
56
+       :TextPage(_screen, w, size),
57
+        loader_timeout(_screen.get_io_service()) {}
58
 
59
    ~LyricsPage() override {
60
        Cancel();
61
    }
62
 
63
+   auto &get_io_service() noexcept {
64
+       return loader_timeout.get_io_service();
65
+   }
66
+
67
 private:
68
    void Cancel();
69
 
70
@@ -80,7 +93,14 @@
71
 
72
    void Set(const char *s);
73
 
74
-   void Load(const struct mpd_song *song);
75
+   void Load(const struct mpd_song &song) noexcept;
76
+   void MaybeLoad(const struct mpd_song &new_song) noexcept;
77
+
78
+   void MaybeLoad(const struct mpd_song *new_song) noexcept {
79
+       if (new_song != nullptr)
80
+           MaybeLoad(*new_song);
81
+   }
82
+
83
    void Reload();
84
 
85
    bool Save();
86
@@ -98,16 +118,14 @@
87
    void PluginCallback(std::string &&result, bool success,
88
                const char *plugin_name);
89
 
90
-   bool TimeoutCallback();
91
+   void OnTimeout(const boost::system::error_code &error) noexcept;
92
 
93
 public:
94
    /* virtual methods from class Page */
95
-   void OnOpen(struct mpdclient &c) override;
96
-
97
-   void Update(struct mpdclient &c, unsigned events) override;
98
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
99
-
100
-   const char *GetTitle(char *, size_t) const override;
101
+   void OnOpen(struct mpdclient &c) noexcept override;
102
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
103
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
104
+   const char *GetTitle(char *, size_t) const noexcept override;
105
 };
106
 
107
 void
108
@@ -118,23 +136,15 @@
109
        loader = nullptr;
110
    }
111
 
112
-   if (loader_timeout != 0) {
113
-       g_source_remove(loader_timeout);
114
-       loader_timeout = 0;
115
-   }
116
-
117
-   g_free(plugin_name);
118
-   plugin_name = nullptr;
119
-
120
-   g_free(artist);
121
-   artist = nullptr;
122
+   loader_timeout.cancel();
123
 
124
-   g_free(title);
125
-   title = nullptr;
126
+   plugin_name.clear();
127
 
128
    if (song != nullptr) {
129
        mpd_song_free(song);
130
        song = nullptr;
131
+       artist = nullptr;
132
+       title = nullptr;
133
    }
134
 }
135
 
136
@@ -222,7 +232,10 @@
137
 {
138
    assert(loader != nullptr);
139
 
140
-   plugin_name = g_strdup(_plugin_name);
141
+   if (_plugin_name != nullptr)
142
+       plugin_name = _plugin_name;
143
+   else
144
+       plugin_name.clear();
145
 
146
    /* Display result, which may be lyrics or error messages */
147
    Set(result.c_str());
148
@@ -236,79 +249,80 @@
149
        screen_status_message (_("No lyrics"));
150
    }
151
 
152
-   if (loader_timeout != 0) {
153
-       g_source_remove(loader_timeout);
154
-       loader_timeout = 0;
155
-   }
156
+   loader_timeout.cancel();
157
 
158
    plugin_stop(loader);
159
    loader = nullptr;
160
 }
161
 
162
-inline bool
163
-LyricsPage::TimeoutCallback()
164
+void
165
+LyricsPage::OnTimeout(const boost::system::error_code &error) noexcept
166
 {
167
+   if (error)
168
+       return;
169
+
170
    plugin_stop(loader);
171
    loader = nullptr;
172
 
173
    screen_status_printf(_("Lyrics timeout occurred after %d seconds"),
174
-                options.lyrics_timeout);
175
-
176
-   loader_timeout = 0;
177
-   return false;
178
+                (int)std::chrono::duration_cast<std::chrono::seconds>(options.lyrics_timeout).count());
179
 }
180
 
181
 void
182
-LyricsPage::Load(const struct mpd_song *_song)
183
+LyricsPage::Load(const struct mpd_song &_song) noexcept
184
 {
185
-   assert(_song != nullptr);
186
-
187
    Cancel();
188
    Clear();
189
 
190
-   const char *_artist = mpd_song_get_tag(_song, MPD_TAG_ARTIST, 0);
191
-   const char *_title = mpd_song_get_tag(_song, MPD_TAG_TITLE, 0);
192
+   song = mpd_song_dup(&_song);
193
+   artist = mpd_song_get_tag(song, MPD_TAG_ARTIST, 0);
194
+   title = mpd_song_get_tag(song, MPD_TAG_TITLE, 0);
195
 
196
-   song = mpd_song_dup(_song);
197
-   artist = g_strdup(_artist);
198
-   title = g_strdup(_title);
199
+   loader = lyrics_load(get_io_service(),
200
+                artist, title, PluginCallback, this);
201
 
202
-   loader = lyrics_load(artist, title, PluginCallback, this);
203
-
204
-   if (options.lyrics_timeout != 0) {
205
-       loader_timeout = ScheduleTimeout<LyricsPage,
206
-                        &LyricsPage::TimeoutCallback>(std::chrono::seconds(options.lyrics_timeout),
207
-                                          *this);
208
+   if (options.lyrics_timeout > std::chrono::steady_clock::duration::zero()) {
209
+       boost::system::error_code error;
210
+       loader_timeout.expires_from_now(options.lyrics_timeout,
211
+                       error);
212
+       loader_timeout.async_wait(std::bind(&LyricsPage::OnTimeout, this,
213
+                            std::placeholders::_1));
214
    }
215
 }
216
 
217
 void
218
+LyricsPage::MaybeLoad(const struct mpd_song &new_song) noexcept
219
+{
220
+   if (song == nullptr ||
221
+       strcmp(mpd_song_get_uri(&new_song),
222
+          mpd_song_get_uri(song)) != 0)
223
+       Load(new_song);
224
+}
225
+
226
+void
227
 LyricsPage::Reload()
228
 {
229
    if (loader == nullptr && artist != nullptr && title != nullptr) {
230
        reloading = true;
231
-       loader = lyrics_load(artist, title, PluginCallback, nullptr);
232
+       loader = lyrics_load(get_io_service(),
233
+                    artist, title, PluginCallback, nullptr);
234
        Repaint();
235
    }
236
 }
237
 
238
-static Page *
239
+static std::unique_ptr<Page>
240
 lyrics_screen_init(ScreenManager &_screen, WINDOW *w, Size size)
241
 {
242
-   return new LyricsPage(_screen, w, size);
243
+   return std::make_unique<LyricsPage>(_screen, w, size);
244
 }
245
 
246
 void
247
-LyricsPage::OnOpen(struct mpdclient &c)
248
+LyricsPage::OnOpen(struct mpdclient &c) noexcept
249
 {
250
    const struct mpd_song *next_song_c =
251
-       next_song != nullptr ? next_song : c.song;
252
+       next_song != nullptr ? next_song : c.GetPlayingSong();
253
 
254
-   if (next_song_c != nullptr &&
255
-       (song == nullptr ||
256
-        strcmp(mpd_song_get_uri(next_song_c),
257
-           mpd_song_get_uri(song)) != 0))
258
-       Load(next_song_c);
259
+   MaybeLoad(next_song_c);
260
 
261
    if (next_song != nullptr) {
262
        mpd_song_free(next_song);
263
@@ -317,20 +331,14 @@
264
 }
265
 
266
 void
267
-LyricsPage::Update(struct mpdclient &c, unsigned)
268
+LyricsPage::Update(struct mpdclient &c, unsigned) noexcept
269
 {
270
-   if (!follow)
271
-       return;
272
-
273
-   if (c.song != nullptr &&
274
-       (song == nullptr ||
275
-        strcmp(mpd_song_get_uri(c.song),
276
-           mpd_song_get_uri(song)) != 0))
277
-       Load(c.song);
278
+   if (follow)
279
+       MaybeLoad(c.GetPlayingSong());
280
 }
281
 
282
 const char *
283
-LyricsPage::GetTitle(char *str, size_t size) const
284
+LyricsPage::GetTitle(char *str, size_t size) const noexcept
285
 {
286
    if (loader != nullptr) {
287
        snprintf(str, size, "%s (%s)",
288
@@ -345,9 +353,10 @@
289
                 _("Lyrics"),
290
                 artist, title);
291
 
292
-       if (options.lyrics_show_plugin && plugin_name != nullptr &&
293
+       if (options.lyrics_show_plugin && !plugin_name.empty() &&
294
            (unsigned int) n < size - 1)
295
-           snprintf(str + n, size - n, " (%s)", plugin_name);
296
+           snprintf(str + n, size - n, " (%s)",
297
+                plugin_name.c_str());
298
 
299
        return str;
300
    } else
301
@@ -383,7 +392,7 @@
302
    int status;
303
    pid_t pid = fork();
304
    if (pid == -1) {
305
-       screen_status_printf(("%s (%s)"), _("Can't start editor"), g_strerror(errno));
306
+       screen_status_printf(("%s (%s)"), _("Can't start editor"), strerror(errno));
307
        ncu_init();
308
        return;
309
    } else if (pid == 0) {
310
@@ -409,59 +418,56 @@
311
        else if (WEXITSTATUS(status) == 127)
312
            screen_status_message(_("Can't start editor"));
313
        else
314
-           screen_status_printf(_("Editor exited unexpectedly (%d)"),
315
+           screen_status_printf("%s (%d)",
316
+                        _("Editor exited unexpectedly"),
317
                         WEXITSTATUS(status));
318
    } else if (WIFSIGNALED(status)) {
319
-       screen_status_printf(_("Editor exited unexpectedly (signal %d)"),
320
+       screen_status_printf("%s (signal %d)",
321
+                    _("Editor exited unexpectedly"),
322
                     WTERMSIG(status));
323
    }
324
 }
325
 
326
 bool
327
-LyricsPage::OnCommand(struct mpdclient &c, command_t cmd)
328
+LyricsPage::OnCommand(struct mpdclient &c, Command cmd)
329
 {
330
    if (TextPage::OnCommand(c, cmd))
331
        return true;
332
 
333
    switch(cmd) {
334
-   case CMD_INTERRUPT:
335
+   case Command::INTERRUPT:
336
        if (loader != nullptr) {
337
            Cancel();
338
            Clear();
339
        }
340
        return true;
341
-   case CMD_SAVE_PLAYLIST:
342
+   case Command::SAVE_PLAYLIST:
343
        if (loader == nullptr && artist != nullptr &&
344
            title != nullptr && Save())
345
            /* lyrics for the song were saved on hard disk */
346
            screen_status_message (_("Lyrics saved"));
347
        return true;
348
-   case CMD_DELETE:
349
+   case Command::DELETE:
350
        if (loader == nullptr && artist != nullptr &&
351
            title != nullptr) {
352
-           switch (Delete()) {
353
-           case true:
354
-               screen_status_message (_("Lyrics deleted"));
355
-               break;
356
-           case false:
357
-               screen_status_message (_("No saved lyrics"));
358
-               break;
359
-           }
360
+           screen_status_message(Delete()
361
+                         ? _("Lyrics deleted")
362
+                         : _("No saved lyrics"));
363
        }
364
        return true;
365
-   case CMD_LYRICS_UPDATE:
366
-       if (c.song != nullptr)
367
-           Load(c.song);
368
+   case Command::LYRICS_UPDATE:
369
+       if (c.GetPlayingSong() != nullptr)
370
+           Load(*c.GetPlayingSong());
371
        return true;
372
-   case CMD_EDIT:
373
+   case Command::EDIT:
374
        Edit();
375
        return true;
376
-   case CMD_SELECT:
377
+   case Command::SELECT:
378
        Reload();
379
        return true;
380
 
381
 #ifdef ENABLE_SONG_SCREEN
382
-   case CMD_SCREEN_SONG:
383
+   case Command::SCREEN_SONG:
384
        if (song != nullptr) {
385
            screen_song_switch(screen, c, *song);
386
            return true;
387
@@ -469,11 +475,11 @@
388
 
389
        break;
390
 #endif
391
-   case CMD_SCREEN_SWAP:
392
+   case Command::SCREEN_SWAP:
393
        screen.Swap(c, song);
394
        return true;
395
 
396
-   case CMD_LOCATE:
397
+   case Command::LOCATE:
398
        if (song != nullptr) {
399
            screen_file_goto_song(screen, c, *song);
400
            return true;
401
@@ -488,8 +494,10 @@
402
    return false;
403
 }
404
 
405
-const struct screen_functions screen_lyrics = {
406
+const PageMeta screen_lyrics = {
407
    "lyrics",
408
+   N_("Lyrics"),
409
+   Command::SCREEN_LYRICS,
410
    lyrics_screen_init,
411
 };
412
 
413
ncmpc-0.30.tar.xz/src/LyricsPage.hxx -> ncmpc-0.32.tar.xz/src/LyricsPage.hxx Changed
13
 
1
@@ -26,9 +26,10 @@
2
 
3
 struct mpdclient;
4
 struct mpd_song;
5
+struct PageMeta;
6
 class ScreenManager;
7
 
8
-extern const struct screen_functions screen_lyrics;
9
+extern const PageMeta screen_lyrics;
10
 
11
 void
12
 screen_lyrics_switch(ScreenManager &_screen, struct mpdclient &c,
13
ncmpc-0.30.tar.xz/src/Main.cxx -> ncmpc-0.32.tar.xz/src/Main.cxx Changed
480
 
1
@@ -18,12 +18,15 @@
2
  */
3
 
4
 #include "config.h"
5
+#include "Instance.hxx"
6
 #include "ncmpc.hxx"
7
 #include "mpdclient.hxx"
8
 #include "callbacks.hxx"
9
 #include "charset.hxx"
10
-#include "options.hxx"
11
-#include "command.hxx"
12
+#include "Options.hxx"
13
+#include "Command.hxx"
14
+#include "Bindings.hxx"
15
+#include "GlobalBindings.hxx"
16
 #include "ncu.hxx"
17
 #include "screen.hxx"
18
 #include "screen_status.hxx"
19
@@ -31,9 +34,8 @@
20
 #include "strfsong.hxx"
21
 #include "i18n.h"
22
 #include "player_command.hxx"
23
-#include "keyboard.hxx"
24
-#include "lirc.hxx"
25
-#include "signals.hxx"
26
+#include "util/ScopeExit.hxx"
27
+#include "util/StringUTF8.hxx"
28
 
29
 #ifndef NCMPC_MINI
30
 #include "conf.hxx"
31
@@ -45,8 +47,6 @@
32
 
33
 #include <mpd/client.h>
34
 
35
-#include <glib.h>
36
-
37
 #include <stdlib.h>
38
 #include <unistd.h>
39
 #include <fcntl.h>
40
@@ -57,18 +57,10 @@
41
 #include <locale.h>
42
 #endif
43
 
44
-/* time between mpd updates [ms] */
45
-static const guint update_interval = 500;
46
-
47
 #define BUFSIZE 1024
48
 
49
+static Instance *global_instance;
50
 static struct mpdclient *mpd = nullptr;
51
-static GMainLoop *main_loop;
52
-static guint reconnect_source_id, update_source_id;
53
-
54
-#ifndef NCMPC_MINI
55
-static guint check_key_bindings_source_id;
56
-#endif
57
 
58
 ScreenManager *screen;
59
 
60
@@ -76,11 +68,11 @@
61
 static void
62
 update_xterm_title()
63
 {
64
-   const struct mpd_song *song = mpd->song;
65
+   const struct mpd_song *song = mpd->GetPlayingSong();
66
 
67
    char tmp[BUFSIZE];
68
    const char *new_title = nullptr;
69
-   if (!options.xterm_title_format.empty() && mpd->playing && song)
70
+   if (!options.xterm_title_format.empty() && song != nullptr)
71
        new_title = strfsong(tmp, BUFSIZE,
72
                     options.xterm_title_format.c_str(), song) > 0
73
            ? tmp
74
@@ -91,35 +83,12 @@
75
 
76
    static char title[BUFSIZE];
77
    if (strncmp(title, new_title, BUFSIZE)) {
78
-       g_strlcpy(title, new_title, BUFSIZE);
79
+       strcpy(title, new_title);
80
        set_xterm_title(title);
81
    }
82
 }
83
 #endif
84
 
85
-static gboolean
86
-timer_mpd_update(gpointer data);
87
-
88
-static void
89
-enable_update_timer()
90
-{
91
-   if (update_source_id != 0)
92
-       return;
93
-
94
-   update_source_id = g_timeout_add(update_interval,
95
-                    timer_mpd_update, nullptr);
96
-}
97
-
98
-static void
99
-disable_update_timer()
100
-{
101
-   if (update_source_id == 0)
102
-       return;
103
-
104
-   g_source_remove(update_source_id);
105
-   update_source_id = 0;
106
-}
107
-
108
 static bool
109
 should_enable_update_timer()
110
 {
111
@@ -130,68 +99,59 @@
112
 auto_update_timer()
113
 {
114
    if (should_enable_update_timer())
115
-       enable_update_timer();
116
+       global_instance->EnableUpdateTimer();
117
    else
118
-       disable_update_timer();
119
+       global_instance->DisableUpdateTimer();
120
 }
121
 
122
-static void
123
-do_mpd_update()
124
+void
125
+Instance::UpdateClient() noexcept
126
 {
127
-   if (mpd->IsConnected() &&
128
-       (mpd->events != 0 || mpd->playing))
129
-       mpd->Update();
130
+   if (client.IsConnected() &&
131
+       (client.events != 0 || client.playing))
132
+       client.Update();
133
 
134
 #ifndef NCMPC_MINI
135
    if (options.enable_xterm_title)
136
        update_xterm_title();
137
 #endif
138
 
139
-   screen->Update(*mpd);
140
-   mpd->events = (enum mpd_idle)0;
141
+   screen_manager.Update(client, seek);
142
+   client.events = (enum mpd_idle)0;
143
 }
144
 
145
-/**
146
- * This timer is installed when the connection to the MPD server is
147
- * broken.  It tries to recover by reconnecting periodically.
148
- */
149
-static gboolean
150
-timer_reconnect(gcc_unused gpointer data)
151
+void
152
+Instance::OnReconnectTimer(const boost::system::error_code &error) noexcept
153
 {
154
-   assert(mpd->IsDead());
155
+   if (error)
156
+       return;
157
 
158
-   reconnect_source_id = 0;
159
+   assert(client.IsDead());
160
 
161
-   screen_status_printf(_("Connecting to %s...  [Press %s to abort]"),
162
-                mpd->GetSettingsName().c_str(),
163
-                get_key_names(CMD_QUIT, false));
164
+   screen_status_printf(_("Connecting to %s"),
165
+                client.GetSettingsName().c_str());
166
    doupdate();
167
 
168
-   mpd->Connect();
169
-
170
-   return false;
171
+   client.Connect();
172
 }
173
 
174
 void
175
 mpdclient_connected_callback()
176
 {
177
-   assert(reconnect_source_id == 0);
178
-
179
 #ifndef NCMPC_MINI
180
    /* quit if mpd is pre 0.14 - song id not supported by mpd */
181
    auto *connection = mpd->GetConnection();
182
-   if (mpd_connection_cmp_server_version(connection, 0, 16, 0) < 0) {
183
+   if (mpd_connection_cmp_server_version(connection, 0, 19, 0) < 0) {
184
        const unsigned *version =
185
            mpd_connection_get_server_version(connection);
186
        screen_status_printf(_("Error: MPD version %d.%d.%d is too old (%s needed)"),
187
                     version[0], version[1], version[2],
188
-                    "0.16.0");
189
+                    "0.19.0");
190
        mpd->Disconnect();
191
        doupdate();
192
 
193
        /* try again after 30 seconds */
194
-       reconnect_source_id =
195
-           g_timeout_add_seconds(30, timer_reconnect, nullptr);
196
+       global_instance->ScheduleReconnect(std::chrono::seconds(30));
197
        return;
198
    }
199
 #endif
200
@@ -199,7 +159,7 @@
201
    screen->status_bar.ClearMessage();
202
    doupdate();
203
 
204
-   do_mpd_update();
205
+   global_instance->UpdateClient();
206
 
207
    auto_update_timer();
208
 }
209
@@ -207,20 +167,16 @@
210
 void
211
 mpdclient_failed_callback()
212
 {
213
-   assert(reconnect_source_id == 0);
214
-
215
    /* try again in 5 seconds */
216
-   reconnect_source_id = g_timeout_add_seconds(5, timer_reconnect, nullptr);
217
+   global_instance->ScheduleReconnect(std::chrono::seconds(5));
218
 }
219
 
220
 void
221
 mpdclient_lost_callback()
222
 {
223
-   assert(reconnect_source_id == 0);
224
-
225
-   screen->Update(*mpd);
226
+   screen->Update(*mpd, global_instance->GetSeek());
227
 
228
-   reconnect_source_id = g_timeout_add_seconds(1, timer_reconnect, nullptr);
229
+   global_instance->ScheduleReconnect(std::chrono::seconds(1));
230
 }
231
 
232
 /**
233
@@ -235,21 +191,23 @@
234
        update_xterm_title();
235
 #endif
236
 
237
-   screen->Update(*mpd);
238
+   screen->Update(*mpd, global_instance->GetSeek());
239
    auto_update_timer();
240
 }
241
 
242
-static gboolean
243
-timer_mpd_update(gcc_unused gpointer data)
244
+void
245
+Instance::OnUpdateTimer(const boost::system::error_code &error) noexcept
246
 {
247
-   do_mpd_update();
248
+   if (error)
249
+       return;
250
+
251
+   assert(pending_update_timer);
252
+   pending_update_timer = false;
253
+
254
+   UpdateClient();
255
 
256
    if (should_enable_update_timer())
257
-       return true;
258
-   else {
259
-       update_source_id = 0;
260
-       return false;
261
-   }
262
+       ScheduleUpdateTimer();
263
 }
264
 
265
 void begin_input_event()
266
@@ -258,25 +216,25 @@
267
 
268
 void end_input_event()
269
 {
270
-   screen->Update(*mpd);
271
+   screen->Update(*mpd, global_instance->GetSeek());
272
    mpd->events = (enum mpd_idle)0;
273
 
274
    auto_update_timer();
275
 }
276
 
277
 bool
278
-do_input_event(command_t cmd)
279
+do_input_event(boost::asio::io_service &io_service, Command cmd)
280
 {
281
-   if (cmd == CMD_QUIT) {
282
-       g_main_loop_quit(main_loop);
283
+   if (cmd == Command::QUIT) {
284
+       io_service.stop();
285
        return false;
286
    }
287
 
288
-   screen->OnCommand(*mpd, cmd);
289
+   screen->OnCommand(*mpd, global_instance->GetSeek(), cmd);
290
 
291
-   if (cmd == CMD_VOLUME_UP || cmd == CMD_VOLUME_DOWN)
292
+   if (cmd == Command::VOLUME_UP || cmd == Command::VOLUME_DOWN)
293
        /* make sure we don't update the volume yet */
294
-       disable_update_timer();
295
+       global_instance->DisableUpdateTimer();
296
 
297
    return true;
298
 }
299
@@ -286,7 +244,7 @@
300
 void
301
 do_mouse_event(Point p, mmask_t bstate)
302
 {
303
-   screen->OnMouse(*mpd, p, bstate);
304
+   screen->OnMouse(*mpd, global_instance->GetSeek(), p, bstate);
305
 }
306
 
307
 #endif
308
@@ -296,35 +254,24 @@
309
  * Check the configured key bindings for errors, and display a status
310
  * message every 10 seconds.
311
  */
312
-static gboolean
313
-timer_check_key_bindings(gcc_unused gpointer data)
314
+void
315
+Instance::OnCheckKeyBindings(const boost::system::error_code &error) noexcept
316
 {
317
+   if (error)
318
+       return;
319
+
320
    char buf[256];
321
 
322
-   if (check_key_bindings(nullptr, buf, sizeof(buf))) {
323
+   if (GetGlobalKeyBindings().Check(buf, sizeof(buf)))
324
        /* no error: disable this timer for the rest of this
325
           process */
326
-       check_key_bindings_source_id = 0;
327
-       return false;
328
-   }
329
-
330
-#ifdef ENABLE_KEYDEF_SCREEN
331
-   g_strchomp(buf);
332
-   g_strlcat(buf, " (", sizeof(buf));
333
-   /* to translators: a key was bound twice in the key editor,
334
-      and this is a hint for the user what to press to correct
335
-      that */
336
-   char comment[64];
337
-   snprintf(comment, sizeof(comment), _("press %s for the key editor"),
338
-        get_key_names(CMD_SCREEN_KEYDEF, false));
339
-   g_strlcat(buf, comment, sizeof(buf));
340
-   g_strlcat(buf, ")", sizeof(buf));
341
-#endif
342
+       return;
343
 
344
-   screen_status_printf("%s", buf);
345
+   screen_status_message(buf);
346
 
347
    doupdate();
348
-   return true;
349
+
350
+   ScheduleCheckKeyBindings();
351
 }
352
 #endif
353
 
354
@@ -332,18 +279,18 @@
355
 main(int argc, const char *argv[])
356
 {
357
 #ifdef ENABLE_LOCALE
358
-#ifndef ENABLE_NLS
359
-   gcc_unused
360
-#endif
361
-   const char *charset = nullptr;
362
    /* time and date formatting */
363
    setlocale(LC_TIME,"");
364
    /* care about sorting order etc */
365
    setlocale(LC_COLLATE,"");
366
    /* charset */
367
    setlocale(LC_CTYPE,"");
368
+#ifdef HAVE_ICONV
369
    /* initialize charset conversions */
370
-   charset = charset_init();
371
+   charset_init();
372
+#endif
373
+
374
+   const ScopeInitUTF8 init_utf8;
375
 
376
    /* initialize i18n support */
377
 #endif
378
@@ -351,9 +298,6 @@
379
 #ifdef ENABLE_NLS
380
    setlocale(LC_MESSAGES, "");
381
    bindtextdomain(GETTEXT_PACKAGE, LOCALE_DIR);
382
-#ifdef ENABLE_LOCALE
383
-   bind_textdomain_codeset(GETTEXT_PACKAGE, charset);
384
-#endif
385
    textdomain(GETTEXT_PACKAGE);
386
 #endif
387
 
388
@@ -365,7 +309,7 @@
389
    read_configuration();
390
 
391
    /* check key bindings */
392
-   check_key_bindings(nullptr, nullptr, 0);
393
+   GetGlobalKeyBindings().Check(nullptr, 0);
394
 #endif
395
 
396
    /* parse command line options - 2 pass */
397
@@ -377,66 +321,30 @@
398
    lyrics_init();
399
 #endif
400
 
401
-   /* create mpdclient instance */
402
-   struct mpdclient client(options.host.empty() ? nullptr : options.host.c_str(),
403
-               options.port,
404
-               options.timeout_ms,
405
-               options.password.empty() ? nullptr : options.password.c_str());
406
-   mpd = &client;
407
-
408
-   /* initialize curses */
409
-   ScreenManager screen_manager;
410
-   screen_manager.Init(&client);
411
-   screen = &screen_manager;
412
-
413
-   /* the main loop */
414
-   main_loop = g_main_loop_new(nullptr, false);
415
-
416
-   /* watch out for keyboard input */
417
-   keyboard_init(screen_manager.main_window.w);
418
-
419
-   /* watch out for lirc input */
420
-   ncmpc_lirc_init();
421
-
422
-   signals_init(main_loop, screen_manager);
423
-
424
-   /* attempt to connect */
425
-   reconnect_source_id = g_idle_add(timer_reconnect, nullptr);
426
-
427
-   auto_update_timer();
428
+   /* create the global Instance */
429
+   Instance instance;
430
+   global_instance = &instance;
431
+   mpd = &instance.GetClient();
432
+   screen = &instance.GetScreenManager();
433
 
434
+   AtScopeExit() {
435
+       /* this must be executed after ~Instance(), so we're
436
+          using AtScopeExit() to do the trick */
437
 #ifndef NCMPC_MINI
438
-   check_key_bindings_source_id =
439
-       g_timeout_add_seconds(10, timer_check_key_bindings, nullptr);
440
+       set_xterm_title("");
441
 #endif
442
+       printf("\n");
443
+   };
444
 
445
-   screen_manager.Update(client);
446
-
447
-   g_main_loop_run(main_loop);
448
-   g_main_loop_unref(main_loop);
449
-
450
-   /* cleanup */
451
-
452
-   cancel_seek_timer();
453
-
454
-   disable_update_timer();
455
-
456
-   if (reconnect_source_id != 0)
457
-       g_source_remove(reconnect_source_id);
458
-
459
-#ifndef NCMPC_MINI
460
-   if (check_key_bindings_source_id != 0)
461
-       g_source_remove(check_key_bindings_source_id);
462
-#endif
463
+   /* attempt to connect */
464
+   instance.ScheduleReconnect(std::chrono::seconds(0));
465
 
466
-   signals_deinit();
467
-   ncmpc_lirc_deinit();
468
+   auto_update_timer();
469
 
470
-   screen_manager.Exit();
471
 #ifndef NCMPC_MINI
472
-   set_xterm_title("");
473
+   instance.ScheduleCheckKeyBindings();
474
 #endif
475
-   printf("\n");
476
 
477
+   instance.Run();
478
    return 0;
479
 }
480
ncmpc-0.32.tar.xz/src/Match.cxx Added
75
 
1
@@ -0,0 +1,73 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Match.hxx"
22
+#include "charset.hxx"
23
+
24
+#include <assert.h>
25
+#include <string.h>
26
+
27
+MatchExpression::~MatchExpression() noexcept
28
+{
29
+#ifdef HAVE_PCRE
30
+   pcre_free(re);
31
+#endif
32
+}
33
+
34
+bool
35
+MatchExpression::Compile(const char *src, bool anchor) noexcept
36
+{
37
+#ifndef HAVE_PCRE
38
+   assert(expression == nullptr);
39
+
40
+   expression = src;
41
+   length = strlen(expression);
42
+   anchored = anchor;
43
+
44
+   return true;
45
+#else
46
+   assert(re == nullptr);
47
+
48
+   int options = PCRE_CASELESS|PCRE_DOTALL|PCRE_NO_AUTO_CAPTURE;
49
+   if (anchor)
50
+       options |= PCRE_ANCHORED;
51
+
52
+   const char *error_string;
53
+   int error_offset;
54
+   re = pcre_compile(src, options, &error_string, &error_offset, nullptr);
55
+   return re != nullptr;
56
+#endif
57
+}
58
+
59
+bool
60
+MatchExpression::operator()(const char *line) const noexcept
61
+{
62
+#ifdef NCMPC_MINI
63
+   assert(expression != nullptr);
64
+
65
+   return anchored
66
+       ? strncasecmp(line, expression, length) == 0
67
+       : strstr(line, expression) != nullptr;
68
+#else
69
+   assert(re != nullptr);
70
+
71
+   return pcre_exec(re, nullptr, line, strlen(line),
72
+            0, 0, nullptr, 0) >= 0;
73
+#endif
74
+}
75
ncmpc-0.32.tar.xz/src/Match.hxx Added
56
 
1
@@ -0,0 +1,54 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef MATCH_H
22
+#define MATCH_H
23
+
24
+#include "config.h"
25
+#include "util/Compiler.h"
26
+
27
+#ifdef HAVE_PCRE
28
+#include <pcre.h>
29
+#endif
30
+
31
+#include <stddef.h>
32
+
33
+class MatchExpression {
34
+#ifndef HAVE_PCRE
35
+   const char *expression;
36
+   size_t length;
37
+   bool anchored;
38
+#else
39
+   pcre *re = nullptr;
40
+#endif
41
+
42
+public:
43
+   MatchExpression() = default;
44
+   ~MatchExpression() noexcept;
45
+
46
+   MatchExpression(const MatchExpression &) = delete;
47
+   MatchExpression &operator=(const MatchExpression &) = delete;
48
+
49
+   bool Compile(const char *src, bool anchor) noexcept;
50
+
51
+   gcc_pure
52
+   bool operator()(const char *line) const noexcept;
53
+};
54
+
55
+#endif
56
ncmpc-0.32.tar.xz/src/Options.cxx Added
351
 
1
@@ -0,0 +1,349 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Options.hxx"
22
+#include "Bindings.hxx"
23
+#include "GlobalBindings.hxx"
24
+#include "config.h"
25
+#include "charset.hxx"
26
+#include "conf.hxx"
27
+#include "i18n.h"
28
+
29
+#include <stdlib.h>
30
+#include <stdio.h>
31
+#include <string.h>
32
+
33
+#define ERROR_UNKNOWN_OPTION    0x01
34
+#define ERROR_BAD_ARGUMENT      0x02
35
+#define ERROR_GOT_ARGUMENT      0x03
36
+#define ERROR_MISSING_ARGUMENT  0x04
37
+
38
+struct OptionDefinition {
39
+   int shortopt;
40
+   const char *longopt;
41
+   const char *argument;
42
+   const char *descrition;
43
+};
44
+
45
+Options options;
46
+
47
+static constexpr OptionDefinition option_table[] = {
48
+   { '?', "help", nullptr, "Show this help message" },
49
+   { 'V', "version", nullptr, "Display version information" },
50
+   { 'c', "colors", nullptr, "Enable colors" },
51
+   { 'C', "no-colors", nullptr, "Disable colors" },
52
+#ifdef HAVE_GETMOUSE
53
+   { 'm', "mouse", nullptr, "Enable mouse" },
54
+   { 'M', "no-mouse", nullptr, "Disable mouse" },
55
+#endif
56
+   { 'e', "exit", nullptr, "Exit on connection errors" },
57
+   { 'p', "port", "PORT", "Connect to server on port" },
58
+   { 'h', "host", "HOST", "Connect to server on host" },
59
+   { 'P', "password","PASSWORD", "Connect with password" },
60
+   { 'f', "config", "FILE", "Read configuration from file" },
61
+   { 'k', "key-file","FILE", "Read key bindings from file" },
62
+#ifndef NDEBUG
63
+   { 'K', "dump-keys", nullptr, "Dump key bindings to stdout" },
64
+#endif
65
+};
66
+
67
+gcc_pure
68
+static const OptionDefinition *
69
+FindOption(int s) noexcept
70
+{
71
+   for (const auto &i : option_table)
72
+       if (s == i.shortopt)
73
+           return &i;
74
+
75
+   return nullptr;
76
+}
77
+
78
+static const OptionDefinition *
79
+FindOption(const char *l) noexcept
80
+{
81
+   for (const auto &i : option_table)
82
+       if (strcmp(l, i.longopt) == 0)
83
+           return &i;
84
+
85
+   return nullptr;
86
+}
87
+
88
+[[noreturn]]
89
+static void
90
+option_error(int error, const char *option, const char *arg)
91
+{
92
+   switch (error) {
93
+   case ERROR_UNKNOWN_OPTION:
94
+       fprintf(stderr, PACKAGE ": invalid option %s\n", option);
95
+       break;
96
+   case ERROR_BAD_ARGUMENT:
97
+       fprintf(stderr, PACKAGE ": bad argument: %s\n", option);
98
+       break;
99
+   case ERROR_GOT_ARGUMENT:
100
+       fprintf(stderr, PACKAGE ": invalid option %s=%s\n", option, arg);
101
+       break;
102
+   case ERROR_MISSING_ARGUMENT:
103
+       fprintf(stderr, PACKAGE ": missing value for %s option\n", option);
104
+       break;
105
+   default:
106
+       fprintf(stderr, PACKAGE ": internal error %d\n", error);
107
+       break;
108
+   }
109
+
110
+   exit(EXIT_FAILURE);
111
+}
112
+
113
+static void
114
+display_help()
115
+{
116
+   printf("Usage: %s [OPTION]...\n", PACKAGE);
117
+
118
+   for (const auto &i : option_table) {
119
+       char tmp[32];
120
+
121
+       if (i.argument)
122
+           snprintf(tmp, sizeof(tmp), "%s=%s",
123
+                i.longopt,
124
+                i.argument);
125
+       else
126
+           snprintf(tmp, sizeof(tmp), "%s",
127
+                i.longopt);
128
+
129
+       printf("  -%c, --%-20s %s\n",
130
+              i.shortopt,
131
+              tmp,
132
+              i.descrition);
133
+   }
134
+}
135
+
136
+static void
137
+handle_option(int c, const char *arg)
138
+{
139
+   switch (c) {
140
+   case '?': /* --help */
141
+       display_help();
142
+       exit(EXIT_SUCCESS);
143
+   case 'V': /* --version */
144
+       puts(PACKAGE " version: " VERSION "\n"
145
+            "build options:"
146
+#ifdef NCMPC_MINI
147
+            " mini"
148
+#endif
149
+#ifndef NDEBUG
150
+            " debug"
151
+#endif
152
+#ifdef ENABLE_MULTIBYTE
153
+            " multibyte"
154
+#endif
155
+#ifdef HAVE_CURSES_ENHANCED
156
+            " wide"
157
+#endif
158
+#ifdef ENABLE_LOCALE
159
+            " locale"
160
+#endif
161
+#ifdef HAVE_ICONV
162
+            " iconv"
163
+#endif
164
+#ifdef ENABLE_NLS
165
+            " nls"
166
+#endif
167
+#ifdef ENABLE_COLORS
168
+            " colors"
169
+#else
170
+            " no-colors"
171
+#endif
172
+#ifdef ENABLE_LIRC
173
+            " lirc"
174
+#endif
175
+#ifdef HAVE_GETMOUSE
176
+            " getmouse"
177
+#endif
178
+#ifdef ENABLE_ARTIST_SCREEN
179
+            " artist-screen"
180
+#endif
181
+#ifdef ENABLE_HELP_SCREEN
182
+            " help-screen"
183
+#endif
184
+#ifdef ENABLE_SEARCH_SCREEN
185
+            " search-screen"
186
+#endif
187
+#ifdef ENABLE_SONG_SCREEN
188
+            " song-screen"
189
+#endif
190
+#ifdef ENABLE_KEYDEF_SCREEN
191
+            " key-screen"
192
+#endif
193
+#ifdef ENABLE_LYRICS_SCREEN
194
+            " lyrics-screen"
195
+#endif
196
+#ifdef ENABLE_OUTPUTS_SCREEN
197
+            " outputs-screen"
198
+#endif
199
+#ifdef ENABLE_CHAT_SCREEN
200
+            " chat-screen"
201
+#endif
202
+
203
+            "\n");
204
+#ifndef NCMPC_MINI
205
+       printf("configuration files:\n"
206
+              " %s\n"
207
+#ifndef _WIN32
208
+              " %s\n"
209
+#endif
210
+              " %s\n\n",
211
+              GetUserConfigPath().c_str(),
212
+#ifndef _WIN32
213
+              GetHomeConfigPath().c_str(),
214
+#endif
215
+              GetSystemConfigPath().c_str());
216
+
217
+       if (strcmp("translator-credits", _("translator-credits")) != 0)
218
+           /* To translators: these credits are shown
219
+              when ncmpc is started with "--version" */
220
+           printf("\n%s\n", _("translator-credits"));
221
+#endif
222
+       exit(EXIT_SUCCESS);
223
+   case 'c': /* --colors */
224
+#ifdef ENABLE_COLORS
225
+       options.enable_colors = true;
226
+#endif
227
+       break;
228
+   case 'C': /* --no-colors */
229
+#ifdef ENABLE_COLORS
230
+       options.enable_colors = false;
231
+#endif
232
+       break;
233
+   case 'm': /* --mouse */
234
+#ifdef HAVE_GETMOUSE
235
+       options.enable_mouse = true;
236
+#endif
237
+       break;
238
+   case 'M': /* --no-mouse */
239
+#ifdef HAVE_GETMOUSE
240
+       options.enable_mouse = false;
241
+#endif
242
+       break;
243
+   case 'e': /* --exit */
244
+       /* deprecated */
245
+       break;
246
+   case 'p': /* --port */
247
+       options.port = atoi(arg);
248
+       break;
249
+   case 'h': /* --host */
250
+       options.host = arg;
251
+       break;
252
+   case 'P': /* --password */
253
+       options.password = LocaleToUtf8(arg).c_str();
254
+       break;
255
+   case 'f': /* --config */
256
+       options.config_file = arg;
257
+       break;
258
+   case 'k': /* --key-file */
259
+       options.key_file = arg;
260
+       break;
261
+#if !defined(NDEBUG) && !defined(NCMPC_MINI)
262
+   case 'K': /* --dump-keys */
263
+       read_configuration();
264
+       GetGlobalKeyBindings().WriteToFile(stdout,
265
+                          KEYDEF_WRITE_ALL | KEYDEF_COMMENT_ALL);
266
+       exit(EXIT_SUCCESS);
267
+       break;
268
+#endif
269
+   default:
270
+       fprintf(stderr,"Unknown Option %c = %s\n", c, arg);
271
+       break;
272
+   }
273
+}
274
+
275
+void
276
+options_parse(int argc, const char *argv[])
277
+{
278
+   const OptionDefinition *opt = nullptr;
279
+
280
+   for (int i = 1; i < argc; i++) {
281
+       const char *arg = argv[i];
282
+       size_t len = strlen(arg);
283
+
284
+       /* check for a long option */
285
+       if (strncmp(arg, "--", 2) == 0) {
286
+           /* make sure we got an argument for the previous option */
287
+           if( opt && opt->argument )
288
+               option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument);
289
+
290
+           /* retrieve a option argument */
291
+           std::string name;
292
+           const char *value = strrchr(arg + 2, '=');
293
+           if (value != nullptr) {
294
+               name.assign(arg, value);
295
+               value++;
296
+           } else
297
+               name = arg;
298
+
299
+           /* check if the option exists */
300
+           if ((opt = FindOption(name.c_str() + 2)) == nullptr)
301
+               option_error(ERROR_UNKNOWN_OPTION, name.c_str(), nullptr);
302
+
303
+           /* abort if we got an argument to the option and don't want one */
304
+           if( value && opt->argument==nullptr )
305
+               option_error(ERROR_GOT_ARGUMENT, arg, value);
306
+
307
+           /* execute option callback */
308
+           if (value || opt->argument==nullptr) {
309
+               handle_option(opt->shortopt, value);
310
+               opt = nullptr;
311
+           }
312
+       }
313
+       /* check for short options */
314
+       else if (len >= 2 && *arg == '-') {
315
+           size_t j;
316
+
317
+           for(j=1; j<len; j++) {
318
+               /* make sure we got an argument for the previous option */
319
+               if (opt && opt->argument)
320
+                   option_error(ERROR_MISSING_ARGUMENT,
321
+                            opt->longopt, opt->argument);
322
+
323
+               /* check if the option exists */
324
+               if ((opt = FindOption(arg[j])) == nullptr)
325
+                   option_error(ERROR_UNKNOWN_OPTION, arg, nullptr);
326
+
327
+               /* if no option argument is needed execute callback */
328
+               if (opt->argument == nullptr) {
329
+                   handle_option(opt->shortopt, nullptr);
330
+                   opt = nullptr;
331
+               }
332
+           }
333
+       } else {
334
+           /* is this a option argument? */
335
+           if (opt && opt->argument) {
336
+               handle_option (opt->shortopt, arg);
337
+               opt = nullptr;
338
+           } else
339
+               option_error(ERROR_BAD_ARGUMENT, arg, nullptr);
340
+       }
341
+   }
342
+
343
+   if (opt && opt->argument == nullptr)
344
+       handle_option(opt->shortopt, nullptr);
345
+   else if (opt && opt->argument)
346
+       option_error(ERROR_MISSING_ARGUMENT, opt->longopt, opt->argument);
347
+
348
+   if (options.host.empty() && getenv("MPD_HOST"))
349
+       options.host = getenv("MPD_HOST");
350
+}
351
ncmpc-0.32.tar.xz/src/Options.hxx Added
98
 
1
@@ -0,0 +1,96 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef OPTIONS_HXX
22
+#define OPTIONS_HXX
23
+
24
+#include "config.h"
25
+#include "defaults.hxx"
26
+
27
+#include <vector>
28
+#include <string>
29
+#include <chrono>
30
+
31
+struct Options {
32
+   std::string host;
33
+   std::string password;
34
+   std::string config_file;
35
+   std::string key_file;
36
+   std::string list_format = DEFAULT_LIST_FORMAT;
37
+   std::string search_format;
38
+   std::string status_format = DEFAULT_STATUS_FORMAT;
39
+#ifndef NCMPC_MINI
40
+   std::string xterm_title_format;
41
+   std::string scroll_sep = DEFAULT_SCROLL_SEP;
42
+#endif
43
+   std::vector<std::string> screen_list = DEFAULT_SCREEN_LIST;
44
+   bool display_remaining_time;
45
+   int port;
46
+   int timeout_ms = 0;
47
+   int crossfade_time = DEFAULT_CROSSFADE_TIME;
48
+   int search_mode;
49
+   std::chrono::steady_clock::duration hide_cursor;
50
+   int seek_time = 1;
51
+#ifdef ENABLE_LYRICS_SCREEN
52
+   std::chrono::steady_clock::duration lyrics_timeout = std::chrono::minutes(1);
53
+   bool lyrics_autosave = false;
54
+   bool lyrics_show_plugin = false;
55
+   std::string text_editor;
56
+   bool text_editor_ask = false;
57
+#endif
58
+#ifdef ENABLE_CHAT_SCREEN
59
+   std::string chat_prefix;
60
+#endif
61
+   bool find_wrap = true;
62
+   bool find_show_last_pattern;
63
+   bool list_wrap;
64
+   int scroll_offset = 0;
65
+   bool auto_center;
66
+   bool wide_cursor = true;
67
+   bool hardware_cursor;
68
+
69
+#ifdef ENABLE_COLORS
70
+   bool enable_colors = true;
71
+#endif
72
+   bool audible_bell = true;
73
+   bool visible_bell;
74
+   bool bell_on_wrap = true;
75
+   std::chrono::steady_clock::duration status_message_time = std::chrono::seconds(3);
76
+#ifndef NCMPC_MINI
77
+   bool enable_xterm_title;
78
+#endif
79
+#ifdef HAVE_GETMOUSE
80
+   bool enable_mouse;
81
+#endif
82
+#ifdef NCMPC_MINI
83
+   static constexpr bool jump_prefix_only = true;
84
+#else
85
+   bool scroll = DEFAULT_SCROLL;
86
+   bool visible_bitrate;
87
+   bool welcome_screen_list = true;
88
+   bool jump_prefix_only = true;
89
+   bool second_column = true;
90
+#endif
91
+};
92
+
93
+extern Options options;
94
+
95
+void options_parse(int argc, const char **argv);
96
+
97
+#endif
98
ncmpc-0.30.tar.xz/src/OutputsPage.cxx -> ncmpc-0.32.tar.xz/src/OutputsPage.cxx Changed
115
 
1
@@ -18,11 +18,12 @@
2
  */
3
 
4
 #include "OutputsPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "ListPage.hxx"
8
 #include "ListRenderer.hxx"
9
 #include "screen_status.hxx"
10
 #include "paint.hxx"
11
+#include "Command.hxx"
12
 #include "i18n.h"
13
 #include "mpdclient.hxx"
14
 
15
@@ -53,14 +54,14 @@
16
 
17
 public:
18
    /* virtual methods from class Page */
19
-   void Paint() const override;
20
-   void Update(struct mpdclient &c, unsigned events) override;
21
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
22
-   const char *GetTitle(char *s, size_t size) const override;
23
+   void Paint() const noexcept override;
24
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
25
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
26
+   const char *GetTitle(char *s, size_t size) const noexcept override;
27
 
28
    /* virtual methods from class ListRenderer */
29
    void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width,
30
-              bool selected) const override;
31
+              bool selected) const noexcept override;
32
 };
33
 
34
 bool
35
@@ -132,14 +133,14 @@
36
    c->FinishCommand();
37
 }
38
 
39
-static Page *
40
+static std::unique_ptr<Page>
41
 outputs_init(ScreenManager &, WINDOW *w, Size size)
42
 {
43
-   return new OutputsPage(w, size);
44
+   return std::make_unique<OutputsPage>(w, size);
45
 }
46
 
47
 const char *
48
-OutputsPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const
49
+OutputsPage::GetTitle(char *, size_t) const noexcept
50
 {
51
    return _("Outputs");
52
 }
53
@@ -147,25 +148,25 @@
54
 void
55
 OutputsPage::PaintListItem(WINDOW *w, unsigned i,
56
               gcc_unused unsigned y, unsigned width,
57
-              bool selected) const
58
+              bool selected) const noexcept
59
 {
60
    assert(i < items.size());
61
    const auto *output = items[i].get();
62
 
63
-   row_color(w, COLOR_LIST, selected);
64
+   row_color(w, Style::LIST, selected);
65
    waddstr(w, mpd_output_get_enabled(output) ? "[X] " : "[ ] ");
66
    waddstr(w, mpd_output_get_name(output));
67
    row_clear_to_eol(w, width, selected);
68
 }
69
 
70
 void
71
-OutputsPage::Paint() const
72
+OutputsPage::Paint() const noexcept
73
 {
74
    lw.Paint(*this);
75
 }
76
 
77
 void
78
-OutputsPage::Update(struct mpdclient &c, unsigned events)
79
+OutputsPage::Update(struct mpdclient &c, unsigned events) noexcept
80
 {
81
    if (events & MPD_IDLE_OUTPUT) {
82
        Clear();
83
@@ -176,17 +177,17 @@
84
 }
85
 
86
 bool
87
-OutputsPage::OnCommand(struct mpdclient &c, command_t cmd)
88
+OutputsPage::OnCommand(struct mpdclient &c, Command cmd)
89
 {
90
    if (ListPage::OnCommand(c, cmd))
91
        return true;
92
 
93
    switch (cmd) {
94
-   case CMD_PLAY:
95
+   case Command::PLAY:
96
        Toggle(c, lw.selected);
97
        return true;
98
 
99
-   case CMD_SCREEN_UPDATE:
100
+   case Command::SCREEN_UPDATE:
101
        Clear();
102
        fill_outputs_list(&c, items);
103
        lw.SetLength(items.size());
104
@@ -200,7 +201,9 @@
105
    return false;
106
 }
107
 
108
-const struct screen_functions screen_outputs = {
109
+const PageMeta screen_outputs = {
110
    "outputs",
111
+   N_("Outputs"),
112
+   Command::SCREEN_OUTPUTS,
113
    outputs_init,
114
 };
115
ncmpc-0.30.tar.xz/src/OutputsPage.hxx -> ncmpc-0.32.tar.xz/src/OutputsPage.hxx Changed
11
 
1
@@ -23,7 +23,8 @@
2
 #include "config.h"
3
 
4
 #ifdef ENABLE_OUTPUTS_SCREEN
5
-extern const struct screen_functions screen_outputs;
6
+struct PageMeta;
7
+extern const PageMeta screen_outputs;
8
 #endif /* ENABLE_OUTPUTS_SCREEN */
9
 
10
 #endif
11
ncmpc-0.30.tar.xz/src/Page.hxx -> ncmpc-0.32.tar.xz/src/Page.hxx Changed
96
 
1
@@ -21,15 +21,17 @@
2
 #define NCMPC_PAGE_HXX
3
 
4
 #include "config.h"
5
-#include "command.hxx"
6
-#include "ncmpc_curses.h"
7
 #include "Point.hxx"
8
 #include "Size.hxx"
9
+#include "util/Compiler.h"
10
+
11
+#include <curses.h>
12
 
13
 #include <utility>
14
 
15
 #include <stddef.h>
16
 
17
+enum class Command : unsigned;
18
 struct mpdclient;
19
 
20
 class Page {
21
@@ -47,17 +49,17 @@
22
    bool dirty = true;
23
 
24
 public:
25
-   virtual ~Page() = default;
26
+   virtual ~Page() noexcept = default;
27
 
28
-   bool IsDirty() const {
29
+   bool IsDirty() const noexcept {
30
        return dirty;
31
    }
32
 
33
-   void SetDirty(bool _dirty=true) {
34
+   void SetDirty(bool _dirty=true) noexcept {
35
        dirty = _dirty;
36
    }
37
 
38
-   void Resize(Size new_size) {
39
+   void Resize(Size new_size) noexcept {
40
        if (new_size == last_size)
41
            return;
42
 
43
@@ -65,25 +67,25 @@
44
        OnResize(new_size);
45
    }
46
 
47
-   void AddPendingEvents(unsigned events) {
48
+   void AddPendingEvents(unsigned events) noexcept {
49
        pending_events |= events;
50
    }
51
 
52
-   void Update(struct mpdclient &c) {
53
+   void Update(struct mpdclient &c) noexcept {
54
        Update(c, std::exchange(pending_events, 0));
55
    }
56
 
57
 protected:
58
-   const Size &GetLastSize() const {
59
+   const Size &GetLastSize() const noexcept {
60
        return last_size;
61
    }
62
 
63
 public:
64
-   virtual void OnOpen(struct mpdclient &) {}
65
-   virtual void OnClose() {}
66
-   virtual void OnResize(Size size) = 0;
67
-   virtual void Paint() const = 0;
68
-   virtual void Update(struct mpdclient &, unsigned) {}
69
+   virtual void OnOpen(struct mpdclient &) noexcept {}
70
+   virtual void OnClose() noexcept {}
71
+   virtual void OnResize(Size size) noexcept = 0;
72
+   virtual void Paint() const noexcept = 0;
73
+   virtual void Update(struct mpdclient &, unsigned) noexcept {}
74
 
75
    /**
76
     * Handle a command.
77
@@ -91,7 +93,7 @@
78
     * @returns true if the command should not be handled by the
79
     * ncmpc core
80
     */
81
-   virtual bool OnCommand(struct mpdclient &c, command_t cmd) = 0;
82
+   virtual bool OnCommand(struct mpdclient &c, Command cmd) = 0;
83
 
84
 #ifdef HAVE_GETMOUSE
85
    /**
86
@@ -107,7 +109,8 @@
87
    }
88
 #endif
89
 
90
-   virtual const char *GetTitle(char *s, size_t size) const = 0;
91
+   gcc_pure
92
+   virtual const char *GetTitle(char *s, size_t size) const noexcept = 0;
93
 };
94
 
95
 #endif
96
ncmpc-0.32.tar.xz/src/PageMeta.hxx Added
52
 
1
@@ -0,0 +1,50 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef NCMPC_PAGE_META_HXX
22
+#define NCMPC_PAGE_META_HXX
23
+
24
+#include "Size.hxx"
25
+
26
+#include <memory>
27
+
28
+#include <curses.h>
29
+
30
+enum class Command : unsigned;
31
+class Page;
32
+class ScreenManager;
33
+
34
+struct PageMeta {
35
+   const char *name;
36
+
37
+   /**
38
+    * A title/caption for this page, to be translated using
39
+    * gettext().
40
+    */
41
+   const char *title;
42
+
43
+   /**
44
+    * The command which switches to this page.
45
+    */
46
+   Command command;
47
+
48
+   std::unique_ptr<Page> (*init)(ScreenManager &screen, WINDOW *w, Size size);
49
+};
50
+
51
+#endif
52
ncmpc-0.30.tar.xz/src/ProgressBar.cxx -> ncmpc-0.32.tar.xz/src/ProgressBar.cxx Changed
47
 
1
@@ -18,7 +18,8 @@
2
  */
3
 
4
 #include "ProgressBar.hxx"
5
-#include "colors.hxx"
6
+#include "Styles.hxx"
7
+#include "Options.hxx"
8
 
9
 #include <assert.h>
10
 
11
@@ -26,7 +27,10 @@
12
    :window(p, {_width, 1u})
13
 {
14
    leaveok(window.w, true);
15
-   wbkgd(window.w, COLOR_PAIR(COLOR_PROGRESSBAR));
16
+#ifdef ENABLE_COLORS
17
+   if (options.enable_colors)
18
+       wbkgd(window.w, COLOR_PAIR(Style::PROGRESSBAR));
19
+#endif
20
 }
21
 
22
 void
23
@@ -35,7 +39,7 @@
24
    if (max > 0) {
25
        assert(width < window.size.width);
26
 
27
-       colors_use(window.w, COLOR_PROGRESSBAR);
28
+       SelectStyle(window.w, Style::PROGRESSBAR);
29
 
30
        if (width > 0)
31
            mvwhline(window.w, 0, 0, '=', width);
32
@@ -44,12 +48,12 @@
33
        unsigned x = width + 1;
34
 
35
        if (x < window.size.width) {
36
-           colors_use(window.w, COLOR_PROGRESSBAR_BACKGROUND);
37
+           SelectStyle(window.w, Style::PROGRESSBAR_BACKGROUND);
38
            mvwhline(window.w, 0, x, ACS_HLINE, window.size.width - x);
39
        }
40
    } else {
41
        /* no progress bar, just a simple horizontal line */
42
-       colors_use(window.w, COLOR_LINE);
43
+       SelectStyle(window.w, Style::LINE);
44
        mvwhline(window.w, 0, 0, ACS_HLINE, window.size.width);
45
    }
46
 
47
ncmpc-0.30.tar.xz/src/ProxyPage.cxx -> ncmpc-0.32.tar.xz/src/ProxyPage.cxx Changed
64
 
1
@@ -40,7 +40,7 @@
2
 }
3
 
4
 void
5
-ProxyPage::OnOpen(struct mpdclient &c)
6
+ProxyPage::OnOpen(struct mpdclient &c) noexcept
7
 {
8
    assert(!is_open);
9
    is_open = true;
10
@@ -52,7 +52,7 @@
11
 }
12
 
13
 void
14
-ProxyPage::OnClose()
15
+ProxyPage::OnClose() noexcept
16
 {
17
    assert(is_open);
18
    is_open = false;
19
@@ -62,7 +62,7 @@
20
 }
21
 
22
 void
23
-ProxyPage::OnResize(Size size)
24
+ProxyPage::OnResize(Size size) noexcept
25
 {
26
    if (current_page != nullptr)
27
        current_page->Resize(size);
28
@@ -71,7 +71,7 @@
29
 }
30
 
31
 void
32
-ProxyPage::Paint() const
33
+ProxyPage::Paint() const noexcept
34
 {
35
    if (current_page != nullptr)
36
        current_page->Paint();
37
@@ -80,7 +80,7 @@
38
 }
39
 
40
 void
41
-ProxyPage::Update(struct mpdclient &c, unsigned events)
42
+ProxyPage::Update(struct mpdclient &c, unsigned events) noexcept
43
 {
44
    if (current_page != nullptr) {
45
        current_page->AddPendingEvents(events);
46
@@ -90,7 +90,7 @@
47
 }
48
 
49
 bool
50
-ProxyPage::OnCommand(struct mpdclient &c, command_t cmd)
51
+ProxyPage::OnCommand(struct mpdclient &c, Command cmd)
52
 {
53
    if (current_page != nullptr) {
54
        bool result = current_page->OnCommand(c, cmd);
55
@@ -114,7 +114,7 @@
56
 #endif
57
 
58
 const char *
59
-ProxyPage::GetTitle(char *s, size_t size) const
60
+ProxyPage::GetTitle(char *s, size_t size) const noexcept
61
 {
62
    return current_page != nullptr
63
        ? current_page->GetTitle(s, size)
64
ncmpc-0.30.tar.xz/src/ProxyPage.hxx -> ncmpc-0.32.tar.xz/src/ProxyPage.hxx Changed
36
 
1
@@ -30,7 +30,7 @@
2
    bool is_open = false;
3
 
4
 public:
5
-   explicit ProxyPage(WINDOW *_w):w(_w) {}
6
+   explicit ProxyPage(WINDOW *_w) noexcept:w(_w) {}
7
 
8
    const Page *GetCurrentPage() const {
9
        return current_page;
10
@@ -52,18 +52,18 @@
11
 
12
 public:
13
    /* virtual methods from Page */
14
-   void OnOpen(struct mpdclient &c) override;
15
-   void OnClose() override;
16
-   void OnResize(Size size) override;
17
-   void Paint() const override;
18
-   void Update(struct mpdclient &c, unsigned events) override;
19
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
20
+   void OnOpen(struct mpdclient &c) noexcept override;
21
+   void OnClose() noexcept override;
22
+   void OnResize(Size size) noexcept override;
23
+   void Paint() const noexcept override;
24
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
25
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
26
 
27
 #ifdef HAVE_GETMOUSE
28
    bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate) override;
29
 #endif
30
 
31
-   const char *GetTitle(char *s, size_t size) const override;
32
+   const char *GetTitle(char *s, size_t size) const noexcept override;
33
 };
34
 
35
 #endif
36
ncmpc-0.30.tar.xz/src/Queue.cxx -> ncmpc-0.32.tar.xz/src/Queue.cxx Changed
47
 
1
@@ -53,27 +53,28 @@
2
              std::next(items.begin(), dest + 1),
3
              std::next(items.begin(), src));
4
    } else {
5
-       std::move(std::next(items.begin(), dest),
6
+       std::move_backward(std::next(items.begin(), dest),
7
                   std::next(items.begin(), src),
8
-                  std::next(items.begin(), dest + 1));
9
+                  std::next(items.begin(), src + 1));
10
    }
11
 
12
    assert(!items[dest]);
13
    items[dest] = std::move(song);
14
 }
15
 
16
-int
17
-MpdQueue::Find(const struct mpd_song &song) const
18
+MpdQueue::size_type
19
+MpdQueue::FindByReference(const struct mpd_song &song) const
20
 {
21
-   for (size_type i = 0; i < size(); ++i)
22
+   for (size_type i = 0;; ++i) {
23
+       assert(i < size());
24
+
25
        if (&(*this)[i] == &song)
26
            return i;
27
-
28
-   return -1;
29
+   }
30
 }
31
 
32
 int
33
-MpdQueue::FindId(unsigned id) const
34
+MpdQueue::FindById(unsigned id) const
35
 {
36
    for (size_type i = 0; i < size(); ++i) {
37
        const auto &song = (*this)[i];
38
@@ -85,7 +86,7 @@
39
 }
40
 
41
 int
42
-MpdQueue::FindUri(const char *filename) const
43
+MpdQueue::FindByUri(const char *filename) const
44
 {
45
    for (size_type i = 0; i < size(); ++i) {
46
        const auto &song = (*this)[i];
47
ncmpc-0.30.tar.xz/src/Queue.hxx -> ncmpc-0.32.tar.xz/src/Queue.hxx Changed
64
 
1
@@ -20,7 +20,7 @@
2
 #ifndef QUEUE_HXX
3
 #define QUEUE_HXX
4
 
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
 #include <mpd/client.h>
9
 
10
@@ -86,18 +86,48 @@
11
 
12
    void Move(unsigned dest, unsigned src);
13
 
14
+   /**
15
+    * Find a song by its reference.  This method compares
16
+    * #mpd_song references, so this method makes only sense for
17
+    * songs references which were obtained from this container.
18
+    *
19
+    * @return the song position
20
+    */
21
    gcc_pure
22
-   int Find(const struct mpd_song &song) const;
23
+   size_type FindByReference(const struct mpd_song &song) const;
24
 
25
+   /**
26
+    * Find a song by its id.
27
+    *
28
+    * @return the song position
29
+    */
30
    gcc_pure
31
-   int FindId(unsigned id) const;
32
+   int FindById(unsigned id) const;
33
 
34
+   /**
35
+    * Find a song by its URI.
36
+    *
37
+    * @return the song position
38
+    */
39
    gcc_pure
40
-   int FindUri(const char *uri) const;
41
+   int FindByUri(const char *uri) const;
42
 
43
+   /**
44
+    * Like FindByUri(), but return the song id, not the song position
45
+    *
46
+    * @return the song id
47
+    */
48
    gcc_pure
49
-   int FindUri(const struct mpd_song &song) const {
50
-       return FindUri(mpd_song_get_uri(&song));
51
+   int FindIdByUri(const char *uri) const {
52
+       int i = FindByUri(uri);
53
+       if (i >= 0)
54
+           i = mpd_song_get_id(items[i].get());
55
+       return i;
56
+   }
57
+
58
+   gcc_pure
59
+   bool ContainsUri(const char *uri) const {
60
+       return FindByUri(uri) >= 0;
61
    }
62
 };
63
 
64
ncmpc-0.30.tar.xz/src/QueuePage.cxx -> ncmpc-0.32.tar.xz/src/QueuePage.cxx Changed
479
 
1
@@ -18,7 +18,7 @@
2
  */
3
 
4
 #include "QueuePage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "ListPage.hxx"
8
 #include "ListRenderer.hxx"
9
 #include "ListText.hxx"
10
@@ -27,21 +27,20 @@
11
 #include "screen_find.hxx"
12
 #include "save_playlist.hxx"
13
 #include "config.h"
14
-#include "Event.hxx"
15
 #include "i18n.h"
16
 #include "charset.hxx"
17
-#include "options.hxx"
18
+#include "Options.hxx"
19
 #include "mpdclient.hxx"
20
 #include "strfsong.hxx"
21
-#include "wreadln.hxx"
22
 #include "Completion.hxx"
23
+#include "Styles.hxx"
24
 #include "song_paint.hxx"
25
 #include "screen.hxx"
26
 #include "screen_utils.hxx"
27
 #include "SongPage.hxx"
28
 #include "LyricsPage.hxx"
29
 #include "db_completion.hxx"
30
-#include "Compiler.h"
31
+#include "util/Compiler.h"
32
 
33
 #ifndef NCMPC_MINI
34
 #include "hscroll.hxx"
35
@@ -49,12 +48,12 @@
36
 
37
 #include <mpd/client.h>
38
 
39
+#include <boost/asio/steady_timer.hpp>
40
+
41
 #include <set>
42
 #include <string>
43
 
44
-#include <ctype.h>
45
 #include <string.h>
46
-#include <glib.h>
47
 
48
 #define MAX_SONG_LENGTH 512
49
 
50
@@ -65,10 +64,11 @@
51
    mutable class hscroll hscroll;
52
 #endif
53
 
54
+   boost::asio::steady_timer hide_cursor_timer;
55
+
56
    MpdQueue *playlist = nullptr;
57
    int current_song_id = -1;
58
    int selected_song_id = -1;
59
-   guint timer_hide_cursor_id = 0;
60
 
61
    unsigned last_connection_id = 0;
62
    std::string connection_name;
63
@@ -79,15 +79,19 @@
64
    QueuePage(ScreenManager &_screen, WINDOW *w,
65
          Size size)
66
        :ListPage(w, size),
67
-        screen(_screen)
68
+        screen(_screen),
69
 #ifndef NCMPC_MINI
70
-       , hscroll(w, options.scroll_sep.c_str())
71
+        hscroll(screen.get_io_service(),
72
+            w, options.scroll_sep.c_str()),
73
 #endif
74
+        hide_cursor_timer(screen.get_io_service())
75
    {
76
    }
77
 
78
 private:
79
+   gcc_pure
80
    const struct mpd_song *GetSelectedSong() const;
81
+
82
    void SaveSelection();
83
    void RestoreSelection();
84
 
85
@@ -101,39 +105,40 @@
86
 
87
    bool OnSongChange(const struct mpd_status *status);
88
 
89
-   bool OnHideCursorTimer();
90
+   void OnHideCursorTimer(const boost::system::error_code &error) noexcept;
91
 
92
    void ScheduleHideCursor() {
93
-       assert(options.hide_cursor > 0);
94
-       assert(timer_hide_cursor_id == 0);
95
+       assert(options.hide_cursor > std::chrono::steady_clock::duration::zero());
96
 
97
-       timer_hide_cursor_id = ScheduleTimeout<QueuePage,
98
-                              &QueuePage::OnHideCursorTimer>(std::chrono::seconds(options.hide_cursor),
99
-                                             *this);
100
+       boost::system::error_code error;
101
+       hide_cursor_timer.expires_from_now(options.hide_cursor,
102
+                          error);
103
+       hide_cursor_timer.async_wait(std::bind(&QueuePage::OnHideCursorTimer, this,
104
+                              std::placeholders::_1));
105
    }
106
 
107
    /* virtual methods from class ListRenderer */
108
    void PaintListItem(WINDOW *w, unsigned i,
109
               unsigned y, unsigned width,
110
-              bool selected) const override;
111
+              bool selected) const noexcept override;
112
 
113
    /* virtual methods from class ListText */
114
    const char *GetListItemText(char *buffer, size_t size,
115
-                   unsigned i) const override;
116
+                   unsigned i) const noexcept override;
117
 
118
 public:
119
    /* virtual methods from class Page */
120
-   void OnOpen(struct mpdclient &c) override;
121
-   void OnClose() override;
122
-   void Paint() const override;
123
-   void Update(struct mpdclient &c, unsigned events) override;
124
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
125
+   void OnOpen(struct mpdclient &c) noexcept override;
126
+   void OnClose() noexcept override;
127
+   void Paint() const noexcept override;
128
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
129
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
130
 
131
 #ifdef HAVE_GETMOUSE
132
    bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate) override;
133
 #endif
134
 
135
-   const char *GetTitle(char *s, size_t size) const override;
136
+   const char *GetTitle(char *s, size_t size) const noexcept override;
137
 };
138
 
139
 const struct mpd_song *
140
@@ -168,7 +173,7 @@
141
        /* selection is still valid */
142
        return;
143
 
144
-   int pos = playlist->FindId(selected_song_id);
145
+   int pos = playlist->FindById(selected_song_id);
146
    if (pos >= 0)
147
        lw.SetCursor(pos);
148
 
149
@@ -177,7 +182,7 @@
150
 
151
 const char *
152
 QueuePage::GetListItemText(char *buffer, size_t size,
153
-              unsigned idx) const
154
+              unsigned idx) const noexcept
155
 {
156
    assert(idx < playlist->size());
157
 
158
@@ -317,19 +322,19 @@
159
    return 0;
160
 }
161
 
162
-static Page *
163
+static std::unique_ptr<Page>
164
 screen_queue_init(ScreenManager &_screen, WINDOW *w, Size size)
165
 {
166
-   return new QueuePage(_screen, w, size);
167
+   return std::make_unique<QueuePage>(_screen, w, size);
168
 }
169
 
170
-bool
171
-QueuePage::OnHideCursorTimer()
172
+void
173
+QueuePage::OnHideCursorTimer(const boost::system::error_code &error) noexcept
174
 {
175
-   assert(options.hide_cursor > 0);
176
-   assert(timer_hide_cursor_id != 0);
177
+   if (error)
178
+       return;
179
 
180
-   timer_hide_cursor_id = 0;
181
+   assert(options.hide_cursor > std::chrono::steady_clock::duration::zero());
182
 
183
    /* hide the cursor when mpd is playing and the user is inactive */
184
 
185
@@ -338,17 +343,14 @@
186
        Repaint();
187
    } else
188
        ScheduleHideCursor();
189
-
190
-   return false;
191
 }
192
 
193
 void
194
-QueuePage::OnOpen(struct mpdclient &c)
195
+QueuePage::OnOpen(struct mpdclient &c) noexcept
196
 {
197
    playlist = &c.playlist;
198
 
199
-   assert(timer_hide_cursor_id == 0);
200
-   if (options.hide_cursor > 0) {
201
+   if (options.hide_cursor > std::chrono::steady_clock::duration::zero()) {
202
        lw.hide_cursor = false;
203
        ScheduleHideCursor();
204
    }
205
@@ -358,12 +360,9 @@
206
 }
207
 
208
 void
209
-QueuePage::OnClose()
210
+QueuePage::OnClose() noexcept
211
 {
212
-   if (timer_hide_cursor_id != 0) {
213
-       g_source_remove(timer_hide_cursor_id);
214
-       timer_hide_cursor_id = 0;
215
-   }
216
+   hide_cursor_timer.cancel();
217
 
218
 #ifndef NCMPC_MINI
219
    if (options.scroll)
220
@@ -372,7 +371,7 @@
221
 }
222
 
223
 const char *
224
-QueuePage::GetTitle(char *str, size_t size) const
225
+QueuePage::GetTitle(char *str, size_t size) const noexcept
226
 {
227
    if (connection_name.empty())
228
        return _("Queue");
229
@@ -383,7 +382,7 @@
230
 
231
 void
232
 QueuePage::PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width,
233
-            bool selected) const
234
+            bool selected) const noexcept
235
 {
236
    assert(playlist != nullptr);
237
    assert(i < playlist->size());
238
@@ -401,7 +400,7 @@
239
 }
240
 
241
 void
242
-QueuePage::Paint() const
243
+QueuePage::Paint() const noexcept
244
 {
245
 #ifndef NCMPC_MINI
246
    if (options.scroll)
247
@@ -412,7 +411,7 @@
248
 }
249
 
250
 void
251
-QueuePage::Update(struct mpdclient &c, unsigned events)
252
+QueuePage::Update(struct mpdclient &c, unsigned events) noexcept
253
 {
254
    playing = c.playing;
255
 
256
@@ -444,7 +443,11 @@
257
 
258
    if (bstate & BUTTON1_DOUBLE_CLICKED) {
259
        /* stop */
260
-       screen.OnCommand(c, CMD_STOP);
261
+
262
+       auto *connection = c.GetConnection();
263
+       if (connection != nullptr &&
264
+           !mpd_run_stop(connection))
265
+           c.HandleError();
266
        return true;
267
    }
268
 
269
@@ -464,7 +467,7 @@
270
    } else if (bstate & BUTTON3_CLICKED) {
271
        /* delete */
272
        if (lw.selected == old_selected)
273
-           mpdclient_cmd_delete(&c, lw.selected);
274
+           c.RunDelete(lw.selected);
275
 
276
        lw.SetLength(playlist->size());
277
    }
278
@@ -477,22 +480,17 @@
279
 #endif
280
 
281
 bool
282
-QueuePage::OnCommand(struct mpdclient &c, command_t cmd)
283
+QueuePage::OnCommand(struct mpdclient &c, Command cmd)
284
 {
285
    struct mpd_connection *connection;
286
-   static command_t cached_cmd = CMD_NONE;
287
+   static Command cached_cmd = Command::NONE;
288
 
289
-   const command_t prev_cmd = cached_cmd;
290
+   const Command prev_cmd = cached_cmd;
291
    cached_cmd = cmd;
292
 
293
    lw.hide_cursor = false;
294
 
295
-   if (options.hide_cursor > 0) {
296
-       if (timer_hide_cursor_id != 0) {
297
-           g_source_remove(timer_hide_cursor_id);
298
-           timer_hide_cursor_id = 0;
299
-       }
300
-
301
+   if (options.hide_cursor > std::chrono::steady_clock::duration::zero()) {
302
        ScheduleHideCursor();
303
    }
304
 
305
@@ -502,32 +500,38 @@
306
    }
307
 
308
    switch(cmd) {
309
-   case CMD_SCREEN_UPDATE:
310
-       CenterPlayingItem(c.status, prev_cmd == CMD_SCREEN_UPDATE);
311
+       int pos;
312
+
313
+   case Command::SCREEN_UPDATE:
314
+       CenterPlayingItem(c.status, prev_cmd == Command::SCREEN_UPDATE);
315
        SetDirty();
316
        return false;
317
-   case CMD_SELECT_PLAYING:
318
-       lw.SetCursor(c.playlist.Find(*c.song));
319
+   case Command::SELECT_PLAYING:
320
+       pos = c.GetCurrentSongPos();
321
+       if (pos < 0)
322
+           return false;
323
+
324
+       lw.SetCursor(pos);
325
        SaveSelection();
326
        SetDirty();
327
        return true;
328
 
329
-   case CMD_LIST_FIND:
330
-   case CMD_LIST_RFIND:
331
-   case CMD_LIST_FIND_NEXT:
332
-   case CMD_LIST_RFIND_NEXT:
333
-       screen_find(screen, &lw, cmd, *this);
334
+   case Command::LIST_FIND:
335
+   case Command::LIST_RFIND:
336
+   case Command::LIST_FIND_NEXT:
337
+   case Command::LIST_RFIND_NEXT:
338
+       screen_find(screen, lw, cmd, *this);
339
        SaveSelection();
340
        SetDirty();
341
        return true;
342
-   case CMD_LIST_JUMP:
343
-       screen_jump(screen, &lw, *this, *this);
344
+   case Command::LIST_JUMP:
345
+       screen_jump(screen, lw, *this, *this);
346
        SaveSelection();
347
        SetDirty();
348
        return true;
349
 
350
 #ifdef ENABLE_SONG_SCREEN
351
-   case CMD_SCREEN_SONG:
352
+   case Command::SCREEN_SONG:
353
        if (GetSelectedSong() != nullptr) {
354
            screen_song_switch(screen, c, *GetSelectedSong());
355
            return true;
356
@@ -537,14 +541,12 @@
357
 #endif
358
 
359
 #ifdef ENABLE_LYRICS_SCREEN
360
-   case CMD_SCREEN_LYRICS:
361
-       if (lw.selected < c.playlist.size()) {
362
-           struct mpd_song &selected = c.playlist[lw.selected];
363
+   case Command::SCREEN_LYRICS:
364
+       if (lw.selected < playlist->size()) {
365
+           struct mpd_song &selected = (*playlist)[lw.selected];
366
            bool follow = false;
367
 
368
-           if (c.song &&
369
-               !strcmp(mpd_song_get_uri(&selected),
370
-                   mpd_song_get_uri(c.song)))
371
+           if (&selected == c.GetPlayingSong())
372
                follow = true;
373
 
374
            screen_lyrics_switch(screen, c, selected, follow);
375
@@ -553,9 +555,9 @@
376
 
377
        break;
378
 #endif
379
-   case CMD_SCREEN_SWAP:
380
-       if (!c.playlist.empty())
381
-           screen.Swap(c, &c.playlist[lw.selected]);
382
+   case Command::SCREEN_SWAP:
383
+       if (!playlist->empty())
384
+           screen.Swap(c, &(*playlist)[lw.selected]);
385
        else
386
            screen.Swap(c, nullptr);
387
        return true;
388
@@ -571,7 +573,7 @@
389
        const struct mpd_song *song;
390
        ListWindowRange range;
391
 
392
-   case CMD_PLAY:
393
+   case Command::PLAY:
394
        song = GetSelectedSong();
395
        if (song == nullptr)
396
            return false;
397
@@ -583,23 +585,22 @@
398
 
399
        return true;
400
 
401
-   case CMD_DELETE:
402
+   case Command::DELETE:
403
        range = lw.GetRange();
404
-       mpdclient_cmd_delete_range(&c, range.start_index,
405
-                      range.end_index);
406
+       c.RunDeleteRange(range.start_index, range.end_index);
407
 
408
        lw.SetCursor(range.start_index);
409
        return true;
410
 
411
-   case CMD_SAVE_PLAYLIST:
412
+   case Command::SAVE_PLAYLIST:
413
        playlist_save(&c, nullptr, nullptr);
414
        return true;
415
 
416
-   case CMD_ADD:
417
+   case Command::ADD:
418
        handle_add_to_playlist(&c);
419
        return true;
420
 
421
-   case CMD_SHUFFLE:
422
+   case Command::SHUFFLE:
423
        range = lw.GetRange();
424
        if (range.end_index <= range.start_index + 1)
425
            /* No range selection, shuffle all list. */
426
@@ -616,13 +617,12 @@
427
            c.HandleError();
428
        return true;
429
 
430
-   case CMD_LIST_MOVE_UP:
431
+   case Command::LIST_MOVE_UP:
432
        range = lw.GetRange();
433
        if (range.start_index == 0 || range.empty())
434
            return false;
435
 
436
-       if (!mpdclient_cmd_move(&c, range.end_index - 1,
437
-                   range.start_index - 1))
438
+       if (!c.RunMove(range.end_index - 1, range.start_index - 1))
439
            return true;
440
 
441
        lw.selected--;
442
@@ -635,13 +635,12 @@
443
        SaveSelection();
444
        return true;
445
 
446
-   case CMD_LIST_MOVE_DOWN:
447
+   case Command::LIST_MOVE_DOWN:
448
        range = lw.GetRange();
449
-       if (range.end_index >= c.playlist.size())
450
+       if (range.end_index >= playlist->size())
451
            return false;
452
 
453
-       if (!mpdclient_cmd_move(&c, range.start_index,
454
-                   range.end_index))
455
+       if (!c.RunMove(range.start_index, range.end_index))
456
            return true;
457
 
458
        lw.selected++;
459
@@ -654,7 +653,7 @@
460
        SaveSelection();
461
        return true;
462
 
463
-   case CMD_LOCATE:
464
+   case Command::LOCATE:
465
        if (GetSelectedSong() != nullptr) {
466
            screen_file_goto_song(screen, c, *GetSelectedSong());
467
            return true;
468
@@ -669,7 +668,9 @@
469
    return false;
470
 }
471
 
472
-const struct screen_functions screen_queue = {
473
+const PageMeta screen_queue = {
474
    "playlist",
475
+   N_("Queue"),
476
+   Command::SCREEN_PLAY,
477
    screen_queue_init,
478
 };
479
ncmpc-0.30.tar.xz/src/QueuePage.hxx -> ncmpc-0.32.tar.xz/src/QueuePage.hxx Changed
11
 
1
@@ -20,6 +20,8 @@
2
 #ifndef NCMPC_QUEUE_PAGE_HXX
3
 #define NCMPC_QUEUE_PAGE_HXX
4
 
5
-extern const struct screen_functions screen_queue;
6
+struct PageMeta;
7
+
8
+extern const PageMeta screen_queue;
9
 
10
 #endif
11
ncmpc-0.30.tar.xz/src/SearchPage.cxx -> ncmpc-0.32.tar.xz/src/SearchPage.cxx Changed
348
 
1
@@ -18,11 +18,13 @@
2
  */
3
 
4
 #include "SearchPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen_status.hxx"
8
 #include "TextListRenderer.hxx"
9
 #include "i18n.h"
10
-#include "options.hxx"
11
+#include "Options.hxx"
12
+#include "Bindings.hxx"
13
+#include "GlobalBindings.hxx"
14
 #include "charset.hxx"
15
 #include "mpdclient.hxx"
16
 #include "strfsong.hxx"
17
@@ -31,8 +33,6 @@
18
 #include "filelist.hxx"
19
 #include "util/Macros.hxx"
20
 
21
-#include <glib.h>
22
-
23
 #include <string.h>
24
 
25
 enum {
26
@@ -40,7 +40,7 @@
27
    SEARCH_ARTIST_TITLE
28
 };
29
 
30
-static const struct {
31
+static constexpr struct {
32
    enum mpd_tag_type tag_type;
33
    const char *name;
34
    const char *localname;
35
@@ -61,7 +61,7 @@
36
 static int
37
 search_get_tag_id(const char *name)
38
 {
39
-   if (g_ascii_strcasecmp(name, "file") == 0 ||
40
+   if (strcasecmp(name, "file") == 0 ||
41
        strcasecmp(name, _("file")) == 0)
42
        return SEARCH_URI;
43
 
44
@@ -78,7 +78,7 @@
45
    const char *label;
46
 } search_type_t;
47
 
48
-static search_type_t mode[] = {
49
+static constexpr search_type_t mode[] = {
50
    { MPD_TAG_TITLE, N_("Title") },
51
    { MPD_TAG_ARTIST, N_("Artist") },
52
    { MPD_TAG_ALBUM, N_("Album") },
53
@@ -88,6 +88,9 @@
54
 };
55
 
56
 static const char *const help_text[] = {
57
+   "",
58
+   "",
59
+   "",
60
    "Quick     -  Enter a string and ncmpc will search according",
61
    "             to the current search mode (displayed above).",
62
    "",
63
@@ -122,20 +125,37 @@
64
 
65
 public:
66
    /* virtual methods from class Page */
67
-   void OnOpen(struct mpdclient &c) override;
68
-   void Paint() const override;
69
-   void Update(struct mpdclient &c, unsigned events) override;
70
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
71
-   const char *GetTitle(char *s, size_t size) const override;
72
+   void Paint() const noexcept override;
73
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
74
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
75
+   const char *GetTitle(char *s, size_t size) const noexcept override;
76
 };
77
 
78
 /* search info */
79
 class SearchHelpText final : public ListText {
80
 public:
81
    /* virtual methods from class ListText */
82
-   const char *GetListItemText(char *, size_t, unsigned idx) const override {
83
+   const char *GetListItemText(char *buffer, size_t size,
84
+                   unsigned idx) const noexcept override {
85
        assert(idx < ARRAY_SIZE(help_text));
86
 
87
+       if (idx == 0) {
88
+           snprintf(buffer, size,
89
+                " %s : %s",
90
+                GetGlobalKeyBindings().GetKeyNames(Command::SCREEN_SEARCH).c_str(),
91
+                "New search");
92
+           return buffer;
93
+       }
94
+
95
+       if (idx == 1) {
96
+           snprintf(buffer, size,
97
+                " %s : %s [%s]",
98
+                GetGlobalKeyBindings().GetKeyNames(Command::SEARCH_MODE).c_str(),
99
+                get_key_description(Command::SEARCH_MODE),
100
+                gettext(mode[options.search_mode].label));
101
+           return buffer;
102
+       }
103
+
104
        return help_text[idx];
105
    }
106
 };
107
@@ -212,20 +232,13 @@
108
    if (strchr(query, ':') == nullptr)
109
        return nullptr;
110
 
111
-   int i, j;
112
-   char *str = g_strdup(query);
113
-
114
-   char *tabv[10];
115
-   char *matchv[10];
116
-   int table[10];
117
-   char *arg[10];
118
+   std::string str(query);
119
 
120
-   memset(tabv, 0, 10 * sizeof(char *));
121
-   memset(matchv, 0, 10 * sizeof(char *));
122
-   memset(arg, 0, 10 * sizeof(char *));
123
+   static constexpr size_t N = 10;
124
 
125
-   for (i = 0; i < 10; i++)
126
-       table[i] = -1;
127
+   char *tabv[N];
128
+   char *matchv[N];
129
+   int table[N];
130
 
131
    /*
132
     * Replace every : with a '\0' and every space character
133
@@ -233,8 +246,8 @@
134
     * to their proper vector.
135
     */
136
    int spi = -1;
137
-   j = 0;
138
-   for (i = 0; str[i] != '\0' && j < 10; i++) {
139
+   size_t n = 0;
140
+   for (size_t i = 0; str[i] != '\0' && n < N; i++) {
141
        switch(str[i]) {
142
        case ' ':
143
            spi = i;
144
@@ -244,9 +257,16 @@
145
            if (spi != -1)
146
                str[spi] = '\0';
147
 
148
-           matchv[j] = str + i + 1;
149
-           tabv[j] = str + spi + 1;
150
-           j++;
151
+           matchv[n] = &str[i + 1];
152
+           tabv[n] = &str[spi + 1];
153
+           table[n] = search_get_tag_id(tabv[n]);
154
+           if (table[n] < 0) {
155
+               screen_status_printf(_("Bad search tag %s"),
156
+                            tabv[n]);
157
+               return nullptr;
158
+           }
159
+
160
+           ++n;
161
            /* FALLTHROUGH */
162
        default:
163
            continue;
164
@@ -254,34 +274,12 @@
165
    }
166
 
167
    /* Get rid of obvious failure case */
168
-   if (matchv[j - 1][0] == '\0') {
169
-       screen_status_printf(_("No argument for search tag %s"), tabv[j - 1]);
170
-       g_free(str);
171
+   if (matchv[n - 1][0] == '\0') {
172
+       screen_status_printf(_("No argument for search tag %s"), tabv[n - 1]);
173
        return nullptr;
174
    }
175
 
176
-   int id = j = i = 0;
177
-   while (matchv[i] && matchv[i][0] != '\0' && i < 10) {
178
-       id = search_get_tag_id(tabv[i]);
179
-       if (id == -1) {
180
-           screen_status_printf(_("Bad search tag %s"), tabv[i]);
181
-       } else {
182
-           table[j] = id;
183
-           arg[j] = locale_to_utf8(matchv[i]);
184
-           j++;
185
-           advanced_search_mode = true;
186
-       }
187
-
188
-       i++;
189
-   }
190
-
191
-   g_free(str);
192
-
193
-   if (!advanced_search_mode || j == 0) {
194
-       for (i = 0; arg[i] != nullptr; ++i)
195
-           g_free(arg[i]);
196
-       return nullptr;
197
-   }
198
+   advanced_search_mode = true;
199
 
200
    /*-----------------------------------------------------------------------
201
     * NOTE (again): This code exists to test a new search ui,
202
@@ -292,15 +290,18 @@
203
    /** stupid - but this is just a test...... (fulhack)  */
204
    mpd_search_db_songs(connection, false);
205
 
206
-   for (i = 0; i < 10 && arg[i] != nullptr; i++) {
207
+   for (size_t i = 0; i < n; i++) {
208
+       const LocaleToUtf8 value(matchv[i]);
209
+
210
        if (table[i] == SEARCH_URI)
211
            mpd_search_add_uri_constraint(connection,
212
                              MPD_OPERATOR_DEFAULT,
213
-                             arg[i]);
214
+                             value.c_str());
215
        else
216
            mpd_search_add_tag_constraint(connection,
217
                              MPD_OPERATOR_DEFAULT,
218
-                             (enum mpd_tag_type)table[i], arg[i]);
219
+                             (enum mpd_tag_type)table[i],
220
+                             value.c_str());
221
    }
222
 
223
    mpd_search_commit(connection);
224
@@ -310,9 +311,6 @@
225
        fl = nullptr;
226
    }
227
 
228
-   for (i = 0; arg[i] != nullptr; ++i)
229
-       g_free(arg[i]);
230
-
231
    return fl;
232
 }
233
 
234
@@ -379,24 +377,14 @@
235
    Reload(c);
236
 }
237
 
238
-static Page *
239
+static std::unique_ptr<Page>
240
 screen_search_init(ScreenManager &_screen, WINDOW *w, Size size)
241
 {
242
-   return new SearchPage(_screen, w, size);
243
+   return std::make_unique<SearchPage>(_screen, w, size);
244
 }
245
 
246
 void
247
-SearchPage::OnOpen(gcc_unused struct mpdclient &c)
248
-{
249
-   //  if( pattern==nullptr )
250
-   //    search_new(screen, c);
251
-   // else
252
-   screen_status_printf(_("Press %s for a new search"),
253
-                get_key_names(CMD_SCREEN_SEARCH, false));
254
-}
255
-
256
-void
257
-SearchPage::Paint() const
258
+SearchPage::Paint() const noexcept
259
 {
260
    if (filelist) {
261
        FileListPage::Paint();
262
@@ -406,25 +394,24 @@
263
 }
264
 
265
 const char *
266
-SearchPage::GetTitle(char *str, size_t size) const
267
+SearchPage::GetTitle(char *str, size_t size) const noexcept
268
 {
269
    if (advanced_search_mode && !pattern.empty())
270
-       snprintf(str, size, _("Search: %s"), pattern.c_str());
271
+       snprintf(str, size, "%s '%s'", _("Search"), pattern.c_str());
272
    else if (!pattern.empty())
273
        snprintf(str, size,
274
-            _("Search: Results for %s [%s]"),
275
+            "%s '%s' [%s]",
276
+            _("Search"),
277
             pattern.c_str(),
278
-            _(mode[options.search_mode].label));
279
+            gettext(mode[options.search_mode].label));
280
    else
281
-       snprintf(str, size, _("Search: Press %s for a new search [%s]"),
282
-            get_key_names(CMD_SCREEN_SEARCH, false),
283
-            _(mode[options.search_mode].label));
284
+       return _("Search");
285
 
286
    return str;
287
 }
288
 
289
 void
290
-SearchPage::Update(struct mpdclient &c, unsigned events)
291
+SearchPage::Update(struct mpdclient &c, unsigned events) noexcept
292
 {
293
    if (filelist != nullptr && events & MPD_IDLE_QUEUE) {
294
        screen_browser_sync_highlights(filelist, &c.playlist);
295
@@ -433,25 +420,34 @@
296
 }
297
 
298
 bool
299
-SearchPage::OnCommand(struct mpdclient &c, command_t cmd)
300
+SearchPage::OnCommand(struct mpdclient &c, Command cmd)
301
 {
302
    switch (cmd) {
303
-   case CMD_SEARCH_MODE:
304
+   case Command::SEARCH_MODE:
305
        options.search_mode++;
306
        if (mode[options.search_mode].label == nullptr)
307
            options.search_mode = 0;
308
        screen_status_printf(_("Search mode: %s"),
309
-                    _(mode[options.search_mode].label));
310
-       /* fall through */
311
-   case CMD_SCREEN_UPDATE:
312
+                    gettext(mode[options.search_mode].label));
313
+
314
+       if (pattern.empty())
315
+           /* show the new mode in the help text */
316
+           SetDirty();
317
+       else if (!advanced_search_mode)
318
+           /* reload only if the new search mode is going
319
+              to be considered */
320
+           Reload(c);
321
+       return true;
322
+
323
+   case Command::SCREEN_UPDATE:
324
        Reload(c);
325
        return true;
326
 
327
-   case CMD_SCREEN_SEARCH:
328
+   case Command::SCREEN_SEARCH:
329
        Start(c);
330
        return true;
331
 
332
-   case CMD_CLEAR:
333
+   case Command::CLEAR:
334
        Clear(true);
335
        lw.Reset();
336
        return true;
337
@@ -466,7 +462,9 @@
338
    return false;
339
 }
340
 
341
-const struct screen_functions screen_search = {
342
+const PageMeta screen_search = {
343
    "search",
344
+   N_("Search"),
345
+   Command::SCREEN_SEARCH,
346
    screen_search_init,
347
 };
348
ncmpc-0.30.tar.xz/src/SearchPage.hxx -> ncmpc-0.32.tar.xz/src/SearchPage.hxx Changed
11
 
1
@@ -23,7 +23,8 @@
2
 #include "config.h"
3
 
4
 #ifdef ENABLE_SEARCH_SCREEN
5
-extern const struct screen_functions screen_search;
6
+struct PageMeta;
7
+extern const PageMeta screen_search;
8
 #endif
9
 
10
 #endif
11
ncmpc-0.30.tar.xz/src/SongPage.cxx -> ncmpc-0.32.tar.xz/src/SongPage.cxx Changed
415
 
1
@@ -18,25 +18,26 @@
2
  */
3
 
4
 #include "SongPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "ListPage.hxx"
8
 #include "ListText.hxx"
9
 #include "TextListRenderer.hxx"
10
 #include "FileBrowserPage.hxx"
11
 #include "LyricsPage.hxx"
12
 #include "screen_find.hxx"
13
+#include "Command.hxx"
14
 #include "i18n.h"
15
 #include "screen.hxx"
16
 #include "charset.hxx"
17
 #include "time_format.hxx"
18
 #include "mpdclient.hxx"
19
+#include "util/LocaleString.hxx"
20
 #include "util/Macros.hxx"
21
 #include "util/StringStrip.hxx"
22
 
23
 #include <mpd/client.h>
24
 
25
-#include <glib/gprintf.h>
26
-
27
+#include <algorithm>
28
 #include <vector>
29
 #include <string>
30
 
31
@@ -57,7 +58,7 @@
32
    const char *label;
33
 };
34
 
35
-static const struct tag_label tag_labels[] = {
36
+static constexpr struct tag_label tag_labels[] = {
37
    { MPD_TAG_ARTIST, N_("Artist") },
38
    { MPD_TAG_TITLE, N_("Title") },
39
    { MPD_TAG_ALBUM, N_("Album") },
40
@@ -88,7 +89,7 @@
41
    STATS_DBPLAYTIME,
42
 };
43
 
44
-static const char *const stats_labels[] = {
45
+static constexpr const char *stats_labels[] = {
46
    N_("Number of artists"),
47
    N_("Number of albums"),
48
    N_("Number of songs"),
49
@@ -111,50 +112,52 @@
50
    std::vector<std::string> lines;
51
 
52
 public:
53
-   SongPage(ScreenManager &_screen, WINDOW *w, Size size)
54
+   SongPage(ScreenManager &_screen, WINDOW *w, Size size) noexcept
55
        :ListPage(w, size),
56
         screen(_screen) {
57
        lw.hide_cursor = true;
58
    }
59
 
60
-   ~SongPage() override {
61
+   ~SongPage() noexcept override {
62
        Clear();
63
    }
64
 
65
 private:
66
-   void Clear();
67
+   void Clear() noexcept;
68
 
69
    /**
70
     * Appends a line with a fixed width for the label column.
71
     * Handles nullptr strings gracefully.
72
     */
73
    void AppendLine(const char *label, const char *value,
74
-           unsigned label_col);
75
+           unsigned label_col) noexcept;
76
 
77
-   void AppendTag(const struct mpd_song *song, enum mpd_tag_type tag);
78
-   void AddSong(const struct mpd_song *song);
79
-   void AppendStatsLine(enum stats_label label, const char *value);
80
-   bool AddStats(struct mpd_connection *connection);
81
+   void AppendTag(const struct mpd_song *song,
82
+              enum mpd_tag_type tag) noexcept;
83
+   void AddSong(const struct mpd_song *song) noexcept;
84
+   void AppendStatsLine(enum stats_label label,
85
+                const char *value) noexcept;
86
+   bool AddStats(struct mpd_connection *connection) noexcept;
87
 
88
 public:
89
    /* virtual methods from class Page */
90
-   void OnClose() override {
91
+   void OnClose() noexcept override {
92
        Clear();
93
    }
94
 
95
-   void Paint() const override;
96
-   void Update(struct mpdclient &c, unsigned events) override;
97
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
98
-   const char *GetTitle(char *s, size_t size) const override;
99
+   void Paint() const noexcept override;
100
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
101
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
102
+   const char *GetTitle(char *s, size_t size) const noexcept override;
103
 
104
 private:
105
    /* virtual methods from class ListText */
106
    const char *GetListItemText(char *buffer, size_t size,
107
-                   unsigned i) const override;
108
+                   unsigned i) const noexcept override;
109
 };
110
 
111
 void
112
-SongPage::Clear()
113
+SongPage::Clear() noexcept
114
 {
115
    lines.clear();
116
 
117
@@ -169,116 +172,116 @@
118
 }
119
 
120
 const char *
121
-SongPage::GetListItemText(char *, size_t, unsigned idx) const
122
+SongPage::GetListItemText(char *, size_t, unsigned idx) const noexcept
123
 {
124
    return lines[idx].c_str();
125
 }
126
 
127
-static Page *
128
-screen_song_init(ScreenManager &_screen, WINDOW *w, Size size)
129
+static std::unique_ptr<Page>
130
+screen_song_init(ScreenManager &_screen, WINDOW *w, Size size) noexcept
131
 {
132
    for (unsigned i = 0; tag_labels[i].label != nullptr; ++i) {
133
-       unsigned width = utf8_width(_(tag_labels[i].label));
134
+       unsigned width = StringWidthMB(gettext(tag_labels[i].label));
135
        if (width > max_tag_label_width)
136
            max_tag_label_width = width;
137
    }
138
 
139
    for (unsigned i = 0; i < ARRAY_SIZE(stats_labels); ++i) {
140
        if (stats_labels[i] != nullptr) {
141
-           unsigned width = utf8_width(_(stats_labels[i]));
142
+           unsigned width = StringWidthMB(gettext(stats_labels[i]));
143
 
144
            if (width > max_stats_label_width)
145
                max_stats_label_width = width;
146
        }
147
    }
148
 
149
-   return new SongPage(_screen, w, size);
150
+   return std::make_unique<SongPage>(_screen, w, size);
151
 }
152
 
153
 const char *
154
-SongPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const
155
+SongPage::GetTitle(gcc_unused char *str, gcc_unused size_t size) const noexcept
156
 {
157
    return _("Song viewer");
158
 }
159
 
160
 void
161
-SongPage::Paint() const
162
+SongPage::Paint() const noexcept
163
 {
164
    lw.Paint(TextListRenderer(*this));
165
 }
166
 
167
 void
168
-SongPage::AppendLine(const char *label, const char *value, unsigned label_col)
169
+SongPage::AppendLine(const char *label, const char *value_utf8,
170
+            unsigned label_col) noexcept
171
 {
172
-   const unsigned label_width = locale_width(label) + 2;
173
-
174
    assert(label != nullptr);
175
-   assert(value != nullptr);
176
-   assert(g_utf8_validate(value, -1, nullptr));
177
+   assert(value_utf8 != nullptr);
178
+
179
+   static constexpr size_t BUFFER_SIZE = 1024;
180
+   if (label_col >= BUFFER_SIZE - 16)
181
+       return;
182
 
183
    /* +2 for ': ' */
184
    label_col += 2;
185
    const int value_col = lw.size.width - label_col;
186
    /* calculate the number of required linebreaks */
187
-   const gchar *value_iter = value;
188
-   const size_t label_length = strlen(label);
189
-   const size_t label_size = label_length + label_col;
190
+   const Utf8ToLocale value_locale(value_utf8);
191
+   const char *value = value_locale.c_str();
192
+
193
+   const char *const value_end = value + strlen(value);
194
+   const char *value_iter = value;
195
 
196
    while (*value_iter != 0) {
197
-       char *entry = (char *)g_malloc(label_size), *entry_iter;
198
+       char buffer[BUFFER_SIZE];
199
+       const char *const buffer_end = buffer + BUFFER_SIZE;
200
+
201
+       char *p = buffer;
202
+       size_t n_space = label_col;
203
        if (value_iter == value) {
204
-           memcpy(entry, label, label_length);
205
-           entry_iter = entry + label_length;
206
-           *entry_iter++ = ':';
207
+           const size_t label_length = std::min(strlen(label),
208
+                                BUFFER_SIZE - 16);
209
+           p = std::copy_n(label, label_length, p);
210
+           *p++ = ':';
211
            /* fill the label column with whitespaces */
212
-           size_t n_space = label_col - label_width + 1;
213
-           memset(entry_iter, ' ', n_space);
214
-           entry_iter += n_space;
215
-       }
216
-       else {
217
-           /* fill the label column with whitespaces */
218
-           memset(entry, ' ', label_col);
219
-           entry_iter = entry + label_col;
220
+           const unsigned label_width = StringWidthMB(label);
221
+           n_space -= label_width + 1;
222
        }
223
+
224
+       p = std::fill_n(p, n_space, ' ');
225
+
226
        /* skip whitespaces */
227
        value_iter = StripLeft(value_iter);
228
 
229
-       char *p = g_strdup(value_iter);
230
-       unsigned width = utf8_cut_width(p, value_col);
231
-       if (width == 0) {
232
+       const char *value_iter_end = AtWidthMB(value_iter,
233
+                              value_end - value_iter,
234
+                              value_col);
235
+       if (value_iter_end == value_iter)
236
            /* not enough room for anything - bail out */
237
-           g_free(entry);
238
-           g_free(p);
239
            break;
240
-       }
241
-
242
-       *entry_iter = 0;
243
 
244
-       value_iter += strlen(p);
245
-       p = replace_utf8_to_locale(p);
246
-       char *q = g_strconcat(entry, p, nullptr);
247
-       g_free(entry);
248
-       g_free(p);
249
+       p += snprintf(p, buffer_end - p, "%.*s",
250
+                 int(value_iter_end - value_iter), value_iter);
251
+       value_iter = value_iter_end;
252
 
253
-       lines.emplace_back(q);
254
-       g_free(q);
255
+       lines.emplace_back(buffer, p);
256
    }
257
 }
258
 
259
 gcc_pure
260
 static const char *
261
-get_tag_label(unsigned tag)
262
+get_tag_label(unsigned tag) noexcept
263
 {
264
    for (unsigned i = 0; tag_labels[i].label != nullptr; ++i)
265
        if (tag_labels[i].tag_type == tag)
266
-           return _(tag_labels[i].label);
267
+           return gettext(tag_labels[i].label);
268
 
269
    assert(tag < MPD_TAG_COUNT);
270
    return mpd_tag_name((enum mpd_tag_type)tag);
271
 }
272
 
273
 void
274
-SongPage::AppendTag(const struct mpd_song *song, enum mpd_tag_type tag)
275
+SongPage::AppendTag(const struct mpd_song *song,
276
+           enum mpd_tag_type tag) noexcept
277
 {
278
    const char *label = get_tag_label(tag);
279
    unsigned i = 0;
280
@@ -292,7 +295,7 @@
281
 }
282
 
283
 void
284
-SongPage::AddSong(const struct mpd_song *song)
285
+SongPage::AddSong(const struct mpd_song *song) noexcept
286
 {
287
    assert(song != nullptr);
288
 
289
@@ -352,14 +355,13 @@
290
 }
291
 
292
 void
293
-SongPage::AppendStatsLine(enum stats_label label, const char *value)
294
+SongPage::AppendStatsLine(enum stats_label label, const char *value) noexcept
295
 {
296
-   AppendLine(_(stats_labels[label]), value,
297
-              max_stats_label_width);
298
+   AppendLine(gettext(stats_labels[label]), value, max_stats_label_width);
299
 }
300
 
301
 bool
302
-SongPage::AddStats(struct mpd_connection *connection)
303
+SongPage::AddStats(struct mpd_connection *connection) noexcept
304
 {
305
    struct mpd_stats *mpd_stats = mpd_run_stats(connection);
306
    if (mpd_stats == nullptr)
307
@@ -400,7 +402,7 @@
308
 
309
 static void
310
 audio_format_to_string(char *buffer, size_t size,
311
-              const struct mpd_audio_format *format)
312
+              const struct mpd_audio_format *format) noexcept
313
 {
314
 #if LIBMPDCLIENT_CHECK_VERSION(2,10,0)
315
    if (format->bits == MPD_SAMPLE_FORMAT_FLOAT) {
316
@@ -434,7 +436,7 @@
317
 }
318
 
319
 void
320
-SongPage::Update(struct mpdclient &c, unsigned)
321
+SongPage::Update(struct mpdclient &c, unsigned) noexcept
322
 {
323
    lines.clear();
324
 
325
@@ -445,21 +447,22 @@
326
        next_song = nullptr;
327
    }
328
 
329
+   const auto *const playing_song = c.GetPlayingSong();
330
+
331
    if (selected_song != nullptr &&
332
-       (c.song == nullptr ||
333
+       (playing_song == nullptr ||
334
         strcmp(mpd_song_get_uri(selected_song),
335
-           mpd_song_get_uri(c.song)) != 0 ||
336
-        !c.playing_or_paused)) {
337
+           mpd_song_get_uri(playing_song)) != 0)) {
338
        lines.emplace_back(_("Selected song"));
339
        AddSong(selected_song);
340
        lines.emplace_back(std::string());
341
    }
342
 
343
-   if (c.song != nullptr && c.playing_or_paused) {
344
+   if (playing_song) {
345
        if (played_song != nullptr)
346
            mpd_song_free(played_song);
347
 
348
-       played_song = mpd_song_dup(c.song);
349
+       played_song = mpd_song_dup(playing_song);
350
        lines.emplace_back(_("Currently playing song"));
351
        AddSong(played_song);
352
 
353
@@ -493,13 +496,13 @@
354
 }
355
 
356
 bool
357
-SongPage::OnCommand(struct mpdclient &c, command_t cmd)
358
+SongPage::OnCommand(struct mpdclient &c, Command cmd)
359
 {
360
    if (ListPage::OnCommand(c, cmd))
361
        return true;
362
 
363
    switch(cmd) {
364
-   case CMD_LOCATE:
365
+   case Command::LOCATE:
366
        if (selected_song != nullptr) {
367
            screen_file_goto_song(screen, c, *selected_song);
368
            return true;
369
@@ -512,7 +515,7 @@
370
        return false;
371
 
372
 #ifdef ENABLE_LYRICS_SCREEN
373
-   case CMD_SCREEN_LYRICS:
374
+   case Command::SCREEN_LYRICS:
375
        if (selected_song != nullptr) {
376
            screen_lyrics_switch(screen, c, *selected_song, false);
377
            return true;
378
@@ -525,7 +528,7 @@
379
 
380
 #endif
381
 
382
-   case CMD_SCREEN_SWAP:
383
+   case Command::SCREEN_SWAP:
384
        if (selected_song != nullptr)
385
            screen.Swap(c, selected_song);
386
        else
387
@@ -537,7 +540,7 @@
388
        break;
389
    }
390
 
391
-   if (screen_find(screen, &lw, cmd, *this)) {
392
+   if (screen_find(screen, lw, cmd, *this)) {
393
        /* center the row */
394
        lw.Center(lw.selected);
395
        SetDirty();
396
@@ -547,14 +550,16 @@
397
    return false;
398
 }
399
 
400
-const struct screen_functions screen_song = {
401
+const PageMeta screen_song = {
402
    "song",
403
+   N_("Song"),
404
+   Command::SCREEN_SONG,
405
    screen_song_init,
406
 };
407
 
408
 void
409
 screen_song_switch(ScreenManager &_screen, struct mpdclient &c,
410
-          const struct mpd_song &song)
411
+          const struct mpd_song &song) noexcept
412
 {
413
    next_song = mpd_song_dup(&song);
414
    _screen.Switch(screen_song, c);
415
ncmpc-0.30.tar.xz/src/SongPage.hxx -> ncmpc-0.32.tar.xz/src/SongPage.hxx Changed
18
 
1
@@ -26,13 +26,14 @@
2
 
3
 struct mpdclient;
4
 struct mpd_song;
5
+struct PageMeta;
6
 class ScreenManager;
7
 
8
-extern const struct screen_functions screen_song;
9
+extern const PageMeta screen_song;
10
 
11
 void
12
 screen_song_switch(ScreenManager &_screen, struct mpdclient &c,
13
-          const struct mpd_song &song);
14
+          const struct mpd_song &song) noexcept;
15
 
16
 #endif /* ENABLE_SONG_SCREEN */
17
 
18
ncmpc-0.30.tar.xz/src/StatusBar.cxx -> ncmpc-0.32.tar.xz/src/StatusBar.cxx Changed
236
 
1
@@ -18,37 +18,37 @@
2
  */
3
 
4
 #include "StatusBar.hxx"
5
-#include "Event.hxx"
6
-#include "options.hxx"
7
-#include "colors.hxx"
8
+#include "Options.hxx"
9
+#include "Styles.hxx"
10
 #include "i18n.h"
11
-#include "charset.hxx"
12
 #include "strfsong.hxx"
13
-#include "player_command.hxx"
14
+#include "DelayedSeek.hxx"
15
 #include "time_format.hxx"
16
+#include "util/LocaleString.hxx"
17
 
18
 #include <mpd/client.h>
19
 
20
 #include <assert.h>
21
 #include <string.h>
22
 
23
-StatusBar::StatusBar(Point p, unsigned width)
24
-   :window(p, {width, 1u})
25
+StatusBar::StatusBar(boost::asio::io_service &io_service,
26
+            Point p, unsigned width) noexcept
27
+   :window(p, {width, 1u}),
28
+    message_timer(io_service)
29
 #ifndef NCMPC_MINI
30
-   , hscroll(window.w, options.scroll_sep.c_str())
31
+   , hscroll(io_service, window.w, options.scroll_sep.c_str())
32
 #endif
33
 {
34
-
35
    leaveok(window.w, false);
36
    keypad(window.w, true);
37
 
38
 #ifdef ENABLE_COLORS
39
    if (options.enable_colors)
40
-       wbkgd(window.w, COLOR_PAIR(COLOR_STATUS));
41
+       wbkgd(window.w, COLOR_PAIR(Style::STATUS));
42
 #endif
43
 }
44
 
45
-StatusBar::~StatusBar()
46
+StatusBar::~StatusBar() noexcept
47
 {
48
 #ifndef NCMPC_MINI
49
    if (options.scroll)
50
@@ -57,24 +57,20 @@
51
 }
52
 
53
 void
54
-StatusBar::ClearMessage()
55
+StatusBar::ClearMessage() noexcept
56
 {
57
-   if (message_source_id != 0) {
58
-       g_source_remove(message_source_id);
59
-       message_source_id = 0;
60
-   }
61
+   message_timer.cancel();
62
+   message.clear();
63
 
64
-   WINDOW *w = window.w;
65
-
66
-   wmove(w, 0, 0);
67
-   wclrtoeol(w);
68
-   wrefresh(w);
69
+   Paint();
70
+   doupdate();
71
 }
72
 
73
 #ifndef NCMPC_MINI
74
 
75
 static void
76
-format_bitrate(char *p, size_t max_length, const struct mpd_status *status)
77
+format_bitrate(char *p, size_t max_length,
78
+          const struct mpd_status *status) noexcept
79
 {
80
    if (options.visible_bitrate && mpd_status_get_kbit_rate(status) > 0)
81
        snprintf(p, max_length,
82
@@ -88,7 +84,8 @@
83
 
84
 void
85
 StatusBar::Update(const struct mpd_status *status,
86
-         const struct mpd_song *song)
87
+         const struct mpd_song *song,
88
+         const DelayedSeek &seek) noexcept
89
 {
90
    const auto state = status == nullptr
91
        ? MPD_STATE_UNKNOWN
92
@@ -110,13 +107,12 @@
93
    }
94
 
95
    left_width = left_text != nullptr
96
-       ? utf8_width(left_text) + 1
97
+       ? StringWidthMB(left_text) + 1
98
        : 0;
99
 
100
    if (state == MPD_STATE_PLAY || state == MPD_STATE_PAUSE) {
101
-       unsigned elapsed_time = seek_id >= 0 &&
102
-           seek_id == mpd_status_get_song_id(status)
103
-           ? (unsigned)seek_target_time
104
+       unsigned elapsed_time = seek.IsSeeking(mpd_status_get_song_id(status))
105
+           ? seek.GetTime()
106
            : mpd_status_get_elapsed_time(status);
107
        const unsigned total_time = mpd_status_get_total_time(status);
108
 
109
@@ -158,7 +154,7 @@
110
 #endif
111
        }
112
 
113
-       right_width = utf8_width(right_text);
114
+       right_width = StringWidthMB(right_text);
115
 
116
 #ifndef NCMPC_MINI
117
        int width = COLS - left_width - right_width;
118
@@ -174,10 +170,10 @@
119
 
120
        /* scroll if the song name is to long */
121
 #ifndef NCMPC_MINI
122
-       center_width = utf8_width(center_text.c_str());
123
-       if (options.scroll &&
124
-           utf8_width(center_text.c_str()) > (unsigned)width) {
125
-           hscroll.Set(left_width, 0, width, center_text.c_str());
126
+       center_width = StringWidthMB(center_text.c_str());
127
+       if (options.scroll && center_width > (unsigned)width) {
128
+           hscroll.Set(left_width, 0, width, center_text.c_str(),
129
+                   Style::STATUS);
130
        } else {
131
            if (options.scroll)
132
                hscroll.Clear();
133
@@ -196,16 +192,21 @@
134
 }
135
 
136
 void
137
-StatusBar::Paint() const
138
+StatusBar::Paint() const noexcept
139
 {
140
    WINDOW *w = window.w;
141
 
142
-   if (message_source_id != 0)
143
-       return;
144
-
145
    wmove(w, 0, 0);
146
    wclrtoeol(w);
147
-   colors_use(w, COLOR_STATUS_BOLD);
148
+
149
+   if (!message.empty()) {
150
+       SelectStyle(w, Style::STATUS_ALERT);
151
+       waddstr(w, message.c_str());
152
+       wnoutrefresh(w);
153
+       return;
154
+   }
155
+
156
+   SelectStyle(w, Style::STATUS_BOLD);
157
 
158
    if (left_text != nullptr)
159
        /* display state */
160
@@ -214,14 +215,14 @@
161
    if (right_width > 0) {
162
        /* display time string */
163
        int x = window.size.width - right_width;
164
-       colors_use(w, COLOR_STATUS_TIME);
165
+       SelectStyle(w, Style::STATUS_TIME);
166
        mvwaddstr(w, 0, x, right_text);
167
    }
168
 
169
    if (!center_text.empty()) {
170
        /* display song name */
171
 
172
-       colors_use(w, COLOR_STATUS);
173
+       SelectStyle(w, Style::STATUS);
174
 
175
        /* scroll if the song name is to long */
176
 #ifndef NCMPC_MINI
177
@@ -234,47 +235,34 @@
178
 
179
    /* display time string */
180
    int x = window.size.width - right_width;
181
-   colors_use(w, COLOR_STATUS_TIME);
182
+   SelectStyle(w, Style::STATUS_TIME);
183
    mvwaddstr(w, 0, x, right_text);
184
 
185
    wnoutrefresh(w);
186
 }
187
 
188
 void
189
-StatusBar::OnResize(Point p, unsigned width)
190
+StatusBar::OnResize(Point p, unsigned width) noexcept
191
 {
192
    window.Resize({width, 1u});
193
    window.Move(p);
194
 }
195
 
196
-inline bool
197
-StatusBar::OnClearMessageTimer()
198
-{
199
-   assert(message_source_id != 0);
200
-   message_source_id = 0;
201
-   ClearMessage();
202
-   return false;
203
-}
204
-
205
 void
206
-StatusBar::SetMessage(const char *msg)
207
+StatusBar::SetMessage(const char *msg) noexcept
208
 {
209
-   WINDOW *w = window.w;
210
-
211
 #ifndef NCMPC_MINI
212
    if (options.scroll)
213
        hscroll.Clear();
214
 #endif
215
 
216
-   wmove(w, 0, 0);
217
-   wclrtoeol(w);
218
-   colors_use(w, COLOR_STATUS_ALERT);
219
-   waddstr(w, msg);
220
-   wnoutrefresh(w);
221
+   message = msg;
222
+   Paint();
223
+   doupdate();
224
 
225
-   if (message_source_id != 0)
226
-       g_source_remove(message_source_id);
227
-   message_source_id = ScheduleTimeout<StatusBar,
228
-                       &StatusBar::OnClearMessageTimer>(options.status_message_time,
229
-                                        *this);
230
+   boost::system::error_code error;
231
+   message_timer.expires_from_now(options.status_message_time,
232
+                      error);
233
+   message_timer.async_wait(std::bind(&StatusBar::OnMessageTimer, this,
234
+                      std::placeholders::_1));
235
 }
236
ncmpc-0.30.tar.xz/src/StatusBar.hxx -> ncmpc-0.32.tar.xz/src/StatusBar.hxx Changed
68
 
1
@@ -20,6 +20,7 @@
2
 #ifndef NCMPC_STATUS_BAR_HXX
3
 #define NCMPC_STATUS_BAR_HXX
4
 
5
+#include "config.h"
6
 #include "Window.hxx"
7
 
8
 #ifndef NCMPC_MINI
9
@@ -28,15 +29,19 @@
10
 
11
 #include <mpd/status.h>
12
 
13
+#include <boost/asio/steady_timer.hpp>
14
+
15
 #include <string>
16
 
17
 struct mpd_status;
18
 struct mpd_song;
19
+class DelayedSeek;
20
 
21
 class StatusBar {
22
    Window window;
23
 
24
-   unsigned message_source_id = 0;
25
+   std::string message;
26
+   boost::asio::steady_timer message_timer;
27
 
28
 #ifndef NCMPC_MINI
29
    class hscroll hscroll;
30
@@ -53,23 +58,28 @@
31
 #endif
32
 
33
 public:
34
-   StatusBar(Point p, unsigned width);
35
-   ~StatusBar();
36
+   StatusBar(boost::asio::io_service &io_service,
37
+         Point p, unsigned width) noexcept;
38
+   ~StatusBar() noexcept;
39
 
40
-   Window &GetWindow() {
41
+   Window &GetWindow() noexcept {
42
        return window;
43
    }
44
 
45
-   void SetMessage(const char *msg);
46
-   void ClearMessage();
47
+   void SetMessage(const char *msg) noexcept;
48
+   void ClearMessage() noexcept;
49
 
50
-   void OnResize(Point p, unsigned width);
51
+   void OnResize(Point p, unsigned width) noexcept;
52
    void Update(const struct mpd_status *status,
53
-           const struct mpd_song *song);
54
-   void Paint() const;
55
+           const struct mpd_song *song,
56
+           const DelayedSeek &seek) noexcept;
57
+   void Paint() const noexcept;
58
 
59
 private:
60
-   bool OnClearMessageTimer();
61
+   void OnMessageTimer(const boost::system::error_code &error) noexcept {
62
+       if (!error)
63
+           ClearMessage();
64
+   }
65
 };
66
 
67
 #endif
68
ncmpc-0.32.tar.xz/src/Styles.cxx Added
400
 
1
@@ -0,0 +1,398 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "Styles.hxx"
22
+#include "BasicColors.hxx"
23
+#include "CustomColors.hxx"
24
+#include "i18n.h"
25
+#include "util/StringStrip.hxx"
26
+
27
+#ifdef ENABLE_COLORS
28
+#include "Options.hxx"
29
+#endif
30
+
31
+#include <assert.h>
32
+#include <stdio.h>
33
+#include <stdlib.h>
34
+#include <string.h>
35
+
36
+/**
37
+ * Use the terminal's default color.
38
+ *
39
+ * @see init_pair(3ncurses)
40
+ */
41
+static constexpr short COLOR_NONE = -1;
42
+
43
+/**
44
+ * A non-standad magic value which means "inherit this color from the
45
+ * parent style".
46
+ */
47
+static constexpr short COLOR_INHERIT = -2;
48
+
49
+/**
50
+ * A magic value for certain parser functions to indicate that the
51
+ * parser has failed to recognize the string.
52
+ */
53
+static constexpr short COLOR_ERROR = -3;
54
+
55
+/**
56
+ * A non-standad magic value which means "inherit attributes from the
57
+ * parent style".
58
+ */
59
+static constexpr attr_t A_INHERIT = ~attr_t(0);
60
+
61
+struct StyleData {
62
+   /**
63
+    * A name which can be used to address this style from the
64
+    * configuration file.
65
+    */
66
+   const char *const name;
67
+
68
+#ifdef ENABLE_COLORS
69
+   /**
70
+    * Inherit unspecified values from this style.  The special
71
+    * value #Style::DEFAULT means "don't inherit".
72
+    */
73
+   const Style inherit;
74
+
75
+   /**
76
+    * The foreground (text) color in "color" mode.
77
+    */
78
+   short fg_color;
79
+
80
+   /**
81
+    * The background (fill) color in "color" mode.
82
+    */
83
+   short bg_color;
84
+
85
+   /**
86
+    * The attributes in "color" mode.
87
+    */
88
+   attr_t attr;
89
+#endif
90
+
91
+   /**
92
+    * The attributes in "mono" mode.
93
+    */
94
+   const attr_t mono;
95
+
96
+#ifndef ENABLE_COLORS
97
+   constexpr StyleData(const char *_name, Style,
98
+               short, short, attr_t, attr_t _mono)
99
+       :name(_name), mono(_mono) {}
100
+#endif
101
+};
102
+
103
+#ifndef ENABLE_COLORS
104
+constexpr
105
+#endif
106
+static StyleData styles[size_t(Style::END)] = {
107
+   /* color pair = field name, color, mono */
108
+   {
109
+       nullptr, Style::DEFAULT,
110
+       COLOR_NONE, COLOR_NONE, A_NORMAL,
111
+       A_NORMAL,
112
+   },
113
+   {
114
+       "title", Style::BACKGROUND,
115
+       COLOR_WHITE, COLOR_BLUE, A_NORMAL,
116
+       A_NORMAL,
117
+   },
118
+   {
119
+       "title-bold", Style::TITLE,
120
+       COLOR_YELLOW, COLOR_INHERIT, A_BOLD,
121
+       A_BOLD,
122
+   },
123
+   {
124
+       "line", Style::TITLE,
125
+       COLOR_WHITE, COLOR_INHERIT, A_NORMAL,
126
+       A_NORMAL,
127
+   },
128
+   {
129
+       "line-bold", Style::LINE,
130
+       COLOR_INHERIT, COLOR_INHERIT, A_BOLD,
131
+       A_BOLD,
132
+   },
133
+   {
134
+       "line-flags", Style::LINE,
135
+       COLOR_GREEN, COLOR_INHERIT, A_BOLD,
136
+       A_NORMAL,
137
+   },
138
+   {
139
+       "list", Style::BACKGROUND,
140
+       COLOR_WHITE, COLOR_INHERIT, A_NORMAL,
141
+       A_NORMAL,
142
+   },
143
+   {
144
+       "list-bold", Style::LIST,
145
+       COLOR_INHERIT, COLOR_INHERIT, A_BOLD,
146
+       A_BOLD,
147
+   },
148
+   {
149
+       "progressbar", Style::STATUS,
150
+       COLOR_WHITE, COLOR_INHERIT, A_BOLD,
151
+       A_NORMAL,
152
+   },
153
+   {
154
+       "progressbar-background", Style::PROGRESSBAR,
155
+       COLOR_BLACK, COLOR_INHERIT, A_BOLD,
156
+       A_NORMAL,
157
+   },
158
+   {
159
+       "status-song", Style::BACKGROUND,
160
+       COLOR_WHITE, COLOR_BLUE, A_NORMAL,
161
+       A_NORMAL,
162
+   },
163
+   {
164
+       "status-state", Style::STATUS,
165
+       COLOR_GREEN, COLOR_INHERIT, A_BOLD,
166
+       A_BOLD,
167
+   },
168
+   {
169
+       "status-time", Style::STATUS_BOLD,
170
+       COLOR_INHERIT, COLOR_INHERIT, A_NORMAL,
171
+       A_NORMAL,
172
+   },
173
+   {
174
+       "alert", Style::STATUS,
175
+       COLOR_RED, COLOR_INHERIT, A_BOLD,
176
+       A_BOLD,
177
+   },
178
+   {
179
+       "browser-directory", Style::LIST,
180
+       COLOR_YELLOW, COLOR_INHERIT, A_INHERIT,
181
+       A_NORMAL,
182
+   },
183
+   {
184
+       "browser-playlist", Style::LIST,
185
+       COLOR_RED, COLOR_INHERIT, A_INHERIT,
186
+       A_NORMAL,
187
+   },
188
+   {
189
+       "background", Style::DEFAULT,
190
+       COLOR_NONE, COLOR_BLACK, A_NORMAL,
191
+       A_NORMAL,
192
+   },
193
+};
194
+
195
+static constexpr auto &
196
+GetStyle(Style style)
197
+{
198
+   return styles[size_t(style)];
199
+}
200
+
201
+#ifdef ENABLE_COLORS
202
+
203
+gcc_pure
204
+static Style
205
+StyleByName(const char *name)
206
+{
207
+   for (size_t i = 1; i < size_t(Style::END); ++i)
208
+       if (!strcasecmp(styles[i].name, name))
209
+           return Style(i);
210
+
211
+   return Style::END;
212
+}
213
+
214
+static void
215
+colors_update_pair(Style style)
216
+{
217
+   auto &data = GetStyle(style);
218
+
219
+   int fg = data.fg_color;
220
+   for (Style i = style; fg == COLOR_INHERIT;) {
221
+       i = GetStyle(i).inherit;
222
+       assert(i != Style::DEFAULT);
223
+       fg = GetStyle(i).fg_color;
224
+   }
225
+
226
+   int bg = data.bg_color;
227
+   for (Style i = style; bg == COLOR_INHERIT;) {
228
+       i = GetStyle(i).inherit;
229
+       assert(i != Style::DEFAULT);
230
+       bg = GetStyle(i).bg_color;
231
+   }
232
+
233
+   /* apply A_INHERIT (modifies the "attr" value, which is
234
+      irreversible) */
235
+   for (Style i = style; data.attr == A_INHERIT;) {
236
+       i = GetStyle(i).inherit;
237
+       assert(i != Style::DEFAULT);
238
+       data.attr = GetStyle(i).attr;
239
+   }
240
+
241
+   init_pair(short(style), fg, bg);
242
+}
243
+
244
+gcc_pure
245
+static short
246
+ParseBackgroundColor(const char *s)
247
+{
248
+   short color = ParseColorNameOrNumber(s);
249
+   if (color >= 0)
250
+       return color;
251
+
252
+   if (!strcasecmp(s, "none"))
253
+       return COLOR_NONE;
254
+
255
+   return COLOR_ERROR;
256
+}
257
+
258
+static bool
259
+ParseStyle(StyleData &d, const char *str)
260
+{
261
+   std::string copy(str);
262
+
263
+   for (char *cur = strtok(&copy.front(), ","); cur != nullptr;
264
+        cur = strtok(nullptr, ",")) {
265
+       cur = Strip(cur);
266
+       char *slash = strchr(cur, '/');
267
+       if (slash != nullptr) {
268
+           const char *name = slash + 1;
269
+           short color = ParseBackgroundColor(name);
270
+           if (color < 0) {
271
+               fprintf(stderr, "%s: %s\n",
272
+                   _("Unknown color"), name);
273
+               return false;
274
+           }
275
+
276
+           d.bg_color = color;
277
+
278
+           *slash = 0;
279
+
280
+           if (*cur == 0)
281
+               continue;
282
+       }
283
+
284
+       /* Legacy colors (brightblue,etc) */
285
+       if (!strncasecmp(cur, "bright", 6)) {
286
+           d.attr |= A_BOLD;
287
+           cur += 6;
288
+       }
289
+
290
+       /* Colors */
291
+       short b = ParseColorNameOrNumber(cur);
292
+       if (b >= 0) {
293
+           d.fg_color = b;
294
+           continue;
295
+       }
296
+
297
+       if (!strcasecmp(cur, "none"))
298
+           d.fg_color = COLOR_NONE;
299
+       else if (!strcasecmp(cur, "grey") ||
300
+            !strcasecmp(cur, "gray")) {
301
+           d.fg_color = COLOR_BLACK;
302
+           d.attr |= A_BOLD;
303
+       }
304
+
305
+       /* Attributes */
306
+       else if (!strcasecmp(cur, "standout"))
307
+           d.attr |= A_STANDOUT;
308
+       else if (!strcasecmp(cur, "underline"))
309
+           d.attr |= A_UNDERLINE;
310
+       else if (!strcasecmp(cur, "reverse"))
311
+           d.attr |= A_REVERSE;
312
+       else if (!strcasecmp(cur, "blink"))
313
+           d.attr |= A_BLINK;
314
+       else if (!strcasecmp(cur, "dim"))
315
+           d.attr |= A_DIM;
316
+       else if (!strcasecmp(cur, "bold"))
317
+           d.attr |= A_BOLD;
318
+       else {
319
+           fprintf(stderr, "%s: %s\n",
320
+               _("Unknown color"), str);
321
+           return false;
322
+       }
323
+
324
+   }
325
+
326
+   return true;
327
+}
328
+
329
+bool
330
+ModifyStyle(const char *name, const char *value)
331
+{
332
+   const auto style = StyleByName(name);
333
+   if (style == Style::END) {
334
+       fprintf(stderr, "%s: %s",
335
+           _("Unknown color field"), name);
336
+       return false;
337
+   }
338
+
339
+   auto &data = GetStyle(style);
340
+
341
+   if (style == Style::BACKGROUND) {
342
+       /* "background" is a special style which all other
343
+          styles inherit their background color from; if the
344
+          user configures a color, it will be the background
345
+          color, but no attributes */
346
+       short color = ParseBackgroundColor(value);
347
+       if (color != COLOR_ERROR) {
348
+           data.bg_color = color;
349
+           return true;
350
+       } else {
351
+           fprintf(stderr, "%s: %s\n",
352
+               _("Unknown color"), value);
353
+           return false;
354
+       }
355
+   }
356
+
357
+   return ParseStyle(data, value);
358
+}
359
+
360
+void
361
+ApplyStyles()
362
+{
363
+   if (has_colors()) {
364
+       /* initialize color support */
365
+       start_color();
366
+       use_default_colors();
367
+       /* define any custom colors defined in the configuration file */
368
+       ApplyCustomColors();
369
+
370
+       if (options.enable_colors) {
371
+           for (size_t i = 1; i < size_t(Style::END); ++i)
372
+               /* update the color pairs */
373
+               colors_update_pair(Style(i));
374
+       }
375
+   } else if (options.enable_colors) {
376
+       fprintf(stderr, "%s\n",
377
+           _("Terminal lacks color capabilities"));
378
+       options.enable_colors = false;
379
+   }
380
+}
381
+#endif
382
+
383
+void
384
+SelectStyle(WINDOW *w, Style style)
385
+{
386
+   const auto &data = GetStyle(style);
387
+
388
+#ifdef ENABLE_COLORS
389
+   if (options.enable_colors) {
390
+       /* color mode */
391
+       wattr_set(w, data.attr, short(style), nullptr);
392
+   } else {
393
+#endif
394
+       /* mono mode */
395
+       (void)wattrset(w, data.mono);
396
+#ifdef ENABLE_COLORS
397
+   }
398
+#endif
399
+}
400
ncmpc-0.32.tar.xz/src/Styles.hxx Added
67
 
1
@@ -0,0 +1,65 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef STYLES_HXX
22
+#define STYLES_HXX
23
+
24
+#include "config.h"
25
+
26
+#include <curses.h>
27
+
28
+enum class Style : unsigned {
29
+   /**
30
+    * The ncurses default style.
31
+    *
32
+    * @see assume_default_colors(3ncurses)
33
+    */
34
+   DEFAULT,
35
+
36
+   TITLE,
37
+   TITLE_BOLD,
38
+   LINE,
39
+   LINE_BOLD,
40
+   LINE_FLAGS,
41
+   LIST,
42
+   LIST_BOLD,
43
+   PROGRESSBAR,
44
+   PROGRESSBAR_BACKGROUND,
45
+   STATUS,
46
+   STATUS_BOLD,
47
+   STATUS_TIME,
48
+   STATUS_ALERT,
49
+   DIRECTORY,
50
+   PLAYLIST,
51
+   BACKGROUND,
52
+   END
53
+};
54
+
55
+#ifdef ENABLE_COLORS
56
+bool
57
+ModifyStyle(const char *name, const char *value);
58
+
59
+void
60
+ApplyStyles();
61
+#endif
62
+
63
+void
64
+SelectStyle(WINDOW *w, Style style);
65
+
66
+#endif
67
ncmpc-0.32.tar.xz/src/TabBar.cxx Added
74
 
1
@@ -0,0 +1,72 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "TabBar.hxx"
22
+#include "PageMeta.hxx"
23
+#include "screen_list.hxx"
24
+#include "Styles.hxx"
25
+#include "Bindings.hxx"
26
+#include "GlobalBindings.hxx"
27
+#include "i18n.h"
28
+
29
+static void
30
+PaintPageTab(WINDOW *w, Command cmd, const char *label, bool selected)
31
+{
32
+   SelectStyle(w, selected ? Style::TITLE : Style::TITLE_BOLD);
33
+   if (selected)
34
+       wattron(w, A_REVERSE);
35
+
36
+   waddch(w, ' ');
37
+
38
+   const char *key = GetGlobalKeyBindings().GetFirstKeyName(cmd);
39
+   if (key != nullptr)
40
+       waddstr(w, key);
41
+
42
+   SelectStyle(w, Style::TITLE);
43
+   if (selected)
44
+       wattron(w, A_REVERSE);
45
+
46
+   waddch(w, ':');
47
+   waddstr(w, label);
48
+   waddch(w, ' ');
49
+
50
+   if (selected)
51
+       wattroff(w, A_REVERSE);
52
+}
53
+
54
+void
55
+PaintTabBar(WINDOW *w, const PageMeta &current_page_meta,
56
+       const char *current_page_title)
57
+{
58
+   for (unsigned i = 0;; ++i) {
59
+       const auto *page = GetPageMeta(i);
60
+       if (page == nullptr)
61
+           break;
62
+
63
+       const char *title = nullptr;
64
+       if (page == &current_page_meta)
65
+           title = current_page_title;
66
+
67
+       if (title == nullptr)
68
+           title = gettext(page->title);
69
+
70
+       PaintPageTab(w, page->command, title,
71
+                page == &current_page_meta);
72
+   }
73
+}
74
ncmpc-0.32.tar.xz/src/TabBar.hxx Added
33
 
1
@@ -0,0 +1,31 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef NCMPC_TAB_BAR_HXX
22
+#define NCMPC_TAB_BAR_HXX
23
+
24
+#include <curses.h>
25
+
26
+struct PageMeta;
27
+
28
+void
29
+PaintTabBar(WINDOW *w, const PageMeta &current_page_meta,
30
+       const char *current_page_title);
31
+
32
+#endif
33
ncmpc-0.30.tar.xz/src/TextListRenderer.cxx -> ncmpc-0.32.tar.xz/src/TextListRenderer.cxx Changed
20
 
1
@@ -26,15 +26,15 @@
2
 
3
 static void
4
 list_window_paint_row(WINDOW *w, unsigned width, bool selected,
5
-             const char *text)
6
+             const char *text) noexcept
7
 {
8
-   row_paint_text(w, width, COLOR_LIST,
9
+   row_paint_text(w, width, Style::LIST,
10
               selected, text);
11
 }
12
 
13
 void
14
 TextListRenderer::PaintListItem(WINDOW *w, unsigned i, unsigned,
15
-               unsigned width, bool selected) const
16
+               unsigned width, bool selected) const noexcept
17
 {
18
    char buffer[1024];
19
    const char *label = text.GetListItemText(buffer, sizeof(buffer), i);
20
ncmpc-0.30.tar.xz/src/TextListRenderer.hxx -> ncmpc-0.32.tar.xz/src/TextListRenderer.hxx Changed
16
 
1
@@ -29,12 +29,12 @@
2
    const ListText &text;
3
 
4
 public:
5
-   explicit TextListRenderer(const ListText &_text)
6
+   explicit TextListRenderer(const ListText &_text) noexcept
7
        :text(_text) {}
8
 
9
    /* virtual methods from class ListRenderer */
10
    void PaintListItem(WINDOW *w, unsigned i, unsigned y, unsigned width,
11
-              bool selected) const override;
12
+              bool selected) const noexcept override;
13
 };
14
 
15
 #endif
16
ncmpc-0.30.tar.xz/src/TextPage.cxx -> ncmpc-0.32.tar.xz/src/TextPage.cxx Changed
61
 
1
@@ -22,15 +22,13 @@
2
 #include "screen_find.hxx"
3
 #include "charset.hxx"
4
 
5
-#include <glib.h>
6
-
7
 #include <algorithm>
8
 
9
 #include <assert.h>
10
 #include <string.h>
11
 
12
 void
13
-TextPage::Clear()
14
+TextPage::Clear() noexcept
15
 {
16
    lw.Reset();
17
    lines.clear();
18
@@ -38,7 +36,7 @@
19
 }
20
 
21
 void
22
-TextPage::Append(const char *str)
23
+TextPage::Append(const char *str) noexcept
24
 {
25
    assert(str != nullptr);
26
 
27
@@ -72,28 +70,27 @@
28
 }
29
 
30
 const char *
31
-TextPage::GetListItemText(char *buffer, size_t size, unsigned idx) const
32
+TextPage::GetListItemText(char *buffer, size_t size, unsigned idx) const noexcept
33
 {
34
    assert(idx < lines.size());
35
 
36
-   g_strlcpy(buffer, Utf8ToLocale(lines[idx].c_str()).c_str(), size);
37
-   return buffer;
38
+   return utf8_to_locale(lines[idx].c_str(), buffer, size);
39
 }
40
 
41
 void
42
-TextPage::Paint() const
43
+TextPage::Paint() const noexcept
44
 {
45
    lw.Paint(TextListRenderer(*this));
46
 }
47
 
48
 bool
49
-TextPage::OnCommand(struct mpdclient &c, command_t cmd)
50
+TextPage::OnCommand(struct mpdclient &c, Command cmd)
51
 {
52
    if (ListPage::OnCommand(c, cmd))
53
        return true;
54
 
55
    lw.SetCursor(lw.start);
56
-   if (screen_find(screen, &lw, cmd, *this)) {
57
+   if (screen_find(screen, lw, cmd, *this)) {
58
        /* center the row */
59
        lw.Center(lw.selected);
60
        SetDirty();
61
ncmpc-0.30.tar.xz/src/TextPage.hxx -> ncmpc-0.32.tar.xz/src/TextPage.hxx Changed
66
 
1
@@ -33,25 +33,34 @@
2
 protected:
3
    ScreenManager &screen;
4
 
5
+   /**
6
+    * Strings are UTF-8.
7
+    */
8
    std::vector<std::string> lines;
9
 
10
 public:
11
    TextPage(ScreenManager &_screen,
12
-        WINDOW *w, Size size)
13
+        WINDOW *w, Size size) noexcept
14
        :ListPage(w, size), screen(_screen) {
15
        lw.hide_cursor = true;
16
    }
17
 
18
 protected:
19
-   bool IsEmpty() const {
20
+   bool IsEmpty() const noexcept {
21
        return lines.empty();
22
    }
23
 
24
-   void Clear();
25
+   void Clear() noexcept;
26
 
27
-   void Append(const char *str);
28
+   /**
29
+    * @param str a UTF-8 string
30
+    */
31
+   void Append(const char *str) noexcept;
32
 
33
-   void Set(const char *str) {
34
+   /**
35
+    * @param str a UTF-8 string
36
+    */
37
+   void Set(const char *str) noexcept {
38
        Clear();
39
        Append(str);
40
    }
41
@@ -59,20 +68,20 @@
42
    /**
43
     * Repaint and update the screen.
44
     */
45
-   void Repaint() {
46
+   void Repaint() noexcept {
47
        Paint();
48
        wrefresh(lw.w);
49
    }
50
 
51
 public:
52
    /* virtual methods from class Page */
53
-   void Paint() const override;
54
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
55
+   void Paint() const noexcept override;
56
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
57
 
58
 private:
59
    /* virtual methods from class ListText */
60
    const char *GetListItemText(char *buffer, size_t size,
61
-                   unsigned i) const override;
62
+                   unsigned i) const noexcept override;
63
 };
64
 
65
 #endif
66
ncmpc-0.30.tar.xz/src/TitleBar.cxx -> ncmpc-0.32.tar.xz/src/TitleBar.cxx Changed
125
 
1
@@ -18,19 +18,16 @@
2
  */
3
 
4
 #include "TitleBar.hxx"
5
-#include "colors.hxx"
6
-#include "options.hxx"
7
-#include "command.hxx"
8
+#include "TabBar.hxx"
9
+#include "Styles.hxx"
10
+#include "Options.hxx"
11
 #include "i18n.h"
12
-#include "charset.hxx"
13
+#include "util/LocaleString.hxx"
14
 
15
 #include "config.h"
16
 
17
 #include <mpd/client.h>
18
 
19
-#include <glib.h>
20
-
21
-#include <assert.h>
22
 #include <string.h>
23
 
24
 TitleBar::TitleBar(Point p, unsigned width)
25
@@ -41,24 +38,10 @@
26
 
27
 #ifdef ENABLE_COLORS
28
    if (options.enable_colors)
29
-       wbkgd(window.w, COLOR_PAIR(COLOR_TITLE));
30
+       wbkgd(window.w, COLOR_PAIR(Style::TITLE));
31
 #endif
32
 }
33
 
34
-#ifndef NCMPC_MINI
35
-static void
36
-print_hotkey(WINDOW *w, command_t cmd, const char *label)
37
-{
38
-   colors_use(w, COLOR_TITLE_BOLD);
39
-   waddstr(w, get_key_names(cmd, false));
40
-   colors_use(w, COLOR_TITLE);
41
-   waddch(w, ':');
42
-   waddstr(w, label);
43
-   waddch(w, ' ');
44
-   waddch(w, ' ');
45
-}
46
-#endif
47
-
48
 static inline int
49
 get_volume(const struct mpd_status *status)
50
 {
51
@@ -91,40 +74,25 @@
52
 }
53
 
54
 void
55
-TitleBar::Paint(const char *title) const
56
+TitleBar::Paint(const PageMeta &current_page_meta, const char *title) const
57
 {
58
    WINDOW *w = window.w;
59
 
60
    wmove(w, 0, 0);
61
    wclrtoeol(w);
62
 
63
-   if (title[0]) {
64
-       colors_use(w, COLOR_TITLE_BOLD);
65
-       mvwaddstr(w, 0, 0, title);
66
 #ifndef NCMPC_MINI
67
+   if (options.welcome_screen_list) {
68
+       PaintTabBar(w, current_page_meta, title);
69
    } else {
70
-#ifdef ENABLE_HELP_SCREEN
71
-       print_hotkey(w, CMD_SCREEN_HELP, _("Help"));
72
-#endif
73
-       print_hotkey(w, CMD_SCREEN_PLAY, _("Queue"));
74
-       print_hotkey(w, CMD_SCREEN_FILE, _("Browse"));
75
-#ifdef ENABLE_ARTIST_SCREEN
76
-       print_hotkey(w, CMD_SCREEN_ARTIST, _("Artist"));
77
-#endif
78
-#ifdef ENABLE_SEARCH_SCREEN
79
-       print_hotkey(w, CMD_SCREEN_SEARCH, _("Search"));
80
-#endif
81
-#ifdef ENABLE_LYRICS_SCREEN
82
-       print_hotkey(w, CMD_SCREEN_LYRICS, _("Lyrics"));
83
-#endif
84
-#ifdef ENABLE_OUTPUTS_SCREEN
85
-       print_hotkey(w, CMD_SCREEN_OUTPUTS, _("Outputs"));
86
-#endif
87
-#ifdef ENABLE_CHAT_SCREEN
88
-       print_hotkey(w, CMD_SCREEN_CHAT, _("Chat"));
89
-#endif
90
+#else
91
+       (void)current_page_meta;
92
 #endif
93
+       SelectStyle(w, Style::TITLE_BOLD);
94
+       mvwaddstr(w, 0, 0, title);
95
+#ifndef NCMPC_MINI
96
    }
97
+#endif
98
 
99
    char buf[32];
100
    const char *volume_string;
101
@@ -135,18 +103,18 @@
102
        volume_string = buf;
103
    }
104
 
105
-   colors_use(w, COLOR_TITLE);
106
-   mvwaddstr(w, 0, window.size.width - utf8_width(volume_string),
107
+   SelectStyle(w, Style::TITLE);
108
+   mvwaddstr(w, 0, window.size.width - StringWidthMB(volume_string),
109
          volume_string);
110
 
111
-   colors_use(w, COLOR_LINE);
112
+   SelectStyle(w, Style::LINE);
113
    mvwhline(w, 1, 0, ACS_HLINE, window.size.width);
114
    if (flags[0]) {
115
        wmove(w, 1, window.size.width - strlen(flags) - 3);
116
        waddch(w, '[');
117
-       colors_use(w, COLOR_LINE_FLAGS);
118
+       SelectStyle(w, Style::LINE_FLAGS);
119
        waddstr(w, flags);
120
-       colors_use(w, COLOR_LINE);
121
+       SelectStyle(w, Style::LINE);
122
        waddch(w, ']');
123
    }
124
 
125
ncmpc-0.30.tar.xz/src/TitleBar.hxx -> ncmpc-0.32.tar.xz/src/TitleBar.hxx Changed
18
 
1
@@ -23,6 +23,7 @@
2
 #include "Window.hxx"
3
 
4
 struct mpd_status;
5
+struct PageMeta;
6
 
7
 class TitleBar {
8
    Window window;
9
@@ -39,7 +40,7 @@
10
 
11
    void OnResize(unsigned width);
12
    void Update(const struct mpd_status *status);
13
-   void Paint(const char *title) const;
14
+   void Paint(const PageMeta &current_page_meta, const char *title) const;
15
 };
16
 
17
 #endif
18
ncmpc-0.30.tar.xz/src/Window.hxx -> ncmpc-0.32.tar.xz/src/Window.hxx Changed
14
 
1
@@ -20,10 +20,10 @@
2
 #ifndef NCMPC_WINDOW_HXX
3
 #define NCMPC_WINDOW_HXX
4
 
5
-#include "config.h"
6
 #include "Point.hxx"
7
 #include "Size.hxx"
8
-#include "ncmpc_curses.h"
9
+
10
+#include <curses.h>
11
 
12
 struct Window {
13
    WINDOW *const w;
14
ncmpc-0.30.tar.xz/src/aconnect.cxx -> ncmpc-0.32.tar.xz/src/aconnect.cxx Changed
197
 
1
@@ -27,135 +27,109 @@
2
 */
3
 
4
 #include "aconnect.hxx"
5
-#include "net/async_rconnect.hxx"
6
-#include "net/socket.hxx"
7
-#include "Compiler.h"
8
+#include "net/AsyncResolveConnect.hxx"
9
+#include "net/AsyncHandler.hxx"
10
 
11
 #include <mpd/client.h>
12
 #include <mpd/async.h>
13
 
14
-#include <glib.h>
15
+#include <boost/asio/generic/stream_protocol.hpp>
16
 
17
-#include <assert.h>
18
-#include <string.h>
19
-#include <stdio.h>
20
-#include <errno.h>
21
+struct AsyncMpdConnect final : AsyncConnectHandler {
22
+   AsyncMpdConnectHandler &handler;
23
 
24
-struct AsyncMpdConnect {
25
-   const AsyncMpdConnectHandler *handler;
26
-   void *handler_ctx;
27
+   AsyncResolveConnect rconnect;
28
 
29
-   struct async_rconnect *rconnect;
30
+   boost::asio::generic::stream_protocol::socket socket;
31
 
32
-   int fd;
33
-   guint source_id;
34
+   char buffer[256];
35
+
36
+   explicit AsyncMpdConnect(boost::asio::io_service &io_service,
37
+                AsyncMpdConnectHandler &_handler) noexcept
38
+       :handler(_handler),
39
+        rconnect(io_service, *this), socket(io_service) {}
40
+
41
+   void OnReceive(const boost::system::error_code &error,
42
+              std::size_t bytes_transferred) noexcept;
43
+
44
+   /* virtual methods from AsyncConnectHandler */
45
+   void OnConnect(boost::asio::generic::stream_protocol::socket socket) override;
46
+   void OnConnectError(const char *message) override;
47
 };
48
 
49
-static gboolean
50
-aconnect_source_callback(gcc_unused GIOChannel *source,
51
-            gcc_unused GIOCondition condition,
52
-            gpointer data)
53
+void
54
+AsyncMpdConnect::OnReceive(const boost::system::error_code &error,
55
+              std::size_t bytes_transferred) noexcept
56
 {
57
-   auto *ac = (AsyncMpdConnect *)data;
58
-   assert(ac->source_id != 0);
59
-   ac->source_id = 0;
60
+   if (error) {
61
+       if (error == boost::asio::error::operation_aborted)
62
+           /* this object has already been deleted; bail out
63
+              quickly without touching anything */
64
+           return;
65
 
66
-   char buffer[256];
67
-   ssize_t nbytes = recv(ac->fd, buffer, sizeof(buffer) - 1, 0);
68
-   if (nbytes < 0) {
69
        snprintf(buffer, sizeof(buffer),
70
             "Failed to receive from MPD: %s",
71
-            strerror(errno));
72
-       close_socket(ac->fd);
73
-       ac->handler->error(buffer, ac->handler_ctx);
74
-       delete ac;
75
-       return false;
76
-   }
77
-
78
-   if (nbytes == 0) {
79
-       close_socket(ac->fd);
80
-       ac->handler->error("MPD closed the connection",
81
-                  ac->handler_ctx);
82
-       delete ac;
83
-       return false;
84
+            error.message().c_str());
85
+       handler.OnAsyncMpdConnectError(buffer);
86
+       delete this;
87
+       return;
88
    }
89
 
90
-   buffer[nbytes] = 0;
91
+   buffer[bytes_transferred] = 0;
92
 
93
-   struct mpd_async *async = mpd_async_new(ac->fd);
94
+   /* the dup() is necessary because Boost 1.62 doesn't have the
95
+      release() method yet */
96
+   struct mpd_async *async = mpd_async_new(dup(socket.native_handle()));
97
    if (async == nullptr) {
98
-       close_socket(ac->fd);
99
-       ac->handler->error("Out of memory", ac->handler_ctx);
100
-       delete ac;
101
-       return false;
102
+       handler.OnAsyncMpdConnectError("Out of memory");
103
+       delete this;
104
+       return;
105
    }
106
 
107
    struct mpd_connection *c = mpd_connection_new_async(async, buffer);
108
    if (c == nullptr) {
109
        mpd_async_free(async);
110
-       ac->handler->error("Out of memory", ac->handler_ctx);
111
-       delete ac;
112
-       return false;
113
+       handler.OnAsyncMpdConnectError("Out of memory");
114
+       delete this;
115
+       return;
116
    }
117
 
118
-   ac->handler->success(c, ac->handler_ctx);
119
-   delete ac;
120
-   return false;
121
+   handler.OnAsyncMpdConnect(c);
122
+   delete this;
123
 }
124
 
125
-static void
126
-aconnect_rconnect_success(int fd, void *ctx)
127
+void
128
+AsyncMpdConnect::OnConnect(boost::asio::generic::stream_protocol::socket _socket)
129
 {
130
-   auto *ac = (AsyncMpdConnect *)ctx;
131
-   ac->rconnect = nullptr;
132
-
133
-   ac->fd = fd;
134
-
135
-   GIOChannel *channel = g_io_channel_unix_new(fd);
136
-   ac->source_id = g_io_add_watch(channel, G_IO_IN,
137
-                      aconnect_source_callback, ac);
138
-   g_io_channel_unref(channel);
139
+   socket = std::move(_socket);
140
+   socket.async_receive(boost::asio::buffer(buffer, sizeof(buffer) - 1),
141
+                std::bind(&AsyncMpdConnect::OnReceive, this,
142
+                      std::placeholders::_1,
143
+                      std::placeholders::_2));
144
 }
145
 
146
-static void
147
-aconnect_rconnect_error(const char *message, void *ctx)
148
+void
149
+AsyncMpdConnect::OnConnectError(const char *message)
150
 {
151
-   auto *ac = (AsyncMpdConnect *)ctx;
152
-   ac->rconnect = nullptr;
153
-
154
-   ac->handler->error(message, ac->handler_ctx);
155
-   delete ac;
156
+   handler.OnAsyncMpdConnectError(message);
157
+   delete this;
158
 }
159
 
160
-static const struct async_rconnect_handler aconnect_rconnect_handler = {
161
-   .success = aconnect_rconnect_success,
162
-   .error = aconnect_rconnect_error,
163
-};
164
-
165
 void
166
-aconnect_start(AsyncMpdConnect **acp,
167
+aconnect_start(boost::asio::io_service &io_service,
168
+          AsyncMpdConnect **acp,
169
           const char *host, unsigned port,
170
-          const AsyncMpdConnectHandler &handler, void *ctx)
171
+          AsyncMpdConnectHandler &handler)
172
 {
173
-   auto *ac = new AsyncMpdConnect();
174
-   ac->handler = &handler;
175
-   ac->handler_ctx = ctx;
176
+   auto *ac = new AsyncMpdConnect(io_service, handler);
177
 
178
    *acp = ac;
179
 
180
-   async_rconnect_start(&ac->rconnect, host, port,
181
-                &aconnect_rconnect_handler, ac);
182
+   ac->rconnect.Start(host, port);
183
 }
184
 
185
 void
186
 aconnect_cancel(AsyncMpdConnect *ac)
187
 {
188
-   if (ac->rconnect != nullptr)
189
-       async_rconnect_cancel(ac->rconnect);
190
-   else {
191
-       g_source_remove(ac->source_id);
192
-       close_socket(ac->fd);
193
-   }
194
-
195
    delete ac;
196
 }
197
ncmpc-0.30.tar.xz/src/aconnect.hxx -> ncmpc-0.32.tar.xz/src/aconnect.hxx Changed
31
 
1
@@ -29,20 +29,24 @@
2
 #ifndef ACONNECT_H
3
 #define ACONNECT_H
4
 
5
+#include "AsioServiceFwd.hxx"
6
+
7
 #include <mpd/client.h>
8
 
9
 struct mpd_connection;
10
 struct AsyncMpdConnect;
11
 
12
-struct AsyncMpdConnectHandler {
13
-   void (*success)(struct mpd_connection *c, void *ctx);
14
-   void (*error)(const char *message, void *ctx);
15
+class AsyncMpdConnectHandler {
16
+public:
17
+   virtual void OnAsyncMpdConnect(struct mpd_connection *c) noexcept = 0;
18
+   virtual void OnAsyncMpdConnectError(const char *message) noexcept = 0;
19
 };
20
 
21
 void
22
-aconnect_start(AsyncMpdConnect **acp,
23
+aconnect_start(boost::asio::io_service &io_service,
24
+          AsyncMpdConnect **acp,
25
           const char *host, unsigned port,
26
-          const AsyncMpdConnectHandler &handler, void *ctx);
27
+          AsyncMpdConnectHandler &handler);
28
 
29
 void
30
 aconnect_cancel(AsyncMpdConnect *ac);
31
ncmpc-0.30.tar.xz/src/callbacks.cxx -> ncmpc-0.32.tar.xz/src/callbacks.cxx Changed
11
 
1
@@ -21,7 +21,8 @@
2
 #include "screen_utils.hxx"
3
 #include "screen_status.hxx"
4
 #include "mpdclient.hxx"
5
-#include "ncmpc_curses.h"
6
+
7
+#include <curses.h>
8
 
9
 static bool
10
 _mpdclient_auth_callback(struct mpdclient *c, unsigned recursion)
11
ncmpc-0.30.tar.xz/src/charset.cxx -> ncmpc-0.32.tar.xz/src/charset.cxx Changed
401
 
1
@@ -18,231 +18,238 @@
2
  */
3
 
4
 #include "charset.hxx"
5
+#include "util/ScopeExit.hxx"
6
+
7
+#include <algorithm>
8
 
9
 #include <assert.h>
10
 #include <string.h>
11
-#include <glib.h>
12
 
13
-#ifdef ENABLE_LOCALE
14
+#ifdef HAVE_ICONV
15
+#include <langinfo.h>
16
+#include <iconv.h>
17
+#include <errno.h>
18
+#endif
19
+
20
+#ifdef HAVE_ICONV
21
 static bool noconvert = true;
22
 static const char *charset;
23
 
24
-const char *
25
-charset_init()
26
+void
27
+charset_init() noexcept
28
 {
29
-   noconvert = g_get_charset(&charset);
30
-   return charset;
31
+   charset = nl_langinfo(CODESET);
32
+   noconvert = charset == nullptr || strcasecmp(charset, "utf-8") == 0;
33
 }
34
 #endif
35
 
36
-#ifdef HAVE_CURSES_ENHANCED
37
-static inline unsigned
38
-unicode_char_width(gunichar ch)
39
+static char *
40
+CopyTruncateString(char *dest, size_t dest_size,
41
+          const char *src, size_t src_length) noexcept
42
 {
43
-   if (g_unichar_iszerowidth(ch))
44
-       return 0;
45
-
46
-   if (g_unichar_iswide(ch))
47
-       return 2;
48
-
49
-   return 1;
50
+   dest = std::copy_n(src, std::min(dest_size - 1, src_length), dest);
51
+   *dest = 0;
52
+   return dest;
53
 }
54
-#endif /* HAVE_CURSES_ENHANCED */
55
 
56
-unsigned
57
-utf8_width(const char *str)
58
-{
59
-   assert(str != nullptr);
60
+#ifdef HAVE_ICONV
61
 
62
-#if defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED)
63
-   return g_utf8_strlen(str, -1);
64
-#else
65
-#ifdef HAVE_CURSES_ENHANCED
66
-   if (g_utf8_validate(str, -1, nullptr)) {
67
-       size_t len = g_utf8_strlen(str, -1);
68
-       unsigned width = 0;
69
-       gunichar c;
70
-
71
-       while (len--) {
72
-           c = g_utf8_get_char(str);
73
-           width += unicode_char_width(c);
74
-           str += g_unichar_to_utf8(c, nullptr);
75
-       }
76
-
77
-       return width;
78
-   } else
79
-#endif
80
-       return strlen(str);
81
-#endif
82
-}
83
-
84
-unsigned
85
-locale_width(const char *p)
86
+static char *
87
+Iconv(iconv_t i,
88
+      char *dest, size_t dest_size,
89
+      const char *src, size_t src_length) noexcept
90
 {
91
-#if defined(ENABLE_LOCALE) && defined(ENABLE_MULTIBYTE)
92
-   char *utf8;
93
-   unsigned width;
94
-
95
-   if (noconvert)
96
-       return utf8_width(p);
97
-
98
-   utf8 = locale_to_utf8(p);
99
-   width = utf8_width(utf8);
100
-   g_free(utf8);
101
+   static constexpr char FALLBACK = '?';
102
+
103
+   --dest_size; /* reserve once byte for the null terminator */
104
+
105
+   while (src_length > 0) {
106
+       size_t err = iconv(i,
107
+                  const_cast<char **>(&src), &src_length,
108
+                  &dest, &dest_size);
109
+       if (err == (size_t)-1) {
110
+           switch (errno) {
111
+           case EILSEQ:
112
+               /* invalid sequence: use fallback
113
+                  character instead */
114
+               ++src;
115
+               --src_length;
116
+               *dest++ = FALLBACK;
117
+               break;
118
+
119
+           case EINVAL:
120
+               /* incomplete sequence: add fallback
121
+                  character and stop */
122
+               *dest++ = FALLBACK;
123
+               *dest = '\0';
124
+               return dest;
125
+
126
+           case E2BIG:
127
+               /* output buffer is full: stop here */
128
+               *dest = '\0';
129
+               return dest;
130
+
131
+           default:
132
+               /* unknown error: stop here */
133
+               *dest = '\0';
134
+               return dest;
135
+           }
136
+       }
137
+   }
138
 
139
-   return width;
140
-#else
141
-   return strlen(p);
142
-#endif
143
+   *dest = '\0';
144
+   return dest;
145
 }
146
 
147
-gcc_unused
148
-static unsigned
149
-ascii_cut_width(char *p, unsigned max_width)
150
+static char *
151
+Iconv(const char *tocode, const char *fromcode,
152
+      char *dest, size_t dest_size,
153
+      const char *src, size_t src_length) noexcept
154
 {
155
-   size_t length = strlen(p);
156
-   if (length <= (size_t)max_width)
157
-       return (unsigned)length;
158
-
159
-   p[max_width] = 0;
160
-   return max_width;
161
-}
162
+   const auto i = iconv_open(tocode, fromcode);
163
+   if (i == (iconv_t)-1) {
164
+       CopyTruncateString(dest, dest_size, src, src_length);
165
+       return dest;
166
+   }
167
 
168
-gcc_unused
169
-static unsigned
170
-narrow_cut_width(char *p, unsigned max_width)
171
-{
172
-   size_t length = g_utf8_strlen(p, -1);
173
-   if (length <= (size_t)max_width)
174
-       return (unsigned)length;
175
+   AtScopeExit(i) { iconv_close(i); };
176
 
177
-   *g_utf8_offset_to_pointer(p, max_width) = 0;
178
-   return max_width;
179
+   return Iconv(i, dest, dest_size, src, src_length);
180
 }
181
 
182
-gcc_unused
183
-static unsigned
184
-wide_cut_width(char *p, unsigned max_width)
185
+gcc_pure
186
+static std::string
187
+Iconv(iconv_t i,
188
+      const char *src, size_t src_length) noexcept
189
 {
190
-   size_t length = g_utf8_strlen(p, -1);
191
-   unsigned width = 0, prev_width;
192
-
193
-   while (length-- > 0) {
194
-       gunichar c = g_utf8_get_char(p);
195
-       prev_width = width;
196
-       width += g_unichar_iswide(c) ? 2 : 1;
197
-       if (width > max_width) {
198
-           /* too wide - cut the rest off */
199
-           *p = 0;
200
-           return prev_width;
201
+   static constexpr char FALLBACK = '?';
202
+
203
+   std::string dest;
204
+
205
+   while (src_length > 0) {
206
+       char buffer[1024], *outbuf = buffer;
207
+       size_t outbytesleft = sizeof(buffer);
208
+
209
+       size_t err = iconv(i,
210
+                  const_cast<char **>(&src), &src_length,
211
+                  &outbuf, &outbytesleft);
212
+       dest.append(buffer, outbuf);
213
+       if (err == (size_t)-1) {
214
+           switch (errno) {
215
+           case EILSEQ:
216
+               /* invalid sequence: use fallback
217
+                  character instead */
218
+               ++src;
219
+               --src_length;
220
+               dest.push_back(FALLBACK);
221
+               break;
222
+
223
+           case EINVAL:
224
+               /* incomplete sequence: add fallback
225
+                  character and stop */
226
+               dest.push_back(FALLBACK);
227
+               return dest;
228
+
229
+           case E2BIG:
230
+               /* output buffer is full: flush it */
231
+               break;
232
+
233
+           default:
234
+               /* unknown error: stop here */
235
+               return dest;
236
+           }
237
        }
238
-
239
-       p += g_unichar_to_utf8(c, nullptr);
240
    }
241
 
242
-   return width;
243
+   return dest;
244
 }
245
 
246
-unsigned
247
-utf8_cut_width(char *p, unsigned max_width)
248
+gcc_pure
249
+static std::string
250
+Iconv(const char *tocode, const char *fromcode,
251
+      const char *src, size_t src_length) noexcept
252
 {
253
-   assert(p != nullptr);
254
+   const auto i = iconv_open(tocode, fromcode);
255
+   if (i == (iconv_t)-1)
256
+       return {src, src_length};
257
 
258
-#ifdef HAVE_CURSES_ENHANCED
259
-   if (!g_utf8_validate(p, -1, nullptr))
260
-       return ascii_cut_width(p, max_width);
261
+   AtScopeExit(i) { iconv_close(i); };
262
 
263
-   return wide_cut_width(p, max_width);
264
-#elif defined(ENABLE_MULTIBYTE) && !defined(HAVE_CURSES_ENHANCED)
265
-   return narrow_cut_width(p, max_width);
266
-#else
267
-   return ascii_cut_width(p, max_width);
268
-#endif
269
+   return Iconv(i, src, src_length);
270
 }
271
 
272
-char *
273
-utf8_to_locale(const char *utf8str)
274
+gcc_pure
275
+static std::string
276
+utf8_to_locale(const char *src, size_t length) noexcept
277
 {
278
-#ifdef ENABLE_LOCALE
279
-   assert(utf8str != nullptr);
280
+   assert(src != nullptr);
281
 
282
    if (noconvert)
283
-       return g_strdup(utf8str);
284
+       return {src, length};
285
 
286
-   gchar *str = g_convert_with_fallback(utf8str, -1,
287
-                        charset, "utf-8",
288
-                        nullptr, nullptr, nullptr, nullptr);
289
-   if (str == nullptr)
290
-       return g_strdup(utf8str);
291
+   return Iconv(charset, "utf-8",
292
+            src, length);
293
+}
294
 
295
-   return str;
296
-#else
297
-   return g_strdup(utf8str);
298
 #endif
299
-}
300
 
301
 char *
302
-locale_to_utf8(const char *localestr)
303
+CopyUtf8ToLocale(char *dest, size_t dest_size, const char *src) noexcept
304
 {
305
-#ifdef ENABLE_LOCALE
306
-   assert(localestr != nullptr);
307
-
308
-   if (noconvert)
309
-       return g_strdup(localestr);
310
-
311
-   gchar *str = g_convert_with_fallback(localestr, -1,
312
-                        "utf-8", charset,
313
-                        nullptr, nullptr, nullptr, nullptr);
314
-   if (str == nullptr)
315
-       return g_strdup(localestr);
316
-
317
-   return str;
318
-#else
319
-   return g_strdup(localestr);
320
-#endif
321
+   return CopyUtf8ToLocale(dest, dest_size, src, strlen(src));
322
 }
323
 
324
 char *
325
-replace_utf8_to_locale(char *src)
326
+CopyUtf8ToLocale(char *dest, size_t dest_size,
327
+        const char *src, size_t src_length) noexcept
328
 {
329
-#ifdef ENABLE_LOCALE
330
-   assert(src != nullptr);
331
-
332
-   if (noconvert)
333
-       return src;
334
+#ifdef HAVE_ICONV
335
+   if (noconvert) {
336
+#endif
337
+       return CopyTruncateString(dest, dest_size, src, src_length);
338
+#ifdef HAVE_ICONV
339
+   } else {
340
+       return Iconv(charset, "utf-8", dest, dest_size,
341
+                src, src_length);
342
+   }
343
+#endif
344
+}
345
 
346
-   return utf8_to_locale(src);
347
+const char *
348
+utf8_to_locale(const char *src, char *buffer, size_t size) noexcept
349
+{
350
+#ifdef HAVE_ICONV
351
+   CopyUtf8ToLocale(buffer, size, src);
352
+   return buffer;
353
 #else
354
+   (void)buffer;
355
+   (void)size;
356
    return src;
357
 #endif
358
 }
359
 
360
+#ifdef HAVE_ICONV
361
 
362
-char *
363
-replace_locale_to_utf8(char *src)
364
+gcc_pure
365
+static std::string
366
+locale_to_utf8(const char *src) noexcept
367
 {
368
-#ifdef ENABLE_LOCALE
369
    assert(src != nullptr);
370
 
371
    if (noconvert)
372
        return src;
373
 
374
-   return locale_to_utf8(src);
375
-#else
376
-   return src;
377
-#endif
378
+   return Iconv("utf-8", charset,
379
+            src, strlen(src));
380
 }
381
 
382
-#ifdef ENABLE_LOCALE
383
+Utf8ToLocale::Utf8ToLocale(const char *src) noexcept
384
+   :Utf8ToLocale(src, strlen(src)) {}
385
 
386
-Utf8ToLocale::~Utf8ToLocale()
387
-{
388
-   g_free(value);
389
-}
390
+Utf8ToLocale::Utf8ToLocale(const char *src, size_t length) noexcept
391
+   :value(utf8_to_locale(src, length)) {}
392
 
393
-LocaleToUtf8::~LocaleToUtf8()
394
-{
395
-   g_free(value);
396
-}
397
+LocaleToUtf8::LocaleToUtf8(const char *src) noexcept
398
+   :value(locale_to_utf8(src)) {}
399
 
400
 #endif
401
ncmpc-0.30.tar.xz/src/charset.hxx -> ncmpc-0.32.tar.xz/src/charset.hxx Changed
148
 
1
@@ -21,53 +21,27 @@
2
 #define CHARSET_H
3
 
4
 #include "config.h"
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
-#ifdef ENABLE_LOCALE
9
-const char *
10
-charset_init();
11
-#endif
12
-
13
-/**
14
- * Returns the number of terminal cells occupied by this string.
15
- */
16
-gcc_pure
17
-unsigned
18
-utf8_width(const char *str);
19
-
20
-/**
21
- * Returns the number of terminal cells occupied by this string.
22
- */
23
-gcc_pure
24
-unsigned
25
-locale_width(const char *p);
26
+#include <string>
27
 
28
-/**
29
- * Limits the width of the specified string.  Cuts it off before the
30
- * specified width is exceeded.
31
- *
32
- * @return the resulting width of the string
33
- */
34
-unsigned
35
-utf8_cut_width(char *p, unsigned max_width);
36
+#include <stddef.h>
37
 
38
-char *utf8_to_locale(const char *str);
39
-char *locale_to_utf8(const char *str);
40
+#ifdef HAVE_ICONV
41
+void
42
+charset_init() noexcept;
43
+#endif
44
 
45
-/**
46
- * Converts the UTF-8 string to the locale, and frees the source
47
- * pointer.  Returns the source pointer as-is if no conversion is
48
- * required.
49
- */
50
 char *
51
-replace_utf8_to_locale(char *src);
52
+CopyUtf8ToLocale(char *dest, size_t dest_size, const char *src) noexcept;
53
 
54
-/**
55
- * Converts the locale string to UTF-8, and frees the source pointer.
56
- * Returns the source pointer as-is if no conversion is required.
57
- */
58
 char *
59
-replace_locale_to_utf8(char *src);
60
+CopyUtf8ToLocale(char *dest, size_t dest_size,
61
+        const char *src, size_t src_length) noexcept;
62
+
63
+gcc_pure
64
+const char *
65
+utf8_to_locale(const char *src, char *buffer, size_t size) noexcept;
66
 
67
 /**
68
  * Convert an UTF-8 string to the locale charset.  The source string
69
@@ -75,28 +49,30 @@
70
  * necessary, then this class is a no-op.
71
  */
72
 class Utf8ToLocale {
73
-#ifdef ENABLE_LOCALE
74
-   char *const value;
75
+#ifdef HAVE_ICONV
76
+   const std::string value;
77
 #else
78
    const char *const value;
79
 #endif
80
 
81
 public:
82
-#ifdef ENABLE_LOCALE
83
-   explicit Utf8ToLocale(const char *src)
84
-       :value(utf8_to_locale(src)) {}
85
-
86
-   ~Utf8ToLocale();
87
+#ifdef HAVE_ICONV
88
+   explicit Utf8ToLocale(const char *src) noexcept;
89
+   Utf8ToLocale(const char *src, size_t length) noexcept;
90
 
91
    Utf8ToLocale(const Utf8ToLocale &) = delete;
92
    Utf8ToLocale &operator=(const Utf8ToLocale &) = delete;
93
 #else
94
-   explicit Utf8ToLocale(const char *src)
95
+   explicit Utf8ToLocale(const char *src) noexcept
96
        :value(src) {}
97
 #endif
98
 
99
-   const char *c_str() const {
100
+   const char *c_str() const noexcept {
101
+#ifdef HAVE_ICONV
102
+       return value.c_str();
103
+#else
104
        return value;
105
+#endif
106
    }
107
 };
108
 
109
@@ -106,28 +82,29 @@
110
  * necessary, then this class is a no-op.
111
  */
112
 class LocaleToUtf8 {
113
-#ifdef ENABLE_LOCALE
114
-   char *const value;
115
+#ifdef HAVE_ICONV
116
+   const std::string value;
117
 #else
118
    const char *const value;
119
 #endif
120
 
121
 public:
122
-#ifdef ENABLE_LOCALE
123
-   explicit LocaleToUtf8(const char *src)
124
-       :value(locale_to_utf8(src)) {}
125
-
126
-   ~LocaleToUtf8();
127
+#ifdef HAVE_ICONV
128
+   explicit LocaleToUtf8(const char *src) noexcept;
129
 
130
    LocaleToUtf8(const LocaleToUtf8 &) = delete;
131
    LocaleToUtf8 &operator=(const LocaleToUtf8 &) = delete;
132
 #else
133
-   explicit LocaleToUtf8(const char *src)
134
+   explicit LocaleToUtf8(const char *src) noexcept
135
        :value(src) {}
136
 #endif
137
 
138
-   const char *c_str() const {
139
+   const char *c_str() const noexcept {
140
+#ifdef HAVE_ICONV
141
+       return value.c_str();
142
+#else
143
        return value;
144
+#endif
145
    }
146
 };
147
 
148
ncmpc-0.30.tar.xz/src/conf.cxx -> ncmpc-0.32.tar.xz/src/conf.cxx Changed
606
 
1
@@ -19,23 +19,32 @@
2
 
3
 #include "conf.hxx"
4
 #include "config.h"
5
+#include "Bindings.hxx"
6
+#include "GlobalBindings.hxx"
7
 #include "defaults.hxx"
8
 #include "i18n.h"
9
-#include "command.hxx"
10
-#include "colors.hxx"
11
+#include "Command.hxx"
12
+#include "Styles.hxx"
13
+#include "BasicColors.hxx"
14
+#include "CustomColors.hxx"
15
 #include "screen_list.hxx"
16
-#include "options.hxx"
17
+#include "Options.hxx"
18
+#include "io/Path.hxx"
19
 #include "util/CharUtil.hxx"
20
+#include "util/ScopeExit.hxx"
21
 #include "util/StringStrip.hxx"
22
 
23
 #include <assert.h>
24
+#include <sys/stat.h>
25
 #include <ctype.h>
26
 #include <stdio.h>
27
 #include <errno.h>
28
 #include <stdlib.h>
29
 #include <string.h>
30
+
31
+#ifdef _WIN32
32
 #include <glib.h>
33
-#include <glib/gstdio.h>
34
+#endif
35
 
36
 #define MAX_LINE_LENGTH 1024
37
 #define COMMENT_TOKEN '#'
38
@@ -86,6 +95,14 @@
39
 #define CONF_CHAT_PREFIX "chat-prefix"
40
 #define CONF_SECOND_COLUMN "second-column"
41
 
42
+#ifdef _WIN32
43
+#define CONFIG_FILENAME "ncmpc.conf"
44
+#define KEYS_FILENAME "keys.conf"
45
+#else
46
+#define CONFIG_FILENAME "config"
47
+#define KEYS_FILENAME "keys"
48
+#endif
49
+
50
 static bool
51
 str2bool(char *str)
52
 {
53
@@ -150,42 +167,32 @@
54
 parse_key_definition(char *str)
55
 {
56
    /* get the command name */
57
-   const size_t len = strlen(str);
58
-   size_t i = 0;
59
-   int j = 0;
60
-   char buf[MAX_LINE_LENGTH];
61
-   memset(buf, 0, MAX_LINE_LENGTH);
62
-   while (i < len && str[i] != '=' && !IsWhitespaceFast(str[i]))
63
-       buf[j++] = str[i++];
64
-
65
-   command_t cmd = get_key_command_from_name(buf);
66
-   if(cmd == CMD_NONE) {
67
-       /* the hotkey configuration contains an unknown
68
-          command */
69
-       print_error(_("Unknown command"), buf);
70
+   char *eq = strchr(str, '=');
71
+   if (eq == nullptr) {
72
+       /* the hotkey configuration line is incomplete */
73
+       print_error(_("Incomplete hotkey configuration"), str);
74
        return false;
75
    }
76
 
77
-   /* skip whitespace */
78
-   while (i < len && (str[i] == '=' || IsWhitespaceFast(str[i])))
79
-       i++;
80
+   char *command_name = str;
81
+   str = StripLeft(eq + 1);
82
 
83
-   /* get the value part */
84
-   memset(buf, 0, MAX_LINE_LENGTH);
85
-   g_strlcpy(buf, str+i, MAX_LINE_LENGTH);
86
-   if (*buf == 0) {
87
-       /* the hotkey configuration line is incomplete */
88
-       print_error(_("Incomplete hotkey configuration"), str);
89
+   *eq = '\0';
90
+   StripRight(command_name);
91
+   const auto cmd = get_key_command_from_name(command_name);
92
+   if(cmd == Command::NONE) {
93
+       /* the hotkey configuration contains an unknown
94
+          command */
95
+       print_error(_("Unknown command"), command_name);
96
        return false;
97
    }
98
 
99
    /* parse key values */
100
-   i = 0;
101
+   size_t i = 0;
102
    int key = 0;
103
-   char *p = buf;
104
+   char *p = str;
105
 
106
-   int keys[MAX_COMMAND_KEYS];
107
-   memset(keys, 0, sizeof(int)*MAX_COMMAND_KEYS);
108
+   std::array<int, MAX_COMMAND_KEYS> keys{0};
109
    while (i < MAX_COMMAND_KEYS && *p != 0 &&
110
           (key = parse_key_value(p, &p)) >= 0) {
111
        keys[i++] = key;
112
@@ -196,7 +203,8 @@
113
    if (key < 0)
114
        return false;
115
 
116
-   return assign_keys(cmd, keys);
117
+   GetGlobalKeyBindings().SetKey(cmd, keys);
118
+   return true;
119
 }
120
 
121
 static bool
122
@@ -230,8 +238,7 @@
123
 
124
    *value++ = 0;
125
 
126
-   g_strchomp(p);
127
-   return StripLeft(value);
128
+   return Strip(value);
129
 }
130
 
131
 static bool
132
@@ -241,7 +248,7 @@
133
    if (value == nullptr)
134
        return false;
135
 
136
-   return colors_assign(str, value);
137
+   return ModifyStyle(str, value);
138
 }
139
 
140
 /**
141
@@ -260,7 +267,7 @@
142
    } else
143
        comma = p + strlen(p);
144
 
145
-   g_strchomp(p);
146
+   StripRight(p);
147
    return comma;
148
 }
149
 
150
@@ -272,7 +279,7 @@
151
        return false;
152
 
153
    /* get the command name */
154
-   short color = colors_str2color(str);
155
+   short color = ParseColorNameOrNumber(str);
156
    if (color < 0) {
157
        char buf[MAX_LINE_LENGTH];
158
        print_error(_("Bad color name"), buf);
159
@@ -303,7 +310,8 @@
160
        return false;
161
    }
162
 
163
-   return colors_define(str, rgb[0], rgb[1], rgb[2]);
164
+   colors_define(color, rgb[0], rgb[1], rgb[2]);
165
+   return true;
166
 }
167
 #endif
168
 
169
@@ -320,30 +328,51 @@
170
    return {s, length};
171
 }
172
 
173
+static constexpr bool
174
+IsListSeparator(char ch) noexcept
175
+{
176
+   return IsWhitespaceFast(ch) || ch == ',';
177
+}
178
+
179
+static char *
180
+NextItem(char *&src) noexcept
181
+{
182
+   while (*src && IsListSeparator(*src))
183
+       ++src;
184
+
185
+   if (!*src)
186
+       return nullptr;
187
+
188
+   char *value = src;
189
+
190
+   while (!IsListSeparator(*src))
191
+       ++src;
192
+
193
+   if (*src)
194
+       *src++ = 0;
195
+
196
+   return value;
197
+}
198
+
199
 static std::vector<std::string>
200
 check_screen_list(char *value)
201
 {
202
-   char **tmp = g_strsplit_set(value, " \t,", 100);
203
    std::vector<std::string> screen;
204
-   int i = 0;
205
-
206
-   while( tmp && tmp[i] ) {
207
-       char *name = g_ascii_strdown(tmp[i], -1);
208
-       if (*name != '\0') {
209
-           if (screen_lookup_name(name) == nullptr) {
210
-               /* an unknown screen name was specified in the
211
-                  configuration file */
212
-               print_error(_("Unknown screen name"), name);
213
-           } else {
214
-               screen.emplace_back(name);
215
-           }
216
+
217
+   while (char *name = NextItem(value)) {
218
+       std::transform(name, name + strlen(name), name, tolower);
219
+
220
+       if (screen_lookup_name(name) == nullptr) {
221
+           /* an unknown screen name was specified in the
222
+              configuration file */
223
+           print_error(_("Unknown screen name"), name);
224
+       } else {
225
+           screen.emplace_back(name);
226
        }
227
-       g_free(name);
228
-       i++;
229
    }
230
-   g_strfreev(tmp);
231
+
232
    if (screen.empty())
233
-       return DEFAULT_SCREEN_LIST;
234
+       screen = DEFAULT_SCREEN_LIST;
235
 
236
    return screen;
237
 }
238
@@ -490,7 +519,7 @@
239
    else if (!strcasecmp(CONF_SEARCH_MODE, name))
240
        options.search_mode = get_search_mode(value);
241
    else if (!strcasecmp(CONF_HIDE_CURSOR, name))
242
-       options.hide_cursor = atoi(value);
243
+       options.hide_cursor = std::chrono::seconds(atoi(value));
244
    else if (!strcasecmp(CONF_SEEK_TIME, name))
245
        options.seek_time = atoi(value);
246
    else if (!strcasecmp(CONF_SCREEN_LIST, name)) {
247
@@ -506,7 +535,7 @@
248
                     * 1000 /* seconds -> milliseconds */;
249
    else if (!strcasecmp(CONF_LYRICS_TIMEOUT, name))
250
 #ifdef ENABLE_LYRICS_SCREEN
251
-       options.lyrics_timeout = atoi(GetStringValue(value).c_str());
252
+       options.lyrics_timeout = std::chrono::seconds(atoi(GetStringValue(value).c_str()));
253
 #else
254
    {}
255
 #endif
256
@@ -569,176 +598,260 @@
257
    return true;
258
 }
259
 
260
-static int
261
-read_rc_file(char *filename)
262
+static bool
263
+read_rc_file(const char *filename)
264
 {
265
    assert(filename != nullptr);
266
 
267
    FILE *file = fopen(filename, "r");
268
    if (file == nullptr) {
269
        perror(filename);
270
-       return -1;
271
+       return false;
272
    }
273
 
274
    char line[MAX_LINE_LENGTH];
275
    while (fgets(line, sizeof(line), file) != nullptr) {
276
        char *p = StripLeft(line);
277
 
278
-       if (*p != 0 && *p != COMMENT_TOKEN)
279
-           parse_line(g_strchomp(p));
280
+       if (*p != 0 && *p != COMMENT_TOKEN) {
281
+           StripRight(p);
282
+           parse_line(p);
283
+       }
284
    }
285
 
286
    fclose(file);
287
-   return 0;
288
+   return true;
289
 }
290
 
291
-bool
292
-check_user_conf_dir()
293
+gcc_pure
294
+static bool
295
+IsFile(const char *path) noexcept
296
 {
297
-   char *directory = g_build_filename(g_get_home_dir(), "." PACKAGE, nullptr);
298
+   struct stat st;
299
+   return stat(path, &st) == 0 && S_ISREG(st.st_mode);
300
+}
301
 
302
-   if (g_file_test(directory, G_FILE_TEST_IS_DIR)) {
303
-       g_free(directory);
304
-       return true;
305
-   }
306
+gcc_pure
307
+static bool
308
+IsDirectory(const char *path) noexcept
309
+{
310
+   struct stat st;
311
+   return stat(path, &st) == 0 && S_ISDIR(st.st_mode);
312
+}
313
+
314
+#ifndef _WIN32
315
 
316
-   bool success = g_mkdir(directory, 0755) == 0;
317
-   g_free(directory);
318
-   return success;
319
+gcc_const
320
+static const char *
321
+GetHomeDirectory() noexcept
322
+{
323
+   return getenv("HOME");
324
 }
325
 
326
-char *
327
-build_user_conf_filename()
328
+gcc_const
329
+static std::string
330
+GetHomeConfigDirectory() noexcept
331
 {
332
-#ifdef WIN32
333
-   return g_build_filename(g_get_user_config_dir(), PACKAGE, "ncmpc.conf", nullptr);
334
-#else
335
-   return g_build_filename(g_get_home_dir(), "." PACKAGE, "config", nullptr);
336
+   const char *config_home = getenv("XDG_CONFIG_HOME");
337
+   if (config_home != nullptr && *config_home != 0)
338
+       return config_home;
339
+
340
+   const char *home = GetHomeDirectory();
341
+   if (home != nullptr)
342
+       return BuildPath(home, ".config");
343
+
344
+   return {};
345
+}
346
+
347
+gcc_pure
348
+static std::string
349
+GetHomeConfigDirectory(const char *package) noexcept
350
+{
351
+   const auto dir = GetHomeConfigDirectory();
352
+   if (dir.empty())
353
+       return {};
354
+
355
+   return BuildPath(dir, package);
356
+}
357
+
358
 #endif
359
+
360
+/**
361
+ * Find or create the directory for writing configuration files.
362
+ *
363
+ * @return the absolute path; an empty string indicates that no
364
+ * directory could be created
365
+ */
366
+static std::string
367
+MakeUserConfigPath(const char *filename)
368
+{
369
+   const auto directory = GetHomeConfigDirectory(PACKAGE);
370
+   if (directory.empty())
371
+       return {};
372
+
373
+   return IsDirectory(directory.c_str()) ||
374
+       mkdir(directory.c_str(), 0755) == 0
375
+       ? BuildPath(directory, filename)
376
+       : std::string();
377
 }
378
 
379
-char *
380
-build_system_conf_filename()
381
+std::string
382
+MakeKeysPath()
383
 {
384
-#ifdef WIN32
385
+   return MakeUserConfigPath(KEYS_FILENAME);
386
+}
387
+
388
+#ifndef _WIN32
389
+
390
+std::string
391
+GetHomeConfigPath()
392
+{
393
+   const char *home = GetHomeDirectory();
394
+   if (home == nullptr)
395
+       return {};
396
+
397
+   return BuildPath(home, "." PACKAGE, CONFIG_FILENAME);
398
+}
399
+
400
+#endif
401
+
402
+std::string
403
+GetUserConfigPath()
404
+{
405
+   const auto dir = GetHomeConfigDirectory();
406
+   if (dir.empty())
407
+       return {};
408
+
409
+   return BuildPath(dir, PACKAGE, CONFIG_FILENAME);
410
+}
411
+
412
+std::string
413
+GetSystemConfigPath()
414
+{
415
+#ifdef _WIN32
416
    const gchar* const *system_data_dirs;
417
-   gchar *pathname = nullptr;
418
 
419
    for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != nullptr; system_data_dirs++)
420
    {
421
-       pathname = g_build_filename(*system_data_dirs, PACKAGE, "ncmpc.conf", nullptr);
422
-       if (g_file_test(pathname, G_FILE_TEST_EXISTS))
423
-       {
424
-           break;
425
-       }
426
-       else
427
-       {
428
-           g_free (pathname);
429
-           pathname = nullptr;
430
-       }
431
+       auto path = BuildPath(*system_data_dirs, PACKAGE, CONFIG_FILENAME);
432
+       if (IsFile(path.c_str()))
433
+           return path;
434
    }
435
-   return pathname;
436
+   return {};
437
 #else
438
-   return g_build_filename(SYSCONFDIR, PACKAGE, "config", nullptr);
439
+   return BuildPath(SYSCONFDIR, PACKAGE, CONFIG_FILENAME);
440
 #endif
441
 }
442
 
443
-char *
444
-build_user_key_binding_filename()
445
+#ifndef _WIN32
446
+
447
+gcc_pure
448
+static std::string
449
+GetHomeKeysPath()
450
 {
451
-#ifdef WIN32
452
-   return g_build_filename(g_get_user_config_dir(), PACKAGE, "keys.conf", nullptr);
453
-#else
454
-   return g_build_filename(g_get_home_dir(), "." PACKAGE, "keys", nullptr);
455
+   const char *home = GetHomeDirectory();
456
+   if (home == nullptr)
457
+       return {};
458
+
459
+   return BuildPath(home, "." PACKAGE, KEYS_FILENAME);
460
+}
461
+
462
 #endif
463
+
464
+gcc_pure
465
+static std::string
466
+GetUserKeysPath()
467
+{
468
+   const auto dir = GetHomeConfigDirectory();
469
+   if (dir.empty())
470
+       return {};
471
+
472
+   return BuildPath(dir, PACKAGE, KEYS_FILENAME);
473
 }
474
 
475
-static char *
476
-g_build_system_key_binding_filename()
477
+gcc_pure
478
+static std::string
479
+GetSystemKeysPath()
480
 {
481
-#ifdef WIN32
482
+#ifdef _WIN32
483
    const gchar* const *system_data_dirs;
484
-   gchar *pathname = nullptr;
485
 
486
    for (system_data_dirs = g_get_system_config_dirs (); *system_data_dirs != nullptr; system_data_dirs++)
487
    {
488
-       pathname = g_build_filename(*system_data_dirs, PACKAGE, "keys.conf", nullptr);
489
-       if (g_file_test(pathname, G_FILE_TEST_EXISTS))
490
-       {
491
-           break;
492
-       }
493
-       else
494
-       {
495
-           g_free (pathname);
496
-           pathname = nullptr;
497
-       }
498
+       auto path = BuildPath(*system_data_dirs, PACKAGE, KEYS_FILENAME);
499
+       if (IsFile(pathname.c_str()))
500
+           return path;
501
    }
502
-   return pathname;
503
+   return {}
504
 #else
505
-   return g_build_filename(SYSCONFDIR, PACKAGE, "keys", nullptr);
506
+   return BuildPath(SYSCONFDIR, PACKAGE, KEYS_FILENAME);
507
 #endif
508
 }
509
 
510
-static char *
511
+static std::string
512
 find_config_file()
513
 {
514
    /* check for command line configuration file */
515
    if (!options.config_file.empty())
516
-       return g_strdup(options.config_file.c_str());
517
+       return options.config_file;
518
 
519
-   /* check for user configuration ~/.ncmpc/config */
520
-   char *filename = build_user_conf_filename();
521
-   if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
522
+   /* check for user configuration ~/.config/ncmpc/config */
523
+   auto filename = GetUserConfigPath();
524
+   if (!filename.empty() && IsFile(filename.c_str()))
525
        return filename;
526
 
527
-   g_free(filename);
528
+#ifndef _WIN32
529
+   /* check for user configuration ~/.ncmpc/config */
530
+   filename = GetHomeConfigPath();
531
+   if (!filename.empty() && IsFile(filename.c_str()))
532
+       return filename;
533
+#endif
534
 
535
    /* check for  global configuration SYSCONFDIR/ncmpc/config */
536
-   filename = build_system_conf_filename();
537
-   if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
538
+   filename = GetSystemConfigPath();
539
+   if (IsFile(filename.c_str()))
540
        return filename;
541
 
542
-   g_free(filename);
543
-   return nullptr;
544
+   return {};
545
 }
546
 
547
-static char *
548
+static std::string
549
 find_keys_file()
550
 {
551
    /* check for command line key binding file */
552
    if (!options.key_file.empty())
553
-       return g_strdup(options.key_file.c_str());
554
+       return options.key_file;
555
 
556
-   /* check for  user key bindings ~/.ncmpc/keys */
557
-   char *filename = build_user_key_binding_filename();
558
-   if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
559
+   /* check for user key bindings ~/.config/ncmpc/keys */
560
+   auto filename = GetUserKeysPath();
561
+   if (!filename.empty() && IsFile(filename.c_str()))
562
        return filename;
563
 
564
-   g_free(filename);
565
+#ifndef _WIN32
566
+   /* check for  user key bindings ~/.ncmpc/keys */
567
+   filename = GetHomeKeysPath();
568
+   if (!filename.empty() && IsFile(filename.c_str()))
569
+       return filename;
570
+#endif
571
 
572
    /* check for  global key bindings SYSCONFDIR/ncmpc/keys */
573
-   filename = g_build_system_key_binding_filename();
574
-   if (g_file_test(filename, G_FILE_TEST_IS_REGULAR))
575
+   filename = GetSystemKeysPath();
576
+   if (IsFile(filename.c_str()))
577
        return filename;
578
 
579
-   g_free(filename);
580
-   return nullptr;
581
+   return {};
582
 }
583
 
584
 void
585
 read_configuration()
586
 {
587
    /* load configuration */
588
-   char *filename = find_config_file();
589
-   if (filename != nullptr) {
590
-       read_rc_file(filename);
591
-       g_free(filename);
592
-   }
593
+   auto filename = find_config_file();
594
+   if (!filename.empty())
595
+       read_rc_file(filename.c_str());
596
 
597
    /* load key bindings */
598
    filename = find_keys_file();
599
-   if (filename != nullptr) {
600
-       read_rc_file(filename);
601
-       g_free(filename);
602
-   }
603
+   if (!filename.empty())
604
+       read_rc_file(filename.c_str());
605
 }
606
ncmpc-0.30.tar.xz/src/conf.hxx -> ncmpc-0.32.tar.xz/src/conf.hxx Changed
28
 
1
@@ -17,13 +17,21 @@
2
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3
  */
4
 
5
-bool
6
-check_user_conf_dir();
7
+#include <string>
8
 
9
-char *build_user_conf_filename();
10
-char *build_system_conf_filename();
11
+std::string
12
+MakeKeysPath();
13
 
14
-char *build_user_key_binding_filename();
15
+#ifndef _WIN32
16
+std::string
17
+GetHomeConfigPath();
18
+#endif
19
+
20
+std::string
21
+GetUserConfigPath();
22
+
23
+std::string
24
+GetSystemConfigPath();
25
 
26
 void read_configuration();
27
 
28
ncmpc-0.30.tar.xz/src/db_completion.cxx -> ncmpc-0.32.tar.xz/src/db_completion.cxx Changed
50
 
1
@@ -21,8 +21,9 @@
2
 #include "Completion.hxx"
3
 #include "charset.hxx"
4
 #include "mpdclient.hxx"
5
+#include "util/ScopeExit.hxx"
6
 
7
-#include <glib.h>
8
+#include <string>
9
 
10
 void
11
 gcmp_list_from_path(struct mpdclient *c, const char *path,
12
@@ -37,30 +38,29 @@
13
 
14
    struct mpd_entity *entity;
15
    while ((entity = mpd_recv_entity(connection)) != nullptr) {
16
-       char *name;
17
+       AtScopeExit(entity) { mpd_entity_free(entity); };
18
 
19
+       std::string name;
20
        if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY &&
21
            types & GCMP_TYPE_DIR) {
22
            const struct mpd_directory *dir =
23
                mpd_entity_get_directory(entity);
24
-           name = g_strconcat(Utf8ToLocale(mpd_directory_get_path(dir)).c_str(),
25
-                      "/", nullptr);
26
+           name = Utf8ToLocale(mpd_directory_get_path(dir)).c_str();
27
+           name.push_back('/');
28
        } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG &&
29
               types & GCMP_TYPE_FILE) {
30
            const struct mpd_song *song =
31
                mpd_entity_get_song(entity);
32
-           name = utf8_to_locale(mpd_song_get_uri(song));
33
+           name = Utf8ToLocale(mpd_song_get_uri(song)).c_str();
34
        } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_PLAYLIST &&
35
               types & GCMP_TYPE_PLAYLIST) {
36
            const struct mpd_playlist *playlist =
37
                mpd_entity_get_playlist(entity);
38
-           name = utf8_to_locale(mpd_playlist_get_path(playlist));
39
+           name = Utf8ToLocale(mpd_playlist_get_path(playlist)).c_str();
40
        } else {
41
-           mpd_entity_free(entity);
42
            continue;
43
        }
44
 
45
-       completion.emplace(name);
46
-       mpd_entity_free(entity);
47
+       completion.emplace(std::move(name));
48
    }
49
 }
50
ncmpc-0.30.tar.xz/src/defaults.hxx -> ncmpc-0.32.tar.xz/src/defaults.hxx Changed
14
 
1
@@ -27,10 +27,10 @@
2
 #define DEFAULT_SCREEN_LIST {"playlist", "browse"}
3
 
4
 /* song format - list window */
5
-#define DEFAULT_LIST_FORMAT "%name%|[%artist% - ][%title%|%shortfile%]"
6
+#define DEFAULT_LIST_FORMAT "%name%|[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]"
7
 
8
 /* song format - status window */
9
-#define DEFAULT_STATUS_FORMAT "[%artist% - ][%title%|%shortfile%]"
10
+#define DEFAULT_STATUS_FORMAT "[[%artist%|%performer%|%composer%] - ][%title%|%shortfile%]"
11
 
12
 #define DEFAULT_LYRICS_TIMEOUT 100
13
 
14
ncmpc-0.30.tar.xz/src/filelist.cxx -> ncmpc-0.32.tar.xz/src/filelist.cxx Changed
34
 
1
@@ -18,11 +18,10 @@
2
  */
3
 
4
 #include "filelist.hxx"
5
+#include "util/StringUTF8.hxx"
6
 
7
 #include <mpd/client.h>
8
 
9
-#include <glib.h>
10
-
11
 #include <algorithm>
12
 
13
 #include <string.h>
14
@@ -48,15 +47,15 @@
15
        break;
16
 
17
    case MPD_ENTITY_TYPE_DIRECTORY:
18
-       return g_utf8_collate(mpd_directory_get_path(mpd_entity_get_directory(&a)),
19
-                     mpd_directory_get_path(mpd_entity_get_directory(&b))) < 0;
20
+       return CollateUTF8(mpd_directory_get_path(mpd_entity_get_directory(&a)),
21
+                  mpd_directory_get_path(mpd_entity_get_directory(&b))) < 0;
22
 
23
    case MPD_ENTITY_TYPE_SONG:
24
        return false;
25
 
26
    case MPD_ENTITY_TYPE_PLAYLIST:
27
-       return g_utf8_collate(mpd_playlist_get_path(mpd_entity_get_playlist(&a)),
28
-                     mpd_playlist_get_path(mpd_entity_get_playlist(&b))) < 0;
29
+       return CollateUTF8(mpd_playlist_get_path(mpd_entity_get_playlist(&a)),
30
+                  mpd_playlist_get_path(mpd_entity_get_playlist(&b))) < 0;
31
    }
32
 
33
    return false;
34
ncmpc-0.30.tar.xz/src/filelist.hxx -> ncmpc-0.32.tar.xz/src/filelist.hxx Changed
10
 
1
@@ -20,7 +20,7 @@
2
 #ifndef FILELIST_H
3
 #define FILELIST_H
4
 
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
 #include <vector>
9
 #include <utility>
10
ncmpc-0.30.tar.xz/src/gidle.cxx -> ncmpc-0.32.tar.xz/src/gidle.cxx Changed
408
 
1
@@ -27,159 +27,77 @@
2
 */
3
 
4
 #include "gidle.hxx"
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
 #include <mpd/async.h>
9
 #include <mpd/parser.h>
10
 
11
-#include <glib.h>
12
-
13
 #include <assert.h>
14
 #include <string.h>
15
 #include <errno.h>
16
 
17
-MpdIdleSource::MpdIdleSource(struct mpd_connection &_connection,
18
-                mpd_glib_callback_t _callback, void *_callback_ctx)
19
+MpdIdleSource::MpdIdleSource(boost::asio::io_service &io_service,
20
+                struct mpd_connection &_connection,
21
+                MpdIdleHandler &_handler) noexcept
22
    :connection(&_connection),
23
     async(mpd_connection_get_async(connection)),
24
     parser(mpd_parser_new()),
25
-    callback(_callback), callback_ctx(_callback_ctx),
26
-    channel(g_io_channel_unix_new(mpd_async_get_fd(async)))
27
+    handler(_handler),
28
+    socket(io_service, mpd_async_get_fd(async))
29
 {
30
    /* TODO check parser!=nullptr */
31
 }
32
 
33
-MpdIdleSource::~MpdIdleSource()
34
+MpdIdleSource::~MpdIdleSource() noexcept
35
 {
36
-   if (id != 0)
37
-       g_source_remove(id);
38
-
39
-   g_io_channel_unref(channel);
40
+   socket.release();
41
 
42
    mpd_parser_free(parser);
43
 
44
 }
45
 
46
-static void
47
-mpd_glib_invoke(const MpdIdleSource *source)
48
-{
49
-   assert(source->id == 0);
50
-
51
-   if (source->idle_events != 0)
52
-       source->callback(MPD_ERROR_SUCCESS, (enum mpd_server_error)0,
53
-                nullptr,
54
-                source->idle_events, source->callback_ctx);
55
-}
56
-
57
-static void
58
-mpd_glib_invoke_error(const MpdIdleSource *source,
59
-             enum mpd_error error, enum mpd_server_error server_error,
60
-             const char *message)
61
-{
62
-   assert(source->id == 0);
63
-
64
-   source->callback(error, server_error, message,
65
-            0, source->callback_ctx);
66
-}
67
-
68
-static void
69
-mpd_glib_invoke_async_error(const MpdIdleSource *source)
70
-{
71
-   assert(source->id == 0);
72
-
73
-   mpd_glib_invoke_error(source, mpd_async_get_error(source->async),
74
-                 (enum mpd_server_error)0,
75
-                 mpd_async_get_error_message(source->async));
76
-}
77
-
78
-/**
79
- * Converts a GIOCondition bit mask to #mpd_async_event.
80
- */
81
-static enum mpd_async_event
82
-g_io_condition_to_mpd_async_event(GIOCondition condition)
83
-{
84
-   unsigned events = 0;
85
-
86
-   if (condition & G_IO_IN)
87
-       events |= MPD_ASYNC_EVENT_READ;
88
-
89
-   if (condition & G_IO_OUT)
90
-       events |= MPD_ASYNC_EVENT_WRITE;
91
-
92
-   if (condition & G_IO_HUP)
93
-       events |= MPD_ASYNC_EVENT_HUP;
94
-
95
-   if (condition & G_IO_ERR)
96
-       events |= MPD_ASYNC_EVENT_ERROR;
97
-
98
-   return (enum mpd_async_event)events;
99
-}
100
-
101
-/**
102
- * Converts a #mpd_async_event bit mask to GIOCondition.
103
- */
104
-static GIOCondition
105
-mpd_async_events_to_g_io_condition(enum mpd_async_event events)
106
+void
107
+MpdIdleSource::InvokeAsyncError() noexcept
108
 {
109
-   unsigned condition = 0;
110
-
111
-   if (events & MPD_ASYNC_EVENT_READ)
112
-       condition |= G_IO_IN;
113
-
114
-   if (events & MPD_ASYNC_EVENT_WRITE)
115
-       condition |= G_IO_OUT;
116
-
117
-   if (events & MPD_ASYNC_EVENT_HUP)
118
-       condition |= G_IO_HUP;
119
-
120
-   if (events & MPD_ASYNC_EVENT_ERROR)
121
-       condition |= G_IO_ERR;
122
-
123
-   return GIOCondition(condition);
124
+   InvokeError(mpd_async_get_error(async),
125
+           (enum mpd_server_error)0,
126
+           mpd_async_get_error_message(async));
127
 }
128
 
129
-/**
130
- * Parses a response line from MPD.
131
- *
132
- * @return true on success, false on error
133
- */
134
-static bool
135
-mpd_glib_feed(MpdIdleSource *source, char *line)
136
+bool
137
+MpdIdleSource::Feed(char *line) noexcept
138
 {
139
    enum mpd_parser_result result;
140
 
141
-   result = mpd_parser_feed(source->parser, line);
142
+   result = mpd_parser_feed(parser, line);
143
    switch (result) {
144
    case MPD_PARSER_MALFORMED:
145
-       source->id = 0;
146
-       source->io_events = 0;
147
+       io_events = 0;
148
 
149
-       mpd_glib_invoke_error(source, MPD_ERROR_MALFORMED,
150
-                     (enum mpd_server_error)0,
151
-                     "Malformed MPD response");
152
+       InvokeError(MPD_ERROR_MALFORMED,
153
+               (enum mpd_server_error)0,
154
+               "Malformed MPD response");
155
        return false;
156
 
157
    case MPD_PARSER_SUCCESS:
158
-       source->id = 0;
159
-       source->io_events = 0;
160
+       io_events = 0;
161
 
162
-       mpd_glib_invoke(source);
163
+       InvokeCallback();
164
        return false;
165
 
166
    case MPD_PARSER_ERROR:
167
-       source->id = 0;
168
-       source->io_events = 0;
169
+       io_events = 0;
170
 
171
-       mpd_glib_invoke_error(source, MPD_ERROR_SERVER,
172
-                     mpd_parser_get_server_error(source->parser),
173
-                     mpd_parser_get_message(source->parser));
174
+       InvokeError(MPD_ERROR_SERVER,
175
+               mpd_parser_get_server_error(parser),
176
+               mpd_parser_get_message(parser));
177
        return false;
178
 
179
    case MPD_PARSER_PAIR:
180
-       if (strcmp(mpd_parser_get_name(source->parser),
181
+       if (strcmp(mpd_parser_get_name(parser),
182
               "changed") == 0)
183
-           source->idle_events |=
184
-               mpd_idle_name_parse(mpd_parser_get_value(source->parser));
185
+           idle_events |=
186
+               mpd_idle_name_parse(mpd_parser_get_value(parser));
187
 
188
        break;
189
    }
190
@@ -187,123 +105,136 @@
191
    return true;
192
 }
193
 
194
-/**
195
- * Receives and evaluates a portion of the MPD response.
196
- *
197
- * @return true on success, false on error
198
- */
199
-static bool
200
-mpd_glib_recv(MpdIdleSource *source)
201
+bool
202
+MpdIdleSource::Receive() noexcept
203
 {
204
    char *line;
205
-   while ((line = mpd_async_recv_line(source->async)) != nullptr) {
206
-       if (!mpd_glib_feed(source, line))
207
+   while ((line = mpd_async_recv_line(async)) != nullptr) {
208
+       if (!Feed(line))
209
            return false;
210
    }
211
 
212
-   if (mpd_async_get_error(source->async) != MPD_ERROR_SUCCESS) {
213
-       source->id = 0;
214
-       source->io_events = 0;
215
+   if (mpd_async_get_error(async) != MPD_ERROR_SUCCESS) {
216
+       io_events = 0;
217
 
218
-       mpd_glib_invoke_async_error(source);
219
+       InvokeAsyncError();
220
        return false;
221
    }
222
 
223
    return true;
224
 }
225
 
226
-static gboolean
227
-mpd_glib_source_callback(gcc_unused GIOChannel *_source,
228
-            GIOCondition condition, gpointer data)
229
+void
230
+MpdIdleSource::OnReadable(const boost::system::error_code &error) noexcept
231
 {
232
-   auto *source = (MpdIdleSource *)data;
233
+   io_events &= ~MPD_ASYNC_EVENT_READ;
234
 
235
-   assert(source->id != 0);
236
-   assert(source->io_events != 0);
237
+   if (error) {
238
+       if (error == boost::asio::error::operation_aborted)
239
+           return;
240
 
241
-   /* let libmpdclient do some I/O */
242
+       // TODO
243
+       return;
244
+   }
245
 
246
-   if (!mpd_async_io(source->async,
247
-             g_io_condition_to_mpd_async_event(condition))) {
248
-       source->id = 0;
249
-       source->io_events = 0;
250
+   if (!mpd_async_io(async, MPD_ASYNC_EVENT_READ)) {
251
+       socket.cancel();
252
+       io_events = 0;
253
 
254
-       mpd_glib_invoke_async_error(source);
255
-       return false;
256
+       InvokeAsyncError();
257
+       return;
258
    }
259
 
260
-   /* receive the response */
261
+   if (!Receive())
262
+       return;
263
 
264
-   if ((condition & G_IO_IN) != 0) {
265
-       if (!mpd_glib_recv(source))
266
-           return false;
267
-   }
268
+   UpdateSocket();
269
+}
270
 
271
-   /* continue polling? */
272
+void
273
+MpdIdleSource::OnWritable(const boost::system::error_code &error) noexcept
274
+{
275
+   io_events &= ~MPD_ASYNC_EVENT_WRITE;
276
 
277
-   enum mpd_async_event events = mpd_async_events(source->async);
278
-   if (events == 0) {
279
-       /* no events - disable watch */
280
-       source->id = 0;
281
-       source->io_events = 0;
282
+   if (error) {
283
+       if (error == boost::asio::error::operation_aborted)
284
+           return;
285
 
286
-       return false;
287
-   } else if (events != source->io_events) {
288
-       /* different event mask: make new watch */
289
+       // TODO
290
+       return;
291
+   }
292
 
293
-       g_source_remove(source->id);
294
+   if (!mpd_async_io(async, MPD_ASYNC_EVENT_WRITE)) {
295
+       socket.cancel();
296
+       io_events = 0;
297
 
298
-       condition = mpd_async_events_to_g_io_condition(events);
299
-       source->id = g_io_add_watch(source->channel, condition,
300
-                       mpd_glib_source_callback, source);
301
-       source->io_events = events;
302
+       InvokeAsyncError();
303
+       return;
304
+   }
305
 
306
-       return false;
307
-   } else
308
-       /* same event mask as before, enable the old watch */
309
-       return true;
310
+   UpdateSocket();
311
+}
312
+
313
+void
314
+MpdIdleSource::AsyncRead() noexcept
315
+{
316
+   io_events |= MPD_ASYNC_EVENT_READ;
317
+   socket.async_read_some(boost::asio::null_buffers(),
318
+                  std::bind(&MpdIdleSource::OnReadable, this,
319
+                    std::placeholders::_1));
320
 }
321
 
322
-static void
323
-mpd_glib_add_watch(MpdIdleSource *source)
324
+void
325
+MpdIdleSource::AsyncWrite() noexcept
326
 {
327
-   enum mpd_async_event events = mpd_async_events(source->async);
328
+   io_events |= MPD_ASYNC_EVENT_WRITE;
329
+   socket.async_write_some(boost::asio::null_buffers(),
330
+               std::bind(&MpdIdleSource::OnWritable, this,
331
+                     std::placeholders::_1));
332
+}
333
 
334
-   assert(source->io_events == 0);
335
-   assert(source->id == 0);
336
+void
337
+MpdIdleSource::UpdateSocket() noexcept
338
+{
339
+   enum mpd_async_event events = mpd_async_events(async);
340
+   if (events == io_events)
341
+       return;
342
+
343
+   socket.cancel();
344
+
345
+   if (events & MPD_ASYNC_EVENT_READ)
346
+       AsyncRead();
347
+
348
+   if (events & MPD_ASYNC_EVENT_WRITE)
349
+       AsyncWrite();
350
 
351
-   GIOCondition condition = mpd_async_events_to_g_io_condition(events);
352
-   source->id = g_io_add_watch(source->channel, condition,
353
-                   mpd_glib_source_callback, source);
354
-   source->io_events = events;
355
+   io_events = events;
356
 }
357
 
358
 bool
359
-MpdIdleSource::Enter()
360
+MpdIdleSource::Enter() noexcept
361
 {
362
    assert(io_events == 0);
363
-   assert(id == 0);
364
 
365
    idle_events = 0;
366
 
367
    if (!mpd_async_send_command(async, "idle", nullptr)) {
368
-       mpd_glib_invoke_async_error(this);
369
+       InvokeAsyncError();
370
        return false;
371
    }
372
 
373
-   mpd_glib_add_watch(this);
374
+   UpdateSocket();
375
    return true;
376
 }
377
 
378
 void
379
-MpdIdleSource::Leave()
380
+MpdIdleSource::Leave() noexcept
381
 {
382
-   if (id == 0)
383
+   if (io_events == 0)
384
        /* already left, callback was invoked */
385
        return;
386
 
387
-   g_source_remove(id);
388
-   id = 0;
389
+   socket.cancel();
390
    io_events = 0;
391
 
392
    enum mpd_idle events = idle_events == 0
393
@@ -319,11 +250,11 @@
394
            ? mpd_connection_get_server_error(connection)
395
            : (enum mpd_server_error)0;
396
 
397
-       mpd_glib_invoke_error(this, error, server_error,
398
-                     mpd_connection_get_error_message(connection));
399
+       InvokeError(error, server_error,
400
+               mpd_connection_get_error_message(connection));
401
        return;
402
    }
403
 
404
    idle_events |= events;
405
-   mpd_glib_invoke(this);
406
+   InvokeCallback();
407
 }
408
ncmpc-0.30.tar.xz/src/gidle.hxx -> ncmpc-0.32.tar.xz/src/gidle.hxx Changed
104
 
1
@@ -29,34 +29,38 @@
2
 #ifndef MPD_GLIB_SOURCE_H
3
 #define MPD_GLIB_SOURCE_H
4
 
5
+#include "AsioServiceFwd.hxx"
6
+
7
 #include <mpd/client.h>
8
 
9
-typedef struct _GIOChannel GIOChannel;
10
+#include <boost/asio/posix/stream_descriptor.hpp>
11
 
12
-typedef void (*mpd_glib_callback_t)(enum mpd_error error,
13
-                   enum mpd_server_error server_error,
14
-                   const char *message,
15
-                   unsigned events, void *ctx);
16
+class MpdIdleHandler {
17
+public:
18
+   virtual void OnIdle(unsigned events) noexcept = 0;
19
+   virtual void OnIdleError(enum mpd_error error,
20
+                enum mpd_server_error server_error,
21
+                const char *message) noexcept = 0;
22
+};
23
 
24
-struct MpdIdleSource {
25
+class MpdIdleSource {
26
    struct mpd_connection *connection;
27
    struct mpd_async *async;
28
    struct mpd_parser *parser;
29
 
30
-   mpd_glib_callback_t callback;
31
-   void *callback_ctx;
32
+   MpdIdleHandler &handler;
33
 
34
-   GIOChannel *channel;
35
+   boost::asio::posix::stream_descriptor socket;
36
 
37
    unsigned io_events = 0;
38
 
39
-   unsigned id = 0;
40
-
41
    unsigned idle_events;
42
 
43
-   MpdIdleSource(struct mpd_connection &_connection,
44
-             mpd_glib_callback_t _callback, void *_callback_ctx);
45
-   ~MpdIdleSource();
46
+public:
47
+   MpdIdleSource(boost::asio::io_service &io_service,
48
+             struct mpd_connection &_connection,
49
+             MpdIdleHandler &_handler) noexcept;
50
+   ~MpdIdleSource() noexcept;
51
 
52
    /**
53
     * Enters idle mode.
54
@@ -64,12 +68,47 @@
55
     * @return true if idle mode has been entered, false if not
56
     * (e.g. I/O error)
57
     */
58
-   bool Enter();
59
+   bool Enter() noexcept;
60
 
61
    /**
62
     * Leaves idle mode and invokes the callback if there were events.
63
     */
64
-   void Leave();
65
+   void Leave() noexcept;
66
+
67
+private:
68
+   void InvokeCallback() noexcept {
69
+       if (idle_events != 0)
70
+           handler.OnIdle(idle_events);
71
+   }
72
+
73
+   void InvokeError(enum mpd_error error,
74
+            enum mpd_server_error server_error,
75
+            const char *message) noexcept {
76
+       handler.OnIdleError(error, server_error, message);
77
+   }
78
+
79
+   void InvokeAsyncError() noexcept;
80
+
81
+   /**
82
+    * Parses a response line from MPD.
83
+    *
84
+    * @return true on success, false on error
85
+    */
86
+   bool Feed(char *line) noexcept;
87
+
88
+   /**
89
+    * Receives and evaluates a portion of the MPD response.
90
+    *
91
+    * @return true on success, false on error
92
+    */
93
+   bool Receive() noexcept;
94
+
95
+   void OnReadable(const boost::system::error_code &error) noexcept;
96
+   void OnWritable(const boost::system::error_code &error) noexcept;
97
+
98
+   void AsyncRead() noexcept;
99
+   void AsyncWrite() noexcept;
100
+   void UpdateSocket() noexcept;
101
 };
102
 
103
 #endif
104
ncmpc-0.30.tar.xz/src/hscroll.cxx -> ncmpc-0.32.tar.xz/src/hscroll.cxx Changed
94
 
1
@@ -18,69 +18,65 @@
2
  */
3
 
4
 #include "hscroll.hxx"
5
+#include "Styles.hxx"
6
 #include "charset.hxx"
7
-#include "ncfix.h"
8
-#include "Event.hxx"
9
 
10
 #include <algorithm>
11
 
12
 #include <assert.h>
13
 
14
-inline bool
15
-hscroll::TimerCallback()
16
+inline void
17
+hscroll::TimerCallback(const boost::system::error_code &error) noexcept
18
 {
19
+   if (error)
20
+       return;
21
+
22
    Step();
23
    Paint();
24
    wrefresh(w);
25
-   return true;
26
+   ScheduleTimer();
27
 }
28
 
29
 void
30
-hscroll::Set(unsigned _x, unsigned _y, unsigned _width, const char *_text)
31
+hscroll::Set(unsigned _x, unsigned _y, unsigned _width, const char *_text,
32
+        Style _style, attr_t _attr) noexcept
33
 {
34
    assert(w != nullptr);
35
    assert(_text != nullptr);
36
 
37
    x = _x;
38
    y = _y;
39
+   style = _style;
40
+   attr = _attr;
41
 
42
    if (!basic.Set(_width, _text))
43
        return;
44
 
45
-   /* obtain the ncurses attributes and the current color, store
46
-      them */
47
-   fix_wattr_get(w, &attrs, &pair, nullptr);
48
-
49
-   if (source_id == 0)
50
-       source_id = ScheduleTimeout<hscroll, &hscroll::TimerCallback>(std::chrono::seconds(1), *this);
51
+   ScheduleTimer();
52
 }
53
 
54
 void
55
-hscroll::Clear()
56
+hscroll::Clear() noexcept
57
 {
58
    basic.Clear();
59
-
60
-   if (source_id != 0)
61
-       g_source_remove(std::exchange(source_id, 0));
62
+   timer.cancel();
63
 }
64
 
65
 void
66
-hscroll::Paint() const
67
+hscroll::Paint() const noexcept
68
 {
69
    assert(w != nullptr);
70
    assert(basic.IsDefined());
71
 
72
-   /* set stored attributes and color */
73
-   attr_t old_attrs;
74
-   short old_pair;
75
-   fix_wattr_get(w, &old_attrs, &old_pair, nullptr);
76
-   wattr_set(w, attrs, pair, nullptr);
77
+   SelectStyle(w, style);
78
+
79
+   if (attr != 0)
80
+       wattron(w, attr);
81
 
82
    /* scroll the string, and draw it */
83
-   char *p = basic.ScrollString();
84
-   mvwaddstr(w, y, x, p);
85
-   g_free(p);
86
+   const auto s = basic.ScrollString();
87
+   mvwaddnstr(w, y, x, s.first, s.second);
88
 
89
-   /* restore previous attributes and color */
90
-   wattr_set(w, old_attrs, old_pair, nullptr);
91
+   if (attr != 0)
92
+       wattroff(w, attr);
93
 }
94
ncmpc-0.30.tar.xz/src/hscroll.hxx -> ncmpc-0.32.tar.xz/src/hscroll.hxx Changed
101
 
1
@@ -20,9 +20,14 @@
2
 #ifndef HSCROLL_H
3
 #define HSCROLL_H
4
 
5
-#include "config.h"
6
-#include "ncmpc_curses.h"
7
 #include "BasicMarquee.hxx"
8
+#include "AsioServiceFwd.hxx"
9
+
10
+#include <curses.h>
11
+
12
+#include <boost/asio/steady_timer.hpp>
13
+
14
+enum class Style : unsigned;
15
 
16
 /**
17
  * This class is used to auto-scroll text which does not fit on the
18
@@ -41,27 +46,25 @@
19
    unsigned x, y;
20
 
21
    /**
22
-    * ncurses attributes for drawing the text.
23
+    * Style for drawing the text.
24
     */
25
-   attr_t attrs;
26
+   Style style;
27
 
28
-   /**
29
-    * ncurses colors for drawing the text.
30
-    */
31
-   short pair;
32
+   attr_t attr;
33
 
34
    /**
35
-    * The id of the timer which updates the scrolled area every
36
-    * second.
37
+    * A timer which updates the scrolled area every second.
38
     */
39
-   unsigned source_id = 0;
40
+   boost::asio::steady_timer timer;
41
 
42
 public:
43
-   hscroll(WINDOW *_w, const char *_separator)
44
-       :w(_w), basic(_separator) {
45
+   hscroll(boost::asio::io_service &io_service,
46
+       WINDOW *_w, const char *_separator) noexcept
47
+       :w(_w), basic(_separator), timer(io_service)
48
+   {
49
    }
50
 
51
-   bool IsDefined() const {
52
+   bool IsDefined() const noexcept {
53
        return basic.IsDefined();
54
    }
55
 
56
@@ -70,19 +73,20 @@
57
     * every second with the current window attributes.  Call
58
     * hscroll_clear() to disable it.
59
     */
60
-   void Set(unsigned x, unsigned y, unsigned width, const char *text);
61
+   void Set(unsigned x, unsigned y, unsigned width, const char *text,
62
+        Style style, attr_t attr=0) noexcept;
63
 
64
    /**
65
     * Removes the text and the timer.  It may be reused with
66
     * Set().
67
     */
68
-   void Clear();
69
+   void Clear() noexcept;
70
 
71
-   void Rewind() {
72
+   void Rewind() noexcept {
73
        basic.Rewind();
74
    }
75
 
76
-   void Step() {
77
+   void Step() noexcept {
78
        basic.Step();
79
    }
80
 
81
@@ -90,10 +94,17 @@
82
     * Explicitly draws the scrolled text.  Calling this function
83
     * is only allowed if there is a text currently.
84
     */
85
-   void Paint() const;
86
+   void Paint() const noexcept;
87
 
88
 private:
89
-   bool TimerCallback();
90
+   void TimerCallback(const boost::system::error_code &error) noexcept;
91
+
92
+   void ScheduleTimer() noexcept {
93
+       boost::system::error_code error;
94
+       timer.expires_from_now(std::chrono::seconds(1), error);
95
+       timer.async_wait(std::bind(&hscroll::TimerCallback, this,
96
+                      std::placeholders::_1));
97
+   }
98
 };
99
 
100
 #endif
101
ncmpc-0.30.tar.xz/src/i18n.h -> ncmpc-0.32.tar.xz/src/i18n.h Changed
9
 
1
@@ -35,6 +35,7 @@
2
 #endif
3
 
4
 #else
5
+#define gettext(x) (x)
6
 #define  _(x) x
7
 #define N_(x) x
8
 #endif
9
ncmpc-0.32.tar.xz/src/io Added
2
 
1
+(directory)
2
ncmpc-0.32.tar.xz/src/io/Path.hxx Added
128
 
1
@@ -0,0 +1,126 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef IO_PATH_HXX
22
+#define IO_PATH_HXX
23
+
24
+#include "util/Compiler.h"
25
+
26
+#include <string>
27
+
28
+#include <string.h>
29
+
30
+namespace PathDetail {
31
+
32
+#ifdef _WIN32
33
+static constexpr char SEPARATOR = '\\';
34
+#else
35
+static constexpr char SEPARATOR = '/';
36
+#endif
37
+
38
+gcc_pure
39
+inline size_t
40
+GetLength(const char *s) noexcept
41
+{
42
+   return strlen(s);
43
+}
44
+
45
+gcc_pure
46
+inline size_t
47
+GetLength(const std::string &s) noexcept
48
+{
49
+   return s.length();
50
+}
51
+
52
+template<typename... Args>
53
+inline size_t
54
+FillLengths(size_t *lengths, Args&&... args) noexcept;
55
+
56
+template<typename First, typename... Args>
57
+inline size_t
58
+FillLengths(size_t *lengths, First &&first, Args&&... args) noexcept
59
+{
60
+   size_t length = GetLength(std::forward<First>(first));
61
+   *lengths++ = length;
62
+   return length + FillLengths(lengths, std::forward<Args>(args)...);
63
+}
64
+
65
+template<>
66
+inline size_t
67
+FillLengths(size_t *) noexcept
68
+{
69
+   return 0;
70
+}
71
+
72
+inline std::string &
73
+Append(std::string &dest, const std::string &value, size_t length) noexcept
74
+{
75
+   return dest.append(value, 0, length);
76
+}
77
+
78
+inline std::string &
79
+Append(std::string &dest, const char *value, size_t length) noexcept
80
+{
81
+   return dest.append(value, length);
82
+}
83
+
84
+template<typename... Args>
85
+inline std::string &
86
+AppendWithSeparators(std::string &dest, const size_t *lengths,
87
+            Args&&... args) noexcept;
88
+
89
+template<typename First, typename... Args>
90
+inline std::string &
91
+AppendWithSeparators(std::string &dest, const size_t *lengths,
92
+            First &&first, Args&&... args) noexcept
93
+{
94
+   dest.push_back(SEPARATOR);
95
+   return AppendWithSeparators(Append(dest, std::forward<First>(first),
96
+                      *lengths),
97
+                   lengths + 1,
98
+                   std::forward<Args>(args)...);
99
+}
100
+
101
+template<>
102
+inline std::string &
103
+AppendWithSeparators(std::string &dest, const size_t *) noexcept
104
+{
105
+   return dest;
106
+}
107
+
108
+} // namespace PathDetail
109
+
110
+template<typename First, typename... Args>
111
+std::string
112
+BuildPath(First &&first, Args&&... args) noexcept
113
+{
114
+   constexpr size_t n = sizeof...(args);
115
+
116
+   size_t lengths[n + 1];
117
+   const size_t total = PathDetail::FillLengths(lengths, first, args...);
118
+
119
+   std::string result;
120
+   result.reserve(total + n);
121
+   PathDetail::Append(result, std::forward<First>(first), lengths[0]);
122
+   PathDetail::AppendWithSeparators(result, lengths + 1,
123
+                    std::forward<Args>(args)...);
124
+   return result;
125
+}
126
+
127
+#endif
128
ncmpc-0.30.tar.xz/src/keyboard.cxx -> ncmpc-0.32.tar.xz/src/keyboard.cxx Changed
115
 
1
@@ -19,15 +19,12 @@
2
 
3
 #include "config.h"
4
 #include "keyboard.hxx"
5
-#include "command.hxx"
6
+#include "Command.hxx"
7
+#include "Bindings.hxx"
8
+#include "GlobalBindings.hxx"
9
 #include "ncmpc.hxx"
10
-#include "ncmpc_curses.h"
11
-#include "screen.hxx"
12
-#include "Compiler.h"
13
-
14
-#include <glib.h>
15
-
16
-#include <unistd.h>
17
+#include "Point.hxx"
18
+#include "util/Compiler.h"
19
 
20
 static bool
21
 ignore_key(int key)
22
@@ -36,22 +33,25 @@
23
 }
24
 
25
 gcc_pure
26
-static command_t
27
+static Command
28
 translate_key(int key)
29
 {
30
-   return get_key_command(key);
31
+   return GetGlobalKeyBindings().FindKey(key);
32
 }
33
 
34
-static gboolean
35
-keyboard_event(gcc_unused GIOChannel *source,
36
-          gcc_unused GIOCondition condition,
37
-          gpointer data)
38
+void
39
+UserInput::OnReadable(const boost::system::error_code &error)
40
 {
41
-   auto *w = (WINDOW *)data;
42
+   if (error) {
43
+       d.get_io_service().stop();
44
+       return;
45
+   }
46
 
47
-   int key = wgetch(w);
48
-   if (ignore_key(key))
49
-       return true;
50
+   int key = wgetch(&w);
51
+   if (ignore_key(key)) {
52
+       AsyncWait();
53
+       return;
54
+   }
55
 
56
 #ifdef HAVE_GETMOUSE
57
    if (key == KEY_MOUSE) {
58
@@ -68,38 +68,40 @@
59
        do_mouse_event({event.x, event.y}, event.bstate);
60
        end_input_event();
61
 
62
-       return true;
63
+       AsyncWait();
64
+       return;
65
    }
66
 #endif
67
 
68
-   command_t cmd = translate_key(key);
69
-   if (cmd == CMD_NONE)
70
-       return true;
71
+   Command cmd = translate_key(key);
72
+   if (cmd == Command::NONE) {
73
+       AsyncWait();
74
+       return;
75
+   }
76
 
77
    begin_input_event();
78
 
79
-   if (!do_input_event(cmd))
80
-       return false;
81
+   if (!do_input_event(d.get_io_service(), cmd))
82
+       return;
83
 
84
    end_input_event();
85
-   return true;
86
+   AsyncWait();
87
 }
88
 
89
-void
90
-keyboard_init(WINDOW *w)
91
+UserInput::UserInput(boost::asio::io_service &io_service, WINDOW &_w)
92
+   :d(io_service), w(_w)
93
 {
94
-   GIOChannel *channel = g_io_channel_unix_new(STDIN_FILENO);
95
-   g_io_add_watch(channel, G_IO_IN, keyboard_event, w);
96
-   g_io_channel_unref(channel);
97
+   d.assign(STDIN_FILENO);
98
+   AsyncWait();
99
 }
100
 
101
 void
102
-keyboard_unread(int key)
103
+keyboard_unread(boost::asio::io_service &io_service, int key)
104
 {
105
    if (ignore_key(key))
106
        return;
107
 
108
-   command_t cmd = translate_key(key);
109
-   if (cmd != CMD_NONE)
110
-       do_input_event(cmd);
111
+   Command cmd = translate_key(key);
112
+   if (cmd != Command::NONE)
113
+       do_input_event(io_service, cmd);
114
 }
115
ncmpc-0.30.tar.xz/src/keyboard.hxx -> ncmpc-0.32.tar.xz/src/keyboard.hxx Changed
36
 
1
@@ -20,12 +20,30 @@
2
 #ifndef KEYBOARD_H
3
 #define KEYBOARD_H
4
 
5
-#include "ncmpc_curses.h"
6
+#include "AsioServiceFwd.hxx"
7
 
8
-void
9
-keyboard_init(WINDOW *w);
10
+#include <boost/asio/posix/stream_descriptor.hpp>
11
+
12
+#include <curses.h>
13
+
14
+class UserInput {
15
+   boost::asio::posix::stream_descriptor d;
16
+   WINDOW &w;
17
+
18
+public:
19
+   UserInput(boost::asio::io_service &io_service, WINDOW &_w);
20
+
21
+private:
22
+   void AsyncWait() {
23
+       d.async_read_some(boost::asio::null_buffers(),
24
+                 std::bind(&UserInput::OnReadable, this,
25
+                       std::placeholders::_1));
26
+   }
27
+
28
+   void OnReadable(const boost::system::error_code &error);
29
+};
30
 
31
 void
32
-keyboard_unread(int key);
33
+keyboard_unread(boost::asio::io_service &io_service, int key);
34
 
35
 #endif
36
ncmpc-0.30.tar.xz/src/lirc.cxx -> ncmpc-0.32.tar.xz/src/lirc.cxx Changed
79
 
1
@@ -19,42 +19,39 @@
2
 
3
 #include "lirc.hxx"
4
 #include "ncmpc.hxx"
5
-#include "Compiler.h"
6
+#include "Bindings.hxx"
7
+#include "util/Compiler.h"
8
 
9
 #include <lirc/lirc_client.h>
10
 
11
-#include <glib.h>
12
-
13
-static struct lirc_config *lc = nullptr;
14
-
15
-static gboolean
16
-lirc_event(gcc_unused GIOChannel *source,
17
-      gcc_unused GIOCondition condition, gcc_unused gpointer data)
18
+void
19
+LircInput::OnReadable(const boost::system::error_code &error)
20
 {
21
+   if (error)
22
+       return;
23
+
24
    char *code, *txt;
25
-   command_t cmd;
26
 
27
    begin_input_event();
28
 
29
    if (lirc_nextcode(&code) == 0) {
30
        while (lirc_code2char(lc, code, &txt) == 0 && txt != nullptr) {
31
-           cmd = get_key_command_from_name(txt);
32
-           if (!do_input_event(cmd))
33
-               return false;
34
+           const auto cmd = get_key_command_from_name(txt);
35
+           if (!do_input_event(d.get_io_service(), cmd))
36
+               return;
37
        }
38
    }
39
 
40
    end_input_event();
41
-   return true;
42
+   AsyncWait();
43
 }
44
 
45
-void
46
-ncmpc_lirc_init()
47
+LircInput::LircInput(boost::asio::io_service &io_service)
48
+   :d(io_service)
49
 {
50
-   char prog[] = "ncmpc";
51
    int lirc_socket = 0;
52
 
53
-   if ((lirc_socket = lirc_init(prog, 0)) == -1)
54
+   if ((lirc_socket = lirc_init(PACKAGE, 0)) == -1)
55
        return;
56
 
57
    if (lirc_readconfig(nullptr, &lc, nullptr)) {
58
@@ -62,15 +59,14 @@
59
        return;
60
    }
61
 
62
-   GIOChannel *channel = g_io_channel_unix_new(lirc_socket);
63
-   g_io_add_watch(channel, G_IO_IN, lirc_event, nullptr);
64
-   g_io_channel_unref(channel);
65
+   d.assign(lirc_socket);
66
+   AsyncWait();
67
 }
68
 
69
-void
70
-ncmpc_lirc_deinit()
71
+LircInput::~LircInput()
72
 {
73
    if (lc)
74
        lirc_freeconfig(lc);
75
-   lirc_deinit();
76
+   if (d.is_open())
77
+       lirc_deinit();
78
 }
79
ncmpc-0.30.tar.xz/src/lirc.hxx -> ncmpc-0.32.tar.xz/src/lirc.hxx Changed
42
 
1
@@ -20,24 +20,26 @@
2
 #ifndef LIRC_H
3
 #define LIRC_H
4
 
5
-#include "config.h"
6
+#include "AsioServiceFwd.hxx"
7
 
8
-#ifdef ENABLE_LIRC
9
+#include <boost/asio/posix/stream_descriptor.hpp>
10
 
11
-void
12
-ncmpc_lirc_init();
13
+class LircInput {
14
+   boost::asio::posix::stream_descriptor d;
15
+   struct lirc_config *lc = nullptr;
16
 
17
-void
18
-ncmpc_lirc_deinit();
19
+public:
20
+   explicit LircInput(boost::asio::io_service &io_service);
21
+   ~LircInput();
22
 
23
-#else
24
+private:
25
+   void AsyncWait() {
26
+       d.async_read_some(boost::asio::null_buffers(),
27
+                 std::bind(&LircInput::OnReadable, this,
28
+                       std::placeholders::_1));
29
+   }
30
 
31
-static inline void
32
-ncmpc_lirc_init(void) {}
33
-
34
-static inline void
35
-ncmpc_lirc_deinit(void) {}
36
-
37
-#endif
38
+   void OnReadable(const boost::system::error_code &error);
39
+};
40
 
41
 #endif
42
ncmpc-0.30.tar.xz/src/lyrics.cxx -> ncmpc-0.32.tar.xz/src/lyrics.cxx Changed
19
 
1
@@ -30,13 +30,14 @@
2
 }
3
 
4
 PluginCycle *
5
-lyrics_load(const char *artist, const char *title,
6
+lyrics_load(boost::asio::io_service &io_service,
7
+       const char *artist, const char *title,
8
        plugin_callback_t callback, void *data)
9
 {
10
    const char *args[3] = { artist, title, nullptr };
11
 
12
    if (artist == nullptr || title == nullptr)
13
-       return plugin_run(&empty, args, callback, data);
14
+       return plugin_run(io_service, &empty, args, callback, data);
15
 
16
-   return plugin_run(&plugins, args, callback, data);
17
+   return plugin_run(io_service, &plugins, args, callback, data);
18
 }
19
ncmpc-0.30.tar.xz/src/lyrics.hxx -> ncmpc-0.32.tar.xz/src/lyrics.hxx Changed
18
 
1
@@ -21,13 +21,15 @@
2
 #define LYRICS_H
3
 
4
 #include "plugin.hxx"
5
+#include "AsioServiceFwd.hxx"
6
 
7
 struct PluginCycle;
8
 
9
 void lyrics_init();
10
 
11
 PluginCycle *
12
-lyrics_load(const char *artist, const char *title,
13
+lyrics_load(boost::asio::io_service &io_service,
14
+       const char *artist, const char *title,
15
        plugin_callback_t callback, void *callback_data);
16
 
17
 #endif
18
ncmpc-0.30.tar.xz/src/mpdclient.cxx -> ncmpc-0.32.tar.xz/src/mpdclient.cxx Changed
885
 
1
@@ -24,72 +24,49 @@
2
 #include "gidle.hxx"
3
 #include "charset.hxx"
4
 
5
-#ifdef ENABLE_ASYNC_CONNECT
6
-#include "aconnect.hxx"
7
-#endif
8
-
9
 #include <mpd/client.h>
10
 
11
-#include <glib.h>
12
-
13
 #include <assert.h>
14
 
15
-static gboolean
16
-mpdclient_enter_idle_callback(gpointer user_data)
17
+void
18
+mpdclient::OnEnterIdleTimer(const boost::system::error_code &error) noexcept
19
 {
20
-   auto *c = (struct mpdclient *)user_data;
21
-   assert(c->enter_idle_source_id != 0);
22
-   assert(c->source != nullptr);
23
-   assert(!c->idle);
24
-
25
-   c->enter_idle_source_id = 0;
26
-   c->idle = c->source->Enter();
27
-   return false;
28
-}
29
+   if (error)
30
+       return;
31
 
32
-static void
33
-mpdclient_schedule_enter_idle(struct mpdclient *c)
34
-{
35
-   assert(c != nullptr);
36
-   assert(c->source != nullptr);
37
+   assert(source != nullptr);
38
+   assert(!idle);
39
 
40
-   if (c->enter_idle_source_id == 0)
41
-       /* automatically re-enter MPD "idle" mode */
42
-       c->enter_idle_source_id =
43
-           g_idle_add(mpdclient_enter_idle_callback, c);
44
+   idle = source->Enter();
45
 }
46
 
47
-static void
48
-mpdclient_cancel_enter_idle(struct mpdclient *c)
49
+void
50
+mpdclient::ScheduleEnterIdle() noexcept
51
 {
52
-   if (c->enter_idle_source_id != 0) {
53
-       g_source_remove(c->enter_idle_source_id);
54
-       c->enter_idle_source_id = 0;
55
-   }
56
+   assert(source != nullptr);
57
+
58
+   /* automatically re-enter MPD "idle" mode */
59
+   boost::system::error_code error;
60
+   enter_idle_timer.expires_from_now(std::chrono::seconds(0), error);
61
+   enter_idle_timer.async_wait(std::bind(&mpdclient::OnEnterIdleTimer,
62
+                         this, std::placeholders::_1));
63
 }
64
 
65
 static void
66
 mpdclient_invoke_error_callback(enum mpd_error error,
67
                const char *message)
68
 {
69
-   char *allocated;
70
    if (error == MPD_ERROR_SERVER)
71
        /* server errors are UTF-8, the others are locale */
72
-       message = allocated = utf8_to_locale(message);
73
+       mpdclient_error_callback(Utf8ToLocale(message).c_str());
74
    else
75
-       allocated = nullptr;
76
-
77
-   mpdclient_error_callback(message);
78
-   g_free(allocated);
79
+       mpdclient_error_callback(message);
80
 }
81
 
82
-static void
83
-mpdclient_invoke_error_callback1(struct mpdclient *c)
84
+void
85
+mpdclient::InvokeErrorCallback() noexcept
86
 {
87
-   assert(c != nullptr);
88
-   assert(c->connection != nullptr);
89
-
90
-   struct mpd_connection *connection = c->connection;
91
+   assert(connection != nullptr);
92
 
93
    enum mpd_error error = mpd_connection_get_error(connection);
94
    assert(error != MPD_ERROR_SUCCESS);
95
@@ -98,34 +75,35 @@
96
                    mpd_connection_get_error_message(connection));
97
 }
98
 
99
-static void
100
-mpdclient_gidle_callback(enum mpd_error error,
101
-            gcc_unused enum mpd_server_error server_error,
102
-            const char *message, unsigned events,
103
-            void *ctx)
104
+void
105
+mpdclient::OnIdle(unsigned _events) noexcept
106
 {
107
-   auto *c = (struct mpdclient *)ctx;
108
+   assert(IsConnected());
109
 
110
-   c->idle = false;
111
+   idle = false;
112
 
113
-   assert(c->IsConnected());
114
+   events |= _events;
115
+   Update();
116
 
117
-   if (error != MPD_ERROR_SUCCESS) {
118
-       mpdclient_invoke_error_callback(error, message);
119
-       c->Disconnect();
120
-       mpdclient_lost_callback();
121
-       return;
122
-   }
123
+   mpdclient_idle_callback(events);
124
+   events = 0;
125
 
126
-   c->events |= events;
127
-   c->Update();
128
+   if (source != nullptr)
129
+       ScheduleEnterIdle();
130
+}
131
 
132
-   mpdclient_idle_callback(c->events);
133
+void
134
+mpdclient::OnIdleError(enum mpd_error error,
135
+              gcc_unused enum mpd_server_error server_error,
136
+              const char *message) noexcept
137
+{
138
+   assert(IsConnected());
139
 
140
-   c->events = 0;
141
+   idle = false;
142
 
143
-   if (c->source != nullptr)
144
-       mpdclient_schedule_enter_idle(c);
145
+   mpdclient_invoke_error_callback(error, message);
146
+   Disconnect();
147
+   mpdclient_lost_callback();
148
 }
149
 
150
 /****************************************************************************/
151
@@ -156,7 +134,7 @@
152
 }
153
 
154
 #ifdef ENABLE_ASYNC_CONNECT
155
-#ifndef WIN32
156
+#ifndef _WIN32
157
 
158
 static bool
159
 is_local_socket(const char *host)
160
@@ -174,17 +152,19 @@
161
 #endif
162
 #endif
163
 
164
-mpdclient::mpdclient(const char *_host, unsigned _port,
165
+mpdclient::mpdclient(boost::asio::io_service &io_service,
166
+            const char *_host, unsigned _port,
167
             unsigned _timeout_ms, const char *_password)
168
-   :timeout_ms(_timeout_ms), password(_password)
169
+   :timeout_ms(_timeout_ms), password(_password),
170
+    enter_idle_timer(io_service)
171
 {
172
 #ifdef ENABLE_ASYNC_CONNECT
173
    settings = mpd_settings_new(_host, _port, _timeout_ms,
174
                    nullptr, nullptr);
175
    if (settings == nullptr)
176
-       g_error("Out of memory");
177
+       fprintf(stderr, "Out of memory\n");
178
 
179
-#ifndef WIN32
180
+#ifndef _WIN32
181
    settings2 = _host == nullptr && _port == 0 &&
182
        settings_is_local_socket(settings)
183
        ? mpd_settings_new(_host, 6600, _timeout_ms, nullptr, nullptr)
184
@@ -235,19 +215,19 @@
185
 #endif
186
 }
187
 
188
-static void
189
-mpdclient_status_free(struct mpdclient *c)
190
+void
191
+mpdclient::ClearStatus() noexcept
192
 {
193
-   if (c->status == nullptr)
194
+   if (status == nullptr)
195
        return;
196
 
197
-   mpd_status_free(c->status);
198
-   c->status = nullptr;
199
+   mpd_status_free(status);
200
+   status = nullptr;
201
 
202
-   c->volume = -1;
203
-   c->playing = false;
204
-   c->playing_or_paused = false;
205
-   c->state = MPD_STATE_UNKNOWN;
206
+   volume = -1;
207
+   playing = false;
208
+   playing_or_paused = false;
209
+   state = MPD_STATE_UNKNOWN;
210
 }
211
 
212
 void
213
@@ -260,7 +240,7 @@
214
    }
215
 #endif
216
 
217
-   mpdclient_cancel_enter_idle(this);
218
+   CancelEnterIdle();
219
 
220
    delete source;
221
    source = nullptr;
222
@@ -272,53 +252,50 @@
223
    }
224
    connection = nullptr;
225
 
226
-   mpdclient_status_free(this);
227
+   ClearStatus();
228
 
229
    playlist.clear();
230
 
231
-   if (song)
232
-       song = nullptr;
233
+   current_song = nullptr;
234
 
235
    /* everything has changed after a disconnect */
236
    events |= MPD_IDLE_ALL;
237
 }
238
 
239
-static bool
240
-mpdclient_connected(struct mpdclient *c,
241
-           struct mpd_connection *connection)
242
+bool
243
+mpdclient::OnConnected(struct mpd_connection *_connection) noexcept
244
 {
245
-   c->connection = connection;
246
+   connection = _connection;
247
 
248
    if (mpd_connection_get_error(connection) != MPD_ERROR_SUCCESS) {
249
-       mpdclient_invoke_error_callback1(c);
250
-       c->Disconnect();
251
+       InvokeErrorCallback();
252
+       Disconnect();
253
        mpdclient_failed_callback();
254
        return false;
255
    }
256
 
257
 #ifdef ENABLE_ASYNC_CONNECT
258
-   if (c->timeout_ms > 0)
259
-       mpd_connection_set_timeout(connection, c->timeout_ms);
260
+   if (timeout_ms > 0)
261
+       mpd_connection_set_timeout(connection, timeout_ms);
262
 #endif
263
 
264
    /* send password */
265
-   if (c->password != nullptr &&
266
-       !mpd_run_password(connection, c->password)) {
267
-       mpdclient_invoke_error_callback1(c);
268
-       c->Disconnect();
269
+   if (password != nullptr &&
270
+       !mpd_run_password(connection, password)) {
271
+       InvokeErrorCallback();
272
+       Disconnect();
273
        mpdclient_failed_callback();
274
        return false;
275
    }
276
 
277
-   c->source = new MpdIdleSource(*connection,
278
-                     mpdclient_gidle_callback, c);
279
-   mpdclient_schedule_enter_idle(c);
280
+   source = new MpdIdleSource(get_io_service(), *connection, *this);
281
+   ScheduleEnterIdle();
282
 
283
-   ++c->connection_id;
284
+   ++connection_id;
285
 
286
    /* everything has changed after a connection has been
287
       established */
288
-   c->events = (enum mpd_idle)MPD_IDLE_ALL;
289
+   events = (enum mpd_idle)MPD_IDLE_ALL;
290
 
291
    mpdclient_connected_callback();
292
    return true;
293
@@ -326,51 +303,34 @@
294
 
295
 #ifdef ENABLE_ASYNC_CONNECT
296
 
297
-static void
298
-mpdclient_aconnect_start(struct mpdclient *c,
299
-            const struct mpd_settings *settings);
300
-
301
-static const struct mpd_settings *
302
-mpdclient_get_settings(const struct mpdclient *c)
303
-{
304
-#ifndef WIN32
305
-   if (c->connecting2)
306
-       return c->settings2;
307
-#endif
308
-
309
-   return c->settings;
310
-}
311
-
312
-static void
313
-mpdclient_connect_success(struct mpd_connection *connection, void *ctx)
314
+void
315
+mpdclient::OnAsyncMpdConnect(struct mpd_connection *_connection) noexcept
316
 {
317
-   auto *c = (struct mpdclient *)ctx;
318
-   assert(c->async_connect != nullptr);
319
-   c->async_connect = nullptr;
320
+   assert(async_connect != nullptr);
321
+   async_connect = nullptr;
322
 
323
-   const char *password =
324
-       mpd_settings_get_password(mpdclient_get_settings(c));
325
-   if (password != nullptr && !mpd_run_password(connection, password)) {
326
-       mpdclient_error_callback(mpd_connection_get_error_message(connection));
327
-       mpd_connection_free(connection);
328
+   const char *password2 =
329
+       mpd_settings_get_password(&GetSettings());
330
+   if (password2 != nullptr && !mpd_run_password(_connection, password2)) {
331
+       mpdclient_error_callback(mpd_connection_get_error_message(_connection));
332
+       mpd_connection_free(_connection);
333
        mpdclient_failed_callback();
334
        return;
335
    }
336
 
337
-   mpdclient_connected(c, connection);
338
+   OnConnected(_connection);
339
 }
340
 
341
-static void
342
-mpdclient_connect_error(const char *message, void *ctx)
343
+void
344
+mpdclient::OnAsyncMpdConnectError(const char *message) noexcept
345
 {
346
-   auto *c = (struct mpdclient *)ctx;
347
-   assert(c->async_connect != nullptr);
348
-   c->async_connect = nullptr;
349
+   assert(async_connect != nullptr);
350
+   async_connect = nullptr;
351
 
352
-#ifndef WIN32
353
-   if (!c->connecting2 && c->settings2 != nullptr) {
354
-       c->connecting2 = true;
355
-       mpdclient_aconnect_start(c, c->settings2);
356
+#ifndef _WIN32
357
+   if (!connecting2 && settings2 != nullptr) {
358
+       connecting2 = true;
359
+       StartConnect(*settings2);
360
        return;
361
    }
362
 #endif
363
@@ -379,19 +339,13 @@
364
    mpdclient_failed_callback();
365
 }
366
 
367
-static constexpr AsyncMpdConnectHandler mpdclient_connect_handler = {
368
-   .success = mpdclient_connect_success,
369
-   .error = mpdclient_connect_error,
370
-};
371
-
372
-static void
373
-mpdclient_aconnect_start(struct mpdclient *c,
374
-            const struct mpd_settings *settings)
375
+void
376
+mpdclient::StartConnect(const struct mpd_settings &s) noexcept
377
 {
378
-   aconnect_start(&c->async_connect,
379
-              mpd_settings_get_host(settings),
380
-              mpd_settings_get_port(settings),
381
-              mpdclient_connect_handler, c);
382
+   aconnect_start(get_io_service(), &async_connect,
383
+              mpd_settings_get_host(&s),
384
+              mpd_settings_get_port(&s),
385
+              *this);
386
 }
387
 
388
 #endif
389
@@ -403,18 +357,18 @@
390
    Disconnect();
391
 
392
 #ifdef ENABLE_ASYNC_CONNECT
393
-#ifndef WIN32
394
+#ifndef _WIN32
395
    connecting2 = false;
396
 #endif
397
-   mpdclient_aconnect_start(this, settings);
398
+   StartConnect(*settings);
399
 #else
400
    /* connect to MPD */
401
    struct mpd_connection *new_connection =
402
        mpd_connection_new(host, port, timeout_ms);
403
    if (new_connection == nullptr)
404
-       g_error("Out of memory");
405
+       fprintf(stderr, "Out of memory\n");
406
 
407
-   mpdclient_connected(this, new_connection);
408
+   OnConnected(new_connection);
409
 #endif
410
 }
411
 
412
@@ -427,7 +381,7 @@
413
        return false;
414
 
415
    /* free the old status */
416
-   mpdclient_status_free(this);
417
+   ClearStatus();
418
 
419
    /* retrieve new status */
420
    status = mpd_run_status(c);
421
@@ -453,9 +407,8 @@
422
    }
423
 
424
    /* update the current song */
425
-   if (song == nullptr || mpd_status_get_song_id(status) >= 0) {
426
-       song = playlist.GetChecked(mpd_status_get_song_pos(status));
427
-   }
428
+   if (current_song == nullptr || mpd_status_get_song_id(status) >= 0)
429
+       current_song = playlist.GetChecked(mpd_status_get_song_pos(status));
430
 
431
    return true;
432
 }
433
@@ -468,26 +421,26 @@
434
        source->Leave();
435
 
436
        if (source != nullptr)
437
-           mpdclient_schedule_enter_idle(this);
438
+           ScheduleEnterIdle();
439
    }
440
 
441
    return connection;
442
 }
443
 
444
-static struct mpd_status *
445
-mpdclient_recv_status(struct mpdclient *c)
446
+const struct mpd_status *
447
+mpdclient::ReceiveStatus() noexcept
448
 {
449
-   assert(c->connection != nullptr);
450
+   assert(connection != nullptr);
451
 
452
-   struct mpd_status *status = mpd_recv_status(c->connection);
453
-   if (status == nullptr) {
454
-       c->HandleError();
455
+   struct mpd_status *new_status = mpd_recv_status(connection);
456
+   if (new_status == nullptr) {
457
+       HandleError();
458
        return nullptr;
459
    }
460
 
461
-   if (c->status != nullptr)
462
-       mpd_status_free(c->status);
463
-   return c->status = status;
464
+   if (status != nullptr)
465
+       mpd_status_free(status);
466
+   return status = new_status;
467
 }
468
 
469
 /****************************************************************************/
470
@@ -522,78 +475,70 @@
471
 }
472
 
473
 bool
474
-mpdclient_cmd_clear(struct mpdclient *c)
475
+mpdclient::RunClearQueue() noexcept
476
 {
477
-   struct mpd_connection *connection = c->GetConnection();
478
-   if (connection == nullptr)
479
+   auto *c = GetConnection();
480
+   if (c == nullptr)
481
        return false;
482
 
483
    /* send "clear" and "status" */
484
-   if (!mpd_command_list_begin(connection, false) ||
485
-       !mpd_send_clear(connection) ||
486
-       !mpd_send_status(connection) ||
487
-       !mpd_command_list_end(connection))
488
-       return c->HandleError();
489
+   if (!mpd_command_list_begin(c, false) ||
490
+       !mpd_send_clear(c) ||
491
+       !mpd_send_status(c) ||
492
+       !mpd_command_list_end(c))
493
+       return HandleError();
494
 
495
    /* receive the new status, store it in the mpdclient struct */
496
 
497
-   struct mpd_status *status = mpdclient_recv_status(c);
498
-   if (status == nullptr)
499
+   const struct mpd_status *new_status = ReceiveStatus();
500
+   if (new_status == nullptr)
501
        return false;
502
 
503
-   if (!mpd_response_finish(connection))
504
-       return c->HandleError();
505
+   if (!mpd_response_finish(c))
506
+       return HandleError();
507
 
508
    /* update mpdclient.playlist */
509
 
510
-   if (mpd_status_get_queue_length(status) == 0) {
511
+   if (mpd_status_get_queue_length(new_status) == 0) {
512
        /* after the "clear" command, the queue is really
513
           empty - this means we can clear it locally,
514
           reducing the UI latency */
515
-       c->playlist.clear();
516
-       c->playlist.version = mpd_status_get_queue_version(status);
517
-       c->song = nullptr;
518
+       playlist.clear();
519
+       playlist.version = mpd_status_get_queue_version(new_status);
520
+       current_song = nullptr;
521
    }
522
 
523
-   c->events |= MPD_IDLE_QUEUE;
524
+   events |= MPD_IDLE_QUEUE;
525
    return true;
526
 }
527
 
528
 bool
529
-mpdclient_cmd_volume(struct mpdclient *c, int value)
530
+mpdclient::RunVolume(unsigned value) noexcept
531
 {
532
-   struct mpd_connection *connection = c->GetConnection();
533
-   if (connection == nullptr)
534
+   struct mpd_connection *c = GetConnection();
535
+   if (c == nullptr)
536
        return false;
537
 
538
-   mpd_send_set_volume(connection, value);
539
-   return c->FinishCommand();
540
+   mpd_send_set_volume(c, value);
541
+   return FinishCommand();
542
 }
543
 
544
 bool
545
-mpdclient_cmd_volume_up(struct mpdclient *c)
546
+mpdclient::RunVolumeUp() noexcept
547
 {
548
-   if (c->volume < 0 || c->volume >= 100)
549
+   if (volume < 0 || volume >= 100)
550
        return true;
551
 
552
-   struct mpd_connection *connection = c->GetConnection();
553
-   if (connection == nullptr)
554
-       return false;
555
-
556
-   return mpdclient_cmd_volume(c, ++c->volume);
557
+   return RunVolume(++volume);
558
 }
559
 
560
 bool
561
-mpdclient_cmd_volume_down(struct mpdclient *c)
562
+mpdclient::RunVolumeDown() noexcept
563
 {
564
-   if (c->volume <= 0)
565
+   if (volume <= 0)
566
        return true;
567
 
568
-   struct mpd_connection *connection = c->GetConnection();
569
-   if (connection == nullptr)
570
-       return false;
571
-
572
-   return mpdclient_cmd_volume(c, --c->volume);
573
+   return RunVolume(--volume);
574
 }
575
 
576
 bool
577
@@ -608,56 +553,52 @@
578
 }
579
 
580
 bool
581
-mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song)
582
+mpdclient::RunAdd(const struct mpd_song &song) noexcept
583
 {
584
-   assert(c != nullptr);
585
-   assert(song != nullptr);
586
-
587
-   struct mpd_connection *connection = c->GetConnection();
588
-   if (connection == nullptr || c->status == nullptr)
589
+   auto *c = GetConnection();
590
+   if (c == nullptr || status == nullptr)
591
        return false;
592
 
593
    /* send the add command to mpd; at the same time, get the new
594
       status (to verify the new playlist id) and the last song
595
       (we hope that's the song we just added) */
596
 
597
-   if (!mpd_command_list_begin(connection, true) ||
598
-       !mpd_send_add(connection, mpd_song_get_uri(song)) ||
599
-       !mpd_send_status(connection) ||
600
-       !mpd_send_get_queue_song_pos(connection,
601
-                    c->playlist.size()) ||
602
-       !mpd_command_list_end(connection) ||
603
-       !mpd_response_next(connection))
604
-       return c->HandleError();
605
+   if (!mpd_command_list_begin(c, true) ||
606
+       !mpd_send_add(c, mpd_song_get_uri(&song)) ||
607
+       !mpd_send_status(c) ||
608
+       !mpd_send_get_queue_song_pos(c, playlist.size()) ||
609
+       !mpd_command_list_end(c) ||
610
+       !mpd_response_next(c))
611
+       return HandleError();
612
 
613
-   c->events |= MPD_IDLE_QUEUE;
614
+   events |= MPD_IDLE_QUEUE;
615
 
616
-   struct mpd_status *status = mpdclient_recv_status(c);
617
-   if (status == nullptr)
618
+   const struct mpd_status *new_status = ReceiveStatus();
619
+   if (new_status == nullptr)
620
        return false;
621
 
622
-   if (!mpd_response_next(connection))
623
-       return c->HandleError();
624
+   if (!mpd_response_next(c))
625
+       return HandleError();
626
 
627
-   struct mpd_song *new_song = mpd_recv_song(connection);
628
-   if (!mpd_response_finish(connection) || new_song == nullptr) {
629
+   struct mpd_song *new_song = mpd_recv_song(c);
630
+   if (!mpd_response_finish(c) || new_song == nullptr) {
631
        if (new_song != nullptr)
632
            mpd_song_free(new_song);
633
 
634
-       return mpd_connection_clear_error(connection) ||
635
-           c->HandleError();
636
+       return mpd_connection_clear_error(c) ||
637
+           HandleError();
638
    }
639
 
640
-   if (mpd_status_get_queue_length(status) == c->playlist.size() + 1 &&
641
-       mpd_status_get_queue_version(status) == c->playlist.version + 1) {
642
+   if (mpd_status_get_queue_length(new_status) == playlist.size() + 1 &&
643
+       mpd_status_get_queue_version(new_status) == playlist.version + 1) {
644
        /* the cheap route: match on the new playlist length
645
           and its version, we can keep our local playlist
646
           copy in sync */
647
-       c->playlist.version = mpd_status_get_queue_version(status);
648
+       playlist.version = mpd_status_get_queue_version(new_status);
649
 
650
        /* the song we just received has the correct id;
651
           append it to the local playlist */
652
-       c->playlist.push_back(*new_song);
653
+       playlist.push_back(*new_song);
654
    }
655
 
656
    mpd_song_free(new_song);
657
@@ -666,100 +607,99 @@
658
 }
659
 
660
 bool
661
-mpdclient_cmd_delete(struct mpdclient *c, int idx)
662
+mpdclient::RunDelete(unsigned pos) noexcept
663
 {
664
-   struct mpd_connection *connection = c->GetConnection();
665
-
666
-   if (connection == nullptr || c->status == nullptr)
667
+   auto *c = GetConnection();
668
+   if (c == nullptr || status == nullptr)
669
        return false;
670
 
671
-   if (idx < 0 || (guint)idx >= c->playlist.size())
672
+   if (pos >= playlist.size())
673
        return false;
674
 
675
-   const auto &song = c->playlist[idx];
676
+   const auto &song = playlist[pos];
677
 
678
    /* send the delete command to mpd; at the same time, get the
679
       new status (to verify the playlist id) */
680
 
681
-   if (!mpd_command_list_begin(connection, false) ||
682
-       !mpd_send_delete_id(connection, mpd_song_get_id(&song)) ||
683
-       !mpd_send_status(connection) ||
684
-       !mpd_command_list_end(connection))
685
-       return c->HandleError();
686
+   if (!mpd_command_list_begin(c, false) ||
687
+       !mpd_send_delete_id(c, mpd_song_get_id(&song)) ||
688
+       !mpd_send_status(c) ||
689
+       !mpd_command_list_end(c))
690
+       return HandleError();
691
 
692
-   c->events |= MPD_IDLE_QUEUE;
693
+   events |= MPD_IDLE_QUEUE;
694
 
695
-   struct mpd_status *status = mpdclient_recv_status(c);
696
-   if (status == nullptr)
697
+   const struct mpd_status *new_status = ReceiveStatus();
698
+   if (new_status == nullptr)
699
        return false;
700
 
701
-   if (!mpd_response_finish(connection))
702
-       return c->HandleError();
703
+   if (!mpd_response_finish(c))
704
+       return HandleError();
705
 
706
-   if (mpd_status_get_queue_length(status) == c->playlist.size() - 1 &&
707
-       mpd_status_get_queue_version(status) == c->playlist.version + 1) {
708
+   if (mpd_status_get_queue_length(new_status) == playlist.size() - 1 &&
709
+       mpd_status_get_queue_version(new_status) == playlist.version + 1) {
710
        /* the cheap route: match on the new playlist length
711
           and its version, we can keep our local playlist
712
           copy in sync */
713
-       c->playlist.version = mpd_status_get_queue_version(status);
714
+       playlist.version = mpd_status_get_queue_version(new_status);
715
 
716
        /* remove the song from the local playlist */
717
-       c->playlist.RemoveIndex(idx);
718
+       playlist.RemoveIndex(pos);
719
 
720
        /* remove references to the song */
721
-       if (c->song == &song)
722
-           c->song = nullptr;
723
+       if (current_song == &song)
724
+           current_song = nullptr;
725
    }
726
 
727
    return true;
728
 }
729
 
730
 bool
731
-mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end)
732
+mpdclient::RunDeleteRange(unsigned start, unsigned end) noexcept
733
 {
734
    if (end == start + 1)
735
        /* if that's not really a range, we choose to use the
736
           safer "deleteid" version */
737
-       return mpdclient_cmd_delete(c, start);
738
+       return RunDelete(start);
739
 
740
-   struct mpd_connection *connection = c->GetConnection();
741
-   if (connection == nullptr)
742
+   auto *c = GetConnection();
743
+   if (c == nullptr)
744
        return false;
745
 
746
    /* send the delete command to mpd; at the same time, get the
747
       new status (to verify the playlist id) */
748
 
749
-   if (!mpd_command_list_begin(connection, false) ||
750
-       !mpd_send_delete_range(connection, start, end) ||
751
-       !mpd_send_status(connection) ||
752
-       !mpd_command_list_end(connection))
753
-       return c->HandleError();
754
+   if (!mpd_command_list_begin(c, false) ||
755
+       !mpd_send_delete_range(c, start, end) ||
756
+       !mpd_send_status(c) ||
757
+       !mpd_command_list_end(c))
758
+       return HandleError();
759
 
760
-   c->events |= MPD_IDLE_QUEUE;
761
+   events |= MPD_IDLE_QUEUE;
762
 
763
-   struct mpd_status *status = mpdclient_recv_status(c);
764
-   if (status == nullptr)
765
+   const struct mpd_status *new_status = ReceiveStatus();
766
+   if (new_status == nullptr)
767
        return false;
768
 
769
-   if (!mpd_response_finish(connection))
770
-       return c->HandleError();
771
+   if (!mpd_response_finish(c))
772
+       return HandleError();
773
 
774
-   if (mpd_status_get_queue_length(status) == c->playlist.size() - (end - start) &&
775
-       mpd_status_get_queue_version(status) == c->playlist.version + 1) {
776
+   if (mpd_status_get_queue_length(new_status) == playlist.size() - (end - start) &&
777
+       mpd_status_get_queue_version(new_status) == playlist.version + 1) {
778
        /* the cheap route: match on the new playlist length
779
           and its version, we can keep our local playlist
780
           copy in sync */
781
-       c->playlist.version = mpd_status_get_queue_version(status);
782
+       playlist.version = mpd_status_get_queue_version(new_status);
783
 
784
        /* remove the song from the local playlist */
785
        while (end > start) {
786
            --end;
787
 
788
            /* remove references to the song */
789
-           if (c->song == &c->playlist[end])
790
-               c->song = nullptr;
791
+           if (current_song == &playlist[end])
792
+               current_song = nullptr;
793
 
794
-           c->playlist.RemoveIndex(end);
795
+           playlist.RemoveIndex(end);
796
        }
797
    }
798
 
799
@@ -767,42 +707,42 @@
800
 }
801
 
802
 bool
803
-mpdclient_cmd_move(struct mpdclient *c, unsigned dest_pos, unsigned src_pos)
804
+mpdclient::RunMove(unsigned dest_pos, unsigned src_pos) noexcept
805
 {
806
    if (dest_pos == src_pos)
807
        return true;
808
 
809
-   struct mpd_connection *connection = c->GetConnection();
810
-   if (connection == nullptr)
811
+   auto *c = GetConnection();
812
+   if (c == nullptr)
813
        return false;
814
 
815
    /* send the "move" command to MPD; at the same time, get the
816
       new status (to verify the playlist id) */
817
 
818
-   if (!mpd_command_list_begin(connection, false) ||
819
-       !mpd_send_move(connection, src_pos, dest_pos) ||
820
-       !mpd_send_status(connection) ||
821
-       !mpd_command_list_end(connection))
822
-       return c->HandleError();
823
+   if (!mpd_command_list_begin(c, false) ||
824
+       !mpd_send_move(c, src_pos, dest_pos) ||
825
+       !mpd_send_status(c) ||
826
+       !mpd_command_list_end(c))
827
+       return HandleError();
828
 
829
-   c->events |= MPD_IDLE_QUEUE;
830
+   events |= MPD_IDLE_QUEUE;
831
 
832
-   struct mpd_status *status = mpdclient_recv_status(c);
833
+   const struct mpd_status *new_status = ReceiveStatus();
834
    if (status == nullptr)
835
        return false;
836
 
837
-   if (!mpd_response_finish(connection))
838
-       return c->HandleError();
839
+   if (!mpd_response_finish(c))
840
+       return HandleError();
841
 
842
-   if (mpd_status_get_queue_length(status) == c->playlist.size() &&
843
-       mpd_status_get_queue_version(status) == c->playlist.version + 1) {
844
+   if (mpd_status_get_queue_length(new_status) == playlist.size() &&
845
+       mpd_status_get_queue_version(new_status) == playlist.version + 1) {
846
        /* the cheap route: match on the new playlist length
847
           and its version, we can keep our local playlist
848
           copy in sync */
849
-       c->playlist.version = mpd_status_get_queue_version(status);
850
+       playlist.version = mpd_status_get_queue_version(new_status);
851
 
852
        /* swap songs in the local playlist */
853
-       c->playlist.Move(dest_pos, src_pos);
854
+       playlist.Move(dest_pos, src_pos);
855
    }
856
 
857
    return true;
858
@@ -876,7 +816,7 @@
859
    }
860
 
861
    playlist.version = mpd_status_get_queue_version(status);
862
-   song = nullptr;
863
+   current_song = nullptr;
864
 
865
    return FinishCommand();
866
 }
867
@@ -895,7 +835,7 @@
868
    while ((s = mpd_recv_song(c)) != nullptr) {
869
        int pos = mpd_song_get_pos(s);
870
 
871
-       if (pos >= 0 && (guint)pos < playlist.size()) {
872
+       if (pos >= 0 && (unsigned)pos < playlist.size()) {
873
            /* update song */
874
            playlist.Replace(pos, *s);
875
        } else {
876
@@ -914,7 +854,7 @@
877
        playlist.RemoveIndex(playlist.size() - 1);
878
    }
879
 
880
-   song = nullptr;
881
+   current_song = nullptr;
882
    playlist.version = mpd_status_get_queue_version(status);
883
 
884
    return FinishCommand();
885
ncmpc-0.30.tar.xz/src/mpdclient.hxx -> ncmpc-0.32.tar.xz/src/mpdclient.hxx Changed
240
 
1
@@ -3,25 +3,38 @@
2
 
3
 #include "config.h"
4
 #include "Queue.hxx"
5
-#include "Compiler.h"
6
+#include "gidle.hxx"
7
+#include "util/Compiler.h"
8
+#include "AsioServiceFwd.hxx"
9
+
10
+#ifdef ENABLE_ASYNC_CONNECT
11
+#include "aconnect.hxx"
12
+#endif
13
 
14
 #include <mpd/client.h>
15
 
16
+#include <boost/asio/steady_timer.hpp>
17
+
18
 #include <string>
19
 
20
 struct AsyncMpdConnect;
21
 struct MpdQueue;
22
-struct MpdIdleSource;
23
+class MpdIdleSource;
24
 class FileList;
25
 
26
-struct mpdclient {
27
+struct mpdclient final
28
+   : MpdIdleHandler
29
+#ifdef ENABLE_ASYNC_CONNECT
30
+   , AsyncMpdConnectHandler
31
+#endif
32
+{
33
 #ifdef ENABLE_ASYNC_CONNECT
34
    /**
35
     * These settings are used to connect to MPD asynchronously.
36
     */
37
    struct mpd_settings *settings;
38
 
39
-#ifndef WIN32
40
+#ifndef _WIN32
41
    /**
42
     * A second set of settings, just in case #settings did not
43
     * work.  This is only used if #settings refers to a local
44
@@ -56,13 +69,13 @@
45
    MpdIdleSource *source = nullptr;
46
 
47
    struct mpd_status *status = nullptr;
48
-   const struct mpd_song *song = nullptr;
49
+   const struct mpd_song *current_song = nullptr;
50
 
51
    /**
52
-    * The GLib source id which re-enters MPD idle mode before the
53
-    * next main loop interation.
54
+    * A timer which re-enters MPD idle mode before the next main
55
+    * loop iteration.
56
     */
57
-   unsigned enter_idle_source_id = 0;
58
+   boost::asio::steady_timer enter_idle_timer;
59
 
60
    /**
61
     * This attribute is incremented whenever the connection changes
62
@@ -79,7 +92,7 @@
63
 
64
    enum mpd_state state = MPD_STATE_UNKNOWN;
65
 
66
-#if defined(ENABLE_ASYNC_CONNECT) && !defined(WIN32)
67
+#if defined(ENABLE_ASYNC_CONNECT) && !defined(_WIN32)
68
    bool connecting2;
69
 #endif
70
 
71
@@ -99,7 +112,8 @@
72
     */
73
    bool playing_or_paused = false;
74
 
75
-   mpdclient(const char *host, unsigned port,
76
+   mpdclient(boost::asio::io_service &io_service,
77
+         const char *host, unsigned port,
78
          unsigned _timeout_ms, const char *_password);
79
 
80
    ~mpdclient() {
81
@@ -108,13 +122,30 @@
82
 #ifdef ENABLE_ASYNC_CONNECT
83
        mpd_settings_free(settings);
84
 
85
-#ifndef WIN32
86
+#ifndef _WIN32
87
        if (settings2 != nullptr)
88
            mpd_settings_free(settings2);
89
 #endif
90
 #endif
91
    }
92
 
93
+   auto &get_io_service() noexcept {
94
+       return enter_idle_timer.get_io_service();
95
+   }
96
+
97
+#ifdef ENABLE_ASYNC_CONNECT
98
+
99
+   const struct mpd_settings &GetSettings() const noexcept {
100
+#ifndef _WIN32
101
+       if (connecting2)
102
+           return *settings2;
103
+#endif
104
+
105
+       return *settings;
106
+   }
107
+
108
+#endif
109
+
110
    /**
111
     * Determine a human-readable "name" of the settings currently used to
112
     * connect to MPD.
113
@@ -142,9 +173,43 @@
114
    }
115
 
116
    gcc_pure
117
+   int GetCurrentSongId() const noexcept {
118
+       return status != nullptr
119
+           ? mpd_status_get_song_id(status)
120
+           : -1;
121
+   }
122
+
123
+   gcc_pure
124
+   int GetCurrentSongPos() const noexcept {
125
+       return status != nullptr
126
+           ? mpd_status_get_song_pos(status)
127
+           : -1;
128
+   }
129
+
130
+   /**
131
+    * Returns the song that is "current".  This can be valid even
132
+    * if MPD is not playing.
133
+    */
134
+   gcc_pure
135
    const struct mpd_song *GetCurrentSong() const {
136
-       return song != nullptr && playing_or_paused
137
-           ? song
138
+       return current_song;
139
+   }
140
+
141
+   gcc_pure
142
+   int GetPlayingSongId() const noexcept {
143
+       return playing_or_paused
144
+           ? GetCurrentSongId()
145
+           : -1;
146
+   }
147
+
148
+   /**
149
+    * Returns the song that is currently being played (or
150
+    * paused).
151
+    */
152
+   gcc_pure
153
+   const struct mpd_song *GetPlayingSong() const {
154
+       return playing_or_paused
155
+           ? GetCurrentSong()
156
            : nullptr;
157
    }
158
 
159
@@ -162,9 +227,49 @@
160
 
161
    bool Update();
162
 
163
+   bool OnConnected(struct mpd_connection *_connection) noexcept;
164
+
165
+   const struct mpd_status *ReceiveStatus() noexcept;
166
+
167
+   bool RunVolume(unsigned new_volume) noexcept;
168
+   bool RunVolumeUp() noexcept;
169
+   bool RunVolumeDown() noexcept;
170
+
171
+   bool RunClearQueue() noexcept;
172
+   bool RunAdd(const struct mpd_song &song) noexcept;
173
+   bool RunDelete(unsigned pos) noexcept;
174
+   bool RunDeleteRange(unsigned start, unsigned end) noexcept;
175
+   bool RunMove(unsigned dest, unsigned src) noexcept;
176
+
177
 private:
178
+#ifdef ENABLE_ASYNC_CONNECT
179
+   void StartConnect(const struct mpd_settings &s) noexcept;
180
+#endif
181
+
182
+   void InvokeErrorCallback() noexcept;
183
+
184
    bool UpdateQueue();
185
    bool UpdateQueueChanges();
186
+
187
+   void ClearStatus() noexcept;
188
+
189
+   void ScheduleEnterIdle() noexcept;
190
+   void CancelEnterIdle() noexcept {
191
+       enter_idle_timer.cancel();
192
+   }
193
+   void OnEnterIdleTimer(const boost::system::error_code &error) noexcept;
194
+
195
+#ifdef ENABLE_ASYNC_CONNECT
196
+   /* virtual methods from AsyncMpdConnectHandler */
197
+   void OnAsyncMpdConnect(struct mpd_connection *c) noexcept override;
198
+   void OnAsyncMpdConnectError(const char *message) noexcept override;
199
+#endif
200
+
201
+   /* virtual methods from MpdIdleHandler */
202
+   void OnIdle(unsigned events) noexcept override;
203
+   void OnIdleError(enum mpd_error error,
204
+            enum mpd_server_error server_error,
205
+            const char *message) noexcept override;
206
 };
207
 
208
 enum {
209
@@ -194,30 +299,9 @@
210
 mpdclient_cmd_clear(struct mpdclient *c);
211
 
212
 bool
213
-mpdclient_cmd_volume(struct mpdclient *c, int value);
214
-
215
-bool
216
-mpdclient_cmd_volume_up(struct mpdclient *c);
217
-
218
-bool
219
-mpdclient_cmd_volume_down(struct mpdclient *c);
220
-
221
-bool
222
 mpdclient_cmd_add_path(struct mpdclient *c, const char *path);
223
 
224
 bool
225
-mpdclient_cmd_add(struct mpdclient *c, const struct mpd_song *song);
226
-
227
-bool
228
-mpdclient_cmd_delete(struct mpdclient *c, int index);
229
-
230
-bool
231
-mpdclient_cmd_delete_range(struct mpdclient *c, unsigned start, unsigned end);
232
-
233
-bool
234
-mpdclient_cmd_move(struct mpdclient *c, unsigned dest, unsigned src);
235
-
236
-bool
237
 mpdclient_cmd_subscribe(struct mpdclient *c, const char *channel);
238
 
239
 bool
240
ncmpc-0.30.tar.xz/src/ncmpc.hxx -> ncmpc-0.32.tar.xz/src/ncmpc.hxx Changed
26
 
1
@@ -20,12 +20,13 @@
2
 #ifndef NCMPC_H
3
 #define NCMPC_H
4
 
5
-#include "command.hxx"
6
+#include "AsioServiceFwd.hxx"
7
 
8
 #ifdef HAVE_GETMOUSE
9
-#include "ncmpc_curses.h"
10
+#include <curses.h>
11
 #endif
12
 
13
+enum class Command : unsigned;
14
 struct Point;
15
 class ScreenManager;
16
 extern ScreenManager *screen;
17
@@ -37,7 +38,7 @@
18
  * @return false if the application shall quit
19
  */
20
 bool
21
-do_input_event(command_t cmd);
22
+do_input_event(boost::asio::io_service &io_service, Command cmd);
23
 
24
 #ifdef HAVE_GETMOUSE
25
 void
26
ncmpc-0.30.tar.xz/src/ncu.cxx -> ncmpc-0.32.tar.xz/src/ncu.cxx Changed
31
 
1
@@ -19,16 +19,17 @@
2
 
3
 #include "ncu.hxx"
4
 #include "config.h"
5
-#include "ncmpc_curses.h"
6
 
7
 #ifdef ENABLE_COLORS
8
-#include "colors.hxx"
9
+#include "Styles.hxx"
10
 #endif
11
 
12
 #ifdef HAVE_GETMOUSE
13
-#include "options.hxx"
14
+#include "Options.hxx"
15
 #endif
16
 
17
+#include <curses.h>
18
+
19
 static SCREEN *ncu_screen;
20
 
21
 void
22
@@ -39,7 +40,7 @@
23
 
24
    /* initialize color support */
25
 #ifdef ENABLE_COLORS
26
-   colors_start();
27
+   ApplyStyles();
28
 #endif
29
 
30
    /* tell curses not to do NL->CR/NL on output */
31
ncmpc-0.32.tar.xz/src/net/AsyncConnect.cxx Added
57
 
1
@@ -0,0 +1,55 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+   (c) 2004-2018 The Music Player Daemon Project
4
+   Project homepage: http://musicpd.org
5
+
6
+   Redistribution and use in source and binary forms, with or without
7
+   modification, are permitted provided that the following conditions
8
+   are met:
9
+
10
+   - Redistributions of source code must retain the above copyright
11
+   notice, this list of conditions and the following disclaimer.
12
+
13
+   - Redistributions in binary form must reproduce the above copyright
14
+   notice, this list of conditions and the following disclaimer in the
15
+   documentation and/or other materials provided with the distribution.
16
+
17
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+*/
29
+
30
+#include "AsyncConnect.hxx"
31
+#include "AsyncHandler.hxx"
32
+
33
+void
34
+AsyncConnect::OnConnected(const boost::system::error_code &error) noexcept
35
+{
36
+   if (error) {
37
+       if (error == boost::asio::error::operation_aborted)
38
+           /* this object has already been deleted; bail out
39
+              quickly without touching anything */
40
+           return;
41
+
42
+       socket.close();
43
+       handler.OnConnectError(error.message().c_str());
44
+       return;
45
+   }
46
+
47
+   handler.OnConnect(std::move(socket));
48
+}
49
+
50
+void
51
+AsyncConnect::Start(const boost::asio::ip::tcp::endpoint &endpoint) noexcept
52
+{
53
+   socket.async_connect(endpoint,
54
+                std::bind(&AsyncConnect::OnConnected, this,
55
+                      std::placeholders::_1));
56
+}
57
ncmpc-0.32.tar.xz/src/net/AsyncConnect.hxx Added
60
 
1
@@ -0,0 +1,58 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+   (c) 2004-2018 The Music Player Daemon Project
4
+   Project homepage: http://musicpd.org
5
+
6
+   Redistribution and use in source and binary forms, with or without
7
+   modification, are permitted provided that the following conditions
8
+   are met:
9
+
10
+   - Redistributions of source code must retain the above copyright
11
+   notice, this list of conditions and the following disclaimer.
12
+
13
+   - Redistributions in binary form must reproduce the above copyright
14
+   notice, this list of conditions and the following disclaimer in the
15
+   documentation and/or other materials provided with the distribution.
16
+
17
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+*/
29
+
30
+#ifndef NET_ASYNC_CONNECT_HXX
31
+#define NET_ASYNC_CONNECT_HXX
32
+
33
+#include "AsioServiceFwd.hxx"
34
+
35
+#include <boost/asio/ip/tcp.hpp>
36
+
37
+class AsyncConnectHandler;
38
+
39
+class AsyncConnect {
40
+   AsyncConnectHandler &handler;
41
+
42
+   boost::asio::ip::tcp::socket socket;
43
+
44
+public:
45
+   AsyncConnect(boost::asio::io_service &io_service,
46
+            AsyncConnectHandler &_handler) noexcept
47
+       :handler(_handler),
48
+        socket(io_service) {}
49
+
50
+   /**
51
+    * Create a socket and connect it to the given address.
52
+    */
53
+   void Start(const boost::asio::ip::tcp::endpoint &endpoint) noexcept;
54
+
55
+private:
56
+   void OnConnected(const boost::system::error_code &error) noexcept;
57
+};
58
+
59
+#endif
60
ncmpc-0.32.tar.xz/src/net/AsyncHandler.hxx Added
42
 
1
@@ -0,0 +1,40 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+   (c) 2004-2018 The Music Player Daemon Project
4
+   Project homepage: http://musicpd.org
5
+
6
+   Redistribution and use in source and binary forms, with or without
7
+   modification, are permitted provided that the following conditions
8
+   are met:
9
+
10
+   - Redistributions of source code must retain the above copyright
11
+   notice, this list of conditions and the following disclaimer.
12
+
13
+   - Redistributions in binary form must reproduce the above copyright
14
+   notice, this list of conditions and the following disclaimer in the
15
+   documentation and/or other materials provided with the distribution.
16
+
17
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+*/
29
+
30
+#ifndef NET_ASYNC_HANDLER_HXX
31
+#define NET_ASYNC_HANDLER_HXX
32
+
33
+#include <boost/asio/generic/stream_protocol.hpp>
34
+
35
+class AsyncConnectHandler {
36
+public:
37
+   virtual void OnConnect(boost::asio::generic::stream_protocol::socket socket) = 0;
38
+   virtual void OnConnectError(const char *message) = 0;
39
+};
40
+
41
+#endif
42
ncmpc-0.32.tar.xz/src/net/AsyncResolveConnect.cxx Added
91
 
1
@@ -0,0 +1,89 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+   (c) 2004-2018 The Music Player Daemon Project
4
+   Project homepage: http://musicpd.org
5
+
6
+   Redistribution and use in source and binary forms, with or without
7
+   modification, are permitted provided that the following conditions
8
+   are met:
9
+
10
+   - Redistributions of source code must retain the above copyright
11
+   notice, this list of conditions and the following disclaimer.
12
+
13
+   - Redistributions in binary form must reproduce the above copyright
14
+   notice, this list of conditions and the following disclaimer in the
15
+   documentation and/or other materials provided with the distribution.
16
+
17
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+*/
29
+
30
+#include "AsyncResolveConnect.hxx"
31
+#include "AsyncConnect.hxx"
32
+#include "AsyncHandler.hxx"
33
+
34
+#ifndef _WIN32
35
+#include <boost/asio/local/stream_protocol.hpp>
36
+#endif
37
+
38
+#include <string>
39
+
40
+void
41
+AsyncResolveConnect::OnResolved(const boost::system::error_code &error,
42
+               boost::asio::ip::tcp::resolver::iterator i) noexcept
43
+{
44
+   if (error) {
45
+       if (error == boost::asio::error::operation_aborted)
46
+           /* this object has already been deleted; bail
47
+              out quickly without touching anything */
48
+           return;
49
+
50
+       handler.OnConnectError(error.message().c_str());
51
+       return;
52
+   }
53
+
54
+   connect.Start(*i);
55
+}
56
+
57
+void
58
+AsyncResolveConnect::Start(const char *host, unsigned port) noexcept
59
+{
60
+#ifndef _WIN32
61
+   if (host[0] == '/' || host[0] == '@') {
62
+       std::string s(host);
63
+       if (host[0] == '@')
64
+           /* abstract socket */
65
+           s.front() = 0;
66
+
67
+       boost::asio::local::stream_protocol::endpoint ep(std::move(s));
68
+       boost::asio::local::stream_protocol::socket socket(resolver.get_io_service());
69
+
70
+       boost::system::error_code error;
71
+       socket.connect(ep, error);
72
+       if (error) {
73
+           handler.OnConnectError(error.message().c_str());
74
+           return;
75
+       }
76
+
77
+       handler.OnConnect(std::move(socket));
78
+       return;
79
+   }
80
+#endif /* _WIN32 */
81
+
82
+   char service[20];
83
+   snprintf(service, sizeof(service), "%u", port);
84
+
85
+   resolver.async_resolve({host, service},
86
+                  std::bind(&AsyncResolveConnect::OnResolved,
87
+                    this,
88
+                    std::placeholders::_1,
89
+                    std::placeholders::_2));
90
+}
91
ncmpc-0.32.tar.xz/src/net/AsyncResolveConnect.hxx Added
59
 
1
@@ -0,0 +1,57 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+   (c) 2004-2018 The Music Player Daemon Project
4
+   Project homepage: http://musicpd.org
5
+
6
+   Redistribution and use in source and binary forms, with or without
7
+   modification, are permitted provided that the following conditions
8
+   are met:
9
+
10
+   - Redistributions of source code must retain the above copyright
11
+   notice, this list of conditions and the following disclaimer.
12
+
13
+   - Redistributions in binary form must reproduce the above copyright
14
+   notice, this list of conditions and the following disclaimer in the
15
+   documentation and/or other materials provided with the distribution.
16
+
17
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
21
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
24
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
25
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
26
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+*/
29
+
30
+#ifndef NET_ASYNC_RESOLVE_CONNECT_HXX
31
+#define NET_ASYNC_RESOLVE_CONNECT_HXX
32
+
33
+#include "AsyncConnect.hxx"
34
+
35
+class AsyncResolveConnect {
36
+   AsyncConnectHandler &handler;
37
+
38
+   boost::asio::ip::tcp::resolver resolver;
39
+
40
+   AsyncConnect connect;
41
+
42
+public:
43
+   AsyncResolveConnect(boost::asio::io_service &io_service,
44
+               AsyncConnectHandler &_handler) noexcept
45
+       :handler(_handler), resolver(io_service),
46
+        connect(io_service, _handler) {}
47
+
48
+   /**
49
+    * Resolve a host name and connect to it asynchronously.
50
+    */
51
+   void Start(const char *host, unsigned port) noexcept;
52
+
53
+private:
54
+   void OnResolved(const boost::system::error_code &error,
55
+           boost::asio::ip::tcp::resolver::iterator i) noexcept;
56
+};
57
+
58
+#endif
59
ncmpc-0.30.tar.xz/src/paint.hxx -> ncmpc-0.32.tar.xz/src/paint.hxx Changed
36
 
1
@@ -20,17 +20,17 @@
2
 #ifndef NCMPC_PAINT_H
3
 #define NCMPC_PAINT_H
4
 
5
-#include "colors.hxx"
6
-#include "options.hxx"
7
+#include "Styles.hxx"
8
+#include "Options.hxx"
9
 
10
 /**
11
  * Sets the specified color, and enables "reverse" mode if selected is
12
  * true.
13
  */
14
 static inline void
15
-row_color(WINDOW *w, enum color color, bool selected)
16
+row_color(WINDOW *w, Style style, bool selected)
17
 {
18
-   colors_use(w, color);
19
+   SelectStyle(w, style);
20
 
21
    if (selected)
22
        wattron(w, A_REVERSE);
23
@@ -67,10 +67,10 @@
24
  */
25
 static inline void
26
 row_paint_text(WINDOW *w, unsigned width,
27
-          enum color color, bool selected,
28
+          Style style, bool selected,
29
           const char *text)
30
 {
31
-   row_color(w, color, selected);
32
+   row_color(w, style, selected);
33
 
34
    waddstr(w, text);
35
 
36
ncmpc-0.30.tar.xz/src/player_command.cxx -> ncmpc-0.32.tar.xz/src/player_command.cxx Changed
248
 
1
@@ -18,102 +18,31 @@
2
  */
3
 
4
 #include "player_command.hxx"
5
+#include "DelayedSeek.hxx"
6
+#include "Command.hxx"
7
 #include "mpdclient.hxx"
8
-#include "options.hxx"
9
+#include "Options.hxx"
10
 #include "i18n.h"
11
 #include "screen_client.hxx"
12
 #include "screen_status.hxx"
13
 
14
-#include <glib.h>
15
-
16
-int seek_id = -1;
17
-int seek_target_time;
18
-
19
-static guint seek_source_id;
20
-
21
-static void
22
-commit_seek(struct mpdclient &c)
23
-{
24
-   if (seek_id < 0)
25
-       return;
26
-
27
-   struct mpd_connection *connection = c.GetConnection();
28
-   if (connection == nullptr) {
29
-       seek_id = -1;
30
-       return;
31
-   }
32
-
33
-   if (c.song != nullptr && (unsigned)seek_id == mpd_song_get_id(c.song))
34
-       if (!mpd_run_seek_id(connection, seek_id, seek_target_time))
35
-           c.HandleError();
36
-
37
-   seek_id = -1;
38
-}
39
-
40
-/**
41
- * This timer is invoked after seeking when the user hasn't typed a
42
- * key for 500ms.  It is used to do the real seeking.
43
- */
44
-static gboolean
45
-seek_timer(gpointer data)
46
-{
47
-   auto &c = *(struct mpdclient *)data;
48
-
49
-   seek_source_id = 0;
50
-   commit_seek(c);
51
-   return false;
52
-}
53
-
54
-static void
55
-schedule_seek_timer(struct mpdclient &c)
56
-{
57
-   assert(seek_source_id == 0);
58
-
59
-   seek_source_id = g_timeout_add(500, seek_timer, &c);
60
-}
61
-
62
-void
63
-cancel_seek_timer()
64
-{
65
-   if (seek_source_id != 0) {
66
-       g_source_remove(seek_source_id);
67
-       seek_source_id = 0;
68
-   }
69
-}
70
-
71
-static bool
72
-setup_seek(struct mpdclient &c)
73
-{
74
-   if (!c.playing_or_paused)
75
-       return false;
76
-
77
-   if (seek_id != (int)mpd_status_get_song_id(c.status)) {
78
-       seek_id = mpd_status_get_song_id(c.status);
79
-       seek_target_time = mpd_status_get_elapsed_time(c.status);
80
-   }
81
-
82
-   schedule_seek_timer(c);
83
-
84
-   return true;
85
-}
86
-
87
 bool
88
-handle_player_command(struct mpdclient &c, command_t cmd)
89
+handle_player_command(struct mpdclient &c, DelayedSeek &seek, Command cmd)
90
 {
91
    if (!c.IsConnected() || c.status == nullptr)
92
        return false;
93
 
94
-   cancel_seek_timer();
95
+   seek.Cancel();
96
 
97
    switch(cmd) {
98
        struct mpd_connection *connection;
99
 
100
        /*
101
-   case CMD_PLAY:
102
+   case Command::PLAY:
103
        mpdclient_cmd_play(c, MPD_PLAY_AT_BEGINNING);
104
        break;
105
        */
106
-   case CMD_PAUSE:
107
+   case Command::PAUSE:
108
        connection = c.GetConnection();
109
        if (connection == nullptr)
110
            break;
111
@@ -121,7 +50,7 @@
112
        if (!mpd_run_pause(connection, c.state != MPD_STATE_PAUSE))
113
            c.HandleError();
114
        break;
115
-   case CMD_STOP:
116
+   case Command::STOP:
117
        connection = c.GetConnection();
118
        if (connection == nullptr)
119
            break;
120
@@ -129,19 +58,14 @@
121
        if (!mpd_run_stop(connection))
122
            c.HandleError();
123
        break;
124
-   case CMD_CROP:
125
+   case Command::CROP:
126
        mpdclient_cmd_crop(&c);
127
        break;
128
-   case CMD_SEEK_FORWARD:
129
-       if (!setup_seek(c))
130
-           break;
131
-
132
-       seek_target_time += options.seek_time;
133
-       if (seek_target_time > (int)mpd_status_get_total_time(c.status))
134
-           seek_target_time = mpd_status_get_total_time(c.status);
135
+   case Command::SEEK_FORWARD:
136
+       seek.Seek(options.seek_time);
137
        break;
138
 
139
-   case CMD_TRACK_NEXT:
140
+   case Command::TRACK_NEXT:
141
        connection = c.GetConnection();
142
        if (connection == nullptr)
143
            break;
144
@@ -149,16 +73,11 @@
145
        if (!mpd_run_next(connection))
146
            c.HandleError();
147
        break;
148
-   case CMD_SEEK_BACKWARD:
149
-       if (!setup_seek(c))
150
-           break;
151
-
152
-       seek_target_time -= options.seek_time;
153
-       if (seek_target_time < 0)
154
-           seek_target_time = 0;
155
+   case Command::SEEK_BACKWARD:
156
+       seek.Seek(-int(options.seek_time));
157
        break;
158
 
159
-   case CMD_TRACK_PREVIOUS:
160
+   case Command::TRACK_PREVIOUS:
161
        connection = c.GetConnection();
162
        if (connection == nullptr)
163
            break;
164
@@ -166,7 +85,7 @@
165
        if (!mpd_run_previous(connection))
166
            c.HandleError();
167
        break;
168
-   case CMD_SHUFFLE:
169
+   case Command::SHUFFLE:
170
        connection = c.GetConnection();
171
        if (connection == nullptr)
172
            break;
173
@@ -176,15 +95,11 @@
174
        else
175
            c.HandleError();
176
        break;
177
-   case CMD_CLEAR:
178
-       connection = c.GetConnection();
179
-       if (connection == nullptr)
180
-           break;
181
-
182
-       if (mpdclient_cmd_clear(&c))
183
+   case Command::CLEAR:
184
+       if (c.RunClearQueue())
185
            screen_status_message(_("Cleared queue"));
186
        break;
187
-   case CMD_REPEAT:
188
+   case Command::REPEAT:
189
        connection = c.GetConnection();
190
        if (connection == nullptr)
191
            break;
192
@@ -193,7 +108,7 @@
193
                    !mpd_status_get_repeat(c.status)))
194
            c.HandleError();
195
        break;
196
-   case CMD_RANDOM:
197
+   case Command::RANDOM:
198
        connection = c.GetConnection();
199
        if (connection == nullptr)
200
            break;
201
@@ -202,7 +117,7 @@
202
                    !mpd_status_get_random(c.status)))
203
            c.HandleError();
204
        break;
205
-   case CMD_SINGLE:
206
+   case Command::SINGLE:
207
        connection = c.GetConnection();
208
        if (connection == nullptr)
209
            break;
210
@@ -211,7 +126,7 @@
211
                    !mpd_status_get_single(c.status)))
212
            c.HandleError();
213
        break;
214
-   case CMD_CONSUME:
215
+   case Command::CONSUME:
216
        connection = c.GetConnection();
217
        if (connection == nullptr)
218
            break;
219
@@ -220,7 +135,7 @@
220
                     !mpd_status_get_consume(c.status)))
221
            c.HandleError();
222
        break;
223
-   case CMD_CROSSFADE:
224
+   case Command::CROSSFADE:
225
        connection = c.GetConnection();
226
        if (connection == nullptr)
227
            break;
228
@@ -230,14 +145,14 @@
229
                       ? 0 : options.crossfade_time))
230
            c.HandleError();
231
        break;
232
-   case CMD_DB_UPDATE:
233
+   case Command::DB_UPDATE:
234
        screen_database_update(&c, nullptr);
235
        break;
236
-   case CMD_VOLUME_UP:
237
-       mpdclient_cmd_volume_up(&c);
238
+   case Command::VOLUME_UP:
239
+       c.RunVolumeUp();
240
        break;
241
-   case CMD_VOLUME_DOWN:
242
-       mpdclient_cmd_volume_down(&c);
243
+   case Command::VOLUME_DOWN:
244
+       c.RunVolumeDown();
245
        break;
246
 
247
    default:
248
ncmpc-0.30.tar.xz/src/player_command.hxx -> ncmpc-0.32.tar.xz/src/player_command.hxx Changed
26
 
1
@@ -20,21 +20,11 @@
2
 #ifndef NCMPC_PLAYER_COMMAND_H
3
 #define NCMPC_PLAYER_COMMAND_H
4
 
5
-#include "command.hxx"
6
-
7
+enum class Command : unsigned;
8
 struct mpdclient;
9
-
10
-extern int seek_id;
11
-extern int seek_target_time;
12
-
13
-/**
14
- * Call this before exiting; it will unschedule the timer for delayed
15
- * seeking.
16
- */
17
-void
18
-cancel_seek_timer();
19
+class DelayedSeek;
20
 
21
 bool
22
-handle_player_command(struct mpdclient &c, command_t cmd);
23
+handle_player_command(struct mpdclient &c, DelayedSeek &seek, Command cmd);
24
 
25
 #endif
26
ncmpc-0.30.tar.xz/src/plugin.cxx -> ncmpc-0.32.tar.xz/src/plugin.cxx Changed
474
 
1
@@ -18,18 +18,24 @@
2
  */
3
 
4
 #include "plugin.hxx"
5
-#include "Compiler.h"
6
+#include "io/Path.hxx"
7
+#include "util/Compiler.h"
8
+#include "util/ScopeExit.hxx"
9
+#include "util/UriUtil.hxx"
10
 
11
-#include <glib.h>
12
+#include <boost/asio/steady_timer.hpp>
13
+#include <boost/asio/posix/stream_descriptor.hpp>
14
 
15
 #include <algorithm>
16
+#include <memory>
17
 
18
 #include <assert.h>
19
 #include <stdlib.h>
20
 #include <unistd.h>
21
+#include <dirent.h>
22
 #include <string.h>
23
+#include <signal.h>
24
 #include <sys/stat.h>
25
-#include <sys/signal.h>
26
 #include <sys/wait.h>
27
 
28
 struct PluginCycle;
29
@@ -37,25 +43,37 @@
30
 struct PluginPipe {
31
    PluginCycle *cycle;
32
 
33
-   /** the pipe to the plugin process, or -1 if none is currently
34
-       open */
35
-   int fd = -1;
36
-   /** the GLib IO watch of #fd */
37
-   guint event_id;
38
+   /** the pipe to the plugin process */
39
+   boost::asio::posix::stream_descriptor fd;
40
+
41
    /** the output of the current plugin */
42
    std::string data;
43
 
44
-   ~PluginPipe() {
45
+   std::array<char, 256> buffer;
46
+
47
+   PluginPipe(boost::asio::io_service &io_service) noexcept
48
+       :fd(io_service) {}
49
+
50
+   ~PluginPipe() noexcept {
51
        Close();
52
    }
53
 
54
-   void Close() {
55
-       if (fd < 0)
56
+   void AsyncRead() noexcept {
57
+       fd.async_read_some(boost::asio::buffer(buffer),
58
+                  std::bind(&PluginPipe::OnRead, this,
59
+                        std::placeholders::_1,
60
+                        std::placeholders::_2));
61
+   }
62
+
63
+   void OnRead(const boost::system::error_code &error,
64
+           std::size_t bytes_transferred) noexcept;
65
+
66
+   void Close() noexcept {
67
+       if (!fd.is_open())
68
            return;
69
 
70
-       g_source_remove(event_id);
71
-       close(fd);
72
-       fd = -1;
73
+       fd.cancel();
74
+       fd.close();
75
    }
76
 };
77
 
78
@@ -64,7 +82,7 @@
79
    PluginList *list;
80
 
81
    /** arguments passed to execv() */
82
-   char **argv;
83
+   std::unique_ptr<char *[]> argv;
84
 
85
    /** caller defined callback function */
86
    plugin_callback_t callback;
87
@@ -73,7 +91,7 @@
88
 
89
    /** the index of the next plugin which is going to be
90
        invoked */
91
-   guint next_plugin = 0;
92
+   unsigned next_plugin = 0;
93
 
94
    /** the pid of the plugin process, or -1 if none is currently
95
        running */
96
@@ -87,115 +105,124 @@
97
    /** list of all error messages from failed plugins */
98
    std::string all_errors;
99
 
100
-   PluginCycle(PluginList &_list, char **_argv,
101
-           plugin_callback_t _callback, void *_callback_data)
102
-       :list(&_list), argv(_argv),
103
-        callback(_callback), callback_data(_callback_data),
104
-        next_plugin(0) {}
105
+   boost::asio::steady_timer delayed_fail_timer;
106
 
107
-   ~PluginCycle() {
108
-       /* free argument list */
109
-       for (unsigned i = 0; i == 0 || argv[i] != nullptr; ++i)
110
-           g_free(argv[i]);
111
-       g_free(argv);
112
+   PluginCycle(boost::asio::io_service &io_service,
113
+           PluginList &_list, std::unique_ptr<char *[]> &&_argv,
114
+           plugin_callback_t _callback, void *_callback_data) noexcept
115
+       :list(&_list), argv(std::move(_argv)),
116
+        callback(_callback), callback_data(_callback_data),
117
+        pipe_stdout(io_service), pipe_stderr(io_service),
118
+        delayed_fail_timer(io_service) {}
119
+
120
+   void TryNextPlugin() noexcept;
121
+
122
+   void ScheduleDelayedFail() noexcept {
123
+       boost::system::error_code error;
124
+       delayed_fail_timer.expires_from_now(std::chrono::seconds(0),
125
+                           error);
126
+       delayed_fail_timer.async_wait(std::bind(&PluginCycle::OnDelayedFail,
127
+                           this,
128
+                           std::placeholders::_1));
129
    }
130
+
131
+   void OnEof() noexcept;
132
+
133
+private:
134
+   int LaunchPlugin(const char *plugin_path) noexcept;
135
+
136
+   void OnDelayedFail(const boost::system::error_code &error) noexcept;
137
 };
138
 
139
 static bool
140
-register_plugin(PluginList *list, char *path)
141
+register_plugin(PluginList *list, std::string &&path) noexcept
142
 {
143
    struct stat st;
144
-   if (stat(path, &st) < 0)
145
+   if (stat(path.c_str(), &st) < 0)
146
        return false;
147
 
148
-   list->plugins.emplace_back(path);
149
+   list->plugins.emplace_back(std::move(path));
150
    return true;
151
 }
152
 
153
+static constexpr bool
154
+ShallSkipDirectoryEntry(const char *name) noexcept
155
+{
156
+   return name[0] == '.' && (name[1] == 0 || (name[1] == '.' && name[2] == 0));
157
+}
158
+
159
 bool
160
-plugin_list_load_directory(PluginList *list, const char *path)
161
+plugin_list_load_directory(PluginList *list, const char *path) noexcept
162
 {
163
-   GDir *dir = g_dir_open(path, 0, nullptr);
164
+   DIR *dir = opendir(path);
165
    if (dir == nullptr)
166
        return false;
167
 
168
-   const char *name;
169
-   while ((name = g_dir_read_name(dir)) != nullptr) {
170
-       char *plugin = g_build_filename(path, name, nullptr);
171
-       register_plugin(list, plugin);
172
-       g_free(plugin);
173
-   }
174
+   AtScopeExit(dir) { closedir(dir); };
175
 
176
-   g_dir_close(dir);
177
+   while (const auto *e = readdir(dir)) {
178
+       const char *name = e->d_name;
179
+       if (!ShallSkipDirectoryEntry(name))
180
+           register_plugin(list, BuildPath(path, name));
181
+   }
182
 
183
    std::sort(list->plugins.begin(), list->plugins.end());
184
 
185
    return true;
186
 }
187
 
188
-static void
189
-next_plugin(PluginCycle *cycle);
190
-
191
-static void
192
-plugin_eof(PluginCycle *cycle, PluginPipe *p)
193
+void
194
+PluginCycle::OnEof() noexcept
195
 {
196
-   close(p->fd);
197
-   p->fd = -1;
198
-
199
    /* Only if both pipes are have EOF status we are done */
200
-   if (cycle->pipe_stdout.fd != -1 || cycle->pipe_stderr.fd != -1)
201
+   if (pipe_stdout.fd.is_open() || pipe_stderr.fd.is_open())
202
        return;
203
 
204
-   int status, ret = waitpid(cycle->pid, &status, 0);
205
-   cycle->pid = -1;
206
+   int status, ret = waitpid(pid, &status, 0);
207
+   pid = -1;
208
 
209
    if (ret < 0 || !WIFEXITED(status) || WEXITSTATUS(status) != 0) {
210
        /* If we encountered an error other than service unavailable
211
         * (69), log it for later. If all plugins fail, we may get
212
         * some hints for debugging.*/
213
-       if (!cycle->pipe_stderr.data.empty() &&
214
+       if (!pipe_stderr.data.empty() &&
215
            WEXITSTATUS(status) != 69) {
216
-           cycle->all_errors += "*** ";
217
-           cycle->all_errors += cycle->argv[0];
218
-           cycle->all_errors += " ***\n\n";
219
-           cycle->all_errors += cycle->pipe_stderr.data;
220
-           cycle->all_errors += "\n";
221
+           all_errors += "*** ";
222
+           all_errors += argv[0];
223
+           all_errors += " ***\n\n";
224
+           all_errors += pipe_stderr.data;
225
+           all_errors += "\n";
226
        }
227
 
228
        /* the plugin has failed */
229
-       cycle->pipe_stdout.data.clear();
230
-       cycle->pipe_stderr.data.clear();
231
+       pipe_stdout.data.clear();
232
+       pipe_stderr.data.clear();
233
 
234
-       next_plugin(cycle);
235
+       TryNextPlugin();
236
    } else {
237
        /* success: invoke the callback */
238
-       cycle->callback(std::move(cycle->pipe_stdout.data), true,
239
-               cycle->argv[0], cycle->callback_data);
240
+       callback(std::move(pipe_stdout.data), true,
241
+            argv[0], callback_data);
242
    }
243
 }
244
 
245
-static gboolean
246
-plugin_data(gcc_unused GIOChannel *source,
247
-       gcc_unused GIOCondition condition, gpointer data)
248
+void
249
+PluginPipe::OnRead(const boost::system::error_code &error,
250
+          std::size_t bytes_transferred) noexcept
251
 {
252
-   auto *p = (PluginPipe *)data;
253
-   assert(p->fd >= 0);
254
-
255
-   PluginCycle *cycle = p->cycle;
256
-   assert(cycle != nullptr);
257
-   assert(cycle->pid > 0);
258
-
259
-   char buffer[256];
260
-   ssize_t nbytes = condition & G_IO_IN
261
-       ? read(p->fd, buffer, sizeof(buffer))
262
-       : 0;
263
-   if (nbytes <= 0) {
264
-       plugin_eof(cycle, p);
265
-       return false;
266
+   if (error) {
267
+       if (error == boost::asio::error::operation_aborted)
268
+           /* this object has already been deleted; bail out
269
+              quickly without touching anything */
270
+           return;
271
+
272
+       fd.close();
273
+       cycle->OnEof();
274
+       return;
275
    }
276
 
277
-   p->data.append(buffer, nbytes);
278
-   return true;
279
+   data.append(&buffer.front(), bytes_transferred);
280
+   AsyncRead();
281
 }
282
 
283
 /**
284
@@ -205,47 +232,40 @@
285
  * Instead, install a timer which calls the plugin callback in the
286
  * moment after.
287
  */
288
-static gboolean
289
-plugin_delayed_fail(gpointer data)
290
+void
291
+PluginCycle::OnDelayedFail(const boost::system::error_code &error) noexcept
292
 {
293
-   auto *cycle = (PluginCycle *)data;
294
-
295
-   assert(cycle != nullptr);
296
-   assert(cycle->pipe_stdout.fd < 0);
297
-   assert(cycle->pipe_stderr.fd < 0);
298
-   assert(cycle->pid < 0);
299
+   if (error)
300
+       return;
301
 
302
-   cycle->callback(std::move(cycle->all_errors), false, nullptr,
303
-           cycle->callback_data);
304
+   assert(!pipe_stdout.fd.is_open());
305
+   assert(!pipe_stderr.fd.is_open());
306
+   assert(pid < 0);
307
 
308
-   return false;
309
+   callback(std::move(all_errors), false, nullptr,
310
+        callback_data);
311
 }
312
 
313
 static void
314
-plugin_fd_add(PluginCycle *cycle, PluginPipe *p, int fd)
315
+plugin_fd_add(PluginCycle *cycle, PluginPipe *p, int fd) noexcept
316
 {
317
    p->cycle = cycle;
318
-   p->fd = fd;
319
-   GIOChannel *channel = g_io_channel_unix_new(fd);
320
-   p->event_id = g_io_add_watch(channel, GIOCondition(G_IO_IN|G_IO_HUP),
321
-                    plugin_data, p);
322
-   g_io_channel_unref(channel);
323
+   p->fd.assign(fd);
324
+   p->AsyncRead();
325
 }
326
 
327
-static int
328
-start_plugin(PluginCycle *cycle, const char *plugin_path)
329
+int
330
+PluginCycle::LaunchPlugin(const char *plugin_path) noexcept
331
 {
332
-   assert(cycle != nullptr);
333
-   assert(cycle->pid < 0);
334
-   assert(cycle->pipe_stdout.fd < 0);
335
-   assert(cycle->pipe_stderr.fd < 0);
336
-   assert(cycle->pipe_stdout.data.empty());
337
-   assert(cycle->pipe_stderr.data.empty());
338
+   assert(pid < 0);
339
+   assert(!pipe_stdout.fd.is_open());
340
+   assert(!pipe_stderr.fd.is_open());
341
+   assert(pipe_stdout.data.empty());
342
+   assert(pipe_stderr.data.empty());
343
 
344
    /* set new program name, but free the one from the previous
345
       plugin */
346
-   g_free(cycle->argv[0]);
347
-   cycle->argv[0] = g_path_get_basename(plugin_path);
348
+   argv[0] = const_cast<char *>(GetUriFilename(plugin_path));
349
 
350
    int fds_stdout[2];
351
    if (pipe(fds_stdout) < 0)
352
@@ -258,7 +278,7 @@
353
        return -1;
354
    }
355
 
356
-   pid_t pid = fork();
357
+   pid = fork();
358
 
359
    if (pid < 0) {
360
        close(fds_stdout[0]);
361
@@ -278,84 +298,85 @@
362
        close(0);
363
        /* XXX close other fds? */
364
 
365
-       execv(plugin_path, cycle->argv);
366
+       execv(plugin_path, argv.get());
367
        _exit(1);
368
    }
369
 
370
    close(fds_stdout[1]);
371
    close(fds_stderr[1]);
372
 
373
-   cycle->pid = pid;
374
-
375
    /* XXX CLOEXEC? */
376
 
377
-   plugin_fd_add(cycle, &cycle->pipe_stdout, fds_stdout[0]);
378
-   plugin_fd_add(cycle, &cycle->pipe_stderr, fds_stderr[0]);
379
+   plugin_fd_add(this, &pipe_stdout, fds_stdout[0]);
380
+   plugin_fd_add(this, &pipe_stderr, fds_stderr[0]);
381
 
382
    return 0;
383
 }
384
 
385
-static void
386
-next_plugin(PluginCycle *cycle)
387
+void
388
+PluginCycle::TryNextPlugin() noexcept
389
 {
390
-   assert(cycle->pid < 0);
391
-   assert(cycle->pipe_stdout.fd < 0);
392
-   assert(cycle->pipe_stderr.fd < 0);
393
-   assert(cycle->pipe_stdout.data.empty());
394
-   assert(cycle->pipe_stderr.data.empty());
395
+   assert(pid < 0);
396
+   assert(!pipe_stdout.fd.is_open());
397
+   assert(!pipe_stderr.fd.is_open());
398
+   assert(pipe_stdout.data.empty());
399
+   assert(pipe_stderr.data.empty());
400
 
401
-   if (cycle->next_plugin >= cycle->list->plugins.size()) {
402
+   if (next_plugin >= list->plugins.size()) {
403
        /* no plugins left */
404
-       g_idle_add(plugin_delayed_fail, cycle);
405
+       ScheduleDelayedFail();
406
        return;
407
    }
408
 
409
    const char *plugin_path = (const char *)
410
-       cycle->list->plugins[cycle->next_plugin++].c_str();
411
-   if (start_plugin(cycle, plugin_path) < 0) {
412
+       list->plugins[next_plugin++].c_str();
413
+   if (LaunchPlugin(plugin_path) < 0) {
414
        /* system error */
415
-       g_idle_add(plugin_delayed_fail, cycle);
416
+       ScheduleDelayedFail();
417
        return;
418
    }
419
 }
420
 
421
-static char **
422
-make_argv(const char*const* args)
423
+static auto
424
+make_argv(const char*const* args) noexcept
425
 {
426
    unsigned num = 0;
427
    while (args[num] != nullptr)
428
        ++num;
429
    num += 2;
430
 
431
-   char **ret = g_new(char *, num);
432
+   std::unique_ptr<char *[]> result(new char *[num]);
433
+
434
+   char **ret = result.get();
435
 
436
    /* reserve space for the program name */
437
    *ret++ = nullptr;
438
 
439
    while (*args != nullptr)
440
-       *ret++ = g_strdup(*args++);
441
+       *ret++ = const_cast<char *>(*args++);
442
 
443
    /* end of argument vector */
444
    *ret++ = nullptr;
445
 
446
-   return ret - num;
447
+   return result;
448
 }
449
 
450
 PluginCycle *
451
-plugin_run(PluginList *list, const char *const*args,
452
-      plugin_callback_t callback, void *callback_data)
453
+plugin_run(boost::asio::io_service &io_service,
454
+      PluginList *list, const char *const*args,
455
+      plugin_callback_t callback, void *callback_data) noexcept
456
 {
457
    assert(args != nullptr);
458
 
459
-   auto *cycle = new PluginCycle(*list, make_argv(args),
460
+   auto *cycle = new PluginCycle(io_service, *list, make_argv(args),
461
                      callback, callback_data);
462
-   next_plugin(cycle);
463
+   cycle->TryNextPlugin();
464
 
465
    return cycle;
466
 }
467
 
468
 void
469
-plugin_stop(PluginCycle *cycle)
470
+plugin_stop(PluginCycle *cycle) noexcept
471
 {
472
    if (cycle->pid > 0) {
473
        /* kill the plugin process */
474
ncmpc-0.30.tar.xz/src/plugin.hxx -> ncmpc-0.32.tar.xz/src/plugin.hxx Changed
47
 
1
@@ -20,6 +20,8 @@
2
 #ifndef PLUGIN_H
3
 #define PLUGIN_H
4
 
5
+#include "AsioServiceFwd.hxx"
6
+
7
 #include <vector>
8
 #include <string>
9
 
10
@@ -55,7 +57,7 @@
11
  * Load all plugins (executables) in a directory.
12
  */
13
 bool
14
-plugin_list_load_directory(PluginList *list, const char *path);
15
+plugin_list_load_directory(PluginList *list, const char *path) noexcept;
16
 
17
 /**
18
  * Run plugins in this list, until one returns success (or until the
19
@@ -63,15 +65,16 @@
20
  *
21
  * @param list the plugin list
22
  * @param args nullptr terminated command line arguments passed to the
23
- * plugin programs
24
+ * plugin programs; they must remain valid while the plugin runs
25
  * @param callback the callback function which will be called when a
26
  * result is available
27
  * @param callback_data caller defined pointer which is passed to the
28
  * callback function
29
  */
30
 PluginCycle *
31
-plugin_run(PluginList *list, const char *const*args,
32
-      plugin_callback_t callback, void *callback_data);
33
+plugin_run(boost::asio::io_service &io_service,
34
+      PluginList *list, const char *const*args,
35
+      plugin_callback_t callback, void *callback_data) noexcept;
36
 
37
 /**
38
  * Stops the plugin cycle and frees resources.  This can be called to
39
@@ -79,6 +82,6 @@
40
  * invoked.
41
  */
42
 void
43
-plugin_stop(PluginCycle *invocation);
44
+plugin_stop(PluginCycle *invocation) noexcept;
45
 
46
 #endif
47
ncmpc-0.30.tar.xz/src/save_playlist.cxx -> ncmpc-0.32.tar.xz/src/save_playlist.cxx Changed
20
 
1
@@ -27,7 +27,7 @@
2
 #include "wreadln.hxx"
3
 #include "Completion.hxx"
4
 #include "screen_utils.hxx"
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
 #include <mpd/client.h>
9
 
10
@@ -68,7 +68,8 @@
11
 #endif
12
 
13
 int
14
-playlist_save(struct mpdclient *c, char *name, char *defaultname)
15
+playlist_save(struct mpdclient *c, const char *name,
16
+         const char *defaultname) noexcept
17
 {
18
    std::string filename;
19
 
20
ncmpc-0.30.tar.xz/src/save_playlist.hxx -> ncmpc-0.32.tar.xz/src/save_playlist.hxx Changed
10
 
1
@@ -23,6 +23,7 @@
2
 struct mpdclient;
3
 
4
 int
5
-playlist_save(struct mpdclient *c, char *name, char *defaultname);
6
+playlist_save(struct mpdclient *c, const char *name,
7
+         const char *defaultname) noexcept;
8
 
9
 #endif
10
ncmpc-0.30.tar.xz/src/screen.cxx -> ncmpc-0.32.tar.xz/src/screen.cxx Changed
215
 
1
@@ -18,38 +18,30 @@
2
  */
3
 
4
 #include "screen.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen_list.hxx"
8
 #include "screen_status.hxx"
9
 #include "Page.hxx"
10
+#include "Command.hxx"
11
 #include "config.h"
12
 #include "i18n.h"
13
 #include "charset.hxx"
14
 #include "mpdclient.hxx"
15
-#include "options.hxx"
16
+#include "Options.hxx"
17
+#include "DelayedSeek.hxx"
18
 #include "player_command.hxx"
19
-#include "HelpPage.hxx"
20
-#include "QueuePage.hxx"
21
-#include "FileBrowserPage.hxx"
22
-#include "screen_artist.hxx"
23
-#include "SearchPage.hxx"
24
 #include "SongPage.hxx"
25
-#include "screen_keydef.hxx"
26
 #include "LyricsPage.hxx"
27
-#include "OutputsPage.hxx"
28
-#include "ChatPage.hxx"
29
 
30
 #include <mpd/client.h>
31
 
32
-#include <glib.h>
33
-
34
 #include <stdlib.h>
35
 #include <unistd.h>
36
 #include <string.h>
37
 #include <time.h>
38
 
39
 ScreenManager::PageMap::iterator
40
-ScreenManager::MakePage(const struct screen_functions &sf)
41
+ScreenManager::MakePage(const PageMeta &sf)
42
 {
43
    auto i = pages.find(&sf);
44
    if (i != pages.end())
45
@@ -63,7 +55,7 @@
46
 }
47
 
48
 void
49
-ScreenManager::Switch(const struct screen_functions &sf, struct mpdclient &c)
50
+ScreenManager::Switch(const PageMeta &sf, struct mpdclient &c)
51
 {
52
    if (&sf == current_page->first)
53
        return;
54
@@ -133,14 +125,14 @@
55
    else if (next>=max)
56
        next = 0;
57
 
58
-   const struct screen_functions *sf =
59
+   const PageMeta *sf =
60
        screen_lookup_name(options.screen_list[next].c_str());
61
    if (sf != nullptr)
62
        Switch(*sf, c);
63
 }
64
 
65
 void
66
-ScreenManager::Update(struct mpdclient &c)
67
+ScreenManager::Update(struct mpdclient &c, const DelayedSeek &seek) noexcept
68
 {
69
    const unsigned events = c.events;
70
 
71
@@ -215,8 +207,8 @@
72
    unsigned elapsed;
73
    if (c.status == nullptr)
74
        elapsed = 0;
75
-   else if (seek_id >= 0 && seek_id == mpd_status_get_song_id(c.status))
76
-       elapsed = seek_target_time;
77
+   else if (seek.IsSeeking(mpd_status_get_song_id(c.status)))
78
+       elapsed = seek.GetTime();
79
    else
80
        elapsed = mpd_status_get_elapsed_time(c.status);
81
 
82
@@ -226,7 +218,7 @@
83
 
84
    progress_bar.Set(elapsed, duration);
85
 
86
-   status_bar.Update(c.status, c.song);
87
+   status_bar.Update(c.status, c.GetCurrentSong(), seek);
88
 
89
    for (auto &i : pages)
90
        i.second->AddPendingEvents(events);
91
@@ -238,90 +230,43 @@
92
 }
93
 
94
 void
95
-ScreenManager::OnCommand(struct mpdclient &c, command_t cmd)
96
+ScreenManager::OnCommand(struct mpdclient &c, DelayedSeek &seek, Command cmd)
97
 {
98
-#ifndef NCMPC_MINI
99
-   if (welcome_source_id != 0) {
100
-       g_source_remove(welcome_source_id);
101
-       welcome_source_id = 0;
102
-   }
103
-#endif
104
-
105
    if (current_page->second->OnCommand(c, cmd))
106
        return;
107
 
108
-   if (handle_player_command(c, cmd))
109
+   if (handle_player_command(c, seek, cmd))
110
+       return;
111
+
112
+   const auto *new_page = PageByCommand(cmd);
113
+   if (new_page != nullptr) {
114
+       Switch(*new_page, c);
115
        return;
116
+   }
117
 
118
    switch(cmd) {
119
-   case CMD_TOGGLE_FIND_WRAP:
120
+   case Command::TOGGLE_FIND_WRAP:
121
        options.find_wrap = !options.find_wrap;
122
        screen_status_message(options.find_wrap ?
123
                      _("Find mode: Wrapped") :
124
                      _("Find mode: Normal"));
125
        break;
126
-   case CMD_TOGGLE_AUTOCENTER:
127
+   case Command::TOGGLE_AUTOCENTER:
128
        options.auto_center = !options.auto_center;
129
        screen_status_message(options.auto_center ?
130
                      _("Auto center mode: On") :
131
                      _("Auto center mode: Off"));
132
        break;
133
-   case CMD_SCREEN_UPDATE:
134
+   case Command::SCREEN_UPDATE:
135
        current_page->second->SetDirty();
136
        break;
137
-   case CMD_SCREEN_PREVIOUS:
138
+   case Command::SCREEN_PREVIOUS:
139
        NextMode(c, -1);
140
        break;
141
-   case CMD_SCREEN_NEXT:
142
+   case Command::SCREEN_NEXT:
143
        NextMode(c, 1);
144
        break;
145
-   case CMD_SCREEN_PLAY:
146
-       Switch(screen_queue, c);
147
-       break;
148
-   case CMD_SCREEN_FILE:
149
-       Switch(screen_browse, c);
150
-       break;
151
-#ifdef ENABLE_HELP_SCREEN
152
-   case CMD_SCREEN_HELP:
153
-       Switch(screen_help, c);
154
-       break;
155
-#endif
156
-#ifdef ENABLE_SEARCH_SCREEN
157
-   case CMD_SCREEN_SEARCH:
158
-       Switch(screen_search, c);
159
-       break;
160
-#endif
161
-#ifdef ENABLE_ARTIST_SCREEN
162
-   case CMD_SCREEN_ARTIST:
163
-       Switch(screen_artist, c);
164
-       break;
165
-#endif
166
-#ifdef ENABLE_SONG_SCREEN
167
-   case CMD_SCREEN_SONG:
168
-       Switch(screen_song, c);
169
-       break;
170
-#endif
171
-#ifdef ENABLE_KEYDEF_SCREEN
172
-   case CMD_SCREEN_KEYDEF:
173
-       Switch(screen_keydef, c);
174
-       break;
175
-#endif
176
-#ifdef ENABLE_LYRICS_SCREEN
177
-   case CMD_SCREEN_LYRICS:
178
-       Switch(screen_lyrics, c);
179
-       break;
180
-#endif
181
-#ifdef ENABLE_OUTPUTS_SCREEN
182
-   case CMD_SCREEN_OUTPUTS:
183
-       Switch(screen_outputs, c);
184
-       break;
185
-#endif
186
-#ifdef ENABLE_CHAT_SCREEN
187
-   case CMD_SCREEN_CHAT:
188
-       Switch(screen_chat, c);
189
-       break;
190
-#endif
191
-   case CMD_SCREEN_SWAP:
192
+   case Command::SCREEN_SWAP:
193
        Swap(c, nullptr);
194
        break;
195
 
196
@@ -333,7 +278,8 @@
197
 #ifdef HAVE_GETMOUSE
198
 
199
 bool
200
-ScreenManager::OnMouse(struct mpdclient &c, Point p, mmask_t bstate)
201
+ScreenManager::OnMouse(struct mpdclient &c, DelayedSeek &seek,
202
+              Point p, mmask_t bstate)
203
 {
204
    if (current_page->second->OnMouse(c, p - GetMainPosition(),
205
                      bstate))
206
@@ -341,7 +287,7 @@
207
 
208
    /* if button 2 was pressed switch screen */
209
    if (bstate & BUTTON2_CLICKED) {
210
-       OnCommand(c, CMD_SCREEN_NEXT);
211
+       OnCommand(c, seek, Command::SCREEN_NEXT);
212
        return true;
213
    }
214
 
215
ncmpc-0.30.tar.xz/src/screen.hxx -> ncmpc-0.32.tar.xz/src/screen.hxx Changed
120
 
1
@@ -21,14 +21,16 @@
2
 #define SCREEN_H
3
 
4
 #include "config.h"
5
-#include "command.hxx"
6
 #include "Window.hxx"
7
 #include "TitleBar.hxx"
8
 #include "ProgressBar.hxx"
9
 #include "StatusBar.hxx"
10
 #include "History.hxx"
11
 #include "Point.hxx"
12
-#include "ncmpc_curses.h"
13
+#include "util/Compiler.h"
14
+#include "AsioServiceFwd.hxx"
15
+
16
+#include <curses.h>
17
 
18
 #include <mpd/client.h>
19
 
20
@@ -36,11 +38,15 @@
21
 #include <string>
22
 #include <map>
23
 
24
+enum class Command : unsigned;
25
 struct mpdclient;
26
-struct screen_functions;
27
+struct PageMeta;
28
 class Page;
29
+class DelayedSeek;
30
 
31
 class ScreenManager {
32
+   boost::asio::io_service &io_service;
33
+
34
    struct Layout {
35
        Size size;
36
 
37
@@ -82,12 +88,12 @@
38
    StatusBar status_bar;
39
 
40
 private:
41
-   using PageMap = std::map<const struct screen_functions *,
42
+   using PageMap = std::map<const PageMeta *,
43
                 std::unique_ptr<Page>>;
44
    PageMap pages;
45
    PageMap::iterator current_page = pages.begin();
46
 
47
-   const struct screen_functions *mode_fn_prev;
48
+   const PageMeta *mode_fn_prev;
49
 
50
    char *buf;
51
    size_t buf_size;
52
@@ -96,17 +102,13 @@
53
    std::string findbuf;
54
    History find_history;
55
 
56
-#ifndef NCMPC_MINI
57
-   /**
58
-    * Non-zero when the welcome message is currently being
59
-    * displayed.  The associated timer will disable it.
60
-    */
61
-   unsigned welcome_source_id;
62
-#endif
63
-
64
-   ScreenManager();
65
+   explicit ScreenManager(boost::asio::io_service &io_service);
66
    ~ScreenManager();
67
 
68
+   auto &get_io_service() const {
69
+       return io_service;
70
+   }
71
+
72
    void Init(struct mpdclient *c);
73
    void Exit();
74
 
75
@@ -114,7 +116,11 @@
76
        return {0, (int)title_bar.GetHeight()};
77
    }
78
 
79
-   PageMap::iterator MakePage(const struct screen_functions &sf);
80
+   const PageMeta &GetCurrentPageMeta() const {
81
+       return *current_page->first;
82
+   }
83
+
84
+   PageMap::iterator MakePage(const PageMeta &sf);
85
 
86
    void OnResize();
87
 
88
@@ -123,26 +129,23 @@
89
        return &page == current_page->second.get();
90
    }
91
 
92
-   void Switch(const struct screen_functions &sf, struct mpdclient &c);
93
+   void Switch(const PageMeta &sf, struct mpdclient &c);
94
    void Swap(struct mpdclient &c, const struct mpd_song *song);
95
 
96
 
97
    void PaintTopWindow();
98
    void Paint(bool main_dirty);
99
 
100
-   void Update(struct mpdclient &c);
101
-   void OnCommand(struct mpdclient &c, command_t cmd);
102
+   void Update(struct mpdclient &c, const DelayedSeek &seek) noexcept;
103
+   void OnCommand(struct mpdclient &c, DelayedSeek &seek, Command cmd);
104
 
105
 #ifdef HAVE_GETMOUSE
106
-   bool OnMouse(struct mpdclient &c, Point p, mmask_t bstate);
107
+   bool OnMouse(struct mpdclient &c, DelayedSeek &seek,
108
+            Point p, mmask_t bstate);
109
 #endif
110
 
111
 private:
112
    void NextMode(struct mpdclient &c, int offset);
113
-
114
-#ifndef NCMPC_MINI
115
-   bool OnWelcomeTimer();
116
-#endif
117
 };
118
 
119
 #endif
120
ncmpc-0.30.tar.xz/src/screen_artist.cxx -> ncmpc-0.32.tar.xz/src/screen_artist.cxx Changed
204
 
1
@@ -20,17 +20,18 @@
2
 #include "screen_artist.hxx"
3
 #include "ArtistListPage.hxx"
4
 #include "AlbumListPage.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen_status.hxx"
8
 #include "screen_find.hxx"
9
 #include "FileListPage.hxx"
10
+#include "Command.hxx"
11
 #include "screen.hxx"
12
 #include "ProxyPage.hxx"
13
 #include "i18n.h"
14
 #include "charset.hxx"
15
 #include "mpdclient.hxx"
16
 #include "filelist.hxx"
17
-#include "options.hxx"
18
+#include "Options.hxx"
19
 #include "util/NulledString.hxx"
20
 
21
 #include <vector>
22
@@ -41,6 +42,8 @@
23
 #include <string.h>
24
 
25
 class SongListPage final : public FileListPage {
26
+   Page *const parent;
27
+
28
    std::string artist;
29
 
30
    /**
31
@@ -51,9 +54,11 @@
32
    std::string album;
33
 
34
 public:
35
-   SongListPage(ScreenManager &_screen, WINDOW *_w, Size size)
36
+   SongListPage(ScreenManager &_screen, Page *_parent,
37
+            WINDOW *_w, Size size) noexcept
38
        :FileListPage(_screen, _w, size,
39
-                 options.list_format.c_str()) {}
40
+                 options.list_format.c_str()),
41
+        parent(_parent) {}
42
 
43
    template<typename A>
44
    void SetArtist(A &&_artist) {
45
@@ -78,13 +83,13 @@
46
    void LoadSongList(struct mpdclient &c);
47
 
48
    /* virtual methods from class Page */
49
-   void Update(struct mpdclient &c, unsigned events) override;
50
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
51
-   const char *GetTitle(char *s, size_t size) const override;
52
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
53
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
54
+   const char *GetTitle(char *s, size_t size) const noexcept override;
55
 };
56
 
57
 void
58
-SongListPage::Update(struct mpdclient &c, unsigned events)
59
+SongListPage::Update(struct mpdclient &c, unsigned events) noexcept
60
 {
61
    if (events & MPD_IDLE_DATABASE) {
62
        LoadSongList(c);
63
@@ -101,8 +106,8 @@
64
              Size size)
65
        :ProxyPage(_w),
66
         artist_list_page(_screen, _w, size),
67
-        album_list_page(_screen, _w, size),
68
-        song_list_page(_screen, _w, size) {}
69
+        album_list_page(_screen, this, _w, size),
70
+        song_list_page(_screen, this, _w, size) {}
71
 
72
 private:
73
    void OpenArtistList(struct mpdclient &c);
74
@@ -112,9 +117,9 @@
75
 
76
 public:
77
    /* virtual methods from class Page */
78
-   void OnOpen(struct mpdclient &c) override;
79
-   void Update(struct mpdclient &c, unsigned events) override;
80
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
81
+   void OnOpen(struct mpdclient &c) noexcept override;
82
+   void Update(struct mpdclient &c, unsigned events) noexcept override;
83
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
84
 };
85
 
86
 void
87
@@ -169,14 +174,14 @@
88
    SetCurrentPage(c, &song_list_page);
89
 }
90
 
91
-static Page *
92
+static std::unique_ptr<Page>
93
 screen_artist_init(ScreenManager &_screen, WINDOW *w, Size size)
94
 {
95
-   return new ArtistBrowserPage(_screen, w, size);
96
+   return std::make_unique<ArtistBrowserPage>(_screen, w, size);
97
 }
98
 
99
 const char *
100
-SongListPage::GetTitle(char *str, size_t size) const
101
+SongListPage::GetTitle(char *str, size_t size) const noexcept
102
 {
103
    const Utf8ToLocale artist_locale(artist.c_str());
104
 
105
@@ -186,7 +191,8 @@
106
             artist_locale.c_str());
107
    else if (!album.empty()) {
108
        const Utf8ToLocale album_locale(album.c_str());
109
-       snprintf(str, size, _("Album: %s - %s"),
110
+       snprintf(str, size, "%s: %s - %s",
111
+            _("Album"),
112
             artist_locale.c_str(), album_locale.c_str());
113
    } else
114
        snprintf(str, size,
115
@@ -197,20 +203,18 @@
116
 }
117
 
118
 bool
119
-SongListPage::OnCommand(struct mpdclient &c, command_t cmd)
120
+SongListPage::OnCommand(struct mpdclient &c, Command cmd)
121
 {
122
    switch(cmd) {
123
-   case CMD_PLAY:
124
-       if (lw.selected == 0) {
125
+   case Command::PLAY:
126
+       if (lw.selected == 0 && parent != nullptr)
127
            /* handle ".." */
128
-           screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY);
129
-           return true;
130
-       }
131
+           return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY);
132
 
133
        break;
134
 
135
        /* continue and update... */
136
-   case CMD_SCREEN_UPDATE:
137
+   case Command::SCREEN_UPDATE:
138
        LoadSongList(c);
139
        return false;
140
 
141
@@ -222,7 +226,7 @@
142
 }
143
 
144
 void
145
-ArtistBrowserPage::OnOpen(struct mpdclient &c)
146
+ArtistBrowserPage::OnOpen(struct mpdclient &c) noexcept
147
 {
148
    ProxyPage::OnOpen(c);
149
 
150
@@ -231,7 +235,7 @@
151
 }
152
 
153
 void
154
-ArtistBrowserPage::Update(struct mpdclient &c, unsigned events)
155
+ArtistBrowserPage::Update(struct mpdclient &c, unsigned events) noexcept
156
 {
157
    artist_list_page.AddPendingEvents(events);
158
    album_list_page.AddPendingEvents(events);
159
@@ -241,13 +245,13 @@
160
 }
161
 
162
 bool
163
-ArtistBrowserPage::OnCommand(struct mpdclient &c, command_t cmd)
164
+ArtistBrowserPage::OnCommand(struct mpdclient &c, Command cmd)
165
 {
166
    if (ProxyPage::OnCommand(c, cmd))
167
        return true;
168
 
169
    switch (cmd) {
170
-   case CMD_PLAY:
171
+   case Command::PLAY:
172
        if (GetCurrentPage() == &artist_list_page) {
173
            const char *artist = artist_list_page.GetSelectedValue();
174
            if (artist != nullptr) {
175
@@ -266,7 +270,7 @@
176
 
177
        break;
178
 
179
-   case CMD_GO_ROOT_DIRECTORY:
180
+   case Command::GO_ROOT_DIRECTORY:
181
        if (GetCurrentPage() != &artist_list_page) {
182
            OpenArtistList(c);
183
            return true;
184
@@ -274,7 +278,7 @@
185
 
186
        break;
187
 
188
-   case CMD_GO_PARENT_DIRECTORY:
189
+   case Command::GO_PARENT_DIRECTORY:
190
        if (GetCurrentPage() == &album_list_page) {
191
            OpenArtistList(c);
192
            return true;
193
@@ -292,7 +296,9 @@
194
    return false;
195
 }
196
 
197
-const struct screen_functions screen_artist = {
198
+const PageMeta screen_artist = {
199
    "artist",
200
+   N_("Artist"),
201
+   Command::SCREEN_ARTIST,
202
    screen_artist_init,
203
 };
204
ncmpc-0.30.tar.xz/src/screen_artist.hxx -> ncmpc-0.32.tar.xz/src/screen_artist.hxx Changed
11
 
1
@@ -23,7 +23,8 @@
2
 #include "config.h"
3
 
4
 #ifdef ENABLE_ARTIST_SCREEN
5
-extern const struct screen_functions screen_artist;
6
+struct PageMeta;
7
+extern const PageMeta screen_artist;
8
 #endif
9
 
10
 #endif
11
ncmpc-0.30.tar.xz/src/screen_client.cxx -> ncmpc-0.32.tar.xz/src/screen_client.cxx Changed
19
 
1
@@ -23,8 +23,6 @@
2
 #include "i18n.h"
3
 #include "charset.hxx"
4
 
5
-#include <glib.h>
6
-
7
 void
8
 screen_database_update(struct mpdclient *c, const char *path)
9
 {
10
@@ -40,7 +38,7 @@
11
        if (mpd_connection_get_error(connection) == MPD_ERROR_SERVER &&
12
            mpd_connection_get_server_error(connection) == MPD_SERVER_ERROR_UPDATE_ALREADY &&
13
            mpd_connection_clear_error(connection))
14
-           screen_status_message(_("Database update running..."));
15
+           screen_status_message(_("Database update running"));
16
        else
17
            c->HandleError();
18
        return;
19
ncmpc-0.30.tar.xz/src/screen_find.cxx -> ncmpc-0.32.tar.xz/src/screen_find.cxx Changed
133
 
1
@@ -24,9 +24,10 @@
2
 #include "ListWindow.hxx"
3
 #include "keyboard.hxx"
4
 #include "i18n.h"
5
-#include "options.hxx"
6
+#include "Options.hxx"
7
+#include "util/LocaleString.hxx"
8
 
9
-#include <glib.h>
10
+#include <ctype.h>
11
 
12
 #define FIND_PROMPT  _("Find")
13
 #define RFIND_PROMPT _("Find backward")
14
@@ -34,25 +35,26 @@
15
 
16
 /* query user for a string and find it in a list window */
17
 bool
18
-screen_find(ScreenManager &screen, ListWindow *lw, command_t findcmd,
19
-       const ListText &text)
20
+screen_find(ScreenManager &screen, ListWindow &lw, Command findcmd,
21
+       const ListText &text) noexcept
22
 {
23
    bool found;
24
    const char *prompt = FIND_PROMPT;
25
 
26
    const bool reversed =
27
-       findcmd == CMD_LIST_RFIND || findcmd == CMD_LIST_RFIND_NEXT;
28
+       findcmd == Command::LIST_RFIND ||
29
+       findcmd == Command::LIST_RFIND_NEXT;
30
    if (reversed)
31
        prompt = RFIND_PROMPT;
32
 
33
    switch (findcmd) {
34
-   case CMD_LIST_FIND:
35
-   case CMD_LIST_RFIND:
36
+   case Command::LIST_FIND:
37
+   case Command::LIST_RFIND:
38
        screen.findbuf.clear();
39
        /* fall through */
40
 
41
-   case CMD_LIST_FIND_NEXT:
42
-   case CMD_LIST_RFIND_NEXT:
43
+   case Command::LIST_FIND_NEXT:
44
+   case Command::LIST_RFIND_NEXT:
45
        if (screen.findbuf.empty()) {
46
            char *value = options.find_show_last_pattern
47
                ? (char *) -1 : nullptr;
48
@@ -66,14 +68,14 @@
49
            return true;
50
 
51
        found = reversed
52
-           ? lw->ReverseFind(text,
53
-                     screen.findbuf.c_str(),
54
-                     options.find_wrap,
55
-                     options.bell_on_wrap)
56
-           : lw->Find(text,
57
-                  screen.findbuf.c_str(),
58
-                  options.find_wrap,
59
-                  options.bell_on_wrap);
60
+           ? lw.ReverseFind(text,
61
+                    screen.findbuf.c_str(),
62
+                    options.find_wrap,
63
+                    options.bell_on_wrap)
64
+           : lw.Find(text,
65
+                 screen.findbuf.c_str(),
66
+                 options.find_wrap,
67
+                 options.bell_on_wrap);
68
        if (!found) {
69
            screen_status_printf(_("Unable to find \'%s\'"),
70
                         screen.findbuf.c_str());
71
@@ -89,15 +91,14 @@
72
 /* query user for a string and jump to the entry
73
  * which begins with this string while the users types */
74
 void
75
-screen_jump(ScreenManager &screen, ListWindow *lw,
76
+screen_jump(ScreenManager &screen, ListWindow &lw,
77
        const ListText &text,
78
-       const ListRenderer &renderer)
79
+       const ListRenderer &renderer) noexcept
80
 {
81
    constexpr size_t WRLN_MAX_LINE_SIZE = 1024;
82
    int key = 65;
83
 
84
    char buffer[WRLN_MAX_LINE_SIZE];
85
-   std::fill_n(buffer, WRLN_MAX_LINE_SIZE, 0);
86
 
87
    /* In screen.findbuf is the whole string which is displayed in the status_window
88
     * and search_str is the string the user entered (without the prompt) */
89
@@ -108,31 +109,29 @@
90
        key = screen_getch(buffer);
91
        /* if backspace or delete was pressed, process instead of ending loop */
92
        if (key == KEY_BACKSPACE || key == KEY_DC) {
93
-           int i;
94
-           if (search_str <= g_utf8_find_prev_char(buffer, iter))
95
-               iter = g_utf8_find_prev_char(buffer, iter);
96
-           for (i = 0; *(iter + i) != '\0'; i++)
97
-               *(iter + i) = '\0';
98
+           const char *prev = PrevCharMB(buffer, iter);
99
+           if (search_str <= prev)
100
+               iter = const_cast<char *>(prev);
101
+           *iter = '\0';
102
            continue;
103
        }
104
        /* if a control key was pressed, end loop */
105
-       else if (g_ascii_iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) {
106
+       else if (iscntrl(key) || key == KEY_NPAGE || key == KEY_PPAGE) {
107
            break;
108
        }
109
-       else {
110
-           *iter = key;
111
-           if (iter < buffer + WRLN_MAX_LINE_SIZE - 3)
112
-               ++iter;
113
+       else if (iter < buffer + WRLN_MAX_LINE_SIZE - 3) {
114
+           *iter++ = key;
115
+           *iter = '\0';
116
        }
117
-       lw->Jump(text, search_str);
118
+       lw.Jump(text, search_str);
119
 
120
        /* repaint the list_window */
121
-       lw->Paint(renderer);
122
-       wrefresh(lw->w);
123
+       lw.Paint(renderer);
124
+       wrefresh(lw.w);
125
    }
126
 
127
    screen.findbuf = search_str;
128
 
129
    /* ncmpc should get the command */
130
-   keyboard_unread(key);
131
+   keyboard_unread(screen.get_io_service(), key);
132
 }
133
ncmpc-0.30.tar.xz/src/screen_find.hxx -> ncmpc-0.32.tar.xz/src/screen_find.hxx Changed
31
 
1
@@ -20,8 +20,7 @@
2
 #ifndef NCMPC_SCREEN_FIND_H
3
 #define NCMPC_SCREEN_FIND_H
4
 
5
-#include "command.hxx"
6
-
7
+enum class Command : unsigned;
8
 class ScreenManager;
9
 class ListWindow;
10
 class ListRenderer;
11
@@ -37,14 +36,14 @@
12
  * @return true if the command has been handled, false if not
13
  */
14
 bool
15
-screen_find(ScreenManager &screen, ListWindow *lw,
16
-       command_t findcmd,
17
-       const ListText &text);
18
+screen_find(ScreenManager &screen, ListWindow &lw,
19
+       Command findcmd,
20
+       const ListText &text) noexcept;
21
 
22
 /* query user for a string and jump to the entry
23
  * which begins with this string while the users types */
24
 void
25
-screen_jump(ScreenManager &screen, ListWindow *lw,
26
-       const ListText &text, const ListRenderer &renderer);
27
+screen_jump(ScreenManager &screen, ListWindow &lw,
28
+       const ListText &text, const ListRenderer &renderer) noexcept;
29
 
30
 #endif
31
ncmpc-0.30.tar.xz/src/screen_init.cxx -> ncmpc-0.32.tar.xz/src/screen_init.cxx Changed
115
 
1
@@ -23,47 +23,46 @@
2
 #include "QueuePage.hxx"
3
 #include "config.h"
4
 #include "i18n.h"
5
-#include "options.hxx"
6
-#include "colors.hxx"
7
-#include "Event.hxx"
8
+#include "Options.hxx"
9
+#include "Styles.hxx"
10
 
11
 #include <stdlib.h>
12
 
13
-#ifndef NCMPC_MINI
14
-/** welcome message time [s] */
15
-static constexpr std::chrono::seconds SCREEN_WELCOME_TIME(10);
16
-#endif
17
-
18
 /* minimum window size */
19
 static const unsigned SCREEN_MIN_COLS = 14;
20
 static const unsigned SCREEN_MIN_ROWS = 5;
21
 
22
-ScreenManager::ScreenManager()
23
-   :layout({std::max<unsigned>(COLS, SCREEN_MIN_COLS),
24
+ScreenManager::ScreenManager(boost::asio::io_service &_io_service)
25
+   :io_service(_io_service),
26
+    layout({std::max<unsigned>(COLS, SCREEN_MIN_COLS),
27
         std::max<unsigned>(LINES, SCREEN_MIN_ROWS)}),
28
     title_bar({layout.title_x, layout.title_y}, layout.size.width),
29
     main_window({layout.main_x, layout.main_y}, layout.GetMainSize()),
30
     progress_bar({layout.progress_x, layout.GetProgressY()}, layout.size.width),
31
-    status_bar({layout.status_x, layout.GetStatusY()}, layout.size.width),
32
+    status_bar(io_service,
33
+           {layout.status_x, layout.GetStatusY()}, layout.size.width),
34
     mode_fn_prev(&screen_queue)
35
 {
36
    buf_size = layout.size.width;
37
-   buf = (char *)g_malloc(buf_size);
38
+   buf = new char[buf_size];
39
 
40
    if (!options.hardware_cursor)
41
        leaveok(main_window.w, true);
42
 
43
    keypad(main_window.w, true);
44
+
45
+#ifdef ENABLE_COLORS
46
+   if (options.enable_colors) {
47
+       /* set background attributes */
48
+       wbkgd(stdscr, COLOR_PAIR(Style::LIST));
49
+       wbkgd(main_window.w, COLOR_PAIR(Style::LIST));
50
+   }
51
+#endif
52
 }
53
 
54
 ScreenManager::~ScreenManager()
55
 {
56
-   g_free(buf);
57
-
58
-#ifndef NCMPC_MINI
59
-   if (welcome_source_id != 0)
60
-       g_source_remove(welcome_source_id);
61
-#endif
62
+   delete[] buf;
63
 }
64
 
65
 void
66
@@ -100,8 +99,8 @@
67
                layout.size.width);
68
 
69
    buf_size = layout.size.width;
70
-   g_free(buf);
71
-   buf = (char *)g_malloc(buf_size);
72
+   delete[] buf;
73
+   buf = new char[buf_size];
74
 
75
    /* resize all screens */
76
    current_page->second->Resize(main_window.size);
77
@@ -113,37 +112,9 @@
78
    Paint(true);
79
 }
80
 
81
-#ifndef NCMPC_MINI
82
-inline bool
83
-ScreenManager::OnWelcomeTimer()
84
-{
85
-   welcome_source_id = 0;
86
-
87
-   PaintTopWindow();
88
-   doupdate();
89
-
90
-   return false;
91
-}
92
-#endif
93
-
94
 void
95
 ScreenManager::Init(struct mpdclient *c)
96
 {
97
-#ifndef NCMPC_MINI
98
-   if (options.welcome_screen_list)
99
-       welcome_source_id = ScheduleTimeout<ScreenManager,
100
-                           &ScreenManager::OnWelcomeTimer>(SCREEN_WELCOME_TIME,
101
-                                           *this);
102
-#endif
103
-
104
-#ifdef ENABLE_COLORS
105
-   if (options.enable_colors) {
106
-       /* set background attributes */
107
-       wbkgd(stdscr, COLOR_PAIR(COLOR_LIST));
108
-       wbkgd(main_window.w,     COLOR_PAIR(COLOR_LIST));
109
-   }
110
-#endif
111
-
112
    current_page = MakePage(screen_queue);
113
    current_page->second->OnOpen(*c);
114
 }
115
ncmpc-0.30.tar.xz/src/screen_keydef.cxx -> ncmpc-0.32.tar.xz/src/screen_keydef.cxx Changed
650
 
1
@@ -18,7 +18,7 @@
2
  */
3
 
4
 #include "screen_keydef.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "ListPage.hxx"
8
 #include "ListText.hxx"
9
 #include "TextListRenderer.hxx"
10
@@ -26,27 +26,31 @@
11
 #include "screen_status.hxx"
12
 #include "screen_find.hxx"
13
 #include "screen.hxx"
14
+#include "KeyName.hxx"
15
 #include "i18n.h"
16
 #include "conf.hxx"
17
+#include "Bindings.hxx"
18
+#include "GlobalBindings.hxx"
19
 #include "screen_utils.hxx"
20
-#include "options.hxx"
21
-#include "Compiler.h"
22
+#include "Options.hxx"
23
+#include "util/Compiler.h"
24
 
25
 #include <algorithm>
26
 
27
 #include <assert.h>
28
 #include <errno.h>
29
 #include <string.h>
30
-#include <glib.h>
31
 
32
 class CommandKeysPage final : public ListPage, ListText {
33
    ScreenManager &screen;
34
+   Page *const parent;
35
 
36
-   command_definition_t *cmds;
37
+   const KeyBindings *bindings;
38
+   KeyBinding *binding;
39
 
40
    /**
41
     * The command being edited, represented by a array subscript
42
-    * to @cmds, or -1, if no command is being edited
43
+    * to #bindings, or -1, if no command is being edited
44
     */
45
    int subcmd = -1;
46
 
47
@@ -54,11 +58,13 @@
48
    unsigned subcmd_n_keys = 0;
49
 
50
 public:
51
-   CommandKeysPage(ScreenManager &_screen, WINDOW *w, Size size)
52
-       :ListPage(w, size), screen(_screen) {}
53
+   CommandKeysPage(ScreenManager &_screen, Page *_parent,
54
+           WINDOW *w, Size size) noexcept
55
+       :ListPage(w, size), screen(_screen), parent(_parent) {}
56
 
57
-   void SetCommand(command_definition_t *_cmds, unsigned _cmd) {
58
-       cmds = _cmds;
59
+   void SetCommand(KeyBindings *_bindings, unsigned _cmd) {
60
+       bindings = _bindings;
61
+       binding = &_bindings->key_bindings[_cmd];
62
        subcmd = _cmd;
63
        lw.Reset();
64
        check_subcmd_length();
65
@@ -102,64 +108,56 @@
66
    /**
67
     * Delete a key from a given command's definition.
68
     *
69
-    * @param cmd_index the command
70
     * @param key_index the key (see below)
71
     */
72
-   void DeleteKey(int cmd_index, int key_index);
73
+   void DeleteKey(int key_index);
74
 
75
    /**
76
     * Assigns a new key to a key slot.
77
     */
78
-   void OverwriteKey(int cmd_index, int key_index);
79
+   void OverwriteKey(int key_index);
80
 
81
    /**
82
     * Assign a new key to a new slot.
83
     */
84
-   void AddKey(int cmd_index);
85
+   void AddKey();
86
 
87
 public:
88
    /* virtual methods from class Page */
89
-   void OnOpen(struct mpdclient &c) override;
90
-   void Paint() const override;
91
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
92
-   const char *GetTitle(char *s, size_t size) const override;
93
+   void OnOpen(struct mpdclient &c) noexcept override;
94
+   void Paint() const noexcept override;
95
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
96
+   const char *GetTitle(char *s, size_t size) const noexcept override;
97
 
98
 private:
99
    /* virtual methods from class ListText */
100
    const char *GetListItemText(char *buffer, size_t size,
101
-                   unsigned i) const override;
102
+                   unsigned i) const noexcept override;
103
 };
104
 
105
 /* TODO: rename to check_n_keys / subcmd_count_keys? */
106
 void
107
 CommandKeysPage::check_subcmd_length()
108
 {
109
-   unsigned i;
110
-
111
-   /* this loops counts the continous valid keys at the start of the the keys
112
-      array, so make sure you don't have gaps */
113
-   for (i = 0; i < MAX_COMMAND_KEYS; i++)
114
-       if (cmds[subcmd].keys[i] == 0)
115
-           break;
116
-   subcmd_n_keys = i;
117
+   subcmd_n_keys = binding->GetKeyCount();
118
 
119
    lw.SetLength(subcmd_length());
120
 }
121
 
122
 void
123
-CommandKeysPage::DeleteKey(int cmd_index, int key_index)
124
+CommandKeysPage::DeleteKey(int key_index)
125
 {
126
    /* shift the keys to close the gap that appeared */
127
    int i = key_index+1;
128
-   while (i < MAX_COMMAND_KEYS && cmds[cmd_index].keys[i])
129
-       cmds[cmd_index].keys[key_index++] = cmds[cmd_index].keys[i++];
130
+   while (i < MAX_COMMAND_KEYS && binding->keys[i])
131
+       binding->keys[key_index++] = binding->keys[i++];
132
 
133
    /* As key_index now holds the index of the last key slot that contained
134
       a key, we use it to empty this slot, because this key has been copied
135
       to the previous slot in the loop above */
136
-   cmds[cmd_index].keys[key_index] = 0;
137
+   binding->keys[key_index] = 0;
138
 
139
-   cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED;
140
+   binding->modified = true;
141
    check_subcmd_length();
142
 
143
    screen_status_message(_("Deleted"));
144
@@ -168,17 +166,18 @@
145
    SetDirty();
146
 
147
    /* update key conflict flags */
148
-   check_key_bindings(cmds, nullptr, 0);
149
+   bindings->Check(nullptr, 0);
150
 }
151
 
152
 void
153
-CommandKeysPage::OverwriteKey(int cmd_index, int key_index)
154
+CommandKeysPage::OverwriteKey(int key_index)
155
 {
156
    assert(key_index < MAX_COMMAND_KEYS);
157
 
158
    char prompt[256];
159
    snprintf(prompt, sizeof(prompt),
160
-        _("Enter new key for %s: "), cmds[cmd_index].name);
161
+        _("Enter new key for %s: "),
162
+        get_key_command_name(Command(subcmd)));
163
    const int key = screen_getch(prompt);
164
 
165
    if (key == ERR) {
166
@@ -191,38 +190,39 @@
167
        return;
168
    }
169
 
170
-   const command_t cmd = find_key_command(key, cmds);
171
-   if (cmd != CMD_NONE) {
172
+   const Command cmd = bindings->FindKey(key);
173
+   if (cmd != Command::NONE) {
174
        screen_status_printf(_("Error: key %s is already used for %s"),
175
                     key2str(key), get_key_command_name(cmd));
176
        screen_bell();
177
        return;
178
    }
179
 
180
-   cmds[cmd_index].keys[key_index] = key;
181
-   cmds[cmd_index].flags |= COMMAND_KEY_MODIFIED;
182
+   binding->keys[key_index] = key;
183
+   binding->modified = true;
184
 
185
    screen_status_printf(_("Assigned %s to %s"),
186
-                key2str(key),cmds[cmd_index].name);
187
+                key2str(key),
188
+                get_key_command_name(Command(subcmd)));
189
    check_subcmd_length();
190
 
191
    /* repaint */
192
    SetDirty();
193
 
194
    /* update key conflict flags */
195
-   check_key_bindings(cmds, nullptr, 0);
196
+   bindings->Check(nullptr, 0);
197
 }
198
 
199
 void
200
-CommandKeysPage::AddKey(int cmd_index)
201
+CommandKeysPage::AddKey()
202
 {
203
    if (subcmd_n_keys < MAX_COMMAND_KEYS)
204
-       OverwriteKey(cmd_index, subcmd_n_keys);
205
+       OverwriteKey(subcmd_n_keys);
206
 }
207
 
208
 const char *
209
 CommandKeysPage::GetListItemText(char *buffer, size_t size,
210
-                unsigned idx) const
211
+                unsigned idx) const noexcept
212
 {
213
    if (idx == subcmd_item_up())
214
        return "[..]";
215
@@ -236,64 +236,66 @@
216
 
217
    snprintf(buffer, size,
218
         "%d. %-20s   (%d) ", idx,
219
-        key2str(cmds[subcmd].keys[subcmd_item_to_key_id(idx)]),
220
-        cmds[subcmd].keys[subcmd_item_to_key_id(idx)]);
221
+        key2str(binding->keys[subcmd_item_to_key_id(idx)]),
222
+        binding->keys[subcmd_item_to_key_id(idx)]);
223
    return buffer;
224
 }
225
 
226
 void
227
-CommandKeysPage::OnOpen(gcc_unused struct mpdclient &c)
228
+CommandKeysPage::OnOpen(gcc_unused struct mpdclient &c) noexcept
229
 {
230
    // TODO
231
 }
232
 
233
 const char *
234
-CommandKeysPage::GetTitle(char *str, size_t size) const
235
+CommandKeysPage::GetTitle(char *str, size_t size) const noexcept
236
 {
237
-   snprintf(str, size, _("Edit keys for %s"), cmds[subcmd].name);
238
+   snprintf(str, size, _("Edit keys for %s"),
239
+        get_key_command_name(Command(subcmd)));
240
    return str;
241
 }
242
 
243
 void
244
-CommandKeysPage::Paint() const
245
+CommandKeysPage::Paint() const noexcept
246
 {
247
    lw.Paint(TextListRenderer(*this));
248
 }
249
 
250
 bool
251
-CommandKeysPage::OnCommand(struct mpdclient &c, command_t cmd)
252
+CommandKeysPage::OnCommand(struct mpdclient &c, Command cmd)
253
 {
254
-   if (cmd == CMD_LIST_RANGE_SELECT)
255
+   if (cmd == Command::LIST_RANGE_SELECT)
256
        return false;
257
 
258
    if (ListPage::OnCommand(c, cmd))
259
        return true;
260
 
261
    switch(cmd) {
262
-   case CMD_PLAY:
263
+   case Command::PLAY:
264
        if (lw.selected == subcmd_item_up()) {
265
-           screen.OnCommand(c, CMD_GO_PARENT_DIRECTORY);
266
+           if (parent != nullptr)
267
+               return parent->OnCommand(c, Command::GO_PARENT_DIRECTORY);
268
        } else if (lw.selected == subcmd_item_add()) {
269
-           AddKey(subcmd);
270
+           AddKey();
271
        } else {
272
            /* just to be sure ;-) */
273
            assert(subcmd_item_is_key(lw.selected));
274
-           OverwriteKey(subcmd, subcmd_item_to_key_id(lw.selected));
275
+           OverwriteKey(subcmd_item_to_key_id(lw.selected));
276
        }
277
        return true;
278
-   case CMD_DELETE:
279
+   case Command::DELETE:
280
        if (subcmd_item_is_key(lw.selected))
281
-           DeleteKey(subcmd, subcmd_item_to_key_id(lw.selected));
282
+           DeleteKey(subcmd_item_to_key_id(lw.selected));
283
 
284
        return true;
285
-   case CMD_ADD:
286
-       AddKey(subcmd);
287
+   case Command::ADD:
288
+       AddKey();
289
        return true;
290
-   case CMD_LIST_FIND:
291
-   case CMD_LIST_RFIND:
292
-   case CMD_LIST_FIND_NEXT:
293
-   case CMD_LIST_RFIND_NEXT:
294
-       screen_find(screen, &lw, cmd, *this);
295
+   case Command::LIST_FIND:
296
+   case Command::LIST_RFIND:
297
+   case Command::LIST_FIND_NEXT:
298
+   case Command::LIST_RFIND_NEXT:
299
+       screen_find(screen, lw, cmd, *this);
300
        SetDirty();
301
        return true;
302
 
303
@@ -309,21 +311,21 @@
304
 class CommandListPage final : public ListPage, ListText {
305
    ScreenManager &screen;
306
 
307
-   command_definition_t *cmds = nullptr;
308
+   KeyBindings *bindings;
309
 
310
    /** the number of commands */
311
-   unsigned command_n_commands = 0;
312
+   static constexpr size_t command_n_commands = size_t(Command::NONE);
313
 
314
 public:
315
    CommandListPage(ScreenManager &_screen, WINDOW *w, Size size)
316
        :ListPage(w, size), screen(_screen) {}
317
 
318
    ~CommandListPage() override {
319
-       delete[] cmds;
320
+       delete bindings;
321
    }
322
 
323
-   command_definition_t *GetCommands() {
324
-       return cmds;
325
+   KeyBindings *GetBindings() {
326
+       return bindings;
327
    }
328
 
329
    int GetSelectedCommand() const {
330
@@ -337,14 +339,12 @@
331
     * the position of the "apply" item. It's the same as command_n_commands,
332
     * because array subscripts start at 0, while numbers of items start at 1.
333
     */
334
-   gcc_pure
335
-   unsigned command_item_apply() const {
336
+   static constexpr unsigned command_item_apply() {
337
        return command_n_commands;
338
    }
339
 
340
    /** the position of the "apply and save" item */
341
-   gcc_pure
342
-   unsigned command_item_save() const {
343
+   static constexpr unsigned command_item_save() {
344
        return command_item_apply() + 1;
345
    }
346
 
347
@@ -367,33 +367,32 @@
348
 
349
 public:
350
    /* virtual methods from class Page */
351
-   void OnOpen(struct mpdclient &c) override;
352
-   void Paint() const override;
353
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
354
-   const char *GetTitle(char *s, size_t size) const override;
355
+   void OnOpen(struct mpdclient &c) noexcept override;
356
+   void Paint() const noexcept override;
357
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
358
+   const char *GetTitle(char *s, size_t size) const noexcept override;
359
 
360
 private:
361
    /* virtual methods from class ListText */
362
    const char *GetListItemText(char *buffer, size_t size,
363
-                   unsigned i) const override;
364
+                   unsigned i) const noexcept override;
365
 };
366
 
367
 bool
368
 CommandListPage::IsModified() const
369
 {
370
-   command_definition_t *orginal_cmds = get_command_definitions();
371
-   size_t size = command_n_commands * sizeof(command_definition_t);
372
+   const auto &orginal_bindings = GetGlobalKeyBindings();
373
+   constexpr size_t size = sizeof(orginal_bindings);
374
 
375
-   return memcmp(orginal_cmds, cmds, size) != 0;
376
+   return memcmp(&orginal_bindings, &bindings, size) != 0;
377
 }
378
 
379
 void
380
 CommandListPage::Apply()
381
 {
382
    if (IsModified()) {
383
-       command_definition_t *orginal_cmds = get_command_definitions();
384
-
385
-       std::copy_n(cmds, command_n_commands, orginal_cmds);
386
+       auto &orginal_bindings = GetGlobalKeyBindings();
387
+       orginal_bindings = *bindings;
388
        screen_status_message(_("You have new key bindings"));
389
    } else
390
        screen_status_message(_("Keybindings unchanged."));
391
@@ -402,46 +401,44 @@
392
 void
393
 CommandListPage::Save()
394
 {
395
-   char *allocated = nullptr;
396
-   const char *filename;
397
+   std::string filename;
398
    if (options.key_file.empty()) {
399
-       if (!check_user_conf_dir()) {
400
-           screen_status_printf(_("Error: Unable to create directory ~/.ncmpc - %s"),
401
-                        strerror(errno));
402
+       filename = MakeKeysPath();
403
+       if (filename.empty()) {
404
+           screen_status_message(_("Unable to write configuration"));
405
            screen_bell();
406
            return;
407
        }
408
-
409
-       filename = allocated = build_user_key_binding_filename();
410
    } else
411
-       filename = options.key_file.c_str();
412
+       filename = options.key_file;
413
 
414
-   FILE *f = fopen(filename, "w");
415
+   FILE *f = fopen(filename.c_str(), "w");
416
    if (f == nullptr) {
417
-       screen_status_printf(_("Error: %s - %s"), filename, strerror(errno));
418
+       screen_status_printf("%s: %s - %s", _("Error"),
419
+                    filename.c_str(), strerror(errno));
420
        screen_bell();
421
-       g_free(allocated);
422
        return;
423
    }
424
 
425
-   if (write_key_bindings(f, KEYDEF_WRITE_HEADER))
426
-       screen_status_printf(_("Wrote %s"), filename);
427
+   if (GetGlobalKeyBindings().WriteToFile(f, KEYDEF_WRITE_HEADER))
428
+       screen_status_printf(_("Wrote %s"), filename.c_str());
429
    else
430
-       screen_status_printf(_("Error: %s - %s"), filename, strerror(errno));
431
+       screen_status_printf("%s: %s - %s", _("Error"),
432
+                    filename.c_str(), strerror(errno));
433
 
434
-   g_free(allocated);
435
    fclose(f);
436
 }
437
 
438
 const char *
439
-CommandListPage::GetListItemText(char *buffer, size_t size, unsigned idx) const
440
+CommandListPage::GetListItemText(char *buffer, size_t size,
441
+                unsigned idx) const noexcept
442
 {
443
    if (idx == command_item_apply())
444
        return _("===> Apply key bindings ");
445
    if (idx == command_item_save())
446
        return _("===> Apply & Save key bindings  ");
447
 
448
-   assert(idx < (unsigned) command_n_commands);
449
+   assert(idx < command_n_commands);
450
 
451
    /*
452
     * Format the lines in two aligned columnes for the key name and
453
@@ -450,59 +447,52 @@
454
     *  this-command - do this
455
     *  that-one     - do that
456
     */
457
-   size_t len = strlen(cmds[idx].name);
458
-   strncpy(buffer, cmds[idx].name, size);
459
+   const char *name = get_key_command_name(Command(idx));
460
+   size_t len = strlen(name);
461
+   strncpy(buffer, name, size);
462
 
463
-   if (len < get_cmds_max_name_width(cmds))
464
-       memset(buffer + len, ' ', get_cmds_max_name_width(cmds) - len);
465
+   if (len < get_cmds_max_name_width())
466
+       memset(buffer + len, ' ', get_cmds_max_name_width() - len);
467
 
468
-   snprintf(buffer + get_cmds_max_name_width(cmds),
469
-        size - get_cmds_max_name_width(cmds),
470
-        " - %s", _(cmds[idx].description));
471
+   snprintf(buffer + get_cmds_max_name_width(),
472
+        size - get_cmds_max_name_width(),
473
+        " - %s", gettext(get_command_definitions()[idx].description));
474
 
475
    return buffer;
476
 }
477
 
478
 void
479
-CommandListPage::OnOpen(gcc_unused struct mpdclient &c)
480
+CommandListPage::OnOpen(gcc_unused struct mpdclient &c) noexcept
481
 {
482
-   if (cmds == nullptr) {
483
-       command_definition_t *current_cmds = get_command_definitions();
484
-       command_n_commands = 0;
485
-       while (current_cmds[command_n_commands].name)
486
-           command_n_commands++;
487
-
488
-       /* +1 for the terminator element */
489
-       cmds = new command_definition_t[command_n_commands + 1];
490
-       std::copy_n(current_cmds, command_n_commands + 1, cmds);
491
-   }
492
+   if (bindings == nullptr)
493
+       bindings = new KeyBindings(GetGlobalKeyBindings());
494
 
495
    lw.SetLength(command_length());
496
 }
497
 
498
 const char *
499
-CommandListPage::GetTitle(char *, size_t) const
500
+CommandListPage::GetTitle(char *, size_t) const noexcept
501
 {
502
    return _("Edit key bindings");
503
 }
504
 
505
 void
506
-CommandListPage::Paint() const
507
+CommandListPage::Paint() const noexcept
508
 {
509
    lw.Paint(TextListRenderer(*this));
510
 }
511
 
512
 bool
513
-CommandListPage::OnCommand(struct mpdclient &c, command_t cmd)
514
+CommandListPage::OnCommand(struct mpdclient &c, Command cmd)
515
 {
516
-   if (cmd == CMD_LIST_RANGE_SELECT)
517
+   if (cmd == Command::LIST_RANGE_SELECT)
518
        return false;
519
 
520
    if (ListPage::OnCommand(c, cmd))
521
        return true;
522
 
523
    switch(cmd) {
524
-   case CMD_PLAY:
525
+   case Command::PLAY:
526
        if (lw.selected == command_item_apply()) {
527
            Apply();
528
            return true;
529
@@ -514,11 +504,11 @@
530
 
531
        break;
532
 
533
-   case CMD_LIST_FIND:
534
-   case CMD_LIST_RFIND:
535
-   case CMD_LIST_FIND_NEXT:
536
-   case CMD_LIST_RFIND_NEXT:
537
-       screen_find(screen, &lw, cmd, *this);
538
+   case Command::LIST_FIND:
539
+   case Command::LIST_RFIND:
540
+   case Command::LIST_FIND_NEXT:
541
+   case Command::LIST_RFIND_NEXT:
542
+       screen_find(screen, lw, cmd, *this);
543
        SetDirty();
544
        return true;
545
 
546
@@ -530,32 +520,30 @@
547
 }
548
 
549
 class KeyDefPage final : public ProxyPage {
550
-   ScreenManager &screen;
551
-
552
    CommandListPage command_list_page;
553
    CommandKeysPage command_keys_page;
554
 
555
 public:
556
-   KeyDefPage(ScreenManager &_screen, WINDOW *_w, Size size)
557
-       :ProxyPage(_w), screen(_screen),
558
-        command_list_page(_screen, _w, size),
559
-        command_keys_page(_screen, _w, size) {}
560
+   KeyDefPage(ScreenManager &screen, WINDOW *_w, Size size)
561
+       :ProxyPage(_w),
562
+        command_list_page(screen, _w, size),
563
+        command_keys_page(screen, this, _w, size) {}
564
 
565
 public:
566
    /* virtual methods from class Page */
567
-   void OnOpen(struct mpdclient &c) override;
568
-   void OnClose() override;
569
-   bool OnCommand(struct mpdclient &c, command_t cmd) override;
570
+   void OnOpen(struct mpdclient &c) noexcept override;
571
+   void OnClose() noexcept override;
572
+   bool OnCommand(struct mpdclient &c, Command cmd) override;
573
 };
574
 
575
-static Page *
576
+static std::unique_ptr<Page>
577
 keydef_init(ScreenManager &screen, WINDOW *w, Size size)
578
 {
579
-   return new KeyDefPage(screen, w, size);
580
+   return std::make_unique<KeyDefPage>(screen, w, size);
581
 }
582
 
583
 void
584
-KeyDefPage::OnOpen(struct mpdclient &c)
585
+KeyDefPage::OnOpen(struct mpdclient &c) noexcept
586
 {
587
    ProxyPage::OnOpen(c);
588
 
589
@@ -564,7 +552,7 @@
590
 }
591
 
592
 void
593
-KeyDefPage::OnClose()
594
+KeyDefPage::OnClose() noexcept
595
 {
596
    if (command_list_page.IsModified())
597
        screen_status_message(_("Note: Did you forget to \'Apply\' your changes?"));
598
@@ -573,17 +561,17 @@
599
 }
600
 
601
 bool
602
-KeyDefPage::OnCommand(struct mpdclient &c, command_t cmd)
603
+KeyDefPage::OnCommand(struct mpdclient &c, Command cmd)
604
 {
605
    if (ProxyPage::OnCommand(c, cmd))
606
        return true;
607
 
608
    switch(cmd) {
609
-   case CMD_PLAY:
610
+   case Command::PLAY:
611
        if (GetCurrentPage() == &command_list_page) {
612
            int s = command_list_page.GetSelectedCommand();
613
            if (s >= 0) {
614
-               command_keys_page.SetCommand(command_list_page.GetCommands(),
615
+               command_keys_page.SetCommand(command_list_page.GetBindings(),
616
                                 s);
617
                SetCurrentPage(c, &command_keys_page);
618
                return true;
619
@@ -592,8 +580,8 @@
620
 
621
        break;
622
 
623
-   case CMD_GO_PARENT_DIRECTORY:
624
-   case CMD_GO_ROOT_DIRECTORY:
625
+   case Command::GO_PARENT_DIRECTORY:
626
+   case Command::GO_ROOT_DIRECTORY:
627
        if (GetCurrentPage() != &command_list_page) {
628
            SetCurrentPage(c, &command_list_page);
629
            return true;
630
@@ -601,7 +589,7 @@
631
 
632
        break;
633
 
634
-   case CMD_SAVE_PLAYLIST:
635
+   case Command::SAVE_PLAYLIST:
636
        command_list_page.Apply();
637
        command_list_page.Save();
638
        return true;
639
@@ -615,7 +603,9 @@
640
    return false;
641
 }
642
 
643
-const struct screen_functions screen_keydef = {
644
+const PageMeta screen_keydef = {
645
    "keydef",
646
+   N_("Keys"),
647
+   Command::SCREEN_KEYDEF,
648
    keydef_init,
649
 };
650
ncmpc-0.30.tar.xz/src/screen_keydef.hxx -> ncmpc-0.32.tar.xz/src/screen_keydef.hxx Changed
11
 
1
@@ -23,7 +23,8 @@
2
 #include "config.h"
3
 
4
 #ifdef ENABLE_KEYDEF_SCREEN
5
-extern const struct screen_functions screen_keydef;
6
+struct PageMeta;
7
+extern const PageMeta screen_keydef;
8
 #endif /* ENABLE_KEYDEF_SCREEN */
9
 
10
 #endif
11
ncmpc-0.30.tar.xz/src/screen_list.cxx -> ncmpc-0.32.tar.xz/src/screen_list.cxx Changed
82
 
1
@@ -18,7 +18,7 @@
2
  */
3
 
4
 #include "screen_list.hxx"
5
-#include "screen_interface.hxx"
6
+#include "PageMeta.hxx"
7
 #include "screen.hxx"
8
 #include "HelpPage.hxx"
9
 #include "QueuePage.hxx"
10
@@ -30,27 +30,22 @@
11
 #include "LyricsPage.hxx"
12
 #include "OutputsPage.hxx"
13
 #include "ChatPage.hxx"
14
+#include "util/Macros.hxx"
15
 
16
 #include <string.h>
17
 
18
-static const struct screen_functions *const screens[] = {
19
+static const PageMeta *const screens[] = {
20
+#ifdef ENABLE_HELP_SCREEN
21
+   &screen_help,
22
+#endif
23
    &screen_queue,
24
    &screen_browse,
25
 #ifdef ENABLE_ARTIST_SCREEN
26
    &screen_artist,
27
 #endif
28
-#ifdef ENABLE_HELP_SCREEN
29
-   &screen_help,
30
-#endif
31
 #ifdef ENABLE_SEARCH_SCREEN
32
    &screen_search,
33
 #endif
34
-#ifdef ENABLE_SONG_SCREEN
35
-   &screen_song,
36
-#endif
37
-#ifdef ENABLE_KEYDEF_SCREEN
38
-   &screen_keydef,
39
-#endif
40
 #ifdef ENABLE_LYRICS_SCREEN
41
    &screen_lyrics,
42
 #endif
43
@@ -60,9 +55,23 @@
44
 #ifdef ENABLE_CHAT_SCREEN
45
    &screen_chat,
46
 #endif
47
+#ifdef ENABLE_SONG_SCREEN
48
+   &screen_song,
49
+#endif
50
+#ifdef ENABLE_KEYDEF_SCREEN
51
+   &screen_keydef,
52
+#endif
53
 };
54
 
55
-const struct screen_functions *
56
+const PageMeta *
57
+GetPageMeta(unsigned i)
58
+{
59
+   return i < ARRAY_SIZE(screens)
60
+          ? screens[i]
61
+          : nullptr;
62
+}
63
+
64
+const PageMeta *
65
 screen_lookup_name(const char *name)
66
 {
67
    for (const auto *i : screens)
68
@@ -71,3 +80,13 @@
69
 
70
    return nullptr;
71
 }
72
+
73
+const PageMeta *
74
+PageByCommand(Command cmd)
75
+{
76
+   for (const auto *i : screens)
77
+       if (i->command == cmd)
78
+           return i;
79
+
80
+   return nullptr;
81
+}
82
ncmpc-0.30.tar.xz/src/screen_list.hxx -> ncmpc-0.32.tar.xz/src/screen_list.hxx Changed
27
 
1
@@ -20,12 +20,21 @@
2
 #ifndef SCREEN_LIST_H
3
 #define SCREEN_LIST_H
4
 
5
-#include "config.h"
6
-#include "ncmpc_curses.h"
7
+#include "util/Compiler.h"
8
 
9
-struct screen_functions;
10
+enum class Command : unsigned;
11
+struct PageMeta;
12
 
13
-const struct screen_functions *
14
+gcc_const
15
+const PageMeta *
16
+GetPageMeta(unsigned i);
17
+
18
+gcc_pure
19
+const PageMeta *
20
 screen_lookup_name(const char *name);
21
 
22
+gcc_const
23
+const PageMeta *
24
+PageByCommand(Command cmd);
25
+
26
 #endif
27
ncmpc-0.30.tar.xz/src/screen_paint.cxx -> ncmpc-0.32.tar.xz/src/screen_paint.cxx Changed
28
 
1
@@ -21,8 +21,7 @@
2
 #include "Page.hxx"
3
 #include "config.h"
4
 #include "mpdclient.hxx"
5
-#include "options.hxx"
6
-#include "player_command.hxx"
7
+#include "Options.hxx"
8
 
9
 #include <mpd/client.h>
10
 
11
@@ -31,14 +30,10 @@
12
 void
13
 ScreenManager::PaintTopWindow()
14
 {
15
-   const char *title = "";
16
-#ifndef NCMPC_MINI
17
-   if (welcome_source_id == 0)
18
-#endif
19
-       title = current_page->second->GetTitle(buf, buf_size);
20
+   const char *title = current_page->second->GetTitle(buf, buf_size);
21
    assert(title != nullptr);
22
 
23
-   title_bar.Paint(title);
24
+   title_bar.Paint(GetCurrentPageMeta(), title);
25
 }
26
 
27
 void
28
ncmpc-0.30.tar.xz/src/screen_status.hxx -> ncmpc-0.32.tar.xz/src/screen_status.hxx Changed
10
 
1
@@ -20,7 +20,7 @@
2
 #ifndef NCMPC_SCREEN_STATUS_H
3
 #define NCMPC_SCREEN_STATUS_H
4
 
5
-#include "Compiler.h"
6
+#include "util/Compiler.h"
7
 
8
 void
9
 screen_status_message(const char *msg);
10
ncmpc-0.30.tar.xz/src/screen_utils.cxx -> ncmpc-0.32.tar.xz/src/screen_utils.cxx Changed
155
 
1
@@ -22,18 +22,17 @@
2
 #include "mpdclient.hxx"
3
 #include "config.h"
4
 #include "i18n.h"
5
-#include "options.hxx"
6
-#include "colors.hxx"
7
+#include "Options.hxx"
8
+#include "Styles.hxx"
9
 #include "wreadln.hxx"
10
 #include "ncmpc.hxx"
11
 
12
 #include <mpd/client.h>
13
 
14
 #include <string.h>
15
-#include <ctype.h>
16
 
17
 void
18
-screen_bell()
19
+screen_bell() noexcept
20
 {
21
    if (options.audible_bell)
22
        beep();
23
@@ -41,8 +40,8 @@
24
        flash();
25
 }
26
 
27
-static bool
28
-ignore_key(int key)
29
+static constexpr bool
30
+ignore_key(int key) noexcept
31
 {
32
    return
33
 #ifdef HAVE_GETMOUSE
34
@@ -53,11 +52,11 @@
35
 }
36
 
37
 int
38
-screen_getch(const char *prompt)
39
+screen_getch(const char *prompt) noexcept
40
 {
41
    WINDOW *w = screen->status_bar.GetWindow().w;
42
 
43
-   colors_use(w, COLOR_STATUS_ALERT);
44
+   SelectStyle(w, Style::STATUS_ALERT);
45
    werase(w);
46
    wmove(w, 0, 0);
47
    waddstr(w, prompt);
48
@@ -75,14 +74,14 @@
49
 }
50
 
51
 bool
52
-screen_get_yesno(const char *_prompt, bool def)
53
+screen_get_yesno(const char *_prompt, bool def) noexcept
54
 {
55
    /* NOTE: if one day a translator decides to use a multi-byte character
56
       for one of the yes/no keys, we'll have to parse it properly */
57
 
58
    char prompt[256];
59
    snprintf(prompt, sizeof(prompt),
60
-        _("%s [%s/%s] "), _prompt,
61
+        "%s [%s/%s] ", _prompt,
62
         YES_TRANSLATION, NO_TRANSLATION);
63
    int key = tolower(screen_getch(prompt));
64
    if (key == YES_TRANSLATION[0])
65
@@ -97,40 +96,55 @@
66
 screen_readln(const char *prompt,
67
          const char *value,
68
          History *history,
69
-         Completion *completion)
70
+         Completion *completion) noexcept
71
 {
72
    auto *window = &screen->status_bar.GetWindow();
73
    WINDOW *w = window->w;
74
 
75
    wmove(w, 0,0);
76
    curs_set(1);
77
-   colors_use(w, COLOR_STATUS_ALERT);
78
-   auto result = wreadln(w, prompt, value, window->size.width,
79
+
80
+   if (prompt != nullptr) {
81
+       SelectStyle(w, Style::STATUS_ALERT);
82
+       waddstr(w, prompt);
83
+       waddstr(w, ": ");
84
+   }
85
+
86
+   SelectStyle(w, Style::STATUS);
87
+   wattron(w, A_REVERSE);
88
+
89
+   auto result = wreadln(w, value, window->size.width,
90
                  history, completion);
91
    curs_set(0);
92
-   return std::move(result);
93
+   return result;
94
 }
95
 
96
 std::string
97
-screen_read_password(const char *prompt)
98
+screen_read_password(const char *prompt) noexcept
99
 {
100
    auto *window = &screen->status_bar.GetWindow();
101
    WINDOW *w = window->w;
102
 
103
    wmove(w, 0,0);
104
    curs_set(1);
105
-   colors_use(w, COLOR_STATUS_ALERT);
106
+   SelectStyle(w, Style::STATUS_ALERT);
107
 
108
    if (prompt == nullptr)
109
        prompt = _("Password");
110
 
111
-   auto result = wreadln_masked(w, prompt, nullptr, window->size.width);
112
+   waddstr(w, prompt);
113
+   waddstr(w, ": ");
114
+
115
+   SelectStyle(w, Style::STATUS);
116
+   wattron(w, A_REVERSE);
117
+
118
+   auto result = wreadln_masked(w, nullptr, window->size.width);
119
    curs_set(0);
120
-   return std::move(result);
121
+   return result;
122
 }
123
 
124
 static const char *
125
-CompletionDisplayString(const char *value)
126
+CompletionDisplayString(const char *value) noexcept
127
 {
128
    const char *slash = strrchr(value, '/');
129
    if (slash == nullptr)
130
@@ -152,7 +166,7 @@
131
 }
132
 
133
 void
134
-screen_display_completion_list(Completion::Range range)
135
+screen_display_completion_list(Completion::Range range) noexcept
136
 {
137
    static Completion::Range prev_range;
138
    static size_t prev_length = 0;
139
@@ -170,7 +184,7 @@
140
        offset = 0;
141
    }
142
 
143
-   colors_use(w, COLOR_STATUS_ALERT);
144
+   SelectStyle(w, Style::STATUS_ALERT);
145
 
146
    auto i = std::next(range.begin(), offset);
147
    for (unsigned y = 0; y < screen->main_window.size.height; ++y, ++i) {
148
@@ -186,5 +200,5 @@
149
    wclrtobot(w);
150
 
151
    wrefresh(w);
152
-   colors_use(w, COLOR_LIST);
153
+   SelectStyle(w, Style::LIST);
154
 }
155
ncmpc-0.30.tar.xz/src/screen_utils.hxx -> ncmpc-0.32.tar.xz/src/screen_utils.hxx Changed
47
 
1
@@ -21,7 +21,7 @@
2
 #define SCREEN_UTILS_H
3
 
4
 #include "config.h"
5
-#include "command.hxx"
6
+#include "Command.hxx"
7
 #include "History.hxx"
8
 #include "Completion.hxx"
9
 
10
@@ -29,10 +29,12 @@
11
 class Completion;
12
 
13
 /* sound an audible and/or visible bell */
14
-void screen_bell();
15
+void
16
+screen_bell() noexcept;
17
 
18
 /* read a character from the status window */
19
-int screen_getch(const char *prompt);
20
+int
21
+screen_getch(const char *prompt) noexcept;
22
 
23
 /**
24
  * display a prompt, wait for the user to press a key, and compare it with
25
@@ -41,16 +43,17 @@
26
  * @returns true, if the user pressed the key for "yes"; false, if the user
27
  *     pressed the key for "no"; def otherwise
28
  */
29
-bool screen_get_yesno(const char *prompt, bool def);
30
+bool
31
+screen_get_yesno(const char *prompt, bool def) noexcept;
32
 
33
 std::string
34
-screen_read_password(const char *prompt);
35
+screen_read_password(const char *prompt) noexcept;
36
 
37
 std::string
38
 screen_readln(const char *prompt, const char *value,
39
-         History *history, Completion *completion);
40
+         History *history, Completion *completion) noexcept;
41
 
42
 void
43
-screen_display_completion_list(Completion::Range range);
44
+screen_display_completion_list(Completion::Range range) noexcept;
45
 
46
 #endif
47
ncmpc-0.30.tar.xz/src/signals.cxx -> ncmpc-0.32.tar.xz/src/signals.cxx Changed
122
 
1
@@ -17,104 +17,41 @@
2
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
3
  */
4
 
5
-#include "signals.hxx"
6
-#include "screen.hxx"
7
-#include "Compiler.h"
8
+#include "Instance.hxx"
9
 
10
-#include <glib-unix.h>
11
-
12
-#include <signal.h>
13
-
14
-static int sigwinch_pipes[2];
15
-
16
-static gboolean
17
-handle_quit_signal(gpointer data)
18
-{
19
-   auto *main_loop = (GMainLoop *)data;
20
-
21
-   g_main_loop_quit(main_loop);
22
-   return false;
23
-}
24
-
25
-static gboolean
26
-sigwinch_event(gcc_unused GIOChannel *source,
27
-          gcc_unused GIOCondition condition, gpointer data)
28
+void
29
+Instance::OnSigwinch()
30
 {
31
-   auto &screen = *(ScreenManager *)data;
32
-
33
-   char ignoreme[64];
34
-   if (1 > read(sigwinch_pipes[0], ignoreme, 64))
35
-       exit(EXIT_FAILURE);
36
-
37
    endwin();
38
    refresh();
39
-   screen.OnResize();
40
-
41
-   return true;
42
+   screen_manager.OnResize();
43
 }
44
 
45
-static void
46
-catch_sigwinch(gcc_unused int sig)
47
+void
48
+Instance::AsyncWaitSigwinch()
49
 {
50
-   if (1 != write(sigwinch_pipes[1], "", 1))
51
-       exit(EXIT_FAILURE);
52
+   sigwinch.async_wait([this](const auto &error, int){
53
+           if (error)
54
+               return;
55
+
56
+           this->OnSigwinch();
57
+           this->AsyncWaitSigwinch();
58
+       });
59
 }
60
 
61
 void
62
-signals_init(GMainLoop *main_loop, ScreenManager &screen)
63
+Instance::InitSignals()
64
 {
65
-   /* setup quit signals */
66
-   g_unix_signal_add(SIGTERM, handle_quit_signal, main_loop);
67
-   g_unix_signal_add(SIGINT, handle_quit_signal, main_loop);
68
-   g_unix_signal_add(SIGHUP, handle_quit_signal, main_loop);
69
+   AsyncWaitSigwinch();
70
 
71
-   /* setup signal behavior - SIGCONT */
72
+   /* ignore SIGPIPE */
73
 
74
    struct sigaction act;
75
    sigemptyset(&act.sa_mask);
76
-   act.sa_flags = 0;
77
-
78
-   act.sa_handler = catch_sigwinch;
79
-   if (sigaction(SIGCONT, &act, nullptr) < 0) {
80
-       perror("sigaction(SIGCONT)");
81
-       exit(EXIT_FAILURE);
82
-   }
83
-
84
-   /* setup SIGWINCH */
85
-
86
    act.sa_flags = SA_RESTART;
87
-   act.sa_handler = catch_sigwinch;
88
-   if (sigaction(SIGWINCH, &act, nullptr) < 0) {
89
-       perror("sigaction(SIGWINCH)");
90
-       exit(EXIT_FAILURE);
91
-   }
92
-
93
-#ifndef WIN32
94
-   if (!pipe(sigwinch_pipes) &&
95
-       !fcntl(sigwinch_pipes[1], F_SETFL, O_NONBLOCK)) {
96
-       GIOChannel *sigwinch_channel = g_io_channel_unix_new(sigwinch_pipes[0]);
97
-       g_io_add_watch(sigwinch_channel, G_IO_IN,
98
-                  sigwinch_event, &screen);
99
-       g_io_channel_unref(sigwinch_channel);
100
-   }
101
-   else {
102
-       perror("sigwinch pipe creation failed");
103
-       exit(EXIT_FAILURE);
104
-   }
105
-#endif
106
-
107
-   /* ignore SIGPIPE */
108
-
109
    act.sa_handler = SIG_IGN;
110
    if (sigaction(SIGPIPE, &act, nullptr) < 0) {
111
        perror("sigaction(SIGPIPE)");
112
        exit(EXIT_FAILURE);
113
    }
114
 }
115
-
116
-void
117
-signals_deinit()
118
-{
119
-   close(sigwinch_pipes[0]);
120
-   close(sigwinch_pipes[1]);
121
-}
122
ncmpc-0.30.tar.xz/src/song_paint.cxx -> ncmpc-0.32.tar.xz/src/song_paint.cxx Changed
37
 
1
@@ -22,8 +22,8 @@
2
 #include "strfsong.hxx"
3
 #include "time_format.hxx"
4
 #include "hscroll.hxx"
5
-#include "charset.hxx"
6
 #include "config.h"
7
+#include "util/LocaleString.hxx"
8
 
9
 #include <mpd/client.h>
10
 
11
@@ -34,10 +34,10 @@
12
           bool selected, bool highlight, const struct mpd_song *song,
13
           gcc_unused class hscroll *hscroll, const char *format)
14
 {
15
-   char buffer[width * 4];
16
+   char buffer[1024];
17
 
18
    strfsong(buffer, sizeof(buffer), format, song);
19
-   row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST,
20
+   row_paint_text(w, width, highlight ? Style::LIST_BOLD : Style::LIST,
21
               selected, buffer);
22
 
23
 #ifndef NCMPC_MINI
24
@@ -51,8 +51,10 @@
25
        waddstr(w, duration);
26
    }
27
 
28
-   if (hscroll != nullptr && utf8_width(buffer) >= width) {
29
-       hscroll->Set(0, y, width, buffer);
30
+   if (hscroll != nullptr && StringWidthMB(buffer) >= width) {
31
+       hscroll->Set(0, y, width, buffer,
32
+                highlight ? Style::LIST_BOLD : Style::LIST,
33
+                selected ? A_REVERSE : 0);
34
        hscroll->Paint();
35
    }
36
 #endif
37
ncmpc-0.30.tar.xz/src/song_paint.hxx -> ncmpc-0.32.tar.xz/src/song_paint.hxx Changed
11
 
1
@@ -20,8 +20,7 @@
2
 #ifndef NCMPC_SONG_PAINT_H
3
 #define NCMPC_SONG_PAINT_H
4
 
5
-#include "config.h"
6
-#include "ncmpc_curses.h"
7
+#include <curses.h>
8
 
9
 struct mpd_song;
10
 class hscroll;
11
ncmpc-0.30.tar.xz/src/strfsong.cxx -> ncmpc-0.32.tar.xz/src/strfsong.cxx Changed
369
 
1
@@ -20,17 +20,19 @@
2
 #include "strfsong.hxx"
3
 #include "charset.hxx"
4
 #include "time_format.hxx"
5
+#include "util/UriUtil.hxx"
6
 
7
 #include <mpd/client.h>
8
 
9
-#include <glib.h>
10
+#include <algorithm>
11
 
12
 #include <string.h>
13
 
14
+gcc_pure
15
 static const char *
16
-skip(const char * p)
17
+skip(const char *p) noexcept
18
 {
19
-   gint stack = 0;
20
+   unsigned stack = 0;
21
 
22
    while (*p != '\0') {
23
        if (*p == '[')
24
@@ -51,83 +53,69 @@
25
    return p;
26
 }
27
 
28
-#ifndef NCMPC_MINI
29
-
30
 static char *
31
-concat_tag_values(const char *a, const char *b)
32
+CopyString(char *dest, char *const dest_end,
33
+      const char *src, size_t length) noexcept
34
 {
35
-   return g_strconcat(a, ", ", b, nullptr);
36
+   if (length >= size_t(dest_end - dest))
37
+       length = dest_end - dest - 1;
38
+
39
+   return std::copy_n(src, length, dest);
40
 }
41
 
42
 static char *
43
-song_more_tag_values(const struct mpd_song *song, enum mpd_tag_type tag,
44
-            const char *first)
45
+CopyStringFromUTF8(char *dest, char *const dest_end,
46
+          const char *src_utf8) noexcept
47
 {
48
-   const char *p = mpd_song_get_tag(song, tag, 1);
49
-   if (p == nullptr)
50
-       return nullptr;
51
-
52
-   char *buffer = concat_tag_values(first, p);
53
-   for (unsigned i = 2; (p = mpd_song_get_tag(song, tag, i)) != nullptr;
54
-        ++i) {
55
-       char *prev = buffer;
56
-       buffer = concat_tag_values(buffer, p);
57
-       g_free(prev);
58
-   }
59
-
60
-   return buffer;
61
+   return CopyUtf8ToLocale(dest, dest_end - dest, src_utf8);
62
 }
63
 
64
-#endif /* !NCMPC_MINI */
65
-
66
 static char *
67
-song_tag_locale(const struct mpd_song *song, enum mpd_tag_type tag)
68
+CopyTag(char *dest, char *const end,
69
+   const struct mpd_song *song, enum mpd_tag_type tag) noexcept
70
 {
71
    const char *value = mpd_song_get_tag(song, tag, 0);
72
    if (value == nullptr)
73
-       return nullptr;
74
-
75
-#ifndef NCMPC_MINI
76
-   char *all = song_more_tag_values(song, tag, value);
77
-   if (all != nullptr)
78
-       value = all;
79
-#endif /* !NCMPC_MINI */
80
+       return dest;
81
 
82
-   char *result = utf8_to_locale(value);
83
+   dest = CopyStringFromUTF8(dest, end, value);
84
 
85
-#ifndef NCMPC_MINI
86
-   g_free(all);
87
-#endif /* !NCMPC_MINI */
88
+   for (unsigned i = 1; dest + 5 < end &&
89
+            (value = mpd_song_get_tag(song, tag, i)) != nullptr;
90
+        ++i) {
91
+       *dest++ = ',';
92
+       *dest++ = ' ';
93
+       dest = CopyStringFromUTF8(dest, end, value);
94
+   }
95
 
96
-   return result;
97
+   return dest;
98
 }
99
 
100
 static size_t
101
-_strfsong(char *s,
102
-     size_t max,
103
+_strfsong(char *const s0, char *const end,
104
      const char *format,
105
      const struct mpd_song *song,
106
-     const char **last)
107
+     const char **last) noexcept
108
 {
109
    bool found = false;
110
    /* "missed" helps handling the case of mere literal text like
111
       found==true instead of found==false. */
112
    bool missed = false;
113
 
114
-   s[0] = '\0';
115
 
116
-   if (song == nullptr)
117
+   if (song == nullptr) {
118
+       s0[0] = '\0';
119
        return 0;
120
+   }
121
 
122
+   char *s = s0;
123
    const char *p;
124
-   size_t length = 0;
125
-   for (p = format; *p != '\0' && length<max;) {
126
+   for (p = format; *p != '\0' && s < end - 1;) {
127
        /* OR */
128
        if (p[0] == '|') {
129
            ++p;
130
            if(missed && !found) {
131
-               s[0] = '\0';
132
-               length = 0;
133
+               s = s0;
134
                missed = false;
135
            } else {
136
                p = skip(p);
137
@@ -149,150 +137,145 @@
138
 
139
        /* EXPRESSION START */
140
        if (p[0] == '[') {
141
-           char *temp = (char *)g_malloc0(max);
142
-           if( _strfsong(temp, max, p+1, song, &p) >0 ) {
143
-               g_strlcat(s, temp, max);
144
-               length = strlen(s);
145
+           size_t n = _strfsong(s, end, p + 1,
146
+                        song, &p);
147
+           if (n > 0) {
148
+               s += n;
149
                found = true;
150
            } else {
151
                missed = true;
152
            }
153
-           g_free(temp);
154
            continue;
155
        }
156
 
157
        /* EXPRESSION END */
158
        if (p[0] == ']') {
159
-           if(last) *last = p+1;
160
-           if(missed && !found && length) {
161
-               s[0] = '\0';
162
-               length = 0;
163
-           }
164
-           return length;
165
+           ++p;
166
+           if (missed && !found)
167
+               s = s0;
168
+           break;
169
        }
170
 
171
-       /* pass-through non-escaped portions of the format string */
172
-       if (p[0] != '#' && p[0] != '%' && length<max) {
173
-           s[length++] = *p;
174
-           s[length] = '\0';
175
-           p++;
176
+       /* let the escape character escape itself */
177
+       if (p[0] == '#' && p[1] != '\0') {
178
+           *s++ = p[1];
179
+           p+=2;
180
            continue;
181
        }
182
 
183
-       /* let the escape character escape itself */
184
-       if (p[0] == '#' && p[1] != '\0' && length<max) {
185
-           s[length++] = *(p+1);
186
-           s[length] = '\0';
187
-           p+=2;
188
+       /* pass-through non-escaped portions of the format string */
189
+       if (p[0] != '%') {
190
+           *s++ = *p++;
191
            continue;
192
        }
193
 
194
        /* advance past the esc character */
195
 
196
        /* find the extent of this format specifier (stop at \0, ' ', or esc) */
197
-       char *temp = nullptr;
198
-       const char *end = p + 1;
199
-       while(*end >= 'a' && *end <= 'z') {
200
-           end++;
201
-       }
202
-       size_t n = end - p + 1;
203
-       if(*end != '%')
204
+       const char *name_end = p + 1;
205
+       while (*name_end >= 'a' && *name_end <= 'z')
206
+           ++name_end;
207
+       size_t n = name_end - p + 1;
208
+
209
+       const char *value = nullptr, *value_utf8 = nullptr;
210
+       enum mpd_tag_type tag = MPD_TAG_UNKNOWN;
211
+       bool short_tag = false;
212
+       char buffer[32];
213
+
214
+       if (*name_end != '%')
215
            n--;
216
        else if (strncmp("%file%", p, n) == 0)
217
-           temp = utf8_to_locale(mpd_song_get_uri(song));
218
-       else if (strncmp("%artist%", p, n) == 0) {
219
-           temp = song_tag_locale(song, MPD_TAG_ARTIST);
220
-           if (temp == nullptr) {
221
-               temp = song_tag_locale(song, MPD_TAG_PERFORMER);
222
-               if (temp == nullptr)
223
-                   temp = song_tag_locale(song, MPD_TAG_COMPOSER);
224
-           }
225
-       } else if (strncmp("%albumartist", p, n) == 0)
226
-           temp = song_tag_locale(song, MPD_TAG_ALBUM_ARTIST);
227
+           value_utf8 = mpd_song_get_uri(song);
228
+       else if (strncmp("%artist%", p, n) == 0)
229
+           tag = MPD_TAG_ARTIST;
230
+       else if (strncmp("%albumartist%", p, n) == 0)
231
+           tag = MPD_TAG_ALBUM_ARTIST;
232
        else if (strncmp("%composer%", p, n) == 0)
233
-           temp = song_tag_locale(song, MPD_TAG_COMPOSER);
234
+           tag = MPD_TAG_COMPOSER;
235
        else if (strncmp("%performer%", p, n) == 0)
236
-           temp = song_tag_locale(song, MPD_TAG_PERFORMER);
237
-       else if (strncmp("%title%", p, n) == 0) {
238
-           temp = song_tag_locale(song, MPD_TAG_TITLE);
239
-           if (temp == nullptr)
240
-               temp = song_tag_locale(song, MPD_TAG_NAME);
241
-       } else if (strncmp("%album%", p, n) == 0)
242
-           temp = song_tag_locale(song, MPD_TAG_ALBUM);
243
+           tag = MPD_TAG_PERFORMER;
244
+       else if (strncmp("%title%", p, n) == 0)
245
+           tag = MPD_TAG_TITLE;
246
+       else if (strncmp("%album%", p, n) == 0)
247
+           tag = MPD_TAG_ALBUM;
248
        else if (strncmp("%shortalbum%", p, n) == 0) {
249
-           temp = song_tag_locale(song, MPD_TAG_ALBUM);
250
-           if (temp) {
251
-               char *temp2 = g_strndup(temp, 25);
252
-               if (strlen(temp) > 25) {
253
-                   temp2[24] = '.';
254
-                   temp2[23] = '.';
255
-                   temp2[22] = '.';
256
-               }
257
-               g_free(temp);
258
-               temp = temp2;
259
-           }
260
+           tag = MPD_TAG_ALBUM;
261
+           short_tag = true;
262
        }
263
        else if (strncmp("%track%", p, n) == 0)
264
-           temp = song_tag_locale(song, MPD_TAG_TRACK);
265
+           tag = MPD_TAG_TRACK;
266
        else if (strncmp("%disc%", p, n) == 0)
267
-           temp = song_tag_locale(song, MPD_TAG_DISC);
268
+           tag = MPD_TAG_DISC;
269
        else if (strncmp("%name%", p, n) == 0)
270
-           temp = song_tag_locale(song, MPD_TAG_NAME);
271
+           tag = MPD_TAG_NAME;
272
        else if (strncmp("%date%", p, n) == 0)
273
-           temp = song_tag_locale(song, MPD_TAG_DATE);
274
+           tag = MPD_TAG_DATE;
275
        else if (strncmp("%genre%", p, n) == 0)
276
-           temp = song_tag_locale(song, MPD_TAG_GENRE);
277
+           tag = MPD_TAG_GENRE;
278
        else if (strncmp("%shortfile%", p, n) == 0) {
279
            const char *uri = mpd_song_get_uri(song);
280
            if (strstr(uri, "://") == nullptr)
281
-               uri = g_basename(uri);
282
-           temp = utf8_to_locale(uri);
283
+               uri = GetUriFilename(uri);
284
+           value_utf8 = uri;
285
        } else if (strncmp("%time%", p, n) == 0) {
286
            unsigned duration = mpd_song_get_duration(song);
287
 
288
            if (duration > 0)  {
289
-               char buffer[32];
290
                format_duration_short(buffer, sizeof(buffer),
291
                              duration);
292
-               temp = g_strdup(buffer);
293
+               value = buffer;
294
            }
295
        }
296
 
297
-       if( temp == nullptr) {
298
-           size_t templen=n;
299
+       /* advance past the specifier */
300
+       p += n;
301
+
302
+       if (tag != MPD_TAG_UNKNOWN) {
303
+           char *const old = s;
304
+           s = CopyTag(s, end, song, tag);
305
+           if (s != old) {
306
+               found = true;
307
+
308
+               if (short_tag && s > old + 25)
309
+                   s = std::copy_n("...", 3, old + 22);
310
+           } else
311
+               missed = true;
312
+
313
+           continue;
314
+       }
315
+
316
+       if (value_utf8 != nullptr) {
317
+           found = true;
318
+           s = CopyStringFromUTF8(s, end, value_utf8);
319
+           continue;
320
+       }
321
+
322
+       size_t value_length;
323
+
324
+       if (value == nullptr) {
325
            /* just pass-through any unknown specifiers (including esc) */
326
-           if( length+templen > max )
327
-               templen = max-length;
328
-           char *ident = g_strndup(p, templen);
329
-           g_strlcat(s, ident, max);
330
-           length+=templen;
331
-           g_free(ident);
332
+           value = p;
333
+           value_length = n;
334
 
335
            missed = true;
336
        } else {
337
-           size_t templen = strlen(temp);
338
+           value_length = strlen(value);
339
 
340
            found = true;
341
-           if( length+templen > max )
342
-               templen = max-length;
343
-           g_strlcat(s, temp, max);
344
-           length+=templen;
345
-           g_free(temp);
346
        }
347
 
348
-       /* advance past the specifier */
349
-       p += n;
350
+       s = CopyString(s, end, value, value_length);
351
    }
352
 
353
    if(last) *last = p;
354
 
355
-   return length;
356
+   *s = '\0';
357
+   return s - s0;
358
 }
359
 
360
 size_t
361
 strfsong(char *s, size_t max, const char *format,
362
-    const struct mpd_song *song)
363
+    const struct mpd_song *song) noexcept
364
 {
365
-   return _strfsong(s, max, format, song, nullptr);
366
+   return _strfsong(s, s + max, format, song, nullptr);
367
 }
368
-
369
ncmpc-0.30.tar.xz/src/strfsong.hxx -> ncmpc-0.32.tar.xz/src/strfsong.hxx Changed
9
 
1
@@ -26,6 +26,6 @@
2
 
3
 size_t
4
 strfsong(char *s, size_t max, const char *format,
5
-    const struct mpd_song *song);
6
+    const struct mpd_song *song) noexcept;
7
 
8
 #endif
9
ncmpc-0.32.tar.xz/src/util/Compiler.h Changed
2
 
1
(renamed from src/Compiler.h)
2
ncmpc-0.32.tar.xz/src/util/LocaleString.cxx Added
188
 
1
@@ -0,0 +1,186 @@
2
+/*
3
+ * Copyright 2018 Max Kellermann <max.kellermann@gmail.com>
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
8
+ *
9
+ * - Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ *
12
+ * - Redistributions in binary form must reproduce the above copyright
13
+ * notice, this list of conditions and the following disclaimer in the
14
+ * documentation and/or other materials provided with the
15
+ * distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
21
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+
31
+#include "LocaleString.hxx"
32
+
33
+#include <cwchar>
34
+
35
+#include <string.h>
36
+
37
+bool
38
+IsIncompleteCharMB(const char *s, size_t n) noexcept
39
+{
40
+   auto mb = std::mbstate_t();
41
+   const std::size_t length = std::mbrlen(s, n, &mb);
42
+   return length == std::size_t(-2);
43
+}
44
+
45
+std::size_t
46
+StringLengthMB(const char *s, size_t byte_length) noexcept
47
+{
48
+   const char *const end = s + byte_length;
49
+   auto state = std::mbstate_t();
50
+
51
+   size_t length = 0;
52
+   while (s < end) {
53
+       wchar_t w;
54
+       std::size_t n = std::mbrtowc(&w, s, end - s, &state);
55
+       if (n == std::size_t(-2))
56
+           break;
57
+
58
+       if (n == std::size_t(-1) || n == 0) {
59
+           ++s;
60
+       } else {
61
+           s += n;
62
+           ++length;
63
+       }
64
+   }
65
+
66
+   return length;
67
+
68
+}
69
+
70
+std::size_t
71
+CharSizeMB(const char *s, size_t n) noexcept
72
+{
73
+   auto mb = std::mbstate_t();
74
+   const std::size_t length = std::mbrlen(s, n, &mb);
75
+   if (length == std::size_t(-2))
76
+       return n;
77
+
78
+   if (length == std::size_t(-1))
79
+       return 1;
80
+
81
+   return length;
82
+}
83
+
84
+const char *
85
+PrevCharMB(const char *start, const char *reference) noexcept
86
+{
87
+   const char *p = reference;
88
+
89
+   while (p > start) {
90
+       --p;
91
+
92
+       auto mb = std::mbstate_t();
93
+       const std::size_t length = std::mbrlen(p, reference - p, &mb);
94
+       if (length != std::size_t(-1))
95
+           break;
96
+   }
97
+
98
+   return p;
99
+}
100
+
101
+const char *
102
+AtCharMB(const char *s, size_t length, size_t i) noexcept
103
+{
104
+   const char *const end = s + length;
105
+   auto state = std::mbstate_t();
106
+
107
+   while (i > 0) {
108
+       wchar_t w;
109
+       std::size_t n = std::mbrtowc(&w, s, end - s, &state);
110
+
111
+       if (n == std::size_t(-2)) {
112
+           s += strlen(s);
113
+           break;
114
+       }
115
+
116
+       --i;
117
+
118
+       if (n == std::size_t(-1) || n == 0)
119
+           ++s;
120
+       else
121
+           s += n;
122
+   }
123
+
124
+   return s;
125
+}
126
+
127
+size_t
128
+StringWidthMB(const char *s, size_t length) noexcept
129
+{
130
+   const char *const end = s + length;
131
+   auto state = std::mbstate_t();
132
+
133
+   size_t width = 0;
134
+   while (s < end) {
135
+       wchar_t w;
136
+       std::size_t n = std::mbrtowc(&w, s, end - s, &state);
137
+       if (n == std::size_t(-2))
138
+           break;
139
+
140
+       if (n == std::size_t(-1) || n == 0) {
141
+           ++s;
142
+       } else {
143
+           s += n;
144
+           int cw = wcwidth(w);
145
+           if (cw > 0)
146
+               width += cw;
147
+       }
148
+   }
149
+
150
+   return width;
151
+}
152
+
153
+size_t
154
+StringWidthMB(const char *s) noexcept
155
+{
156
+   return StringWidthMB(s, strlen(s));
157
+}
158
+
159
+const char *
160
+AtWidthMB(const char *s, size_t length, size_t width) noexcept
161
+{
162
+   const char *const end = s + length;
163
+   auto state = std::mbstate_t();
164
+
165
+   while (width > 0 && s < end) {
166
+       wchar_t w;
167
+       std::size_t n = std::mbrtowc(&w, s, end - s, &state);
168
+       if (n == std::size_t(-2))
169
+           break;
170
+
171
+       if (n == std::size_t(-1) || n == 0) {
172
+           --width;
173
+           ++s;
174
+       } else {
175
+           int cw = wcwidth(w);
176
+           if (cw > 0) {
177
+               if (size_t(cw) > width)
178
+                   break;
179
+               width -= cw;
180
+           }
181
+
182
+           s += n;
183
+       }
184
+   }
185
+
186
+   return s;
187
+}
188
ncmpc-0.32.tar.xz/src/util/LocaleString.hxx Added
102
 
1
@@ -0,0 +1,100 @@
2
+/*
3
+ * Copyright 2018 Max Kellermann <max.kellermann@gmail.com>
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
8
+ *
9
+ * - Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ *
12
+ * - Redistributions in binary form must reproduce the above copyright
13
+ * notice, this list of conditions and the following disclaimer in the
14
+ * documentation and/or other materials provided with the
15
+ * distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
21
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+
31
+#ifndef LOCALE_STRING_HXX
32
+#define LOCALE_STRING_HXX
33
+
34
+#include "Compiler.h"
35
+
36
+#include <cstddef>
37
+
38
+/**
39
+ * Is the given character incomplete?
40
+ */
41
+gcc_pure
42
+bool
43
+IsIncompleteCharMB(const char *s, size_t n) noexcept;
44
+
45
+/**
46
+ * Returns the length of the given locale (multi-byte) string in
47
+ * characters.
48
+ */
49
+gcc_pure
50
+std::size_t
51
+StringLengthMB(const char *s, size_t n) noexcept;
52
+
53
+/**
54
+ * Wrapper for std::mbrlen() which attempts to recover with a best
55
+ * effort from invalid or incomplete sequences.
56
+ */
57
+gcc_pure
58
+std::size_t
59
+CharSizeMB(const char *s, size_t n) noexcept;
60
+
61
+/**
62
+ * Determine the start of the character preceding the given reference.
63
+ *
64
+ * @param s the start of the string
65
+ */
66
+gcc_pure
67
+const char *
68
+PrevCharMB(const char *start, const char *reference) noexcept;
69
+
70
+/**
71
+ * Find the `i`th character of the given string.  Returns the end of
72
+ * the string if the string is shorter than `i` characters.
73
+ *
74
+ * @param s the start of the string
75
+ */
76
+gcc_pure
77
+const char *
78
+AtCharMB(const char *s, size_t length, size_t i) noexcept;
79
+
80
+/**
81
+ * Returns the number of terminal cells occupied by this multi-byte
82
+ * string.
83
+ */
84
+gcc_pure
85
+size_t
86
+StringWidthMB(const char *s, size_t length) noexcept;
87
+
88
+gcc_pure
89
+size_t
90
+StringWidthMB(const char *s) noexcept;
91
+
92
+/**
93
+ * Find the first character which doesn't fully fit into the given width.
94
+ *
95
+ * @param s the start of the string
96
+ */
97
+gcc_pure
98
+const char *
99
+AtWidthMB(const char *s, size_t length, size_t width) noexcept;
100
+
101
+#endif
102
ncmpc-0.32.tar.xz/src/util/ScopeExit.hxx Added
89
 
1
@@ -0,0 +1,87 @@
2
+/*
3
+ * Copyright (C) 2015 Max Kellermann <max.kellermann@gmail.com>
4
+ *
5
+ * Redistribution and use in source and binary forms, with or without
6
+ * modification, are permitted provided that the following conditions
7
+ * are met:
8
+ *
9
+ * - Redistributions of source code must retain the above copyright
10
+ * notice, this list of conditions and the following disclaimer.
11
+ *
12
+ * - Redistributions in binary form must reproduce the above copyright
13
+ * notice, this list of conditions and the following disclaimer in the
14
+ * documentation and/or other materials provided with the
15
+ * distribution.
16
+ *
17
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
20
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
21
+ * FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
22
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
24
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
28
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
29
+ */
30
+
31
+#ifndef SCOPE_EXIT_HXX
32
+#define SCOPE_EXIT_HXX
33
+
34
+#include <utility>
35
+
36
+/**
37
+ * Internal class.  Do not use directly.
38
+ */
39
+template<typename F>
40
+class ScopeExitGuard : F {
41
+   bool enabled = true;
42
+
43
+public:
44
+   explicit ScopeExitGuard(F &&f):F(std::forward<F>(f)) {}
45
+
46
+   ScopeExitGuard(ScopeExitGuard &&src)
47
+       :F(std::move(src)), enabled(src.enabled) {
48
+       src.enabled = false;
49
+   }
50
+
51
+   ~ScopeExitGuard() {
52
+       if (enabled)
53
+           F::operator()();
54
+   }
55
+
56
+   ScopeExitGuard(const ScopeExitGuard &) = delete;
57
+   ScopeExitGuard &operator=(const ScopeExitGuard &) = delete;
58
+};
59
+
60
+/**
61
+ * Internal class.  Do not use directly.
62
+ */
63
+struct ScopeExitTag {
64
+   /* this operator is a trick so we don't need to close
65
+      parantheses at the end of the expression AtScopeExit()
66
+      call */
67
+   template<typename F>
68
+   ScopeExitGuard<F> operator+(F &&f) {
69
+       return ScopeExitGuard<F>(std::forward<F>(f));
70
+   }
71
+};
72
+
73
+#define ScopeExitCat(a, b) a ## b
74
+#define ScopeExitName(line) ScopeExitCat(at_scope_exit_, line)
75
+
76
+/**
77
+ * Call the block after this macro at the end of the current scope.
78
+ * Parameters are lambda captures.
79
+ *
80
+ * This is exception-safe, however the given code block must not throw
81
+ * exceptions.
82
+ *
83
+ * This attempts to be a better boost/scope_exit.hpp, without all of
84
+ * Boost's compile-time and runtime bloat.
85
+ */
86
+#define AtScopeExit(...) auto ScopeExitName(__LINE__) = ScopeExitTag() + [__VA_ARGS__]()
87
+
88
+#endif
89
ncmpc-0.30.tar.xz/src/util/StringStrip.cxx -> ncmpc-0.32.tar.xz/src/util/StringStrip.cxx Changed
8
 
1
@@ -1,5 +1,5 @@
2
 /*
3
- * Copyright (C) 2009-2017 Max Kellermann <max.kellermann@gmail.com>
4
+ * Copyright 2009-2018 Max Kellermann <max.kellermann@gmail.com>
5
  *
6
  * Redistribution and use in source and binary forms, with or without
7
  * modification, are permitted provided that the following conditions
8
ncmpc-0.30.tar.xz/src/util/StringStrip.hxx -> ncmpc-0.32.tar.xz/src/util/StringStrip.hxx Changed
81
 
1
@@ -1,5 +1,5 @@
2
 /*
3
- * Copyright (C) 2009-2017 Max Kellermann <max.kellermann@gmail.com>
4
+ * Copyright 2009-2018 Max Kellermann <max.kellermann@gmail.com>
5
  *
6
  * Redistribution and use in source and binary forms, with or without
7
  * modification, are permitted provided that the following conditions
8
@@ -35,35 +35,41 @@
9
 #include <stddef.h>
10
 
11
 /**
12
- * Returns a pointer to the first non-whitespace character in the
13
- * string, or to the end of the string.
14
+ * Skips whitespace at the beginning of the string, and returns the
15
+ * first non-whitespace character.  If the string has no
16
+ * non-whitespace characters, then a pointer to the NULL terminator is
17
+ * returned.
18
  */
19
-gcc_pure
20
+gcc_pure gcc_returns_nonnull gcc_nonnull_all
21
 const char *
22
 StripLeft(const char *p) noexcept;
23
 
24
-gcc_pure
25
+gcc_pure gcc_returns_nonnull gcc_nonnull_all
26
 static inline char *
27
 StripLeft(char *p) noexcept
28
 {
29
    return const_cast<char *>(StripLeft((const char *)p));
30
 }
31
 
32
-gcc_pure
33
+/**
34
+ * Skips whitespace at the beginning of the string, and returns the
35
+ * first non-whitespace character or the end pointer.
36
+ */
37
+gcc_pure gcc_returns_nonnull gcc_nonnull_all
38
 const char *
39
 StripLeft(const char *p, const char *end) noexcept;
40
 
41
 /**
42
  * Determine the string's end as if it was stripped on the right side.
43
  */
44
-gcc_pure
45
+gcc_pure gcc_returns_nonnull gcc_nonnull_all
46
 const char *
47
 StripRight(const char *p, const char *end) noexcept;
48
 
49
 /**
50
  * Determine the string's end as if it was stripped on the right side.
51
  */
52
-gcc_pure
53
+gcc_pure gcc_returns_nonnull gcc_nonnull_all
54
 static inline char *
55
 StripRight(char *p, char *end) noexcept
56
 {
57
@@ -75,13 +81,14 @@
58
  * Determine the string's length as if it was stripped on the right
59
  * side.
60
  */
61
-gcc_pure
62
+gcc_pure gcc_nonnull_all
63
 size_t
64
 StripRight(const char *p, size_t length) noexcept;
65
 
66
 /**
67
  * Strip trailing whitespace by null-terminating the string.
68
  */
69
+gcc_nonnull_all
70
 void
71
 StripRight(char *p) noexcept;
72
 
73
@@ -89,6 +96,7 @@
74
  * Skip whitespace at the beginning and terminate the string after the
75
  * last non-whitespace character.
76
  */
77
+gcc_returns_nonnull gcc_nonnull_all
78
 char *
79
 Strip(char *p) noexcept;
80
 
81
ncmpc-0.32.tar.xz/src/util/StringUTF8.cxx Added
73
 
1
@@ -0,0 +1,71 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "StringUTF8.hxx"
22
+
23
+#include <string.h>
24
+
25
+#ifdef HAVE_LOCALE_T
26
+#include <langinfo.h>
27
+#include <locale.h>
28
+
29
+static locale_t utf8_locale = locale_t(0);
30
+
31
+ScopeInitUTF8::ScopeInitUTF8() noexcept
32
+{
33
+   const char *charset = nl_langinfo(CODESET);
34
+   if (charset == nullptr || strcasecmp(charset, "utf-8") == 0)
35
+       /* if we're already UTF-8, we don't need a special
36
+          UTF-8 locale */
37
+       return;
38
+
39
+   locale_t l = duplocale(LC_GLOBAL_LOCALE);
40
+   if (l == locale_t(0))
41
+       return;
42
+
43
+   locale_t l2 = newlocale(LC_COLLATE_MASK, "en_US.UTF-8", l);
44
+   if (l2 == locale_t(0)) {
45
+       freelocale(l);
46
+       return;
47
+   }
48
+
49
+   utf8_locale = l2;
50
+}
51
+
52
+ScopeInitUTF8::~ScopeInitUTF8() noexcept
53
+{
54
+   if (utf8_locale != locale_t(0)) {
55
+       freelocale(utf8_locale);
56
+       utf8_locale = locale_t(0);
57
+   }
58
+}
59
+
60
+#endif
61
+
62
+gcc_pure
63
+int
64
+CollateUTF8(const char *a, const char *b)
65
+{
66
+#ifdef HAVE_LOCALE_T
67
+   if (utf8_locale != locale_t(0))
68
+       return strcoll_l(a, b, utf8_locale);
69
+#endif
70
+
71
+   return strcoll(a, b);
72
+}
73
ncmpc-0.32.tar.xz/src/util/StringUTF8.hxx Added
43
 
1
@@ -0,0 +1,41 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef STRING_UTF8_HXX
22
+#define STRING_UTF8_HXX
23
+
24
+#include "config.h"
25
+#include "Compiler.h"
26
+
27
+class ScopeInitUTF8 {
28
+#ifdef HAVE_LOCALE_T
29
+public:
30
+   ScopeInitUTF8() noexcept;
31
+   ~ScopeInitUTF8() noexcept;
32
+
33
+   ScopeInitUTF8(const ScopeInitUTF8 &) = delete;
34
+   ScopeInitUTF8 &operator=(const ScopeInitUTF8 &) = delete;
35
+#endif
36
+};
37
+
38
+gcc_pure
39
+int
40
+CollateUTF8(const char *a, const char *b);
41
+
42
+#endif
43
ncmpc-0.32.tar.xz/src/util/UriUtil.cxx Added
40
 
1
@@ -0,0 +1,38 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#include "UriUtil.hxx"
22
+
23
+#include <string.h>
24
+
25
+const char *
26
+GetUriFilename(const char *uri)
27
+{
28
+   const char *slash = strrchr(uri, '/');
29
+   return slash != nullptr ? slash + 1 : uri;
30
+}
31
+
32
+std::string
33
+GetParentUri(const char *uri)
34
+{
35
+   const char *slash = strrchr(uri, '/');
36
+   if (slash == nullptr)
37
+       slash = uri;
38
+   return std::string(uri, slash);
39
+}
40
ncmpc-0.32.tar.xz/src/util/UriUtil.hxx Added
47
 
1
@@ -0,0 +1,45 @@
2
+/* ncmpc (Ncurses MPD Client)
3
+ * (c) 2004-2018 The Music Player Daemon Project
4
+ * Project homepage: http://musicpd.org
5
+ *
6
+ * This program is free software; you can redistribute it and/or modify
7
+ * it under the terms of the GNU General Public License as published by
8
+ * the Free Software Foundation; either version 2 of the License, or
9
+ * (at your option) any later version.
10
+ *
11
+ * This program is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
+ * GNU General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU General Public License along
17
+ * with this program; if not, write to the Free Software Foundation, Inc.,
18
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19
+ */
20
+
21
+#ifndef URI_UTIL_HXX
22
+#define URI_UTIL_HXX
23
+
24
+#include "Compiler.h"
25
+
26
+#include <string>
27
+
28
+/**
29
+ * Determins the last segment of the given URI path, i.e. the portion
30
+ * after the last slash.  May return an empty string if the URI ends
31
+ * with a slash.
32
+ */
33
+gcc_pure
34
+const char *
35
+GetUriFilename(const char *uri);
36
+
37
+/**
38
+ * Return the "parent directory" of the given URI path, i.e. the
39
+ * portion up to the last (forward) slash.  Returns an empty string if
40
+ * there is no parent.
41
+ */
42
+gcc_pure
43
+std::string
44
+GetParentUri(const char *uri);
45
+
46
+#endif
47
ncmpc-0.30.tar.xz/src/wreadln.cxx -> ncmpc-0.32.tar.xz/src/wreadln.cxx Changed
546
 
1
@@ -23,13 +23,15 @@
2
 #include "screen_utils.hxx"
3
 #include "Point.hxx"
4
 #include "config.h"
5
+#include "util/LocaleString.hxx"
6
+
7
+#include <string>
8
 
9
 #include <assert.h>
10
 #include <stdlib.h>
11
 #include <string.h>
12
-#include <glib.h>
13
 
14
-#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32)
15
+#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32)
16
 #include <sys/poll.h>
17
 #endif
18
 
19
@@ -72,27 +74,44 @@
20
    /** the current value */
21
    std::string value;
22
 
23
-   wreadln(WINDOW *_w, bool _masked)
24
+   wreadln(WINDOW *_w, bool _masked) noexcept
25
        :w(_w), masked(_masked) {}
26
+
27
+   /** draw line buffer and update cursor position */
28
+   void Paint() const noexcept;
29
+
30
+   /** returns the screen column where the cursor is located */
31
+   gcc_pure
32
+   unsigned GetCursorColumn() const noexcept;
33
+
34
+   /** move the cursor one step to the right */
35
+   void MoveCursorRight() noexcept;
36
+
37
+   /** move the cursor one step to the left */
38
+   void MoveCursorLeft() noexcept;
39
+
40
+   /** move the cursor to the end of the line */
41
+   void MoveCursorToEnd() noexcept;
42
+
43
+   void InsertByte(int key) noexcept;
44
+   void DeleteChar(size_t x) noexcept;
45
+   void DeleteChar() noexcept {
46
+       DeleteChar(cursor);
47
+   }
48
 };
49
 
50
 /** max items stored in the history list */
51
-static const guint wrln_max_history_length = 32;
52
+static constexpr std::size_t wrln_max_history_length = 32;
53
 
54
 /** converts a byte position to a screen column */
55
+gcc_pure
56
 static unsigned
57
-byte_to_screen(const char *data, size_t x)
58
+byte_to_screen(const char *data, size_t x) noexcept
59
 {
60
 #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)
61
    assert(x <= strlen(data));
62
 
63
-   char *dup = g_strndup(data, x);
64
-   char *p = replace_locale_to_utf8(dup);
65
-
66
-   unsigned width = utf8_width(p);
67
-   g_free(p);
68
-
69
-   return width;
70
+   return StringWidthMB(data, x);
71
 #else
72
    (void)data;
73
 
74
@@ -101,25 +120,20 @@
75
 }
76
 
77
 /** finds the first character which doesn't fit on the screen */
78
+gcc_pure
79
 static size_t
80
-screen_to_bytes(const char *data, unsigned width)
81
+screen_to_bytes(const char *data, unsigned width) noexcept
82
 {
83
 #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)
84
    size_t length = strlen(data);
85
-   char *dup = g_strdup(data);
86
 
87
    while (true) {
88
-       dup[length] = 0;
89
-       unsigned p_width = locale_width(dup);
90
+       unsigned p_width = StringWidthMB(data, length);
91
        if (p_width <= width)
92
-           break;
93
+           return length;
94
 
95
        --length;
96
    }
97
-
98
-   g_free(dup);
99
-
100
-   return length;
101
 #else
102
    (void)data;
103
 
104
@@ -127,44 +141,30 @@
105
 #endif
106
 }
107
 
108
-/** returns the screen column where the cursor is located */
109
-static unsigned
110
-cursor_column(const struct wreadln *wr)
111
+unsigned
112
+wreadln::GetCursorColumn() const noexcept
113
 {
114
-   return byte_to_screen(wr->value.data() + wr->start,
115
-                 wr->cursor - wr->start);
116
+   return byte_to_screen(value.data() + start, cursor - start);
117
 }
118
 
119
 /** returns the offset in the string to align it at the right border
120
     of the screen */
121
+gcc_pure
122
 static inline size_t
123
-right_align_bytes(const char *data, size_t right, unsigned width)
124
+right_align_bytes(const char *data, size_t right, unsigned width) noexcept
125
 {
126
 #if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)
127
    size_t start = 0;
128
 
129
    assert(right <= strlen(data));
130
 
131
-   char *dup = g_strndup(data, right);
132
-
133
-   while (dup[start] != 0) {
134
-       char *p = locale_to_utf8(dup + start);
135
-       unsigned p_width = utf8_width(p);
136
-
137
-       if (p_width < width) {
138
-           g_free(p);
139
+   while (start < right) {
140
+       if (StringWidthMB(data + start, right - start) < width)
141
            break;
142
-       }
143
-
144
-       gunichar c = g_utf8_get_char(p);
145
-       p[g_unichar_to_utf8(c, nullptr)] = 0;
146
 
147
-       start += strlen(Utf8ToLocale(p).c_str());
148
-       g_free(p);
149
+       start += CharSizeMB(data + start, right - start);
150
    }
151
 
152
-   g_free(dup);
153
-
154
    return start;
155
 #else
156
    (void)data;
157
@@ -173,130 +173,61 @@
158
 #endif
159
 }
160
 
161
-/** returns the size (in bytes) of the next character */
162
-static inline size_t
163
-next_char_size(const char *data)
164
+void
165
+wreadln::MoveCursorRight() noexcept
166
 {
167
-#if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)
168
-   char *p = locale_to_utf8(data);
169
-
170
-   gunichar c = g_utf8_get_char(p);
171
-   p[g_unichar_to_utf8(c, nullptr)] = 0;
172
-   size_t size = strlen(Utf8ToLocale(p).c_str());
173
-   g_free(p);
174
-
175
-   return size;
176
-#else
177
-   (void)data;
178
-
179
-   return 1;
180
-#endif
181
-}
182
-
183
-/** returns the size (in bytes) of the previous character */
184
-static inline size_t
185
-prev_char_size(const char *data, size_t x)
186
-{
187
-#if defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)
188
-   assert(x > 0);
189
-
190
-   char *p = locale_to_utf8(data);
191
-
192
-   char *q = p;
193
-   while (true) {
194
-       gunichar c = g_utf8_get_char(q);
195
-       size_t size = g_unichar_to_utf8(c, nullptr);
196
-       if (size > x)
197
-           size = x;
198
-       x -= size;
199
-       if (x == 0) {
200
-           g_free(p);
201
-           return size;
202
-       }
203
-
204
-       q += size;
205
-   }
206
-#else
207
-   (void)data;
208
-   (void)x;
209
-
210
-   return 1;
211
-#endif
212
-}
213
-
214
-/* move the cursor one step to the right */
215
-static inline void cursor_move_right(struct wreadln *wr)
216
-{
217
-   if (wr->cursor == wr->value.length())
218
+   if (cursor == value.length())
219
        return;
220
 
221
-   size_t size = next_char_size(wr->value.data() + wr->cursor);
222
-   wr->cursor += size;
223
-   if (cursor_column(wr) >= wr->width)
224
-       wr->start = right_align_bytes(wr->value.c_str(),
225
-                         wr->cursor, wr->width);
226
+   size_t size = CharSizeMB(value.data() + cursor,
227
+                value.length() - cursor);
228
+   cursor += size;
229
+   if (GetCursorColumn() >= width)
230
+       start = right_align_bytes(value.c_str(), cursor, width);
231
 }
232
 
233
-/* move the cursor one step to the left */
234
-static inline void cursor_move_left(struct wreadln *wr)
235
+void
236
+wreadln::MoveCursorLeft() noexcept
237
 {
238
-   if (wr->cursor == 0)
239
-       return;
240
-
241
-   size_t size = prev_char_size(wr->value.c_str(), wr->cursor);
242
-   assert(wr->cursor >= size);
243
-   wr->cursor -= size;
244
-   if (wr->cursor < wr->start)
245
-       wr->start = wr->cursor;
246
+   const char *v = value.c_str();
247
+   const char *new_cursor = PrevCharMB(v, v + cursor);
248
+   cursor = new_cursor - v;
249
+   if (cursor < start)
250
+       start = cursor;
251
 }
252
 
253
-/* move the cursor to the end of the line */
254
-static inline void cursor_move_to_eol(struct wreadln *wr)
255
+void
256
+wreadln::MoveCursorToEnd() noexcept
257
 {
258
-   wr->cursor = wr->value.length();
259
-   if (cursor_column(wr) >= wr->width)
260
-       wr->start = right_align_bytes(wr->value.c_str(),
261
-                         wr->cursor, wr->width);
262
+   cursor = value.length();
263
+   if (GetCursorColumn() >= width)
264
+       start = right_align_bytes(value.c_str(),
265
+                         cursor, width);
266
 }
267
 
268
-/* draw line buffer and update cursor position */
269
-static inline void drawline(const struct wreadln *wr)
270
+void
271
+wreadln::Paint() const noexcept
272
 {
273
-   wmove(wr->w, wr->point.y, wr->point.x);
274
+   wmove(w, point.y, point.x);
275
    /* clear input area */
276
-   whline(wr->w, ' ', wr->width);
277
+   whline(w, ' ', width);
278
    /* print visible part of the line buffer */
279
-   if (wr->masked)
280
-       whline(wr->w, '*', utf8_width(wr->value.c_str() + wr->start));
281
+   if (masked)
282
+       whline(w, '*', StringWidthMB(value.c_str() + start));
283
    else
284
-       waddnstr(wr->w, wr->value.c_str() + wr->start,
285
-            screen_to_bytes(wr->value.c_str(), wr->width));
286
+       waddnstr(w, value.c_str() + start,
287
+            screen_to_bytes(value.c_str(), width));
288
    /* move the cursor to the correct position */
289
-   wmove(wr->w, wr->point.y, wr->point.x + cursor_column(wr));
290
+   wmove(w, point.y, point.x + GetCursorColumn());
291
    /* tell ncurses to redraw the screen */
292
    doupdate();
293
 }
294
 
295
-#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(WIN32)
296
-static bool
297
-multibyte_is_complete(const char *p, size_t length)
298
-{
299
-   char *q = g_locale_to_utf8(p, length,
300
-                  nullptr, nullptr, nullptr);
301
-   if (q != nullptr) {
302
-       g_free(q);
303
-       return true;
304
-   } else {
305
-       return false;
306
-   }
307
-}
308
-#endif
309
-
310
-static void
311
-wreadln_insert_byte(struct wreadln *wr, gint key)
312
+void
313
+wreadln::InsertByte(int key) noexcept
314
 {
315
    size_t length = 1;
316
-#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined (WIN32)
317
+#if (defined(HAVE_CURSES_ENHANCED) || defined(ENABLE_MULTIBYTE)) && !defined(_WIN32)
318
    char buffer[32] = { (char)key };
319
    struct pollfd pfd = {
320
        .fd = 0,
321
@@ -307,7 +238,7 @@
322
    /* wide version: try to complete the multibyte sequence */
323
 
324
    while (length < sizeof(buffer)) {
325
-       if (multibyte_is_complete(buffer, length))
326
+       if (!IsIncompleteCharMB(buffer, length))
327
            /* sequence is complete */
328
            break;
329
 
330
@@ -317,40 +248,38 @@
331
            /* no more input from keyboard */
332
            break;
333
 
334
-       buffer[length++] = wgetch(wr->w);
335
+       buffer[length++] = wgetch(w);
336
    }
337
 
338
-   wr->value.insert(wr->cursor, buffer, length);
339
+   value.insert(cursor, buffer, length);
340
 
341
 #else
342
-   wr->value.insert(wr->cursor, key);
343
+   value.insert(cursor, key);
344
 #endif
345
 
346
-   wr->cursor += length;
347
-   if (cursor_column(wr) >= wr->width)
348
-       wr->start = right_align_bytes(wr->value.c_str(),
349
-                         wr->cursor, wr->width);
350
+   cursor += length;
351
+   if (GetCursorColumn() >= width)
352
+       start = right_align_bytes(value.c_str(), cursor, width);
353
 }
354
 
355
-static void
356
-wreadln_delete_char(struct wreadln *wr, size_t x)
357
+void
358
+wreadln::DeleteChar(size_t x) noexcept
359
 {
360
-   assert(x < wr->value.length());
361
+   assert(x < value.length());
362
 
363
-   size_t length = next_char_size(&wr->value[x]);
364
-   wr->value.erase(x, length);
365
+   size_t length = CharSizeMB(value.data() + x, value.length() - x);
366
+   value.erase(x, length);
367
 }
368
 
369
 /* libcurses version */
370
 
371
 static std::string
372
 _wreadln(WINDOW *w,
373
-    const char *prompt,
374
     const char *initial_value,
375
     unsigned x1,
376
     History *history,
377
     Completion *completion,
378
-    bool masked)
379
+    bool masked) noexcept
380
 {
381
    struct wreadln wr(w, masked);
382
    History::iterator hlist, hcurrent;
383
@@ -359,15 +288,8 @@
384
    (void)completion;
385
 #endif
386
 
387
-   /* turn off echo */
388
-   noecho();
389
    /* make sure the cursor is visible */
390
    curs_set(1);
391
-   /* print prompt string */
392
-   if (prompt) {
393
-       waddstr(w, prompt);
394
-       waddstr(w, ": ");
395
-   }
396
    /* retrieve y and x0 position */
397
    getyx(w, wr.point.y, wr.point.x);
398
    /* check the x1 value */
399
@@ -391,16 +313,16 @@
400
            --hlist;
401
            wr.value = *hlist;
402
        }
403
-       cursor_move_to_eol(&wr);
404
-       drawline(&wr);
405
+       wr.MoveCursorToEnd();
406
+       wr.Paint();
407
    } else if (initial_value) {
408
        /* copy the initial value to the line buffer */
409
        wr.value = initial_value;
410
-       cursor_move_to_eol(&wr);
411
-       drawline(&wr);
412
+       wr.MoveCursorToEnd();
413
+       wr.Paint();
414
    }
415
 
416
-   gint key = 0;
417
+   int key = 0;
418
    while (key != 13 && key != '\n') {
419
        key = wgetch(w);
420
 
421
@@ -425,7 +347,7 @@
422
                auto r = completion->Complete(wr.value.c_str());
423
                if (!r.new_prefix.empty()) {
424
                    wr.value = std::move(r.new_prefix);
425
-                   cursor_move_to_eol(&wr);
426
+                   wr.MoveCursorToEnd();
427
                } else
428
                    screen_bell();
429
 
430
@@ -443,11 +365,11 @@
431
 
432
        case KEY_LEFT:
433
        case KEY_CTRL_B:
434
-           cursor_move_left(&wr);
435
+           wr.MoveCursorLeft();
436
            break;
437
        case KEY_RIGHT:
438
        case KEY_CTRL_F:
439
-           cursor_move_right(&wr);
440
+           wr.MoveCursorRight();
441
            break;
442
        case KEY_HOME:
443
        case KEY_CTRL_A:
444
@@ -456,7 +378,7 @@
445
            break;
446
        case KEY_END:
447
        case KEY_CTRL_E:
448
-           cursor_move_to_eol(&wr);
449
+           wr.MoveCursorToEnd();
450
            break;
451
        case KEY_CTRL_K:
452
            wr.value.erase(wr.cursor);
453
@@ -469,28 +391,28 @@
454
            /* Firstly remove trailing spaces. */
455
            for (; wr.cursor > 0 && wr.value[wr.cursor - 1] == ' ';)
456
            {
457
-               cursor_move_left(&wr);
458
-               wreadln_delete_char(&wr, wr.cursor);
459
+               wr.MoveCursorLeft();
460
+               wr.DeleteChar();
461
            }
462
            /* Then remove word until next space. */
463
            for (; wr.cursor > 0 && wr.value[wr.cursor - 1] != ' ';)
464
            {
465
-               cursor_move_left(&wr);
466
-               wreadln_delete_char(&wr, wr.cursor);
467
+               wr.MoveCursorLeft();
468
+               wr.DeleteChar();
469
            }
470
            break;
471
        case 127:
472
        case KEY_BCKSPC:    /* handle backspace: copy all */
473
        case KEY_BACKSPACE: /* chars starting from curpos */
474
            if (wr.cursor > 0) { /* - 1 from buf[n+1] to buf   */
475
-               cursor_move_left(&wr);
476
-               wreadln_delete_char(&wr, wr.cursor);
477
+               wr.MoveCursorLeft();
478
+               wr.DeleteChar();
479
            }
480
            break;
481
        case KEY_DC:        /* handle delete key. As above */
482
        case KEY_CTRL_D:
483
            if (wr.cursor < wr.value.length())
484
-               wreadln_delete_char(&wr, wr.cursor);
485
+               wr.DeleteChar();
486
            break;
487
        case KEY_UP:
488
        case KEY_CTRL_P:
489
@@ -504,7 +426,7 @@
490
                --hlist;
491
                wr.value = *hlist;
492
            }
493
-           cursor_move_to_eol(&wr);
494
+           wr.MoveCursorToEnd();
495
            break;
496
        case KEY_DOWN:
497
        case KEY_CTRL_N:
498
@@ -514,7 +436,7 @@
499
                ++hlist;
500
                wr.value = *hlist;
501
            }
502
-           cursor_move_to_eol(&wr);
503
+           wr.MoveCursorToEnd();
504
            break;
505
 
506
        case '\n':
507
@@ -527,10 +449,10 @@
508
            break;
509
        default:
510
            if (key >= 32)
511
-               wreadln_insert_byte(&wr, key);
512
+               wr.InsertByte(key);
513
        }
514
 
515
-       drawline(&wr);
516
+       wr.Paint();
517
    }
518
 
519
    /* update history */
520
@@ -555,21 +477,19 @@
521
 
522
 std::string
523
 wreadln(WINDOW *w,
524
-   const char *prompt,
525
    const char *initial_value,
526
    unsigned x1,
527
    History *history,
528
-   Completion *completion)
529
+   Completion *completion) noexcept
530
 {
531
-   return  _wreadln(w, prompt, initial_value, x1,
532
+   return  _wreadln(w, initial_value, x1,
533
             history, completion, false);
534
 }
535
 
536
 std::string
537
 wreadln_masked(WINDOW *w,
538
-          const char *prompt,
539
           const char *initial_value,
540
-          unsigned x1)
541
+          unsigned x1) noexcept
542
 {
543
-   return  _wreadln(w, prompt, initial_value, x1, nullptr, nullptr, true);
544
+   return  _wreadln(w, initial_value, x1, nullptr, nullptr, true);
545
 }
546
ncmpc-0.30.tar.xz/src/wreadln.hxx -> ncmpc-0.32.tar.xz/src/wreadln.hxx Changed
52
 
1
@@ -20,30 +20,36 @@
2
 #ifndef WREADLN_H
3
 #define WREADLN_H
4
 
5
-#include "config.h"
6
 #include "History.hxx"
7
-#include "ncmpc_curses.h"
8
+
9
+#include <curses.h>
10
 
11
 #include <string>
12
 
13
 class Completion;
14
 
15
-/* Note, wreadln calls curs_set() and noecho(), to enable cursor and
16
- * disable echo. wreadln will not restore these settings when exiting! */
17
+/**
18
+ *
19
+ * This function calls curs_set(1), to enable cursor.  It will not
20
+ * restore this settings when exiting.
21
+ *
22
+ * @param the curses window to use
23
+ * @param initial_value initial value or nullptr for a empty line;
24
+ * (char *) -1 = get value from history
25
+ * @param x1 the maximum x position or 0
26
+ * @param history a pointer to a history list or nullptr
27
+ * @param a #Completion instance or nullptr
28
+ */
29
 std::string
30
-wreadln(WINDOW *w,            /* the curses window to use */
31
-   const char *prompt, /* the prompt string or nullptr */
32
-   const char *initial_value, /* initial value or nullptr for a empty line
33
-                   * (char *) -1 = get value from history */
34
-   unsigned x1,              /* the maximum x position or 0 */
35
-   History *history, /* a pointer to a history list or nullptr */
36
-   Completion *completion    /* a GCompletion structure or nullptr */
37
-   );
38
+wreadln(WINDOW *w,
39
+   const char *initial_value,
40
+   unsigned x1,
41
+   History *history,
42
+   Completion *completion) noexcept;
43
 
44
 std::string
45
 wreadln_masked(WINDOW *w,
46
-          const char *prompt,
47
           const char *initial_value,
48
-          unsigned x1);
49
+          unsigned x1) noexcept;
50
 
51
 #endif
52
ncmpc-0.30.tar.xz/src/xterm_title.cxx -> ncmpc-0.32.tar.xz/src/xterm_title.cxx Changed
10
 
1
@@ -18,7 +18,7 @@
2
  */
3
 
4
 #include "xterm_title.hxx"
5
-#include "options.hxx"
6
+#include "Options.hxx"
7
 
8
 #include <stdio.h>
9
 #include <stdlib.h>
10
ncmpc-0.30.tar.xz/test/meson.build -> ncmpc-0.32.tar.xz/test/meson.build Changed
13
 
1
@@ -3,10 +3,7 @@
2
   'run_hscroll.cxx',
3
   objects: ncmpc.extract_objects(
4
     'src/BasicMarquee.cxx',
5
-    'src/charset.cxx',
6
+    'src/util/LocaleString.cxx',
7
   ),
8
   include_directories: inc,
9
-  dependencies: [
10
-    glib_dep,
11
-  ],
12
 )
13
ncmpc-0.30.tar.xz/test/run_hscroll.cxx -> ncmpc-0.32.tar.xz/test/run_hscroll.cxx Changed
37
 
1
@@ -1,20 +1,20 @@
2
 #include "BasicMarquee.hxx"
3
 #include "config.h"
4
 
5
-#include <glib.h>
6
 #include <stdlib.h>
7
 
8
 #ifdef ENABLE_LOCALE
9
 #include <locale.h>
10
 #endif
11
 
12
+#include <stdio.h>
13
+
14
 int main(int argc, char **argv)
15
 {
16
-   char *p;
17
    unsigned width, count;
18
 
19
    if (argc != 5) {
20
-       g_printerr("Usage: %s TEXT SEPARATOR WIDTH COUNT\n", argv[0]);
21
+       fprintf(stderr, "Usage: %s TEXT SEPARATOR WIDTH COUNT\n", argv[0]);
22
        return 1;
23
    }
24
 
25
@@ -29,9 +29,8 @@
26
    hscroll.Set(width, argv[1]);
27
 
28
    for (unsigned i = 0; i < count; ++i) {
29
-       p = hscroll.ScrollString();
30
-       g_print("%s\n", p);
31
-       g_free(p);
32
+       const auto s = hscroll.ScrollString();
33
+       fprintf(stderr, "%.*s\n", int(s.second), s.first);
34
 
35
        hscroll.Step();
36
    }
37
ncmpc-0.30.tar.xz/valgrind.suppressions -> ncmpc-0.32.tar.xz/valgrind.suppressions Changed
501
 
1
@@ -1,484 +1,38 @@
2
-# GLib allocates a lot of memory which is never freed, and this makes
3
-# it too hard to read valgrind memcheck results.  You can pass this
4
-# file with "--suppressions=valgrind.suppressions" to disable lots of
5
-# bogus messages.
6
-
7
-{
8
-   g_main_context_dispatch
9
-   Memcheck:Leak
10
-   fun:malloc
11
-   fun:g_malloc
12
-   fun:g_slice_alloc
13
-   fun:g_slice_alloc0
14
-   fun:get_dispatch
15
-   fun:g_main_context_dispatch
16
-}
17
-
18
-{
19
-   g_main_context_default
20
-   Memcheck:Leak
21
-   fun:malloc
22
-   fun:g_malloc
23
-   fun:g_slice_alloc
24
-   fun:g_slist_append
25
-   fun:g_main_context_new
26
-   fun:g_main_context_default
27
-}
28
-
29
-{
30
-   g_main_context_default
31
-   Memcheck:Leak
32
-   fun:malloc
33
-   fun:g_malloc
34
-   fun:g_slice_alloc
35
-   fun:g_ptr_array_sized_new
36
-   fun:g_main_context_new
37
-   fun:g_main_context_default
38
-}
39
-
40
-{
41
-   g_main_context_default
42
-   Memcheck:Leak
43
-   fun:calloc
44
-   fun:g_malloc0
45
-   fun:g_main_context_new
46
-   fun:g_main_context_default
47
-}
48
-
49
-{
50
-   g_main_context_default
51
-   Memcheck:Leak
52
-   fun:malloc
53
-   fun:g_malloc
54
-   fun:g_slice_alloc
55
-   fun:g_main_context_add_poll_unlocked
56
-   fun:g_main_context_new
57
-   fun:g_main_context_default
58
-}
59
-
60
-{
61
-   g_main_context_default
62
-   Memcheck:Leak
63
-   fun:malloc
64
-   fun:g_malloc
65
-   fun:g_slice_alloc
66
-   fun:g_slist_prepend
67
-   fun:g_main_context_new
68
-   fun:g_main_context_default
69
-}
70
-
71
-{
72
-   g_main_loop_run
73
-   Memcheck:Leak
74
-   fun:malloc
75
-   fun:g_malloc
76
-   fun:g_main_context_iterate
77
-   fun:g_main_loop_run
78
-   fun:main
79
-}
80
-
81
-{
82
-   g_main_loop_run
83
-   Memcheck:Leak
84
-   fun:malloc
85
-   fun:realloc
86
-   fun:g_realloc
87
-   fun:g_ptr_array_maybe_expand
88
-   fun:g_ptr_array_add
89
-   fun:g_main_context_check
90
-   fun:g_main_context_iterate
91
-   fun:g_main_loop_run
92
-}
93
-
94
-{
95
-   g_get_language_names
96
-   Memcheck:Leak
97
-   fun:malloc
98
-   fun:g_malloc
99
-   fun:g_strdup
100
-   fun:g_get_language_names
101
-}
102
-
103
-{
104
-   g_get_language_names
105
-   Memcheck:Leak
106
-   fun:malloc
107
-   fun:g_malloc
108
-   fun:g_strconcat
109
-   fun:_g_compute_locale_variants
110
-   fun:g_get_language_names
111
-}
112
-
113
-{
114
-   g_get_language_names
115
-   Memcheck:Leak
116
-   fun:calloc
117
-   fun:g_malloc0
118
-   fun:g_get_language_names
119
-}
120
-
121
-{
122
-   g_get_language_names
123
-   Memcheck:Leak
124
-   fun:malloc
125
-   fun:g_malloc
126
-   fun:g_get_language_names
127
-}
128
-
129
-{
130
-   g_static_private_set
131
-   Memcheck:Leak
132
-   fun:realloc
133
-   fun:g_realloc
134
-   fun:g_array_maybe_expand
135
-   fun:g_array_set_size
136
-   fun:g_static_private_set
137
-}
138
-
139
-{
140
-   g_static_private_set
141
-   Memcheck:Leak
142
-   fun:malloc
143
-   fun:realloc
144
-   fun:g_realloc
145
-   fun:g_array_maybe_expand
146
-   fun:g_array_set_size
147
-   fun:g_static_private_set
148
-}
149
-
150
-{
151
-   g_get_language_names
152
-   Memcheck:Leak
153
-   fun:calloc
154
-   fun:g_malloc0
155
-   fun:g_hash_table_insert_internal
156
-   fun:g_get_language_names
157
-}
158
-
159
-{
160
-   g_get_language_names
161
-   Memcheck:Leak
162
-   fun:malloc
163
-   fun:g_malloc
164
-   fun:g_slice_alloc
165
-   fun:g_hash_table_insert_internal
166
-   fun:g_get_language_names
167
-}
168
-
169
-{
170
-   g_get_language_names
171
-   Memcheck:Leak
172
-   fun:malloc
173
-   fun:g_malloc
174
-   fun:g_slice_alloc
175
-   fun:g_hash_table_new_full
176
-   fun:g_get_language_names
177
-}
178
-
179
-{
180
-   g_set_prgname
181
-   Memcheck:Leak
182
-   fun:malloc
183
-   fun:g_malloc
184
-   fun:g_strdup
185
-   fun:g_set_prgname
186
-}
187
-
188
-{
189
-   g_thread_init_glib
190
-   Memcheck:Leak
191
-   fun:malloc
192
-   fun:g_malloc
193
-   fun:g_private_new_posix_impl
194
-   fun:_g_messages_thread_init_nomessage
195
-   fun:g_thread_init_glib
196
-}
197
-
198
-{
199
-   g_thread_init_glib
200
-   Memcheck:Leak
201
-   fun:malloc
202
-   fun:g_malloc
203
-   fun:g_private_new_posix_impl
204
-   fun:_g_slice_thread_init_nomessage
205
-   fun:g_thread_init_glib
206
-}
207
-
208
-{
209
-   g_slice_init_nomessage
210
-   Memcheck:Leak
211
-   fun:calloc
212
-   fun:g_malloc0
213
-   fun:g_slice_init_nomessage
214
-}
215
-
216
-{
217
-   g_thread_init_glib
218
-   Memcheck:Leak
219
-   fun:malloc
220
-   fun:g_malloc
221
-   fun:g_private_new_posix_impl
222
-   fun:g_thread_init_glib
223
-}
224
-
225
-{
226
-   g_thread_init_glib
227
-   Memcheck:Leak
228
-   fun:malloc
229
-   fun:g_malloc
230
-   fun:g_mutex_new_posix_impl
231
-   fun:_g_messages_thread_init_nomessage
232
-   fun:g_thread_init_glib
233
-}
234
-
235
-{
236
-   g_thread_init_glib
237
-   Memcheck:Leak
238
-   fun:calloc
239
-   fun:g_malloc0
240
-   fun:g_thread_self
241
-   fun:g_thread_init_glib
242
-}
243
-
244
-{
245
-   g_thread_init_glib
246
-   Memcheck:Leak
247
-   fun:malloc
248
-   fun:g_malloc
249
-   fun:g_mutex_new_posix_impl
250
-   fun:_g_slice_thread_init_nomessage
251
-   fun:g_thread_init_glib
252
-}
253
-
254
-{
255
-   g_thread_init_glib
256
-   Memcheck:Leak
257
-   fun:malloc
258
-   fun:g_malloc
259
-   fun:g_cond_new_posix_impl
260
-   fun:g_thread_init_glib
261
-}
262
-
263
-{
264
-   g_thread_init_glib
265
-   Memcheck:Leak
266
-   fun:malloc
267
-   fun:g_malloc
268
-   fun:g_mutex_new_posix_impl
269
-   fun:g_thread_init_glib
270
-}
271
-
272
-{
273
-   g_thread_init_glib
274
-   Memcheck:Leak
275
-   fun:malloc
276
-   fun:g_malloc
277
-   fun:g_mutex_new_posix_impl
278
-   fun:_g_mem_thread_init_noprivate_nomessage
279
-   fun:g_thread_init_glib
280
-}
281
-
282
-{
283
-   g_get_filename_charsets
284
-   Memcheck:Leak
285
-   fun:malloc
286
-   fun:g_malloc
287
-   fun:g_strdup
288
-   fun:g_get_filename_charsets
289
-}
290
-
291
-{
292
-   g_get_filename_charsets2
293
-   Memcheck:Leak
294
-   fun:calloc
295
-   fun:g_malloc0
296
-   fun:g_get_filename_charsets
297
-}
298
-
299
-{
300
-   g_static_private_set
301
-   Memcheck:Leak
302
-   fun:malloc
303
-   fun:g_malloc
304
-   fun:g_slice_alloc
305
-   fun:g_array_sized_new
306
-   fun:g_static_private_set
307
-}
308
-
309
-{
310
-   g_static_private_get
311
-   Memcheck:Leak
312
-   fun:calloc
313
-   fun:g_malloc0
314
-   fun:g_thread_self
315
-   fun:g_static_private_get
316
-}
317
-
318
-{
319
-   g_get_charset
320
-   Memcheck:Leak
321
-   fun:malloc
322
-   fun:g_malloc
323
-   fun:g_strdup
324
-   fun:g_get_charset
325
-}
326
-
327
-{
328
-   g_get_charset2
329
-   Memcheck:Leak
330
-   fun:calloc
331
-   fun:g_malloc0
332
-   fun:g_get_charset
333
-}
334
-
335
-{
336
-   g_quark_from_static_string
337
-   Memcheck:Leak
338
-   fun:calloc
339
-   fun:g_malloc0
340
-   fun:g_hash_table_new_full
341
-   fun:g_quark_from_static_string
342
-}
343
-
344
-{
345
-   g_quark_from_static_string
346
-   Memcheck:Leak
347
-   fun:malloc
348
-   fun:realloc
349
-   fun:g_realloc
350
-   fun:g_quark_from_static_string
351
-}
352
-
353
-{
354
-   g_quark_from_string
355
-   Memcheck:Leak
356
-   fun:malloc
357
-   fun:g_malloc
358
-   fun:g_strdup
359
-   fun:g_quark_from_string
360
-}
361
-
362
-{
363
-   g_quark_from_string
364
-   Memcheck:Leak
365
-   fun:calloc
366
-   fun:g_malloc0
367
-   fun:g_hash_table_new_full
368
-   fun:g_quark_from_string
369
-}
370
-
371
-{
372
-   g_quark_from_string
373
-   Memcheck:Leak
374
-   fun:malloc
375
-   fun:realloc
376
-   fun:g_realloc
377
-   fun:g_quark_from_string
378
-}
379
-
380
-{
381
-   g_get_any_init_do
382
-   Memcheck:Leak
383
-   fun:malloc
384
-   fun:g_malloc
385
-   fun:g_strdup
386
-   fun:g_get_any_init_do
387
-}
388
-
389
-{
390
-   g_get_any_init_do
391
-   Memcheck:Leak
392
-   fun:malloc
393
-   fun:g_malloc
394
-   fun:g_strjoinv
395
-   fun:g_get_any_init_do
396
-}
397
-
398
 {
399
    ncurses
400
    Memcheck:Leak
401
-   fun:malloc
402
-   fun:_nc_home_terminfo
403
-   fun:_nc_next_db
404
-   fun:_nc_read_entry
405
-   fun:grab_entry
406
-   fun:_nc_setupterm
407
-   fun:newterm
408
-   fun:ncu_init
409
-   fun:main
410
+   match-leak-kinds: reachable
411
+   fun:*alloc
412
+   ...
413
+   fun:_nc_setup_tinfo
414
 }
415
 
416
 {
417
    ncurses
418
    Memcheck:Leak
419
+   match-leak-kinds: reachable
420
    fun:realloc
421
-   fun:_nc_doalloc
422
-   fun:_nc_trace_alloc
423
-   fun:_nc_trace_buf
424
-   fun:_nc_visbuf2n
425
-   fun:recur_tries
426
-   fun:recur_tries
427
-   fun:recur_tries
428
-   fun:recur_tries
429
-   fun:recur_tries
430
-   fun:_nc_trace_tries
431
-   fun:_nc_keypad
432
-   fun:keypad
433
-}
434
-
435
-{
436
-   ncurses
437
-   Memcheck:Leak
438
-   fun:malloc
439
-   fun:_nc_trace_alloc
440
-   fun:_nc_trace_buf
441
-   fun:_nc_visbuf2n
442
-   fun:recur_tries
443
-   fun:recur_tries
444
-   fun:recur_tries
445
-   fun:_nc_trace_tries
446
-   fun:_nc_keypad
447
-   fun:keypad
448
-}
449
-
450
-{
451
-   ncurses
452
-   Memcheck:Leak
453
-   fun:calloc
454
-   fun:_nc_init_wacs
455
-}
456
-
457
-{
458
-   ncurses
459
-   Memcheck:Leak
460
-   fun:malloc
461
-   fun:_nc_set_buffer
462
-   fun:_nc_setupscreen
463
-   fun:newterm
464
-}
465
-
466
-{
467
-   ncurses
468
-   Memcheck:Leak
469
-   fun:realloc
470
-   fun:_nc_doalloc
471
+   ...
472
    fun:get_space
473
-   fun:save_number
474
-   fun:tparm
475
+   ...
476
+   fun:tparam_internal
477
 }
478
 
479
 {
480
    ncurses
481
    Memcheck:Leak
482
+   match-leak-kinds: reachable
483
    fun:realloc
484
-   fun:_nc_doalloc
485
+   ...
486
    fun:_nc_tparm_analyze
487
-   fun:tparm
488
+   fun:tparam_internal
489
 }
490
 
491
 {
492
    ncurses
493
    Memcheck:Leak
494
-   fun:malloc
495
-   fun:_nc_scroll_optimize
496
+   match-leak-kinds: reachable
497
+   fun:calloc
498
+   fun:_nc_build_names
499
+   fun:_nc_find_type_entry
500
 }
501
Refresh

No build results available

Refresh

No rpmlint results available


Aloysius wrote almost 7 years ago

Sorry, what is it that fails to build?


olh wrote almost 7 years ago

It is all red, while the variant in Multimedia is all green.


Aloysius wrote almost 7 years ago

The updated version requires a newer boost, would you be comfortable with linking it for 42.3 and SLE12?

Request History
Luigi Baldoni's avatar

Aloysius created request almost 7 years ago


Olaf Hering's avatar

olh declined request almost 7 years ago

fails to build with this change


Luigi Baldoni's avatar

Aloysius reopened request almost 7 years ago

Can't see the failure, could you please be more specific?


Olaf Hering's avatar

olh accepted request almost 7 years ago